tools/xz: add some upstream patches
authorAlexandros C. Couloumbis <alex@ozo.com>
Thu, 10 Mar 2011 18:41:33 +0000 (18:41 +0000)
committerAlexandros C. Couloumbis <alex@ozo.com>
Thu, 10 Mar 2011 18:41:33 +0000 (18:41 +0000)
SVN-Revision: 26018

tools/xz/patches/000-upstream-001-check_compress.patch [new file with mode: 0644]
tools/xz/patches/000-upstream-002-clean_suffix.patch [new file with mode: 0644]

diff --git a/tools/xz/patches/000-upstream-001-check_compress.patch b/tools/xz/patches/000-upstream-001-check_compress.patch
new file mode 100644 (file)
index 0000000..1b918a4
--- /dev/null
@@ -0,0 +1,32 @@
+From: Lasse Collin <lasse.collin@tukaani.org>
+Date: Fri, 4 Feb 2011 09:29:47 +0000 (+0200)
+Subject: xz: Check if the file already has custom suffix when compressing.
+X-Git-Url: http://repo.or.cz/w/xz.git/commitdiff_plain/8930c7ae3f82bdae15aa129f01de08be23d7e8d7
+
+xz: Check if the file already has custom suffix when compressing.
+
+Now "xz -S .test foo.test" refuses to compress the
+file because it already has the suffix .test. The man
+page had it documented this way already.
+---
+
+diff --git a/src/xz/suffix.c b/src/xz/suffix.c
+index ea86c1a..f795e2a 100644
+--- a/src/xz/suffix.c
++++ b/src/xz/suffix.c
+@@ -183,6 +183,15 @@ compressed_name(const char *src_name, const size_t src_len)
+               }
+       }
++      if (custom_suffix != NULL) {
++              if (test_suffix(custom_suffix, src_name, src_len) != 0) {
++                      message_warning(_("%s: File already has `%s' "
++                                      "suffix, skipping"), src_name,
++                                      custom_suffix);
++                      return NULL;
++              }
++      }
++
+       // TODO: Hmm, maybe it would be better to validate this in args.c,
+       // since the suffix handling when decoding is weird now.
+       if (opt_format == FORMAT_RAW && custom_suffix == NULL) {
diff --git a/tools/xz/patches/000-upstream-002-clean_suffix.patch b/tools/xz/patches/000-upstream-002-clean_suffix.patch
new file mode 100644 (file)
index 0000000..e4e2c79
--- /dev/null
@@ -0,0 +1,105 @@
+From: Lasse Collin <lasse.collin@tukaani.org>
+Date: Fri, 4 Feb 2011 20:49:31 +0000 (+0200)
+Subject: xz: Clean up suffix.c.
+X-Git-Url: http://repo.or.cz/w/xz.git/commitdiff_plain/96f94bc925d579a700147fa5d7793b64d69cfc18
+
+xz: Clean up suffix.c.
+
+struct suffix_pair isn't needed in compresed_name()
+so get rid of it there.
+---
+
+diff --git a/src/xz/suffix.c b/src/xz/suffix.c
+index f795e2a..c89f67f 100644
+--- a/src/xz/suffix.c
++++ b/src/xz/suffix.c
+@@ -21,12 +21,6 @@
+ static char *custom_suffix = NULL;
+-struct suffix_pair {
+-      const char *compressed;
+-      const char *uncompressed;
+-};
+-
+-
+ /// \brief      Test if the char is a directory separator
+ static bool
+ is_dir_sep(char c)
+@@ -86,7 +80,10 @@ test_suffix(const char *suffix, const char *src_name, size_t src_len)
+ static char *
+ uncompressed_name(const char *src_name, const size_t src_len)
+ {
+-      static const struct suffix_pair suffixes[] = {
++      static const struct {
++              const char *compressed;
++              const char *uncompressed;
++      } suffixes[] = {
+               { ".xz",    "" },
+               { ".txz",   ".tar" }, // .txz abbreviation for .txt.gz is rare.
+               { ".lzma",  "" },
+@@ -145,25 +142,25 @@ static char *
+ compressed_name(const char *src_name, const size_t src_len)
+ {
+       // The order of these must match the order in args.h.
+-      static const struct suffix_pair all_suffixes[][3] = {
++      static const char *const all_suffixes[][3] = {
+               {
+-                      { ".xz",    "" },
+-                      { ".txz",   ".tar" },
+-                      { NULL, NULL }
++                      ".xz",
++                      ".txz",
++                      NULL
+               }, {
+-                      { ".lzma",  "" },
+-                      { ".tlz",   ".tar" },
+-                      { NULL,     NULL }
++                      ".lzma",
++                      ".tlz",
++                      NULL
+ /*
+               }, {
+-                      { ".gz",    "" },
+-                      { ".tgz",   ".tar" },
+-                      { NULL,     NULL }
++                      ".gz",
++                      ".tgz",
++                      NULL
+ */
+               }, {
+                       // --format=raw requires specifying the suffix
+                       // manually or using stdout.
+-                      { NULL,     NULL }
++                      NULL
+               }
+       };
+@@ -171,14 +168,13 @@ compressed_name(const char *src_name, const size_t src_len)
+       assert(opt_format != FORMAT_AUTO);
+       const size_t format = opt_format - 1;
+-      const struct suffix_pair *const suffixes = all_suffixes[format];
++      const char *const *suffixes = all_suffixes[format];
+-      for (size_t i = 0; suffixes[i].compressed != NULL; ++i) {
+-              if (test_suffix(suffixes[i].compressed, src_name, src_len)
+-                              != 0) {
++      for (size_t i = 0; suffixes[i] != NULL; ++i) {
++              if (test_suffix(suffixes[i], src_name, src_len) != 0) {
+                       message_warning(_("%s: File already has `%s' "
+                                       "suffix, skipping"), src_name,
+-                                      suffixes[i].compressed);
++                                      suffixes[i]);
+                       return NULL;
+               }
+       }
+@@ -202,7 +198,7 @@ compressed_name(const char *src_name, const size_t src_len)
+       }
+       const char *suffix = custom_suffix != NULL
+-                      ? custom_suffix : suffixes[0].compressed;
++                      ? custom_suffix : suffixes[0];
+       const size_t suffix_len = strlen(suffix);
+       char *dest_name = xmalloc(src_len + suffix_len + 1);