~ [ source navigation ] ~ [ diff markup ] ~ [ identifier search ] ~

TOMOYO Linux Cross Reference
Linux/lib/zlib_inflate/inftrees.c

Version: ~ [ linux-6.11.5 ] ~ [ linux-6.10.14 ] ~ [ linux-6.9.12 ] ~ [ linux-6.8.12 ] ~ [ linux-6.7.12 ] ~ [ linux-6.6.58 ] ~ [ linux-6.5.13 ] ~ [ linux-6.4.16 ] ~ [ linux-6.3.13 ] ~ [ linux-6.2.16 ] ~ [ linux-6.1.114 ] ~ [ linux-6.0.19 ] ~ [ linux-5.19.17 ] ~ [ linux-5.18.19 ] ~ [ linux-5.17.15 ] ~ [ linux-5.16.20 ] ~ [ linux-5.15.169 ] ~ [ linux-5.14.21 ] ~ [ linux-5.13.19 ] ~ [ linux-5.12.19 ] ~ [ linux-5.11.22 ] ~ [ linux-5.10.228 ] ~ [ linux-5.9.16 ] ~ [ linux-5.8.18 ] ~ [ linux-5.7.19 ] ~ [ linux-5.6.19 ] ~ [ linux-5.5.19 ] ~ [ linux-5.4.284 ] ~ [ linux-5.3.18 ] ~ [ linux-5.2.21 ] ~ [ linux-5.1.21 ] ~ [ linux-5.0.21 ] ~ [ linux-4.20.17 ] ~ [ linux-4.19.322 ] ~ [ linux-4.18.20 ] ~ [ linux-4.17.19 ] ~ [ linux-4.16.18 ] ~ [ linux-4.15.18 ] ~ [ linux-4.14.336 ] ~ [ linux-4.13.16 ] ~ [ linux-4.12.14 ] ~ [ linux-4.11.12 ] ~ [ linux-4.10.17 ] ~ [ linux-4.9.337 ] ~ [ linux-4.4.302 ] ~ [ linux-3.10.108 ] ~ [ linux-2.6.32.71 ] ~ [ linux-2.6.0 ] ~ [ linux-2.4.37.11 ] ~ [ unix-v6-master ] ~ [ ccs-tools-1.8.9 ] ~ [ policy-sample ] ~
Architecture: ~ [ i386 ] ~ [ alpha ] ~ [ m68k ] ~ [ mips ] ~ [ ppc ] ~ [ sparc ] ~ [ sparc64 ] ~

Diff markup

