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

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

?? inflate.c

?? minix操作系統最新版本(3.1.1)的源代碼
?? C
?? 第 1 頁 / 共 4 頁
字號:
        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 { \        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)/* Reverse the bytes in a 32-bit value */#define REVERSE(q) \    ((((q) >> 24) & 0xff) + (((q) >> 8) & 0xff00) + \     (((q) & 0xff00) << 8) + (((q) & 0xff) << 24))/*   inflate() uses a state machine to process as much input data and generate as   much output data as possible before returning.  The state machine is   structured roughly as follows:    for (;;) switch (state) {    ...    case STATEn:        if (not enough input data or output space to make progress)            return;        ... make progress ...        state = STATEm;        break;    ...    }   so when inflate() is called again, the same case is attempted again, and   if the appropriate resources are provided, the machine proceeds to the   next state.  The NEEDBITS() macro is usually the way the state evaluates   whether it can proceed or should return.  NEEDBITS() does the return if   the requested bits are not available.  The typical use of the BITS macros   is:        NEEDBITS(n);        ... do something with BITS(n) ...        DROPBITS(n);   where NEEDBITS(n) either returns from inflate() if there isn't enough   input left to load n bits into the accumulator, or it continues.  BITS(n)   gives the low n bits in the accumulator.  When done, DROPBITS(n) drops   the low n bits off the accumulator.  INITBITS() clears the accumulator   and sets the number of available bits to zero.  BYTEBITS() discards just   enough bits to put the accumulator on a byte boundary.  After BYTEBITS()   and a NEEDBITS(8), then BITS(8) would return the next byte in the stream.   NEEDBITS(n) uses PULLBYTE() to get an available byte of input, or to return   if there is no input available.  The decoding of variable length codes uses   PULLBYTE() directly in order to pull just enough bytes to decode the next   code, and no more.   Some states loop until they get enough input, making sure that enough   state information is maintained to continue the loop where it left off   if NEEDBITS() returns in the loop.  For example, want, need, and keep   would all have to actually be part of the saved state in case NEEDBITS()   returns:    case STATEw:        while (want < need) {            NEEDBITS(n);            keep[want++] = BITS(n);            DROPBITS(n);        }        state = STATEx;    case STATEx:   As shown above, if the next state is also the next case, then the break   is omitted.   A state may also return if there is not enough output space available to   complete that state.  Those states are copying stored data, writing a   literal byte, and copying a matching string.   When returning, a "goto inf_leave" is used to update the total counters,   update the check value, and determine whether any progress has been made   during that inflate() call in order to return the proper return code.   Progress is defined as a change in either strm->avail_in or strm->avail_out.   When there is a window, goto inf_leave will update the window with the last   output written.  If a goto inf_leave occurs in the middle of decompression   and there is no window currently, goto inf_leave will create one and copy   output to the window for the next call of inflate().   In this implementation, the flush parameter of inflate() only affects the   return code (per zlib.h).  inflate() always writes as much as possible to   strm->next_out, given the space available and the provided input--the effect   documented in zlib.h of Z_SYNC_FLUSH.  Furthermore, inflate() always defers   the allocation of and copying into a sliding window until necessary, which   provides the effect documented in zlib.h for Z_FINISH when the entire input   stream available.  So the only thing the flush parameter actually does is:   when flush is set to Z_FINISH, inflate() cannot return Z_OK.  Instead it   will return Z_BUF_ERROR if it has not reached the end of the stream. */int ZEXPORT inflate(strm, flush)z_streamp strm;int flush;{    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 in, out;           /* save starting available input and output */    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 */#ifdef GUNZIP    unsigned char hbuf[4];      /* buffer for gzip header crc calculation */#endif    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};    if (strm == Z_NULL || strm->state == Z_NULL || strm->next_out == Z_NULL ||        (strm->next_in == Z_NULL && strm->avail_in != 0))        return Z_STREAM_ERROR;    state = (struct inflate_state FAR *)strm->state;    if (state->mode == TYPE) state->mode = TYPEDO;      /* skip check */    LOAD();    in = have;    out = left;    ret = Z_OK;    for (;;)        switch (state->mode) {        case HEAD:            if (state->wrap == 0) {                state->mode = TYPEDO;                break;            }            NEEDBITS(16);#ifdef GUNZIP            if ((state->wrap & 2) && hold == 0x8b1f) {  /* gzip header */                state->check = crc32(0L, Z_NULL, 0);                CRC2(state->check, hold);                INITBITS();                state->mode = FLAGS;                break;            }            state->flags = 0;           /* expect zlib header */            if (state->head != Z_NULL)                state->head->done = -1;            if (!(state->wrap & 1) ||   /* check if zlib header allowed */#else            if (#endif                ((BITS(8) << 8) + (hold >> 8)) % 31) {                strm->msg = (char *)"incorrect header check";                state->mode = BAD;                break;            }            if (BITS(4) != Z_DEFLATED) {                strm->msg = (char *)"unknown compression method";                state->mode = BAD;                break;            }            DROPBITS(4);            len = BITS(4) + 8;            if (len > state->wbits) {                strm->msg = (char *)"invalid window size";                state->mode = BAD;                break;            }            state->dmax = 1U << len;            Tracev((stderr, "inflate:   zlib header ok\n"));            strm->adler = state->check = adler32(0L, Z_NULL, 0);            state->mode = hold & 0x200 ? DICTID : TYPE;            INITBITS();            break;#ifdef GUNZIP        case FLAGS:            NEEDBITS(16);            state->flags = (int)(hold);            if ((state->flags & 0xff) != Z_DEFLATED) {                strm->msg = (char *)"unknown compression method";                state->mode = BAD;                break;            }            if (state->flags & 0xe000) {                strm->msg = (char *)"unknown header flags set";                state->mode = BAD;                break;            }            if (state->head != Z_NULL)                state->head->text = (int)((hold >> 8) & 1);            if (state->flags & 0x0200) CRC2(state->check, hold);            INITBITS();            state->mode = TIME;        case TIME:            NEEDBITS(32);            if (state->head != Z_NULL)                state->head->time = hold;            if (state->flags & 0x0200) CRC4(state->check, hold);            INITBITS();            state->mode = OS;        case OS:            NEEDBITS(16);            if (state->head != Z_NULL) {                state->head->xflags = (int)(hold & 0xff);                state->head->os = (int)(hold >> 8);            }            if (state->flags & 0x0200) CRC2(state->check, hold);            INITBITS();            state->mode = EXLEN;        case EXLEN:            if (state->flags & 0x0400) {                NEEDBITS(16);                state->length = (unsigned)(hold);                if (state->head != Z_NULL)                    state->head->extra_len = (unsigned)hold;                if (state->flags & 0x0200) CRC2(state->check, hold);                INITBITS();            }            else if (state->head != Z_NULL)                state->head->extra = Z_NULL;            state->mode = EXTRA;        case EXTRA:            if (state->flags & 0x0400) {                copy = state->length;                if (copy > have) copy = have;                if (copy) {                    if (state->head != Z_NULL &&                        state->head->extra != Z_NULL) {

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
在线成人av影院| 亚洲精品高清在线观看| 国产精品久久久久久久岛一牛影视 | 日韩免费高清av| 国产精品萝li| 激情综合网av| 日韩精品中文字幕在线一区| 中文字幕一区二区三区不卡| 蜜桃av一区二区在线观看| 色哟哟国产精品| 国产精品日产欧美久久久久| 久久国产精品72免费观看| 欧美性三三影院| 亚洲天堂福利av| 成人av免费在线播放| 久久这里只有精品首页| 免费在线观看一区二区三区| 欧美日韩你懂得| 亚洲综合偷拍欧美一区色| 成人app在线观看| 国产女人18毛片水真多成人如厕 | 欧美日韩高清一区二区三区| 综合av第一页| 91在线国产观看| 亚洲天堂2014| 色哟哟在线观看一区二区三区| 国产精品人妖ts系列视频| 成人免费高清视频| 国产欧美日韩三区| 成人黄色av电影| 亚洲日本青草视频在线怡红院| 岛国av在线一区| 国产精品成人一区二区艾草| 成人v精品蜜桃久久一区| 日本一区二区三级电影在线观看| 国内精品免费**视频| 欧美精品一区视频| 国产二区国产一区在线观看| 国产日本欧美一区二区| 成人性色生活片| 亚洲综合在线第一页| 欧美日韩卡一卡二| 蜜臀av性久久久久蜜臀av麻豆| 日韩午夜激情免费电影| 久久国产精品99精品国产| 欧美精品一区二区三区蜜桃 | 奇米精品一区二区三区四区| 日韩一级成人av| 国产精品 欧美精品| 亚洲欧洲日本在线| 欧美日韩国产美| 国内不卡的二区三区中文字幕| 国产视频在线观看一区二区三区| www.日韩大片| 亚洲高清视频中文字幕| 久久婷婷久久一区二区三区| 成人av在线资源网站| 亚洲成人在线网站| 久久这里只有精品6| 色老头久久综合| 麻豆专区一区二区三区四区五区| 国产欧美日韩激情| 欧美日韩中文字幕一区二区| 精彩视频一区二区| 亚洲美女电影在线| 久久嫩草精品久久久精品| 91麻豆国产自产在线观看| 日韩高清不卡一区二区三区| 久久精品亚洲乱码伦伦中文 | 91小视频在线观看| 日韩激情在线观看| 国产精品久线观看视频| 欧美剧情电影在线观看完整版免费励志电影 | 国产福利一区二区三区视频在线| 亚洲精品成人少妇| 久久综合五月天婷婷伊人| 色婷婷久久久亚洲一区二区三区| 蜜臀国产一区二区三区在线播放| 国产精品免费aⅴ片在线观看| 3d成人h动漫网站入口| 91美女在线观看| 国产一区欧美一区| 午夜久久久久久电影| 国产精品高潮呻吟| 久久综合网色—综合色88| 欧美日韩在线播放一区| av激情综合网| 国产精品一区二区久久不卡| 日韩中文字幕一区二区三区| 亚洲天堂av老司机| 国产嫩草影院久久久久| 欧美成人精品1314www| 欧美日韩国产不卡| 91福利资源站| www.视频一区| 东方欧美亚洲色图在线| 久久不见久久见中文字幕免费| 亚洲一区二区三区中文字幕| 亚洲婷婷综合久久一本伊一区 | 亚洲a一区二区| 国产精品激情偷乱一区二区∴| 久久久美女艺术照精彩视频福利播放| 欧美日韩国产一级片| 91丨国产丨九色丨pron| eeuss鲁一区二区三区| 国产成人精品一区二区三区网站观看 | 亚洲一区在线观看视频| 亚洲天堂a在线| 亚洲免费在线观看视频| 亚洲婷婷综合久久一本伊一区 | 久久www免费人成看片高清| 天堂精品中文字幕在线| 亚洲国产三级在线| 亚洲动漫第一页| 亚洲一区二区三区视频在线播放| 亚洲人成人一区二区在线观看| 亚洲青青青在线视频| 亚洲女人的天堂| 亚洲国产综合人成综合网站| 午夜av一区二区三区| 首页国产欧美日韩丝袜| 美女视频黄免费的久久| 精品一二线国产| 国产综合一区二区| 国产成人在线视频免费播放| 国产91精品一区二区| av日韩在线网站| 欧美日韩一区二区三区四区| 欧美日韩高清一区| 亚洲精品一线二线三线无人区| 国产亚洲美州欧州综合国| 中文字幕日韩一区| 亚洲bt欧美bt精品777| 国产一区二区成人久久免费影院| 国产成人精品免费| 91黄色免费网站| 日韩欧美亚洲一区二区| 欧美国产综合一区二区| 亚洲免费视频成人| 日本亚洲视频在线| 国产精品一品二品| 欧美亚洲动漫另类| 久久欧美一区二区| 一区二区三区欧美视频| 日韩成人av影视| 国产成人在线影院| 欧美视频一区在线| 久久亚洲一级片| 亚洲一区二区三区四区五区黄| 久久se这里有精品| 91福利精品第一导航| 精品乱码亚洲一区二区不卡| 亚洲美女视频在线| 国内精品伊人久久久久av一坑 | 国产精品日产欧美久久久久| 亚洲韩国精品一区| 成人午夜精品在线| 3d动漫精品啪啪1区2区免费| 国产精品毛片大码女人| 奇米影视一区二区三区小说| www.视频一区| 久久综合九色综合欧美就去吻| 亚洲女与黑人做爰| 成人性生交大合| 26uuu亚洲综合色欧美| 伊人夜夜躁av伊人久久| 国产成人精品亚洲777人妖| 欧美三级在线看| 中文字幕在线一区| 久久aⅴ国产欧美74aaa| 欧美色爱综合网| 国产精品亲子伦对白| 久久草av在线| 欧美一级二级三级蜜桃| 有码一区二区三区| 成人av在线影院| 国产午夜三级一区二区三| 美国毛片一区二区| 91精品欧美久久久久久动漫| 亚洲免费av网站| 成人福利视频在线| 国产日韩欧美综合在线| 美日韩一区二区| 欧美区一区二区三区| 亚洲一区在线观看免费观看电影高清 | 蜜桃久久久久久| 欧美欧美欧美欧美| 亚洲成人一区二区在线观看| 色综合久久88色综合天天免费| 欧美激情艳妇裸体舞| 国产·精品毛片| 国产女同性恋一区二区| 国产美女视频91| 国产欧美精品一区aⅴ影院| 精品一区二区三区欧美| 欧美二区在线观看| 日本不卡的三区四区五区| 欧美精品久久天天躁| 亚洲成人免费观看| 91精品国产综合久久精品|