--- /dev/null
+From 3d45373d3b192d7342d49524193497598818d36d Mon Sep 17 00:00:00 2001
+From: Adam Borowski <kilobyte@angband.pl>
+Date: Sun, 18 Mar 2018 10:24:13 +0200
+Subject: Add support for zstd compression
+
+* configure.ac (zstd): Register compression program.
+* doc/tar.1: Mention --zstd.
+* doc/tar.texi: Document zstd support.
+* src/buffer.c: Register zstd compression.
+* src/suffix.c: Add suffixes zst and tzst.
+* src/tar.c: New compression option --zstd.
+---
+ configure.ac | 1 +
+ doc/.gitignore | 1 +
+ doc/tar.1 | 4 ++++
+ doc/tar.texi | 29 +++++++++++++++++++++--------
+ src/buffer.c | 5 ++++-
+ src/suffix.c | 2 ++
+ src/tar.c | 12 +++++++++++-
+ 7 files changed, 44 insertions(+), 10 deletions(-)
+
+diff --git a/configure.ac b/configure.ac
+index 0bddbeb..354e787 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 ddf4fdc..0663525 100644
+--- a/doc/tar.1
++++ b/doc/tar.1
+@@ -831,6 +831,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 a56b9fb..1362216 100644
+--- a/doc/tar.texi
++++ b/doc/tar.texi
+@@ -3713,6 +3713,9 @@ only attributes from the user namespace.
+ @itemx -J
+ Use @command{xz} for compressing or decompressing the archives. @xref{gzip}.
+
++@item --zstd
++Use @command{zstd} for compressing or decompressing the archives. @xref{gzip}.
++
+ @end table
+
+ @node Short Option Summary
+@@ -9520,6 +9523,7 @@ switch to @samp{posix}.
+ @cindex lzma
+ @cindex lzop
+ @cindex compress
++@cindex 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},
+@@ -9530,14 +9534,21 @@ compression programs@footnote{It also had patent problems in the past.}.
+
+ Creating a compressed archive is simple: you just specify a
+ @dfn{compression option} along with the usual archive creation
+-commands. The compression option is @option{-z} (@option{--gzip}) to
+-create a @command{gzip} compressed archive, @option{-j}
+-(@option{--bzip2}) to create a @command{bzip2} compressed archive,
+-@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{LZOP} archive, and
+-@option{-Z} (@option{--compress}) to use @command{compress} program.
++commands. Available compression options are summarized in the
++table below:
++
++@multitable @columnfractions 0.4 0.2 0.4
++@headitem Long @tab Short @tab Archive format
++@item @option{--gzip} @tab @option{-z} @tab @command{gzip}
++@item @option{--bzip2} @tab @option{-j} @tab @command{bzip2}
++@item @option{--xz} @tab @option{-J} @tab @command{xz}
++@item @option{--lzip} @tab @tab @command{lzip}
++@item @option{--lzma} @tab @tab @command{lzma}
++@item @option{--lzop} @tab @tab @command{lzop}
++@item @option{--zstd} @tab @tab @command{zstd}
++@item @option{--compress} @tab @option{-Z} @tab @command{compress}
++@end multitable
++
+ For example:
+
+ @smallexample
+@@ -9730,6 +9741,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}
++@item @samp{.zst} @tab @command{zstd}
++@item @samp{.tzst} @tab @command{zstd}
+ @end multitable
+
+ @anchor{use-compress-program}
+diff --git a/src/buffer.c b/src/buffer.c
+index 51f299f..063e1be 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 3f844a8..02fa561 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;
+@@ -1650,6 +1656,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
+--
+cgit v1.0-41-gc330
+