Differences between /lib/zlib_inflate/inftrees.c (Version linux-6.11.5) and /lib/zlib_inflate/inftrees.c (Version linux-5.16.20)


  1 /* inftrees.c -- generate Huffman trees for ef      1 /* inftrees.c -- generate Huffman trees for efficient decoding
  2  * Copyright (C) 1995-2005 Mark Adler               2  * Copyright (C) 1995-2005 Mark Adler
  3  * For conditions of distribution and use, see      3  * For conditions of distribution and use, see copyright notice in zlib.h
  4  */                                                 4  */
  5                                                     5 
  6 #include <linux/zutil.h>                            6 #include <linux/zutil.h>
  7 #include "inftrees.h"                               7 #include "inftrees.h"
  8                                                     8 
  9 #define MAXBITS 15                                  9 #define MAXBITS 15
 10                                                    10 
 11 /*                                                 11 /*
 12    Build a set of tables to decode the provide     12    Build a set of tables to decode the provided canonical Huffman code.
 13    The code lengths are lens[0..codes-1].  The     13    The code lengths are lens[0..codes-1].  The result starts at *table,
 14    whose indices are 0..2^bits-1.  work is a w     14    whose indices are 0..2^bits-1.  work is a writable array of at least
 15    lens shorts, which is used as a work area.      15    lens shorts, which is used as a work area.  type is the type of code
 16    to be generated, CODES, LENS, or DISTS.  On     16    to be generated, CODES, LENS, or DISTS.  On return, zero is success,
 17    -1 is an invalid code, and +1 means that EN     17    -1 is an invalid code, and +1 means that ENOUGH isn't enough.  table
 18    on return points to the next available entr     18    on return points to the next available entry's address.  bits is the
 19    requested root table index bits, and on ret     19    requested root table index bits, and on return it is the actual root
 20    table index bits.  It will differ if the re     20    table index bits.  It will differ if the request is greater than the
 21    longest code or if it is less than the shor     21    longest code or if it is less than the shortest code.
 22  */                                                22  */
 23 int zlib_inflate_table(codetype type, unsigned     23 int zlib_inflate_table(codetype type, unsigned short *lens, unsigned codes,
 24                         code **table, unsigned     24                         code **table, unsigned *bits, unsigned short *work)
 25 {                                                  25 {
 26     unsigned len;               /* a code's le     26     unsigned len;               /* a code's length in bits */
 27     unsigned sym;               /* index of co     27     unsigned sym;               /* index of code symbols */
 28     unsigned min, max;          /* minimum and     28     unsigned min, max;          /* minimum and maximum code lengths */
 29     unsigned root;              /* number of i     29     unsigned root;              /* number of index bits for root table */
 30     unsigned curr;              /* number of i     30     unsigned curr;              /* number of index bits for current table */
 31     unsigned drop;              /* code bits t     31     unsigned drop;              /* code bits to drop for sub-table */
 32     int left;                   /* number of p     32     int left;                   /* number of prefix codes available */
 33     unsigned used;              /* code entrie     33     unsigned used;              /* code entries in table used */
 34     unsigned huff;              /* Huffman cod     34     unsigned huff;              /* Huffman code */
 35     unsigned incr;              /* for increme     35     unsigned incr;              /* for incrementing code, index */
 36     unsigned fill;              /* index for r     36     unsigned fill;              /* index for replicating entries */
 37     unsigned low;               /* low bits fo     37     unsigned low;               /* low bits for current root entry */
 38     unsigned mask;              /* mask for lo     38     unsigned mask;              /* mask for low root bits */
 39     code this;                  /* table entry     39     code this;                  /* table entry for duplication */
 40     code *next;             /* next available      40     code *next;             /* next available space in table */
 41     const unsigned short *base;     /* base va     41     const unsigned short *base;     /* base value table to use */
 42     const unsigned short *extra;    /* extra b     42     const unsigned short *extra;    /* extra bits table to use */
 43     int end;                    /* use base an     43     int end;                    /* use base and extra for symbol > end */
 44     unsigned short count[MAXBITS+1];    /* num     44     unsigned short count[MAXBITS+1];    /* number of codes of each length */
 45     unsigned short offs[MAXBITS+1];     /* off     45     unsigned short offs[MAXBITS+1];     /* offsets in table for each length */
 46     static const unsigned short lbase[31] = {      46     static const unsigned short lbase[31] = { /* Length codes 257..285 base */
 47         3, 4, 5, 6, 7, 8, 9, 10, 11, 13, 15, 1     47         3, 4, 5, 6, 7, 8, 9, 10, 11, 13, 15, 17, 19, 23, 27, 31,
 48         35, 43, 51, 59, 67, 83, 99, 115, 131,      48         35, 43, 51, 59, 67, 83, 99, 115, 131, 163, 195, 227, 258, 0, 0};
 49     static const unsigned short lext[31] = { /     49     static const unsigned short lext[31] = { /* Length codes 257..285 extra */
 50         16, 16, 16, 16, 16, 16, 16, 16, 17, 17     50         16, 16, 16, 16, 16, 16, 16, 16, 17, 17, 17, 17, 18, 18, 18, 18,
 51         19, 19, 19, 19, 20, 20, 20, 20, 21, 21     51         19, 19, 19, 19, 20, 20, 20, 20, 21, 21, 21, 21, 16, 201, 196};
 52     static const unsigned short dbase[32] = {      52     static const unsigned short dbase[32] = { /* Distance codes 0..29 base */
 53         1, 2, 3, 4, 5, 7, 9, 13, 17, 25, 33, 4     53         1, 2, 3, 4, 5, 7, 9, 13, 17, 25, 33, 49, 65, 97, 129, 193,
 54         257, 385, 513, 769, 1025, 1537, 2049,      54         257, 385, 513, 769, 1025, 1537, 2049, 3073, 4097, 6145,
 55         8193, 12289, 16385, 24577, 0, 0};          55         8193, 12289, 16385, 24577, 0, 0};
 56     static const unsigned short dext[32] = { /     56     static const unsigned short dext[32] = { /* Distance codes 0..29 extra */
 57         16, 16, 16, 16, 17, 17, 18, 18, 19, 19     57         16, 16, 16, 16, 17, 17, 18, 18, 19, 19, 20, 20, 21, 21, 22, 22,
 58         23, 23, 24, 24, 25, 25, 26, 26, 27, 27     58         23, 23, 24, 24, 25, 25, 26, 26, 27, 27,
 59         28, 28, 29, 29, 64, 64};                   59         28, 28, 29, 29, 64, 64};
 60                                                    60 
 61     /*                                             61     /*
 62        Process a set of code lengths to create     62        Process a set of code lengths to create a canonical Huffman code.  The
 63        code lengths are lens[0..codes-1].  Eac     63        code lengths are lens[0..codes-1].  Each length corresponds to the
 64        symbols 0..codes-1.  The Huffman code i     64        symbols 0..codes-1.  The Huffman code is generated by first sorting the
 65        symbols by length from short to long, a     65        symbols by length from short to long, and retaining the symbol order
 66        for codes with equal lengths.  Then the     66        for codes with equal lengths.  Then the code starts with all zero bits
 67        for the first code of the shortest leng     67        for the first code of the shortest length, and the codes are integer
 68        increments for the same length, and zer     68        increments for the same length, and zeros are appended as the length
 69        increases.  For the deflate format, the     69        increases.  For the deflate format, these bits are stored backwards
 70        from their more natural integer increme     70        from their more natural integer increment ordering, and so when the
 71        decoding tables are built in the large      71        decoding tables are built in the large loop below, the integer codes
 72        are incremented backwards.                  72        are incremented backwards.
 73                                                    73 
 74        This routine assumes, but does not chec     74        This routine assumes, but does not check, that all of the entries in
 75        lens[] are in the range 0..MAXBITS.  Th     75        lens[] are in the range 0..MAXBITS.  The caller must assure this.
 76        1..MAXBITS is interpreted as that code      76        1..MAXBITS is interpreted as that code length.  zero means that that
 77        symbol does not occur in this code.         77        symbol does not occur in this code.
 78                                                    78 
 79        The codes are sorted by computing a cou     79        The codes are sorted by computing a count of codes for each length,
 80        creating from that a table of starting      80        creating from that a table of starting indices for each length in the
 81        sorted table, and then entering the sym     81        sorted table, and then entering the symbols in order in the sorted
 82        table.  The sorted table is work[], wit     82        table.  The sorted table is work[], with that space being provided by
 83        the caller.                                 83        the caller.
 84                                                    84 
 85        The length counts are used for other pu     85        The length counts are used for other purposes as well, i.e. finding
 86        the minimum and maximum length codes, d     86        the minimum and maximum length codes, determining if there are any
 87        codes at all, checking for a valid set      87        codes at all, checking for a valid set of lengths, and looking ahead
 88        at length counts to determine sub-table     88        at length counts to determine sub-table sizes when building the
 89        decoding tables.                            89        decoding tables.
 90      */                                            90      */
 91                                                    91 
 92     /* accumulate lengths for codes (assumes l     92     /* accumulate lengths for codes (assumes lens[] all in 0..MAXBITS) */
 93     for (len = 0; len <= MAXBITS; len++)           93     for (len = 0; len <= MAXBITS; len++)
 94         count[len] = 0;                            94         count[len] = 0;
 95     for (sym = 0; sym < codes; sym++)              95     for (sym = 0; sym < codes; sym++)
 96         count[lens[sym]]++;                        96         count[lens[sym]]++;
 97                                                    97 
 98     /* bound code lengths, force root to be wi     98     /* bound code lengths, force root to be within code lengths */
 99     root = *bits;                                  99     root = *bits;
100     for (max = MAXBITS; max >= 1; max--)          100     for (max = MAXBITS; max >= 1; max--)
101         if (count[max] != 0) break;               101         if (count[max] != 0) break;
102     if (root > max) root = max;                   102     if (root > max) root = max;
103     if (max == 0) {                     /* no     103     if (max == 0) {                     /* no symbols to code at all */
104         this.op = (unsigned char)64;    /* inv    104         this.op = (unsigned char)64;    /* invalid code marker */
105         this.bits = (unsigned char)1;             105         this.bits = (unsigned char)1;
106         this.val = (unsigned short)0;             106         this.val = (unsigned short)0;
107         *(*table)++ = this;             /* mak    107         *(*table)++ = this;             /* make a table to force an error */
108         *(*table)++ = this;                       108         *(*table)++ = this;
109         *bits = 1;                                109         *bits = 1;
110         return 0;     /* no symbols, but wait     110         return 0;     /* no symbols, but wait for decoding to report error */
111     }                                             111     }
112     for (min = 1; min < MAXBITS; min++)           112     for (min = 1; min < MAXBITS; min++)
113         if (count[min] != 0) break;               113         if (count[min] != 0) break;
114     if (root < min) root = min;                   114     if (root < min) root = min;
115                                                   115 
116     /* check for an over-subscribed or incompl    116     /* check for an over-subscribed or incomplete set of lengths */
117     left = 1;                                     117     left = 1;
118     for (len = 1; len <= MAXBITS; len++) {        118     for (len = 1; len <= MAXBITS; len++) {
119         left <<= 1;                               119         left <<= 1;
120         left -= count[len];                       120         left -= count[len];
121         if (left < 0) return -1;        /* ove    121         if (left < 0) return -1;        /* over-subscribed */
122     }                                             122     }
123     if (left > 0 && (type == CODES || max != 1    123     if (left > 0 && (type == CODES || max != 1))
124         return -1;                      /* inc    124         return -1;                      /* incomplete set */
125                                                   125 
126     /* generate offsets into symbol table for     126     /* generate offsets into symbol table for each length for sorting */
127     offs[1] = 0;                                  127     offs[1] = 0;
128     for (len = 1; len < MAXBITS; len++)           128     for (len = 1; len < MAXBITS; len++)
129         offs[len + 1] = offs[len] + count[len]    129         offs[len + 1] = offs[len] + count[len];
130                                                   130 
131     /* sort symbols by length, by symbol order    131     /* sort symbols by length, by symbol order within each length */
132     for (sym = 0; sym < codes; sym++)             132     for (sym = 0; sym < codes; sym++)
133         if (lens[sym] != 0) work[offs[lens[sym    133         if (lens[sym] != 0) work[offs[lens[sym]]++] = (unsigned short)sym;
134                                                   134 
135     /*                                            135     /*
136        Create and fill in decoding tables.  In    136        Create and fill in decoding tables.  In this loop, the table being
137        filled is at next and has curr index bi    137        filled is at next and has curr index bits.  The code being used is huff
138        with length len.  That code is converte    138        with length len.  That code is converted to an index by dropping drop
139        bits off of the bottom.  For codes wher    139        bits off of the bottom.  For codes where len is less than drop + curr,
140        those top drop + curr - len bits are in    140        those top drop + curr - len bits are incremented through all values to
141        fill the table with replicated entries.    141        fill the table with replicated entries.
142                                                   142 
143        root is the number of index bits for th    143        root is the number of index bits for the root table.  When len exceeds
144        root, sub-tables are created pointed to    144        root, sub-tables are created pointed to by the root entry with an index
145        of the low root bits of huff.  This is     145        of the low root bits of huff.  This is saved in low to check for when a
146        new sub-table should be started.  drop     146        new sub-table should be started.  drop is zero when the root table is
147        being filled, and drop is root when sub    147        being filled, and drop is root when sub-tables are being filled.
148                                                   148 
149        When a new sub-table is needed, it is n    149        When a new sub-table is needed, it is necessary to look ahead in the
150        code lengths to determine what size sub    150        code lengths to determine what size sub-table is needed.  The length
151        counts are used for this, and so count[    151        counts are used for this, and so count[] is decremented as codes are
152        entered in the tables.                     152        entered in the tables.
153                                                   153 
154        used keeps track of how many table entr    154        used keeps track of how many table entries have been allocated from the
155        provided *table space.  It is checked w    155        provided *table space.  It is checked when a LENS table is being made
156        against the space in *table, ENOUGH, mi    156        against the space in *table, ENOUGH, minus the maximum space needed by
157        the worst case distance code, MAXD.  Th    157        the worst case distance code, MAXD.  This should never happen, but the
158        sufficiency of ENOUGH has not been prov    158        sufficiency of ENOUGH has not been proven exhaustively, hence the check.
159        This assumes that when type == LENS, bi    159        This assumes that when type == LENS, bits == 9.
160                                                   160 
161        sym increments through all symbols, and    161        sym increments through all symbols, and the loop terminates when
162        all codes of length max, i.e. all codes    162        all codes of length max, i.e. all codes, have been processed.  This
163        routine permits incomplete codes, so an    163        routine permits incomplete codes, so another loop after this one fills
164        in the rest of the decoding tables with    164        in the rest of the decoding tables with invalid code markers.
165      */                                           165      */
166                                                   166 
167     /* set up for code type */                    167     /* set up for code type */
168     switch (type) {                               168     switch (type) {
169     case CODES:                                   169     case CODES:
170         base = extra = work;    /* dummy value    170         base = extra = work;    /* dummy value--not used */
171         end = 19;                                 171         end = 19;
172         break;                                    172         break;
173     case LENS:                                    173     case LENS:
174         base = lbase;                             174         base = lbase;
175         base -= 257;                              175         base -= 257;
176         extra = lext;                             176         extra = lext;
177         extra -= 257;                             177         extra -= 257;
178         end = 256;                                178         end = 256;
179         break;                                    179         break;
180     default:            /* DISTS */               180     default:            /* DISTS */
181         base = dbase;                             181         base = dbase;
182         extra = dext;                             182         extra = dext;
183         end = -1;                                 183         end = -1;
184     }                                             184     }
185                                                   185 
186     /* initialize state for loop */               186     /* initialize state for loop */
187     huff = 0;                   /* starting co    187     huff = 0;                   /* starting code */
188     sym = 0;                    /* starting co    188     sym = 0;                    /* starting code symbol */
189     len = min;                  /* starting co    189     len = min;                  /* starting code length */
190     next = *table;              /* current tab    190     next = *table;              /* current table to fill in */
191     curr = root;                /* current tab    191     curr = root;                /* current table index bits */
192     drop = 0;                   /* current bit    192     drop = 0;                   /* current bits to drop from code for index */
193     low = (unsigned)(-1);       /* trigger new    193     low = (unsigned)(-1);       /* trigger new sub-table when len > root */
194     used = 1U << root;          /* use root ta    194     used = 1U << root;          /* use root table entries */
195     mask = used - 1;            /* mask for co    195     mask = used - 1;            /* mask for comparing low */
196                                                   196 
197     /* check available table space */             197     /* check available table space */
198     if (type == LENS && used >= ENOUGH - MAXD)    198     if (type == LENS && used >= ENOUGH - MAXD)
199         return 1;                                 199         return 1;
200                                                   200 
201     /* process all codes and make table entrie    201     /* process all codes and make table entries */
202     for (;;) {                                    202     for (;;) {
203         /* create table entry */                  203         /* create table entry */
204         this.bits = (unsigned char)(len - drop    204         this.bits = (unsigned char)(len - drop);
205         if ((int)(work[sym]) < end) {             205         if ((int)(work[sym]) < end) {
206             this.op = (unsigned char)0;           206             this.op = (unsigned char)0;
207             this.val = work[sym];                 207             this.val = work[sym];
208         }                                         208         }
209         else if ((int)(work[sym]) > end) {        209         else if ((int)(work[sym]) > end) {
210             this.op = (unsigned char)(extra[wo    210             this.op = (unsigned char)(extra[work[sym]]);
211             this.val = base[work[sym]];           211             this.val = base[work[sym]];
212         }                                         212         }
213         else {                                    213         else {
214             this.op = (unsigned char)(32 + 64)    214             this.op = (unsigned char)(32 + 64);         /* end of block */
215             this.val = 0;                         215             this.val = 0;
216         }                                         216         }
217                                                   217 
218         /* replicate for those indices with lo    218         /* replicate for those indices with low len bits equal to huff */
219         incr = 1U << (len - drop);                219         incr = 1U << (len - drop);
220         fill = 1U << curr;                        220         fill = 1U << curr;
221         min = fill;                 /* save of    221         min = fill;                 /* save offset to next table */
222         do {                                      222         do {
223             fill -= incr;                         223             fill -= incr;
224             next[(huff >> drop) + fill] = this    224             next[(huff >> drop) + fill] = this;
225         } while (fill != 0);                      225         } while (fill != 0);
226                                                   226 
227         /* backwards increment the len-bit cod    227         /* backwards increment the len-bit code huff */
228         incr = 1U << (len - 1);                   228         incr = 1U << (len - 1);
229         while (huff & incr)                       229         while (huff & incr)
230             incr >>= 1;                           230             incr >>= 1;
231         if (incr != 0) {                          231         if (incr != 0) {
232             huff &= incr - 1;                     232             huff &= incr - 1;
233             huff += incr;                         233             huff += incr;
234         }                                         234         }
235         else                                      235         else
236             huff = 0;                             236             huff = 0;
237                                                   237 
238         /* go to next symbol, update count, le    238         /* go to next symbol, update count, len */
239         sym++;                                    239         sym++;
240         if (--(count[len]) == 0) {                240         if (--(count[len]) == 0) {
241             if (len == max) break;                241             if (len == max) break;
242             len = lens[work[sym]];                242             len = lens[work[sym]];
243         }                                         243         }
244                                                   244 
245         /* create new sub-table if needed */      245         /* create new sub-table if needed */
246         if (len > root && (huff & mask) != low    246         if (len > root && (huff & mask) != low) {
247             /* if first time, transition to su    247             /* if first time, transition to sub-tables */
248             if (drop == 0)                        248             if (drop == 0)
249                 drop = root;                      249                 drop = root;
250                                                   250 
251             /* increment past last table */       251             /* increment past last table */
252             next += min;            /* here mi    252             next += min;            /* here min is 1 << curr */
253                                                   253 
254             /* determine length of next table     254             /* determine length of next table */
255             curr = len - drop;                    255             curr = len - drop;
256             left = (int)(1 << curr);              256             left = (int)(1 << curr);
257             while (curr + drop < max) {           257             while (curr + drop < max) {
258                 left -= count[curr + drop];       258                 left -= count[curr + drop];
259                 if (left <= 0) break;             259                 if (left <= 0) break;
260                 curr++;                           260                 curr++;
261                 left <<= 1;                       261                 left <<= 1;
262             }                                     262             }
263                                                   263 
264             /* check for enough space */          264             /* check for enough space */
265             used += 1U << curr;                   265             used += 1U << curr;
266             if (type == LENS && used >= ENOUGH    266             if (type == LENS && used >= ENOUGH - MAXD)
267                 return 1;                         267                 return 1;
268                                                   268 
269             /* point entry in root table to su    269             /* point entry in root table to sub-table */
270             low = huff & mask;                    270             low = huff & mask;
271             (*table)[low].op = (unsigned char)    271             (*table)[low].op = (unsigned char)curr;
272             (*table)[low].bits = (unsigned cha    272             (*table)[low].bits = (unsigned char)root;
273             (*table)[low].val = (unsigned shor    273             (*table)[low].val = (unsigned short)(next - *table);
274         }                                         274         }
275     }                                             275     }
276                                                   276 
277     /*                                            277     /*
278        Fill in rest of table for incomplete co    278        Fill in rest of table for incomplete codes.  This loop is similar to the
279        loop above in incrementing huff for tab    279        loop above in incrementing huff for table indices.  It is assumed that
280        len is equal to curr + drop, so there i    280        len is equal to curr + drop, so there is no loop needed to increment
281        through high index bits.  When the curr    281        through high index bits.  When the current sub-table is filled, the loop
282        drops back to the root table to fill in    282        drops back to the root table to fill in any remaining entries there.
283      */                                           283      */
284     this.op = (unsigned char)64;                  284     this.op = (unsigned char)64;                /* invalid code marker */
285     this.bits = (unsigned char)(len - drop);      285     this.bits = (unsigned char)(len - drop);
286     this.val = (unsigned short)0;                 286     this.val = (unsigned short)0;
287     while (huff != 0) {                           287     while (huff != 0) {
288         /* when done with sub-table, drop back    288         /* when done with sub-table, drop back to root table */
289         if (drop != 0 && (huff & mask) != low)    289         if (drop != 0 && (huff & mask) != low) {
290             drop = 0;                             290             drop = 0;
291             len = root;                           291             len = root;
292             next = *table;                        292             next = *table;
293             this.bits = (unsigned char)len;       293             this.bits = (unsigned char)len;
294         }                                         294         }
295                                                   295 
296         /* put invalid code marker in table */    296         /* put invalid code marker in table */
297         next[huff >> drop] = this;                297         next[huff >> drop] = this;
298                                                   298 
299         /* backwards increment the len-bit cod    299         /* backwards increment the len-bit code huff */
300         incr = 1U << (len - 1);                   300         incr = 1U << (len - 1);
301         while (huff & incr)                       301         while (huff & incr)
302             incr >>= 1;                           302             incr >>= 1;
303         if (incr != 0) {                          303         if (incr != 0) {
304             huff &= incr - 1;                     304             huff &= incr - 1;
305             huff += incr;                         305             huff += incr;
306         }                                         306         }
307         else                                      307         else
308             huff = 0;                             308             huff = 0;
309     }                                             309     }
310                                                   310 
311     /* set return parameters */                   311     /* set return parameters */
312     *table += used;                               312     *table += used;
313     *bits = root;                                 313     *bits = root;
314     return 0;                                     314     return 0;
315 }                                                 315 }
316                                                   316 

~ [ source navigation ] ~ [ diff markup ] ~ [ identifier search ] ~

kernel.org | git.kernel.org | LWN.net | Project Home | SVN repository | Mail admin

Linux® is a registered trademark of Linus Torvalds in the United States and other countries.
TOMOYO® is a registered trademark of NTT DATA CORPORATION.

sflogo.php