From: Michihiro NAKAJIMA Date: Fri, 6 Feb 2009 05:52:08 +0000 (-0500) Subject: Change /set keyword to be optional and don't output X-Git-Tag: v2.7.0~338 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=e9a18e30ee496a89608fbde7fb853995558bf6c5;p=thirdparty%2Flibarchive.git Change /set keyword to be optional and don't output /set keyword by default. SVN-Revision: 560 --- diff --git a/libarchive/archive_write_set_format_mtree.c b/libarchive/archive_write_set_format_mtree.c index 57c076b78..716f186a0 100644 --- a/libarchive/archive_write_set_format_mtree.c +++ b/libarchive/archive_write_set_format_mtree.c @@ -82,7 +82,7 @@ struct mtree_writer { int first; uint64_t entry_bytes_remaining; struct { - int processed; + int unprocessed; mode_t type; int keys; uid_t uid; @@ -394,7 +394,7 @@ set_global(struct mtree_writer *mtree, struct archive_entry *entry) if (setstr.length > 0) archive_string_sprintf(&mtree->buf, "/set%s\n", setstr.s); archive_string_free(&setstr); - mtree->set.processed = 1; + mtree->set.unprocessed = 0; mtree->set.keys = keys; } @@ -404,6 +404,8 @@ get_keys(struct mtree_writer *mtree, struct archive_entry *entry) int keys; keys = mtree->keys; + if (mtree->set.keys == 0) + return (keys); if ((mtree->set.keys & (F_GNAME | F_GID)) != 0 && mtree->set.gid == archive_entry_gid(entry)) keys &= ~(F_GNAME | F_GID); @@ -456,7 +458,7 @@ archive_write_mtree_header(struct archive_write *a, mtree->first = 0; archive_strcat(&mtree->buf, "#mtree\n"); } - if (!mtree->set.processed) + if (mtree->set.unprocessed) set_global(mtree, entry); archive_string_empty(&mtree->ebuf); @@ -897,6 +899,8 @@ archive_write_mtree_options(struct archive_write *a, const char *key, keybit = F_UID; else if (strcmp(key, "uname") == 0) keybit = F_UNAME; + else if (strcmp(key, "use-set") == 0) + mtree->set.unprocessed = (value != NULL)? 1: 0; break; } if (keybit != 0) {