Index: third_party/zlib/contrib/minizip/ioapi.c
|
diff --git a/third_party/zlib/contrib/minizip/ioapi.c b/third_party/zlib/contrib/minizip/ioapi.c
|
index 3aad38a72259c5aba33f6a6001eead03918619aa..3a1f5d6fb7a3ad5473cb79e87dbd95511f0030df 100644
|
--- a/third_party/zlib/contrib/minizip/ioapi.c
|
+++ b/third_party/zlib/contrib/minizip/ioapi.c
|
@@ -89,6 +89,28 @@ voidpf ZCALLBACK fopen_file_func (opaque, filename, mode)
|
return file;
|
}
|
|
+// Google
|
+voidpf ZCALLBACK fdopen_file_func (opaque, filename, mode)
|
+ voidpf opaque;
|
+ const char* filename;
|
+ int mode;
|
+{
|
+ FILE* file = NULL;
|
+ const char* mode_fopen = NULL;
|
+ if ((mode & ZLIB_FILEFUNC_MODE_READWRITEFILTER)==ZLIB_FILEFUNC_MODE_READ)
|
+ mode_fopen = "rb";
|
+ else
|
+ if (mode & ZLIB_FILEFUNC_MODE_EXISTING)
|
+ mode_fopen = "r+b";
|
+ else
|
+ if (mode & ZLIB_FILEFUNC_MODE_CREATE)
|
+ mode_fopen = "wb";
|
+
|
+ if ((filename!=NULL) && (mode_fopen != NULL))
|
+ file = fdopen(*(int*)opaque, mode_fopen);
|
+ return file;
|
+}
|
+
|
|
uLong ZCALLBACK fread_file_func (opaque, stream, buf, size)
|
voidpf opaque;
|
@@ -178,3 +200,15 @@ void fill_fopen_filefunc (pzlib_filefunc_def)
|
pzlib_filefunc_def->zerror_file = ferror_file_func;
|
pzlib_filefunc_def->opaque = NULL;
|
}
|
+
|
+// Google
|
+void fill_fdopen_filefunc (pzlib_filefunc_def, fd)
|
+ zlib_filefunc_def* pzlib_filefunc_def;
|
+ const int fd;
|
+{
|
+ fill_fopen_filefunc(pzlib_filefunc_def);
|
+ pzlib_filefunc_def->zopen_file = fdopen_file_func;
|
+ int *ptr_fd = malloc(sizeof(int));
|
+ *ptr_fd = fd;
|
+ pzlib_filefunc_def->opaque = ptr_fd;
|
+}
|
|