⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 osdep.h

📁 给出了 zip 压缩算法的完整实现过程。
💻 H
字号:
/*  Copyright (c) 1990-2006 Info-ZIP.  All rights reserved.  See the accompanying file LICENSE, version 2004-May-22 or later  (the contents of which are also included in zip.h) for terms of use.  If, for some reason, both of these files are missing, the Info-ZIP license  also may be found at:  ftp://ftp.info-zip.org/pub/infozip/license.html*//* Automatic setting of the common Microsoft C idenfifier MSC. * NOTE: Watcom also defines M_I*86 ! */#if defined(_MSC_VER) || (defined(M_I86) && !defined(__WATCOMC__))#  ifndef MSC#    define MSC                 /* This should work for older MSC, too!  */#  endif#endif/* Tell Microsoft Visual C++ 2005 to leave us alone and * let us use standard C functions the way we're supposed to. */#if defined(_MSC_VER) && (_MSC_VER >= 1400)#  ifndef _CRT_SECURE_NO_DEPRECATE#    define _CRT_SECURE_NO_DEPRECATE#  endif#  ifndef _CRT_NONSTDC_NO_DEPRECATE#    define _CRT_NONSTDC_NO_DEPRECATE#  endif#endif#if defined(__WATCOMC__) && defined(__386__)#  define WATCOMC_386#endif#if (defined(__CYGWIN32__) && !defined(__CYGWIN__))#  define __CYGWIN__            /* compatibility for CygWin B19 and older */#endif/* enable multibyte character set support by default */#ifndef _MBCS#  define _MBCS#endif#if defined(__CYGWIN__)#  undef _MBCS#endif#ifndef MSDOS/* * Windows 95 (and Windows NT) file systems are (to some extend) * extensions of MSDOS. Common features include for example: *      FAT or (FAT like) file systems, *      '\\' as directory separator in paths, *      "\r\n" as record (line) terminator in text files, ... */#  define MSDOS/* inherit MS-DOS file system etc. stuff */#endif#define USE_CASE_MAP#define PROCNAME(n) (action == ADD || action == UPDATE ? wild(n) : \                     procname(n, 1))#define BROKEN_FSEEK#ifndef __RSXNT__#  define HAVE_FSEEKABLE#endif/* File operations--use "b" for binary if allowed or fixed length 512 on VMS *                  use "S" for sequential access on NT to prevent the NT *                  file cache eating up memory with large .zip files */#define FOPR "rb"#define FOPM "r+b"#define FOPW "wbS"#if (defined(__CYGWIN__) && !defined(NO_MKTIME))#  define NO_MKTIME             /* Cygnus' mktime() implementation is buggy */#endif#if (!defined(NT_TZBUG_WORKAROUND) && !defined(NO_NT_TZBUG_WORKAROUND))#  define NT_TZBUG_WORKAROUND#endif#if (defined(UTIL) && defined(NT_TZBUG_WORKAROUND))#  undef NT_TZBUG_WORKAROUND    /* the Zip utilities do not use time-stamps */#endif#if !defined(NO_EF_UT_TIME) && !defined(USE_EF_UT_TIME)#  define USE_EF_UT_TIME#endif#if (!defined(NO_NTSD_EAS) && !defined(NTSD_EAS))#  define NTSD_EAS#endif#if (defined(NTSD_EAS) && !defined(ZP_NEED_MEMCOMPR))#  define ZP_NEED_MEMCOMPR#endif#ifdef WINDLL# ifndef NO_ASM#   define NO_ASM# endif# ifndef MSWIN#   define MSWIN# endif# ifndef REENTRANT#   define REENTRANT# endif#endif /* WINDLL *//* Enable use of optimized x86 assembler version of longest_match() for   MSDOS, WIN32 and OS2 per default.  */#if !defined(NO_ASM) && !defined(ASMV)#  define ASMV#endif/* Enable use of optimized x86 assembler version of crc32() for   MSDOS, WIN32 and OS2 per default.  */#if !defined(NO_ASM) && !defined(ASM_CRC)  && !defined(NO_ASM_CRC)#  define ASM_CRC#endif#if !defined(__GO32__) && !defined(__EMX__) && !defined(__CYGWIN__)#  define NO_UNISTD_H#endif/* the following definitions are considered as "obsolete" by Microsoft and * might be missing in some versions of <windows.h> */#ifndef AnsiToOem#  define AnsiToOem CharToOemA#endif#ifndef OemToAnsi#  define OemToAnsi OemToCharA#endif#if (defined(__RSXNT__) && defined(__CRTRSXNT__))#  include <crtrsxnt.h>#endif/* Get types and stat */#include <sys/types.h>#include <sys/stat.h>#include <io.h>#ifdef _MBCS#  if (!defined(__EMX__) && !defined(__MINGW32__) && !defined(__CYGWIN__))#    include <stdlib.h>#    include <mbstring.h>#  endif#  if (defined(__MINGW32__) && !defined(MB_CUR_MAX))#    ifdef __MSVCRT__       extern int *__p___mb_cur_max(void);#      define MB_CUR_MAX (*__p___mb_cur_max())#    else       extern int *_imp____mb_cur_max_dll;#      define MB_CUR_MAX (*_imp____mb_cur_max_dll)#    endif#  endif#  if (defined(__LCC__) && !defined(MB_CUR_MAX))     extern int *_imp____mb_cur_max;#    define MB_CUR_MAX (*_imp____mb_cur_max)#  endif#endif#ifdef __LCC__#  include <time.h>#  ifndef tzset#    define tzset _tzset#  endif#  ifndef utime#    define utime _utime#  endif#endif#ifdef __MINGW32__   extern void _tzset(void);            /* this is missing in <time.h> */#  ifndef tzset#    define tzset _tzset#  endif#endif#if (defined(__RSXNT__) || defined(__EMX__)) && !defined(tzset)#  define tzset _tzset#endif#ifdef W32_USE_IZ_TIMEZONE#  ifdef __BORLANDC__#    define tzname tzname#    define IZTZ_DEFINESTDGLOBALS#  endif#  ifndef tzset#    define tzset _tzset#  endif#  ifndef timezone#    define timezone _timezone#  endif#  ifndef daylight#    define daylight _daylight#  endif#  ifndef tzname#    define tzname _tzname#  endif#  if (!defined(NEED__ISINDST) && !defined(__BORLANDC__))#    define NEED__ISINDST#  endif#  ifdef IZTZ_GETLOCALETZINFO#    undef IZTZ_GETLOCALETZINFO#  endif#  define IZTZ_GETLOCALETZINFO GetPlatformLocalTimezone#endif /* W32_USE_IZ_TIMEZONE */#ifdef MATCH#  undef MATCH#endif#define MATCH dosmatch          /* use DOS style wildcard matching */#ifdef ZCRYPT_INTERNAL#  ifdef WINDLL#    define ZCR_SEED2     (unsigned)3141592654L /* use PI as seed pattern */#  else#    include <process.h>        /* getpid() declaration for srand seed */#  endif#endif/* Up to now, all versions of Microsoft C runtime libraries lack the support * for customized (non-US) switching rules between daylight saving time and * standard time in the TZ environment variable string. * But non-US timezone rules are correctly supported when timezone information * is read from the OS system settings in the Win32 registry. * The following work-around deletes any TZ environment setting from * the process environment.  This results in a fallback of the RTL time * handling code to the (correctly interpretable) OS system settings, read * from the registry. */#ifdef USE_EF_UT_TIME# if (defined(__WATCOMC__) || defined(__CYGWIN__) || \      defined(W32_USE_IZ_TIMEZONE))#   define iz_w32_prepareTZenv()# else#   define iz_w32_prepareTZenv()        putenv("TZ=")# endif#endif/* This patch of stat() is useful for at least three compilers.  It is   *//* difficult to take a stat() of a root directory under Windows95, so  *//* zstat_zipwin32() detects that case and fills in suitable values.    */#ifndef __RSXNT__#  ifndef W32_STATROOT_FIX#    define W32_STATROOT_FIX#  endif#endif /* !__RSXNT__ */#if (defined(NT_TZBUG_WORKAROUND) || defined(W32_STATROOT_FIX))#  define W32_STAT_BANDAID   int zstat_zipwin32(const char *path, struct stat *buf);#  ifdef SSTAT#    undef SSTAT#  endif#  define SSTAT zstat_zipwin32#endif /* NT_TZBUG_WORKAROUND || W32_STATROOT_FIX */int getch_win32(void);#ifdef __GNUC__# define IZ_PACKED      __attribute__((packed))#else# define IZ_PACKED#endif/* for some (all ?) versions of IBM C Set/2 and IBM C Set++ */#ifndef S_IFMT#  define S_IFMT 0xF000#endif /* !S_IFMT */#ifdef __WATCOMC__#  include <stdio.h>    /* PATH_MAX is defined here */#  define NO_MKTEMP/* Get asm routines to link properly without using "__cdecl": */#  ifdef __386__#    ifdef ASMV#      pragma aux match_init    "_*" parm caller [] modify []#      pragma aux longest_match "_*" parm caller [] value [eax] \                                      modify [eax ecx edx]#    endif#    if defined(ASM_CRC) && !defined(USE_ZLIB)#      pragma aux crc32         "_*" parm caller [] value [eax] modify [eax]#      pragma aux get_crc_table "_*" parm caller [] value [eax] \                                      modify [eax ecx edx]#    endif /* ASM_CRC && !USE_ZLIB */#  endif /* __386__ */#endif /* __WATCOMC__ */

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -