aboutsummaryrefslogtreecommitdiff
path: root/C/LzmaDec.c
diff options
context:
space:
mode:
authorIgor Pavlov <87184205+ip7z@users.noreply.github.com>2023-06-21 00:00:00 +0000
committerIgor Pavlov <87184205+ip7z@users.noreply.github.com>2023-12-17 14:59:19 +0500
commit5b39dc76f1bc82f941d5c800ab9f34407a06b53a (patch)
treefe5e17420300b715021a76328444088d32047963 /C/LzmaDec.c
parent93be7d4abfd4233228f58ee1fbbcd76d91be66a4 (diff)
download7zip-5b39dc76f1bc82f941d5c800ab9f34407a06b53a.tar.gz
7zip-5b39dc76f1bc82f941d5c800ab9f34407a06b53a.tar.bz2
7zip-5b39dc76f1bc82f941d5c800ab9f34407a06b53a.zip
23.0123.01
Diffstat (limited to 'C/LzmaDec.c')
-rw-r--r--C/LzmaDec.c190
1 files changed, 95 insertions, 95 deletions
diff --git a/C/LzmaDec.c b/C/LzmaDec.c
index d6742e5..69bb8bb 100644
--- a/C/LzmaDec.c
+++ b/C/LzmaDec.c
@@ -1,5 +1,5 @@
1/* LzmaDec.c -- LZMA Decoder 1/* LzmaDec.c -- LZMA Decoder
22021-04-01 : Igor Pavlov : Public domain */ 22023-04-07 : Igor Pavlov : Public domain */
3 3
4#include "Precomp.h" 4#include "Precomp.h"
5 5
@@ -8,15 +8,15 @@
8/* #include "CpuArch.h" */ 8/* #include "CpuArch.h" */
9#include "LzmaDec.h" 9#include "LzmaDec.h"
10 10
11#define kNumTopBits 24 11// #define kNumTopBits 24
12#define kTopValue ((UInt32)1 << kNumTopBits) 12#define kTopValue ((UInt32)1 << 24)
13 13
14#define kNumBitModelTotalBits 11 14#define kNumBitModelTotalBits 11
15#define kBitModelTotal (1 << kNumBitModelTotalBits) 15#define kBitModelTotal (1 << kNumBitModelTotalBits)
16 16
17#define RC_INIT_SIZE 5 17#define RC_INIT_SIZE 5
18 18
19#ifndef _LZMA_DEC_OPT 19#ifndef Z7_LZMA_DEC_OPT
20 20
21#define kNumMoveBits 5 21#define kNumMoveBits 5
22#define NORMALIZE if (range < kTopValue) { range <<= 8; code = (code << 8) | (*buf++); } 22#define NORMALIZE if (range < kTopValue) { range <<= 8; code = (code << 8) | (*buf++); }
@@ -25,14 +25,14 @@
25#define UPDATE_0(p) range = bound; *(p) = (CLzmaProb)(ttt + ((kBitModelTotal - ttt) >> kNumMoveBits)); 25#define UPDATE_0(p) range = bound; *(p) = (CLzmaProb)(ttt + ((kBitModelTotal - ttt) >> kNumMoveBits));
26#define UPDATE_1(p) range -= bound; code -= bound; *(p) = (CLzmaProb)(ttt - (ttt >> kNumMoveBits)); 26#define UPDATE_1(p) range -= bound; code -= bound; *(p) = (CLzmaProb)(ttt - (ttt >> kNumMoveBits));
27#define GET_BIT2(p, i, A0, A1) IF_BIT_0(p) \ 27#define GET_BIT2(p, i, A0, A1) IF_BIT_0(p) \
28 { UPDATE_0(p); i = (i + i); A0; } else \ 28 { UPDATE_0(p) i = (i + i); A0; } else \
29 { UPDATE_1(p); i = (i + i) + 1; A1; } 29 { UPDATE_1(p) i = (i + i) + 1; A1; }
30 30
31#define TREE_GET_BIT(probs, i) { GET_BIT2(probs + i, i, ;, ;); } 31#define TREE_GET_BIT(probs, i) { GET_BIT2(probs + i, i, ;, ;); }
32 32
33#define REV_BIT(p, i, A0, A1) IF_BIT_0(p + i) \ 33#define REV_BIT(p, i, A0, A1) IF_BIT_0(p + i) \
34 { UPDATE_0(p + i); A0; } else \ 34 { UPDATE_0(p + i) A0; } else \
35 { UPDATE_1(p + i); A1; } 35 { UPDATE_1(p + i) A1; }
36#define REV_BIT_VAR( p, i, m) REV_BIT(p, i, i += m; m += m, m += m; i += m; ) 36#define REV_BIT_VAR( p, i, m) REV_BIT(p, i, i += m; m += m, m += m; i += m; )
37#define REV_BIT_CONST(p, i, m) REV_BIT(p, i, i += m; , i += m * 2; ) 37#define REV_BIT_CONST(p, i, m) REV_BIT(p, i, i += m; , i += m * 2; )
38#define REV_BIT_LAST( p, i, m) REV_BIT(p, i, i -= m , ; ) 38#define REV_BIT_LAST( p, i, m) REV_BIT(p, i, i -= m , ; )
@@ -40,19 +40,19 @@
40#define TREE_DECODE(probs, limit, i) \ 40#define TREE_DECODE(probs, limit, i) \
41 { i = 1; do { TREE_GET_BIT(probs, i); } while (i < limit); i -= limit; } 41 { i = 1; do { TREE_GET_BIT(probs, i); } while (i < limit); i -= limit; }
42 42
43/* #define _LZMA_SIZE_OPT */ 43/* #define Z7_LZMA_SIZE_OPT */
44 44
45#ifdef _LZMA_SIZE_OPT 45#ifdef Z7_LZMA_SIZE_OPT
46#define TREE_6_DECODE(probs, i) TREE_DECODE(probs, (1 << 6), i) 46#define TREE_6_DECODE(probs, i) TREE_DECODE(probs, (1 << 6), i)
47#else 47#else
48#define TREE_6_DECODE(probs, i) \ 48#define TREE_6_DECODE(probs, i) \
49 { i = 1; \ 49 { i = 1; \
50 TREE_GET_BIT(probs, i); \ 50 TREE_GET_BIT(probs, i) \
51 TREE_GET_BIT(probs, i); \ 51 TREE_GET_BIT(probs, i) \
52 TREE_GET_BIT(probs, i); \ 52 TREE_GET_BIT(probs, i) \
53 TREE_GET_BIT(probs, i); \ 53 TREE_GET_BIT(probs, i) \
54 TREE_GET_BIT(probs, i); \ 54 TREE_GET_BIT(probs, i) \
55 TREE_GET_BIT(probs, i); \ 55 TREE_GET_BIT(probs, i) \
56 i -= 0x40; } 56 i -= 0x40; }
57#endif 57#endif
58 58
@@ -64,25 +64,25 @@
64 probLit = prob + (offs + bit + symbol); \ 64 probLit = prob + (offs + bit + symbol); \
65 GET_BIT2(probLit, symbol, offs ^= bit; , ;) 65 GET_BIT2(probLit, symbol, offs ^= bit; , ;)
66 66
67#endif // _LZMA_DEC_OPT 67#endif // Z7_LZMA_DEC_OPT
68 68
69 69
70#define NORMALIZE_CHECK if (range < kTopValue) { if (buf >= bufLimit) return DUMMY_INPUT_EOF; range <<= 8; code = (code << 8) | (*buf++); } 70#define NORMALIZE_CHECK if (range < kTopValue) { if (buf >= bufLimit) return DUMMY_INPUT_EOF; range <<= 8; code = (code << 8) | (*buf++); }
71 71
72#define IF_BIT_0_CHECK(p) ttt = *(p); NORMALIZE_CHECK; bound = (range >> kNumBitModelTotalBits) * (UInt32)ttt; if (code < bound) 72#define IF_BIT_0_CHECK(p) ttt = *(p); NORMALIZE_CHECK bound = (range >> kNumBitModelTotalBits) * (UInt32)ttt; if (code < bound)
73#define UPDATE_0_CHECK range = bound; 73#define UPDATE_0_CHECK range = bound;
74#define UPDATE_1_CHECK range -= bound; code -= bound; 74#define UPDATE_1_CHECK range -= bound; code -= bound;
75#define GET_BIT2_CHECK(p, i, A0, A1) IF_BIT_0_CHECK(p) \ 75#define GET_BIT2_CHECK(p, i, A0, A1) IF_BIT_0_CHECK(p) \
76 { UPDATE_0_CHECK; i = (i + i); A0; } else \ 76 { UPDATE_0_CHECK i = (i + i); A0; } else \
77 { UPDATE_1_CHECK; i = (i + i) + 1; A1; } 77 { UPDATE_1_CHECK i = (i + i) + 1; A1; }
78#define GET_BIT_CHECK(p, i) GET_BIT2_CHECK(p, i, ; , ;) 78#define GET_BIT_CHECK(p, i) GET_BIT2_CHECK(p, i, ; , ;)
79#define TREE_DECODE_CHECK(probs, limit, i) \ 79#define TREE_DECODE_CHECK(probs, limit, i) \
80 { i = 1; do { GET_BIT_CHECK(probs + i, i) } while (i < limit); i -= limit; } 80 { i = 1; do { GET_BIT_CHECK(probs + i, i) } while (i < limit); i -= limit; }
81 81
82 82
83#define REV_BIT_CHECK(p, i, m) IF_BIT_0_CHECK(p + i) \ 83#define REV_BIT_CHECK(p, i, m) IF_BIT_0_CHECK(p + i) \
84 { UPDATE_0_CHECK; i += m; m += m; } else \ 84 { UPDATE_0_CHECK i += m; m += m; } else \
85 { UPDATE_1_CHECK; m += m; i += m; } 85 { UPDATE_1_CHECK m += m; i += m; }
86 86
87 87
88#define kNumPosBitsMax 4 88#define kNumPosBitsMax 4
@@ -224,14 +224,14 @@ Out:
224*/ 224*/
225 225
226 226
227#ifdef _LZMA_DEC_OPT 227#ifdef Z7_LZMA_DEC_OPT
228 228
229int MY_FAST_CALL LZMA_DECODE_REAL(CLzmaDec *p, SizeT limit, const Byte *bufLimit); 229int Z7_FASTCALL LZMA_DECODE_REAL(CLzmaDec *p, SizeT limit, const Byte *bufLimit);
230 230
231#else 231#else
232 232
233static 233static
234int MY_FAST_CALL LZMA_DECODE_REAL(CLzmaDec *p, SizeT limit, const Byte *bufLimit) 234int Z7_FASTCALL LZMA_DECODE_REAL(CLzmaDec *p, SizeT limit, const Byte *bufLimit)
235{ 235{
236 CLzmaProb *probs = GET_PROBS; 236 CLzmaProb *probs = GET_PROBS;
237 unsigned state = (unsigned)p->state; 237 unsigned state = (unsigned)p->state;
@@ -263,7 +263,7 @@ int MY_FAST_CALL LZMA_DECODE_REAL(CLzmaDec *p, SizeT limit, const Byte *bufLimit
263 IF_BIT_0(prob) 263 IF_BIT_0(prob)
264 { 264 {
265 unsigned symbol; 265 unsigned symbol;
266 UPDATE_0(prob); 266 UPDATE_0(prob)
267 prob = probs + Literal; 267 prob = probs + Literal;
268 if (processedPos != 0 || checkDicSize != 0) 268 if (processedPos != 0 || checkDicSize != 0)
269 prob += (UInt32)3 * ((((processedPos << 8) + dic[(dicPos == 0 ? dicBufSize : dicPos) - 1]) & lpMask) << lc); 269 prob += (UInt32)3 * ((((processedPos << 8) + dic[(dicPos == 0 ? dicBufSize : dicPos) - 1]) & lpMask) << lc);
@@ -273,7 +273,7 @@ int MY_FAST_CALL LZMA_DECODE_REAL(CLzmaDec *p, SizeT limit, const Byte *bufLimit
273 { 273 {
274 state -= (state < 4) ? state : 3; 274 state -= (state < 4) ? state : 3;
275 symbol = 1; 275 symbol = 1;
276 #ifdef _LZMA_SIZE_OPT 276 #ifdef Z7_LZMA_SIZE_OPT
277 do { NORMAL_LITER_DEC } while (symbol < 0x100); 277 do { NORMAL_LITER_DEC } while (symbol < 0x100);
278 #else 278 #else
279 NORMAL_LITER_DEC 279 NORMAL_LITER_DEC
@@ -292,7 +292,7 @@ int MY_FAST_CALL LZMA_DECODE_REAL(CLzmaDec *p, SizeT limit, const Byte *bufLimit
292 unsigned offs = 0x100; 292 unsigned offs = 0x100;
293 state -= (state < 10) ? 3 : 6; 293 state -= (state < 10) ? 3 : 6;
294 symbol = 1; 294 symbol = 1;
295 #ifdef _LZMA_SIZE_OPT 295 #ifdef Z7_LZMA_SIZE_OPT
296 do 296 do
297 { 297 {
298 unsigned bit; 298 unsigned bit;
@@ -321,25 +321,25 @@ int MY_FAST_CALL LZMA_DECODE_REAL(CLzmaDec *p, SizeT limit, const Byte *bufLimit
321 } 321 }
322 322
323 { 323 {
324 UPDATE_1(prob); 324 UPDATE_1(prob)
325 prob = probs + IsRep + state; 325 prob = probs + IsRep + state;
326 IF_BIT_0(prob) 326 IF_BIT_0(prob)
327 { 327 {
328 UPDATE_0(prob); 328 UPDATE_0(prob)
329 state += kNumStates; 329 state += kNumStates;
330 prob = probs + LenCoder; 330 prob = probs + LenCoder;
331 } 331 }
332 else 332 else
333 { 333 {
334 UPDATE_1(prob); 334 UPDATE_1(prob)
335 prob = probs + IsRepG0 + state; 335 prob = probs + IsRepG0 + state;
336 IF_BIT_0(prob) 336 IF_BIT_0(prob)
337 { 337 {
338 UPDATE_0(prob); 338 UPDATE_0(prob)
339 prob = probs + IsRep0Long + COMBINED_PS_STATE; 339 prob = probs + IsRep0Long + COMBINED_PS_STATE;
340 IF_BIT_0(prob) 340 IF_BIT_0(prob)
341 { 341 {
342 UPDATE_0(prob); 342 UPDATE_0(prob)
343 343
344 // that case was checked before with kBadRepCode 344 // that case was checked before with kBadRepCode
345 // if (checkDicSize == 0 && processedPos == 0) { len = kMatchSpecLen_Error_Data + 1; break; } 345 // if (checkDicSize == 0 && processedPos == 0) { len = kMatchSpecLen_Error_Data + 1; break; }
@@ -353,30 +353,30 @@ int MY_FAST_CALL LZMA_DECODE_REAL(CLzmaDec *p, SizeT limit, const Byte *bufLimit
353 state = state < kNumLitStates ? 9 : 11; 353 state = state < kNumLitStates ? 9 : 11;
354 continue; 354 continue;
355 } 355 }
356 UPDATE_1(prob); 356 UPDATE_1(prob)
357 } 357 }
358 else 358 else
359 { 359 {
360 UInt32 distance; 360 UInt32 distance;
361 UPDATE_1(prob); 361 UPDATE_1(prob)
362 prob = probs + IsRepG1 + state; 362 prob = probs + IsRepG1 + state;
363 IF_BIT_0(prob) 363 IF_BIT_0(prob)
364 { 364 {
365 UPDATE_0(prob); 365 UPDATE_0(prob)
366 distance = rep1; 366 distance = rep1;
367 } 367 }
368 else 368 else
369 { 369 {
370 UPDATE_1(prob); 370 UPDATE_1(prob)
371 prob = probs + IsRepG2 + state; 371 prob = probs + IsRepG2 + state;
372 IF_BIT_0(prob) 372 IF_BIT_0(prob)
373 { 373 {
374 UPDATE_0(prob); 374 UPDATE_0(prob)
375 distance = rep2; 375 distance = rep2;
376 } 376 }
377 else 377 else
378 { 378 {
379 UPDATE_1(prob); 379 UPDATE_1(prob)
380 distance = rep3; 380 distance = rep3;
381 rep3 = rep2; 381 rep3 = rep2;
382 } 382 }
@@ -389,37 +389,37 @@ int MY_FAST_CALL LZMA_DECODE_REAL(CLzmaDec *p, SizeT limit, const Byte *bufLimit
389 prob = probs + RepLenCoder; 389 prob = probs + RepLenCoder;
390 } 390 }
391 391
392 #ifdef _LZMA_SIZE_OPT 392 #ifdef Z7_LZMA_SIZE_OPT
393 { 393 {
394 unsigned lim, offset; 394 unsigned lim, offset;
395 CLzmaProb *probLen = prob + LenChoice; 395 CLzmaProb *probLen = prob + LenChoice;
396 IF_BIT_0(probLen) 396 IF_BIT_0(probLen)
397 { 397 {
398 UPDATE_0(probLen); 398 UPDATE_0(probLen)
399 probLen = prob + LenLow + GET_LEN_STATE; 399 probLen = prob + LenLow + GET_LEN_STATE;
400 offset = 0; 400 offset = 0;
401 lim = (1 << kLenNumLowBits); 401 lim = (1 << kLenNumLowBits);
402 } 402 }
403 else 403 else
404 { 404 {
405 UPDATE_1(probLen); 405 UPDATE_1(probLen)
406 probLen = prob + LenChoice2; 406 probLen = prob + LenChoice2;
407 IF_BIT_0(probLen) 407 IF_BIT_0(probLen)
408 { 408 {
409 UPDATE_0(probLen); 409 UPDATE_0(probLen)
410 probLen = prob + LenLow + GET_LEN_STATE + (1 << kLenNumLowBits); 410 probLen = prob + LenLow + GET_LEN_STATE + (1 << kLenNumLowBits);
411 offset = kLenNumLowSymbols; 411 offset = kLenNumLowSymbols;
412 lim = (1 << kLenNumLowBits); 412 lim = (1 << kLenNumLowBits);
413 } 413 }
414 else 414 else
415 { 415 {
416 UPDATE_1(probLen); 416 UPDATE_1(probLen)
417 probLen = prob + LenHigh; 417 probLen = prob + LenHigh;
418 offset = kLenNumLowSymbols * 2; 418 offset = kLenNumLowSymbols * 2;
419 lim = (1 << kLenNumHighBits); 419 lim = (1 << kLenNumHighBits);
420 } 420 }
421 } 421 }
422 TREE_DECODE(probLen, lim, len); 422 TREE_DECODE(probLen, lim, len)
423 len += offset; 423 len += offset;
424 } 424 }
425 #else 425 #else
@@ -427,32 +427,32 @@ int MY_FAST_CALL LZMA_DECODE_REAL(CLzmaDec *p, SizeT limit, const Byte *bufLimit
427 CLzmaProb *probLen = prob + LenChoice; 427 CLzmaProb *probLen = prob + LenChoice;
428 IF_BIT_0(probLen) 428 IF_BIT_0(probLen)
429 { 429 {
430 UPDATE_0(probLen); 430 UPDATE_0(probLen)
431 probLen = prob + LenLow + GET_LEN_STATE; 431 probLen = prob + LenLow + GET_LEN_STATE;
432 len = 1; 432 len = 1;
433 TREE_GET_BIT(probLen, len); 433 TREE_GET_BIT(probLen, len)
434 TREE_GET_BIT(probLen, len); 434 TREE_GET_BIT(probLen, len)
435 TREE_GET_BIT(probLen, len); 435 TREE_GET_BIT(probLen, len)
436 len -= 8; 436 len -= 8;
437 } 437 }
438 else 438 else
439 { 439 {
440 UPDATE_1(probLen); 440 UPDATE_1(probLen)
441 probLen = prob + LenChoice2; 441 probLen = prob + LenChoice2;
442 IF_BIT_0(probLen) 442 IF_BIT_0(probLen)
443 { 443 {
444 UPDATE_0(probLen); 444 UPDATE_0(probLen)
445 probLen = prob + LenLow + GET_LEN_STATE + (1 << kLenNumLowBits); 445 probLen = prob + LenLow + GET_LEN_STATE + (1 << kLenNumLowBits);
446 len = 1; 446 len = 1;
447 TREE_GET_BIT(probLen, len); 447 TREE_GET_BIT(probLen, len)
448 TREE_GET_BIT(probLen, len); 448 TREE_GET_BIT(probLen, len)
449 TREE_GET_BIT(probLen, len); 449 TREE_GET_BIT(probLen, len)
450 } 450 }
451 else 451 else
452 { 452 {
453 UPDATE_1(probLen); 453 UPDATE_1(probLen)
454 probLen = prob + LenHigh; 454 probLen = prob + LenHigh;
455 TREE_DECODE(probLen, (1 << kLenNumHighBits), len); 455 TREE_DECODE(probLen, (1 << kLenNumHighBits), len)
456 len += kLenNumLowSymbols * 2; 456 len += kLenNumLowSymbols * 2;
457 } 457 }
458 } 458 }
@@ -464,7 +464,7 @@ int MY_FAST_CALL LZMA_DECODE_REAL(CLzmaDec *p, SizeT limit, const Byte *bufLimit
464 UInt32 distance; 464 UInt32 distance;
465 prob = probs + PosSlot + 465 prob = probs + PosSlot +
466 ((len < kNumLenToPosStates ? len : kNumLenToPosStates - 1) << kNumPosSlotBits); 466 ((len < kNumLenToPosStates ? len : kNumLenToPosStates - 1) << kNumPosSlotBits);
467 TREE_6_DECODE(prob, distance); 467 TREE_6_DECODE(prob, distance)
468 if (distance >= kStartPosModelIndex) 468 if (distance >= kStartPosModelIndex)
469 { 469 {
470 unsigned posSlot = (unsigned)distance; 470 unsigned posSlot = (unsigned)distance;
@@ -479,7 +479,7 @@ int MY_FAST_CALL LZMA_DECODE_REAL(CLzmaDec *p, SizeT limit, const Byte *bufLimit
479 distance++; 479 distance++;
480 do 480 do
481 { 481 {
482 REV_BIT_VAR(prob, distance, m); 482 REV_BIT_VAR(prob, distance, m)
483 } 483 }
484 while (--numDirectBits); 484 while (--numDirectBits);
485 distance -= m; 485 distance -= m;
@@ -514,10 +514,10 @@ int MY_FAST_CALL LZMA_DECODE_REAL(CLzmaDec *p, SizeT limit, const Byte *bufLimit
514 distance <<= kNumAlignBits; 514 distance <<= kNumAlignBits;
515 { 515 {
516 unsigned i = 1; 516 unsigned i = 1;
517 REV_BIT_CONST(prob, i, 1); 517 REV_BIT_CONST(prob, i, 1)
518 REV_BIT_CONST(prob, i, 2); 518 REV_BIT_CONST(prob, i, 2)
519 REV_BIT_CONST(prob, i, 4); 519 REV_BIT_CONST(prob, i, 4)
520 REV_BIT_LAST (prob, i, 8); 520 REV_BIT_LAST (prob, i, 8)
521 distance |= i; 521 distance |= i;
522 } 522 }
523 if (distance == (UInt32)0xFFFFFFFF) 523 if (distance == (UInt32)0xFFFFFFFF)
@@ -592,7 +592,7 @@ int MY_FAST_CALL LZMA_DECODE_REAL(CLzmaDec *p, SizeT limit, const Byte *bufLimit
592 } 592 }
593 while (dicPos < limit && buf < bufLimit); 593 while (dicPos < limit && buf < bufLimit);
594 594
595 NORMALIZE; 595 NORMALIZE
596 596
597 p->buf = buf; 597 p->buf = buf;
598 p->range = range; 598 p->range = range;
@@ -613,7 +613,7 @@ int MY_FAST_CALL LZMA_DECODE_REAL(CLzmaDec *p, SizeT limit, const Byte *bufLimit
613 613
614 614
615 615
616static void MY_FAST_CALL LzmaDec_WriteRem(CLzmaDec *p, SizeT limit) 616static void Z7_FASTCALL LzmaDec_WriteRem(CLzmaDec *p, SizeT limit)
617{ 617{
618 unsigned len = (unsigned)p->remainLen; 618 unsigned len = (unsigned)p->remainLen;
619 if (len == 0 /* || len >= kMatchSpecLenStart */) 619 if (len == 0 /* || len >= kMatchSpecLenStart */)
@@ -683,7 +683,7 @@ and we support the following state of (p->checkDicSize):
683 (p->checkDicSize == p->prop.dicSize) 683 (p->checkDicSize == p->prop.dicSize)
684*/ 684*/
685 685
686static int MY_FAST_CALL LzmaDec_DecodeReal2(CLzmaDec *p, SizeT limit, const Byte *bufLimit) 686static int Z7_FASTCALL LzmaDec_DecodeReal2(CLzmaDec *p, SizeT limit, const Byte *bufLimit)
687{ 687{
688 if (p->checkDicSize == 0) 688 if (p->checkDicSize == 0)
689 { 689 {
@@ -767,54 +767,54 @@ static ELzmaDummy LzmaDec_TryDummy(const CLzmaDec *p, const Byte *buf, const Byt
767 else 767 else
768 { 768 {
769 unsigned len; 769 unsigned len;
770 UPDATE_1_CHECK; 770 UPDATE_1_CHECK
771 771
772 prob = probs + IsRep + state; 772 prob = probs + IsRep + state;
773 IF_BIT_0_CHECK(prob) 773 IF_BIT_0_CHECK(prob)
774 { 774 {
775 UPDATE_0_CHECK; 775 UPDATE_0_CHECK
776 state = 0; 776 state = 0;
777 prob = probs + LenCoder; 777 prob = probs + LenCoder;
778 res = DUMMY_MATCH; 778 res = DUMMY_MATCH;
779 } 779 }
780 else 780 else
781 { 781 {
782 UPDATE_1_CHECK; 782 UPDATE_1_CHECK
783 res = DUMMY_REP; 783 res = DUMMY_REP;
784 prob = probs + IsRepG0 + state; 784 prob = probs + IsRepG0 + state;
785 IF_BIT_0_CHECK(prob) 785 IF_BIT_0_CHECK(prob)
786 { 786 {
787 UPDATE_0_CHECK; 787 UPDATE_0_CHECK
788 prob = probs + IsRep0Long + COMBINED_PS_STATE; 788 prob = probs + IsRep0Long + COMBINED_PS_STATE;
789 IF_BIT_0_CHECK(prob) 789 IF_BIT_0_CHECK(prob)
790 { 790 {
791 UPDATE_0_CHECK; 791 UPDATE_0_CHECK
792 break; 792 break;
793 } 793 }
794 else 794 else
795 { 795 {
796 UPDATE_1_CHECK; 796 UPDATE_1_CHECK
797 } 797 }
798 } 798 }
799 else 799 else
800 { 800 {
801 UPDATE_1_CHECK; 801 UPDATE_1_CHECK
802 prob = probs + IsRepG1 + state; 802 prob = probs + IsRepG1 + state;
803 IF_BIT_0_CHECK(prob) 803 IF_BIT_0_CHECK(prob)
804 { 804 {
805 UPDATE_0_CHECK; 805 UPDATE_0_CHECK
806 } 806 }
807 else 807 else
808 { 808 {
809 UPDATE_1_CHECK; 809 UPDATE_1_CHECK
810 prob = probs + IsRepG2 + state; 810 prob = probs + IsRepG2 + state;
811 IF_BIT_0_CHECK(prob) 811 IF_BIT_0_CHECK(prob)
812 { 812 {
813 UPDATE_0_CHECK; 813 UPDATE_0_CHECK
814 } 814 }
815 else 815 else
816 { 816 {
817 UPDATE_1_CHECK; 817 UPDATE_1_CHECK
818 } 818 }
819 } 819 }
820 } 820 }
@@ -826,31 +826,31 @@ static ELzmaDummy LzmaDec_TryDummy(const CLzmaDec *p, const Byte *buf, const Byt
826 const CLzmaProb *probLen = prob + LenChoice; 826 const CLzmaProb *probLen = prob + LenChoice;
827 IF_BIT_0_CHECK(probLen) 827 IF_BIT_0_CHECK(probLen)
828 { 828 {
829 UPDATE_0_CHECK; 829 UPDATE_0_CHECK
830 probLen = prob + LenLow + GET_LEN_STATE; 830 probLen = prob + LenLow + GET_LEN_STATE;
831 offset = 0; 831 offset = 0;
832 limit = 1 << kLenNumLowBits; 832 limit = 1 << kLenNumLowBits;
833 } 833 }
834 else 834 else
835 { 835 {
836 UPDATE_1_CHECK; 836 UPDATE_1_CHECK
837 probLen = prob + LenChoice2; 837 probLen = prob + LenChoice2;
838 IF_BIT_0_CHECK(probLen) 838 IF_BIT_0_CHECK(probLen)
839 { 839 {
840 UPDATE_0_CHECK; 840 UPDATE_0_CHECK
841 probLen = prob + LenLow + GET_LEN_STATE + (1 << kLenNumLowBits); 841 probLen = prob + LenLow + GET_LEN_STATE + (1 << kLenNumLowBits);
842 offset = kLenNumLowSymbols; 842 offset = kLenNumLowSymbols;
843 limit = 1 << kLenNumLowBits; 843 limit = 1 << kLenNumLowBits;
844 } 844 }
845 else 845 else
846 { 846 {
847 UPDATE_1_CHECK; 847 UPDATE_1_CHECK
848 probLen = prob + LenHigh; 848 probLen = prob + LenHigh;
849 offset = kLenNumLowSymbols * 2; 849 offset = kLenNumLowSymbols * 2;
850 limit = 1 << kLenNumHighBits; 850 limit = 1 << kLenNumHighBits;
851 } 851 }
852 } 852 }
853 TREE_DECODE_CHECK(probLen, limit, len); 853 TREE_DECODE_CHECK(probLen, limit, len)
854 len += offset; 854 len += offset;
855 } 855 }
856 856
@@ -860,7 +860,7 @@ static ELzmaDummy LzmaDec_TryDummy(const CLzmaDec *p, const Byte *buf, const Byt
860 prob = probs + PosSlot + 860 prob = probs + PosSlot +
861 ((len < kNumLenToPosStates - 1 ? len : kNumLenToPosStates - 1) << 861 ((len < kNumLenToPosStates - 1 ? len : kNumLenToPosStates - 1) <<
862 kNumPosSlotBits); 862 kNumPosSlotBits);
863 TREE_DECODE_CHECK(prob, 1 << kNumPosSlotBits, posSlot); 863 TREE_DECODE_CHECK(prob, 1 << kNumPosSlotBits, posSlot)
864 if (posSlot >= kStartPosModelIndex) 864 if (posSlot >= kStartPosModelIndex)
865 { 865 {
866 unsigned numDirectBits = ((posSlot >> 1) - 1); 866 unsigned numDirectBits = ((posSlot >> 1) - 1);
@@ -888,7 +888,7 @@ static ELzmaDummy LzmaDec_TryDummy(const CLzmaDec *p, const Byte *buf, const Byt
888 unsigned m = 1; 888 unsigned m = 1;
889 do 889 do
890 { 890 {
891 REV_BIT_CHECK(prob, i, m); 891 REV_BIT_CHECK(prob, i, m)
892 } 892 }
893 while (--numDirectBits); 893 while (--numDirectBits);
894 } 894 }
@@ -897,7 +897,7 @@ static ELzmaDummy LzmaDec_TryDummy(const CLzmaDec *p, const Byte *buf, const Byt
897 } 897 }
898 break; 898 break;
899 } 899 }
900 NORMALIZE_CHECK; 900 NORMALIZE_CHECK
901 901
902 *bufOut = buf; 902 *bufOut = buf;
903 return res; 903 return res;
@@ -943,7 +943,7 @@ When the decoder lookahead, and the lookahead symbol is not end_marker, we have
943*/ 943*/
944 944
945 945
946#define RETURN__NOT_FINISHED__FOR_FINISH \ 946#define RETURN_NOT_FINISHED_FOR_FINISH \
947 *status = LZMA_STATUS_NOT_FINISHED; \ 947 *status = LZMA_STATUS_NOT_FINISHED; \
948 return SZ_ERROR_DATA; // for strict mode 948 return SZ_ERROR_DATA; // for strict mode
949 // return SZ_OK; // for relaxed mode 949 // return SZ_OK; // for relaxed mode
@@ -1029,7 +1029,7 @@ SRes LzmaDec_DecodeToDic(CLzmaDec *p, SizeT dicLimit, const Byte *src, SizeT *sr
1029 } 1029 }
1030 if (p->remainLen != 0) 1030 if (p->remainLen != 0)
1031 { 1031 {
1032 RETURN__NOT_FINISHED__FOR_FINISH; 1032 RETURN_NOT_FINISHED_FOR_FINISH
1033 } 1033 }
1034 checkEndMarkNow = 1; 1034 checkEndMarkNow = 1;
1035 } 1035 }
@@ -1072,7 +1072,7 @@ SRes LzmaDec_DecodeToDic(CLzmaDec *p, SizeT dicLimit, const Byte *src, SizeT *sr
1072 for (i = 0; i < (unsigned)dummyProcessed; i++) 1072 for (i = 0; i < (unsigned)dummyProcessed; i++)
1073 p->tempBuf[i] = src[i]; 1073 p->tempBuf[i] = src[i];
1074 // p->remainLen = kMatchSpecLen_Error_Data; 1074 // p->remainLen = kMatchSpecLen_Error_Data;
1075 RETURN__NOT_FINISHED__FOR_FINISH; 1075 RETURN_NOT_FINISHED_FOR_FINISH
1076 } 1076 }
1077 1077
1078 bufLimit = src; 1078 bufLimit = src;
@@ -1150,7 +1150,7 @@ SRes LzmaDec_DecodeToDic(CLzmaDec *p, SizeT dicLimit, const Byte *src, SizeT *sr
1150 (*srcLen) += (unsigned)dummyProcessed - p->tempBufSize; 1150 (*srcLen) += (unsigned)dummyProcessed - p->tempBufSize;
1151 p->tempBufSize = (unsigned)dummyProcessed; 1151 p->tempBufSize = (unsigned)dummyProcessed;
1152 // p->remainLen = kMatchSpecLen_Error_Data; 1152 // p->remainLen = kMatchSpecLen_Error_Data;
1153 RETURN__NOT_FINISHED__FOR_FINISH; 1153 RETURN_NOT_FINISHED_FOR_FINISH
1154 } 1154 }
1155 } 1155 }
1156 1156
@@ -1299,8 +1299,8 @@ static SRes LzmaDec_AllocateProbs2(CLzmaDec *p, const CLzmaProps *propNew, ISzAl
1299SRes LzmaDec_AllocateProbs(CLzmaDec *p, const Byte *props, unsigned propsSize, ISzAllocPtr alloc) 1299SRes LzmaDec_AllocateProbs(CLzmaDec *p, const Byte *props, unsigned propsSize, ISzAllocPtr alloc)
1300{ 1300{
1301 CLzmaProps propNew; 1301 CLzmaProps propNew;
1302 RINOK(LzmaProps_Decode(&propNew, props, propsSize)); 1302 RINOK(LzmaProps_Decode(&propNew, props, propsSize))
1303 RINOK(LzmaDec_AllocateProbs2(p, &propNew, alloc)); 1303 RINOK(LzmaDec_AllocateProbs2(p, &propNew, alloc))
1304 p->prop = propNew; 1304 p->prop = propNew;
1305 return SZ_OK; 1305 return SZ_OK;
1306} 1306}
@@ -1309,14 +1309,14 @@ SRes LzmaDec_Allocate(CLzmaDec *p, const Byte *props, unsigned propsSize, ISzAll
1309{ 1309{
1310 CLzmaProps propNew; 1310 CLzmaProps propNew;
1311 SizeT dicBufSize; 1311 SizeT dicBufSize;
1312 RINOK(LzmaProps_Decode(&propNew, props, propsSize)); 1312 RINOK(LzmaProps_Decode(&propNew, props, propsSize))
1313 RINOK(LzmaDec_AllocateProbs2(p, &propNew, alloc)); 1313 RINOK(LzmaDec_AllocateProbs2(p, &propNew, alloc))
1314 1314
1315 { 1315 {
1316 UInt32 dictSize = propNew.dicSize; 1316 UInt32 dictSize = propNew.dicSize;
1317 SizeT mask = ((UInt32)1 << 12) - 1; 1317 SizeT mask = ((UInt32)1 << 12) - 1;
1318 if (dictSize >= ((UInt32)1 << 30)) mask = ((UInt32)1 << 22) - 1; 1318 if (dictSize >= ((UInt32)1 << 30)) mask = ((UInt32)1 << 22) - 1;
1319 else if (dictSize >= ((UInt32)1 << 22)) mask = ((UInt32)1 << 20) - 1;; 1319 else if (dictSize >= ((UInt32)1 << 22)) mask = ((UInt32)1 << 20) - 1;
1320 dicBufSize = ((SizeT)dictSize + mask) & ~mask; 1320 dicBufSize = ((SizeT)dictSize + mask) & ~mask;
1321 if (dicBufSize < dictSize) 1321 if (dicBufSize < dictSize)
1322 dicBufSize = dictSize; 1322 dicBufSize = dictSize;
@@ -1348,8 +1348,8 @@ SRes LzmaDecode(Byte *dest, SizeT *destLen, const Byte *src, SizeT *srcLen,
1348 *status = LZMA_STATUS_NOT_SPECIFIED; 1348 *status = LZMA_STATUS_NOT_SPECIFIED;
1349 if (inSize < RC_INIT_SIZE) 1349 if (inSize < RC_INIT_SIZE)
1350 return SZ_ERROR_INPUT_EOF; 1350 return SZ_ERROR_INPUT_EOF;
1351 LzmaDec_Construct(&p); 1351 LzmaDec_CONSTRUCT(&p)
1352 RINOK(LzmaDec_AllocateProbs(&p, propData, propSize, alloc)); 1352 RINOK(LzmaDec_AllocateProbs(&p, propData, propSize, alloc))
1353 p.dic = dest; 1353 p.dic = dest;
1354 p.dicBufSize = outSize; 1354 p.dicBufSize = outSize;
1355 LzmaDec_Init(&p); 1355 LzmaDec_Init(&p);