summaryrefslogtreecommitdiff
path: root/ext/zip/lib/zip_source_function.c
diff options
context:
space:
mode:
authorRemi Collet <remi@fedoraproject.org>2015-05-06 14:36:18 +0200
committerRemi Collet <remi@php.net>2015-05-06 15:16:43 +0200
commit9e0cc7a1d926c1364a834177cadea431cd8b39a7 (patch)
treef63c505073d6aa0b74bde71eb6a67e6e4c23d8bd /ext/zip/lib/zip_source_function.c
parent31f516b4888fcf096fe0912828948bed84f2ad1c (diff)
downloadphp-git-9e0cc7a1d926c1364a834177cadea431cd8b39a7.tar.gz
update libzip to version 1.0.1
Diffstat (limited to 'ext/zip/lib/zip_source_function.c')
-rw-r--r--ext/zip/lib/zip_source_function.c57
1 files changed, 39 insertions, 18 deletions
diff --git a/ext/zip/lib/zip_source_function.c b/ext/zip/lib/zip_source_function.c
index 4e9d71e674..1d4be93c69 100644
--- a/ext/zip/lib/zip_source_function.c
+++ b/ext/zip/lib/zip_source_function.c
@@ -1,6 +1,6 @@
/*
zip_source_function.c -- create zip data source from callback function
- Copyright (C) 1999-2009 Dieter Baron and Thomas Klausner
+ Copyright (C) 1999-2014 Dieter Baron and Thomas Klausner
This file is part of libzip, a library to manipulate ZIP archives.
The authors can be contacted at <libzip@nih.at>
@@ -17,7 +17,7 @@
3. The names of the authors may not be used to endorse or promote
products derived from this software without specific prior
written permission.
-
+
THIS SOFTWARE IS PROVIDED BY THE AUTHORS ``AS IS'' AND ANY EXPRESS
OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
@@ -32,47 +32,68 @@
*/
-
#include <stdlib.h>
#include "zipint.h"
-
-ZIP_EXTERN struct zip_source *
-zip_source_function(struct zip *za, zip_source_callback zcb, void *ud)
+ZIP_EXTERN zip_source_t *
+zip_source_function(zip_t *za, zip_source_callback zcb, void *ud)
{
- struct zip_source *zs;
+ if (za == NULL) {
+ return NULL;
+ }
+
+ return zip_source_function_create(zcb, ud, &za->error);
+}
- if (za == NULL)
- return NULL;
- if ((zs=_zip_source_new(za)) == NULL)
+ZIP_EXTERN zip_source_t *
+zip_source_function_create(zip_source_callback zcb, void *ud, zip_error_t *error)
+{
+ zip_source_t *zs;
+
+ if ((zs=_zip_source_new(error)) == NULL)
return NULL;
zs->cb.f = zcb;
zs->ud = ud;
-
+
+ zs->supports = zcb(ud, NULL, 0, ZIP_SOURCE_SUPPORTS);
+ if (zs->supports < 0) {
+ zs->supports = ZIP_SOURCE_SUPPORTS_READABLE;
+ }
+
return zs;
}
+ZIP_EXTERN void
+zip_source_keep(zip_source_t *src)
+{
+ src->refcount++;
+}
+
-struct zip_source *
-_zip_source_new(struct zip *za)
+zip_source_t *
+_zip_source_new(zip_error_t *error)
{
- struct zip_source *src;
+ zip_source_t *src;
- if ((src=(struct zip_source *)malloc(sizeof(*src))) == NULL) {
- _zip_error_set(&za->error, ZIP_ER_MEMORY, 0);
+ if ((src=(zip_source_t *)malloc(sizeof(*src))) == NULL) {
+ zip_error_set(error, ZIP_ER_MEMORY, 0);
return NULL;
}
src->src = NULL;
src->cb.f = NULL;
src->ud = NULL;
- src->error_source = ZIP_LES_NONE;
- src->is_open = 0;
+ src->open_count = 0;
+ src->write_state = ZIP_SOURCE_WRITE_CLOSED;
+ src->source_closed = false;
+ src->source_archive = NULL;
+ src->refcount = 1;
+ zip_error_init(&src->error);
return src;
}