]> git.ipfire.org Git - thirdparty/libarchive.git/commitdiff
- include stdlib.h and string.h explicit as functions are used
authorJoerg Sonnenberger <joerg.sonnenberger@gmail.com>
Sat, 26 Jul 2008 00:41:15 +0000 (20:41 -0400)
committerJoerg Sonnenberger <joerg.sonnenberger@gmail.com>
Sat, 26 Jul 2008 00:41:15 +0000 (20:41 -0400)
- defer freeing the string buffer into new destroy function

SVN-Revision: 161

libarchive/archive_write_set_format_mtree.c

index 640679e6356491bb96c585e89fea450cc084eed8..3a67deb961e8da56de4558c657c845e99b6f719b 100644 (file)
@@ -27,6 +27,8 @@
 __FBSDID("$FreeBSD$");
 
 #include <errno.h>
+#include <stdlib.h>
+#include <string.h>
 
 #include "archive.h"
 #include "archive_entry.h"
@@ -197,9 +199,9 @@ archive_write_mtree_finish(struct archive_write *a)
        struct mtree_writer *mtree= a->format_data;
        int ret;
 
-       ret = (a->compressor.write)(a, mtree->buf.s, mtree->buf.length);
-       archive_string_free(&mtree->buf);
-       return (ret);
+       archive_write_set_bytes_in_last_block(&a->archive, 1);
+
+       return (a->compressor.write)(a, mtree->buf.s, mtree->buf.length);
 }
 
 static ssize_t
@@ -210,6 +212,21 @@ archive_write_mtree_data(struct archive_write *a, const void *buff, size_t n)
        return n;
 }
 
+static int
+archive_write_mtree_destroy(struct archive_write *a)
+{
+       struct mtree_writer *mtree= a->format_data;
+
+       if (mtree == NULL)
+               return (ARCHIVE_OK);
+
+       archive_entry_free(mtree->entry);
+       archive_string_free(&mtree->buf);
+       free(mtree);
+       a->format_data = NULL;
+       return (ARCHIVE_OK);
+}
+
 int
 archive_write_set_format_mtree(struct archive *_a)
 {
@@ -229,6 +246,7 @@ archive_write_set_format_mtree(struct archive *_a)
        mtree->first = 1;
        archive_string_init(&mtree->buf);
        a->format_data = mtree;
+       a->format_destroy = archive_write_mtree_destroy;
 
        a->pad_uncompressed = 0;
        a->format_write_header = archive_write_mtree_header;