Archive-Unzip-Burst
view release on metacpan or search on metacpan
unzip-6.0/unzpriv.h view on Meta::CPAN
# if (!defined(VMS_TEXT_CONV) && !defined(SFX))
# define VMS_TEXT_CONV
# endif
#endif
/* Enable -B option per default on specific systems, to allow backing up
* files that would be overwritten.
* (This list of systems must be kept in sync with the list of systems
* that add the B_flag to the UzpOpts structure, see unzip.h.)
*/
#if (!defined(NO_UNIXBACKUP) && !defined(UNIXBACKUP))
# if defined(UNIX) || defined(OS2) || defined(WIN32)
# define UNIXBACKUP
# endif
#endif
#if (defined(DLL) && !defined(REENTRANT))
# define REENTRANT
#endif
#if (!defined(DYNAMIC_CRC_TABLE) && !defined(FUNZIP))
# define DYNAMIC_CRC_TABLE
#endif
#if (defined(DYNAMIC_CRC_TABLE) && !defined(REENTRANT))
# ifndef DYNALLOC_CRCTAB
# define DYNALLOC_CRCTAB
# endif
#endif
/*---------------------------------------------------------------------------
OS-dependent configuration for UnZip internals
---------------------------------------------------------------------------*/
/* Some compiler distributions for Win32/i386 systems try to emulate
* a Unix (POSIX-compatible) environment.
*/
#if (defined(WIN32) && defined(UNIX))
/* UnZip does not support merging both ports in a single executable. */
# if (defined(FORCE_WIN32_OVER_UNIX) && defined(FORCE_UNIX_OVER_WIN32))
/* conflicting choice requests -> we prefer the Win32 environment */
# undef FORCE_UNIX_OVER_WIN32
# endif
# ifdef FORCE_WIN32_OVER_UNIX
/* native Win32 support was explicitly requested... */
# undef UNIX
# else
/* use the POSIX (Unix) emulation features by default... */
# undef WIN32
# endif
#endif
/* bad or (occasionally?) missing stddef.h: */
#if (defined(M_XENIX) || defined(DNIX))
# define NO_STDDEF_H
#endif
#if (defined(M_XENIX) && !defined(M_UNIX)) /* SCO Xenix only, not SCO Unix */
# define SCO_XENIX
# define NO_LIMITS_H /* no limits.h, but MODERN defined */
# define NO_UID_GID /* no uid_t/gid_t */
# define size_t int
#endif
#ifdef realix /* Modcomp Real/IX, real-time SysV.3 variant */
# define SYSV
# define NO_UID_GID /* no uid_t/gid_t */
#endif
#if (defined(_AIX) && !defined(_ALL_SOURCE))
# define _ALL_SOURCE
#endif
#if defined(apollo) /* defines __STDC__ */
# define NO_STDLIB_H
#endif
#ifdef DNIX
# define SYSV
# define SHORT_NAMES /* 14-char limitation on path components */
/* # define FILENAME_MAX 14 */
# define FILENAME_MAX NAME_MAX /* GRR: experiment */
#endif
#if (defined(SYSTEM_FIVE) || defined(__SYSTEM_FIVE))
# ifndef SYSV
# define SYSV
# endif
#endif /* SYSTEM_FIVE || __SYSTEM_FIVE */
#if (defined(M_SYSV) || defined(M_SYS5))
# ifndef SYSV
# define SYSV
# endif
#endif /* M_SYSV || M_SYS5 */
/* __SVR4 and __svr4__ catch Solaris on at least some combos of compiler+OS */
#if (defined(__SVR4) || defined(__svr4__) || defined(sgi) || defined(__hpux))
# ifndef SYSV
# define SYSV
# endif
#endif /* __SVR4 || __svr4__ || sgi || __hpux */
#if (defined(LINUX) || defined(__QNX__))
# ifndef SYSV
# define SYSV
# endif
#endif /* LINUX || __QNX__ */
#if (defined(ultrix) || defined(__ultrix) || defined(bsd4_2))
# if (!defined(BSD) && !defined(SYSV))
# define BSD
# endif
#endif /* ultrix || __ultrix || bsd4_2 */
#if (defined(sun) || defined(pyr) || defined(CONVEX))
# if (!defined(BSD) && !defined(SYSV))
# define BSD
# endif
#endif /* sun || pyr || CONVEX */
#ifdef pyr /* Pyramid: has BSD and AT&T "universes" */
# ifdef BSD
# define pyr_bsd
# define USE_STRINGS_H /* instead of more common string.h */
# define ZMEM /* ZMEM now uses bcopy/bzero: not in AT&T universe */
# endif /* (AT&T memcpy claimed to be very slow, though) */
# define DECLARE_ERRNO
#endif /* pyr */
/* stat() bug for Borland, VAX C RTL, and Atari ST MiNT on TOS
unzip-6.0/unzpriv.h view on Meta::CPAN
#define DF_MDY 0 /* date format 10/26/91 (USA only) */
#define DF_DMY 1 /* date format 26/10/91 (most of the world) */
#define DF_YMD 2 /* date format 91/10/26 (a few countries) */
/*---------------------------------------------------------------------------
Extra-field block ID values and offset info.
---------------------------------------------------------------------------*/
/* extra-field ID values, all little-endian: */
#define EF_PKSZ64 0x0001 /* PKWARE's 64-bit filesize extensions */
#define EF_AV 0x0007 /* PKWARE's authenticity verification */
#define EF_EFS 0x0008 /* PKWARE's extended language encoding */
#define EF_OS2 0x0009 /* OS/2 extended attributes */
#define EF_PKW32 0x000a /* PKWARE's Win95/98/WinNT filetimes */
#define EF_PKVMS 0x000c /* PKWARE's VMS */
#define EF_PKUNIX 0x000d /* PKWARE's Unix */
#define EF_PKFORK 0x000e /* PKWARE's future stream/fork descriptors */
#define EF_PKPATCH 0x000f /* PKWARE's patch descriptor */
#define EF_PKPKCS7 0x0014 /* PKWARE's PKCS#7 store for X.509 Certs */
#define EF_PKFX509 0x0015 /* PKWARE's file X.509 Cert&Signature ID */
#define EF_PKCX509 0x0016 /* PKWARE's central dir X.509 Cert ID */
#define EF_PKENCRHD 0x0017 /* PKWARE's Strong Encryption header */
#define EF_PKRMCTL 0x0018 /* PKWARE's Record Management Controls*/
#define EF_PKLSTCS7 0x0019 /* PKWARE's PKCS#7 Encr. Recipient Cert List */
#define EF_PKIBM 0x0065 /* PKWARE's IBM S/390 & AS/400 attributes */
#define EF_PKIBM2 0x0066 /* PKWARE's IBM S/390 & AS/400 compr. attribs */
#define EF_IZVMS 0x4d49 /* Info-ZIP's VMS ("IM") */
#define EF_IZUNIX 0x5855 /* Info-ZIP's first Unix[1] ("UX") */
#define EF_IZUNIX2 0x7855 /* Info-ZIP's second Unix[2] ("Ux") */
#define EF_IZUNIX3 0x7875 /* Info-ZIP's newest Unix[3] ("ux") */
#define EF_TIME 0x5455 /* universal timestamp ("UT") */
#define EF_UNIPATH 0x7075 /* Info-ZIP Unicode Path ("up") */
#define EF_UNICOMNT 0x6375 /* Info-ZIP Unicode Comment ("uc") */
#define EF_MAC3 0x334d /* Info-ZIP's new Macintosh (= "M3") */
#define EF_JLMAC 0x07c8 /* Johnny Lee's old Macintosh (= 1992) */
#define EF_ZIPIT 0x2605 /* Thomas Brown's Macintosh (ZipIt) */
#define EF_ZIPIT2 0x2705 /* T. Brown's Mac (ZipIt) v 1.3.8 and newer ? */
#define EF_SMARTZIP 0x4d63 /* Mac SmartZip by Marco Bambini */
#define EF_VMCMS 0x4704 /* Info-ZIP's VM/CMS ("\004G") */
#define EF_MVS 0x470f /* Info-ZIP's MVS ("\017G") */
#define EF_ACL 0x4c41 /* (OS/2) access control list ("AL") */
#define EF_NTSD 0x4453 /* NT security descriptor ("SD") */
#define EF_ATHEOS 0x7441 /* AtheOS ("At") */
#define EF_BEOS 0x6542 /* BeOS ("Be") */
#define EF_QDOS 0xfb4a /* SMS/QDOS ("J\373") */
#define EF_AOSVS 0x5356 /* AOS/VS ("VS") */
#define EF_SPARK 0x4341 /* David Pilling's Acorn/SparkFS ("AC") */
#define EF_TANDEM 0x4154 /* Tandem NSK ("TA") */
#define EF_THEOS 0x6854 /* Jean-Michel Dubois' Theos "Th" */
#define EF_THEOSO 0x4854 /* old Theos port */
#define EF_MD5 0x4b46 /* Fred Kantor's MD5 ("FK") */
#define EF_ASIUNIX 0x756e /* ASi's Unix ("nu") */
#define EB_HEADSIZE 4 /* length of extra field block header */
#define EB_ID 0 /* offset of block ID in header */
#define EB_LEN 2 /* offset of data length field in header */
#define EB_UCSIZE_P 0 /* offset of ucsize field in compr. data */
#define EB_CMPRHEADLEN 6 /* lenght of compression header */
#define EB_UX_MINLEN 8 /* minimal "UX" field contains atime, mtime */
#define EB_UX_FULLSIZE 12 /* full "UX" field (atime, mtime, uid, gid) */
#define EB_UX_ATIME 0 /* offset of atime in "UX" extra field data */
#define EB_UX_MTIME 4 /* offset of mtime in "UX" extra field data */
#define EB_UX_UID 8 /* byte offset of UID in "UX" field data */
#define EB_UX_GID 10 /* byte offset of GID in "UX" field data */
#define EB_UX2_MINLEN 4 /* minimal "Ux" field contains UID/GID */
#define EB_UX2_UID 0 /* byte offset of UID in "Ux" field data */
#define EB_UX2_GID 2 /* byte offset of GID in "Ux" field data */
#define EB_UX2_VALID (1 << 8) /* UID/GID present */
#define EB_UX3_MINLEN 7 /* minimal "ux" field size (2-byte UID/GID) */
#define EB_UT_MINLEN 1 /* minimal UT field contains Flags byte */
#define EB_UT_FLAGS 0 /* byte offset of Flags field */
#define EB_UT_TIME1 1 /* byte offset of 1st time value */
#define EB_UT_FL_MTIME (1 << 0) /* mtime present */
#define EB_UT_FL_ATIME (1 << 1) /* atime present */
#define EB_UT_FL_CTIME (1 << 2) /* ctime present */
#define EB_FLGS_OFFS 4 /* offset of flags area in generic compressed
extra field blocks (BEOS, MAC, and others) */
#define EB_OS2_HLEN 4 /* size of OS2/ACL compressed data header */
#define EB_BEOS_HLEN 5 /* length of BeOS&AtheOS e.f attribute header */
#define EB_BE_FL_UNCMPR 0x01 /* "BeOS&AtheOS attribs uncompr." bit flag */
#define EB_MAC3_HLEN 14 /* length of Mac3 attribute block header */
#define EB_SMARTZIP_HLEN 64 /* fixed length of the SmartZip extra field */
#define EB_M3_FL_DATFRK 0x01 /* "this entry is data fork" flag */
#define EB_M3_FL_UNCMPR 0x04 /* "Mac3 attributes uncompressed" bit flag */
#define EB_M3_FL_TIME64 0x08 /* "Mac3 time fields are 64 bit wide" flag */
#define EB_M3_FL_NOUTC 0x10 /* "Mac3 timezone offset fields missing" flag */
#define EB_NTSD_C_LEN 4 /* length of central NT security data */
#define EB_NTSD_L_LEN 5 /* length of minimal local NT security data */
#define EB_NTSD_VERSION 4 /* offset of NTSD version byte */
#define EB_NTSD_MAX_VER (0) /* maximum version # we know how to handle */
#define EB_ASI_CRC32 0 /* offset of ASI Unix field's crc32 checksum */
#define EB_ASI_MODE 4 /* offset of ASI Unix permission mode field */
#define EB_IZVMS_HLEN 12 /* length of IZVMS attribute block header */
#define EB_IZVMS_FLGS 4 /* offset of compression type flag */
#define EB_IZVMS_UCSIZ 6 /* offset of ucsize field in IZVMS header */
#define EB_IZVMS_BCMASK 07 /* 3 bits for compression type */
#define EB_IZVMS_BCSTOR 0 /* Stored */
#define EB_IZVMS_BC00 1 /* 0byte -> 0bit compression */
#define EB_IZVMS_BCDEFL 2 /* Deflated */
/*---------------------------------------------------------------------------
True sizes of the various headers (excluding their 4-byte signatures),
as defined by PKWARE--so it is not likely that these will ever change.
But if they do, make sure both these defines AND the typedefs below get
updated accordingly.
12/27/2006
The Zip64 End Of Central Directory record is variable size and now
comes in two flavors, version 1 and the new version 2 that supports
central directory encryption. We only use the old fields at the
top of the Zip64 EOCDR, and this block is a fixed size still, but
need to be aware of the stuff following.
unzip-6.0/unzpriv.h view on Meta::CPAN
# endif
# define Z_UINT8_DEFINED
# endif
#endif
#ifndef Z_UINT4_DEFINED
# if (defined(MODERN) && !defined(NO_LIMITS_H))
# if (defined(UINT_MAX) && (UINT_MAX == 0xffffffffUL))
typedef unsigned int z_uint4;
# define Z_UINT4_DEFINED
# else
# if (defined(ULONG_MAX) && (ULONG_MAX == 0xffffffffUL))
typedef unsigned long z_uint4;
# define Z_UINT4_DEFINED
# else
# if (defined(USHRT_MAX) && (USHRT_MAX == 0xffffffffUL))
typedef unsigned short z_uint4;
# define Z_UINT4_DEFINED
# endif
# endif
# endif
# endif /* MODERN && !NO_LIMITS_H */
#endif /* !Z_UINT4_DEFINED */
#ifndef Z_UINT4_DEFINED
typedef ulg z_uint4;
# define Z_UINT4_DEFINED
#endif
/* The following three user-defined unsigned integer types are used for
holding zipfile entities (required widths without / with Zip64 support):
a) sizes and offset of zipfile entries
(4 bytes / 8 bytes)
b) enumeration and counts of zipfile entries
(2 bytes / 8 bytes)
Remark: internally, we use 4 bytes for archive member counting in the
No-Zip64 case, because UnZip supports more than 64k entries for
classic Zip archives without Zip64 extensions.
c) enumeration and counts of zipfile volumes of multivolume archives
(2 bytes / 4 bytes)
*/
#ifdef ZIP64_SUPPORT
typedef z_uint8 zusz_t; /* zipentry sizes & offsets */
typedef z_uint8 zucn_t; /* archive entry counts */
typedef z_uint4 zuvl_t; /* multivolume numbers */
# define MASK_ZUCN64 (~(zucn_t)0)
/* In case we ever get to support an environment where z_uint8 may be WIDER
than 64 bit wide, we will have to apply a construct similar to
#define MASK_ZUCN64 (~(zucn_t)0 & (zucn_t)0xffffffffffffffffULL)
for the 64-bit mask.
*/
#else
typedef ulg zusz_t; /* zipentry sizes & offsets */
typedef unsigned int zucn_t; /* archive entry counts */
typedef unsigned short zuvl_t; /* multivolume numbers */
# define MASK_ZUCN64 (~(zucn_t)0)
#endif
#define MASK_ZUCN16 ((zucn_t)0xFFFF)
#ifdef NO_UID_GID
# ifdef UID_USHORT
typedef unsigned short uid_t; /* TI SysV.3 */
typedef unsigned short gid_t;
# else
typedef unsigned int uid_t; /* SCO Xenix */
typedef unsigned int gid_t;
# endif
#endif
#if (defined(GOT_UTIMBUF) || defined(sgi) || defined(ATARI))
typedef struct utimbuf ztimbuf;
#else
typedef struct ztimbuf {
time_t actime; /* new access time */
time_t modtime; /* new modification time */
} ztimbuf;
#endif
typedef struct iztimes {
time_t atime; /* new access time */
time_t mtime; /* new modification time */
time_t ctime; /* used for creation time; NOT same as st_ctime */
} iztimes;
#ifdef SET_DIR_ATTRIB
typedef struct direntry { /* head of system-specific struct holding */
struct direntry *next; /* defered directory attributes info */
char *fn; /* filename of directory */
char buf[1]; /* start of system-specific internal data */
} direntry;
#endif /* SET_DIR_ATTRIB */
#ifdef SYMLINKS
typedef struct slinkentry { /* info for deferred symlink creation */
struct slinkentry *next; /* pointer to next entry in chain */
extent targetlen; /* length of target filespec */
extent attriblen; /* length of system-specific attrib data */
char *target; /* pointer to target filespec */
char *fname; /* pointer to name of link */
char buf[1]; /* data/name/link buffer */
} slinkentry;
#endif /* SYMLINKS */
typedef struct min_info {
zoff_t offset;
zusz_t compr_size; /* compressed size (needed if extended header) */
zusz_t uncompr_size; /* uncompressed size (needed if extended header) */
ulg crc; /* crc (needed if extended header) */
zuvl_t diskstart; /* no of volume where this entry starts */
uch hostver;
uch hostnum;
unsigned file_attr; /* local flavor, as used by creat(), chmod()... */
unsigned encrypted : 1; /* file encrypted: decrypt before uncompressing */
unsigned ExtLocHdr : 1; /* use time instead of CRC for decrypt check */
unsigned textfile : 1; /* file is text (according to zip) */
unsigned textmode : 1; /* file is to be extracted as text */
unsigned lcflag : 1; /* convert filename to lowercase */
unsigned vollabel : 1; /* "file" is an MS-DOS volume (disk) label */
#ifdef SYMLINKS
unsigned symlink : 1; /* file is a symbolic link */
#endif
unsigned HasUxAtt : 1; /* crec ext_file_attr has Unix style mode bits */
#ifdef UNICODE_SUPPORT
unsigned GPFIsUTF8: 1; /* crec gen_purpose_flag UTF-8 bit 11 is set */
#endif
#ifndef SFX
unzip-6.0/unzpriv.h view on Meta::CPAN
} v;
};
typedef struct _APIDocStruct {
char *compare;
char *function;
char *syntax;
char *purpose;
} APIDocStruct;
/*************/
/* Globals */
/*************/
#if (defined(OS2) && !defined(FUNZIP))
# include "os2/os2data.h"
#endif
#include "globals.h"
/*************************/
/* Function Prototypes */
/*************************/
/*---------------------------------------------------------------------------
Functions in unzip.c (initialization routines):
---------------------------------------------------------------------------*/
#ifndef WINDLL
int MAIN OF((int argc, char **argv));
int unzip OF((__GPRO__ int argc, char **argv));
int uz_opts OF((__GPRO__ int *pargc, char ***pargv));
int usage OF((__GPRO__ int error));
#endif /* !WINDLL */
/*---------------------------------------------------------------------------
Functions in process.c (main driver routines):
---------------------------------------------------------------------------*/
int process_zipfiles OF((__GPRO));
void free_G_buffers OF((__GPRO));
/* static int do_seekable OF((__GPRO__ int lastchance)); */
/* static int find_ecrec OF((__GPRO__ long searchlen)); */
/* static int process_central_comment OF((__GPRO)); */
int process_cdir_file_hdr OF((__GPRO));
int process_local_file_hdr OF((__GPRO));
int getZip64Data OF((__GPRO__ ZCONST uch *ef_buf,
unsigned ef_len));
#ifdef UNICODE_SUPPORT
int getUnicodeData OF((__GPRO__ ZCONST uch *ef_buf,
unsigned ef_len));
#endif
unsigned ef_scan_for_izux OF((ZCONST uch *ef_buf, unsigned ef_len,
int ef_is_c, ulg dos_mdatetime,
iztimes *z_utim, ulg *z_uidgid));
#if (defined(RISCOS) || defined(ACORN_FTYPE_NFS))
zvoid *getRISCOSexfield OF((ZCONST uch *ef_buf, unsigned ef_len));
#endif
#ifndef SFX
/*---------------------------------------------------------------------------
Functions in zipinfo.c (`zipinfo-style' listing routines):
---------------------------------------------------------------------------*/
#ifndef NO_ZIPINFO
#ifndef WINDLL
int zi_opts OF((__GPRO__ int *pargc, char ***pargv));
#endif
void zi_end_central OF((__GPRO));
int zipinfo OF((__GPRO));
/* static int zi_long OF((__GPRO__ zusz_t *pEndprev)); */
/* static int zi_short OF((__GPRO)); */
/* static char *zi_time OF((__GPRO__ ZCONST ulg *datetimez,
ZCONST time_t *modtimez, char *d_t_str));*/
#endif /* !NO_ZIPINFO */
/*---------------------------------------------------------------------------
Functions in list.c (generic zipfile-listing routines):
---------------------------------------------------------------------------*/
int list_files OF((__GPRO));
#ifdef TIMESTAMP
int get_time_stamp OF((__GPRO__ time_t *last_modtime,
ulg *nmember));
#endif
int ratio OF((zusz_t uc, zusz_t c));
void fnprint OF((__GPRO));
#endif /* !SFX */
/*---------------------------------------------------------------------------
Functions in fileio.c:
---------------------------------------------------------------------------*/
int open_input_file OF((__GPRO));
int open_outfile OF((__GPRO)); /* also vms.c */
void undefer_input OF((__GPRO));
void defer_leftover_input OF((__GPRO));
unsigned readbuf OF((__GPRO__ char *buf, register unsigned len));
int readbyte OF((__GPRO));
int fillinbuf OF((__GPRO));
int seek_zipf OF((__GPRO__ zoff_t abs_offset));
#ifdef FUNZIP
int flush OF((__GPRO__ ulg size)); /* actually funzip.c */
#else
int flush OF((__GPRO__ uch *buf, ulg size, int unshrink));
#endif
/* static int disk_error OF((__GPRO)); */
void handler OF((int signal));
time_t dos_to_unix_time OF((ulg dos_datetime));
int check_for_newer OF((__GPRO__ char *filename)); /* os2,vmcms,vms */
int do_string OF((__GPRO__ unsigned int length, int option));
ush makeword OF((ZCONST uch *b));
ulg makelong OF((ZCONST uch *sig));
( run in 1.546 second using v1.01-cache-2.11-cpan-140bd7fdf52 )