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