@@ -94,11 +94,19 @@ struct FSEv07_decode_t {
9494 symbol : core:: ffi:: c_uchar ,
9595 nbBits : core:: ffi:: c_uchar ,
9696}
97- type BITv07_DStream_status = core:: ffi:: c_uint ;
98- const BITv07_DStream_overflow : BITv07_DStream_status = 3 ;
99- const BITv07_DStream_completed : BITv07_DStream_status = 2 ;
100- const BITv07_DStream_endOfBuffer : BITv07_DStream_status = 1 ;
101- const BITv07_DStream_unfinished : BITv07_DStream_status = 0 ;
97+
98+ #[ derive( Debug , Clone , Copy , PartialEq , Eq , PartialOrd , Ord ) ]
99+ enum StreamStatus {
100+ /// Fully refilled.
101+ Unfinished = 0 ,
102+ /// Still some bits left in the bitstream.
103+ EndOfBuffer = 1 ,
104+ /// Bitstream entirely consumed, bit-exact.
105+ Completed = 2 ,
106+ /// User requested more bits than present in bitstream.
107+ Overflow = 3 ,
108+ }
109+
102110#[ derive( Copy , Clone ) ]
103111#[ repr( C ) ]
104112struct FSEv07_DTableHeader {
@@ -295,36 +303,36 @@ impl<'a> BITv07_DStream_t<'a> {
295303 value
296304 }
297305 #[ inline]
298- fn reload ( & mut self ) -> BITv07_DStream_status {
306+ fn reload ( & mut self ) -> StreamStatus {
299307 if self . bitsConsumed > usize:: BITS {
300- return BITv07_DStream_overflow ;
308+ return StreamStatus :: Overflow ;
301309 }
302- if self . ptr >= unsafe { ( self . start ) . add ( :: core :: mem :: size_of :: < usize > ( ) ) } {
303- self . ptr = unsafe { ( self . ptr ) . offset ( - ( ( self . bitsConsumed >> 3 ) as isize ) ) } ;
310+ if self . ptr >= unsafe { ( self . start ) . add ( size_of :: < usize > ( ) ) } {
311+ self . ptr = unsafe { ( self . ptr ) . sub ( self . bitsConsumed as usize >> 3 ) } ;
304312 self . bitsConsumed &= 7 ;
305313 self . bitContainer = unsafe { MEM_readLEST ( self . ptr as * const core:: ffi:: c_void ) } ;
306- return BITv07_DStream_unfinished ;
314+ return StreamStatus :: Unfinished ;
307315 }
308316 if self . ptr == self . start {
309317 if self . bitsConsumed < usize:: BITS {
310- return BITv07_DStream_endOfBuffer ;
318+ return StreamStatus :: EndOfBuffer ;
311319 }
312- return BITv07_DStream_completed ;
320+ return StreamStatus :: Completed ;
313321 }
314322 let mut nbBytes = self . bitsConsumed >> 3 ;
315- let mut result = BITv07_DStream_unfinished ;
316- if unsafe { ( self . ptr ) . offset ( - ( nbBytes as isize ) ) } < self . start {
323+ let mut result = StreamStatus :: Unfinished ;
324+ if unsafe { ( self . ptr ) . sub ( nbBytes as usize ) } < self . start {
317325 nbBytes = unsafe { ( self . ptr ) . offset_from ( self . start ) } as u32 ;
318- result = BITv07_DStream_endOfBuffer ;
326+ result = StreamStatus :: EndOfBuffer ;
319327 }
320- self . ptr = unsafe { ( self . ptr ) . offset ( - ( nbBytes as isize ) ) } ;
328+ self . ptr = unsafe { ( self . ptr ) . sub ( nbBytes as usize ) } ;
321329 self . bitsConsumed = ( self . bitsConsumed ) . wrapping_sub ( nbBytes * 8 ) ;
322330 self . bitContainer = unsafe { MEM_readLEST ( self . ptr as * const core:: ffi:: c_void ) } ;
323331 result
324332 }
325333 #[ inline]
326- fn is_empty ( & self ) -> core :: ffi :: c_uint {
327- ( self . ptr == self . start && self . bitsConsumed == usize:: BITS ) as core :: ffi :: c_uint
334+ fn is_empty ( & self ) -> bool {
335+ self . ptr == self . start && self . bitsConsumed == usize:: BITS
328336 }
329337}
330338
@@ -675,7 +683,7 @@ unsafe fn FSEv07_decompress_usingDTable_generic<const N: usize>(
675683 let mut bitD = BITv07_DStream_t :: new ( cSrc) ?;
676684 let mut state1 = FSEv07_initDState ( & mut bitD, dt) ;
677685 let mut state2 = FSEv07_initDState ( & mut bitD, dt) ;
678- while bitD. reload ( ) == BITv07_DStream_unfinished && op < olimit {
686+ while bitD. reload ( ) == StreamStatus :: Unfinished && op < olimit {
679687 * op = if fast != 0 {
680688 FSEv07_decodeSymbolFast ( & mut state1, & mut bitD)
681689 } else {
@@ -690,7 +698,7 @@ unsafe fn FSEv07_decompress_usingDTable_generic<const N: usize>(
690698 FSEv07_decodeSymbol ( & mut state2, & mut bitD)
691699 } ;
692700 if ( FSEv07_MAX_TABLELOG * 4 + 7 ) as u32 > usize:: BITS
693- && bitD. reload ( ) > BITv07_DStream_unfinished
701+ && bitD. reload ( ) > StreamStatus :: Unfinished
694702 {
695703 op = op. add ( 2 ) ;
696704 break ;
@@ -721,7 +729,7 @@ unsafe fn FSEv07_decompress_usingDTable_generic<const N: usize>(
721729 } else {
722730 FSEv07_decodeSymbol ( & mut state1, & mut bitD)
723731 } ;
724- if bitD. reload ( ) == BITv07_DStream_overflow {
732+ if bitD. reload ( ) == StreamStatus :: Overflow {
725733 let fresh8 = op;
726734 op = op. add ( 1 ) ;
727735 * fresh8 = if fast != 0 {
@@ -741,7 +749,7 @@ unsafe fn FSEv07_decompress_usingDTable_generic<const N: usize>(
741749 } else {
742750 FSEv07_decodeSymbol ( & mut state2, & mut bitD)
743751 } ;
744- if bitD. reload ( ) != BITv07_DStream_overflow {
752+ if bitD. reload ( ) != StreamStatus :: Overflow {
745753 continue ;
746754 }
747755 let fresh10 = op;
@@ -874,7 +882,7 @@ unsafe fn HUFv07_decodeStreamX2(
874882 dtLog : u32 ,
875883) -> usize {
876884 let pStart = p;
877- while bitDPtr. reload ( ) == BITv07_DStream_unfinished && p <= pEnd. sub ( 4 ) {
885+ while bitDPtr. reload ( ) == StreamStatus :: Unfinished && p <= pEnd. sub ( 4 ) {
878886 if MEM_64bits ( ) {
879887 let fresh12 = p;
880888 p = p. add ( 1 ) ;
@@ -894,7 +902,7 @@ unsafe fn HUFv07_decodeStreamX2(
894902 p = p. add ( 1 ) ;
895903 * fresh15 = HUFv07_decodeSymbolX2 ( bitDPtr, dt, dtLog) ;
896904 }
897- while bitDPtr. reload ( ) == BITv07_DStream_unfinished && p < pEnd {
905+ while bitDPtr. reload ( ) == StreamStatus :: Unfinished && p < pEnd {
898906 let fresh16 = p;
899907 p = p. add ( 1 ) ;
900908 * fresh16 = HUFv07_decodeSymbolX2 ( bitDPtr, dt, dtLog) ;
@@ -920,7 +928,7 @@ unsafe fn HUFv07_decompress1X2_usingDTable_internal(
920928 let dtLog = dtd. tableLog as u32 ;
921929 let mut bitD = BITv07_DStream_t :: new ( cSrc) ?;
922930 HUFv07_decodeStreamX2 ( op, & mut bitD, oend, dt, dtLog) ;
923- if bitD. is_empty ( ) == 0 {
931+ if ! bitD. is_empty ( ) {
924932 return Err ( Error :: corruption_detected) ;
925933 }
926934 Ok ( ( ) )
@@ -975,7 +983,6 @@ unsafe fn HUFv07_decompress4X2_usingDTable_internal(
975983 let mut op2 = opStart2;
976984 let mut op3 = opStart3;
977985 let mut op4 = opStart4;
978- let mut endSignal: u32 = 0 ;
979986 let dtd = HUFv07_getDTableDesc ( DTable ) ;
980987 let dtLog = dtd. tableLog as u32 ;
981988 if length4 > cSrcSize {
@@ -985,11 +992,12 @@ unsafe fn HUFv07_decompress4X2_usingDTable_internal(
985992 let mut bitD2 = BITv07_DStream_t :: new ( core:: slice:: from_raw_parts ( istart2, length2) ) ?;
986993 let mut bitD3 = BITv07_DStream_t :: new ( core:: slice:: from_raw_parts ( istart3, length3) ) ?;
987994 let mut bitD4 = BITv07_DStream_t :: new ( core:: slice:: from_raw_parts ( istart4, length4) ) ?;
988- endSignal = bitD1. reload ( ) as core:: ffi:: c_uint
989- | bitD2. reload ( ) as core:: ffi:: c_uint
990- | bitD3. reload ( ) as core:: ffi:: c_uint
991- | bitD4. reload ( ) as core:: ffi:: c_uint ;
992- while endSignal == BITv07_DStream_unfinished as core:: ffi:: c_int as u32 && op4 < oend. sub ( 7 ) {
995+ let mut endSignal = true ;
996+ endSignal &= bitD1. reload ( ) == StreamStatus :: Unfinished ;
997+ endSignal &= bitD2. reload ( ) == StreamStatus :: Unfinished ;
998+ endSignal &= bitD3. reload ( ) == StreamStatus :: Unfinished ;
999+ endSignal &= bitD4. reload ( ) == StreamStatus :: Unfinished ;
1000+ while endSignal && op4 < oend. sub ( 7 ) {
9931001 if MEM_64bits ( ) {
9941002 let fresh18 = op1;
9951003 op1 = op1. add ( 1 ) ;
@@ -1062,10 +1070,10 @@ unsafe fn HUFv07_decompress4X2_usingDTable_internal(
10621070 let fresh33 = op4;
10631071 op4 = op4. add ( 1 ) ;
10641072 * fresh33 = HUFv07_decodeSymbolX2 ( & mut bitD4, dt, dtLog) ;
1065- endSignal = bitD1. reload ( ) as core :: ffi :: c_uint
1066- | bitD2. reload ( ) as core :: ffi :: c_uint
1067- | bitD3. reload ( ) as core :: ffi :: c_uint
1068- | bitD4. reload ( ) as core :: ffi :: c_uint ;
1073+ endSignal & = bitD1. reload ( ) == StreamStatus :: Unfinished ;
1074+ endSignal &= bitD2. reload ( ) == StreamStatus :: Unfinished ;
1075+ endSignal &= bitD3. reload ( ) == StreamStatus :: Unfinished ;
1076+ endSignal &= bitD4. reload ( ) == StreamStatus :: Unfinished ;
10691077 }
10701078 if op1 > opStart2 {
10711079 return Err ( Error :: corruption_detected) ;
@@ -1080,8 +1088,7 @@ unsafe fn HUFv07_decompress4X2_usingDTable_internal(
10801088 HUFv07_decodeStreamX2 ( op2, & mut bitD2, opStart3, dt, dtLog) ;
10811089 HUFv07_decodeStreamX2 ( op3, & mut bitD3, opStart4, dt, dtLog) ;
10821090 HUFv07_decodeStreamX2 ( op4, & mut bitD4, oend, dt, dtLog) ;
1083- endSignal = bitD1. is_empty ( ) & bitD2. is_empty ( ) & bitD3. is_empty ( ) & bitD4. is_empty ( ) ;
1084- if endSignal == 0 {
1091+ if !( bitD1. is_empty ( ) && bitD2. is_empty ( ) && bitD3. is_empty ( ) && bitD4. is_empty ( ) ) {
10851092 return Err ( Error :: corruption_detected) ;
10861093 }
10871094 Ok ( dstSize)
@@ -1372,7 +1379,7 @@ unsafe fn HUFv07_decodeStreamX4(
13721379 dtLog : u32 ,
13731380) -> usize {
13741381 let pStart = p;
1375- while bitDPtr. reload ( ) == BITv07_DStream_unfinished && p < pEnd. sub ( 7 ) {
1382+ while bitDPtr. reload ( ) == StreamStatus :: Unfinished && p < pEnd. sub ( 7 ) {
13761383 if MEM_64bits ( ) {
13771384 p = p. offset (
13781385 HUFv07_decodeSymbolX4 ( p as * mut core:: ffi:: c_void , bitDPtr, dt, dtLog) as isize ,
@@ -1392,7 +1399,7 @@ unsafe fn HUFv07_decodeStreamX4(
13921399 HUFv07_decodeSymbolX4 ( p as * mut core:: ffi:: c_void , bitDPtr, dt, dtLog) as isize ,
13931400 ) ;
13941401 }
1395- while bitDPtr. reload ( ) == BITv07_DStream_unfinished && p <= pEnd. sub ( 2 ) {
1402+ while bitDPtr. reload ( ) == StreamStatus :: Unfinished && p <= pEnd. sub ( 2 ) {
13961403 p = p. offset (
13971404 HUFv07_decodeSymbolX4 ( p as * mut core:: ffi:: c_void , bitDPtr, dt, dtLog) as isize ,
13981405 ) ;
@@ -1422,7 +1429,7 @@ unsafe fn HUFv07_decompress1X4_usingDTable_internal(
14221429 let dt = dtPtr as * const HUFv07_DEltX4 ;
14231430 let dtd = HUFv07_getDTableDesc ( DTable ) ;
14241431 HUFv07_decodeStreamX4 ( ostart, & mut bitD, oend, dt, dtd. tableLog as u32 ) ;
1425- if bitD. is_empty ( ) == 0 {
1432+ if ! bitD. is_empty ( ) {
14261433 return Err ( Error :: corruption_detected) ;
14271434 }
14281435 Ok ( ( ) )
@@ -1474,7 +1481,6 @@ unsafe fn HUFv07_decompress4X4_usingDTable_internal(
14741481 let mut op2 = opStart2;
14751482 let mut op3 = opStart3;
14761483 let mut op4 = opStart4;
1477- let mut endSignal: u32 = 0 ;
14781484 let dtd = HUFv07_getDTableDesc ( DTable ) ;
14791485 let dtLog = dtd. tableLog as u32 ;
14801486 if length4 > cSrc. len ( ) {
@@ -1484,11 +1490,12 @@ unsafe fn HUFv07_decompress4X4_usingDTable_internal(
14841490 let mut bitD2 = BITv07_DStream_t :: new ( core:: slice:: from_raw_parts ( istart2, length2) ) ?;
14851491 let mut bitD3 = BITv07_DStream_t :: new ( core:: slice:: from_raw_parts ( istart3, length3) ) ?;
14861492 let mut bitD4 = BITv07_DStream_t :: new ( core:: slice:: from_raw_parts ( istart4, length4) ) ?;
1487- endSignal = bitD1. reload ( ) as core:: ffi:: c_uint
1488- | bitD2. reload ( ) as core:: ffi:: c_uint
1489- | bitD3. reload ( ) as core:: ffi:: c_uint
1490- | bitD4. reload ( ) as core:: ffi:: c_uint ;
1491- while endSignal == BITv07_DStream_unfinished as core:: ffi:: c_int as u32 && op4 < oend. sub ( 7 ) {
1493+ let mut endSignal = true ;
1494+ endSignal &= bitD1. reload ( ) == StreamStatus :: Unfinished ;
1495+ endSignal &= bitD2. reload ( ) == StreamStatus :: Unfinished ;
1496+ endSignal &= bitD3. reload ( ) == StreamStatus :: Unfinished ;
1497+ endSignal &= bitD4. reload ( ) == StreamStatus :: Unfinished ;
1498+ while endSignal && op4 < oend. sub ( 7 ) {
14921499 if MEM_64bits ( ) {
14931500 op1 = op1. offset ( HUFv07_decodeSymbolX4 (
14941501 op1 as * mut core:: ffi:: c_void ,
@@ -1597,10 +1604,10 @@ unsafe fn HUFv07_decompress4X4_usingDTable_internal(
15971604 op4 = op4. offset (
15981605 HUFv07_decodeSymbolX4 ( op4 as * mut core:: ffi:: c_void , & mut bitD4, dt, dtLog) as isize ,
15991606 ) ;
1600- endSignal = bitD1. reload ( ) as core :: ffi :: c_uint
1601- | bitD2. reload ( ) as core :: ffi :: c_uint
1602- | bitD3. reload ( ) as core :: ffi :: c_uint
1603- | bitD4. reload ( ) as core :: ffi :: c_uint ;
1607+ endSignal & = bitD1. reload ( ) == StreamStatus :: Unfinished ;
1608+ endSignal &= bitD2. reload ( ) == StreamStatus :: Unfinished ;
1609+ endSignal &= bitD3. reload ( ) == StreamStatus :: Unfinished ;
1610+ endSignal &= bitD4. reload ( ) == StreamStatus :: Unfinished ;
16041611 }
16051612 if op1 > opStart2 {
16061613 return Err ( Error :: corruption_detected) ;
@@ -1615,8 +1622,7 @@ unsafe fn HUFv07_decompress4X4_usingDTable_internal(
16151622 HUFv07_decodeStreamX4 ( op2, & mut bitD2, opStart3, dt, dtLog) ;
16161623 HUFv07_decodeStreamX4 ( op3, & mut bitD3, opStart4, dt, dtLog) ;
16171624 HUFv07_decodeStreamX4 ( op4, & mut bitD4, oend, dt, dtLog) ;
1618- let endCheck = bitD1. is_empty ( ) & bitD2. is_empty ( ) & bitD3. is_empty ( ) & bitD4. is_empty ( ) ;
1619- if endCheck == 0 {
1625+ if !( bitD1. is_empty ( ) && bitD2. is_empty ( ) && bitD3. is_empty ( ) && bitD4. is_empty ( ) ) {
16201626 return Err ( Error :: corruption_detected) ;
16211627 }
16221628 Ok ( dstSize)
@@ -2821,7 +2827,7 @@ unsafe fn ZSTDv07_decompressSequences(
28212827 prevOffset,
28222828 } ;
28232829
2824- while seqState. DStream . reload ( ) <= BITv07_DStream_completed && nbSeq != 0 {
2830+ while seqState. DStream . reload ( ) <= StreamStatus :: Completed && nbSeq != 0 {
28252831 nbSeq -= 1 ;
28262832 let sequence = ZSTDv07_decodeSequence ( & mut seqState) ;
28272833 let oneSeqSize = ZSTDv07_execSequence (
0 commit comments