summaryrefslogtreecommitdiffstats
path: root/lib/libarchive/archive_write.c
diff options
context:
space:
mode:
Diffstat (limited to 'lib/libarchive/archive_write.c')
-rw-r--r--lib/libarchive/archive_write.c20
1 files changed, 17 insertions, 3 deletions
diff --git a/lib/libarchive/archive_write.c b/lib/libarchive/archive_write.c
index eded384..d3dfc26 100644
--- a/lib/libarchive/archive_write.c
+++ b/lib/libarchive/archive_write.c
@@ -141,14 +141,14 @@ archive_write_open(struct archive *a, void *client_data,
/*
- * Cleanup and free the archive object.
+ * Close out the archive.
*
* Be careful: user might just call write_new and then write_finish.
* Don't assume we actually wrote anything or performed any non-trivial
* initialization.
*/
-void
-archive_write_finish(struct archive *a)
+int
+archive_write_close(struct archive *a)
{
archive_check_magic(a, ARCHIVE_WRITE_MAGIC, ARCHIVE_STATE_ANY);
@@ -164,6 +164,20 @@ archive_write_finish(struct archive *a)
if (a->compression_finish != NULL)
(a->compression_finish)(a);
+ a->state = ARCHIVE_STATE_CLOSED;
+ return (ARCHIVE_OK);
+}
+
+/*
+ * Destroy the archive structure.
+ */
+void
+archive_write_finish(struct archive *a)
+{
+ archive_check_magic(a, ARCHIVE_WRITE_MAGIC, ARCHIVE_STATE_ANY);
+ if (a->state != ARCHIVE_STATE_CLOSED)
+ archive_write_close(a);
+
/* Release various dynamic buffers. */
free((void *)(uintptr_t)(const void *)a->nulls);
archive_string_free(&a->error_string);
OpenPOWER on IntegriCloud