亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频

? 歡迎來到蟲蟲下載站! | ?? 資源下載 ?? 資源專輯 ?? 關于我們
? 蟲蟲下載站

?? inflate.c

?? 許多壓縮算法都用到了ZLIP算法
?? C
?? 第 1 頁 / 共 3 頁
字號:
/* inflate.c -- zlib decompression * Copyright (C) 1995-2003 Mark Adler * For conditions of distribution and use, see copyright notice in zlib.h *//* * Change history: * * 1.2.beta0    24 Nov 2002 * - First version -- complete rewrite of inflate to simplify code, avoid *   creation of window when not needed, minimize use of window when it is *   needed, make inffast.c even faster, implement gzip decoding, and to *   improve code readability and style over the previous zlib inflate code * * 1.2.beta1    25 Nov 2002 * - Use pointers for available input and output checking in inffast.c * - Remove input and output counters in inffast.c * - Change inffast.c entry and loop from avail_in >= 7 to >= 6 * - Remove unnecessary second byte pull from length extra in inffast.c * - Unroll direct copy to three copies per loop in inffast.c * * 1.2.beta2    4 Dec 2002 * - Change external routine names to reduce potential conflicts * - Correct filename to inffixed.h for fixed tables in inflate.c * - Make hbuf[] unsigned char to match parameter type in inflate.c * - Change strm->next_out[-state->offset] to *(strm->next_out - state->offset) *   to avoid negation problem on Alphas (64 bit) in inflate.c * * 1.2.beta3    22 Dec 2002 * - Add comments on state->bits assertion in inffast.c * - Add comments on op field in inftrees.h * - Fix bug in reuse of allocated window after inflateReset() * - Remove bit fields--back to byte structure for speed * - Remove distance extra == 0 check in inflate_fast()--only helps for lengths * - Change post-increments to pre-increments in inflate_fast(), PPC biased? * - Add compile time option, POSTINC, to use post-increments instead (Intel?) * - Make MATCH copy in inflate() much faster for when inflate_fast() not used * - Use local copies of stream next and avail values, as well as local bit *   buffer and bit count in inflate()--for speed when inflate_fast() not used * * 1.2.beta4    1 Jan 2003 * - Split ptr - 257 statements in inflate_table() to avoid compiler warnings * - Move a comment on output buffer sizes from inffast.c to inflate.c * - Add comments in inffast.c to introduce the inflate_fast() routine * - Rearrange window copies in inflate_fast() for speed and simplification * - Unroll last copy for window match in inflate_fast() * - Use local copies of window variables in inflate_fast() for speed * - Pull out common write == 0 case for speed in inflate_fast() * - Make op and len in inflate_fast() unsigned for consistency * - Add FAR to lcode and dcode declarations in inflate_fast() * - Simplified bad distance check in inflate_fast() * - Added inflateBackInit(), inflateBack(), and inflateBackEnd() in new *   source file infback.c to provide a call-back interface to inflate for *   programs like gzip and unzip -- uses window as output buffer to avoid *   window copying * * 1.2.beta5    1 Jan 2003 * - Improved inflateBack() interface to allow the caller to provide initial *   input in strm. * - Fixed stored blocks bug in inflateBack() * * 1.2.beta6    4 Jan 2003 * - Added comments in inffast.c on effectiveness of POSTINC * - Typecasting all around to reduce compiler warnings * - Changed loops from while (1) or do {} while (1) to for (;;), again to *   make compilers happy * - Changed type of window in inflateBackInit() to unsigned char * * * 1.2.beta7    27 Jan 2003 * - Changed many types to unsigned or unsigned short to avoid warnings * - Added inflateCopy() function * * 1.2.0        9 Mar 2003 * - Changed inflateBack() interface to provide separate opaque descriptors *   for the in() and out() functions * - Changed inflateBack() argument and in_func typedef to swap the length *   and buffer address return values for the input function * - Check next_in and next_out for Z_NULL on entry to inflate() * * The history for versions after 1.2.0 are in ChangeLog in zlib distribution. */#include "zutil.h"#include "inftrees.h"#include "inflate.h"#include "inffast.h"#ifdef MAKEFIXED#  ifndef BUILDFIXED#    define BUILDFIXED#  endif#endif/* function prototypes */local void fixedtables OF((struct inflate_state FAR *state));local int updatewindow OF((z_streamp strm, unsigned out));#ifdef BUILDFIXED   void makefixed OF((void));#endiflocal unsigned syncsearch OF((unsigned FAR *have, unsigned char FAR *buf,                              unsigned len));int ZEXPORT inflateReset(strm)z_streamp strm;{    struct inflate_state FAR *state;    if (strm == Z_NULL || strm->state == Z_NULL) return Z_STREAM_ERROR;    state = (struct inflate_state FAR *)strm->state;    strm->total_in = strm->total_out = state->total = 0;    strm->msg = Z_NULL;    state->mode = HEAD;    state->last = 0;    state->havedict = 0;    state->wsize = 0;    state->whave = 0;    state->hold = 0;    state->bits = 0;    state->lencode = state->distcode = state->next = state->codes;    Tracev((stderr, "inflate: reset\n"));    return Z_OK;}int ZEXPORT inflateInit2_(strm, windowBits, version, stream_size)z_streamp strm;int windowBits;const char *version;int stream_size;{    struct inflate_state FAR *state;    if (version == Z_NULL || version[0] != ZLIB_VERSION[0] ||        stream_size != (int)(sizeof(z_stream)))        return Z_VERSION_ERROR;    if (strm == Z_NULL) return Z_STREAM_ERROR;    strm->msg = Z_NULL;                 /* in case we return an error */    if (strm->zalloc == (alloc_func)0) {        strm->zalloc = zcalloc;        strm->opaque = (voidpf)0;    }    if (strm->zfree == (free_func)0) strm->zfree = zcfree;    state = (struct inflate_state FAR *)            ZALLOC(strm, 1, sizeof(struct inflate_state));    if (state == Z_NULL) return Z_MEM_ERROR;    Tracev((stderr, "inflate: allocated\n"));    strm->state = (voidpf)state;    if (windowBits < 0) {        state->wrap = 0;        windowBits = -windowBits;    }    else {        state->wrap = (windowBits >> 4) + 1;#ifdef GUNZIP        if (windowBits < 48) windowBits &= 15;#endif    }    if (windowBits < 8 || windowBits > 15) {        ZFREE(strm, state);        strm->state = Z_NULL;        return Z_STREAM_ERROR;    }    state->wbits = (unsigned)windowBits;    state->window = Z_NULL;    return inflateReset(strm);}int ZEXPORT inflateInit_(strm, version, stream_size)z_streamp strm;const char *version;int stream_size;{    return inflateInit2_(strm, DEF_WBITS, version, stream_size);}/*   Return state with length and distance decoding tables and index sizes set to   fixed code decoding.  Normally this returns fixed tables from inffixed.h.   If BUILDFIXED is defined, then instead this routine builds the tables the   first time it's called, and returns those tables the first time and   thereafter.  This reduces the size of the code by about 2K bytes, in   exchange for a little execution time.  However, BUILDFIXED should not be   used for threaded applications, since the rewriting of the tables and virgin   may not be thread-safe. */local void fixedtables(state)struct inflate_state FAR *state;{#ifdef BUILDFIXED    static int virgin = 1;    static code *lenfix, *distfix;    static code fixed[544];    /* build fixed huffman tables if first call (may not be thread safe) */    if (virgin) {        unsigned sym, bits;        static code *next;        /* literal/length table */        sym = 0;        while (sym < 144) state->lens[sym++] = 8;        while (sym < 256) state->lens[sym++] = 9;        while (sym < 280) state->lens[sym++] = 7;        while (sym < 288) state->lens[sym++] = 8;        next = fixed;        lenfix = next;        bits = 9;        inflate_table(LENS, state->lens, 288, &(next), &(bits), state->work);        /* distance table */        sym = 0;        while (sym < 32) state->lens[sym++] = 5;        distfix = next;        bits = 5;        inflate_table(DISTS, state->lens, 32, &(next), &(bits), state->work);        /* do this just once */        virgin = 0;    }#else /* !BUILDFIXED */#   include "inffixed.h"#endif /* BUILDFIXED */    state->lencode = lenfix;    state->lenbits = 9;    state->distcode = distfix;    state->distbits = 5;}#ifdef MAKEFIXED#include <stdio.h>/*   Write out the inffixed.h that is #include'd above.  Defining MAKEFIXED also   defines BUILDFIXED, so the tables are built on the fly.  makefixed() writes   those tables to stdout, which would be piped to inffixed.h.  A small program   can simply call makefixed to do this:    void makefixed(void);    int main(void)    {        makefixed();        return 0;    }   Then that can be linked with zlib built with MAKEFIXED defined and run:    a.out > inffixed.h */void makefixed(){    unsigned low, size;    struct inflate_state state;    fixedtables(&state);    puts("    /* inffixed.h -- table for decoding fixed codes");    puts("     * Generated automatically by makefixed().");    puts("     */");    puts("");    puts("    /* WARNING: this file should *not* be used by applications.");    puts("       It is part of the implementation of this library and is");    puts("       subject to change. Applications should only use zlib.h.");    puts("     */");    puts("");    size = 1U << 9;    printf("    static const code lenfix[%u] = {", size);    low = 0;    for (;;) {        if ((low % 7) == 0) printf("\n        ");        printf("{%u,%u,%d}", state.lencode[low].op, state.lencode[low].bits,               state.lencode[low].val);        if (++low == size) break;        putchar(',');    }    puts("\n    };");    size = 1U << 5;    printf("\n    static const code distfix[%u] = {", size);    low = 0;    for (;;) {        if ((low % 6) == 0) printf("\n        ");        printf("{%u,%u,%d}", state.distcode[low].op, state.distcode[low].bits,               state.distcode[low].val);        if (++low == size) break;        putchar(',');    }    puts("\n    };");}#endif /* MAKEFIXED *//*   Update the window with the last wsize (normally 32K) bytes written before   returning.  If window does not exist yet, create it.  This is only called   when a window is already in use, or when output has been written during this   inflate call, but the end of the deflate stream has not been reached yet.   It is also called to create a window for dictionary data when a dictionary   is loaded.   Providing output buffers larger than 32K to inflate() should provide a speed   advantage, since only the last 32K of output is copied to the sliding window   upon return from inflate(), and since all distances after the first 32K of   output will fall in the output data, making match copies simpler and faster.   The advantage may be dependent on the size of the processor's data caches. */local int updatewindow(strm, out)z_streamp strm;unsigned out;{    struct inflate_state FAR *state;    unsigned copy, dist;    state = (struct inflate_state FAR *)strm->state;    /* if it hasn't been done already, allocate space for the window */    if (state->window == Z_NULL) {        state->window = (unsigned char FAR *)                        ZALLOC(strm, 1U << state->wbits,                               sizeof(unsigned char));        if (state->window == Z_NULL) return 1;    }    /* if window not in use yet, initialize */    if (state->wsize == 0) {        state->wsize = 1U << state->wbits;        state->write = 0;        state->whave = 0;    }    /* copy state->wsize or less output bytes into the circular window */    copy = out - strm->avail_out;    if (copy >= state->wsize) {        zmemcpy(state->window, strm->next_out - state->wsize, state->wsize);        state->write = 0;        state->whave = state->wsize;    }    else {        dist = state->wsize - state->write;        if (dist > copy) dist = copy;        zmemcpy(state->window + state->write, strm->next_out - copy, dist);        copy -= dist;        if (copy) {            zmemcpy(state->window, strm->next_out - copy, copy);            state->write = copy;            state->whave = state->wsize;        }        else {            state->write += dist;            if (state->write == state->wsize) state->write = 0;            if (state->whave < state->wsize) state->whave += dist;        }    }    return 0;}/* Macros for inflate(): *//* check function to use adler32() for zlib or crc32() for gzip */#ifdef GUNZIP#  define UPDATE(check, buf, len) \    (state->flags ? crc32(check, buf, len) : adler32(check, buf, len))#else#  define UPDATE(check, buf, len) adler32(check, buf, len)#endif/* check macros for header crc */#ifdef GUNZIP#  define CRC2(check, word) \    do { \        hbuf[0] = (unsigned char)(word); \        hbuf[1] = (unsigned char)((word) >> 8); \        check = crc32(check, hbuf, 2); \    } while (0)#  define CRC4(check, word) \    do { \        hbuf[0] = (unsigned char)(word); \        hbuf[1] = (unsigned char)((word) >> 8); \        hbuf[2] = (unsigned char)((word) >> 16); \        hbuf[3] = (unsigned char)((word) >> 24); \        check = crc32(check, hbuf, 4); \    } while (0)#endif/* Load registers with state in inflate() for speed */#define LOAD() \    do { \        put = strm->next_out; \        left = strm->avail_out; \        next = strm->next_in; \        have = strm->avail_in; \        hold = state->hold; \        bits = state->bits; \    } while (0)/* Restore state from registers in inflate() */#define RESTORE() \    do { \        strm->next_out = put; \        strm->avail_out = left; \        strm->next_in = next; \        strm->avail_in = have; \        state->hold = hold; \        state->bits = bits; \    } while (0)/* Clear the input bit accumulator */#define INITBITS() \    do { \        hold = 0; \        bits = 0; \    } while (0)/* Get a byte of input into the bit accumulator, or return from inflate()   if there is no input available. */#define PULLBYTE() \    do { \        if (have == 0) goto inf_leave; \        have--; \        hold += (unsigned long)(*next++) << bits; \        bits += 8; \    } while (0)/* Assure that there are at least n bits in the bit accumulator.  If there is   not enough available input to do that, then return from inflate(). */#define NEEDBITS(n) \    do { \

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
91精品免费观看| 色域天天综合网| 日韩一区二区高清| 免费看日韩精品| 精品久久久久久久久久久久久久久| 日本中文字幕一区二区视频| 91精品国产入口| 激情久久五月天| 国产精品美女久久福利网站| 色综合色综合色综合色综合色综合 | 国内精品写真在线观看| 精品国产乱码久久久久久浪潮 | 精品系列免费在线观看| 精品国产99国产精品| 91丨porny丨国产| 亚洲欧洲成人自拍| 欧美在线高清视频| 美国欧美日韩国产在线播放| 欧美精品一区二| 97aⅴ精品视频一二三区| 亚洲国产成人av好男人在线观看| 欧美精品三级日韩久久| 国产精品综合网| 国产综合色精品一区二区三区| 久久久久99精品一区| 91色视频在线| 麻豆精品久久精品色综合| 国产欧美日韩激情| 欧美日韩午夜在线| 九九视频精品免费| 亚洲日韩欧美一区二区在线| 欧美日本高清视频在线观看| 国产一区在线看| 亚洲图片欧美综合| xf在线a精品一区二区视频网站| 99久久精品国产网站| 男人操女人的视频在线观看欧美| 国产亚洲一区二区三区四区 | 美女mm1313爽爽久久久蜜臀| 中文在线一区二区| 91精品久久久久久蜜臀| 成人教育av在线| 免费观看在线综合色| 亚洲视频一区二区免费在线观看| 日韩一级大片在线| 在线国产电影不卡| 成人激情小说网站| 精品在线你懂的| 亚洲国产精品一区二区www在线| 国产女主播视频一区二区| 欧美高清激情brazzers| 91热门视频在线观看| 欧美一区二区三区在| 99国产精品久久| 国产一区二区三区四区在线观看| 亚洲第一狼人社区| 国产精品国产三级国产专播品爱网| 日韩写真欧美这视频| 在线免费av一区| 97se亚洲国产综合自在线观| 国产露脸91国语对白| 蜜桃视频在线观看一区二区| 亚洲一区二区欧美| 亚洲免费伊人电影| 国产精品久久午夜夜伦鲁鲁| 久久―日本道色综合久久| 欧美一区二区三区人| 欧美美女bb生活片| 欧美日韩视频不卡| 欧美日韩国产系列| 欧美日韩一区二区欧美激情| 色94色欧美sute亚洲线路一ni| 成人禁用看黄a在线| 国产成人精品www牛牛影视| 蜜臀精品一区二区三区在线观看| 亚洲午夜羞羞片| 亚洲一区二区在线免费看| 亚洲精品视频免费看| 1000部国产精品成人观看| 国产精品久久久久久久久搜平片 | 在线看日本不卡| 一本色道久久加勒比精品| gogo大胆日本视频一区| 9久草视频在线视频精品| 成人免费电影视频| 99精品欧美一区二区蜜桃免费| 成人精品电影在线观看| 97国产一区二区| 久久综合一区二区| 久久久久九九视频| 国产精品久久久久久久久免费丝袜| 国产精品久久久久久亚洲毛片 | 精品91自产拍在线观看一区| 精品国产在天天线2019| 精品国产91乱码一区二区三区| 日韩欧美在线123| 久久免费精品国产久精品久久久久 | 亚洲素人一区二区| 亚洲精品成人精品456| 亚洲国产综合色| 麻豆91免费观看| 国产精品一级片在线观看| 成人高清视频在线观看| 91网上在线视频| 欧美日韩高清一区二区| 欧美精品一区二区三区在线 | 中文字幕中文字幕一区| 亚洲美女视频在线| 午夜久久久久久| 国产一区二区精品久久91| 成人午夜av在线| 欧美少妇bbb| 精品少妇一区二区三区免费观看| 国产午夜久久久久| 亚洲综合色视频| 麻豆精品一区二区三区| 不卡视频免费播放| 欧美精品xxxxbbbb| 亚洲国产精品传媒在线观看| 一区二区三区四区不卡视频| 麻豆国产精品官网| 91麻豆产精品久久久久久| 日韩免费看网站| 亚洲品质自拍视频| 激情图片小说一区| 91黄色激情网站| wwwwxxxxx欧美| 一级中文字幕一区二区| 精品亚洲aⅴ乱码一区二区三区| 99热精品国产| 精品国产伦一区二区三区观看方式 | 国产超碰在线一区| 欧美精品精品一区| 中文字幕亚洲一区二区av在线| 日韩国产在线一| 成人a免费在线看| 日韩视频一区二区三区在线播放| 自拍视频在线观看一区二区| 六月丁香综合在线视频| 色天使久久综合网天天| 久久久精品国产免大香伊| 亚洲1区2区3区视频| 成人av网址在线| 欧美精品一区二区精品网| 亚洲动漫第一页| 91丨porny丨最新| 欧美激情综合五月色丁香| 美女视频黄频大全不卡视频在线播放| 色综合久久综合网97色综合| 久久久久久久国产精品影院| 日韩精品国产精品| 中文字幕亚洲一区二区av在线| 久久成人久久爱| 欧美精品xxxxbbbb| 亚洲成人动漫一区| 一本一道久久a久久精品| 国产精品女同一区二区三区| 国产一区二区电影| 欧美精品一区二区不卡| 麻豆精品视频在线观看免费| 555www色欧美视频| 天天操天天综合网| 欧美日韩国产高清一区二区三区 | 91激情在线视频| 亚洲精品国产第一综合99久久 | 97久久精品人人做人人爽50路| 久久久亚洲国产美女国产盗摄| 美国欧美日韩国产在线播放| 欧美一区二区啪啪| 日韩综合在线视频| 欧美精品一级二级| 天天亚洲美女在线视频| 欧美男女性生活在线直播观看| 亚洲一区免费视频| 欧美日韩精品一区二区在线播放 | 91精选在线观看| 日本美女一区二区| 日韩欧美国产1| 精品一区二区三区在线播放视频| 日韩免费观看高清完整版在线观看 | 91精品国产色综合久久不卡电影| 日本在线播放一区二区三区| 日韩三级免费观看| 国产一区二区三区久久久 | 久久久午夜精品理论片中文字幕| 日韩国产欧美在线播放| 日韩欧美二区三区| 国产酒店精品激情| 中文字幕亚洲不卡| 欧美色老头old∨ideo| 日本成人在线不卡视频| 久久影院午夜论| a在线欧美一区| 亚洲电影中文字幕在线观看| 日韩欧美一级二级三级| 丁香一区二区三区| 亚洲国产成人av网| 久久日韩精品一区二区五区| av影院午夜一区| 日韩av一二三|