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

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

?? infback.c

?? 許多壓縮算法都用到了ZLIP算法
?? C
?? 第 1 頁 / 共 2 頁
字號:
/* infback.c -- inflate using a call-back interface * Copyright (C) 1995-2003 Mark Adler * For conditions of distribution and use, see copyright notice in zlib.h *//*   This code is largely copied from inflate.c.  Normally either infback.o or   inflate.o would be linked into an application--not both.  The interface   with inffast.c is retained so that optimized assembler-coded versions of   inflate_fast() can be used with either inflate.c or infback.c. */#include "zutil.h"#include "inftrees.h"#include "inflate.h"#include "inffast.h"/* function prototypes */local void fixedtables OF((struct inflate_state FAR *state));/*   strm provides memory allocation functions in zalloc and zfree, or   Z_NULL to use the library memory allocation functions.   windowBits is in the range 8..15, and window is a user-supplied   window and output buffer that is 2**windowBits bytes. */int ZEXPORT inflateBackInit_(strm, windowBits, window, version, stream_size)z_stream FAR *strm;int windowBits;unsigned char FAR *window;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 || window == Z_NULL ||        windowBits < 8 || windowBits > 15)        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;    state->wbits = windowBits;    state->wsize = 1U << windowBits;    state->window = window;    state->write = 0;    state->whave = 0;    return Z_OK;}/*   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;}/* Macros for inflateBack(): *//* Load returned state from inflate_fast() */#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)/* Set state from registers for inflate_fast() */#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)/* Assure that some input is available.  If input is requested, but denied,   then return a Z_BUF_ERROR from inflateBack(). */#define PULL() \    do { \        if (have == 0) { \            have = in(in_desc, &next); \            if (have == 0) { \                next = Z_NULL; \                ret = Z_BUF_ERROR; \                goto inf_leave; \            } \        } \    } while (0)/* Get a byte of input into the bit accumulator, or return from inflateBack()   with an error if there is no input available. */#define PULLBYTE() \    do { \        PULL(); \        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 inflateBack() with   an error. */#define NEEDBITS(n) \    do { \        while (bits < (unsigned)(n)) \            PULLBYTE(); \    } while (0)/* Return the low n bits of the bit accumulator (n < 16) */#define BITS(n) \    ((unsigned)hold & ((1U << (n)) - 1))/* Remove n bits from the bit accumulator */#define DROPBITS(n) \    do { \        hold >>= (n); \        bits -= (unsigned)(n); \    } while (0)/* Remove zero to seven bits as needed to go to a byte boundary */#define BYTEBITS() \    do { \        hold >>= bits & 7; \        bits -= bits & 7; \    } while (0)/* Assure that some output space is available, by writing out the window   if it's full.  If the write fails, return from inflateBack() with a   Z_BUF_ERROR. */#define ROOM() \    do { \        if (left == 0) { \            put = state->window; \            left = state->wsize; \            state->whave = left; \            if (out(out_desc, put, left)) { \                ret = Z_BUF_ERROR; \                goto inf_leave; \            } \        } \    } while (0)/*   strm provides the memory allocation functions and window buffer on input,   and provides information on the unused input on return.  For Z_DATA_ERROR   returns, strm will also provide an error message.   in() and out() are the call-back input and output functions.  When   inflateBack() needs more input, it calls in().  When inflateBack() has   filled the window with output, or when it completes with data in the   window, it calls out() to write out the data.  The application must not   change the provided input until in() is called again or inflateBack()   returns.  The application must not change the window/output buffer until   inflateBack() returns.   in() and out() are called with a descriptor parameter provided in the   inflateBack() call.  This parameter can be a structure that provides the   information required to do the read or write, as well as accumulated   information on the input and output such as totals and check values.   in() should return zero on failure.  out() should return non-zero on   failure.  If either in() or out() fails, than inflateBack() returns a   Z_BUF_ERROR.  strm->next_in can be checked for Z_NULL to see whether it   was in() or out() that caused in the error.  Otherwise,  inflateBack()   returns Z_STREAM_END on success, Z_DATA_ERROR for an deflate format   error, or Z_MEM_ERROR if it could not allocate memory for the state.   inflateBack() can also return Z_STREAM_ERROR if the input parameters   are not correct, i.e. strm is Z_NULL or the state was not initialized. */int ZEXPORT inflateBack(strm, in, in_desc, out, out_desc)z_stream FAR *strm;in_func in;void FAR *in_desc;out_func out;void FAR *out_desc;{    struct inflate_state FAR *state;    unsigned char FAR *next;    /* next input */    unsigned char FAR *put;     /* next output */    unsigned have, left;        /* available input and output */    unsigned long hold;         /* bit buffer */    unsigned bits;              /* bits in bit buffer */    unsigned copy;              /* number of stored or match bytes to copy */    unsigned char FAR *from;    /* where to copy match bytes from */    code this;                  /* current decoding table entry */    code last;                  /* parent table entry */    unsigned len;               /* length to copy for repeats, bits to drop */    int ret;                    /* return code */    static const unsigned short order[19] = /* permutation of code lengths */        {16, 17, 18, 0, 8, 7, 9, 6, 10, 5, 11, 4, 12, 3, 13, 2, 14, 1, 15};    /* Check that the strm exists and that the state was initialized */    if (strm == Z_NULL || strm->state == Z_NULL)        return Z_STREAM_ERROR;    state = (struct inflate_state FAR *)strm->state;    /* Reset the state */    strm->msg = Z_NULL;    state->mode = TYPE;    state->last = 0;    state->whave = 0;    next = strm->next_in;    have = next != Z_NULL ? strm->avail_in : 0;    hold = 0;    bits = 0;    put = state->window;    left = state->wsize;    /* Inflate until end of block marked as last */    for (;;)        switch (state->mode) {        case TYPE:            /* determine and dispatch block type */            if (state->last) {                BYTEBITS();                state->mode = DONE;                break;            }            NEEDBITS(3);            state->last = BITS(1);            DROPBITS(1);            switch (BITS(2)) {            case 0:                             /* stored block */                Tracev((stderr, "inflate:     stored block%s\n",                        state->last ? " (last)" : ""));                state->mode = STORED;                break;            case 1:                             /* fixed block */                fixedtables(state);                Tracev((stderr, "inflate:     fixed codes block%s\n",                        state->last ? " (last)" : ""));                state->mode = LEN;              /* decode codes */                break;            case 2:                             /* dynamic block */                Tracev((stderr, "inflate:     dynamic codes block%s\n",                        state->last ? " (last)" : ""));                state->mode = TABLE;                break;            case 3:                strm->msg = (char *)"invalid block type";

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
亚洲天堂网中文字| 欧美激情一区二区在线| 亚洲国产中文字幕在线视频综合| 一本一本大道香蕉久在线精品 | 中文字幕在线一区免费| www.色综合.com| 一区二区三区加勒比av| 欧美日韩一卡二卡| 久久福利资源站| 国产女同互慰高潮91漫画| 91麻豆.com| 日本在线不卡视频一二三区| 日韩美一区二区三区| 国产成人无遮挡在线视频| 亚洲欧洲av在线| 欧美剧情片在线观看| 激情国产一区二区| 亚洲三级在线免费观看| 欧美精品乱码久久久久久| 韩国理伦片一区二区三区在线播放| 亚洲国产精品成人综合| 欧美亚洲国产怡红院影院| 久久66热偷产精品| 日韩一区在线看| 欧美电影免费观看高清完整版在线观看| 国产成人在线免费| 亚洲6080在线| 国产精品狼人久久影院观看方式| 欧美日韩美少妇| 成人动漫一区二区| 免费人成黄页网站在线一区二区| 国产精品色婷婷| 91麻豆精品国产91久久久| 成人h动漫精品一区二区| 美女爽到高潮91| 亚洲欧美日本韩国| 久久综合色综合88| 欧美日韩成人一区| jlzzjlzz亚洲女人18| 奇米精品一区二区三区四区 | 亚洲美女偷拍久久| 久久新电视剧免费观看| 欧美综合一区二区| 成人精品一区二区三区四区| 日韩成人午夜电影| 一区二区国产视频| 国产精品白丝在线| 久久久国产综合精品女国产盗摄| 欧美日韩一区不卡| 91免费版在线| 国产99久久久国产精品潘金| 美女精品自拍一二三四| 亚洲国产视频一区| 国产精品不卡视频| 中文字幕不卡的av| 国产午夜精品一区二区三区嫩草| 91精品免费在线观看| 欧美日韩一区中文字幕| 91小视频免费观看| 99精品一区二区| 成人夜色视频网站在线观看| 狠狠色丁香久久婷婷综| 久久草av在线| 久久99精品久久久久久久久久久久| 午夜精品影院在线观看| 亚洲一区二区在线视频| 亚洲精品国产视频| 亚洲欧美在线另类| 国产精品久久久久久亚洲伦| 久久精品人人爽人人爽| 久久久久久久一区| 久久久久久影视| 精品毛片乱码1区2区3区| 欧美xxxx老人做受| 久久综合久久99| 久久精品亚洲精品国产欧美kt∨| 精品久久久久99| 26uuu欧美日本| 国产欧美一区二区精品性色 | 国产亚洲欧美日韩在线一区| 337p粉嫩大胆噜噜噜噜噜91av| 欧美大胆人体bbbb| 久久婷婷综合激情| 国产精品免费网站在线观看| 国产精品毛片a∨一区二区三区| 国产精品久久久久久久久晋中| 亚洲天堂av一区| 一区二区三区91| 日本aⅴ精品一区二区三区| 日本在线观看不卡视频| 韩国一区二区三区| 成人一区在线观看| 色哦色哦哦色天天综合| 精品视频999| 精品久久久久久无| 国产精品视频在线看| 亚洲欧美国产三级| 午夜国产不卡在线观看视频| 免费成人结看片| 成人av影院在线| 欧美综合一区二区| 2023国产精品| 亚洲免费在线看| 肉丝袜脚交视频一区二区| 国产在线视视频有精品| 不卡一区二区三区四区| 欧美日韩免费观看一区三区| 久久久久久影视| 亚洲综合清纯丝袜自拍| 久久99久久精品欧美| 99麻豆久久久国产精品免费| 欧美乱妇一区二区三区不卡视频| 精品国产麻豆免费人成网站| 亚洲欧美偷拍卡通变态| 久久精品国产免费| 色综合一区二区三区| 日韩欧美一区在线观看| 国产精品高潮呻吟| 麻豆精品久久久| 91成人看片片| 日本一区二区三区国色天香| 午夜精品福利视频网站| 成人动漫视频在线| 日韩精品一区二区三区视频在线观看| 国产精品成人免费精品自在线观看| 日韩高清不卡在线| 99re亚洲国产精品| 精品日韩欧美一区二区| 一区二区免费在线播放| 福利电影一区二区三区| 在线综合视频播放| 一区二区三区国产精品| 成人涩涩免费视频| 精品动漫一区二区三区在线观看| 洋洋成人永久网站入口| 国产在线播放一区二区三区| 8x8x8国产精品| 一区二区在线观看av| 国产成人自拍网| 精品国产一区二区三区不卡 | 久久成人免费网| 欧美日韩不卡一区二区| 亚洲欧洲色图综合| 国产成人久久精品77777最新版本 国产成人鲁色资源国产91色综 | 99热精品国产| 久久久久久夜精品精品免费| 午夜欧美一区二区三区在线播放 | 欧美色综合网站| 中文字幕一区二区三区在线观看 | 91麻豆精品国产91久久久资源速度| 国产精品三级久久久久三级| 激情综合网av| 欧美大胆人体bbbb| 日韩专区一卡二卡| 欧美日韩视频在线第一区| 亚洲精品免费在线观看| 91在线视频免费观看| 国产精品久久久久久妇女6080| 国产美女久久久久| 久久女同精品一区二区| 国产一区二区三区蝌蚪| 2017欧美狠狠色| 激情综合网av| 久久久久久夜精品精品免费| 国产麻豆视频精品| 久久久国产精品麻豆| 国产精品一二三区在线| 国产欧美久久久精品影院| 国产精品主播直播| 久久麻豆一区二区| 国产成人午夜精品5599| 中文一区二区在线观看| 成人激情开心网| 亚洲图片欧美激情| 欧美亚洲免费在线一区| 午夜精品久久久久久久久久| 91麻豆精品国产91久久久久久久久| 热久久国产精品| 日韩精品一区二区三区中文不卡| 久久91精品国产91久久小草| 国产日韩欧美精品在线| 成人午夜视频福利| 一区二区三区波多野结衣在线观看| 欧美系列一区二区| 日韩avvvv在线播放| 亚洲精品在线网站| 99久久综合国产精品| 亚洲一区在线看| 日韩欧美一级二级| 懂色av噜噜一区二区三区av| 日韩美女啊v在线免费观看| 91国在线观看| 免费高清在线一区| 欧美国产日韩一二三区| 色8久久精品久久久久久蜜| 日韩av成人高清| 欧美经典一区二区三区| 欧美在线一区二区三区| 麻豆精品一区二区综合av| 国产精品久久三|