[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[Bug-tar] [PATCH] ZSTD compression support.
From: |
Adam Borowski |
Subject: |
[Bug-tar] [PATCH] ZSTD compression support. |
Date: |
Wed, 15 Nov 2017 22:02:12 +0100 |
Its customary file extension is ".zst", while some tools use ".tzst" as a
shorthand for ".tar.zst".
---
Not sure what/if a short option would be appropriate.
configure.ac | 1 +
doc/tar.1 | 4 ++++
doc/tar.texi | 12 ++++++++++--
src/buffer.c | 5 ++++-
src/suffix.c | 2 ++
src/tar.c | 12 +++++++++++-
6 files changed, 32 insertions(+), 4 deletions(-)
diff --git a/configure.ac b/configure.ac
index e89ed1d..42c892c 100644
--- a/configure.ac
+++ b/configure.ac
@@ -250,6 +250,7 @@ TAR_COMPR_PROGRAM(lzip)
TAR_COMPR_PROGRAM(lzma)
TAR_COMPR_PROGRAM(lzop)
TAR_COMPR_PROGRAM(xz)
+TAR_COMPR_PROGRAM(zstd)
AC_MSG_CHECKING(for default archive format)
diff --git a/doc/tar.1 b/doc/tar.1
index f5c1fca..b140446 100644
--- a/doc/tar.1
+++ b/doc/tar.1
@@ -828,6 +828,10 @@ Filter the archive through
\fB\-Z\fR, \fB\-\-compress\fR, \fB\-\-uncompress\fR
Filter the archive through
.BR compress (1).
+.TP
+\fB\-\-zstd\fR
+Filter the archive through
+.BR zstd (1).
.SS Local file selection
.TP
\fB\-\-add\-file\fR=\fIFILE\fR
diff --git a/doc/tar.texi b/doc/tar.texi
index 64d1268..a5f66e0 100644
--- a/doc/tar.texi
+++ b/doc/tar.texi
@@ -3713,6 +3713,10 @@ only attributes from the user namespace.
@itemx -J
Use @command{xz} for compressing or decompressing the archives. @xref{gzip}.
address@hidden
address@hidden --zstd
+Use @command{zstd} for compressing or decompressing the archives. @xref{gzip}.
+
@end table
@node Short Option Summary
@@ -9569,6 +9573,7 @@ switch to @samp{posix}.
@cindex lzma
@cindex lzop
@cindex compress
address@hidden zstd
@GNUTAR{} is able to create and read compressed archives. It supports
a wide variety of compression programs, namely: @command{gzip},
@command{bzip2}, @command{lzip}, @command{lzma}, @command{lzop},
@@ -9585,8 +9590,9 @@ create a @command{gzip} compressed archive, @option{-j}
@option{--lzip} to create an @asis{lzip} compressed archive,
@option{-J} (@option{--xz}) to create an @asis{XZ} archive,
@option{--lzma} to create an @asis{LZMA} compressed
-archive, @option{--lzop} to create an @asis{LSOP} archive, and
address@hidden (@option{--compress}) to use @command{compress} program.
+archive, @option{--lzop} to create an @asis{LSOP} archive,
address@hidden (@option{--compress}) to use @command{compress} program,
+and @option{--zstd} to create a @asis{ZSTD} archive.
For example:
@smallexample
@@ -9779,6 +9785,8 @@ suffix. The following suffixes are recognized:
@item @samp{.tlz} @tab @command{lzma}
@item @samp{.lzo} @tab @command{lzop}
@item @samp{.xz} @tab @command{xz}
address@hidden @samp{.zst} @tab @command{zstd}
address@hidden @samp{.tzst} @tab @command{zstd}
@end multitable
@anchor{use-compress-program}
diff --git a/src/buffer.c b/src/buffer.c
index 6f96c2f..94d30c8 100644
--- a/src/buffer.c
+++ b/src/buffer.c
@@ -281,7 +281,8 @@ enum compress_type {
ct_lzip,
ct_lzma,
ct_lzop,
- ct_xz
+ ct_xz,
+ ct_zstd
};
static enum compress_type archive_compression_type = ct_none;
@@ -310,6 +311,7 @@ static struct zip_magic const magic[] = {
{ ct_lzma, 6, "\xFFLZMA" },
{ ct_lzop, 4, "\211LZO" },
{ ct_xz, 6, "\xFD" "7zXZ" },
+ { ct_zstd, 4, "\x28\xB5\x2F\xFD" },
};
#define NMAGIC (sizeof(magic)/sizeof(magic[0]))
@@ -325,6 +327,7 @@ static struct zip_program zip_program[] = {
{ ct_lzma, XZ_PROGRAM, "-J" },
{ ct_lzop, LZOP_PROGRAM, "--lzop" },
{ ct_xz, XZ_PROGRAM, "-J" },
+ { ct_zstd, ZSTD_PROGRAM, "--zstd" },
{ ct_none }
};
diff --git a/src/suffix.c b/src/suffix.c
index 47027e7..66b5694 100644
--- a/src/suffix.c
+++ b/src/suffix.c
@@ -46,6 +46,8 @@ static struct compression_suffix compression_suffixes[] = {
{ S(lzo, LZOP) },
{ S(xz, XZ) },
{ S(txz, XZ) }, /* Slackware */
+ { S(zst, ZSTD) },
+ { S(tzst, ZSTD) },
{ NULL }
#undef S
#undef __CAT2__
diff --git a/src/tar.c b/src/tar.c
index 2a5f86e..a440590 100644
--- a/src/tar.c
+++ b/src/tar.c
@@ -348,7 +348,8 @@ enum
WARNING_OPTION,
XATTR_OPTION,
XATTR_EXCLUDE,
- XATTR_INCLUDE
+ XATTR_INCLUDE,
+ ZSTD_OPTION,
};
static char const doc[] = N_("\
@@ -682,6 +683,7 @@ static struct argp_option options[] = {
{"lzma", LZMA_OPTION, 0, 0, NULL, GRID+1 },
{"lzop", LZOP_OPTION, 0, 0, NULL, GRID+1 },
{"xz", 'J', 0, 0, NULL, GRID+1 },
+ {"zstd", ZSTD_OPTION, 0, 0, NULL, GRID+1 },
#undef GRID
#define GRID 100
@@ -1129,6 +1131,10 @@ tar_help_filter (int key, const char *text, void *input)
s = xasprintf (_("filter the archive through %s"), XZ_PROGRAM);
break;
+ case ZSTD_OPTION:
+ s = xasprintf (_("filter the archive through %s"), ZSTD_PROGRAM);
+ break;
+
case ARGP_KEY_HELP_EXTRA:
{
const char *tstr;
@@ -1652,6 +1658,10 @@ parse_opt (int key, char *arg, struct argp_state *state)
set_use_compress_program_option (COMPRESS_PROGRAM, args->loc);
break;
+ case ZSTD_OPTION:
+ set_use_compress_program_option (ZSTD_PROGRAM, args->loc);
+ break;
+
case ATIME_PRESERVE_OPTION:
atime_preserve_option =
(arg
--
2.15.0
- [Bug-tar] [PATCH] ZSTD compression support.,
Adam Borowski <=