diff options
author | Remi Collet <remi@fedoraproject.org> | 2015-05-06 14:36:18 +0200 |
---|---|---|
committer | Remi Collet <remi@php.net> | 2015-05-06 15:16:43 +0200 |
commit | 9e0cc7a1d926c1364a834177cadea431cd8b39a7 (patch) | |
tree | f63c505073d6aa0b74bde71eb6a67e6e4c23d8bd /ext/zip/lib/zip_source_function.c | |
parent | 31f516b4888fcf096fe0912828948bed84f2ad1c (diff) | |
download | php-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.c | 57 |
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; } |