summaryrefslogtreecommitdiff
path: root/Build/source/utils/lzma-utils/extra
diff options
context:
space:
mode:
authorReinhard Kotucha <reinhard.kotucha@web.de>2007-10-01 02:30:18 +0000
committerReinhard Kotucha <reinhard.kotucha@web.de>2007-10-01 02:30:18 +0000
commit0e63127662c0de01c303110d17f1f398df26a6da (patch)
treee1f87ef24ac4ae086a9fe47525e47a92780820dd /Build/source/utils/lzma-utils/extra
parent093fcc55591976ccded1801969b0c0f4b1410c57 (diff)
lzma-utils: added
git-svn-id: svn://tug.org/texlive/trunk@5072 c570f23f-e606-0410-a88d-b1316a301751
Diffstat (limited to 'Build/source/utils/lzma-utils/extra')
-rw-r--r--Build/source/utils/lzma-utils/extra/magic/README3
-rw-r--r--Build/source/utils/lzma-utils/extra/magic/lzma.magic206
-rw-r--r--Build/source/utils/lzma-utils/extra/magic/lzma_new.magic16
-rw-r--r--Build/source/utils/lzma-utils/extra/mc/mc-4.6.1.lzma.patch222
-rw-r--r--Build/source/utils/lzma-utils/extra/tar/tar_lzma.diff66
5 files changed, 513 insertions, 0 deletions
diff --git a/Build/source/utils/lzma-utils/extra/magic/README b/Build/source/utils/lzma-utils/extra/magic/README
new file mode 100644
index 00000000000..7a6dbead8b2
--- /dev/null
+++ b/Build/source/utils/lzma-utils/extra/magic/README
@@ -0,0 +1,3 @@
+Don't use either of these magic files, they suffer from limitations of
+the `file' command that doesn't allow matching non-contiguous byte
+ranges unless you want it to give empty messages. :(
diff --git a/Build/source/utils/lzma-utils/extra/magic/lzma.magic b/Build/source/utils/lzma-utils/extra/magic/lzma.magic
new file mode 100644
index 00000000000..f35bfa4af50
--- /dev/null
+++ b/Build/source/utils/lzma-utils/extra/magic/lzma.magic
@@ -0,0 +1,206 @@
+# It was decided to use raw LZMA stream as the file format of LZMA
+# compressed files. This was an unfortunate decision since the files do
+# not have any magic first bytes.
+
+# LZMA files have no magic bytes. Add this to the very end of
+# /etc/file/magic to prevent mismatches.
+#
+# Some assumptions are made that limit the matching:
+# - The LZMA header has 64-bit value field for uncompressed size;
+# these checks assume that the uncompressed size is less than
+# 2^48 bytes (256 TiB). Fix this when files this big are common. ;-)
+# - Only dictionary sizes 2^n where 0 <= n <= 28 are recognized.
+# - File size should be checked, the minimum is 18 bytes.
+#
+# LZMA header structure (first 13 bytes):
+# 0 LZMA properties, 0x00 - 0xE1
+# 1-4 Dictionary size (little endian)
+# 5-12 Uncompressed size, filled with 0xFF if unknown (streamed data)
+#
+# This file is in the public domain. You can do whatever you want with it.
+
+# First byte is matched only here:
+0 ubyte <0xE2
+# Dictionary size:
+>1 lelong 0x00 LZMA encoded data, no dictionary
+# Streamed or non-streamed and uncompressed size:
+>>5 string \xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF \b, streamed, uncompressed size unknown
+>>5 string !\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF \b, non-streamed, uncompressed size
+>>>9 string \0\0\0\0
+>>>>5 lelong x %lu bytes
+>>>9 string !\0\0\0\0 over 4 GiB
+# The rest is mostly copypasting, only dictionary size varies. :-/
+>1 lelong 0x01 LZMA encoded data, 1-byte dictionary
+>>5 string \xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF \b, streamed, uncompressed size unknown
+>>5 string !\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF \b, non-streamed, uncompressed size
+>>>9 string \0\0\0\0
+>>>>5 lelong x %lu bytes
+>>>9 string !\0\0\0\0 over 4 GiB
+>1 lelong 0x02 LZMA encoded data, 2-byte dictionary
+>>5 string \xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF \b, streamed, uncompressed size unknown
+>>5 string !\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF \b, non-streamed, uncompressed size
+>>>9 string \0\0\0\0
+>>>>5 lelong x %lu bytes
+>>>9 string !\0\0\0\0 over 4 GiB
+>1 lelong 0x04 LZMA encoded data, 4-byte dictionary
+>>5 string \xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF \b, streamed, uncompressed size unknown
+>>5 string !\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF \b, non-streamed, uncompressed size
+>>>9 string \0\0\0\0
+>>>>5 lelong x %lu bytes
+>>>9 string !\0\0\0\0 over 4 GiB
+>1 lelong 0x08 LZMA encoded data, 8-byte dictionary
+>>5 string \xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF \b, streamed, uncompressed size unknown
+>>5 string !\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF \b, non-streamed, uncompressed size
+>>>9 string \0\0\0\0
+>>>>5 lelong x %lu bytes
+>>>9 string !\0\0\0\0 over 4 GiB
+>1 lelong 0x10 LZMA encoded data, 16-byte dictionary
+>>5 string \xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF \b, streamed, uncompressed size unknown
+>>5 string !\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF \b, non-streamed, uncompressed size
+>>>9 string \0\0\0\0
+>>>>5 lelong x %lu bytes
+>>>9 string !\0\0\0\0 over 4 GiB
+>1 lelong 0x20 LZMA encoded data, 32-byte dictionary
+>>5 string \xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF \b, streamed, uncompressed size unknown
+>>5 string !\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF \b, non-streamed, uncompressed size
+>>>9 string \0\0\0\0
+>>>>5 lelong x %lu bytes
+>>>9 string !\0\0\0\0 over 4 GiB
+>1 lelong 0x40 LZMA encoded data, 64-byte dictionary
+>>5 string \xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF \b, streamed, uncompressed size unknown
+>>5 string !\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF \b, non-streamed, uncompressed size
+>>>9 string \0\0\0\0
+>>>>5 lelong x %lu bytes
+>>>9 string !\0\0\0\0 over 4 GiB
+>1 lelong 0x80 LZMA encoded data, 128-byte dictionary
+>>5 string \xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF \b, streamed, uncompressed size unknown
+>>5 string !\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF \b, non-streamed, uncompressed size
+>>>9 string \0\0\0\0
+>>>>5 lelong x %lu bytes
+>>>9 string !\0\0\0\0 over 4 GiB
+>1 lelong 0x0100 LZMA encoded data, 256-byte dictionary
+>>5 string \xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF \b, streamed, uncompressed size unknown
+>>5 string !\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF \b, non-streamed, uncompressed size
+>>>9 string \0\0\0\0
+>>>>5 lelong x %lu bytes
+>>>9 string !\0\0\0\0 over 4 GiB
+>1 lelong 0x0200 LZMA encoded data, 512-byte dictionary
+>>5 string \xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF \b, streamed, uncompressed size unknown
+>>5 string !\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF \b, non-streamed, uncompressed size
+>>>9 string \0\0\0\0
+>>>>5 lelong x %lu bytes
+>>>9 string !\0\0\0\0 over 4 GiB
+>1 lelong 0x0400 LZMA encoded data, 1 KiB dictionary
+>>5 string \xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF \b, streamed, uncompressed size unknown
+>>5 string !\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF \b, non-streamed, uncompressed size
+>>>9 string \0\0\0\0
+>>>>5 lelong x %lu bytes
+>>>9 string !\0\0\0\0 over 4 GiB
+>1 lelong 0x0800 LZMA encoded data, 2 KiB dictionary
+>>5 string \xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF \b, streamed, uncompressed size unknown
+>>5 string !\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF \b, non-streamed, uncompressed size
+>>>9 string \0\0\0\0
+>>>>5 lelong x %lu bytes
+>>>9 string !\0\0\0\0 over 4 GiB
+>1 lelong 0x1000 LZMA encoded data, 4 KiB dictionary
+>>5 string \xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF \b, streamed, uncompressed size unknown
+>>5 string !\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF \b, non-streamed, uncompressed size
+>>>9 string \0\0\0\0
+>>>>5 lelong x %lu bytes
+>>>9 string !\0\0\0\0 over 4 GiB
+>1 lelong 0x2000 LZMA encoded data, 8 KiB dictionary
+>>5 string \xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF \b, streamed, uncompressed size unknown
+>>5 string !\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF \b, non-streamed, uncompressed size
+>>>9 string \0\0\0\0
+>>>>5 lelong x %lu bytes
+>>>9 string !\0\0\0\0 over 4 GiB
+>1 lelong 0x4000 LZMA encoded data, 16 KiB dictionary
+>>5 string \xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF \b, streamed, uncompressed size unknown
+>>5 string !\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF \b, non-streamed, uncompressed size
+>>>9 string \0\0\0\0
+>>>>5 lelong x %lu bytes
+>>>9 string !\0\0\0\0 over 4 GiB
+>1 lelong 0x8000 LZMA encoded data, 32 KiB dictionary
+>>5 string \xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF \b, streamed, uncompressed size unknown
+>>5 string !\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF \b, non-streamed, uncompressed size
+>>>9 string \0\0\0\0
+>>>>5 lelong x %lu bytes
+>>>9 string !\0\0\0\0 over 4 GiB
+>1 lelong 0x010000 LZMA encoded data, 64 KiB dictionary
+>>5 string \xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF \b, streamed, uncompressed size unknown
+>>5 string !\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF \b, non-streamed, uncompressed size
+>>>9 string \0\0\0\0
+>>>>5 lelong x %lu bytes
+>>>9 string !\0\0\0\0 over 4 GiB
+>1 lelong 0x020000 LZMA encoded data, 128 KiB dictionary
+>>5 string \xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF \b, streamed, uncompressed size unknown
+>>5 string !\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF \b, non-streamed, uncompressed size
+>>>9 string \0\0\0\0
+>>>>5 lelong x %lu bytes
+>>>9 string !\0\0\0\0 over 4 GiB
+>1 lelong 0x040000 LZMA encoded data, 256 KiB dictionary
+>>5 string \xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF \b, streamed, uncompressed size unknown
+>>5 string !\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF \b, non-streamed, uncompressed size
+>>>9 string \0\0\0\0
+>>>>5 lelong x %lu bytes
+>>>9 string !\0\0\0\0 over 4 GiB
+>1 lelong 0x080000 LZMA encoded data, 512 KiB dictionary
+>>5 string \xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF \b, streamed, uncompressed size unknown
+>>5 string !\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF \b, non-streamed, uncompressed size
+>>>9 string \0\0\0\0
+>>>>5 lelong x %lu bytes
+>>>9 string !\0\0\0\0 over 4 GiB
+>1 lelong 0x100000 LZMA encoded data, 1 MiB dictionary
+>>5 string \xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF \b, streamed, uncompressed size unknown
+>>5 string !\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF \b, non-streamed, uncompressed size
+>>>9 string \0\0\0\0
+>>>>5 lelong x %lu bytes
+>>>9 string !\0\0\0\0 over 4 GiB
+>1 lelong 0x200000 LZMA encoded data, 2 MiB dictionary
+>>5 string \xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF \b, streamed, uncompressed size unknown
+>>5 string !\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF \b, non-streamed, uncompressed size
+>>>9 string \0\0\0\0
+>>>>5 lelong x %lu bytes
+>>>9 string !\0\0\0\0 over 4 GiB
+>1 lelong 0x400000 LZMA encoded data, 4 MiB dictionary
+>>5 string \xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF \b, streamed, uncompressed size unknown
+>>5 string !\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF \b, non-streamed, uncompressed size
+>>>9 string \0\0\0\0
+>>>>5 lelong x %lu bytes
+>>>9 string !\0\0\0\0 over 4 GiB
+>1 lelong 0x800000 LZMA encoded data, 8 MiB dictionary
+>>5 string \xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF \b, streamed, uncompressed size unknown
+>>5 string !\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF \b, non-streamed, uncompressed size
+>>>9 string \0\0\0\0
+>>>>5 lelong x %lu bytes
+>>>9 string !\0\0\0\0 over 4 GiB
+>1 lelong 0x01000000 LZMA encoded data, 16 MiB dictionary
+>>5 string \xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF \b, streamed, uncompressed size unknown
+>>5 string !\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF \b, non-streamed, uncompressed size
+>>>9 string \0\0\0\0
+>>>>5 lelong x %lu bytes
+>>>9 string !\0\0\0\0 over 4 GiB
+>1 lelong 0x02000000 LZMA encoded data, 32 MiB dictionary
+>>5 string \xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF \b, streamed, uncompressed size unknown
+>>5 string !\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF \b, non-streamed, uncompressed size
+>>>9 string \0\0\0\0
+>>>>5 lelong x %lu bytes
+>>>9 string !\0\0\0\0 over 4 GiB
+>1 lelong 0x04000000 LZMA encoded data, 64 MiB dictionary
+>>5 string \xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF \b, streamed, uncompressed size unknown
+>>5 string !\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF \b, non-streamed, uncompressed size
+>>>9 string \0\0\0\0
+>>>>5 lelong x %lu bytes
+>>>9 string !\0\0\0\0 over 4 GiB
+>1 lelong 0x08000000 LZMA encoded data, 128 MiB dictionary
+>>5 string \xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF \b, streamed, uncompressed size unknown
+>>5 string !\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF \b, non-streamed, uncompressed size
+>>>9 string \0\0\0\0
+>>>>5 lelong x %lu bytes
+>>>9 string !\0\0\0\0 over 4 GiB
+>1 lelong 0x10000000 LZMA encoded data, 256 MiB dictionary
+>>5 string \xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF \b, streamed, uncompressed size unknown
+>>5 string !\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF \b, non-streamed, uncompressed size
+>>>9 string \0\0\0\0
+>>>>5 lelong x %lu bytes
+>>>9 string !\0\0\0\0 over 4 GiB
diff --git a/Build/source/utils/lzma-utils/extra/magic/lzma_new.magic b/Build/source/utils/lzma-utils/extra/magic/lzma_new.magic
new file mode 100644
index 00000000000..6388d9a7255
--- /dev/null
+++ b/Build/source/utils/lzma-utils/extra/magic/lzma_new.magic
@@ -0,0 +1,16 @@
+# It was decided to use raw LZMA stream as the file format of LZMA
+# compressed files. This was an unfortunate decision since the files do
+# not have any magic first bytes. It is possible to make a good guess,
+# but to prevent
+#
+# LZMA encoded data - http://tukaani.org/lzma/
+# This file is in the public domain.
+
+0 ubyte <0xE2
+>1 ulelong <0x10000001
+>>5 ustring \xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF LZMA encoded data (streamed)
+>>>1 ulelong x \b, %u-byte dictionary
+>>9 ulelong 0
+>>>5 ulelong x LZMA encoded data (non-streamed)
+>>>>1 ulelong x \b, %u-byte dictionary
+>>>>>5 ulelong x \b, uncompressed size %u bytes
diff --git a/Build/source/utils/lzma-utils/extra/mc/mc-4.6.1.lzma.patch b/Build/source/utils/lzma-utils/extra/mc/mc-4.6.1.lzma.patch
new file mode 100644
index 00000000000..ecb1f608626
--- /dev/null
+++ b/Build/source/utils/lzma-utils/extra/mc/mc-4.6.1.lzma.patch
@@ -0,0 +1,222 @@
+# LZMA support for Midnight Commander
+# 2006-03-17
+#
+# This patch adds basic support for LZMA compressed files to
+# Midnight Commander 4.6.1. You should have LZMA utils 4.32.x
+# or later. Older versions of LZMA utils will *not* work.
+#
+# Copyright (C) 2006 Lasse Collin <lasse.collin@tukaani.org>
+#
+# This patch is free software; you can redistribute it and/or modify
+# it under the terms of the GNU General Public License as published by
+# the Free Software Foundation; either version 2 of the License, or
+# (at your option) any later version.
+#
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+# GNU General Public License for more details.
+
+diff -Naru mc-4.6.1.orig/edit/edit.c mc-4.6.1/edit/edit.c
+--- mc-4.6.1.orig/edit/edit.c 2005-05-27 17:19:18.000000000 +0300
++++ mc-4.6.1/edit/edit.c 2006-03-17 17:39:49.000000000 +0200
+@@ -179,6 +179,9 @@
+ } all_filters[] = {
+
+ {
++ "lzma -cd %s 2>&1", "lzma > %s", ".lzma"
++ },
++ {
+ "bzip2 -cd %s 2>&1", "bzip2 > %s", ".bz2"
+ },
+ {
+diff -Naru mc-4.6.1.orig/lib/mc.ext.in mc-4.6.1/lib/mc.ext.in
+--- mc-4.6.1.orig/lib/mc.ext.in 2005-07-23 19:51:15.000000000 +0300
++++ mc-4.6.1/lib/mc.ext.in 2006-03-17 19:05:08.000000000 +0200
+@@ -119,6 +119,11 @@
+ Open=%cd %p#utar
+ View=%view{ascii} bzip2 -dc %f 2>/dev/null | tar tvvf -
+
++# .tar.lzma, .tlz
++regex/\.t(ar\.lzma|lz)$
++ Open=%cd %p#utar
++ View=%view{ascii} lzma -dc %f 2>/dev/null | tar tvvf -
++
+ # .tar.F - used in QNX
+ regex/\.tar\.F$
+ # Open=%cd %p#utar
+@@ -283,6 +288,10 @@
+ Open=case %d/%f in */log/*|*/logs/*) bzip2 -dc %f ;; *) bzip2 -dc %f | nroff @MAN_FLAGS@ @MANDOC@ ;; esac | %var{PAGER:more}
+ View=%view{ascii,nroff} case %d/%f in */log/*|*/logs/*) bzip2 -dc %f ;; *) bzip2 -dc %f | nroff @MAN_FLAGS@ @MANDOC@ ;; esac
+
++regex/([^0-9]|^[^\.]*)\.([1-9][A-Za-z]*|[ln])\.lzma$
++ Open=case %d/%f in */log/*|*/logs/*) lzma -dc %f ;; *) lzma -dc %f | nroff @MAN_FLAGS@ @MANDOC@ ;; esac | %var{PAGER:more}
++ View=%view{ascii,nroff} case %d/%f in */log/*|*/logs/*) lzma -dc %f ;; *) lzma -dc %f | nroff @MAN_FLAGS@ @MANDOC@ ;; esac
++
+
+ ### Images ###
+
+@@ -527,6 +536,11 @@
+ Open=gzip -dc %f | %var{PAGER:more}
+ View=%view{ascii} gzip -dc %f 2>/dev/null
+
++# lzma
++regex/\.lzma$
++ Open=lzma -dc %f | %var{PAGER:more}
++ View=%view{ascii} lzma -dc %f 2>/dev/null
++
+
+ ### Default ###
+
+diff -Naru mc-4.6.1.orig/src/util.c mc-4.6.1/src/util.c
+--- mc-4.6.1.orig/src/util.c 2005-05-27 17:19:18.000000000 +0300
++++ mc-4.6.1/src/util.c 2006-03-17 18:20:50.000000000 +0200
+@@ -900,7 +900,7 @@
+ * Warning: this function moves the current file pointer */
+ int get_compression_type (int fd)
+ {
+- unsigned char magic[4];
++ unsigned char magic[16];
+
+ /* Read the magic signature */
+ if (mc_read (fd, (char *) magic, 4) != 4)
+@@ -944,6 +944,31 @@
+ return COMPRESSION_BZIP2;
+ }
+ }
++
++ /* LZMA files; both LZMA_Alone and LZMA utils formats. The LZMA_Alone
++ * format is used by the LZMA_Alone tool from LZMA SDK. The LZMA utils
++ * format is the default format of LZMA utils 4.32.1 and later. */
++ if (magic[0] < 0xE1 || (magic[0] == 0xFF && magic[1] == 'L' &&
++ magic[2] == 'Z' && magic[3] == 'M')) {
++ if (mc_read (fd, (char *) magic + 4, 9) == 9) {
++ /* LZMA utils format */
++ if (magic[0] == 0xFF && magic[4] == 'A' && magic[5] == 0x00)
++ return COMPRESSION_LZMA;
++ /* The LZMA_Alone format has no magic bytes, thus we
++ * need to play a wizard. This can give false positives,
++ * thus the detection below should be removed when
++ * the newer LZMA utils format has got popular. */
++ if (magic[0] < 0xE1 && magic[4] < 0x20 &&
++ ((magic[10] == 0x00 && magic[11] == 0x00 &&
++ magic[12] == 0x00) ||
++ (magic[5] == 0xFF && magic[6] == 0xFF &&
++ magic[7] == 0xFF && magic[8] == 0xFF &&
++ magic[9] == 0xFF && magic[10] == 0xFF &&
++ magic[11] == 0xFF && magic[12] == 0xFF)))
++ return COMPRESSION_LZMA;
++ }
++ }
++
+ return 0;
+ }
+
+@@ -954,6 +979,7 @@
+ case COMPRESSION_GZIP: return "#ugz";
+ case COMPRESSION_BZIP: return "#ubz";
+ case COMPRESSION_BZIP2: return "#ubz2";
++ case COMPRESSION_LZMA: return "#ulzma";
+ }
+ /* Should never reach this place */
+ fprintf (stderr, "Fatal: decompress_extension called with an unknown argument\n");
+diff -Naru mc-4.6.1.orig/src/util.h mc-4.6.1/src/util.h
+--- mc-4.6.1.orig/src/util.h 2005-01-13 21:20:47.000000000 +0200
++++ mc-4.6.1/src/util.h 2006-03-17 17:34:34.000000000 +0200
+@@ -169,7 +169,8 @@
+ COMPRESSION_NONE,
+ COMPRESSION_GZIP,
+ COMPRESSION_BZIP,
+- COMPRESSION_BZIP2
++ COMPRESSION_BZIP2,
++ COMPRESSION_LZMA
+ };
+
+ int get_compression_type (int fd);
+diff -Naru mc-4.6.1.orig/vfs/extfs/iso9660.in mc-4.6.1/vfs/extfs/iso9660.in
+--- mc-4.6.1.orig/vfs/extfs/iso9660.in 2004-10-29 12:14:38.000000000 +0300
++++ mc-4.6.1/vfs/extfs/iso9660.in 2006-03-17 17:45:28.000000000 +0200
+@@ -25,6 +25,7 @@
+ mcisofs_list () {
+ # left as a reminder to implement compressed image support =)
+ case "$1" in
++ *.lzma) MYCAT="lzma -dc";;
+ *.bz2) MYCAT="bzip2 -dc";;
+ *.gz) MYCAT="gzip -dc";;
+ *.z) MYCAT="gzip -dc";;
+diff -Naru mc-4.6.1.orig/vfs/extfs/lslR.in mc-4.6.1/vfs/extfs/lslR.in
+--- mc-4.6.1.orig/vfs/extfs/lslR.in 2003-06-22 12:54:21.000000000 +0300
++++ mc-4.6.1/vfs/extfs/lslR.in 2006-03-17 17:45:08.000000000 +0200
+@@ -12,6 +12,7 @@
+
+ mclslRfs_list () {
+ case "$1" in
++ *.lzma) MYCAT="lzma -dc";;
+ *.bz2) MYCAT="bzip2 -dc";;
+ *.gz) MYCAT="gzip -dc";;
+ *.z) MYCAT="gzip -dc";;
+diff -Naru mc-4.6.1.orig/vfs/extfs/mailfs.in mc-4.6.1/vfs/extfs/mailfs.in
+--- mc-4.6.1.orig/vfs/extfs/mailfs.in 2002-12-24 08:56:17.000000000 +0200
++++ mc-4.6.1/vfs/extfs/mailfs.in 2006-03-17 17:53:47.000000000 +0200
+@@ -7,6 +7,7 @@
+
+ $zcat="zcat"; # gunzip to stdout
+ $bzcat="bzip2 -dc"; # bunzip2 to stdout
++$lzcat="lzma -dc"; # unlzma to stdout
+ $file="file"; # "file" command
+ $TZ='GMT'; # default timezone (for Date module)
+
+@@ -132,6 +133,8 @@
+ exit 1 unless (open IN, "$zcat $mbox_qname|");
+ } elsif (/bzip/) {
+ exit 1 unless (open IN, "$bzcat $mbox_qname|");
++} elsif (/lzma/) {
++ exit 1 unless (open IN, "$lzcat $mbox_qname|");
+ } else {
+ exit 1 unless (open IN, "<$mbox_name");
+ }
+diff -Naru mc-4.6.1.orig/vfs/extfs/patchfs.in mc-4.6.1/vfs/extfs/patchfs.in
+--- mc-4.6.1.orig/vfs/extfs/patchfs.in 2004-11-17 01:00:40.000000000 +0200
++++ mc-4.6.1/vfs/extfs/patchfs.in 2006-03-17 17:52:47.000000000 +0200
+@@ -12,6 +12,7 @@
+ use File::Temp 'tempfile';
+
+ # standard binaries
++my $lzma = 'lzma';
+ my $bzip = 'bzip2';
+ my $gzip = 'gzip';
+ my $fileutil = 'file';
+@@ -70,7 +71,9 @@
+ my ($qfname)=(quotemeta $_[0]);
+
+ $_=`$fileutil $qfname`;
+- if (/bzip/) {
++ if (/lzma/) {
++ return "$lzma -dc $qfname";
++ } elsif (/bzip/) {
+ return "$bzip -dc $qfname";
+ } elsif (/gzip/) {
+ return "$gzip -dc $qfname";
+@@ -86,7 +89,9 @@
+ my ($sep) = $append ? '>>' : '>';
+
+ $_=`$fileutil $qfname`;
+- if (/bzip/) {
++ if (/lzma/) {
++ return "$lzma -c $sep $qfname";
++ } elsif (/bzip/) {
+ return "$bzip -c $sep $qfname";
+ } elsif (/gzip/) {
+ return "$gzip -c $sep $qfname";
+diff -Naru mc-4.6.1.orig/vfs/extfs/sfs.ini mc-4.6.1/vfs/extfs/sfs.ini
+--- mc-4.6.1.orig/vfs/extfs/sfs.ini 1998-12-15 17:57:43.000000000 +0200
++++ mc-4.6.1/vfs/extfs/sfs.ini 2006-03-17 17:44:01.000000000 +0200
+@@ -10,6 +10,8 @@
+ ubz/1 bzip -d < %1 > %3
+ bz2/1 bzip2 < %1 > %3
+ ubz2/1 bzip2 -d < %1 > %3
++lzma/1 lzma < %1 > %3
++ulzma/1 lzma -d < %1 > %3
+ tar/1 tar cf %3 %1
+ tgz/1 tar czf %3 %1
+ uhtml/1 lynx -force_html -dump %1 > %3
diff --git a/Build/source/utils/lzma-utils/extra/tar/tar_lzma.diff b/Build/source/utils/lzma-utils/extra/tar/tar_lzma.diff
new file mode 100644
index 00000000000..76e55c39f1b
--- /dev/null
+++ b/Build/source/utils/lzma-utils/extra/tar/tar_lzma.diff
@@ -0,0 +1,66 @@
+# Description
+#
+# This patch adds `-Y' and a long option equivalent `--lzma'
+# to GNU tar 1.15.1.
+#
+# Changes
+#
+# 2005-05-06 - Initial version using lzmash wrapper script
+#
+# 2005-12-23 - Updated to use the new lzma command line tool which
+# replaced the ugly lzmash wrapper script.
+#
+# Copyright information
+#
+# GNU tar is copyright by Free Software Foundation, Inc.
+# This patch was written by Lasse Collin <lasse.collin@tukaani.org>.
+#
+# GNU tar is distributed under the GNU GPL. However, the author of
+# this patch puts the changes made by him into the public domain.
+
+diff -ru tar-1.15.1_orig/src/buffer.c tar-1.15.1/src/buffer.c
+--- tar-1.15.1_orig/src/buffer.c 2004-12-21 17:09:24.000000000 +0200
++++ tar-1.15.1/src/buffer.c 2005-05-06 00:04:23.000000000 +0300
+@@ -153,7 +153,8 @@
+ ct_none,
+ ct_compress,
+ ct_gzip,
+- ct_bzip2
++ ct_bzip2,
++ ct_lzma
+ };
+
+ struct zip_magic
+@@ -170,6 +171,9 @@
+ { ct_compress, "\037\235", 2, "compress", "-Z" },
+ { ct_gzip, "\037\213", 2, "gzip", "-z" },
+ { ct_bzip2, "BZh", 3, "bzip2", "-j" },
++ /* The first bytes of a LZMA compressed file describe some compression
++ settings and thus vary. This handles the most common case: */
++ { ct_lzma, "]\000\000",3, "lzma", "-Y" },
+ };
+
+ #define NMAGIC (sizeof(magic)/sizeof(magic[0]))
+diff -ru tar-1.15.1_orig/src/tar.c tar-1.15.1/src/tar.c
+--- tar-1.15.1_orig/src/tar.c 2004-12-21 16:11:26.000000000 +0200
++++ tar-1.15.1/src/tar.c 2005-05-06 00:04:24.000000000 +0300
+@@ -429,6 +429,8 @@
+ N_("control pax keywords"), 68 },
+ {"label", 'V', N_("TEXT"), 0,
+ N_("create archive with volume name NAME. At list/extract time, use TEXT as a globbing pattern"), 68 },
++ {"lzma", 'Y', 0, 0,
++ N_("filter the archive through lzma"), 68 },
+ {"bzip2", 'j', 0, 0,
+ N_("filter the archive through bzip2"), 68 },
+ {"gzip", 'z', 0, 0,
+@@ -906,6 +908,10 @@
+ " perhaps you meant -j?")));
+ break;
+
++ case 'Y':
++ set_use_compress_program_option ("lzma");
++ break;
++
+ case 'z':
+ set_use_compress_program_option ("gzip");
+ break;