annotate src/zlib-1.2.7/contrib/minizip/iowin32.c @ 23:619f715526df sv_v2.1

Update Vamp plugin SDK to 2.5
author Chris Cannam
date Thu, 09 May 2013 10:52:46 +0100
parents e13257ea84a4
children
rev   line source
Chris@4 1 /* iowin32.c -- IO base function header for compress/uncompress .zip
Chris@4 2 Version 1.1, February 14h, 2010
Chris@4 3 part of the MiniZip project - ( http://www.winimage.com/zLibDll/minizip.html )
Chris@4 4
Chris@4 5 Copyright (C) 1998-2010 Gilles Vollant (minizip) ( http://www.winimage.com/zLibDll/minizip.html )
Chris@4 6
Chris@4 7 Modifications for Zip64 support
Chris@4 8 Copyright (C) 2009-2010 Mathias Svensson ( http://result42.com )
Chris@4 9
Chris@4 10 For more info read MiniZip_info.txt
Chris@4 11
Chris@4 12 */
Chris@4 13
Chris@4 14 #include <stdlib.h>
Chris@4 15
Chris@4 16 #include "zlib.h"
Chris@4 17 #include "ioapi.h"
Chris@4 18 #include "iowin32.h"
Chris@4 19
Chris@4 20 #ifndef INVALID_HANDLE_VALUE
Chris@4 21 #define INVALID_HANDLE_VALUE (0xFFFFFFFF)
Chris@4 22 #endif
Chris@4 23
Chris@4 24 #ifndef INVALID_SET_FILE_POINTER
Chris@4 25 #define INVALID_SET_FILE_POINTER ((DWORD)-1)
Chris@4 26 #endif
Chris@4 27
Chris@4 28 voidpf ZCALLBACK win32_open_file_func OF((voidpf opaque, const char* filename, int mode));
Chris@4 29 uLong ZCALLBACK win32_read_file_func OF((voidpf opaque, voidpf stream, void* buf, uLong size));
Chris@4 30 uLong ZCALLBACK win32_write_file_func OF((voidpf opaque, voidpf stream, const void* buf, uLong size));
Chris@4 31 ZPOS64_T ZCALLBACK win32_tell64_file_func OF((voidpf opaque, voidpf stream));
Chris@4 32 long ZCALLBACK win32_seek64_file_func OF((voidpf opaque, voidpf stream, ZPOS64_T offset, int origin));
Chris@4 33 int ZCALLBACK win32_close_file_func OF((voidpf opaque, voidpf stream));
Chris@4 34 int ZCALLBACK win32_error_file_func OF((voidpf opaque, voidpf stream));
Chris@4 35
Chris@4 36 typedef struct
Chris@4 37 {
Chris@4 38 HANDLE hf;
Chris@4 39 int error;
Chris@4 40 } WIN32FILE_IOWIN;
Chris@4 41
Chris@4 42
Chris@4 43 static void win32_translate_open_mode(int mode,
Chris@4 44 DWORD* lpdwDesiredAccess,
Chris@4 45 DWORD* lpdwCreationDisposition,
Chris@4 46 DWORD* lpdwShareMode,
Chris@4 47 DWORD* lpdwFlagsAndAttributes)
Chris@4 48 {
Chris@4 49 *lpdwDesiredAccess = *lpdwShareMode = *lpdwFlagsAndAttributes = *lpdwCreationDisposition = 0;
Chris@4 50
Chris@4 51 if ((mode & ZLIB_FILEFUNC_MODE_READWRITEFILTER)==ZLIB_FILEFUNC_MODE_READ)
Chris@4 52 {
Chris@4 53 *lpdwDesiredAccess = GENERIC_READ;
Chris@4 54 *lpdwCreationDisposition = OPEN_EXISTING;
Chris@4 55 *lpdwShareMode = FILE_SHARE_READ;
Chris@4 56 }
Chris@4 57 else if (mode & ZLIB_FILEFUNC_MODE_EXISTING)
Chris@4 58 {
Chris@4 59 *lpdwDesiredAccess = GENERIC_WRITE | GENERIC_READ;
Chris@4 60 *lpdwCreationDisposition = OPEN_EXISTING;
Chris@4 61 }
Chris@4 62 else if (mode & ZLIB_FILEFUNC_MODE_CREATE)
Chris@4 63 {
Chris@4 64 *lpdwDesiredAccess = GENERIC_WRITE | GENERIC_READ;
Chris@4 65 *lpdwCreationDisposition = CREATE_ALWAYS;
Chris@4 66 }
Chris@4 67 }
Chris@4 68
Chris@4 69 static voidpf win32_build_iowin(HANDLE hFile)
Chris@4 70 {
Chris@4 71 voidpf ret=NULL;
Chris@4 72
Chris@4 73 if ((hFile != NULL) && (hFile != INVALID_HANDLE_VALUE))
Chris@4 74 {
Chris@4 75 WIN32FILE_IOWIN w32fiow;
Chris@4 76 w32fiow.hf = hFile;
Chris@4 77 w32fiow.error = 0;
Chris@4 78 ret = malloc(sizeof(WIN32FILE_IOWIN));
Chris@4 79
Chris@4 80 if (ret==NULL)
Chris@4 81 CloseHandle(hFile);
Chris@4 82 else
Chris@4 83 *((WIN32FILE_IOWIN*)ret) = w32fiow;
Chris@4 84 }
Chris@4 85 return ret;
Chris@4 86 }
Chris@4 87
Chris@4 88 voidpf ZCALLBACK win32_open64_file_func (voidpf opaque,const void* filename,int mode)
Chris@4 89 {
Chris@4 90 const char* mode_fopen = NULL;
Chris@4 91 DWORD dwDesiredAccess,dwCreationDisposition,dwShareMode,dwFlagsAndAttributes ;
Chris@4 92 HANDLE hFile = NULL;
Chris@4 93
Chris@4 94 win32_translate_open_mode(mode,&dwDesiredAccess,&dwCreationDisposition,&dwShareMode,&dwFlagsAndAttributes);
Chris@4 95
Chris@4 96 if ((filename!=NULL) && (dwDesiredAccess != 0))
Chris@4 97 hFile = CreateFile((LPCTSTR)filename, dwDesiredAccess, dwShareMode, NULL, dwCreationDisposition, dwFlagsAndAttributes, NULL);
Chris@4 98
Chris@4 99 return win32_build_iowin(hFile);
Chris@4 100 }
Chris@4 101
Chris@4 102
Chris@4 103 voidpf ZCALLBACK win32_open64_file_funcA (voidpf opaque,const void* filename,int mode)
Chris@4 104 {
Chris@4 105 const char* mode_fopen = NULL;
Chris@4 106 DWORD dwDesiredAccess,dwCreationDisposition,dwShareMode,dwFlagsAndAttributes ;
Chris@4 107 HANDLE hFile = NULL;
Chris@4 108
Chris@4 109 win32_translate_open_mode(mode,&dwDesiredAccess,&dwCreationDisposition,&dwShareMode,&dwFlagsAndAttributes);
Chris@4 110
Chris@4 111 if ((filename!=NULL) && (dwDesiredAccess != 0))
Chris@4 112 hFile = CreateFileA((LPCSTR)filename, dwDesiredAccess, dwShareMode, NULL, dwCreationDisposition, dwFlagsAndAttributes, NULL);
Chris@4 113
Chris@4 114 return win32_build_iowin(hFile);
Chris@4 115 }
Chris@4 116
Chris@4 117
Chris@4 118 voidpf ZCALLBACK win32_open64_file_funcW (voidpf opaque,const void* filename,int mode)
Chris@4 119 {
Chris@4 120 const char* mode_fopen = NULL;
Chris@4 121 DWORD dwDesiredAccess,dwCreationDisposition,dwShareMode,dwFlagsAndAttributes ;
Chris@4 122 HANDLE hFile = NULL;
Chris@4 123
Chris@4 124 win32_translate_open_mode(mode,&dwDesiredAccess,&dwCreationDisposition,&dwShareMode,&dwFlagsAndAttributes);
Chris@4 125
Chris@4 126 if ((filename!=NULL) && (dwDesiredAccess != 0))
Chris@4 127 hFile = CreateFileW((LPCWSTR)filename, dwDesiredAccess, dwShareMode, NULL, dwCreationDisposition, dwFlagsAndAttributes, NULL);
Chris@4 128
Chris@4 129 return win32_build_iowin(hFile);
Chris@4 130 }
Chris@4 131
Chris@4 132
Chris@4 133 voidpf ZCALLBACK win32_open_file_func (voidpf opaque,const char* filename,int mode)
Chris@4 134 {
Chris@4 135 const char* mode_fopen = NULL;
Chris@4 136 DWORD dwDesiredAccess,dwCreationDisposition,dwShareMode,dwFlagsAndAttributes ;
Chris@4 137 HANDLE hFile = NULL;
Chris@4 138
Chris@4 139 win32_translate_open_mode(mode,&dwDesiredAccess,&dwCreationDisposition,&dwShareMode,&dwFlagsAndAttributes);
Chris@4 140
Chris@4 141 if ((filename!=NULL) && (dwDesiredAccess != 0))
Chris@4 142 hFile = CreateFile((LPCTSTR)filename, dwDesiredAccess, dwShareMode, NULL, dwCreationDisposition, dwFlagsAndAttributes, NULL);
Chris@4 143
Chris@4 144 return win32_build_iowin(hFile);
Chris@4 145 }
Chris@4 146
Chris@4 147
Chris@4 148 uLong ZCALLBACK win32_read_file_func (voidpf opaque, voidpf stream, void* buf,uLong size)
Chris@4 149 {
Chris@4 150 uLong ret=0;
Chris@4 151 HANDLE hFile = NULL;
Chris@4 152 if (stream!=NULL)
Chris@4 153 hFile = ((WIN32FILE_IOWIN*)stream) -> hf;
Chris@4 154
Chris@4 155 if (hFile != NULL)
Chris@4 156 {
Chris@4 157 if (!ReadFile(hFile, buf, size, &ret, NULL))
Chris@4 158 {
Chris@4 159 DWORD dwErr = GetLastError();
Chris@4 160 if (dwErr == ERROR_HANDLE_EOF)
Chris@4 161 dwErr = 0;
Chris@4 162 ((WIN32FILE_IOWIN*)stream) -> error=(int)dwErr;
Chris@4 163 }
Chris@4 164 }
Chris@4 165
Chris@4 166 return ret;
Chris@4 167 }
Chris@4 168
Chris@4 169
Chris@4 170 uLong ZCALLBACK win32_write_file_func (voidpf opaque,voidpf stream,const void* buf,uLong size)
Chris@4 171 {
Chris@4 172 uLong ret=0;
Chris@4 173 HANDLE hFile = NULL;
Chris@4 174 if (stream!=NULL)
Chris@4 175 hFile = ((WIN32FILE_IOWIN*)stream) -> hf;
Chris@4 176
Chris@4 177 if (hFile != NULL)
Chris@4 178 {
Chris@4 179 if (!WriteFile(hFile, buf, size, &ret, NULL))
Chris@4 180 {
Chris@4 181 DWORD dwErr = GetLastError();
Chris@4 182 if (dwErr == ERROR_HANDLE_EOF)
Chris@4 183 dwErr = 0;
Chris@4 184 ((WIN32FILE_IOWIN*)stream) -> error=(int)dwErr;
Chris@4 185 }
Chris@4 186 }
Chris@4 187
Chris@4 188 return ret;
Chris@4 189 }
Chris@4 190
Chris@4 191 long ZCALLBACK win32_tell_file_func (voidpf opaque,voidpf stream)
Chris@4 192 {
Chris@4 193 long ret=-1;
Chris@4 194 HANDLE hFile = NULL;
Chris@4 195 if (stream!=NULL)
Chris@4 196 hFile = ((WIN32FILE_IOWIN*)stream) -> hf;
Chris@4 197 if (hFile != NULL)
Chris@4 198 {
Chris@4 199 DWORD dwSet = SetFilePointer(hFile, 0, NULL, FILE_CURRENT);
Chris@4 200 if (dwSet == INVALID_SET_FILE_POINTER)
Chris@4 201 {
Chris@4 202 DWORD dwErr = GetLastError();
Chris@4 203 ((WIN32FILE_IOWIN*)stream) -> error=(int)dwErr;
Chris@4 204 ret = -1;
Chris@4 205 }
Chris@4 206 else
Chris@4 207 ret=(long)dwSet;
Chris@4 208 }
Chris@4 209 return ret;
Chris@4 210 }
Chris@4 211
Chris@4 212 ZPOS64_T ZCALLBACK win32_tell64_file_func (voidpf opaque, voidpf stream)
Chris@4 213 {
Chris@4 214 ZPOS64_T ret= (ZPOS64_T)-1;
Chris@4 215 HANDLE hFile = NULL;
Chris@4 216 if (stream!=NULL)
Chris@4 217 hFile = ((WIN32FILE_IOWIN*)stream)->hf;
Chris@4 218
Chris@4 219 if (hFile)
Chris@4 220 {
Chris@4 221 LARGE_INTEGER li;
Chris@4 222 li.QuadPart = 0;
Chris@4 223 li.u.LowPart = SetFilePointer(hFile, li.u.LowPart, &li.u.HighPart, FILE_CURRENT);
Chris@4 224 if ( (li.LowPart == 0xFFFFFFFF) && (GetLastError() != NO_ERROR))
Chris@4 225 {
Chris@4 226 DWORD dwErr = GetLastError();
Chris@4 227 ((WIN32FILE_IOWIN*)stream) -> error=(int)dwErr;
Chris@4 228 ret = (ZPOS64_T)-1;
Chris@4 229 }
Chris@4 230 else
Chris@4 231 ret=li.QuadPart;
Chris@4 232 }
Chris@4 233 return ret;
Chris@4 234 }
Chris@4 235
Chris@4 236
Chris@4 237 long ZCALLBACK win32_seek_file_func (voidpf opaque,voidpf stream,uLong offset,int origin)
Chris@4 238 {
Chris@4 239 DWORD dwMoveMethod=0xFFFFFFFF;
Chris@4 240 HANDLE hFile = NULL;
Chris@4 241
Chris@4 242 long ret=-1;
Chris@4 243 if (stream!=NULL)
Chris@4 244 hFile = ((WIN32FILE_IOWIN*)stream) -> hf;
Chris@4 245 switch (origin)
Chris@4 246 {
Chris@4 247 case ZLIB_FILEFUNC_SEEK_CUR :
Chris@4 248 dwMoveMethod = FILE_CURRENT;
Chris@4 249 break;
Chris@4 250 case ZLIB_FILEFUNC_SEEK_END :
Chris@4 251 dwMoveMethod = FILE_END;
Chris@4 252 break;
Chris@4 253 case ZLIB_FILEFUNC_SEEK_SET :
Chris@4 254 dwMoveMethod = FILE_BEGIN;
Chris@4 255 break;
Chris@4 256 default: return -1;
Chris@4 257 }
Chris@4 258
Chris@4 259 if (hFile != NULL)
Chris@4 260 {
Chris@4 261 DWORD dwSet = SetFilePointer(hFile, offset, NULL, dwMoveMethod);
Chris@4 262 if (dwSet == INVALID_SET_FILE_POINTER)
Chris@4 263 {
Chris@4 264 DWORD dwErr = GetLastError();
Chris@4 265 ((WIN32FILE_IOWIN*)stream) -> error=(int)dwErr;
Chris@4 266 ret = -1;
Chris@4 267 }
Chris@4 268 else
Chris@4 269 ret=0;
Chris@4 270 }
Chris@4 271 return ret;
Chris@4 272 }
Chris@4 273
Chris@4 274 long ZCALLBACK win32_seek64_file_func (voidpf opaque, voidpf stream,ZPOS64_T offset,int origin)
Chris@4 275 {
Chris@4 276 DWORD dwMoveMethod=0xFFFFFFFF;
Chris@4 277 HANDLE hFile = NULL;
Chris@4 278 long ret=-1;
Chris@4 279
Chris@4 280 if (stream!=NULL)
Chris@4 281 hFile = ((WIN32FILE_IOWIN*)stream)->hf;
Chris@4 282
Chris@4 283 switch (origin)
Chris@4 284 {
Chris@4 285 case ZLIB_FILEFUNC_SEEK_CUR :
Chris@4 286 dwMoveMethod = FILE_CURRENT;
Chris@4 287 break;
Chris@4 288 case ZLIB_FILEFUNC_SEEK_END :
Chris@4 289 dwMoveMethod = FILE_END;
Chris@4 290 break;
Chris@4 291 case ZLIB_FILEFUNC_SEEK_SET :
Chris@4 292 dwMoveMethod = FILE_BEGIN;
Chris@4 293 break;
Chris@4 294 default: return -1;
Chris@4 295 }
Chris@4 296
Chris@4 297 if (hFile)
Chris@4 298 {
Chris@4 299 LARGE_INTEGER* li = (LARGE_INTEGER*)&offset;
Chris@4 300 DWORD dwSet = SetFilePointer(hFile, li->u.LowPart, &li->u.HighPart, dwMoveMethod);
Chris@4 301 if (dwSet == INVALID_SET_FILE_POINTER)
Chris@4 302 {
Chris@4 303 DWORD dwErr = GetLastError();
Chris@4 304 ((WIN32FILE_IOWIN*)stream) -> error=(int)dwErr;
Chris@4 305 ret = -1;
Chris@4 306 }
Chris@4 307 else
Chris@4 308 ret=0;
Chris@4 309 }
Chris@4 310 return ret;
Chris@4 311 }
Chris@4 312
Chris@4 313 int ZCALLBACK win32_close_file_func (voidpf opaque, voidpf stream)
Chris@4 314 {
Chris@4 315 int ret=-1;
Chris@4 316
Chris@4 317 if (stream!=NULL)
Chris@4 318 {
Chris@4 319 HANDLE hFile;
Chris@4 320 hFile = ((WIN32FILE_IOWIN*)stream) -> hf;
Chris@4 321 if (hFile != NULL)
Chris@4 322 {
Chris@4 323 CloseHandle(hFile);
Chris@4 324 ret=0;
Chris@4 325 }
Chris@4 326 free(stream);
Chris@4 327 }
Chris@4 328 return ret;
Chris@4 329 }
Chris@4 330
Chris@4 331 int ZCALLBACK win32_error_file_func (voidpf opaque,voidpf stream)
Chris@4 332 {
Chris@4 333 int ret=-1;
Chris@4 334 if (stream!=NULL)
Chris@4 335 {
Chris@4 336 ret = ((WIN32FILE_IOWIN*)stream) -> error;
Chris@4 337 }
Chris@4 338 return ret;
Chris@4 339 }
Chris@4 340
Chris@4 341 void fill_win32_filefunc (zlib_filefunc_def* pzlib_filefunc_def)
Chris@4 342 {
Chris@4 343 pzlib_filefunc_def->zopen_file = win32_open_file_func;
Chris@4 344 pzlib_filefunc_def->zread_file = win32_read_file_func;
Chris@4 345 pzlib_filefunc_def->zwrite_file = win32_write_file_func;
Chris@4 346 pzlib_filefunc_def->ztell_file = win32_tell_file_func;
Chris@4 347 pzlib_filefunc_def->zseek_file = win32_seek_file_func;
Chris@4 348 pzlib_filefunc_def->zclose_file = win32_close_file_func;
Chris@4 349 pzlib_filefunc_def->zerror_file = win32_error_file_func;
Chris@4 350 pzlib_filefunc_def->opaque = NULL;
Chris@4 351 }
Chris@4 352
Chris@4 353 void fill_win32_filefunc64(zlib_filefunc64_def* pzlib_filefunc_def)
Chris@4 354 {
Chris@4 355 pzlib_filefunc_def->zopen64_file = win32_open64_file_func;
Chris@4 356 pzlib_filefunc_def->zread_file = win32_read_file_func;
Chris@4 357 pzlib_filefunc_def->zwrite_file = win32_write_file_func;
Chris@4 358 pzlib_filefunc_def->ztell64_file = win32_tell64_file_func;
Chris@4 359 pzlib_filefunc_def->zseek64_file = win32_seek64_file_func;
Chris@4 360 pzlib_filefunc_def->zclose_file = win32_close_file_func;
Chris@4 361 pzlib_filefunc_def->zerror_file = win32_error_file_func;
Chris@4 362 pzlib_filefunc_def->opaque = NULL;
Chris@4 363 }
Chris@4 364
Chris@4 365
Chris@4 366 void fill_win32_filefunc64A(zlib_filefunc64_def* pzlib_filefunc_def)
Chris@4 367 {
Chris@4 368 pzlib_filefunc_def->zopen64_file = win32_open64_file_funcA;
Chris@4 369 pzlib_filefunc_def->zread_file = win32_read_file_func;
Chris@4 370 pzlib_filefunc_def->zwrite_file = win32_write_file_func;
Chris@4 371 pzlib_filefunc_def->ztell64_file = win32_tell64_file_func;
Chris@4 372 pzlib_filefunc_def->zseek64_file = win32_seek64_file_func;
Chris@4 373 pzlib_filefunc_def->zclose_file = win32_close_file_func;
Chris@4 374 pzlib_filefunc_def->zerror_file = win32_error_file_func;
Chris@4 375 pzlib_filefunc_def->opaque = NULL;
Chris@4 376 }
Chris@4 377
Chris@4 378
Chris@4 379 void fill_win32_filefunc64W(zlib_filefunc64_def* pzlib_filefunc_def)
Chris@4 380 {
Chris@4 381 pzlib_filefunc_def->zopen64_file = win32_open64_file_funcW;
Chris@4 382 pzlib_filefunc_def->zread_file = win32_read_file_func;
Chris@4 383 pzlib_filefunc_def->zwrite_file = win32_write_file_func;
Chris@4 384 pzlib_filefunc_def->ztell64_file = win32_tell64_file_func;
Chris@4 385 pzlib_filefunc_def->zseek64_file = win32_seek64_file_func;
Chris@4 386 pzlib_filefunc_def->zclose_file = win32_close_file_func;
Chris@4 387 pzlib_filefunc_def->zerror_file = win32_error_file_func;
Chris@4 388 pzlib_filefunc_def->opaque = NULL;
Chris@4 389 }