diff options
author | Denys Vlasenko <vda.linux@googlemail.com> | 2009-12-16 23:18:59 +0100 |
---|---|---|
committer | Denys Vlasenko <vda.linux@googlemail.com> | 2009-12-16 23:18:59 +0100 |
commit | 8a936cfab718aee9f304f1b41e6b16cf6b5999f9 (patch) | |
tree | 5ae3e37a204a8d13e7e70b84a48ec415e464e98a /archival/tar.c | |
parent | 425ad9c93b2736a0ebfbba6267bc1ad56c49d156 (diff) | |
download | busybox-w32-8a936cfab718aee9f304f1b41e6b16cf6b5999f9.tar.gz busybox-w32-8a936cfab718aee9f304f1b41e6b16cf6b5999f9.tar.bz2 busybox-w32-8a936cfab718aee9f304f1b41e6b16cf6b5999f9.zip |
tar: add support for --overwrite. +70 bytes.
Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com>
Diffstat (limited to 'archival/tar.c')
-rw-r--r-- | archival/tar.c | 13 |
1 files changed, 11 insertions, 2 deletions
diff --git a/archival/tar.c b/archival/tar.c index 7ec101d31..5994d8913 100644 --- a/archival/tar.c +++ b/archival/tar.c | |||
@@ -751,6 +751,7 @@ enum { | |||
751 | #if ENABLE_FEATURE_TAR_LONG_OPTIONS | 751 | #if ENABLE_FEATURE_TAR_LONG_OPTIONS |
752 | OPTBIT_NUMERIC_OWNER, | 752 | OPTBIT_NUMERIC_OWNER, |
753 | OPTBIT_NOPRESERVE_PERM, | 753 | OPTBIT_NOPRESERVE_PERM, |
754 | OPTBIT_OVERWRITE, | ||
754 | #endif | 755 | #endif |
755 | OPT_TEST = 1 << 0, // t | 756 | OPT_TEST = 1 << 0, // t |
756 | OPT_EXTRACT = 1 << 1, // x | 757 | OPT_EXTRACT = 1 << 1, // x |
@@ -771,6 +772,7 @@ enum { | |||
771 | OPT_COMPRESS = IF_FEATURE_SEAMLESS_Z( (1 << OPTBIT_COMPRESS )) + 0, // Z | 772 | OPT_COMPRESS = IF_FEATURE_SEAMLESS_Z( (1 << OPTBIT_COMPRESS )) + 0, // Z |
772 | OPT_NUMERIC_OWNER = IF_FEATURE_TAR_LONG_OPTIONS((1 << OPTBIT_NUMERIC_OWNER )) + 0, // numeric-owner | 773 | OPT_NUMERIC_OWNER = IF_FEATURE_TAR_LONG_OPTIONS((1 << OPTBIT_NUMERIC_OWNER )) + 0, // numeric-owner |
773 | OPT_NOPRESERVE_PERM = IF_FEATURE_TAR_LONG_OPTIONS((1 << OPTBIT_NOPRESERVE_PERM)) + 0, // no-same-permissions | 774 | OPT_NOPRESERVE_PERM = IF_FEATURE_TAR_LONG_OPTIONS((1 << OPTBIT_NOPRESERVE_PERM)) + 0, // no-same-permissions |
775 | OPT_OVERWRITE = IF_FEATURE_TAR_LONG_OPTIONS((1 << OPTBIT_OVERWRITE )) + 0, // overwrite | ||
774 | }; | 776 | }; |
775 | #if ENABLE_FEATURE_TAR_LONG_OPTIONS | 777 | #if ENABLE_FEATURE_TAR_LONG_OPTIONS |
776 | static const char tar_longopts[] ALIGN1 = | 778 | static const char tar_longopts[] ALIGN1 = |
@@ -807,9 +809,11 @@ static const char tar_longopts[] ALIGN1 = | |||
807 | "compress\0" No_argument "Z" | 809 | "compress\0" No_argument "Z" |
808 | # endif | 810 | # endif |
809 | /* use numeric uid/gid from tar header, not textual */ | 811 | /* use numeric uid/gid from tar header, not textual */ |
810 | "numeric-owner\0" No_argument "\xfd" | 812 | "numeric-owner\0" No_argument "\xfc" |
811 | /* do not restore mode */ | 813 | /* do not restore mode */ |
812 | "no-same-permissions\0" No_argument "\xfe" | 814 | "no-same-permissions\0" No_argument "\xfd" |
815 | /* on unpack, open with O_TRUNC and !O_EXCL */ | ||
816 | "overwrite\0" No_argument "\xfe" | ||
813 | /* --exclude takes next bit position in option mask, */ | 817 | /* --exclude takes next bit position in option mask, */ |
814 | /* therefore we have to put it _after_ --no-same-permissions */ | 818 | /* therefore we have to put it _after_ --no-same-permissions */ |
815 | # if ENABLE_FEATURE_TAR_FROM | 819 | # if ENABLE_FEATURE_TAR_FROM |
@@ -924,6 +928,11 @@ int tar_main(int argc UNUSED_PARAM, char **argv) | |||
924 | if (opt & OPT_NOPRESERVE_PERM) | 928 | if (opt & OPT_NOPRESERVE_PERM) |
925 | tar_handle->ah_flags |= ARCHIVE_DONT_RESTORE_PERM; | 929 | tar_handle->ah_flags |= ARCHIVE_DONT_RESTORE_PERM; |
926 | 930 | ||
931 | if (opt & OPT_OVERWRITE) { | ||
932 | tar_handle->ah_flags &= ~ARCHIVE_UNLINK_OLD; | ||
933 | tar_handle->ah_flags |= ARCHIVE_O_TRUNC; | ||
934 | } | ||
935 | |||
927 | if (opt & OPT_GZIP) | 936 | if (opt & OPT_GZIP) |
928 | get_header_ptr = get_header_tar_gz; | 937 | get_header_ptr = get_header_tar_gz; |
929 | 938 | ||