Allows a more reproducible tarball creation
function old new delta tar_main 1273 1291 +18 writeTarHeader 871 873 +2 ------------------------------------------------------------------------------ (add/remove: 0/0 grow/shrink: 2/0 up/down: 20/0) Total: 20 bytes Signed-off-by: Sertonix <[email protected]> --- archival/tar.c | 20 ++++++++++++++------ 1 file changed, 14 insertions(+), 6 deletions(-) diff --git a/archival/tar.c b/archival/tar.c index 4ac870d9d..ce864d6aa 100644 --- a/archival/tar.c +++ b/archival/tar.c @@ -155,7 +155,7 @@ typedef struct HardLinkInfo { typedef struct TarBallInfo { int tarFd; /* Open-for-write file descriptor * for the tarball */ - int verboseFlag; /* Whether to print extra stuff or not */ + char flags; /* For TBINFO_*, see below */ # if ENABLE_FEATURE_TAR_FROM const llist_t *excludeList; /* List of files to not include */ # endif @@ -168,6 +168,11 @@ typedef struct TarBallInfo { * to include the tarball into itself */ } TarBallInfo; +enum { + TBINFO_VERBOSE = 1 << 0, /* Whether to print extra stuff or not */ + TBINFO_NUMERIC_OWNER = 1 << 1, /* Don't write uname/gname to tarball */ +}; + /* A nice enum with all the possible tar file content types */ enum { REGTYPE = '0', /* regular file */ @@ -316,9 +321,11 @@ static int writeTarHeader(struct TarBallInfo *tbInfo, /* users report that files with negative st_mtime cause trouble, so: */ PUT_OCTAL(header.mtime, statbuf->st_mtime >= 0 ? statbuf->st_mtime : 0); - /* Enter the user and group names */ - safe_strncpy(header.uname, get_cached_username(statbuf->st_uid), sizeof(header.uname)); - safe_strncpy(header.gname, get_cached_groupname(statbuf->st_gid), sizeof(header.gname)); + if (!(tbInfo->flags & TBINFO_NUMERIC_OWNER)) { + /* Enter the user and group names */ + safe_strncpy(header.uname, get_cached_username(statbuf->st_uid), sizeof(header.uname)); + safe_strncpy(header.gname, get_cached_groupname(statbuf->st_gid), sizeof(header.gname)); + } if (tbInfo->hlInfo) { /* This is a hard link */ @@ -418,7 +425,7 @@ static int writeTarHeader(struct TarBallInfo *tbInfo, chksum_and_xwrite_tar_header(tbInfo->tarFd, &header); /* Now do the verbose thing (or not) */ - if (tbInfo->verboseFlag) { + if (tbInfo->flags & TBINFO_VERBOSE) { FILE *vbFd = stdout; /* If archive goes to stdout, verbose goes to stderr */ @@ -1209,7 +1216,8 @@ int tar_main(int argc UNUSED_PARAM, char **argv) # endif tbInfo = xzalloc(sizeof(*tbInfo)); tbInfo->tarFd = tar_handle->src_fd; - tbInfo->verboseFlag = verboseFlag; + tbInfo->flags = (verboseFlag ? TBINFO_VERBOSE : 0) | + (opt & OPT_NUMERIC_OWNER ? TBINFO_NUMERIC_OWNER : 0); # if ENABLE_FEATURE_TAR_FROM tbInfo->excludeList = tar_handle->reject; # endif -- 2.51.0 _______________________________________________ busybox mailing list [email protected] https://lists.busybox.net/mailman/listinfo/busybox
