libextractor  1.11
About: GNU libextractor is a library used to extract meta-data from files of arbitrary type.
  Fossies Dox: libextractor-1.11.tar.gz  ("unofficial" and yet experimental doxygen-generated source code documentation)  

Loading...
Searching...
No Matches
unzip.c File Reference

API to access ZIP archives. More...

#include "platform.h"
#include <ctype.h>
#include "extractor.h"
#include "unzip.h"
Include dependency graph for unzip.c:

Go to the source code of this file.

Data Structures

struct  FileFuncDefs
 
struct  GlobalInfo
 
struct  UnzipFileInfoInternal
 
struct  FileInZipReadInfo
 
struct  EXTRACTOR_UnzipFile
 

Macros

#define CASESENSITIVITY   (0)
 
#define MAXFILENAME   (256)
 
#define UNZ_BUFSIZE   (16384)
 
#define UNZ_MAXFILENAMEINZIP   (256)
 
#define SIZECENTRALDIRITEM   (0x2e)
 
#define SIZEZIPLOCALHEADER   (0x1e)
 
#define ZREAD(filefunc, buf, size)
 
#define ZTELL(filefunc)   ((*((filefunc).ztell_file))((filefunc).opaque))
 
#define ZSEEK(filefunc, pos, mode)
 
#define CASESENSITIVITYDEFAULT_NO
 
#define CASESENSITIVITYDEFAULTVALUE   2
 
#define BUFREADCOMMENT   (0x400)
 

Functions

static int read_byte_from_ffd (const struct FileFuncDefs *ffd, int *pi)
 
static int read_short_from_ffd (const struct FileFuncDefs *ffd, uLong *pX)
 
static int read_long_from_ffd (const struct FileFuncDefs *ffd, uLong *pX)
 
static int EXTRACTOR_common_unzip_string_file_name_compare (const char *fileName1, const char *fileName2, int iCaseSensitivity)
 
static uLong locate_central_directory (const struct FileFuncDefs *ffd)
 
static void dos_date_to_tmu_date (uLong ulDosDate, struct EXTRACTOR_UnzipDateTimeInfo *ptm)
 
static int get_current_file_info (struct EXTRACTOR_UnzipFile *file, struct EXTRACTOR_UnzipFileInfo *pfile_info, struct UnzipFileInfoInternal *pfile_info_internal, char *szFileName, uLong fileNameBufferSize, void *extraField, uLong extraFieldBufferSize, char *szComment, uLong commentBufferSize)
 
int EXTRACTOR_common_unzip_go_to_first_file (struct EXTRACTOR_UnzipFile *file)
 
static struct EXTRACTOR_UnzipFileunzip_open_using_ffd (struct FileFuncDefs *ffd)
 
int EXTRACTOR_common_unzip_close_current_file (struct EXTRACTOR_UnzipFile *file)
 
int EXTRACTOR_common_unzip_close (struct EXTRACTOR_UnzipFile *file)
 
int EXTRACTOR_common_unzip_get_global_comment (struct EXTRACTOR_UnzipFile *file, char *comment, size_t comment_len)
 
int EXTRACTOR_common_unzip_get_current_file_info (struct EXTRACTOR_UnzipFile *file, struct EXTRACTOR_UnzipFileInfo *pfile_info, char *szFileName, uLong fileNameBufferSize, void *extraField, uLong extraFieldBufferSize, char *szComment, uLong commentBufferSize)
 
int EXTRACTOR_common_unzip_go_to_next_file (struct EXTRACTOR_UnzipFile *file)
 
int EXTRACTOR_common_unzip_go_find_local_file (struct EXTRACTOR_UnzipFile *file, const char *szFileName, int iCaseSensitivity)
 
ssize_t EXTRACTOR_common_unzip_read_current_file (struct EXTRACTOR_UnzipFile *file, void *buf, size_t len)
 
static int parse_current_file_coherency_header (struct EXTRACTOR_UnzipFile *file, uInt *piSizeVar, uLong *poffset_local_extrafield, uInt *psize_local_extrafield)
 
int EXTRACTOR_common_unzip_open_current_file (struct EXTRACTOR_UnzipFile *file)
 
static uLong ec_read_file_func (voidpf opaque, void *buf, uLong size)
 
static long ec_tell_file_func (voidpf opaque)
 
