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