summaryrefslogtreecommitdiff
path: root/Build/source/extra/unzip/globals.h
diff options
context:
space:
mode:
Diffstat (limited to 'Build/source/extra/unzip/globals.h')
-rw-r--r--Build/source/extra/unzip/globals.h395
1 files changed, 0 insertions, 395 deletions
diff --git a/Build/source/extra/unzip/globals.h b/Build/source/extra/unzip/globals.h
deleted file mode 100644
index 49439cffe7f..00000000000
--- a/Build/source/extra/unzip/globals.h
+++ /dev/null
@@ -1,395 +0,0 @@
-/*---------------------------------------------------------------------------
-
- globals.h
-
- There is usually no need to include this file since unzip.h includes it.
-
- This header file is used by all of the UnZip source files. It contains
- a struct definition that is used to "house" all of the global variables.
- This is done to allow for multithreaded environments (OS/2, NT, Win95,
- Unix) to call UnZip through an API without a semaphore. REENTRANT should
- be defined for all platforms that require this.
-
- GLOBAL CONSTRUCTOR AND DESTRUCTOR (API WRITERS READ THIS!!!)
- ------------------------------------------------------------
-
- No, it's not C++, but it's as close as we can get with K&R.
-
- The main() of each process that uses these globals must include the
- CONSTRUCTGLOBALS; statement. This will malloc enough memory for the
- structure and initialize any variables that require it. This must
- also be done by any API function that jumps into the middle of the
- code.
-
- The DESTROYGLOBALS; statement should be inserted before EVERY "EXIT(n)".
- Naturally, it also needs to be put before any API returns as well.
- In fact, it's much more important in API functions since the process
- will NOT end, and therefore the memory WON'T automatically be freed
- by the operating system.
-
- USING VARIABLES FROM THE STRUCTURE
- ----------------------------------
-
- All global variables must now be prefixed with `G.' which is either a
- global struct (in which case it should be the only global variable) or
- a macro for the value of a local pointer variable that is passed from
- function to function. Yes, this is a pain. But it's the only way to
- allow full reentrancy.
-
- ADDING VARIABLES TO THE STRUCTURE
- ---------------------------------
-
- If you make the inclusion of any variables conditional, be sure to only
- check macros that are GUARANTEED to be included in every module.
- For instance, newzip and pwdarg are needed only if CRYPT is TRUE,
- but this is defined after unzip.h has been read. If you are not careful,
- some modules will expect your variable to be part of this struct while
- others won't. This will cause BIG problems. (Inexplicable crashes at
- strange times, car fires, etc.) When in doubt, always include it!
-
- Note also that UnZipSFX needs a few variables that UnZip doesn't. However,
- it also includes some object files from UnZip. If we were to conditionally
- include the extra variables that UnZipSFX needs, the object files from
- UnZip would not mesh with the UnZipSFX object files. Result: we just
- include the UnZipSFX variables every time. (It's only an extra 4 bytes
- so who cares!)
-
- ADDING FUNCTIONS
- ----------------
-
- To support this new global struct, all functions must now conditionally
- pass the globals pointer (pG) to each other. This is supported by 5 macros:
- __GPRO, __GPRO__, __G, __G__ and __GDEF. A function that needs no other
- parameters would look like this:
-
- int extract_or_test_files(__G)
- __GDEF
- {
- ... stuff ...
- }
-
- A function with other parameters would look like:
-
- int memextract(__G__ tgt, tgtsize, src, srcsize)
- __GDEF
- uch *tgt, *src;
- ulg tgtsize, srcsize;
- {
- ... stuff ...
- }
-
- In the Function Prototypes section of unzpriv.h, you should use __GPRO and
- __GPRO__ instead:
-
- int uz_opts OF((__GPRO__ int *pargc, char ***pargv));
- int process_zipfiles OF((__GPRO));
-
- Note that there is NO comma after __G__ or __GPRO__ and no semi-colon after
- __GDEF. I wish there was another way but I don't think there is.
-
-
- TESTING THE CODE
- -----------------
-
- Whether your platform requires reentrancy or not, you should always try
- building with REENTRANT defined if any functions have been added. It is
- pretty easy to forget a __G__ or a __GDEF and this mistake will only show
- up if REENTRANT is defined. All platforms should run with REENTRANT
- defined. Platforms that can't take advantage of it will just be paying
- a performance penalty needlessly.
-
- SIGNAL MADNESS
- --------------
-
- This whole pointer passing scheme falls apart when it comes to SIGNALs.
- I handle this situation 2 ways right now. If you define USETHREADID,
- UnZip will include a 64-entry table. Each entry can hold a global
- pointer and thread ID for one thread. This should allow up to 64
- threads to access UnZip simultaneously. Calling DESTROYGLOBALS()
- will free the global struct and zero the table entry. If somebody
- forgets to call DESTROYGLOBALS(), this table will eventually fill up
- and UnZip will exit with an error message. A good way to test your
- code to make sure you didn't forget a DESTROYGLOBALS() is to change
- THREADID_ENTRIES to 3 or 4 in globals.c, making the table real small.
- Then make a small test program that calls your API a dozen times.
-
- Those platforms that don't have threads still need to be able to compile
- with REENTRANT defined to test and see if new code is correctly written
- to work either way. For these platforms, I simply keep a global pointer
- called GG that points to the Globals structure. Good enough for testing.
-
- I believe that NT has thread level storage. This could probably be used
- to store a global pointer for the sake of the signal handler more cleanly
- than my table approach.
-
- ---------------------------------------------------------------------------*/
-
-#ifndef __globals_h
-#define __globals_h
-
-#ifdef USE_ZLIB
-# include "zlib.h"
-#endif
-
-
-/*************/
-/* Globals */
-/*************/
-
-typedef struct Globals {
-#ifdef DLL
- zvoid *callerglobs; /* pointer to structure of pass-through global vars */
-#endif
-
- /* command options of general use */
- UzpOpts UzO; /* command options of general use */
-
-#ifndef FUNZIP
- /* command options specific to the high level command line interface */
-#ifdef MORE
- int M_flag; /* -M: built-in "more" function */
-#endif
-
- /* internal flags and general globals */
-#ifdef MORE
- int height; /* check for SIGWINCH, etc., eventually... */
-#endif /* (take line-wrapping into account?) */
-#if (defined(IZ_CHECK_TZ) && defined(USE_EF_UT_TIME))
- int tz_is_valid; /* indicates that timezone info can be used */
-#endif
-#ifdef WINDLL
- int prompt_always; /* prompt to overwrite if TRUE */
-#endif
- int noargs; /* did true command line have *any* arguments? */
- unsigned filespecs; /* number of real file specifications to be matched */
- unsigned xfilespecs; /* number of excluded filespecs to be matched */
- int process_all_files;
- int create_dirs; /* used by main(), mapname(), checkdir() */
- int extract_flag;
- int newzip; /* reset in extract.c; used in crypt.c */
- LONGINT real_ecrec_offset;
- LONGINT expect_ecrec_offset;
- long csize; /* used by decompr. (NEXTBYTE): must be signed */
- long ucsize; /* used by unReduce(), explode() */
- long used_csize; /* used by extract_or_test_member(), explode() */
-
-#ifdef DLL
- int fValidate; /* true if only validating an archive */
- int filenotfound;
- int redirect_data; /* redirect data to memory buffer */
- int redirect_text; /* redirect text output to buffer */
-# ifndef NO_SLIDE_REDIR
- int redirect_slide; /* redirect decompression area to mem buffer */
- unsigned _wsize;
-# endif
- unsigned redirect_size; /* size of redirected output buffer */
- uch *redirect_buffer; /* pointer to head of allocated buffer */
- uch *redirect_pointer; /* pointer past end of written data */
-# ifndef NO_SLIDE_REDIR
- uch *redirect_sldptr; /* head of decompression slide buffer */
-# endif
-# ifdef OS2DLL
- cbList(processExternally); /* call-back list */
-# endif
-#endif /* DLL */
-
- char **pfnames;
- char **pxnames;
- char sig[4];
- char answerbuf[10];
- min_info info[DIR_BLKSIZ];
- min_info *pInfo;
-#endif /* !FUNZIP */
- union work area; /* see unzpriv.h for definition of work */
-
-#ifndef FUNZIP
-# if (!defined(USE_ZLIB) || defined(USE_OWN_CRCTAB))
- ZCONST ulg near *crc_32_tab;
-# else
- ZCONST ulg Far *crc_32_tab;
-# endif
-#endif
- ulg crc32val; /* CRC shift reg. (was static in funzip) */
-
-#ifdef FUNZIP
- FILE *in; /* file descriptor of compressed stream */
-#endif
- uch *inbuf; /* input buffer (any size is OK) */
- uch *inptr; /* pointer into input buffer */
- int incnt;
-
-#ifndef FUNZIP
- ulg bitbuf;
- int bits_left; /* unreduce and unshrink only */
- int zipeof;
- char *argv0; /* used for NT and EXE_EXTENSION */
- char *wildzipfn;
- char *zipfn; /* GRR: WINDLL: must nuke any malloc'd zipfn... */
-#ifdef USE_STRM_INPUT
- FILE *zipfd; /* zipfile file descriptor */
-#else
- int zipfd; /* zipfile file handle */
-#endif
- LONGINT ziplen;
- LONGINT cur_zipfile_bufstart; /* extract_or_test, readbuf, ReadByte */
- LONGINT extra_bytes; /* used in unzip.c, misc.c */
- uch *extra_field; /* Unix, VMS, Mac, OS/2, Acorn, ... */
- uch *hold;
-
- local_file_hdr lrec; /* used in unzip.c, extract.c */
- cdir_file_hdr crec; /* used in unzip.c, extract.c, misc.c */
- ecdir_rec ecrec; /* used in unzip.c, extract.c */
- struct stat statbuf; /* used by main, mapname, check_for_newer */
-
- int mem_mode;
- uch *outbufptr; /* extract.c static */
- ulg outsize; /* extract.c static */
- int reported_backslash; /* extract.c static */
- int disk_full;
- int newfile;
-
- int didCRlast; /* fileio static */
- ulg numlines; /* fileio static: number of lines printed */
- int sol; /* fileio static: at start of line */
- int no_ecrec; /* process static */
-#ifdef SYMLINKS
- int symlnk;
-#endif
-#ifdef NOVELL_BUG_FAILSAFE
- int dne; /* true if stat() says file doesn't exist */
-#endif
-
- FILE *outfile;
- uch *outbuf;
- uch *realbuf;
-
-#ifndef VMS /* if SMALL_MEM, outbuf2 is initialized in */
- uch *outbuf2; /* process_zipfiles() (never changes); */
-#endif /* else malloc'd ONLY if unshrink and -a */
-#endif /* !FUNZIP */
- uch *outptr;
- ulg outcnt; /* number of chars stored in outbuf */
-#ifndef FUNZIP
- char filename[FILNAMSIZ]; /* also used by NT for temporary SFX path */
-
-#ifdef CMS_MVS
- char *tempfn; /* temp file used; erase on close */
-#endif
-
- char *key; /* crypt static: decryption password or NULL */
- int nopwd; /* crypt static */
-#endif /* !FUNZIP */
- ulg keys[3]; /* crypt static: keys defining pseudo-random sequence */
-
-#if (!defined(DOS_FLX_H68_OS2_W32) && !defined(AMIGA) && !defined(RISCOS))
-#if (!defined(MACOS) && !defined(ATARI) && !defined(VMS))
- int echofd; /* ttyio static: file descriptor whose echo is off */
-#endif /* !(MACOS || ATARI || VMS) */
-#endif /* !(DOS_FLX_H68_OS2_W32 || AMIGA || RISCOS) */
-
- unsigned hufts; /* track memory usage */
-
-#ifdef USE_ZLIB
- int inflInit; /* inflate static: zlib inflate() initialized */
- z_stream dstrm; /* inflate global: decompression stream */
-#else
- struct huft *fixed_tl; /* inflate static */
- struct huft *fixed_td; /* inflate static */
- int fixed_bl, fixed_bd; /* inflate static */
- unsigned wp; /* inflate static: current position in slide */
- ulg bb; /* inflate static: bit buffer */
- unsigned bk; /* inflate static: bits in bit buffer */
-#endif /* ?USE_ZLIB */
-
-#ifndef FUNZIP
-#ifdef SMALL_MEM
- char rgchBigBuffer[512];
- char rgchSmallBuffer[96];
- char rgchSmallBuffer2[160]; /* boosted to 160 for local3[] in unzip.c */
-#endif
-
- MsgFn *message;
- InputFn *input;
- PauseFn *mpause;
- PasswdFn *decr_passwd;
- StatCBFn *statreportcb;
-#ifdef WINDLL
- LPUSERFUNCTIONS lpUserFunctions;
-#endif
-
- int incnt_leftover; /* so improved NEXTBYTE does not waste input */
- uch *inptr_leftover;
-
-#ifdef VMS_TEXT_CONV
- int VMS_line_state; /* so native VMS variable-length text files are */
- int VMS_line_length; /* readable on other platforms */
- int VMS_line_pad;
-#endif
-#endif /* !FUNZIP */
-
-#ifdef SYSTEM_SPECIFIC_GLOBALS
- SYSTEM_SPECIFIC_GLOBALS
-#endif
-
-} Uz_Globs; /* end of struct Globals */
-
-
-/***************************************************************************/
-
-
-#ifdef FUNZIP
-# if (!defined(USE_ZLIB) || defined(USE_OWN_CRCTAB))
- extern ZCONST ulg near crc_32_tab[256];
-# else
- extern ZCONST ulg Far *crc_32_tab;
-# endif
-# define CRC_32_TAB crc_32_tab
-#else
-# define CRC_32_TAB G.crc_32_tab
-#endif
-
-
-Uz_Globs *globalsCtor OF((void));
-
-/* pseudo constant sigs; they are initialized at runtime so unzip executable
- * won't look like a zipfile
- */
-extern char local_hdr_sig[4];
-extern char central_hdr_sig[4];
-extern char end_central_sig[4];
-/* extern char extd_local_sig[4]; NOT USED YET */
-
-#ifdef REENTRANT
-# define G (*(Uz_Globs *)pG)
-# define __G pG
-# define __G__ pG,
-# define __GPRO Uz_Globs *pG
-# define __GPRO__ Uz_Globs *pG,
-# define __GDEF Uz_Globs *pG;
-# ifdef USETHREADID
- extern int lastScan;
- void deregisterGlobalPointer OF((__GPRO));
- Uz_Globs *getGlobalPointer OF((void));
-# define GETGLOBALS() Uz_Globs *pG = getGlobalPointer();
-# define DESTROYGLOBALS() {free_G_buffers(pG); deregisterGlobalPointer(pG);}
-# else
- extern Uz_Globs *GG;
-# define GETGLOBALS() Uz_Globs *pG = GG;
-# define DESTROYGLOBALS() {free_G_buffers(pG); free(pG);}
-# endif /* ?USETHREADID */
-# define CONSTRUCTGLOBALS() Uz_Globs *pG = globalsCtor()
-#else /* !REENTRANT */
- extern Uz_Globs G;
-# define __G
-# define __G__
-# define __GPRO void
-# define __GPRO__
-# define __GDEF
-# define GETGLOBALS()
-# define CONSTRUCTGLOBALS() globalsCtor()
-# define DESTROYGLOBALS()
-#endif /* ?REENTRANT */
-
-#define uO G.UzO
-
-#endif /* __globals_h */