4d0c5480719e2b2d2415542aa053c69a19017680
[openwrt.git] / openwrt / target / lzma / lzma-zlib.patch
1 diff -Nur lzma432/C/7zip/Compress/LZMA_Lib/makefile lzma432-owrt/C/7zip/Compress/LZMA_Lib/makefile
2 --- lzma432/C/7zip/Compress/LZMA_Lib/makefile   1970-01-01 01:00:00.000000000 +0100
3 +++ lzma432-owrt/C/7zip/Compress/LZMA_Lib/makefile      2006-03-22 14:23:38.000000000 +0100
4 @@ -0,0 +1,88 @@
5 +PROG = liblzma.a\r
6 +CXX = g++ -O3 -Wall\r
7 +AR = ar
8 +RM = rm -f\r
9 +CFLAGS = -c\r
10 +\r
11 +OBJS = \\r
12 +  ZLib.o \\r
13 +  LZMADecoder.o \\r
14 +  LZMAEncoder.o \\r
15 +  LZInWindow.o \\r
16 +  LZOutWindow.o \\r
17 +  RangeCoderBit.o \\r
18 +  InBuffer.o \\r
19 +  OutBuffer.o \\r
20 +  FileStreams.o \\r
21 +  Alloc.o \\r
22 +  C_FileIO.o \\r
23 +  CommandLineParser.o \\r
24 +  CRC.o \\r
25 +  String.o \\r
26 +  StringConvert.o \\r
27 +  StringToInt.o \\r
28 +  Vector.o \\r
29 +\r
30 +\r
31 +all: $(PROG)\r
32 +\r
33 +$(PROG): $(OBJS)\r
34 +       $(AR) r $(PROG) $(OBJS)\r
35 +\r
36 +ZLib.o: ZLib.cpp\r
37 +       $(CXX) $(CFLAGS) ZLib.cpp\r
38 +\r
39 +LZMADecoder.o: ../LZMA/LZMADecoder.cpp\r
40 +       $(CXX) $(CFLAGS) ../LZMA/LZMADecoder.cpp\r
41 +\r
42 +LZMAEncoder.o: ../LZMA/LZMAEncoder.cpp\r
43 +       $(CXX) $(CFLAGS) ../LZMA/LZMAEncoder.cpp\r
44 +\r
45 +LZInWindow.o: ../LZ/LZInWindow.cpp\r
46 +       $(CXX) $(CFLAGS) ../LZ/LZInWindow.cpp\r
47 +\r
48 +LZOutWindow.o: ../LZ/LZOutWindow.cpp\r
49 +       $(CXX) $(CFLAGS) ../LZ/LZOutWindow.cpp\r
50 +\r
51 +RangeCoderBit.o: ../RangeCoder/RangeCoderBit.cpp\r
52 +       $(CXX) $(CFLAGS) ../RangeCoder/RangeCoderBit.cpp\r
53 +\r
54 +InBuffer.o: ../../Common/InBuffer.cpp\r
55 +       $(CXX) $(CFLAGS) ../../Common/InBuffer.cpp\r
56 +\r
57 +OutBuffer.o: ../../Common/OutBuffer.cpp\r
58 +       $(CXX) $(CFLAGS) ../../Common/OutBuffer.cpp\r
59 +\r
60 +FileStreams.o: ../../Common/FileStreams.cpp\r
61 +       $(CXX) $(CFLAGS) ../../Common/FileStreams.cpp\r
62 +\r
63 +Alloc.o: ../../../Common/Alloc.cpp\r
64 +       $(CXX) $(CFLAGS) ../../../Common/Alloc.cpp\r
65 +\r
66 +C_FileIO.o: ../../../Common/C_FileIO.cpp\r
67 +       $(CXX) $(CFLAGS) ../../../Common/C_FileIO.cpp\r
68 +\r
69 +CommandLineParser.o: ../../../Common/CommandLineParser.cpp\r
70 +       $(CXX) $(CFLAGS) ../../../Common/CommandLineParser.cpp\r
71 +\r
72 +CRC.o: ../../../Common/CRC.cpp\r
73 +       $(CXX) $(CFLAGS) ../../../Common/CRC.cpp\r
74 +\r
75 +MyWindows.o: ../../../Common/MyWindows.cpp\r
76 +       $(CXX) $(CFLAGS) ../../../Common/MyWindows.cpp\r
77 +\r
78 +String.o: ../../../Common/String.cpp\r
79 +       $(CXX) $(CFLAGS) ../../../Common/String.cpp\r
80 +\r
81 +StringConvert.o: ../../../Common/StringConvert.cpp\r
82 +       $(CXX) $(CFLAGS) ../../../Common/StringConvert.cpp\r
83 +\r
84 +StringToInt.o: ../../../Common/StringToInt.cpp\r
85 +       $(CXX) $(CFLAGS) ../../../Common/StringToInt.cpp\r
86 +\r
87 +Vector.o: ../../../Common/Vector.cpp\r
88 +       $(CXX) $(CFLAGS) ../../../Common/Vector.cpp\r
89 +\r
90 +clean:\r
91 +       -$(RM) $(PROG) $(OBJS)\r
92 +\r
93 diff -Nur lzma432/C/7zip/Compress/LZMA_Lib/ZLib.cpp lzma432-owrt/C/7zip/Compress/LZMA_Lib/ZLib.cpp
94 --- lzma432/C/7zip/Compress/LZMA_Lib/ZLib.cpp   1970-01-01 01:00:00.000000000 +0100
95 +++ lzma432-owrt/C/7zip/Compress/LZMA_Lib/ZLib.cpp      2006-03-22 14:23:38.000000000 +0100
96 @@ -0,0 +1,283 @@
97 +/*\r
98 + * lzma zlib simplified wrapper\r
99 + *\r
100 + * Copyright (c) 2005 Oleg I. Vdovikin <oleg@cs.msu.su>\r
101 + * Modified for LZMA 4.27 SDK Craig.Peacock@beyondlogic.org\r
102 + *\r
103 + * This library is free software; you can redistribute \r
104 + * it and/or modify it under the terms of the GNU Lesser \r
105 + * General Public License as published by the Free Software \r
106 + * Foundation; either version 2.1 of the License, or \r
107 + * (at your option) any later version.\r
108 + *\r
109 + * This library is distributed in the hope that it will be \r
110 + * useful, but WITHOUT ANY WARRANTY; without even the implied \r
111 + * warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR \r
112 + * PURPOSE. See the GNU Lesser General Public License \r
113 + * for more details.\r
114 + *\r
115 + * You should have received a copy of the GNU Lesser General \r
116 + * Public License along with this library; if not, write to \r
117 + * the Free Software Foundation, Inc., 59 Temple Place, \r
118 + * Suite 330, Boston, MA 02111-1307 USA \r
119 + */\r
120 +\r
121 +/*\r
122 + * default values for encoder/decoder used by wrapper\r
123 + */\r
124 +\r
125 +#include <zlib.h>\r
126 +\r
127 +#define ZLIB_LC 3\r
128 +#define ZLIB_LP 0\r
129 +#define ZLIB_PB 2\r
130 +\r
131 +#ifdef WIN32\r
132 +#include <initguid.h>\r
133 +#else\r
134 +#define INITGUID\r
135 +#endif\r
136 +\r
137 +#include "../../../Common/MyWindows.h"\r
138 +#include "../LZMA/LZMADecoder.h"\r
139 +#include "../LZMA/LZMAEncoder.h"\r
140 +\r
141 +#define STG_E_SEEKERROR                  ((HRESULT)0x80030019L)\r
142 +#define STG_E_MEDIUMFULL                 ((HRESULT)0x80030070L)\r
143 +\r
144 +class CInMemoryStream: \r
145 +  public IInStream,\r
146 +  public IStreamGetSize,\r
147 +  public CMyUnknownImp\r
148 +{\r
149 +public:\r
150 +  CInMemoryStream(const Bytef *data, UInt64 size) : \r
151 +         m_data(data), m_size(size), m_offset(0) {}\r
152 +\r
153 +  virtual ~CInMemoryStream() {}\r
154 +\r
155 +  MY_UNKNOWN_IMP2(IInStream, IStreamGetSize)\r
156 +\r
157 +  STDMETHOD(Read)(void *data, UInt32 size, UInt32 *processedSize)\r
158 +  {\r
159 +         if (size > m_size - m_offset) \r
160 +                 size = m_size - m_offset;\r
161 +\r
162 +         if (size) {\r
163 +                 memcpy(data, m_data + m_offset, size);\r
164 +         }\r
165 +\r
166 +         m_offset += size;\r
167 +\r
168 +         if (processedSize) \r
169 +                 *processedSize = size;\r
170 +\r
171 +         return S_OK;\r
172 +  }\r
173 +\r
174 +  STDMETHOD(ReadPart)(void *data, UInt32 size, UInt32 *processedSize)\r
175 +  {\r
176 +       return Read(data, size, processedSize);\r
177 +  }\r
178 +\r
179 +  STDMETHOD(Seek)(Int64 offset, UInt32 seekOrigin, UInt64 *newPosition)\r
180 +  {\r
181 +         UInt64 _offset;\r
182 +\r
183 +         if (seekOrigin == STREAM_SEEK_SET) _offset = offset;\r
184 +         else if (seekOrigin == STREAM_SEEK_CUR) _offset = m_offset + offset; \r
185 +         else if (seekOrigin == STREAM_SEEK_END) _offset = m_size;\r
186 +         else return STG_E_INVALIDFUNCTION;\r
187 +\r
188 +         if (_offset < 0 || _offset > m_size)\r
189 +                 return STG_E_SEEKERROR;\r
190 +\r
191 +         m_offset = _offset;\r
192 +\r
193 +         if (newPosition)\r
194 +                 *newPosition = m_offset;\r
195 +\r
196 +         return S_OK;\r
197 +  }\r
198 +\r
199 +  STDMETHOD(GetSize)(UInt64 *size)\r
200 +  {\r
201 +         *size = m_size;\r
202 +         return S_OK;\r
203 +  }\r
204 +protected:\r
205 +       const Bytef *m_data;\r
206 +       UInt64 m_size;\r
207 +       UInt64 m_offset;\r
208 +};\r
209 +\r
210 +class COutMemoryStream: \r
211 +  public IOutStream,\r
212 +  public CMyUnknownImp\r
213 +{\r
214 +public:\r
215 +  COutMemoryStream(Bytef *data, UInt64 maxsize) : \r
216 +         m_data(data), m_size(0), m_maxsize(maxsize), m_offset(0) {}\r
217 +  virtual ~COutMemoryStream() {}\r
218 +  \r
219 +  MY_UNKNOWN_IMP1(IOutStream)\r
220 +\r
221 +  STDMETHOD(Write)(const void *data, UInt32 size, UInt32 *processedSize)\r
222 +  {\r
223 +         if (size > m_maxsize - m_offset) \r
224 +                 size = m_maxsize - m_offset;\r
225 +\r
226 +         if (size) {\r
227 +                 memcpy(m_data + m_offset, data, size);\r
228 +         }\r
229 +\r
230 +         m_offset += size;\r
231 +\r
232 +         if (m_offset > m_size)\r
233 +               m_size = m_offset;\r
234 +\r
235 +         if (processedSize) \r
236 +                 *processedSize = size;\r
237 +\r
238 +         return S_OK;\r
239 +  }\r
240 +  \r
241 +  STDMETHOD(WritePart)(const void *data, UInt32 size, UInt32 *processedSize)\r
242 +  {\r
243 +         return Write(data, size, processedSize);\r
244 +  }\r
245 +\r
246 +  STDMETHOD(Seek)(Int64 offset, UInt32 seekOrigin, UInt64 *newPosition)\r
247 +  {\r
248 +         UInt64 _offset;\r
249 +\r
250 +         if (seekOrigin == STREAM_SEEK_SET) _offset = offset;\r
251 +         else if (seekOrigin == STREAM_SEEK_CUR) _offset = m_offset + offset; \r
252 +         else if (seekOrigin == STREAM_SEEK_END) _offset = m_size;\r
253 +         else return STG_E_INVALIDFUNCTION;\r
254 +\r
255 +         if (_offset < 0 || _offset > m_maxsize)\r
256 +                 return STG_E_SEEKERROR;\r
257 +\r
258 +         m_offset = _offset;\r
259 +\r
260 +         if (newPosition)\r
261 +                 *newPosition = m_offset;\r
262 +\r
263 +         return S_OK;\r
264 +  }\r
265 +  \r
266 +  STDMETHOD(SetSize)(Int64 newSize)\r
267 +  {\r
268 +         if ((UInt64)newSize > m_maxsize) \r
269 +                 return STG_E_MEDIUMFULL;\r
270 +\r
271 +         return S_OK;\r
272 +  }\r
273 +protected:\r
274 +       Bytef *m_data;\r
275 +       UInt64 m_size;\r
276 +       UInt64 m_maxsize;\r
277 +       UInt64 m_offset;\r
278 +};\r
279 +\r
280 +ZEXTERN int ZEXPORT compress2 OF((Bytef *dest,   uLongf *destLen,\r
281 +                                  const Bytef *source, uLong sourceLen,\r
282 +                                  int level))\r
283 +{\r
284 +       CInMemoryStream *inStreamSpec = new CInMemoryStream(source, sourceLen);\r
285 +       CMyComPtr<ISequentialInStream> inStream = inStreamSpec;\r
286 +       \r
287 +       COutMemoryStream *outStreamSpec = new COutMemoryStream(dest+4, (*destLen)-4);\r
288 +       CMyComPtr<ISequentialOutStream> outStream = outStreamSpec;\r
289 +               \r
290 +       NCompress::NLZMA::CEncoder *encoderSpec = \r
291 +               new NCompress::NLZMA::CEncoder;\r
292 +       CMyComPtr<ICompressCoder> encoder = encoderSpec;\r
293 +       \r
294 +       PROPID propIDs[] = \r
295 +       {\r
296 +               NCoderPropID::kDictionarySize,\r
297 +               NCoderPropID::kPosStateBits,\r
298 +               NCoderPropID::kLitContextBits,\r
299 +               NCoderPropID::kLitPosBits,\r
300 +               NCoderPropID::kAlgorithm,\r
301 +               NCoderPropID::kNumFastBytes,\r
302 +               NCoderPropID::kMatchFinder,\r
303 +               NCoderPropID::kEndMarker\r
304 +       };\r
305 +       const int kNumProps = sizeof(propIDs) / sizeof(propIDs[0]);\r
306 +       \r
307 +       PROPVARIANT properties[kNumProps];\r
308 +       for (int p = 0; p < 6; p++)\r
309 +               properties[p].vt = VT_UI4;\r
310 +       properties[0].ulVal = UInt32(1 << 15);\r
311 +       properties[1].ulVal = UInt32(ZLIB_PB);\r
312 +       properties[2].ulVal = UInt32(ZLIB_LC); // for normal files\r
313 +       properties[3].ulVal = UInt32(ZLIB_LP); // for normal files\r
314 +       properties[4].ulVal = UInt32(0);\r
315 +       properties[5].ulVal = UInt32(0x28);\r
316 +       \r
317 +       properties[6].vt = VT_BSTR;\r
318 +       properties[6].bstrVal = (BSTR)(const wchar_t *)L"BT4";\r
319 +       \r
320 +       properties[7].vt = VT_BOOL;\r
321 +       properties[7].boolVal = VARIANT_TRUE;\r
322 +       \r
323 +       if (encoderSpec->SetCoderProperties(propIDs, properties, kNumProps) != S_OK)\r
324 +               return Z_MEM_ERROR; // should not happen\r
325 +       \r
326 +       if (encoderSpec->WriteCoderProperties(outStream) != S_OK)\r
327 +               return Z_MEM_ERROR;\r
328 +               \r
329 +       HRESULT result = encoder->Code(inStream, outStream, 0, 0, 0);\r
330 +       if (result == E_OUTOFMEMORY)\r
331 +       {\r
332 +               return Z_MEM_ERROR;\r
333 +       }   \r
334 +       else if (result != S_OK)\r
335 +       {\r
336 +               return Z_BUF_ERROR;     // should not happen\r
337 +       }   \r
338 +       \r
339 +       UInt64 fileSize;\r
340 +       outStreamSpec->Seek(0, STREAM_SEEK_END, &fileSize);\r
341 +       *destLen = fileSize;\r
342 +       \r
343 +       /* Copy size of uncompressed string into first four bytes */\r
344 +       memcpy(dest, &sourceLen, 4);\r
345 +               \r
346 +       return Z_OK;\r
347 +}\r
348 +\r
349 +ZEXTERN int ZEXPORT uncompress OF((Bytef *dest,   uLongf *destLen,\r
350 +                                   const Bytef *source, uLong sourceLen))\r
351 +{\r
352 +       CInMemoryStream *inStreamSpec = new CInMemoryStream(source+9, sourceLen-9);\r
353 +       CMyComPtr<ISequentialInStream> inStream = inStreamSpec;\r
354 +       \r
355 +       COutMemoryStream *outStreamSpec = new COutMemoryStream(dest, *destLen);\r
356 +       CMyComPtr<ISequentialOutStream> outStream = outStreamSpec;\r
357 +       \r
358 +       NCompress::NLZMA::CDecoder *decoderSpec = \r
359 +               new NCompress::NLZMA::CDecoder;\r
360 +       CMyComPtr<ICompressCoder> decoder = decoderSpec;\r
361 +       \r
362 +       //if (decoderSpec->SetDecoderPropertiesRaw(ZLIB_LC, \r
363 +       //      ZLIB_LP, ZLIB_PB, (1 << 23)) != S_OK) return Z_DATA_ERROR;\r
364 +       \r
365 +       if (decoderSpec->SetDecoderProperties2(source+4, 5) != S_OK) \r
366 +               return Z_DATA_ERROR;\r
367 +       \r
368 +       UInt64 fileSize = *destLen;\r
369 +       \r
370 +       if (decoder->Code(inStream, outStream, 0, &fileSize, 0) != S_OK)\r
371 +       {\r
372 +               return Z_DATA_ERROR;\r
373 +       }\r
374 +       \r
375 +       outStreamSpec->Seek(0, STREAM_SEEK_END, &fileSize);\r
376 +       *destLen = fileSize;\r
377 +       \r
378 +       return Z_OK;\r
379 +}\r
380 diff -Nur lzma432/C/Common/CommandLineParser.h lzma432-owrt/C/Common/CommandLineParser.h
381 --- lzma432/C/Common/CommandLineParser.h        2005-03-07 17:03:46.000000000 +0100
382 +++ lzma432-owrt/C/Common/CommandLineParser.h   2006-03-22 14:23:38.000000000 +0100
383 @@ -3,7 +3,7 @@
384  #ifndef __COMMON_COMMANDLINEPARSER_H\r
385  #define __COMMON_COMMANDLINEPARSER_H\r
386  \r
387 -#include "Common/String.h"\r
388 +#include "String.h"\r
389  \r
390  namespace NCommandLineParser {\r
391  \r
392 diff -Nur lzma432/C/Common/StringConvert.h lzma432-owrt/C/Common/StringConvert.h
393 --- lzma432/C/Common/StringConvert.h    2005-09-16 10:19:44.000000000 +0200
394 +++ lzma432-owrt/C/Common/StringConvert.h       2006-03-22 14:23:38.000000000 +0100
395 @@ -4,7 +4,7 @@
396  #define __COMMON_STRINGCONVERT_H\r
397  \r
398  #include "MyWindows.h"\r
399 -#include "Common/String.h"\r
400 +#include "String.h"\r
401  #include "Types.h"\r
402  \r
403  UString MultiByteToUnicodeString(const AString &srcString, UINT codePage = CP_ACP);\r
404 diff -Nur lzma432/C/Common/String.cpp lzma432-owrt/C/Common/String.cpp
405 --- lzma432/C/Common/String.cpp 2005-09-28 11:44:06.000000000 +0200
406 +++ lzma432-owrt/C/Common/String.cpp    2006-03-22 14:23:38.000000000 +0100
407 @@ -8,7 +8,7 @@
408  #include <ctype.h>\r
409  #endif\r
410  \r
411 -#include "Common/String.h"\r
412 +#include "String.h"\r
413  \r
414  \r
415  #ifdef _WIN32\r