static long ec_seek_file_func (voidpf opaque, uLong offset, int origin)
 
struct EXTRACTOR_UnzipFileEXTRACTOR_common_unzip_open (struct EXTRACTOR_ExtractContext *ec)
 

Detailed Description

API to access ZIP archives.

Author
Christian Grothoff

This code is based in part on unzip 1.00 Copyright 1998-2003 Gilles Vollant http://www.winimage.com/zLibDll"

The filenames for each file in a zipfile are stored in two locations. There is one at the start of each entry, just before the compressed data, and another at the end in a 'central directory structure'.

In order to catch self-extracting executables, we scan backwards from the end of the file looking for the central directory structure. The previous version of this went forewards through the local headers, but that only works for plain vanilla zip's and I don't feel like writing a special case for each of the dozen self-extracting executable stubs.

This assumes that the zip file is considered to be non-corrupt/non-truncated. If it is truncated then it's not considered to be a zip and skipped.

ZIP format description from appnote.iz and appnote.txt (more or less):

(this is why you always need to put in the last floppy if you span disks)

0- 3 end of central dir signature 4 bytes (0x06054b50) P K ^E ^F 4- 5 number of this disk 2 bytes 6- 7 number of the disk with the start of the central directory 2 bytes 8- 9 total number of entries in the central dir on this disk 2 bytes 10-11 total number of entries in the central dir 2 bytes 12-15 size of the central directory 4 bytes 16-19 offset of start of central directory with respect to the starting disk number 4 bytes 20-21 zipfile comment length 2 bytes 22-?? zipfile comment (variable size) max length 65536 bytes

Definition in file unzip.c.

Macro Definition Documentation

◆ BUFREADCOMMENT

#define BUFREADCOMMENT   (0x400)

Definition at line 454 of file unzip.c.

◆ CASESENSITIVITY

#define CASESENSITIVITY   (0)

Definition at line 67 of file unzip.c.

◆ CASESENSITIVITYDEFAULT_NO

#define CASESENSITIVITYDEFAULT_NO

Definition at line 419 of file unzip.c.

◆ CASESENSITIVITYDEFAULTVALUE

#define CASESENSITIVITYDEFAULTVALUE   2

Definition at line 424 of file unzip.c.

◆ MAXFILENAME

#define MAXFILENAME   (256)

Definition at line 68 of file unzip.c.

◆ SIZECENTRALDIRITEM

#define SIZECENTRALDIRITEM   (0x2e)

Definition at line 78 of file unzip.c.

◆ SIZEZIPLOCALHEADER

#define SIZEZIPLOCALHEADER   (0x1e)

Definition at line 79 of file unzip.c.

◆ UNZ_BUFSIZE

#define UNZ_BUFSIZE   (16384)

Definition at line 71 of file unzip.c.

◆ UNZ_MAXFILENAMEINZIP

#define UNZ_MAXFILENAMEINZIP   (256)

Definition at line 75 of file unzip.c.

◆ ZREAD

#define ZREAD (   filefunc,
  buf,
  size 
)
Value:
((*((filefunc).zread_file))((filefunc).opaque, \
buf, size))

Macro to read using filefunc API.

Parameters
filefuncfilefunc struct
bufwhere to write data
sizenumber of bytes to read
Returns
number of bytes copied to buf

Definition at line 117 of file unzip.c.

◆ ZSEEK

#define ZSEEK (   filefunc,
  pos,
  mode 
)
Value:
((*((filefunc).zseek_file))((filefunc).opaque, \
pos, mode))

Macro to seek using filefunc API.

Parameters
filefuncfilefunc struct
posposition to seek
modeseek mode
Returns
0 on success

Definition at line 136 of file unzip.c.

◆ ZTELL

#define ZTELL (   filefunc)    ((*((filefunc).ztell_file))((filefunc).opaque))

Macro to obtain current offset in file using filefunc API.

Parameters
filefuncfilefunc struct
Returns
current offset in file

Definition at line 126 of file unzip.c.

Function Documentation

◆ dos_date_to_tmu_date()

static void dos_date_to_tmu_date ( uLong  ulDosDate,
struct EXTRACTOR_UnzipDateTimeInfo ptm 
)
static

Translate date/time from Dos format to struct EXTRACTOR_UnzipDateTimeInfo (readable more easilty)

Parameters
ulDosDatetime in DOS format (input)
ptmwhere to write time in readable format

