lzma/lzma-4.32.4-sqlzma.patch
2012-02-01 14:26:20 +04:00

693 lines
18 KiB
Diff

--- lzma-4.32.4/C/7zip/Compress/LZMA_Alone/comp.cc.sqlzma 2007-12-12 20:23:31.000000000 +0100
+++ lzma-4.32.4/C/7zip/Compress/LZMA_Alone/comp.cc 2007-12-12 20:27:12.000000000 +0100
@@ -0,0 +1,257 @@
+/*
+ * Copyright (C) 2006-2007 Junjiro Okajima
+ * Copyright (C) 2006-2007 Tomas Matejicek, slax.org
+ *
+ * LICENSE follows the described one in lzma.txt.
+ */
+
+/* $Id: comp.cc,v 1.3 2007/11/13 13:27:23 jro Exp $ */
+
+// extract some parts from lzma443/C/7zip/Compress/LZMA_Alone/LzmaAlone.cpp
+
+#include <stdio.h>
+#include <stdlib.h>
+#include <assert.h>
+#include <errno.h>
+
+#include "StdAfx.h"
+#include "../../../Common/MyInitGuid.h"
+//#include "../../../Common/MyWindows.h"
+#include "../../../Common/StringConvert.h"
+//#include "../../../Common/StringToInt.h"
+//#include "../../Common/StreamUtils.h"
+#include "../LZMA/LZMAEncoder.h"
+
+#include <pthread.h>
+#include <zlib.h>
+#include "sqlzma.h"
+
+//////////////////////////////////////////////////////////////////////
+
+class CMemoryStream {
+protected:
+ Bytef *m_data;
+ UInt64 m_limit;
+ UInt64 m_pos;
+
+public:
+ CMemoryStream(Bytef *data, UInt64 size)
+ : m_data(data), m_limit(size), m_pos(0) {}
+
+ virtual ~CMemoryStream() {}
+};
+
+class CInMemoryStream : public CMemoryStream, public IInStream,
+ public CMyUnknownImp {
+//protected:
+ CMyComPtr<ISequentialInStream> m_stream;
+
+public:
+ MY_UNKNOWN_IMP1(IInStream);
+
+ CInMemoryStream(Bytef *data, UInt64 size)
+ : CMemoryStream(data, size), m_stream(this) {}
+
+ virtual ~CInMemoryStream() {}
+
+ STDMETHOD(Read)(void *data, UInt32 size, UInt32 *processedSize)
+ {
+ UInt64 room = m_limit - m_pos;
+ if (size > room)
+ size = room;
+ if (size) {
+ memcpy(data, m_data + m_pos, size);
+ m_pos += size;
+ }
+ if (processedSize)
+ *processedSize = size;
+ return S_OK;
+ }
+
+ // disabled all
+ STDMETHOD(Seek)(Int64 offset, UInt32 seekOrigin, UInt64 *newPosition) {
+ assert(0);
+ return E_NOTIMPL;
+ }
+};
+
+class COutMemoryStream : public CMemoryStream, public IOutStream,
+ public CMyUnknownImp {
+//protected:
+ CMyComPtr<ISequentialOutStream> m_stream;
+
+public:
+ MY_UNKNOWN_IMP1(IOutStream);
+
+ COutMemoryStream(Bytef *data, UInt64 size)
+ : CMemoryStream(data, size), m_stream(this) {}
+
+ virtual ~COutMemoryStream() {}
+
+ UInt32 GetSize() {return m_pos;}
+
+ STDMETHOD(Write)(const void *data, UInt32 size, UInt32 *processedSize) {
+ if (m_pos + size > m_limit)
+ return -ENOSPC;
+ memcpy(m_data + m_pos, data, size);
+ m_pos += size;
+ if (processedSize)
+ *processedSize = size;
+ return S_OK;
+ }
+
+ // disabled all
+ STDMETHOD(Seek)(Int64 offset, UInt32 seekOrigin, UInt64 *newPosition) {
+ assert(0);
+ return E_NOTIMPL;
+ }
+ STDMETHOD(SetSize)(Int64 newSize) {
+ assert(0);
+ return E_NOTIMPL;
+ }
+};
+
+//////////////////////////////////////////////////////////////////////
+
+static int
+LzmaCompress(Bytef *next_in, uInt avail_in, Bytef *next_out, uInt avail_out,
+ struct sqlzma_opts *opts, uLong *total_out)
+{
+ int err;
+ HRESULT res;
+ const Byte a[] = {
+ avail_in, avail_in >> 8, avail_in >> 16, avail_in >> 24,
+ 0, 0, 0, 0
+ };
+
+ NCompress::NLZMA::CEncoder encoderSpec;
+ CMyComPtr<ICompressCoder> encoder = &encoderSpec;
+ encoder->AddRef();
+ CInMemoryStream inStreamSpec(next_in, avail_in);
+ CMyComPtr<ISequentialInStream> inStream = &inStreamSpec;
+ inStream->AddRef();
+ COutMemoryStream outStreamSpec(next_out, avail_out);
+ CMyComPtr<ISequentialOutStream> outStream = &outStreamSpec;
+ outStream->AddRef();
+
+ // these values are dpending upon is_lzma() macro in sqlzma.h
+ const UInt32 dictionary = opts->dicsize;
+ //fprintf(stderr, "dic %u\n", dictionary);
+ const UString mf = L"BT4";
+ const UInt32 posStateBits = 2;
+ const UInt32 litContextBits = 3; // for normal files
+ // UInt32 litContextBits = 0; // for 32-bit data
+ const UInt32 litPosBits = 0;
+ // UInt32 litPosBits = 2; // for 32-bit data
+ //const UInt32 algorithm = 2;
+ const UInt32 algorithm = 1;
+ const UInt32 numFastBytes = 128;
+ const UInt32 matchFinderCycles = 16 + numFastBytes / 2;
+ //const bool matchFinderCyclesDefined = false;
+ const PROPID propIDs[] = {
+ NCoderPropID::kDictionarySize,
+ NCoderPropID::kPosStateBits,
+ NCoderPropID::kLitContextBits,
+ NCoderPropID::kLitPosBits,
+ NCoderPropID::kAlgorithm,
+ NCoderPropID::kNumFastBytes,
+ NCoderPropID::kMatchFinder,
+ NCoderPropID::kEndMarker,
+ NCoderPropID::kMatchFinderCycles
+ };
+ const int kNumPropsMax = sizeof(propIDs) / sizeof(propIDs[0]);
+ PROPVARIANT properties[kNumPropsMax];
+ for (int p = 0; p < 6; p++)
+ properties[p].vt = VT_UI4;
+ properties[0].ulVal = UInt32(dictionary);
+ properties[1].ulVal = UInt32(posStateBits);
+ properties[2].ulVal = UInt32(litContextBits);
+ properties[3].ulVal = UInt32(litPosBits);
+ properties[4].ulVal = UInt32(algorithm);
+ properties[5].ulVal = UInt32(numFastBytes);
+
+ properties[6].vt = VT_BSTR;
+ properties[6].bstrVal = (BSTR)(const wchar_t *)mf;
+ properties[7].vt = VT_BOOL;
+ properties[7].boolVal = VARIANT_FALSE; // EOS
+ properties[8].vt = VT_UI4;
+ properties[8].ulVal = UInt32(matchFinderCycles);
+
+ err = -EINVAL;
+ res = encoderSpec.SetCoderProperties(propIDs, properties,
+ kNumPropsMax - 1);
+ if (res)
+ goto out;
+ res = encoderSpec.WriteCoderProperties(outStream);
+ if (res)
+ goto out;
+
+ UInt32 r;
+ res = outStream->Write(a, sizeof(a), &r);
+ if (res || r != sizeof(a))
+ goto out;
+
+ err = encoder->Code(inStream, outStream, 0, /*broken*/0, 0);
+ if (err)
+ goto out;
+ *total_out = outStreamSpec.GetSize();
+
+ out:
+ return err;
+}
+
+//////////////////////////////////////////////////////////////////////
+
+#define Failure(p) do { \
+ fprintf(stderr, "%s:%d: please report to jro " \
+ "{%02x, %02x, %02x, %02x, %02x, %02x, %02x, %02x}\n", \
+ __func__, __LINE__, \
+ p[0], p[1], p[2], p[3], p[4], p[5], p[6], p[7]); \
+ abort(); \
+} while(0)
+
+extern "C" int
+sqlzma_cm(struct sqlzma_opts *opts, z_stream *stream, Bytef *next_in, uInt
+ avail_in, Bytef *next_out, uInt avail_out)
+{
+ int err;
+ Bytef *p = next_out;
+ uInt l = avail_out;
+
+ stream->next_in = next_in;
+ stream->avail_in = avail_in;
+ stream->next_out = p;
+ stream->avail_out = l;
+ err = deflate(stream, Z_FINISH);
+ if (err != Z_STREAM_END && err != Z_OK)
+ goto out_err;
+ if (avail_in < stream->total_out)
+ return err;
+ if (is_lzma(*p))
+ Failure(p);
+
+ if (opts->try_lzma) {
+ unsigned char a[stream->total_out];
+ uLong processed;
+
+ memcpy(a, p, stream->total_out);
+
+ // malloc family in glibc and stdc++ seems to be thread-safe
+ err = LzmaCompress(next_in, avail_in, p, l, opts, &processed);
+ if (!err && processed <= stream->total_out) {
+ if (!is_lzma(*next_out))
+ Failure(next_out);
+ stream->total_out = processed;
+ err = Z_STREAM_END;
+ } else {
+ //puts("by zlib");
+ memcpy(p, a, stream->total_out);
+ err = Z_STREAM_END;
+ }
+ }
+ return err;
+
+ out_err:
+ fprintf(stderr, "%s: ZLIB err %s\n", __func__, zError(err));
+ return err;
+}
--- lzma-4.32.4/C/7zip/Compress/LZMA_Alone/sqlzma.mk.sqlzma 2007-12-12 20:23:31.000000000 +0100
+++ lzma-4.32.4/C/7zip/Compress/LZMA_Alone/sqlzma.mk 2007-12-12 20:23:31.000000000 +0100
@@ -0,0 +1,54 @@
+
+# Copyright (C) 2006 Junjiro Okajima
+# Copyright (C) 2006 Tomas Matejicek, slax.org
+#
+# LICENSE follows the described one in lzma.txt.
+
+# $Id: sqlzma.mk,v 1.23 2006/11/27 03:54:58 jro Exp $
+
+ifndef Sqlzma
+$(error Sqlzma is not defined)
+endif
+
+include makefile.gcc
+
+ifdef UseDebugFlags
+DebugFlags = -Wall -O0 -g -UNDEBUG
+endif
+# -pthread
+CXXFLAGS = ${CFLAGS} -D_REENTRANT -include pthread.h -DNDEBUG ${DebugFlags}
+Tgt = liblzma_r.a
+
+all: ${Tgt}
+
+RObjs = LZMAEncoder_r.o Alloc_r.o LZInWindow_r.o CRC_r.o StreamUtils_r.o \
+ OutBuffer_r.o RangeCoderBit_r.o
+%_r.cc: ../LZMA/%.cpp
+ ln $< $@
+%_r.cc: ../LZ/%.cpp
+ ln $< $@
+%_r.cc: ../RangeCoder/%.cpp
+ ln $< $@
+%_r.cc: ../../Common/%.cpp
+ ln $< $@
+%_r.cc: ../../../Common/%.cpp
+ ln $< $@
+LZMAEncoder_r.o: CXXFLAGS += -I../LZMA
+LZInWindow_r.o: CXXFLAGS += -I../LZ
+RangeCoderBit_r.o: CXXFLAGS += -I../RangeCoder
+OutBuffer_r.o StreamUtils_r.o: CXXFLAGS += -I../../Common
+Alloc_r.o CRC_r.o: CXXFLAGS += -I../../../Common
+
+comp.o: CXXFLAGS += -I${Sqlzma}
+comp.o: comp.cc ${Sqlzma}/sqlzma.h
+
+liblzma_r.a: ${RObjs} comp.o
+ ${AR} cr $@ $^
+
+clean: clean_sqlzma
+clean_sqlzma:
+ $(RM) comp.o *_r.o ${Tgt} *~
+
+# Local variables: ;
+# compile-command: (concat "make Sqlzma=../../../../.. -f " (file-name-nondirectory (buffer-file-name)));
+# End: ;
--- lzma-4.32.4/C/7zip/Compress/LZMA_C/kmod.mk.sqlzma 2007-12-12 20:23:31.000000000 +0100
+++ lzma-4.32.4/C/7zip/Compress/LZMA_C/kmod.mk 2007-12-12 20:23:31.000000000 +0100
@@ -0,0 +1,40 @@
+
+# Copyright (C) 2006-2007 Junjiro Okajima
+# Copyright (C) 2006-2007 Tomas Matejicek, slax.org
+#
+# LICENSE follows the described one in lzma.txt.
+
+# $Id: kmod.mk,v 1.1 2007/11/05 05:43:35 jro Exp $
+
+ifndef Sqlzma
+$(error Sqlzma is not defined)
+endif
+ifndef KDir
+$(error KDir is not defined)
+endif
+
+#include makefile.gcc
+
+Kmod = kmod
+EXTRA_CFLAGS += -Wall -Werror -I${CURDIR} -I${Sqlzma}
+# -D_LZMA_PROB32
+EXTRA_CFLAGS += $(shell ${CPP} ${CFLAGS} -P testflags.c)
+
+all: ${Kmod}/uncomp.c
+ ${MAKE} EXTRA_CFLAGS="${EXTRA_CFLAGS}" M=${CURDIR}/${Kmod} \
+ -C ${KDir} C=0 V=0 modules
+
+${Kmod}/uncomp.c: uncomp.c
+ ln $< $@
+
+clean: clean_kmod
+clean_kmod:
+ ${MAKE} -C ${KDir} M=${CURDIR}/${Kmod} V=0 clean
+ ${RM} ${Kmod}/*~
+ -@test -e ${Kmod}/uncomp.c && \
+ diff -q ${Kmod}/uncomp.c uncomp.c > /dev/null && \
+ find ${Kmod}/uncomp.c -links +1 | xargs -r ${RM}
+
+# Local variables: ;
+# compile-command: (concat "make Sqlzma=../../../../.. KDir=/lib/modules/`uname -r`/build -f " (file-name-nondirectory (buffer-file-name)));
+# End: ;
--- lzma-4.32.4/C/7zip/Compress/LZMA_C/sqlzma.mk.sqlzma 2007-12-12 20:23:31.000000000 +0100
+++ lzma-4.32.4/C/7zip/Compress/LZMA_C/sqlzma.mk 2007-12-12 20:23:31.000000000 +0100
@@ -0,0 +1,45 @@
+
+# Copyright (C) 2006 Junjiro Okajima
+# Copyright (C) 2006 Tomas Matejicek, slax.org
+#
+# LICENSE follows the described one in lzma.txt.
+
+# $Id: sqlzma.mk,v 1.20 2007/01/07 15:12:48 jro Exp $
+
+ifndef Sqlzma
+$(error Sqlzma is not defined)
+endif
+
+include makefile.gcc
+ifdef KDir
+include kmod.mk
+endif
+
+ifdef UseDebugFlags
+DebugFlags = -O0 -g -UNDEBUG
+endif
+CFLAGS += -DNDEBUG ${DebugFlags}
+Tgt = libunlzma.a libunlzma_r.a
+
+all: ${Tgt}
+
+%_r.c: %.c
+ ln $< $@
+# -pthread
+%_r.o: CFLAGS += -D_REENTRANT -include pthread.h
+
+uncomp.o uncomp_r.o: CFLAGS += -I${Sqlzma}
+uncomp.o: uncomp.c ${Sqlzma}/sqlzma.h
+
+libunlzma.a: uncomp.o LzmaDecode.o
+ ${AR} cr $@ $^
+libunlzma_r.a: uncomp_r.o LzmaDecode_r.o
+ ${AR} cr $@ $^
+
+clean: clean_sqlzma
+clean_sqlzma:
+ $(RM) ${Tgt} uncomp.o uncomp_r.o LzmaDecode_r.o *~
+
+# Local variables: ;
+# compile-command: (concat "make Sqlzma=../../../../.. -f " (file-name-nondirectory (buffer-file-name)));
+# End: ;
--- lzma-4.32.4/C/7zip/Compress/LZMA_C/testflags.c.sqlzma 2007-12-12 20:23:31.000000000 +0100
+++ lzma-4.32.4/C/7zip/Compress/LZMA_C/testflags.c 2007-12-12 20:23:31.000000000 +0100
@@ -0,0 +1,5 @@
+#ifdef _LZMA_PROB32
+-D_LZMA_PROB32
+#else
+-U_LZMA_PROB32
+#endif
--- lzma-4.32.4/C/7zip/Compress/LZMA_C/uncomp.c.sqlzma 2007-12-12 20:23:31.000000000 +0100
+++ lzma-4.32.4/C/7zip/Compress/LZMA_C/uncomp.c 2007-12-12 20:23:31.000000000 +0100
@@ -0,0 +1,221 @@
+/*
+ * Copyright (C) 2006, 2007 Junjiro Okajima
+ * Copyright (C) 2006, 2007 Tomas Matejicek, slax.org
+ *
+ * LICENSE follows the described one in lzma.txt.
+ */
+
+/* $Id: uncomp.c,v 1.1 2007/11/05 05:43:36 jro Exp $ */
+
+/* extract some parts from lzma443/C/7zip/Compress/LZMA_C/LzmaTest.c */
+
+#ifndef __KERNEL__
+#include <stdio.h>
+#include <stdlib.h>
+#include <string.h>
+#include <errno.h>
+#include <assert.h>
+#include <pthread.h>
+#define unlikely(x) __builtin_expect(!!(x), 0)
+#define BUG_ON(x) assert(!(x))
+/* sqlzma buffers are always larger than a page. true? */
+#define kmalloc(sz,gfp) malloc(sz)
+#define kfree(p) free(p)
+#define zlib_inflate(s, f) inflate(s, f)
+#define zlib_inflateInit(s) inflateInit(s)
+#define zlib_inflateReset(s) inflateReset(s)
+#define zlib_inflateEnd(s) inflateEnd(s)
+#else
+#include <linux/init.h>
+#include <linux/module.h>
+#include <linux/kernel.h>
+#include <linux/vmalloc.h>
+#ifndef WARN_ON_ONCE
+#define WARN_ON_ONCE(b) WARN_ON(b)
+#endif
+#endif /* __KERNEL__ */
+
+#include "sqlzma.h"
+#include "LzmaDecode.h"
+
+static int LzmaUncompress(struct sqlzma_un *un)
+{
+ int err, i, ret;
+ SizeT outSize, inProcessed, outProcessed, srclen;
+ /* it's about 24-80 bytes structure, if int is 32-bit */
+ CLzmaDecoderState state;
+ unsigned char *dst, *src, a[8];
+ struct sized_buf *sbuf;
+
+ /* Decode LZMA properties and allocate memory */
+ err = -EINVAL;
+ src = un->un_cmbuf;
+ ret = LzmaDecodeProperties(&state.Properties, src, LZMA_PROPERTIES_SIZE);
+ src += LZMA_PROPERTIES_SIZE;
+ if (unlikely(ret != LZMA_RESULT_OK))
+ goto out;
+ i = LzmaGetNumProbs(&state.Properties);
+ if (unlikely(i <= 0))
+ i = 1;
+ i *= sizeof(CProb);
+ sbuf = un->un_a + SQUN_PROB;
+ if (unlikely(sbuf->sz < i)) {
+ if (sbuf->buf && sbuf->buf != un->un_prob)
+ kfree(sbuf->buf);
+#ifdef __KERNEL__
+ printk("%s:%d: %d --> %d\n", __func__, __LINE__, sbuf->sz, i);
+#else
+ printf("%d --> %d\n", sbuf->sz, i);
+#endif
+ err = -ENOMEM;
+ sbuf->sz = 0;
+ sbuf->buf = kmalloc(i, GFP_ATOMIC);
+ if (unlikely(!sbuf->buf))
+ goto out;
+ sbuf->sz = i;
+ }
+ state.Probs = (void*)sbuf->buf;
+
+ /* Read uncompressed size */
+ memcpy(a, src, sizeof(a));
+ src += sizeof(a);
+ outSize = a[0] | (a[1] << 8) | (a[2] << 16) | (a[3] << 24);
+
+ err = -EINVAL;
+ dst = un->un_resbuf;
+ if (unlikely(!dst || outSize > un->un_reslen))
+ goto out;
+ un->un_reslen = outSize;
+ srclen = un->un_cmlen - (src - un->un_cmbuf);
+
+ /* Decompress */
+ err = LzmaDecode(&state, src, srclen, &inProcessed, dst, outSize,
+ &outProcessed);
+ if (err)
+ err = -EINVAL;
+
+ out:
+#ifndef __KERNEL__
+ if (err)
+ fprintf(stderr, "err %d\n", err);
+#endif
+ return err;
+}
+
+int sqlzma_un(struct sqlzma_un *un, struct sized_buf *src,
+ struct sized_buf *dst)
+{
+ int err, by_lzma = 0;
+ if (un->un_lzma && is_lzma(*src->buf)) {
+ by_lzma = 1;
+ un->un_cmbuf = src->buf;
+ un->un_cmlen = src->sz;
+ un->un_resbuf = dst->buf;
+ un->un_reslen = dst->sz;
+
+ /* this library is thread-safe */
+ err = LzmaUncompress(un);
+ goto out;
+ }
+
+ err = zlib_inflateReset(&un->un_stream);
+ if (unlikely(err != Z_OK))
+ goto out;
+ un->un_stream.next_in = src->buf;
+ un->un_stream.avail_in = src->sz;
+ un->un_stream.next_out = dst->buf;
+ un->un_stream.avail_out = dst->sz;
+ err = zlib_inflate(&un->un_stream, Z_FINISH);
+ if (err == Z_STREAM_END)
+ err = 0;
+
+ out:
+ if (err) {
+#ifdef __KERNEL__
+ WARN_ON_ONCE(1);
+#else
+ char a[64] = "ZLIB ";
+ if (by_lzma) {
+ strcpy(a, "LZMA ");
+#ifdef _REENTRANT
+ strerror_r(err, a + 5, sizeof(a) - 5);
+#else
+ strncat(a, strerror(err), sizeof(a) - 5);
+#endif
+ } else
+ strncat(a, zError(err), sizeof(a) - 5);
+ fprintf(stderr, "%s: %.*s\n", __func__, sizeof(a), a);
+#endif
+ }
+ return err;
+}
+
+int sqlzma_init(struct sqlzma_un *un, int do_lzma, unsigned int res_sz)
+{
+ int err;
+
+ err = -ENOMEM;
+ un->un_lzma = do_lzma;
+ memset(un->un_a, 0, sizeof(un->un_a));
+ un->un_a[SQUN_PROB].buf = un->un_prob;
+ un->un_a[SQUN_PROB].sz = sizeof(un->un_prob);
+ if (res_sz) {
+ un->un_a[SQUN_RESULT].buf = kmalloc(res_sz, GFP_KERNEL);
+ if (unlikely(!un->un_a[SQUN_RESULT].buf))
+ return err;
+ un->un_a[SQUN_RESULT].sz = res_sz;
+ }
+
+ un->un_stream.next_in = NULL;
+ un->un_stream.avail_in = 0;
+#ifdef __KERNEL__
+ un->un_stream.workspace = kmalloc(zlib_inflate_workspacesize(), GFP_KERNEL);
+ if (unlikely(!un->un_stream.workspace))
+ return err;
+#else
+ un->un_stream.opaque = NULL;
+ un->un_stream.zalloc = Z_NULL;
+ un->un_stream.zfree = Z_NULL;
+#endif
+ err = zlib_inflateInit(&un->un_stream);
+ if (unlikely(err == Z_MEM_ERROR))
+ return -ENOMEM;
+ BUG_ON(err);
+ return err;
+}
+
+void sqlzma_fin(struct sqlzma_un *un)
+{
+ int i;
+ for (i = 0; i < SQUN_LAST; i++)
+ if (un->un_a[i].buf && un->un_a[i].buf != un->un_prob)
+ kfree(un->un_a[i].buf);
+ BUG_ON(zlib_inflateEnd(&un->un_stream) != Z_OK);
+}
+
+#ifdef __KERNEL__
+EXPORT_SYMBOL(sqlzma_un);
+EXPORT_SYMBOL(sqlzma_init);
+EXPORT_SYMBOL(sqlzma_fin);
+
+#if 0
+static int __init sqlzma_init(void)
+{
+ return 0;
+}
+
+static void __exit sqlzma_exit(void)
+{
+}
+
+module_init(sqlzma_init);
+module_exit(sqlzma_exit);
+#endif
+
+MODULE_LICENSE("GPL");
+MODULE_AUTHOR("Junjiro Okajima <sfjro at users dot sf dot net>");
+MODULE_VERSION("$Id: uncomp.c,v 1.1 2007/11/05 05:43:36 jro Exp $");
+MODULE_DESCRIPTION("LZMA uncompress for squashfs. "
+ "Some functions for squashfs to support LZMA and "
+ "a tiny wrapper for LzmaDecode.c in LZMA SDK from www.7-zip.org.");
+#endif
--- lzma-4.32.4/C/7zip/Compress/LZMA_C/kmod/Makefile.sqlzma 2007-12-12 20:23:31.000000000 +0100
+++ lzma-4.32.4/C/7zip/Compress/LZMA_C/kmod/Makefile 2007-12-12 20:23:31.000000000 +0100
@@ -0,0 +1,11 @@
+
+# Copyright (C) 2006-2007 Junjiro Okajima
+# Copyright (C) 2006-2007 Tomas Matejicek, slax.org
+#
+# LICENSE follows the described one in lzma.txt.
+
+# $Id: Makefile,v 1.1 2007/11/05 05:43:36 jro Exp $
+
+obj-m += unlzma.o sqlzma.o
+unlzma-y := module.o
+sqlzma-y := uncomp.o
--- lzma-4.32.4/C/7zip/Compress/LZMA_C/kmod/module.c.sqlzma 2007-12-12 20:23:31.000000000 +0100
+++ lzma-4.32.4/C/7zip/Compress/LZMA_C/kmod/module.c 2007-12-12 20:23:31.000000000 +0100
@@ -0,0 +1,36 @@
+
+/*
+ * Copyright (C) 2006-2007 Junjiro Okajima
+ * Copyright (C) 2006-2007 Tomas Matejicek, slax.org
+ *
+ * LICENSE follows the described one in lzma.txt.
+ */
+
+/* $Id: module.c,v 1.1 2007/11/05 05:43:36 jro Exp $ */
+
+#include <linux/init.h>
+#include <linux/module.h>
+
+#include "../LzmaDecode.c"
+
+EXPORT_SYMBOL(LzmaDecodeProperties);
+EXPORT_SYMBOL(LzmaDecode);
+
+#if 0
+static int __init unlzma_init(void)
+{
+ return 0;
+}
+
+static void __exit unlzma_exit(void)
+{
+}
+
+module_init(unlzma_init);
+module_exit(unlzma_exit);
+#endif
+
+MODULE_LICENSE("GPL");
+MODULE_VERSION("$Id: module.c,v 1.1 2007/11/05 05:43:36 jro Exp $");
+MODULE_DESCRIPTION("LZMA uncompress. "
+ "A tiny wrapper for LzmaDecode.c in LZMA SDK from www.7-zip.org.");