better names
--HG--
branch : HEAD
diff --git a/lib/zip_free.c b/lib/zip_free.c
new file mode 100644
index 0000000..3c89660
--- /dev/null
+++ b/lib/zip_free.c
@@ -0,0 +1,50 @@
+#include <stdlib.h>
+#include "zip.h"
+#include "zipint.h"
+
+
+
+/* _zip_free:
+ frees the space allocated to a zipfile struct, and closes the
+ corresponding file. Returns 0 if successful, the error returned
+ by fclose if not. */
+
+int
+_zip_free(struct zip *zf)
+{
+ int i, ret;
+
+ if (zf == NULL)
+ return 0;
+
+ if (zf->zn)
+ free(zf->zn);
+
+ if (zf->zp)
+ ret = fclose(zf->zp);
+
+ if (zf->com)
+ free(zf->com);
+
+ if (zf->entry) {
+ for (i=0; i<zf->nentry; i++) {
+ _zip_free_entry(zf->entry+i);
+ }
+ free (zf->entry);
+ }
+
+ for (i=0; i<zf->nfile; i++) {
+ zf->file[i]->flags = ZERR_ZIPCLOSED;
+ zf->file[i]->zf = NULL;
+ zf->file[i]->name = NULL;
+ }
+
+ free(zf->file);
+
+ free(zf);
+
+ if (ret)
+ zip_err = ZERR_CLOSE;
+
+ return ret;
+}