Definition at line 516 of file unzip.c.

References EXTRACTOR_UnzipDateTimeInfo::tm_hour, EXTRACTOR_UnzipDateTimeInfo::tm_mday, EXTRACTOR_UnzipDateTimeInfo::tm_min, EXTRACTOR_UnzipDateTimeInfo::tm_mon, EXTRACTOR_UnzipDateTimeInfo::tm_sec, and EXTRACTOR_UnzipDateTimeInfo::tm_year.

Referenced by get_current_file_info().

◆ ec_read_file_func()

static uLong ec_read_file_func ( voidpf  opaque,
void *  buf,
uLong  size 
)
static

Callback to perform read operation using LE API. Note that partial reads are not allowed.

Parameters
opaquethe 'struct EXTRACTOR_ExtractContext'
bufwhere to write bytes read
sizenumber of bytes desired
Returns
number of bytes copied to buf

Definition at line 1353 of file unzip.c.

References EXTRACTOR_ExtractContext::cls, and EXTRACTOR_ExtractContext::read.

Referenced by EXTRACTOR_common_unzip_open().

◆ ec_seek_file_func()

static long ec_seek_file_func ( voidpf  opaque,
uLong  offset,
int  origin 
)
static

Callback to perform seek operation using LE API.

Parameters
opaquethe 'struct EXTRACTOR_ExtractContext'
offsetwhere to seek
originrelative to where should we seek
Returns
EXTRACTOR_UNZIP_OK on success

Definition at line 1401 of file unzip.c.

References EXTRACTOR_ExtractContext::cls, EXTRACTOR_UNZIP_INTERNALERROR, EXTRACTOR_UNZIP_OK, and EXTRACTOR_ExtractContext::seek.

Referenced by EXTRACTOR_common_unzip_open().

◆ ec_tell_file_func()

static long ec_tell_file_func ( voidpf  opaque)
static

Callback to obtain current offset in file using LE API.

Parameters
opaquethe 'struct EXTRACTOR_ExtractContext'
Returns
current offset in file, -1 on error

Definition at line 1384 of file unzip.c.

References EXTRACTOR_ExtractContext::cls, and EXTRACTOR_ExtractContext::seek.

Referenced by EXTRACTOR_common_unzip_open().

◆ EXTRACTOR_common_unzip_close()

int EXTRACTOR_common_unzip_close ( struct EXTRACTOR_UnzipFile file)

Close a ZipFile.

Parameters
filezip file to close
Returns
EXTRACTOR_UNZIP_OK if there is no problem.

Definition at line 854 of file unzip.c.

References EXTRACTOR_common_unzip_close_current_file(), EXTRACTOR_UNZIP_OK, EXTRACTOR_UNZIP_PARAMERROR, NULL, and EXTRACTOR_UnzipFile::pfile_in_zip_read.

Referenced by EXTRACTOR_odf_extract_method(), and EXTRACTOR_zip_extract_method().

◆ EXTRACTOR_common_unzip_close_current_file()

◆ EXTRACTOR_common_unzip_get_current_file_info()

int EXTRACTOR_common_unzip_get_current_file_info ( struct EXTRACTOR_UnzipFile file,
struct EXTRACTOR_UnzipFileInfo pfile_info,
char *  szFileName,
uLong  fileNameBufferSize,
void *  extraField,
uLong  extraFieldBufferSize,
char *  szComment,
uLong  commentBufferSize 
)

Write info about the ZipFile in the *pglobal_info structure. No preparation of the structure is needed.

Parameters
filezipfile to manipulate
pfile_infofile information to initialize
szFileNamewhere to write the name of the current file
fileNameBufferSizenumber of bytes available in szFileName
extraFieldwhere to write extra data
extraFieldBufferSizenumber of bytes available in extraField
szCommentwhere to write the comment on the current file
commentBufferSizenumber of bytes available in szComment
Returns
EXTRACTOR_UNZIP_OK if there is no problem.

Definition at line 908 of file unzip.c.

References get_current_file_info(), and NULL.

Referenced by EXTRACTOR_common_unzip_go_find_local_file(), EXTRACTOR_odf_extract_method(), EXTRACTOR_zip_extract_method(), and libextractor_oo_getmimetype().

◆ EXTRACTOR_common_unzip_get_global_comment()

