aboutsummaryrefslogtreecommitdiff
path: root/archival/tar.c
diff options
context:
space:
mode:
authorDenys Vlasenko <vda.linux@googlemail.com>2009-12-16 23:18:59 +0100
committerDenys Vlasenko <vda.linux@googlemail.com>2009-12-16 23:18:59 +0100
commit8a936cfab718aee9f304f1b41e6b16cf6b5999f9 (patch)
tree5ae3e37a204a8d13e7e70b84a48ec415e464e98a /archival/tar.c
parent425ad9c93b2736a0ebfbba6267bc1ad56c49d156 (diff)
downloadbusybox-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.c13
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
776static const char tar_longopts[] ALIGN1 = 778static 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