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

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

?? infback.c

?? 一個本地database引擎,支持中文T_Sql查詢,兼容DELPHI標準數據庫控件
?? C
?? 第 1 頁 / 共 2 頁
字號:
/* infback.c -- inflate using a call-back interface
 * Copyright (C) 1995-2005 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_streamp 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 = (struct internal_state FAR *)state;
    state->dmax = 32768U;
    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_streamp 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";
                state->mode = BAD;

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
国产.欧美.日韩| 99久久精品国产观看| 国产精品久久精品日日| 欧美久久久久久久久久| 国产成人8x视频一区二区| 午夜欧美视频在线观看| 久久综合久久久久88| 国产电影精品久久禁18| 亚洲一二三四区| 久久久久久日产精品| 在线精品视频小说1| 国产毛片一区二区| 日本女人一区二区三区| 2021中文字幕一区亚洲| 91视频在线观看免费| 国产自产视频一区二区三区 | 日本一不卡视频| 一区二区免费看| 国产清纯在线一区二区www| 91精品国产黑色紧身裤美女| 91福利小视频| k8久久久一区二区三区| 欧美性欧美巨大黑白大战| 国产在线不卡一卡二卡三卡四卡| 午夜视频在线观看一区| 亚洲精品欧美在线| 国产精品美日韩| 久久久久久亚洲综合影院红桃 | 精品国产99国产精品| 欧美日韩mp4| 欧美午夜寂寞影院| 色域天天综合网| 色综合激情五月| 91美女福利视频| 色综合久久久久综合99| 99久久精品久久久久久清纯| 成人免费三级在线| 成人一区二区三区在线观看| 国产 欧美在线| 国产xxx精品视频大全| 风流少妇一区二区| 丁香婷婷综合激情五月色| 国产盗摄一区二区三区| 高清视频一区二区| 成人免费va视频| 91视频国产观看| 欧美综合天天夜夜久久| 欧美三片在线视频观看| 国产精品三级电影| 国产精品久久久久精k8| 亚洲欧洲另类国产综合| 亚洲天堂2014| 午夜精彩视频在线观看不卡| 日韩电影在线看| 国产在线不卡一区| 成人性生交大片免费看在线播放| 成人精品高清在线| 色噜噜偷拍精品综合在线| 欧美日韩一级黄| 欧美xxxxxxxx| 中文字幕av一区二区三区| 亚洲黄色性网站| 日本中文一区二区三区| 国产一区二区日韩精品| av激情综合网| 欧美日韩国产片| 精品福利一二区| 亚洲欧美一区二区不卡| 偷拍日韩校园综合在线| 国产一区二区女| 91久久国产最好的精华液| 6080日韩午夜伦伦午夜伦| 久久久久国产一区二区三区四区| 欧美高清在线视频| 亚洲国产cao| 国产精品一区二区在线看| 日韩一区二区在线观看视频| 亚洲精品一区二区三区99| 欧美激情在线免费观看| 亚洲制服丝袜在线| 久久99精品久久久久久动态图| 成a人片国产精品| 69堂国产成人免费视频| 欧美国产乱子伦| 亚洲第一二三四区| 国产自产视频一区二区三区| 色国产综合视频| 久久午夜色播影院免费高清| 艳妇臀荡乳欲伦亚洲一区| 麻豆91小视频| 欧美做爰猛烈大尺度电影无法无天| 精品sm捆绑视频| 亚洲国产精品麻豆| 福利一区二区在线| 欧美一区二区三区白人 | 伦理电影国产精品| 91在线看国产| 久久久亚洲精品一区二区三区| 亚洲精品视频免费观看| 国产精品亚洲人在线观看| 欧美影视一区二区三区| 亚洲国产岛国毛片在线| 美女视频黄 久久| 在线看日韩精品电影| 欧美国产1区2区| 国模冰冰炮一区二区| 国产精品久久久爽爽爽麻豆色哟哟| 视频一区在线视频| 91视频.com| 国产婷婷色一区二区三区在线| 免费成人美女在线观看| 欧美中文字幕一区二区三区亚洲| 中文在线资源观看网站视频免费不卡| 日韩电影在线看| 欧美日韩久久久一区| 亚洲精品一二三四区| 国产**成人网毛片九色| 久久久亚洲精华液精华液精华液| 五月婷婷综合在线| 欧美在线三级电影| 亚洲免费在线播放| 99免费精品视频| 国产肉丝袜一区二区| 国产一区二区网址| 日韩免费观看2025年上映的电影| 亚洲国产aⅴ天堂久久| 欧美性猛片xxxx免费看久爱| 亚洲欧美激情视频在线观看一区二区三区| 成人h动漫精品| 色又黄又爽网站www久久| 久久狠狠亚洲综合| 欧美视频一区二区三区| 亚洲日本在线a| 国产91精品欧美| 欧美极品少妇xxxxⅹ高跟鞋| k8久久久一区二区三区| 国产精品丝袜91| 国产成人日日夜夜| 国产午夜久久久久| 国产精品综合一区二区三区| 日韩精品中文字幕一区| 久久精品久久久精品美女| 日韩一区二区三| 久久69国产一区二区蜜臀| 欧美成人猛片aaaaaaa| 极品美女销魂一区二区三区| 精品久久久三级丝袜| 国产精品一区在线| 国产精品麻豆久久久| 91最新地址在线播放| 一级日本不卡的影视| 欧美三级日韩在线| 日韩av一级片| 精品久久久久久久久久久院品网 | 亚洲综合一区在线| 欧美精品在欧美一区二区少妇| 日韩精品成人一区二区三区| 在线成人免费观看| 精品一区二区三区在线视频| 精品欧美一区二区久久| 风间由美一区二区三区在线观看| 国产精品久久久久久亚洲毛片| 91免费看片在线观看| 五月激情六月综合| 精品国产精品网麻豆系列| 成人永久aaa| 亚洲精品国产成人久久av盗摄| 欧美视频精品在线| 看电视剧不卡顿的网站| 国产精品理伦片| 欧美色老头old∨ideo| 久久成人麻豆午夜电影| 国产精品无码永久免费888| 在线观看亚洲成人| 青青青伊人色综合久久| 国产精品无码永久免费888| 欧美三级在线视频| 欧美日韩国产小视频在线观看| 久草在线在线精品观看| 国产精品久久久久久久久免费桃花| 欧美亚洲一区三区| 国产一区二区三区在线观看精品| 亚洲色图视频网| 欧美成人vps| 91老师国产黑色丝袜在线| 日韩精品91亚洲二区在线观看| 国产精品欧美极品| 91精品婷婷国产综合久久| bt7086福利一区国产| 另类综合日韩欧美亚洲| 一区二区免费看| 日本一区免费视频| 正在播放亚洲一区| 91免费看`日韩一区二区| 国内精品伊人久久久久影院对白| 一区二区三区影院| 国产日韩亚洲欧美综合| 欧美一级一区二区| 色香蕉成人二区免费| 国产成人午夜99999|