int EXTRACTOR_common_unzip_get_global_comment ( struct EXTRACTOR_UnzipFile file,
char *  comment,
size_t  comment_len 
)

Obtain the global comment from a ZIP file.

Parameters
fileunzip file to inspect
commentwhere to copy the comment
comment_lenmaximum number of bytes available in comment
Returns
EXTRACTOR_UNZIP_OK on success

Definition at line 874 of file unzip.c.

References EXTRACTOR_UNZIP_ERRNO, EXTRACTOR_UNZIP_OK, EXTRACTOR_UNZIP_PARAMERROR, EXTRACTOR_UnzipFile::gi, NULL, GlobalInfo::offset_comment, GlobalInfo::size_comment, EXTRACTOR_UnzipFile::z_filefunc, ZREAD, and ZSEEK.

Referenced by EXTRACTOR_zip_extract_method().

◆ EXTRACTOR_common_unzip_go_find_local_file()

int EXTRACTOR_common_unzip_go_find_local_file ( struct EXTRACTOR_UnzipFile file,
const char *  szFileName,
int  iCaseSensitivity 
)

Try locate the file szFileName in the zipfile.

Parameters
filezipfile to manipulate
szFileNamename to find
iCaseSensitivity,use1 for case sensitivity (like strcmp); 2 for no case sensitivity (like strcmpi or strcasecmp); or 0 for default of your operating system (like 1 on Unix, 2 on Windows)
Returns
EXTRACTOR_UNZIP_OK if the file is found. It becomes the current file. EXTRACTOR_UNZIP_END_OF_LIST_OF_FILE if the file is not found

Definition at line 969 of file unzip.c.

References EXTRACTOR_UnzipFile::cur_file_info, EXTRACTOR_UnzipFile::cur_file_info_internal, EXTRACTOR_UnzipFile::current_file_ok, EXTRACTOR_common_unzip_get_current_file_info(), EXTRACTOR_common_unzip_go_to_first_file(), EXTRACTOR_common_unzip_go_to_next_file(), EXTRACTOR_common_unzip_string_file_name_compare(), EXTRACTOR_UNZIP_END_OF_LIST_OF_FILE, EXTRACTOR_UNZIP_OK, EXTRACTOR_UNZIP_PARAMERROR, NULL, EXTRACTOR_UnzipFile::num_file, EXTRACTOR_UnzipFile::pos_in_central_dir, and UNZ_MAXFILENAMEINZIP.

Referenced by EXTRACTOR_odf_extract_method(), EXTRACTOR_zip_extract_method(), and libextractor_oo_getmimetype().

◆ EXTRACTOR_common_unzip_go_to_first_file()

int EXTRACTOR_common_unzip_go_to_first_file ( struct EXTRACTOR_UnzipFile file)

◆ EXTRACTOR_common_unzip_go_to_next_file()

◆ EXTRACTOR_common_unzip_open()

struct EXTRACTOR_UnzipFile * EXTRACTOR_common_unzip_open ( struct EXTRACTOR_ExtractContext ec)

Open a zip file for processing using the data access functions from the extract context.

Parameters
ecextract context to use
Returns
handle to zip data, NULL on error

Definition at line 1421 of file unzip.c.

References ec_read_file_func(), ec_seek_file_func(), ec_tell_file_func(), FileFuncDefs::opaque, unzip_open_using_ffd(), FileFuncDefs::zread_file, FileFuncDefs::zseek_file, and FileFuncDefs::ztell_file.

Referenced by EXTRACTOR_odf_extract_method(), and EXTRACTOR_zip_extract_method().

◆ EXTRACTOR_common_unzip_open_current_file()

int EXTRACTOR_common_unzip_open_current_file ( struct EXTRACTOR_UnzipFile file)

◆ EXTRACTOR_common_unzip_read_current_file()

ssize_t EXTRACTOR_common_unzip_read_current_file ( struct EXTRACTOR_UnzipFile file,
void *  buf,
size_t  len 
)

Read bytes from the current file (must have been opened).

Parameters
bufcontain buffer where data must be copied
lenthe size of buf.
Returns
the number of byte copied if some bytes are copied 0 if the end of file was reached <0 with error code if there is an error (EXTRACTOR_UNZIP_ERRNO for IO error, or zLib error for uncompress error)

Definition at line 1038 of file unzip.c.

