]> git.lizzy.rs Git - zlib.git/blobdiff - contrib/minizip/iowin32.c
zlib 1.2.2.3
[zlib.git] / contrib / minizip / iowin32.c
index 940dc0b4989afbcce7677aea64f1c66974b421bc..694bc033bf6430e5a5464d59a9621c8fed9f98eb 100644 (file)
-/* iowin32.c -- IO base function header for compress/uncompress .zip
-   files using zlib + zip or unzip API
-   This IO API version uses the Win32 API (for Microsoft Windows)
-
-   Version 1.01, May 8th, 2004
-
-   Copyright (C) 1998-2004 Gilles Vollant
-*/
-
-#include <stdlib.h>
-
-#include "zlib.h"
-#include "ioapi.h"
-#include "iowin32.h"
-
-#ifndef INVALID_HANDLE_VALUE
-#define INVALID_HANDLE_VALUE (0xFFFFFFFF)
-#endif
-
-#ifndef INVALID_SET_FILE_POINTER
-#define INVALID_SET_FILE_POINTER ((DWORD)-1)
-#endif
-
-voidpf ZCALLBACK win32_open_file_func OF((
-   voidpf opaque,
-   const char* filename,
-   int mode));
-
-uLong ZCALLBACK win32_read_file_func OF((
-   voidpf opaque,
-   voidpf stream,
-   void* buf,
-   uLong size));
-
-uLong ZCALLBACK win32_write_file_func OF((
-   voidpf opaque,
-   voidpf stream,
-   const void* buf,
-   uLong size));
-
-long ZCALLBACK win32_tell_file_func OF((
-   voidpf opaque,
-   voidpf stream));
-
-long ZCALLBACK win32_seek_file_func OF((
-   voidpf opaque,
-   voidpf stream,
-   uLong offset,
-   int origin));
-
-int ZCALLBACK win32_close_file_func OF((
-   voidpf opaque,
-   voidpf stream));
-
-int ZCALLBACK win32_error_file_func OF((
-   voidpf opaque,
-   voidpf stream));
-
-typedef struct
-{
-    HANDLE hf;
-    int error;
-} WIN32FILE_IOWIN;
-
-voidpf ZCALLBACK win32_open_file_func (opaque, filename, mode)
-   voidpf opaque;
-   const char* filename;
-   int mode;
-{
-    const char* mode_fopen = NULL;
-    DWORD dwDesiredAccess,dwCreationDisposition,dwShareMode,dwFlagsAndAttributes ;
-    HANDLE hFile = 0;
-    voidpf ret=NULL;
-
-    dwDesiredAccess = dwShareMode = dwFlagsAndAttributes = 0;
-
-    if ((mode & ZLIB_FILEFUNC_MODE_READWRITEFILTER)==ZLIB_FILEFUNC_MODE_READ)
-    {
-        dwDesiredAccess = GENERIC_READ;
-        dwCreationDisposition = OPEN_EXISTING;
-        dwShareMode = FILE_SHARE_READ;
-    }
-    else
-    if (mode & ZLIB_FILEFUNC_MODE_EXISTING)
-    {
-        dwDesiredAccess = GENERIC_WRITE | GENERIC_READ;
-        dwCreationDisposition = OPEN_EXISTING;
-    }
-    else
-    if (mode & ZLIB_FILEFUNC_MODE_CREATE)
-    {
-        dwDesiredAccess = GENERIC_WRITE | GENERIC_READ;
-        dwCreationDisposition = CREATE_ALWAYS;
-    }
-
-    if ((filename!=NULL) && (dwDesiredAccess != 0))
-        hFile = CreateFile((LPCTSTR)filename, dwDesiredAccess, dwShareMode, NULL,
-                      dwCreationDisposition, dwFlagsAndAttributes, NULL);
-
-    if (hFile == INVALID_HANDLE_VALUE)
-        hFile = NULL;
-
-    if (hFile != NULL)
-    {
-        WIN32FILE_IOWIN w32fiow;
-        w32fiow.hf = hFile;
-        w32fiow.error = 0;
-        ret = malloc(sizeof(WIN32FILE_IOWIN));
-        if (ret==NULL)
-            CloseHandle(hFile);
-        else *((WIN32FILE_IOWIN*)ret) = w32fiow;
-    }
-    return ret;
-}
-
-
-uLong ZCALLBACK win32_read_file_func (opaque, stream, buf, size)
-   voidpf opaque;
-   voidpf stream;
-   void* buf;
-   uLong size;
-{
-    uLong ret=0;
-    HANDLE hFile = NULL;
-    if (stream!=NULL)
-        hFile = ((WIN32FILE_IOWIN*)stream) -> hf;
-    if (hFile != NULL)
-        if (!ReadFile(hFile, buf, size, &ret, NULL))
-        {
-            DWORD dwErr = GetLastError();
-            if (dwErr == ERROR_HANDLE_EOF)
-                dwErr = 0;
-            ((WIN32FILE_IOWIN*)stream) -> error=(int)dwErr;
-        }
-
-    return ret;
-}
-
-
-uLong ZCALLBACK win32_write_file_func (opaque, stream, buf, size)
-   voidpf opaque;
-   voidpf stream;
-   const void* buf;
-   uLong size;
-{
-    uLong ret=0;
-    HANDLE hFile = NULL;
-    if (stream!=NULL)
-        hFile = ((WIN32FILE_IOWIN*)stream) -> hf;
-
-    if (hFile !=NULL)
-        if (!WriteFile(hFile, buf, size, &ret, NULL))
-        {
-            DWORD dwErr = GetLastError();
-            if (dwErr == ERROR_HANDLE_EOF)
-                dwErr = 0;
-            ((WIN32FILE_IOWIN*)stream) -> error=(int)dwErr;
-        }
-
-    return ret;
-}
-
-long ZCALLBACK win32_tell_file_func (opaque, stream)
-   voidpf opaque;
-   voidpf stream;
-{
-    long ret=-1;
-    HANDLE hFile = NULL;
-    if (stream!=NULL)
-        hFile = ((WIN32FILE_IOWIN*)stream) -> hf;
-    if (hFile != NULL)
-    {
-        DWORD dwSet = SetFilePointer(hFile, 0, NULL, FILE_CURRENT);
-        if (dwSet == INVALID_SET_FILE_POINTER)
-        {
-            DWORD dwErr = GetLastError();
-            ((WIN32FILE_IOWIN*)stream) -> error=(int)dwErr;
-            ret = -1;
-        }
-        else
-            ret=(long)dwSet;
-    }
-    return ret;
-}
-
-long ZCALLBACK win32_seek_file_func (opaque, stream, offset, origin)
-   voidpf opaque;
-   voidpf stream;
-   uLong offset;
-   int origin;
-{
-    DWORD dwMoveMethod=0xFFFFFFFF;
-    HANDLE hFile = NULL;
-
-    long ret=-1;
-    if (stream!=NULL)
-        hFile = ((WIN32FILE_IOWIN*)stream) -> hf;
-    switch (origin)
-    {
-    case ZLIB_FILEFUNC_SEEK_CUR :
-        dwMoveMethod = FILE_CURRENT;
-        break;
-    case ZLIB_FILEFUNC_SEEK_END :
-        dwMoveMethod = FILE_END;
-        break;
-    case ZLIB_FILEFUNC_SEEK_SET :
-        dwMoveMethod = FILE_BEGIN;
-        break;
-    default: return -1;
-    }
-
-    if (hFile != NULL)
-    {
-        DWORD dwSet = SetFilePointer(hFile, offset, NULL, dwMoveMethod);
-        if (dwSet == INVALID_SET_FILE_POINTER)
-        {
-            DWORD dwErr = GetLastError();
-            ((WIN32FILE_IOWIN*)stream) -> error=(int)dwErr;
-            ret = -1;
-        }
-        else
-            ret=0;
-    }
-    return ret;
-}
-
-int ZCALLBACK win32_close_file_func (opaque, stream)
-   voidpf opaque;
-   voidpf stream;
-{
-    int ret=-1;
-
-    if (stream!=NULL)
-    {
-        HANDLE hFile;
-        hFile = ((WIN32FILE_IOWIN*)stream) -> hf;
-        if (hFile != NULL)
-        {
-            CloseHandle(hFile);
-            ret=0;
-        }
-        free(stream);
-    }
-    return ret;
-}
-
-int ZCALLBACK win32_error_file_func (opaque, stream)
-   voidpf opaque;
-   voidpf stream;
-{
-    int ret=-1;
-    if (stream!=NULL)
-    {
-        ret = ((WIN32FILE_IOWIN*)stream) -> error;
-    }
-    return ret;
-}
-
-void fill_win32_filefunc (pzlib_filefunc_def)
-  zlib_filefunc_def* pzlib_filefunc_def;
-{
-    pzlib_filefunc_def->zopen_file = win32_open_file_func;
-    pzlib_filefunc_def->zread_file = win32_read_file_func;
-    pzlib_filefunc_def->zwrite_file = win32_write_file_func;
-    pzlib_filefunc_def->ztell_file = win32_tell_file_func;
-    pzlib_filefunc_def->zseek_file = win32_seek_file_func;
-    pzlib_filefunc_def->zclose_file = win32_close_file_func;
-    pzlib_filefunc_def->zerror_file = win32_error_file_func;
-    pzlib_filefunc_def->opaque=NULL;
-}
+/* iowin32.c -- IO base function header for compress/uncompress .zip\r
+   files using zlib + zip or unzip API\r
+   This IO API version uses the Win32 API (for Microsoft Windows)\r
+\r
+   Version 1.01e, February 12th, 2005\r
+\r
+   Copyright (C) 1998-2005 Gilles Vollant\r
+*/\r
+\r
+#include <stdlib.h>\r
+\r
+#include "zlib.h"\r
+#include "ioapi.h"\r
+#include "iowin32.h"\r
+\r
+#ifndef INVALID_HANDLE_VALUE\r
+#define INVALID_HANDLE_VALUE (0xFFFFFFFF)\r
+#endif\r
+\r
+#ifndef INVALID_SET_FILE_POINTER\r
+#define INVALID_SET_FILE_POINTER ((DWORD)-1)\r
+#endif\r
+\r
+voidpf ZCALLBACK win32_open_file_func OF((\r
+   voidpf opaque,\r
+   const char* filename,\r
+   int mode));\r
+\r
+uLong ZCALLBACK win32_read_file_func OF((\r
+   voidpf opaque,\r
+   voidpf stream,\r
+   void* buf,\r
+   uLong size));\r
+\r
+uLong ZCALLBACK win32_write_file_func OF((\r
+   voidpf opaque,\r
+   voidpf stream,\r
+   const void* buf,\r
+   uLong size));\r
+\r
+long ZCALLBACK win32_tell_file_func OF((\r
+   voidpf opaque,\r
+   voidpf stream));\r
+\r
+long ZCALLBACK win32_seek_file_func OF((\r
+   voidpf opaque,\r
+   voidpf stream,\r
+   uLong offset,\r
+   int origin));\r
+\r
+int ZCALLBACK win32_close_file_func OF((\r
+   voidpf opaque,\r
+   voidpf stream));\r
+\r
+int ZCALLBACK win32_error_file_func OF((\r
+   voidpf opaque,\r
+   voidpf stream));\r
+\r
+typedef struct\r
+{\r
+    HANDLE hf;\r
+    int error;\r
+} WIN32FILE_IOWIN;\r
+\r
+voidpf ZCALLBACK win32_open_file_func (opaque, filename, mode)\r
+   voidpf opaque;\r
+   const char* filename;\r
+   int mode;\r
+{\r
+    const char* mode_fopen = NULL;\r
+    DWORD dwDesiredAccess,dwCreationDisposition,dwShareMode,dwFlagsAndAttributes ;\r
+    HANDLE hFile = 0;\r
+    voidpf ret=NULL;\r
+\r
+    dwDesiredAccess = dwShareMode = dwFlagsAndAttributes = 0;\r
+\r
+    if ((mode & ZLIB_FILEFUNC_MODE_READWRITEFILTER)==ZLIB_FILEFUNC_MODE_READ)\r
+    {\r
+        dwDesiredAccess = GENERIC_READ;\r
+        dwCreationDisposition = OPEN_EXISTING;\r
+        dwShareMode = FILE_SHARE_READ;\r
+    }\r
+    else\r
+    if (mode & ZLIB_FILEFUNC_MODE_EXISTING)\r
+    {\r
+        dwDesiredAccess = GENERIC_WRITE | GENERIC_READ;\r
+        dwCreationDisposition = OPEN_EXISTING;\r
+    }\r
+    else\r
+    if (mode & ZLIB_FILEFUNC_MODE_CREATE)\r
+    {\r
+        dwDesiredAccess = GENERIC_WRITE | GENERIC_READ;\r
+        dwCreationDisposition = CREATE_ALWAYS;\r
+    }\r
+\r
+    if ((filename!=NULL) && (dwDesiredAccess != 0))\r
+        hFile = CreateFile((LPCTSTR)filename, dwDesiredAccess, dwShareMode, NULL,\r
+                      dwCreationDisposition, dwFlagsAndAttributes, NULL);\r
+\r
+    if (hFile == INVALID_HANDLE_VALUE)\r
+        hFile = NULL;\r
+\r
+    if (hFile != NULL)\r
+    {\r
+        WIN32FILE_IOWIN w32fiow;\r
+        w32fiow.hf = hFile;\r
+        w32fiow.error = 0;\r
+        ret = malloc(sizeof(WIN32FILE_IOWIN));\r
+        if (ret==NULL)\r
+            CloseHandle(hFile);\r
+        else *((WIN32FILE_IOWIN*)ret) = w32fiow;\r
+    }\r
+    return ret;\r
+}\r
+\r
+\r
+uLong ZCALLBACK win32_read_file_func (opaque, stream, buf, size)\r
+   voidpf opaque;\r
+   voidpf stream;\r
+   void* buf;\r
+   uLong size;\r
+{\r
+    uLong ret=0;\r
+    HANDLE hFile = NULL;\r
+    if (stream!=NULL)\r
+        hFile = ((WIN32FILE_IOWIN*)stream) -> hf;\r
+    if (hFile != NULL)\r
+        if (!ReadFile(hFile, buf, size, &ret, NULL))\r
+        {\r
+            DWORD dwErr = GetLastError();\r
+            if (dwErr == ERROR_HANDLE_EOF)\r
+                dwErr = 0;\r
+            ((WIN32FILE_IOWIN*)stream) -> error=(int)dwErr;\r
+        }\r
+\r
+    return ret;\r
+}\r
+\r
+\r
+uLong ZCALLBACK win32_write_file_func (opaque, stream, buf, size)\r
+   voidpf opaque;\r
+   voidpf stream;\r
+   const void* buf;\r
+   uLong size;\r
+{\r
+    uLong ret=0;\r
+    HANDLE hFile = NULL;\r
+    if (stream!=NULL)\r
+        hFile = ((WIN32FILE_IOWIN*)stream) -> hf;\r
+\r
+    if (hFile !=NULL)\r
+        if (!WriteFile(hFile, buf, size, &ret, NULL))\r
+        {\r
+            DWORD dwErr = GetLastError();\r
+            if (dwErr == ERROR_HANDLE_EOF)\r
+                dwErr = 0;\r
+            ((WIN32FILE_IOWIN*)stream) -> error=(int)dwErr;\r
+        }\r
+\r
+    return ret;\r
+}\r
+\r
+long ZCALLBACK win32_tell_file_func (opaque, stream)\r
+   voidpf opaque;\r
+   voidpf stream;\r
+{\r
+    long ret=-1;\r
+    HANDLE hFile = NULL;\r
+    if (stream!=NULL)\r
+        hFile = ((WIN32FILE_IOWIN*)stream) -> hf;\r
+    if (hFile != NULL)\r
+    {\r
+        DWORD dwSet = SetFilePointer(hFile, 0, NULL, FILE_CURRENT);\r
+        if (dwSet == INVALID_SET_FILE_POINTER)\r
+        {\r
+            DWORD dwErr = GetLastError();\r
+            ((WIN32FILE_IOWIN*)stream) -> error=(int)dwErr;\r
+            ret = -1;\r
+        }\r
+        else\r
+            ret=(long)dwSet;\r
+    }\r
+    return ret;\r
+}\r
+\r
+long ZCALLBACK win32_seek_file_func (opaque, stream, offset, origin)\r
+   voidpf opaque;\r
+   voidpf stream;\r
+   uLong offset;\r
+   int origin;\r
+{\r
+    DWORD dwMoveMethod=0xFFFFFFFF;\r
+    HANDLE hFile = NULL;\r
+\r
+    long ret=-1;\r
+    if (stream!=NULL)\r
+        hFile = ((WIN32FILE_IOWIN*)stream) -> hf;\r
+    switch (origin)\r
+    {\r
+    case ZLIB_FILEFUNC_SEEK_CUR :\r
+        dwMoveMethod = FILE_CURRENT;\r
+        break;\r
+    case ZLIB_FILEFUNC_SEEK_END :\r
+        dwMoveMethod = FILE_END;\r
+        break;\r
+    case ZLIB_FILEFUNC_SEEK_SET :\r
+        dwMoveMethod = FILE_BEGIN;\r
+        break;\r
+    default: return -1;\r
+    }\r
+\r
+    if (hFile != NULL)\r
+    {\r
+        DWORD dwSet = SetFilePointer(hFile, offset, NULL, dwMoveMethod);\r
+        if (dwSet == INVALID_SET_FILE_POINTER)\r
+        {\r
+            DWORD dwErr = GetLastError();\r
+            ((WIN32FILE_IOWIN*)stream) -> error=(int)dwErr;\r
+            ret = -1;\r
+        }\r
+        else\r
+            ret=0;\r
+    }\r
+    return ret;\r
+}\r
+\r
+int ZCALLBACK win32_close_file_func (opaque, stream)\r
+   voidpf opaque;\r
+   voidpf stream;\r
+{\r
+    int ret=-1;\r
+\r
+    if (stream!=NULL)\r
+    {\r
+        HANDLE hFile;\r
+        hFile = ((WIN32FILE_IOWIN*)stream) -> hf;\r
+        if (hFile != NULL)\r
+        {\r
+            CloseHandle(hFile);\r
+            ret=0;\r
+        }\r
+        free(stream);\r
+    }\r
+    return ret;\r
+}\r
+\r
+int ZCALLBACK win32_error_file_func (opaque, stream)\r
+   voidpf opaque;\r
+   voidpf stream;\r
+{\r
+    int ret=-1;\r
+    if (stream!=NULL)\r
+    {\r
+        ret = ((WIN32FILE_IOWIN*)stream) -> error;\r
+    }\r
+    return ret;\r
+}\r
+\r
+void fill_win32_filefunc (pzlib_filefunc_def)\r
+  zlib_filefunc_def* pzlib_filefunc_def;\r
+{\r
+    pzlib_filefunc_def->zopen_file = win32_open_file_func;\r
+    pzlib_filefunc_def->zread_file = win32_read_file_func;\r
+    pzlib_filefunc_def->zwrite_file = win32_write_file_func;\r
+    pzlib_filefunc_def->ztell_file = win32_tell_file_func;\r
+    pzlib_filefunc_def->zseek_file = win32_seek_file_func;\r
+    pzlib_filefunc_def->zclose_file = win32_close_file_func;\r
+    pzlib_filefunc_def->zerror_file = win32_error_file_func;\r
+    pzlib_filefunc_def->opaque=NULL;\r
+}\r