/src/mozilla-central/modules/brotli/dec/bit_reader.c
Line | Count | Source (jump to first uncovered line) |
1 | | /* Copyright 2013 Google Inc. All Rights Reserved. |
2 | | |
3 | | Distributed under MIT license. |
4 | | See file LICENSE for detail or copy at https://opensource.org/licenses/MIT |
5 | | */ |
6 | | |
7 | | /* Bit reading helpers */ |
8 | | |
9 | | #include "./bit_reader.h" |
10 | | |
11 | | #include "../common/platform.h" |
12 | | #include <brotli/types.h> |
13 | | |
14 | | #if defined(__cplusplus) || defined(c_plusplus) |
15 | | extern "C" { |
16 | | #endif |
17 | | |
18 | 0 | void BrotliInitBitReader(BrotliBitReader* const br) { |
19 | 0 | br->val_ = 0; |
20 | 0 | br->bit_pos_ = sizeof(br->val_) << 3; |
21 | 0 | } |
22 | | |
23 | 0 | BROTLI_BOOL BrotliWarmupBitReader(BrotliBitReader* const br) { |
24 | 0 | size_t aligned_read_mask = (sizeof(br->val_) >> 1) - 1; |
25 | 0 | /* Fixing alignment after unaligned BrotliFillWindow would result accumulator |
26 | 0 | overflow. If unalignment is caused by BrotliSafeReadBits, then there is |
27 | 0 | enough space in accumulator to fix alignment. */ |
28 | 0 | if (!BROTLI_ALIGNED_READ) { |
29 | 0 | aligned_read_mask = 0; |
30 | 0 | } |
31 | 0 | if (BrotliGetAvailableBits(br) == 0) { |
32 | 0 | if (!BrotliPullByte(br)) { |
33 | 0 | return BROTLI_FALSE; |
34 | 0 | } |
35 | 0 | } |
36 | 0 |
|
37 | 0 | while ((((size_t)br->next_in) & aligned_read_mask) != 0) { |
38 | 0 | if (!BrotliPullByte(br)) { |
39 | 0 | /* If we consumed all the input, we don't care about the alignment. */ |
40 | 0 | return BROTLI_TRUE; |
41 | 0 | } |
42 | 0 | } |
43 | 0 | return BROTLI_TRUE; |
44 | 0 | } |
45 | | |
46 | | #if defined(__cplusplus) || defined(c_plusplus) |
47 | | } /* extern "C" */ |
48 | | #endif |