]> git.ipfire.org Git - thirdparty/libarchive.git/commitdiff
tar: expose ARCHIVE_READDISK_NO_SPARSE as --no-read-sparse
authorJonas Witschel <diabonas@archlinux.org>
Sun, 14 Nov 2021 17:56:49 +0000 (18:56 +0100)
committerJonas Witschel <diabonas@archlinux.org>
Sun, 14 Nov 2021 17:56:49 +0000 (18:56 +0100)
tar/bsdtar.1
tar/bsdtar.c
tar/bsdtar.h
tar/cmdline.c

index 86a06bbd13bbb41936030ceeaf728685aa2bff93..b15047001f6668a600dc9b58c8b5f01288eb3a40 100644 (file)
@@ -470,6 +470,11 @@ This is the reverse of
 and the default behavior if
 .Nm
 is run as non-root in x mode.
+.It Fl Fl no-read-sparse
+(c, r, u modes only)
+Do not read sparse file information from disk.
+This is the reverse of
+.Fl Fl read-sparse .
 .It Fl Fl no-safe-writes
 (x mode only)
 Do not create temporary files and use
@@ -730,6 +735,12 @@ By default, the archive is always read to the very end, since
 there can be multiple entries with the same name and, by convention,
 later entries overwrite earlier entries.
 This option is provided as a performance optimization.
+.It Fl Fl read-sparse
+(c, r, u modes only)
+Read sparse file information from disk.
+This is the reverse of
+.Fl Fl no-read-sparse
+and the default behavior.
 .It Fl S
 (x mode only)
 Extract files as sparse files.
index af41be5e4e26f8d2bddeda6f8de98ecf29591134..df0930ae09c2aeb01915f871881fbfe1a0949452 100644 (file)
@@ -542,6 +542,10 @@ main(int argc, char **argv)
                        bsdtar->extract_flags &= ~ARCHIVE_EXTRACT_MAC_METADATA;
                        bsdtar->flags |= OPTFLAG_NO_MAC_METADATA;
                        break;
+               case OPTION_NO_READ_SPARSE:
+                       bsdtar->readdisk_flags |= ARCHIVE_READDISK_NO_SPARSE;
+                       bsdtar->flags |= OPTFLAG_NO_READ_SPARSE;
+                       break;
                case OPTION_NO_SAFE_WRITES:
                        bsdtar->extract_flags &= ~ARCHIVE_EXTRACT_SAFE_WRITES;
                        break;
@@ -649,6 +653,10 @@ main(int argc, char **argv)
                case 'r': /* SUSv2 */
                        set_mode(bsdtar, opt);
                        break;
+               case OPTION_READ_SPARSE:
+                       bsdtar->readdisk_flags &= ~ARCHIVE_READDISK_NO_SPARSE;
+                       bsdtar->flags |= OPTFLAG_READ_SPARSE;
+                       break;
                case 'S': /* NetBSD pax-as-tar */
                        bsdtar->extract_flags |= ARCHIVE_EXTRACT_SPARSE;
                        break;
index 89aa3aa9198d6dab07a63ac0118b8cb56dce1665..8f9f79ab176e738ce55e5aed1723c19a1e43146d 100644 (file)
@@ -129,6 +129,8 @@ struct bsdtar {
 #define        OPTFLAG_FFLAGS          (0x00100000)    /* --fflags */
 #define        OPTFLAG_NO_MAC_METADATA (0x00200000)    /* --no-mac-metadata */
 #define        OPTFLAG_MAC_METADATA    (0x00400000)    /* --mac-metadata */
+#define        OPTFLAG_NO_READ_SPARSE  (0x00800000)    /* --no-read-sparse */
+#define        OPTFLAG_READ_SPARSE             (0x01000000)    /* --read-sparse */
 
 /* Fake short equivalents for long options that otherwise lack them. */
 enum {
@@ -164,6 +166,7 @@ enum {
        OPTION_NO_ACLS,
        OPTION_NO_FFLAGS,
        OPTION_NO_MAC_METADATA,
+       OPTION_NO_READ_SPARSE,
        OPTION_NO_SAFE_WRITES,
        OPTION_NO_SAME_OWNER,
        OPTION_NO_SAME_PERMISSIONS,
@@ -178,6 +181,7 @@ enum {
        OPTION_OPTIONS,
        OPTION_PASSPHRASE,
        OPTION_POSIX,
+       OPTION_READ_SPARSE,
        OPTION_SAFE_WRITES,
        OPTION_SAME_OWNER,
        OPTION_STRIP_COMPONENTS,
index b80937ffcb6e39f86dfb5bde0e7565738cfa7ec8..d49e5b0d16e7bbb415e35f84b5ef33cf01dccbf8 100644 (file)
@@ -122,6 +122,7 @@ static const struct bsdtar_option {
        { "no-acls",              0, OPTION_NO_ACLS },
        { "no-fflags",            0, OPTION_NO_FFLAGS },
        { "no-mac-metadata",      0, OPTION_NO_MAC_METADATA },
+       { "no-read-sparse",       0, OPTION_NO_READ_SPARSE },
        { "no-recursion",         0, 'n' },
        { "no-safe-writes",       0, OPTION_NO_SAFE_WRITES },
        { "no-same-owner",        0, OPTION_NO_SAME_OWNER },
@@ -145,6 +146,7 @@ static const struct bsdtar_option {
        { "posix",                0, OPTION_POSIX },
        { "preserve-permissions", 0, 'p' },
        { "read-full-blocks",     0, 'B' },
+       { "read-sparse",          0, OPTION_READ_SPARSE },
        { "safe-writes",          0, OPTION_SAFE_WRITES },
        { "same-owner",           0, OPTION_SAME_OWNER },
        { "same-permissions",     0, 'p' },