Rizin
unix-like reverse engineering framework and cli tools
zip_fdopen.c File Reference
#include "zipint.h"

Go to the source code of this file.

Functions

ZIP_EXTERN zip_tzip_fdopen (int fd_orig, int _flags, int *zep)
 

Function Documentation

◆ zip_fdopen()

ZIP_EXTERN zip_t* zip_fdopen ( int  fd_orig,
int  _flags,
int zep 
)

Definition at line 42 of file zip_fdopen.c.

42  {
43  int fd;
44  FILE *fp;
45  zip_t *za;
47  struct zip_error error;
48 
49  if (_flags < 0 || (_flags & ~(ZIP_CHECKCONS | ZIP_RDONLY))) {
51  return NULL;
52  }
53 
54  /* We dup() here to avoid messing with the passed in fd.
55  We could not restore it to the original state in case of error. */
56 
57  if ((fd = dup(fd_orig)) < 0) {
59  return NULL;
60  }
61 
62  if ((fp = fdopen(fd, "rb")) == NULL) {
63  close(fd);
65  return NULL;
66  }
67 
69  if ((src = zip_source_filep_create(fp, 0, -1, &error)) == NULL) {
70  fclose(fp);
71  _zip_set_open_error(zep, &error, 0);
73  return NULL;
74  }
75 
76  if ((za = zip_open_from_source(src, _flags, &error)) == NULL) {
78  _zip_set_open_error(zep, &error, 0);
80  return NULL;
81  }
82 
84  close(fd_orig);
85  return za;
86 }
lzma_index * src
Definition: index.h:567
#define NULL
Definition: cris-opc.c:27
static static fork const void static count close
Definition: sflib.h:33
#define ZIP_ER_OPEN
Definition: zip.h:116
ZIP_EXTERN zip_t *_Nullable zip_open_from_source(zip_source_t *_Nonnull, int, zip_error_t *_Nullable)
Definition: zip_open.c:79
#define ZIP_CHECKCONS
Definition: zip.h:69
#define ZIP_RDONLY
Definition: zip.h:71
ZIP_EXTERN void zip_error_init(zip_error_t *_Nonnull)
Definition: zip_error.c:59
ZIP_EXTERN zip_source_t *_Nullable zip_source_filep_create(FILE *_Nonnull, zip_uint64_t, zip_int64_t, zip_error_t *_Nullable)
ZIP_EXTERN void zip_error_fini(zip_error_t *_Nonnull)
Definition: zip_error.c:52
#define ZIP_ER_INVAL
Definition: zip.h:123
ZIP_EXTERN void zip_source_free(zip_source_t *_Nullable)
static static fork const void static count static fd const char const char static newpath char char char static envp time_t static t const char static mode static whence const char static dir time_t static t unsigned static seconds const char struct utimbuf static buf static inc static sig const char static mode dup
Definition: sflib.h:68
string FILE
Definition: benchmark.py:21
Definition: zip.h:284
Definition: zipint.h:278
void error(const char *msg)
Definition: untgz.c:593
static const z80_opcode fd[]
Definition: z80_tab.h:997
void _zip_set_open_error(int *zep, const zip_error_t *err, int ze)
Definition: zip_open.c:217
zip_t * za
Definition: ziptool.c:79

References _zip_set_open_error(), close, dup, error(), fd, benchmark::FILE, NULL, src, za, ZIP_CHECKCONS, ZIP_ER_INVAL, ZIP_ER_OPEN, zip_error_fini(), zip_error_init(), zip_open_from_source(), ZIP_RDONLY, zip_source_filep_create(), and zip_source_free().

Referenced by read_from_file().