Unified · Split
| @@ -10,7 +10,7 @@ const N64_SIZE: usize = size_of::<u64>(); · 9 unmodified lines | ||
| 10 | 10 | const FAN_LEN: usize = 256; |
| 11 | 11 | const V1_HEADER_SIZE: usize = FAN_LEN * N32_SIZE; |
| 12 | 12 | const V2_HEADER_SIZE: usize = N32_SIZE * 2 + FAN_LEN * N32_SIZE; |
| 13 | −const MAX_N31: u32 = u32::max_value() >> 1; | |
| 13 | +const N32_HIGH_BIT: u32 = 1 << 31; | |
| 14 | 14 | |
| 15 | 15 | quick_error! { |
| 16 | 16 | #[derive(Debug)] |
| @@ -115,8 +115,8 @@ impl File { · 98 unmodified lines | ||
| 115 | 115 | oid: object::id_from_20_bytes(oid), |
| 116 | 116 | offset: { |
| 117 | 117 | let ofs32 = BigEndian::read_u32(ofs32); |
| 118 | − if ofs32 > MAX_N31 { | |
| 119 | − let from = pack64_offset + (ofs32 ^ 0b10000000_00000000_00000000_00000000) as usize * N64_SIZE; | |
| 118 | + if (ofs32 & N32_HIGH_BIT) == N32_HIGH_BIT { | |
| 119 | + let from = pack64_offset + (ofs32 ^ N32_HIGH_BIT) as usize * N64_SIZE; | |
| 120 | 120 | BigEndian::read_u64(&self.data[from..from + N64_SIZE]) |
| 121 | 121 | } else { |
| 122 | 122 | ofs32 as u64 |