tar: add support for --overwrite. +70 bytes.

Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com>
diff --git a/archival/tar.c b/archival/tar.c
index 7ec101d..5994d89 100644
--- a/archival/tar.c
+++ b/archival/tar.c
@@ -751,6 +751,7 @@
 #if ENABLE_FEATURE_TAR_LONG_OPTIONS
 	OPTBIT_NUMERIC_OWNER,
 	OPTBIT_NOPRESERVE_PERM,
+	OPTBIT_OVERWRITE,
 #endif
 	OPT_TEST         = 1 << 0, // t
 	OPT_EXTRACT      = 1 << 1, // x
@@ -771,6 +772,7 @@
 	OPT_COMPRESS     = IF_FEATURE_SEAMLESS_Z(   (1 << OPTBIT_COMPRESS    )) + 0, // Z
 	OPT_NUMERIC_OWNER   = IF_FEATURE_TAR_LONG_OPTIONS((1 << OPTBIT_NUMERIC_OWNER  )) + 0, // numeric-owner
 	OPT_NOPRESERVE_PERM = IF_FEATURE_TAR_LONG_OPTIONS((1 << OPTBIT_NOPRESERVE_PERM)) + 0, // no-same-permissions
+	OPT_OVERWRITE       = IF_FEATURE_TAR_LONG_OPTIONS((1 << OPTBIT_OVERWRITE      )) + 0, // overwrite
 };
 #if ENABLE_FEATURE_TAR_LONG_OPTIONS
 static const char tar_longopts[] ALIGN1 =
@@ -807,9 +809,11 @@
 	"compress\0"            No_argument       "Z"
 # endif
 	/* use numeric uid/gid from tar header, not textual */
-	"numeric-owner\0"       No_argument       "\xfd"
+	"numeric-owner\0"       No_argument       "\xfc"
 	/* do not restore mode */
-	"no-same-permissions\0" No_argument       "\xfe"
+	"no-same-permissions\0" No_argument       "\xfd"
+	/* on unpack, open with O_TRUNC and !O_EXCL */
+	"overwrite\0"           No_argument       "\xfe"
 	/* --exclude takes next bit position in option mask, */
 	/* therefore we have to put it _after_ --no-same-permissions */
 # if ENABLE_FEATURE_TAR_FROM
@@ -924,6 +928,11 @@
 	if (opt & OPT_NOPRESERVE_PERM)
 		tar_handle->ah_flags |= ARCHIVE_DONT_RESTORE_PERM;
 
+	if (opt & OPT_OVERWRITE) {
+		tar_handle->ah_flags &= ~ARCHIVE_UNLINK_OLD;
+		tar_handle->ah_flags |= ARCHIVE_O_TRUNC;
+	}
+
 	if (opt & OPT_GZIP)
 		get_header_ptr = get_header_tar_gz;