📄 unzip.h
字号:
ulg csize;
ulg ucsize;
ush filename_length;
ush extra_field_length;
ush file_comment_length;
ush disk_number_start;
ush internal_file_attributes;
ulg external_file_attributes;
ulg relative_offset_local_header;
} cdir_file_hdr;
typedef struct end_central_dir_record { /* END CENTRAL */
ush number_this_disk;
ush num_disk_with_start_central_dir;
ush num_entries_centrl_dir_ths_disk;
ush total_entries_central_dir;
ulg size_central_directory;
ulg offset_start_central_directory;
ush zipfile_comment_length;
} ecdir_rec;
/*************************/
/* Function Prototypes */
/*************************/
#ifndef __
# define __ OF
#endif
/*---------------------------------------------------------------------------
Functions in unzip.c (main initialization/driver routines):
---------------------------------------------------------------------------*/
int uz_opts __((int *pargc, char ***pargv));
int usage __((int error));
int process_zipfiles __((void));
int do_seekable __((int lastchance));
int uz_end_central __((void));
//int process_cdir_file_hdr __((void));
//int process_local_file_hdr __((void));
/*---------------------------------------------------------------------------
Functions in zipinfo.c (zipfile-listing routines):
---------------------------------------------------------------------------*/
int zi_opts __((int *pargc, char ***pargv));
int zi_end_central __((void));
int zipinfo __((void));
/* static int zi_long __((void)); */
/* static int zi_short __((void)); */
/* static char *zi_time __((ush *datez, ush *timez)); */
ulg SizeOfEAs __((void *extra_field)); /* also in os2.c? */
int list_files __((void));
/* static int ratio __((ulg uc, ulg c)); */
/*---------------------------------------------------------------------------
Functions in file_io.c:
---------------------------------------------------------------------------*/
int open_input_file __((char *));
int open_outfile __((void)); /* also vms.c */
int readbuf __((char *buf, register unsigned len, ARCHIVE * arc));
int FillBitBuffer __((void));
int readbyte __((COMPRESSED_FILE * cmp));
#ifdef FUNZIP
int flush __((ulg size));
#else
int flush __((uch *buf, ulg size, int unshrink, COMPRESSED_FILE * cmp));
#endif
void handler __((int signal));
time_t dos_to_unix_time __((unsigned ddate, unsigned dtime));
int check_for_newer __((char *filename)); /* also os2.c, vms.c */
int find_end_central_dir __((long searchlen, ecdir_rec *, ARCHIVE * arc )); /* find_ecrec */
//int get_cdir_file_hdr __((void)); /* get_cdir_ent */
//int do_string __((unsigned int len, int option, char *buffer));
//ush makeword __((uch *b));
//ulg makelong __((uch *sig));
int zstrnicmp __((register char *s1, register char *s2, register int n));
#ifdef ZMEM /* MUST be ifdef'd because of conflicts with the standard def. */
char *memset __((register char *, register char, register unsigned int));
char *memcpy __((register char *, register char *, register unsigned int));
#endif
/*---------------------------------------------------------------------------
Functions in extract.c:
---------------------------------------------------------------------------*/
int extract_or_test_files __((char *file, char *outbuf, long *size));
/* static int store_info __((void)); */
/* static int extract_or_test_member __((void)); */
int memextract __((uch *, ulg, uch *, ulg));
int FlushMemory __((void));
int ReadMemoryByte __((ush *x));
/*---------------------------------------------------------------------------
Decompression functions:
---------------------------------------------------------------------------*/
int explode __((void)); /* explode.c */
int inflate __((COMPRESSED_FILE *)); /* inflate.c */
int inflate_free __((void)); /* inflate.c */
void unreduce __((void)); /* unreduce.c */
/* static void LoadFollowers __((void)); * unreduce.c */
int unshrink __((void)); /* unshrink.c */
/* static void partial_clear __((void)); * unshrink.c */
/*---------------------------------------------------------------------------
MSDOS-only functions:
---------------------------------------------------------------------------*/
#if (defined(__GO32__) || (defined(MSDOS) && defined(__EMX__)))
void _dos_setftime(int, unsigned short, unsigned short); /* msdos.c */
void _dos_setfileattr(char *, int); /* msdos.c */
unsigned _dos_creat(char *, unsigned, int *); /* msdos.c */
void _dos_getdrive(unsigned *); /* msdos.c */
unsigned _dos_close(int); /* msdos.c */
#endif
/*---------------------------------------------------------------------------
Miscellaneous/shared functions:
---------------------------------------------------------------------------*/
int match __((char *s, char *p, int ic)); /* match.c */
int iswild __((char *p)); /* match.c */
void envargs __((int *, char ***, char *)); /* envargs.c */
void mksargs __((int *, char ***)); /* envargs.c */
int dateformat __((void));
int mapattr __((void)); /* local */
int mapname __((int renamed)); /* local */
int checkdir __((char *pathcomp, int flag)); /* local */
char *do_wild __((char *wildzipfn)); /* local */
#ifndef MTS /* macro in MTS */
void close_outfile __((void)); /* local */
#endif
/************/
/* Macros */
/************/
#ifndef MAX
# define MAX(a,b) ((a) > (b) ? (a) : (b))
#endif
#ifndef MIN
# define MIN(a,b) ((a) < (b) ? (a) : (b))
#endif
#ifdef DEBUG
# define Trace(x) fprintf x
#else
# define Trace(x)
#endif
#if defined(UNIX) || defined(T20_VMS) /* generally old systems */
# define ToLower(x) ((char)(isupper((int)x)? tolower((int)x) : x))
#else
# define ToLower tolower /* assumed "smart"; used in match() */
#endif
#define LSEEK(abs_offset) {LONGINT request=(abs_offset)/*+extra_bytes*/,\
inbuf_offset=request%INBUFSIZ, bufstart=request-inbuf_offset;\
if(request<0) {/*fprintf(stderr, SeekMsg, ReportMsg); */return(3);}\
else if(bufstart!=cur_zipfile_bufstart)\
{cur_zipfile_bufstart=lseek(zipfd,(LONGINT)bufstart,SEEK_SET);\
if((incnt=read(zipfd,(char *)inbuf,INBUFSIZ))<=0) return(51);\
inptr=inbuf+(int)inbuf_offset; incnt-=(int)inbuf_offset;} else\
{incnt+=(inptr-inbuf)-(int)inbuf_offset; inptr=inbuf+(int)inbuf_offset;}}
/*
* Seek to the block boundary of the block which includes abs_offset,
* then read block into input buffer and set pointers appropriately.
* If block is already in the buffer, just set the pointers. This macro
* is used by process_end_central_dir (unzip.c) and do_string (file_io.c).
* A slightly modified version is embedded within extract_or_test_files
* (unzip.c). ReadByte and readbuf (file_io.c) are compatible.
*
* macro LSEEK(abs_offset)
* ulg abs_offset;
* {
* LONGINT request = abs_offset #+ extra_bytes;
* LONGINT inbuf_offset = request % INBUFSIZ;
* LONGINT bufstart = request - inbuf_offset;
*
* if (request < 0) {
* fprintf(stderr, SeekMsg, ReportMsg);
* return(3); /-* 3: severe error in zipfile *-/
* } else if (bufstart != cur_zipfile_bufstart) {
* cur_zipfile_bufstart = lseek(zipfd, (LONGINT)bufstart, SEEK_SET);
* if ((incnt = read(zipfd,inbuf,INBUFSIZ)) <= 0)
* return(51); /-* 51: unexpected EOF *-/
* inptr = inbuf + (int)inbuf_offset;
* incnt -= (int)inbuf_offset;
* } else {
* incnt += (inptr-inbuf) - (int)inbuf_offset;
* inptr = inbuf + (int)inbuf_offset;
* }
* }
*
*/
#define SKIP_(length) if(length&&((error=do_string(length,SKIP,NULL))!=0))\
{error_in_archive=error; if(error>1) return error;}
/*
* Skip a variable-length field, and report any errors. Used in zipinfo.c
* and unzip.c in several functions.
*
* macro SKIP_(length)
* ush length;
* {
* if (length && ((error = do_string(length, SKIP)) != 0)) {
* error_in_archive = error; /-* might be warning *-/
* if (error > 1) /-* fatal *-/
* return (error);
* }
* }
*
*/
#ifdef FUNZIP
# define FLUSH flush
# define NEXTBYTE getc(in) /* redefined in crypt.h if full version */
#else
# define FLUSH(w) /* if (mem_mode) outcnt=(w); else */ flush( cmp -> slide, (ulg)w, 0, cmp )
# define NEXTBYTE (cmp -> csize-- <= 0 ? EOF : (--cmp -> in_count >= 0 ? /* (*((int*)cmp -> in_ptr))++ */ *cmp -> in_ptr++: readbyte(cmp)))
#endif
/*
* Remove all the ASCII carriage returns from buffer buf (length len),
* shortening as necessary (note that len gets modified in the process,
* so it CANNOT be an expression). This macro is intended to be used
* *before* A_TO_N(); hence the check for CR instead of '\r'. NOTE: The
* if-test gets performed one time too many, but it doesn't matter.
*/
#define NUKE_CRs(buf,len) \
{ \
register int i, j; \
for (i = j = 0; j < len; (buf)[i++] = (buf)[j++]) \
if ((buf)[j] == CR) \
++j; \
len = i; \
}
/* GRR: should change name to STRLOWER and use StringLower if possible */
/*
* Copy the zero-terminated string in str1 into str2, converting any
* uppercase letters to lowercase as we go. str2 gets zero-terminated
* as well, of course. str1 and str2 may be the same character array.
*/
#ifdef __human68k__
# define TOLOWER(str1, str2) \
{ \
char *p=(str1), *q=(str2); \
uch c; \
while ((c = *p++) != '\0') { \
if (iskanji(c)) { \
if (*p == '\0') \
break; \
*q++ = c; \
*q++ = *p++; \
} else \
*q++ = isupper(c) ? tolower(c) : c; \
} \
*q = '\0'; \
}
#else
# define TOLOWER(str1, str2) \
{ \
char *p, *q; \
p = (str1) - 1; \
q = (str2); \
while (*++p) \
*q++ = (char)(isupper((int)(*p))? tolower((int)(*p)) : *p); \
*q = '\0'; \
}
#endif
/*
* NOTES: This macro makes no assumptions about the characteristics of
* the tolower() function or macro (beyond its existence), nor does it
* make assumptions about the structure of the character set (i.e., it
* should work on EBCDIC machines, too). The fact that either or both
* of isupper() and tolower() may be macros has been taken into account;
* watch out for "side effects" (in the C sense) when modifying this
* macro.
*/
#ifndef native
# define native(c) (c)
# define A_TO_N(str1)
#else
# ifndef NATIVE
# define NATIVE "native chars"
# endif
# define A_TO_N(str1) {register unsigned char *p;\
for (p=str1; *p; p++) *p=native(*p);}
#endif
/*
* Translate the zero-terminated string in str1 from ASCII to the native
* character set. The translation is performed in-place and uses the
* "native" macro to translate each character.
*
* macro A_TO_N( str1 )
* {
* register unsigned char *p;
*
* for (p = str1; *p; ++p)
* *p = native(*p);
* }
*
* NOTE: Using the "native" macro means that is it the only part of unzip
* which knows which translation table (if any) is actually in use to
* produce the native character set. This makes adding new character set
* translation tables easy, insofar as all that is needed is an appropriate
* "native" macro definition and the translation table itself. Currently,
* the only non-ASCII native character set implemented is EBCDIC, but this
* may not always be so.
*/
#endif /* !__unzip_h */
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -