View | Details | Raw Unified
Collapse All | Expand All

(-) src/huf.c (-6 / +6 lines)
 Lines 338-344    Link Here 
    }
    }
    else {
    else {
        i = 0;
        i = 0;
        while (i < n) {
        while (i < MIN(n, NPT)) {
            c = peekbits(3);
            c = peekbits(3);
            if (c != 7)
            if (c != 7)
                fillbuf(3);
                fillbuf(3);
 Lines 354-360    Link Here 
            pt_len[i++] = c;
            pt_len[i++] = c;
            if (i == i_special) {
            if (i == i_special) {
                c = getbits(2);
                c = getbits(2);
                while (--c >= 0)
                while (--c >= 0 && i < NPT)
                    pt_len[i++] = 0;
                    pt_len[i++] = 0;
            }
            }
        }
        }
 Lines 379-385    Link Here 
            c_table[i] = c;
            c_table[i] = c;
    } else {
    } else {
        i = 0;
        i = 0;
        while (i < n) {
        while (i < MIN(n,NC)) {
            c = pt_table[peekbits(8)];
            c = pt_table[peekbits(8)];
            if (c >= NT) {
            if (c >= NT) {
                unsigned short  mask = 1 << (16 - 9);
                unsigned short  mask = 1 << (16 - 9);
 Lines 389-395    Link Here 
                    else
                    else
                        c = left[c];
                        c = left[c];
                    mask >>= 1;
                    mask >>= 1;
                } while (c >= NT);
                } while (c >= NT && (mask || c != left[c]));
            }
            }
            fillbuf(pt_len[c]);
            fillbuf(pt_len[c]);
            if (c <= 2) {
            if (c <= 2) {
 Lines 437-443    Link Here 
            else
            else
                j = left[j];
                j = left[j];
            mask >>= 1;
            mask >>= 1;
        } while (j >= NC);
        } while (j >= NC && (mask || j != left[j]));
        fillbuf(c_len[j] - 12);
        fillbuf(c_len[j] - 12);
    }
    }
    return j;
    return j;
 Lines 462-468    Link Here 
            else
            else
                j = left[j];
                j = left[j];
            mask >>= 1;
            mask >>= 1;
        } while (j >= np);
        } while (j >= np && (mask || j != left[j]));
        fillbuf(pt_len[j] - 8);
        fillbuf(pt_len[j] - 8);
    }
    }
    if (j != 0)
    if (j != 0)
(-) src/lha_macro.h (+2 lines)
 Lines 194-199    Link Here 
/* Individual macro define                                                  */
/* Individual macro define                                                  */
/* ------------------------------------------------------------------------ */
/* ------------------------------------------------------------------------ */
#define MIN(a,b) ((a) <= (b) ? (a) : (b))
/* bitio.c */
/* bitio.c */
#define peekbits(n)     (bitbuf >> (sizeof(bitbuf)*8 - (n)))
#define peekbits(n)     (bitbuf >> (sizeof(bitbuf)*8 - (n)))
(-) src/maketbl.c (-5 / +19 lines)
 Lines 32-39    Link Here 
    }
    }
    /* count */
    /* count */
    for (i = 0; i < nchar; i++)
    for (i = 0; i < nchar; i++) {
        count[bitlen[i]]++;
        if (bitlen[i] > 16) {
            error("Bad table (case a)");
            exit(1);
        }
        else
            count[bitlen[i]]++;
    }
    /* calculate first code */
    /* calculate first code */
    total = 0;
    total = 0;
 Lines 41-48    Link Here 
        start[i] = total;
        start[i] = total;
        total += weight[i] * count[i];
        total += weight[i] * count[i];
    }
    }
    if ((total & 0xffff) != 0)
    if ((total & 0xffff) != 0 || tablebits > 16) { /* 16 for weight below */
        error("make_table(): Bad table (5)");
        error("make_table(): Bad table (5)");
        exit(1);
    }
    /* shift data for make table. */
    /* shift data for make table. */
    m = 16 - tablebits;
    m = 16 - tablebits;
 Lines 53-59    Link Here 
    /* initialize */
    /* initialize */
    j = start[tablebits + 1] >> m;
    j = start[tablebits + 1] >> m;
    k = 1 << tablebits;
    k = MIN(1 << tablebits, 4096);
    if (j != 0)
    if (j != 0)
        for (i = j; i < k; i++)
        for (i = j; i < k; i++)
            table[i] = 0;
            table[i] = 0;
 Lines 66-77    Link Here 
        l = start[k] + weight[k];
        l = start[k] + weight[k];
        if (k <= tablebits) {
        if (k <= tablebits) {
            /* code in table */
            /* code in table */
            l = MIN(l, 4096);
            for (i = start[k]; i < l; i++)
            for (i = start[k]; i < l; i++)
                table[i] = j;
                table[i] = j;
        }
        }
        else {
        else {
            /* code not in table */
            /* code not in table */
            p = &table[(i = start[k]) >> m];
            i = start[k];
            if ((i >> m) > 4096) {
                error("Bad table");
                exit(1);
            }
            p = &table[i >> m];
            i <<= tablebits;
            i <<= tablebits;
            n = k - tablebits;
            n = k - tablebits;
            /* make tree (n length) */
            /* make tree (n length) */