| OLD | NEW |
| 1 /* ioapi.c -- IO base function header for compress/uncompress .zip | 1 /* ioapi.c -- IO base function header for compress/uncompress .zip |
| 2 files using zlib + zip or unzip API | 2 files using zlib + zip or unzip API |
| 3 | 3 |
| 4 Version 1.01e, February 12th, 2005 | 4 Version 1.01e, February 12th, 2005 |
| 5 | 5 |
| 6 Copyright (C) 1998-2005 Gilles Vollant | 6 Copyright (C) 1998-2005 Gilles Vollant |
| 7 */ | 7 */ |
| 8 | 8 |
| 9 #include <stdio.h> | 9 #include <stdio.h> |
| 10 #include <stdlib.h> | 10 #include <stdlib.h> |
| (...skipping 71 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 82 mode_fopen = "r+b"; | 82 mode_fopen = "r+b"; |
| 83 else | 83 else |
| 84 if (mode & ZLIB_FILEFUNC_MODE_CREATE) | 84 if (mode & ZLIB_FILEFUNC_MODE_CREATE) |
| 85 mode_fopen = "wb"; | 85 mode_fopen = "wb"; |
| 86 | 86 |
| 87 if ((filename!=NULL) && (mode_fopen != NULL)) | 87 if ((filename!=NULL) && (mode_fopen != NULL)) |
| 88 file = fopen(filename, mode_fopen); | 88 file = fopen(filename, mode_fopen); |
| 89 return file; | 89 return file; |
| 90 } | 90 } |
| 91 | 91 |
| 92 // Google |
| 93 voidpf ZCALLBACK fdopen_file_func (opaque, filename, mode) |
| 94 voidpf opaque; |
| 95 const char* filename; |
| 96 int mode; |
| 97 { |
| 98 FILE* file = NULL; |
| 99 const char* mode_fopen = NULL; |
| 100 if ((mode & ZLIB_FILEFUNC_MODE_READWRITEFILTER)==ZLIB_FILEFUNC_MODE_READ) |
| 101 mode_fopen = "rb"; |
| 102 else |
| 103 if (mode & ZLIB_FILEFUNC_MODE_EXISTING) |
| 104 mode_fopen = "r+b"; |
| 105 else |
| 106 if (mode & ZLIB_FILEFUNC_MODE_CREATE) |
| 107 mode_fopen = "wb"; |
| 108 |
| 109 if ((filename!=NULL) && (mode_fopen != NULL)) |
| 110 file = fdopen(*(int*)opaque, mode_fopen); |
| 111 return file; |
| 112 } |
| 113 |
| 92 | 114 |
| 93 uLong ZCALLBACK fread_file_func (opaque, stream, buf, size) | 115 uLong ZCALLBACK fread_file_func (opaque, stream, buf, size) |
| 94 voidpf opaque; | 116 voidpf opaque; |
| 95 voidpf stream; | 117 voidpf stream; |
| 96 void* buf; | 118 void* buf; |
| 97 uLong size; | 119 uLong size; |
| 98 { | 120 { |
| 99 uLong ret; | 121 uLong ret; |
| 100 ret = (uLong)fread(buf, 1, (size_t)size, (FILE *)stream); | 122 ret = (uLong)fread(buf, 1, (size_t)size, (FILE *)stream); |
| 101 return ret; | 123 return ret; |
| (...skipping 69 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 171 { | 193 { |
| 172 pzlib_filefunc_def->zopen_file = fopen_file_func; | 194 pzlib_filefunc_def->zopen_file = fopen_file_func; |
| 173 pzlib_filefunc_def->zread_file = fread_file_func; | 195 pzlib_filefunc_def->zread_file = fread_file_func; |
| 174 pzlib_filefunc_def->zwrite_file = fwrite_file_func; | 196 pzlib_filefunc_def->zwrite_file = fwrite_file_func; |
| 175 pzlib_filefunc_def->ztell_file = ftell_file_func; | 197 pzlib_filefunc_def->ztell_file = ftell_file_func; |
| 176 pzlib_filefunc_def->zseek_file = fseek_file_func; | 198 pzlib_filefunc_def->zseek_file = fseek_file_func; |
| 177 pzlib_filefunc_def->zclose_file = fclose_file_func; | 199 pzlib_filefunc_def->zclose_file = fclose_file_func; |
| 178 pzlib_filefunc_def->zerror_file = ferror_file_func; | 200 pzlib_filefunc_def->zerror_file = ferror_file_func; |
| 179 pzlib_filefunc_def->opaque = NULL; | 201 pzlib_filefunc_def->opaque = NULL; |
| 180 } | 202 } |
| 203 |
| 204 // Google |
| 205 void fill_fdopen_filefunc (pzlib_filefunc_def, fd) |
| 206 zlib_filefunc_def* pzlib_filefunc_def; |
| 207 const int fd; |
| 208 { |
| 209 fill_fopen_filefunc(pzlib_filefunc_def); |
| 210 pzlib_filefunc_def->zopen_file = fdopen_file_func; |
| 211 int *ptr_fd = malloc(sizeof(int)); |
| 212 *ptr_fd = fd; |
| 213 pzlib_filefunc_def->opaque = ptr_fd; |
| 214 } |
| OLD | NEW |