diff -BurN ../build_old/lzma/SRC/7zip/Compress/LZMA_Lib/lzmaext.h lzma/SRC/7zip/Compress/LZMA_Lib/lzmaext.h --- ../build_old/lzma/SRC/7zip/Compress/LZMA_Lib/lzmaext.h 1969-12-31 19:00:00.000000000 -0500 +++ lzma/SRC/7zip/Compress/LZMA_Lib/lzmaext.h 2006-07-07 12:10:50.000000000 -0400 @@ -0,0 +1,31 @@ +/* + * lzmaext.h + * + * LZMA Parameter extensions + * these minor additions by Jeremy Collake + * + * This library is free software; you can redistribute + * it and/or modify it under the terms of the GNU Lesser + * General Public License as published by the Free Software + * Foundation; either version 2.1 of the License, or + * (at your option) any later version. + * + * This library 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 Lesser General Public License + * for more details. + * + * You should have received a copy of the GNU Lesser General + * Public License along with this library; if not, write to + * the Free Software Foundation, Inc., 59 Temple Place, + * Suite 330, Boston, MA 02111-1307 USA + */ + +int compress2_lzma (Bytef *dest, uLongf *destLen, + const Bytef *source, uLong sourceLen, + int level, + int fb, + int lc, + int lp, + int pb); diff -BurN ../build_old/lzma/SRC/7zip/Compress/LZMA_Lib/ZLib.cpp lzma/SRC/7zip/Compress/LZMA_Lib/ZLib.cpp --- ../build_old/lzma/SRC/7zip/Compress/LZMA_Lib/ZLib.cpp 2006-07-07 12:17:30.000000000 -0400 +++ lzma/SRC/7zip/Compress/LZMA_Lib/ZLib.cpp 2006-07-07 11:08:59.000000000 -0400 @@ -20,6 +20,19 @@ * the Free Software Foundation, Inc., 59 Temple Place, * Suite 330, Boston, MA 02111-1307 USA */ + +#ifdef WIN32 +#include +#else +#define INITGUID +#endif + +/* jc: undef to kill compress2_lzma */ +#define _LZMA_PARAMS + +#include "../../../Common/MyWindows.h" +#include "../LZMA/LZMADecoder.h" +#include "../LZMA/LZMAEncoder.h" /* * default values for encoder/decoder used by wrapper @@ -27,19 +40,14 @@ #include +#ifdef _LZMA_PARAMS +//#include "lzmaext.h" +#endif + #define ZLIB_LC 3 #define ZLIB_LP 0 #define ZLIB_PB 2 - -#ifdef WIN32 -#include -#else -#define INITGUID -#endif - -#include "../../../Common/MyWindows.h" -#include "../LZMA/LZMADecoder.h" -#include "../LZMA/LZMAEncoder.h" +#define ZLIB_FB 128 /* jc: add fast bytes param */ #define STG_E_SEEKERROR ((HRESULT)0x80030019L) #define STG_E_MEDIUMFULL ((HRESULT)0x80030070L) @@ -180,6 +188,8 @@ UInt64 m_offset; }; + + ZEXTERN int ZEXPORT compress2 OF((Bytef *dest, uLongf *destLen, const Bytef *source, uLong sourceLen, int level)) @@ -214,8 +224,8 @@ properties[1].ulVal = UInt32(ZLIB_PB); properties[2].ulVal = UInt32(ZLIB_LC); // for normal files properties[3].ulVal = UInt32(ZLIB_LP); // for normal files - properties[4].ulVal = UInt32(2); - properties[5].ulVal = UInt32(128); + properties[4].ulVal = UInt32(2); // todo + properties[5].ulVal = UInt32(ZLIB_FB); properties[6].vt = VT_BSTR; properties[6].bstrVal = (BSTR)(const wchar_t *)L"BT4"; @@ -243,6 +253,76 @@ return Z_OK; } +#ifdef _LZMA_PARAMS +/* jc: new compress2 proxy that allows lzma param specification */ +extern "C" int compress2_lzma (Bytef *dest, uLongf *destLen, + const Bytef *source, uLong sourceLen, + int level, int fb, int lc, int lp, int pb) +{ + CInMemoryStream *inStreamSpec = new CInMemoryStream(source, sourceLen); + CMyComPtr inStream = inStreamSpec; + + COutMemoryStream *outStreamSpec = new COutMemoryStream(dest, *destLen); + CMyComPtr outStream = outStreamSpec; + + NCompress::NLZMA::CEncoder *encoderSpec = + new NCompress::NLZMA::CEncoder; + CMyComPtr encoder = encoderSpec; + + PROPID propIDs[] = + { + NCoderPropID::kDictionarySize, + NCoderPropID::kPosStateBits, + NCoderPropID::kLitContextBits, + NCoderPropID::kLitPosBits, + NCoderPropID::kAlgorithm, + NCoderPropID::kNumFastBytes, + NCoderPropID::kMatchFinder, + NCoderPropID::kEndMarker + }; + const int kNumProps = sizeof(propIDs) / sizeof(propIDs[0]); + + if(pb<0) pb=ZLIB_PB; + if(lc<0) lc=ZLIB_LC; + if(lp<0) lp=ZLIB_LP; + if(fb<0) fb=ZLIB_FB; + PROPVARIANT properties[kNumProps]; + for (int p = 0; p < 6; p++) + properties[p].vt = VT_UI4; + properties[0].ulVal = UInt32(1 << (level + 14)); + properties[1].ulVal = UInt32(pb); + properties[2].ulVal = UInt32(lc); // for normal files + properties[3].ulVal = UInt32(lp); // for normal files + properties[4].ulVal = UInt32(2); // todo + properties[5].ulVal = UInt32(fb); + + properties[6].vt = VT_BSTR; + properties[6].bstrVal = (BSTR)(const wchar_t *)L"BT4"; + + properties[7].vt = VT_BOOL; + properties[7].boolVal = VARIANT_TRUE; + + if (encoderSpec->SetCoderProperties(propIDs, properties, kNumProps) != S_OK) + return Z_MEM_ERROR; // should not happen + + HRESULT result = encoder->Code(inStream, outStream, 0, 0, 0); + if (result == E_OUTOFMEMORY) + { + return Z_MEM_ERROR; + } + else if (result != S_OK) + { + return Z_BUF_ERROR; // should not happen + } + + UInt64 fileSize; + outStreamSpec->Seek(0, STREAM_SEEK_END, &fileSize); + *destLen = fileSize; + + return Z_OK; +} +#endif + ZEXTERN int ZEXPORT uncompress OF((Bytef *dest, uLongf *destLen, const Bytef *source, uLong sourceLen)) { Binary files ../build_old/lzma/SRC/7zip/Compress/LZMA_Lib/ZLib.o and lzma/SRC/7zip/Compress/LZMA_Lib/ZLib.o differ diff -BurN ../build_old/squashfs2.1-r2/squashfs-tools/Makefile squashfs2.1-r2/squashfs-tools/Makefile --- ../build_old/squashfs2.1-r2/squashfs-tools/Makefile 2006-07-07 12:19:20.000000000 -0400 +++ squashfs2.1-r2/squashfs-tools/Makefile 2006-07-07 12:11:44.000000000 -0400 @@ -1,7 +1,7 @@ INCLUDEDIR = . -#LZMAPATH = ../lzma/SRC/7zip/Compress/LZMA_Lib +#LZMAPATH = ../../lzma/SRC/7zip/Compress/LZMA_Lib -CFLAGS := -I$(INCLUDEDIR) -D_FILE_OFFSET_BITS=64 -D_LARGEFILE_SOURCE -O2 +CFLAGS := -v -I$(INCLUDEDIR) -D_FILE_OFFSET_BITS=64 -D_LARGEFILE_SOURCE -O2 -D_LZMA_PARAMS mksquashfs: mksquashfs.o read_fs.o sort.o $(CC) mksquashfs.o read_fs.o sort.o -lz -o $@ diff -BurN ../build_old/squashfs2.1-r2/squashfs-tools/mksquashfs.c squashfs2.1-r2/squashfs-tools/mksquashfs.c --- ../build_old/squashfs2.1-r2/squashfs-tools/mksquashfs.c 2004-12-12 20:51:20.000000000 -0500 +++ squashfs2.1-r2/squashfs-tools/mksquashfs.c 2006-07-07 11:20:21.000000000 -0400 @@ -17,8 +17,12 @@ * along with this program; if not, write to the Free Software * Foundation, 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. * + * * mksquashfs.c */ + +/* jc: define to add lzma params, specify during compile */ +// #define _LZMA_PARAMS #define TRUE 1 #include @@ -57,6 +61,15 @@ fprintf(stderr, "FATAL ERROR:" s, ##args);\ EXIT_MKSQUASHFS();\ } while(0) + +#ifdef _LZMA_PARAMS +#include "../../lzma/SRC/7zip/Compress/LZMA_Lib/lzmaext.h" +/* jc: be lame and use some globals.. this app is signle threaded*/ +int g_fb=-1; +int g_lc=-1; +int g_lp=-1; +int g_pb=-1; +#endif int total_compressed = 0, total_uncompressed = 0; int fd; @@ -265,7 +278,11 @@ unsigned long c_byte = block_size << 1; unsigned int res; +#ifdef _LZMA_PARAMS + if(!uncompressed && (res = compress2_lzma(d, &c_byte, s, size, 9, g_fb, g_lc, g_lp, g_pb)) != Z_OK) { +#else if(!uncompressed && (res = compress2(d, &c_byte, s, size, 9)) != Z_OK) { +#endif if(res == Z_MEM_ERROR) BAD_ERROR("zlib::compress failed, not enough memory\n"); else if(res == Z_BUF_ERROR) @@ -1624,7 +1641,62 @@ ERROR("%s: -b block size not power of two or not between 512 and 64K\n", argv[0]); exit(1); } - } else if(strcmp(argv[i], "-ef") == 0) { + } +#ifdef _LZMA_PARAMS + else if(strcmp(argv[i], "-lc") == 0) + { + if(++i == argc) + { + ERROR("%s: -lc missing or invalid value\n", argv[0]); + exit(1); + } + g_lc = strtol(argv[i], &g_lc, 10); + if(g_lc<0 || g_lc>8) + { + ERROR("lc is out of bounds."); + } + } + else if(strcmp(argv[i], "-lp") == 0) + { + if(++i == argc) + { + ERROR("%s: -lp missing or invalid value\n", argv[0]); + exit(1); + } + g_lp = strtol(argv[i], &g_lp, 10); + if(g_lp<0 || g_lp>4) + { + ERROR("lp is out of bounds."); + } + } + else if(strcmp(argv[i], "-pb") == 0) + { + if(++i == argc) + { + ERROR("%s: -pb missing or invalid value\n", argv[0]); + exit(1); + } + g_pb = strtol(argv[i], &g_pb, 10); + if(g_pb<0 || g_pb>4) + { + ERROR("pb is out of bounds."); + } + } + else if(strcmp(argv[i], "-fb") == 0) + { + if(++i == argc) + { + ERROR("%s: -fb missing or invalid value\n", argv[0]); + exit(1); + } + g_fb = strtol(argv[i], &g_fb, 10); + if(g_fb<5 || g_fb>272) + { + ERROR("fb is out of bounds."); + } + } +#endif + else if(strcmp(argv[i], "-ef") == 0) { if(++i == argc) { ERROR("%s: -ef missing filename\n", argv[0]); exit(1); @@ -1770,6 +1842,12 @@ ERROR("\t\t\tfile or dir with priority per line. Priority -32768 to\n"); ERROR("\t\t\t32767, default priority 0\n"); ERROR("-ef \tlist of exclude dirs/files. One per line\n"); + #ifdef _LZMA_PARAMS + ERROR("-fb x\t\t\tset lzma fast bytes to x\n"); + ERROR("-lc x\t\t\tset lzma literal context bits to x\n"); + ERROR("-lp x\t\t\tset lzma literal pos bits to x\n"); + ERROR("-pb x\t\t\tset lzma pos bits to x\n"); + #endif exit(1); } }