From: Joerg Sonnenberger Date: Sat, 26 Jul 2008 00:41:15 +0000 (-0400) Subject: - include stdlib.h and string.h explicit as functions are used X-Git-Tag: v2.6.0~131 X-Git-Url: http://git.ipfire.org/gitweb.cgi?a=commitdiff_plain;h=87db6efc059e4b2703f82d9d39dcf926d06e4fe4;p=thirdparty%2Flibarchive.git - include stdlib.h and string.h explicit as functions are used - defer freeing the string buffer into new destroy function SVN-Revision: 161 --- diff --git a/libarchive/archive_write_set_format_mtree.c b/libarchive/archive_write_set_format_mtree.c index 640679e63..3a67deb96 100644 --- a/libarchive/archive_write_set_format_mtree.c +++ b/libarchive/archive_write_set_format_mtree.c @@ -27,6 +27,8 @@ __FBSDID("$FreeBSD$"); #include +#include +#include #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;