Rename _zip_free to zip_discard and make it available in the public API. It closes zip archives without saving changes. --HG-- branch : HEAD
diff --git a/NEWS b/NEWS index 72b10d4..398d686 100644 --- a/NEWS +++ b/NEWS
@@ -1,5 +1,6 @@ 0.xx [20xx/xx/xx] +* Added zip_discard() * more changes for Windows support * additional test cases
diff --git a/lib/CMakeLists.txt b/lib/CMakeLists.txt index 9cde52d..d1cb0c3 100644 --- a/lib/CMakeLists.txt +++ b/lib/CMakeLists.txt
@@ -58,6 +58,7 @@ zip_close.c zip_delete.c zip_dirent.c + zip_discard.c zip_entry_free.c zip_entry_new.c zip_err_str.c @@ -79,7 +80,6 @@ zip_fopen_index.c zip_fopen_index_encrypted.c zip_fread.c - zip_free.c zip_get_archive_comment.c zip_get_archive_flag.c zip_get_compression_implementation.c
diff --git a/lib/Makefile.am b/lib/Makefile.am index 9ecf677..9a1c28d 100644 --- a/lib/Makefile.am +++ b/lib/Makefile.am
@@ -15,6 +15,7 @@ zip_close.c \ zip_delete.c \ zip_dirent.c \ + zip_discard.c \ zip_entry_free.c \ zip_entry_new.c \ zip_err_str.c \ @@ -36,7 +37,6 @@ zip_fopen_index.c \ zip_fopen_index_encrypted.c \ zip_fread.c \ - zip_free.c \ zip_get_archive_comment.c \ zip_get_archive_flag.c \ zip_get_compression_implementation.c \
diff --git a/lib/zip.h b/lib/zip.h index 980eb91..b34039f 100644 --- a/lib/zip.h +++ b/lib/zip.h
@@ -218,6 +218,7 @@ ZIP_EXTERN zip_int64_t zip_add(struct zip *, const char *, struct zip_source *); ZIP_EXTERN zip_int64_t zip_add_dir(struct zip *, const char *); ZIP_EXTERN int zip_close(struct zip *); +ZIP_EXTERN void zip_discard(struct zip *); ZIP_EXTERN int zip_delete(struct zip *, zip_uint64_t); ZIP_EXTERN void zip_error_clear(struct zip *); ZIP_EXTERN void zip_error_get(struct zip *, int *, int *);
diff --git a/lib/zip_close.c b/lib/zip_close.c index f815723..323d4ce 100644 --- a/lib/zip_close.c +++ b/lib/zip_close.c
@@ -89,7 +89,7 @@ return -1; if (!_zip_changed(za, &survivors)) { - _zip_free(za); + zip_discard(za); return 0; } @@ -101,7 +101,7 @@ return -1; } } - _zip_free(za); + zip_discard(za); return 0; } @@ -347,7 +347,7 @@ chmod(za->zn, 0666&~mask); #endif - _zip_free(za); + zip_discard(za); free(temp); return 0;
diff --git a/lib/zip_free.c b/lib/zip_discard.c similarity index 93% rename from lib/zip_free.c rename to lib/zip_discard.c index 9932c14..16cc3d8 100644 --- a/lib/zip_free.c +++ b/lib/zip_discard.c
@@ -1,6 +1,6 @@ /* - zip_free.c -- free struct zip - Copyright (C) 1999-2007 Dieter Baron and Thomas Klausner + zip_discard.c -- discard and free struct zip + Copyright (C) 1999-2012 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> @@ -39,12 +39,12 @@ -/* _zip_free: +/* zip_discard: frees the space allocated to a zipfile struct, and closes the corresponding file. */ void -_zip_free(struct zip *za) +zip_discard(struct zip *za) { int i;
diff --git a/lib/zip_open.c b/lib/zip_open.c index f147004..75e7670 100644 --- a/lib/zip_open.c +++ b/lib/zip_open.c
@@ -124,7 +124,7 @@ else if ((za->entry=(struct zip_entry *)malloc(sizeof(*(za->entry)) * cdir->nentry)) == NULL) { set_error(zep, NULL, ZIP_ER_MEMORY); - _zip_free(za); + zip_discard(za); return NULL; } for (i=0; i<cdir->nentry; i++) @@ -460,7 +460,7 @@ else { za->zn = strdup(fn); if (!za->zn) { - _zip_free(za); + zip_discard(za); set_error(zep, NULL, ZIP_ER_MEMORY); return NULL; }
diff --git a/lib/zipint.h b/lib/zipint.h index b39b786..2e21946 100644 --- a/lib/zipint.h +++ b/lib/zipint.h
@@ -356,7 +356,6 @@ zip_uint64_t, zip_int64_t, const char *); int _zip_changed(struct zip *, int *); -void _zip_free(struct zip *); const char *_zip_get_name(struct zip *, zip_uint64_t, int, struct zip_error *); int _zip_local_header_read(struct zip *, int); void *_zip_memdup(const void *, size_t, struct zip_error *);
diff --git a/man/CMakeLists.txt b/man/CMakeLists.txt index d723942..53d114b 100644 --- a/man/CMakeLists.txt +++ b/man/CMakeLists.txt
@@ -4,6 +4,7 @@ zip_add_dir.mdoc zip_close.mdoc zip_delete.mdoc + zip_discard.mdoc zip_error_clear.mdoc zip_error_get.mdoc zip_error_get_sys_type.mdoc
diff --git a/man/Makefile.am b/man/Makefile.am index 43fdfc2..9e83698 100644 --- a/man/Makefile.am +++ b/man/Makefile.am
@@ -11,6 +11,7 @@ zip_add_dir.mdoc \ zip_close.mdoc \ zip_delete.mdoc \ + zip_discard.mdoc \ zip_error_clear.mdoc \ zip_error_get.mdoc \ zip_error_get_sys_type.mdoc \
diff --git a/man/libzip.man b/man/libzip.man index 3fca6a3..fef5c4e 100644 --- a/man/libzip.man +++ b/man/libzip.man
@@ -57,6 +57,7 @@ zip_fclose(3) .SS "close archive" zip_close(3) +zip_discard(3) .SS "miscellaneous" zip_stat(3) zip_get_archive_comment(3)
diff --git a/man/libzip.mdoc b/man/libzip.mdoc index d1d8879..c3e598f 100644 --- a/man/libzip.mdoc +++ b/man/libzip.mdoc
@@ -60,6 +60,7 @@ .Xr zip_fclose 3 .Ss close archive .Xr zip_close 3 +.Xr zip_discard 3 .Ss miscellaneous .Xr zip_stat 3 .Xr zip_get_archive_comment 3
diff --git a/man/zip_close.man b/man/zip_close.man index 3fc9a2a..6e599f3 100644 --- a/man/zip_close.man +++ b/man/zip_close.man
@@ -1,5 +1,5 @@ .\" zip_close.mdoc \-- close zip archive -.\" Copyright (C) 2003-2009 Dieter Baron and Thomas Klausner +.\" Copyright (C) 2003-2012 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> @@ -29,7 +29,7 @@ .\" OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN .\" IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. .\" -.TH ZIP_CLOSE 3 "February 15, 2009" NiH +.TH ZIP_CLOSE 3 "February 13, 2012" NiH .SH "NAME" zip_close \- close zip archive .SH "LIBRARY" @@ -56,6 +56,9 @@ \fBarchive\fR contains no files, the file is completely removed (no empty archive is written). +.PP +To close a zip file without saving changes, use +zip_discard(3). .SH "RETURN VALUES" Upon successful completion 0 is returned. Otherwise, \-1 is returned and the error code in @@ -108,6 +111,7 @@ for added or replaced files will be passed back. .SH "SEE ALSO" libzip(3), +zip_discard(3), zip_error_get(3), zip_fdopen(3), zip_open(3),
diff --git a/man/zip_close.mdoc b/man/zip_close.mdoc index 0db9bb6..3896038 100644 --- a/man/zip_close.mdoc +++ b/man/zip_close.mdoc
@@ -1,5 +1,5 @@ .\" zip_close.mdoc -- close zip archive -.\" Copyright (C) 2003-2009 Dieter Baron and Thomas Klausner +.\" Copyright (C) 2003-2012 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> @@ -29,7 +29,7 @@ .\" OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN .\" IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. .\" -.Dd February 15, 2009 +.Dd February 13, 2012 .Dt ZIP_CLOSE 3 .Os .Sh NAME @@ -58,6 +58,9 @@ .Ar archive contains no files, the file is completely removed (no empty archive is written). +.Pp +To close a zip file without saving changes, use +.Xr zip_discard 3 . .Sh RETURN VALUES Upon successful completion 0 is returned. Otherwise, \-1 is returned and the error code in @@ -99,6 +102,7 @@ for added or replaced files will be passed back. .Sh SEE ALSO .Xr libzip 3 , +.Xr zip_discard 3 , .Xr zip_error_get 3 , .Xr zip_fdopen 3 , .Xr zip_open 3 ,
diff --git a/man/zip_discard.man b/man/zip_discard.man new file mode 100644 index 0000000..1f2b2b5 --- /dev/null +++ b/man/zip_discard.man
@@ -0,0 +1,56 @@ +.\" zip_discard.mdoc \-- close zip archive and discard changes +.\" Copyright (C) 2012 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> +.\" +.\" Redistribution and use in source and binary forms, with or without +.\" modification, are permitted provided that the following conditions +.\" are met: +.\" 1. Redistributions of source code must retain the above copyright +.\" notice, this list of conditions and the following disclaimer. +.\" 2. Redistributions in binary form must reproduce the above copyright +.\" notice, this list of conditions and the following disclaimer in +.\" the documentation and/or other materials provided with the +.\" distribution. +.\" 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 +.\" ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHORS BE LIABLE FOR ANY +.\" DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL +.\" DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE +.\" GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS +.\" INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER +.\" IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR +.\" OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN +.\" IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +.\" +.TH ZIP_DISCARD 3 "February 13, 2012" NiH +.SH "NAME" +zip_discard \- close zip archive and discard changes +.SH "LIBRARY" +libzip (-lzip) +.SH "SYNOPSIS" +#include <zip.h> +.PP +void +zip_discard(struct zip *archive); +.SH "DESCRIPTION" +The +zip_discard +function closes +\fBarchive\fR +and frees the memory allocated for it. +Any changes to the archive are not written to disk and discarded. +.SH "SEE ALSO" +libzip(3), +zip_close(3) +.SH "AUTHORS" + +Dieter Baron <dillo@giga.or.at> +and +Thomas Klausner <tk@giga.or.at>
diff --git a/man/zip_discard.mdoc b/man/zip_discard.mdoc new file mode 100644 index 0000000..8512ea7 --- /dev/null +++ b/man/zip_discard.mdoc
@@ -0,0 +1,58 @@ +.\" zip_discard.mdoc -- close zip archive and discard changes +.\" Copyright (C) 2012 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> +.\" +.\" Redistribution and use in source and binary forms, with or without +.\" modification, are permitted provided that the following conditions +.\" are met: +.\" 1. Redistributions of source code must retain the above copyright +.\" notice, this list of conditions and the following disclaimer. +.\" 2. Redistributions in binary form must reproduce the above copyright +.\" notice, this list of conditions and the following disclaimer in +.\" the documentation and/or other materials provided with the +.\" distribution. +.\" 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 +.\" ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHORS BE LIABLE FOR ANY +.\" DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL +.\" DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE +.\" GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS +.\" INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER +.\" IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR +.\" OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN +.\" IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +.\" +.Dd February 13, 2012 +.Dt ZIP_DISCARD 3 +.Os +.Sh NAME +.Nm zip_discard +.Nd close zip archive and discard changes +.Sh LIBRARY +libzip (-lzip) +.Sh SYNOPSIS +.In zip.h +.Ft void +.Fn zip_discard "struct zip *archive" +.Sh DESCRIPTION +The +.Fn zip_discard +function closes +.Ar archive +and frees the memory allocated for it. +Any changes to the archive are not written to disk and discarded. +.Sh SEE ALSO +.Xr libzip 3 , +.Xr zip_close 3 +.Sh AUTHORS +.An -nosplit +.An Dieter Baron Aq dillo@giga.or.at +and +.An Thomas Klausner Aq tk@giga.or.at