1 /* 2 Copyright (c) 1990-2009 Info-ZIP. All rights reserved. 3 4 See the accompanying file LICENSE, version 2009-Jan-02 or later 5 (the contents of which are also included in unzip.h) for terms of use. 6 If, for some reason, all these files are missing, the Info-ZIP license 7 also may be found at: ftp://ftp.info-zip.org/pub/infozip/license.html 8 */ 9 /*--------------------------------------------------------------------------- 10 WinCE "command line tool" specific configuration section: 11 ---------------------------------------------------------------------------*/ 12 13 #ifndef __wcecfg_h 14 #define __wcecfg_h 15 16 /*--------------------------------------------------------------------------- 17 Standard Win32 project flags 18 ---------------------------------------------------------------------------*/ 19 20 #ifdef _WIN32_WCE /* for native Windows CE, force UNICODE mode */ 21 #ifndef UNICODE 22 #define UNICODE 23 #endif 24 #endif /* _WIN32_WCE */ 25 26 // for UnZip, the "basic" part of the win32 api is sufficient 27 #ifndef WIN32_LEAN_AND_MEAN 28 #define WIN32_LEAN_AND_MEAN 29 #endif 30 31 #if defined(_UNICODE) && !defined(UNICODE) 32 #define UNICODE 33 #endif 34 35 #if defined(UNICODE) && !defined(_UNICODE) 36 #define _UNICODE 37 #endif 38 39 #if defined(_DEBUG) && !defined(DEBUG) 40 #define DEBUG 41 #endif 42 43 #if defined(DEBUG) && !defined(_DEBUG) 44 #define _DEBUG 45 #endif 46 47 #if defined(_NDEBUG) && !defined(NDEBUG) 48 #define NDEBUG 49 #endif 50 51 #if defined(NDEBUG) && !defined(_NDEBUG) 52 #define _NDEBUG 53 #endif 54 55 //****************************************************************************** 56 //***** Common Info-ZIP UnZip feature/configuration flags 57 //****************************************************************************** 58 59 // Windows CE environment allows support for UTC time stamps 60 #ifndef USE_EF_UT_TIME 61 #define USE_EF_UT_TIME 62 #endif 63 64 // NTFS extended attributes support is not available on Windows CE 65 #ifndef NO_NTSD_EAS 66 #define NO_NTSD_EAS 67 #endif 68 69 #ifdef NTSD_EAS 70 #undef NTSD_EAS 71 #endif 72 73 #ifdef _WIN32_WCE 74 // Windows CE does not provide the rename() function needed for UNIXBACKUP 75 # ifndef NO_UNIXBACKUP 76 # define NO_UNIXBACKUP 77 # endif 78 # ifdef UNIXBACKUP 79 # undef UNIXBACKUP 80 # endif 81 #endif 82 83 #if (!defined(NO_UNICODE_SUPPORT) && !defined(UNICODE_SUPPORT)) 84 #define UNICODE_SUPPORT 85 #endif 86 #if (defined(UNICODE_SUPPORT) && !defined(UNICODE_WCHAR)) 87 #define UNICODE_WCHAR /* wchar_t is UTF-16 encoded on WinCE */ 88 #endif 89 #ifdef UTF8_MAYBE_NATIVE 90 #undef UTF8_MAYBE_NATIVE /* UTF-8 cannot be system charset on WinCE */ 91 #endif 92 93 #ifdef POCKET_UNZIP 94 // The PUnZip GUI interface does not make use of ZipInfo style archive 95 // listings. 96 // For the command-line tool, it may be considered to disable ZipInfo, too, 97 // to save memory and resources. 98 # ifndef NO_ZIPINFO 99 # define NO_ZIPINFO 100 # endif 101 #endif 102 103 #ifndef POCKET_UNZIP 104 // CE does not support exception handling model 105 # define NO_EXCEPT_SIGNALS 106 # define MAIN main_stub 107 #endif 108 109 //****************************************************************************** 110 //***** Global defines, constants, and macros 111 //****************************************************************************** 112 113 #if (defined(_MSC_VER) && !defined(MSC)) 114 #define MSC 115 #endif 116 117 #ifndef PATH_MAX 118 #define PATH_MAX _MAX_PATH 119 #endif 120 121 // WinCE uses ISO 8859-1 as codepage for 8-bit chars 122 #define CRTL_CP_IS_ISO 123 // The functionality of ISO <--> OEM conversion IS needed on WinCE, too!! 124 // (Otherwise, extended ASCII filenames and passwords in archives coming 125 // from other platforms may not be handled properly.) 126 // Since WinCE does not supply ISO <--> OEM conversion, we try to fall 127 // back to the hardcoded tables in the generic UnZip code. 128 129 #define ASCII2OEM(c) (((c) & 0x80) ? iso2oem[(c) & 0x7f] : (c)) 130 #if !defined(IZ_ISO2OEM_ARRAY) 131 # define IZ_ISO2OEM_ARRAY 132 #endif 133 #if !defined(CRYP_USES_ISO2OEM) 134 # define CRYP_USES_ISO2OEM 135 #endif 136 137 #define OEM_TO_INTERN(src, dst) {if ((src) != (dst)) strcpy((dst), (src));} 138 #define INTERN_TO_ISO(src, dst) {if ((src) != (dst)) strcpy((dst), (src));} 139 #define INTERN_TO_OEM(src, dst) {register uch c;\ 140 register uch *dstp = (uch *)(dst), *srcp = (uch *)(src);\ 141 do {\ 142 c = (uch)foreign(*srcp++);\ 143 *dstp++ = (uch)ASCII2OEM(c);\ 144 } while (c != '\0');} 145 146 #if defined(UNICODE) 147 # define MBSTOTSTR mbstowcs 148 # define TSTRTOMBS wcstombs 149 #else 150 # define MBSTOTSTR strncpy 151 # define TSTRTOMBS strncpy 152 #endif 153 154 155 #if (defined(_MBCS) && !defined(_WIN32_WCE)) 156 /* MSC-specific version, _mbsinc() may not be available for other systems */ 157 # define CLEN(ptr) _mbclen((const UCHAR *)(ptr)) 158 # define PREINCSTR(ptr) (ptr = (char *)_mbsinc((const UCHAR *)(ptr))) 159 # define MBSCHR(str, c) (char *)_mbschr((const UCHAR *)(str), (c)) 160 # define MBSRCHR(str, c) (char *)_mbsrchr((const UCHAR *)(str), (c)) 161 #endif 162 163 /* Up to now, all versions of Microsoft C runtime libraries lack the support 164 * for customized (non-US) switching rules between daylight saving time and 165 * standard time in the TZ environment variable string. 166 * But non-US timezone rules are correctly supported when timezone information 167 * is read from the OS system settings in the Win32 registry. 168 * The following work-around deletes any TZ environment setting from 169 * the process environment. This results in a fallback of the RTL time 170 * handling code to the (correctly interpretable) OS system settings, read 171 * from the registry. 172 */ 173 #ifdef USE_EF_UT_TIME 174 # if (defined(_WIN32_WCE) || defined(W32_USE_IZ_TIMEZONE)) 175 # define iz_w32_prepareTZenv() 176 # else 177 # define iz_w32_prepareTZenv() putenv("TZ=") 178 # endif 179 #endif 180 181 #ifdef DIR_END 182 #undef DIR_END 183 #define DIR_END '\\' // ZipInfo with VC++ 4.0 requires this 184 #endif 185 186 // We are defining a few new error types for our code. 187 #define PK_EXCEPTION 500 188 #define PK_ABORTED 501 189 190 #ifndef DATE_FORMAT 191 #define DATE_FORMAT DF_MDY 192 #endif 193 #if ((_WIN32_WCE >= 211) && !defined(POCKET_UNZIP)) 194 # ifndef USE_FWRITE 195 # define USE_FWRITE 196 # endif 197 #endif 198 #define lenEOL 2 199 #define PutNativeEOL {*q++ = native(CR); *q++ = native(LF);} 200 201 #define countof(a) (sizeof(a)/sizeof(*(a))) 202 203 // The max number of retries (not including the first attempt) for entering 204 // a password for and encrypted file before giving up on that file. 205 #define MAX_PASSWORD_RETRIES 2 206 207 #ifdef POCKET_UNZIP 208 209 // Variables that we want to add to our Globals struct. 210 #define SYSTEM_SPECIFIC_GLOBALS \ 211 char matchname[FILNAMSIZ]; \ 212 int notfirstcall; \ 213 char *zipfnPtr; \ 214 char *wildzipfnPtr; 215 216 #else /* !POCKET_UNZIP */ 217 218 /* Static variables that we have to add to Uz_Globs: */ 219 #define SYSTEM_SPECIFIC_GLOBALS \ 220 char rootpath[_MAX_PATH];\ 221 char *wildname, *matchname;\ 222 int rootlen, notfirstcall; 223 224 /* This replacement for C-RTL-supplied getch() (or similar) functionality 225 * avoids leaving unabsorbed LFs in the keyboard buffer under Windows95, 226 * and supports the <ALT>+[0]<digit><digit><digit> feature. 227 */ 228 int getch_win32 OF((void)); 229 230 #endif /* ?POCKET_UNZIP */ 231 232 233 //****************************************************************************** 234 //***** Global headers 235 //****************************************************************************** 236 237 #include <windows.h> 238 #ifndef TIME_ZONE_ID_INVALID 239 # define TIME_ZONE_ID_INVALID (DWORD)0xFFFFFFFFL 240 #endif 241 #include <setjmp.h> 242 #include <stdlib.h> 243 #if defined(_MBCS) && !defined(_WIN32_WCE) 244 #include <mbstring.h> 245 #endif 246 #include <excpt.h> 247 #ifndef Cdecl 248 #define Cdecl __cdecl 249 #endif 250 #include "wince/wince.h" // Our WinCE specific code and our debug function. 251 #ifdef POCKET_UNZIP 252 #include "wince/resource.h" // Our resource constants 253 #include "wince/punzip.rcv" // Our version information. 254 #endif 255 256 257 #ifndef _WIN32_WCE /* native Windows CE does not support 64-bit filesizes */ 258 259 /* 64-bit-Integers & Large File Support 260 * 261 * If this is set it is assumed that the port 262 * supports 64-bit file calls. The types are 263 * defined here. Any local implementations are 264 * in w32i64.c and the protypes for the calls are 265 * in unzip.h. Note that a port must support 266 * these calls fully or should not set 267 * LARGE_FILE_SUPPORT. 268 */ 269 270 /* Automatically set ZIP64_SUPPORT if supported */ 271 272 #ifndef NO_ZIP64_SUPPORT 273 # ifndef ZIP64_SUPPORT 274 # if defined(_MSC_VER) 275 # define ZIP64_SUPPORT 276 # endif 277 # endif 278 #endif 279 280 #ifdef ZIP64_SUPPORT 281 /* base type for file offsets and file sizes */ 282 # if (defined(__GNUC__) || defined(ULONG_LONG_MAX)) 283 typedef long long zoff_t; 284 # else 285 /* all other compilers use this as intrinsic 64-bit type */ 286 typedef __int64 zoff_t; 287 # endif 288 # define ZOFF_T_DEFINED 289 290 /* user-defined types and format strings for 64-bit numbers and 291 * file pointer functions (these depend on the rtl library and library 292 * headers used; they are NOT compiler-specific) 293 */ 294 # if defined(_MSC_VER) 295 /* MS C and VC */ 296 /* these systems use the Microsoft C RTL */ 297 298 /* 64-bit stat struct */ 299 typedef struct _stati64 z_stat; 300 # define Z_STAT_DEFINED 301 302 /* printf format size prefix for zoff_t values */ 303 # define FZOFFT_FMT "I64" 304 # define FZOFFT_HEX_WID_VALUE "16" 305 306 # endif 307 308 #endif 309 310 /* If port has LARGE_FILE_SUPPORT then define here 311 to make automatic unless overridden */ 312 313 #ifndef LARGE_FILE_SUPPORT 314 # ifndef NO_LARGE_FILE_SUPPORT 315 # if defined(_MSC_VER) 316 # define LARGE_FILE_SUPPORT 317 # endif 318 # endif 319 #endif 320 321 #endif /* !_WIN32_WCE */ 322 323 #endif /* !__w32cfg_h */ 324