References FileInZipReadInfo::byte_before_the_zipfile, FileInZipReadInfo::compression_method, FileInZipReadInfo::crc32, EXTRACTOR_UNZIP_END_OF_LIST_OF_FILE, EXTRACTOR_UNZIP_EOF, EXTRACTOR_UNZIP_ERRNO, EXTRACTOR_UNZIP_OK, EXTRACTOR_UNZIP_PARAMERROR, NULL, EXTRACTOR_UnzipFile::pfile_in_zip_read, FileInZipReadInfo::pos_in_zipfile, FileInZipReadInfo::read_buffer, FileInZipReadInfo::rest_read_compressed, FileInZipReadInfo::rest_read_uncompressed, FileInZipReadInfo::stream, UNZ_BUFSIZE, FileInZipReadInfo::z_filefunc, ZREAD, and ZSEEK.

Referenced by EXTRACTOR_odf_extract_method(), and libextractor_oo_getmimetype().

◆ EXTRACTOR_common_unzip_string_file_name_compare()

static int EXTRACTOR_common_unzip_string_file_name_compare ( const char *  fileName1,
const char *  fileName2,
int  iCaseSensitivity 
)
static

Compare two filenames (fileName1, fileName2).

Parameters
filename1name of first file
filename2name of second file
iCaseSensitivity,use1 for case sensitivity (like strcmp); 2 for no case sensitivity (like strcmpi or strcasecmp); or 0 for default of your operating system (like 1 on Unix, 2 on Windows)
Returns
0 if names are equal

Definition at line 441 of file unzip.c.

References CASESENSITIVITYDEFAULTVALUE.

Referenced by EXTRACTOR_common_unzip_go_find_local_file().

◆ get_current_file_info()

static int get_current_file_info ( struct EXTRACTOR_UnzipFile file,
struct EXTRACTOR_UnzipFileInfo pfile_info,
struct UnzipFileInfoInternal pfile_info_internal,
char *  szFileName,
uLong  fileNameBufferSize,
void *  extraField,
uLong  extraFieldBufferSize,
char *  szComment,
uLong  commentBufferSize 
)
static

Write info about the ZipFile in the *pglobal_info structure. No preparation of the structure is needed.

Parameters
filezipfile to manipulate
pfile_infofile information to initialize
pfile_info_internalinternal file information to initialize
szFileNamewhere to write the name of the current file
fileNameBufferSizenumber of bytes available in szFileName
extraFieldwhere to write extra data
extraFieldBufferSizenumber of bytes available in extraField
szCommentwhere to write the comment on the current file
commentBufferSizenumber of bytes available in szComment
Returns
EXTRACTOR_UNZIP_OK if there is no problem.

Definition at line 547 of file unzip.c.

References EXTRACTOR_UnzipFile::byte_before_the_zipfile, EXTRACTOR_UnzipFileInfo::compressed_size, EXTRACTOR_UnzipFileInfo::compression_method, EXTRACTOR_UnzipFileInfo::crc, EXTRACTOR_UnzipFileInfo::disk_num_start, dos_date_to_tmu_date(), EXTRACTOR_UnzipFileInfo::dosDate, EXTRACTOR_UnzipFileInfo::external_fa, EXTRACTOR_UNZIP_BADZIPFILE, EXTRACTOR_UNZIP_ERRNO, EXTRACTOR_UNZIP_OK, EXTRACTOR_UNZIP_PARAMERROR, EXTRACTOR_UnzipFileInfo::flag, EXTRACTOR_UnzipFileInfo::internal_fa, NULL, UnzipFileInfoInternal::offset_curfile, EXTRACTOR_UnzipFile::pos_in_central_dir, read_long_from_ffd(), read_short_from_ffd(), EXTRACTOR_UnzipFileInfo::size_file_comment, EXTRACTOR_UnzipFileInfo::size_file_extra, EXTRACTOR_UnzipFileInfo::size_filename, EXTRACTOR_UnzipFileInfo::tmu_date, EXTRACTOR_UnzipFileInfo::uncompressed_size, EXTRACTOR_UnzipFileInfo::version, EXTRACTOR_UnzipFileInfo::version_needed, EXTRACTOR_UnzipFile::z_filefunc, ZREAD, and ZSEEK.

Referenced by EXTRACTOR_common_unzip_get_current_file_info(), EXTRACTOR_common_unzip_go_to_first_file(), and EXTRACTOR_common_unzip_go_to_next_file().

◆ locate_central_directory()

static uLong locate_central_directory ( const struct FileFuncDefs ffd)
static

Locate the central directory in the ZIP file.

Parameters
ffdIO functions
Returns
offset of central directory, 0 on error

Definition at line 465 of file unzip.c.

References BUFREADCOMMENT, ZREAD, ZSEEK, and ZTELL.

Referenced by unzip_open_using_ffd().

◆ parse_current_file_coherency_header()

static int parse_current_file_coherency_header ( struct EXTRACTOR_UnzipFile file,
uInt *  piSizeVar,
uLong *  poffset_local_extrafield,
uInt *  psize_local_extrafield 
)
static

Read the local header of the current zipfile. Check the coherency of the local header and info in the end of central directory about this file. Store in *piSizeVar the size of extra info in local header (filename and size of extra field data)

Parameters
filezipfile to process
piSizeVarwhere to store the size of the extra info
poffset_local_extrafieldwhere to store the offset of the local extrafield
psoze_local_extrafieldwhere to store the size of the local extrafield
Returns
EXTRACTOR_UNZIP_OK on success

Definition at line 1173 of file unzip.c.

References EXTRACTOR_UnzipFile::byte_before_the_zipfile, EXTRACTOR_UnzipFileInfo::compressed_size, EXTRACTOR_UnzipFileInfo::compression_method, EXTRACTOR_UnzipFileInfo::crc, EXTRACTOR_UnzipFile::cur_file_info, EXTRACTOR_UnzipFile::cur_file_info_internal, EXTRACTOR_UNZIP_BADZIPFILE, EXTRACTOR_UNZIP_ERRNO, EXTRACTOR_UNZIP_OK, UnzipFileInfoInternal::offset_curfile, read_long_from_ffd(), read_short_from_ffd(), EXTRACTOR_UnzipFileInfo::size_filename, SIZEZIPLOCALHEADER, EXTRACTOR_UnzipFileInfo::uncompressed_size, EXTRACTOR_UnzipFile::z_filefunc, and ZSEEK.

Referenced by EXTRACTOR_common_unzip_open_current_file().

◆ read_byte_from_ffd()

static int read_byte_from_ffd ( const struct FileFuncDefs ffd,
int *  pi 
)
static

Read a byte from a gz_stream; update next_in and avail_in. Return EOF for end of file. IN assertion: the stream s has been successfully opened for reading.

Parameters
ffdfunctions for performing IO operations
piwhere to store the byte that was read
Returns
EXTRACTOR_UNZIP_OK on success, or EXTRACTOR_UNZIP_EOF

Definition at line 341 of file unzip.c.

References EXTRACTOR_UNZIP_EOF, EXTRACTOR_UNZIP_OK, and ZREAD.

Referenced by read_long_from_ffd(), and read_short_from_ffd().

◆ read_long_from_ffd()

static int read_long_from_ffd ( const struct FileFuncDefs ffd,
uLong *  pX 
)
static

Read a 'long' (4 bytes) from a gz_stream; update next_in and avail_in. Return EOF for end of file. IN assertion: the stream s has been successfully opened for reading.

Parameters
ffdfunctions for performing IO operations
piwhere to store the long that was read
Returns
EXTRACTOR_UNZIP_OK on success, or EXTRACTOR_UNZIP_EOF

Definition at line 392 of file unzip.c.

References EXTRACTOR_UNZIP_OK, and read_byte_from_ffd().

Referenced by get_current_file_info(), parse_current_file_coherency_header(), and unzip_open_using_ffd().

◆ read_short_from_ffd()

static int read_short_from_ffd ( const struct FileFuncDefs ffd,
uLong *  pX 
)
static

Read a short (2 bytes) from a gz_stream; update next_in and avail_in. Return EOF for end of file. IN assertion: the stream s has been successfully opened for reading.

Parameters
ffdfunctions for performing IO operations
piwhere to store the short that was read
Returns
EXTRACTOR_UNZIP_OK on success, or EXTRACTOR_UNZIP_EOF

Definition at line 363 of file unzip.c.

References EXTRACTOR_UNZIP_OK, and read_byte_from_ffd().

Referenced by get_current_file_info(), parse_current_file_coherency_header(), and unzip_open_using_ffd().

◆ unzip_open_using_ffd()