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

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

?? inflate.c

?? ZIP壓縮算法源代碼,可以直接加入C++Project中編譯調用
?? C
?? 第 1 頁 / 共 4 頁
字號:
                DROPBITS(state->extra);
            }
#ifdef INFLATE_STRICT
            if (state->offset > state->dmax) {
                strm->msg = (char *)"invalid distance too far back";
                state->mode = BAD;
                break;
            }
#endif
            if (state->offset > state->whave + out - left) {
                strm->msg = (char *)"invalid distance too far back";
                state->mode = BAD;
                break;
            }
            Tracevv((stderr, "inflate:         distance %u\n", state->offset));
            state->mode = MATCH;
        case MATCH:
            if (left == 0) goto inf_leave;
            copy = out - left;
            if (state->offset > copy) {         /* copy from window */
                copy = state->offset - copy;
                if (copy > state->write) {
                    copy -= state->write;
                    from = state->window + (state->wsize - copy);
                }
                else
                    from = state->window + (state->write - copy);
                if (copy > state->length) copy = state->length;
            }
            else {                              /* copy from output */
                from = put - state->offset;
                copy = state->length;
            }
            if (copy > left) copy = left;
            left -= copy;
            state->length -= copy;
            do {
                *put++ = *from++;
            } while (--copy);
            if (state->length == 0) state->mode = LEN;
            break;
        case LIT:
            if (left == 0) goto inf_leave;
            *put++ = (unsigned char)(state->length);
            left--;
            state->mode = LEN;
            break;
        case CHECK:
            if (state->wrap) {
                NEEDBITS(32);
                out -= left;
                strm->total_out += out;
                state->total += out;
                if (out)
                    strm->adler = state->check =
                        UPDATE(state->check, put - out, out);
                out = left;
                if ((
#ifdef GUNZIP
                     state->flags ? hold :
#endif
                     REVERSE(hold)) != state->check) {
                    strm->msg = (char *)"incorrect data check";
                    state->mode = BAD;
                    break;
                }
                INITBITS();
                Tracev((stderr, "inflate:   check matches trailer\n"));
            }
#ifdef GUNZIP
            state->mode = LENGTH;
        case LENGTH:
            if (state->wrap && state->flags) {
                NEEDBITS(32);
                if (hold != (state->total & 0xffffffffUL)) {
                    strm->msg = (char *)"incorrect length check";
                    state->mode = BAD;
                    break;
                }
                INITBITS();
                Tracev((stderr, "inflate:   length matches trailer\n"));
            }
#endif
            state->mode = DONE;
        case DONE:
            ret = Z_STREAM_END;
            goto inf_leave;
        case BAD:
            ret = Z_DATA_ERROR;
            goto inf_leave;
        case MEM:
            return Z_MEM_ERROR;
        case SYNC:
        default:
            return Z_STREAM_ERROR;
        }

    /*
       Return from inflate(), updating the total counts and the check value.
       If there was no progress during the inflate() call, return a buffer
       error.  Call updatewindow() to create and/or update the window state.
       Note: a memory error from inflate() is non-recoverable.
     */
  inf_leave:
    RESTORE();
    if (state->wsize || (state->mode < CHECK && out != strm->avail_out))
        if (updatewindow(strm, out)) {
            state->mode = MEM;
            return Z_MEM_ERROR;
        }
    in -= strm->avail_in;
    out -= strm->avail_out;
    strm->total_in += in;
    strm->total_out += out;
    state->total += out;
    if (state->wrap && out)
        strm->adler = state->check =
            UPDATE(state->check, strm->next_out - out, out);
    strm->data_type = state->bits + (state->last ? 64 : 0) +
                      (state->mode == TYPE ? 128 : 0);
    if (((in == 0 && out == 0) || flush == Z_FINISH) && ret == Z_OK)
        ret = Z_BUF_ERROR;
    return ret;
}

int ZEXPORT inflateEnd(strm)
z_streamp strm;
{
    struct inflate_state FAR *state;
    if (strm == Z_NULL || strm->state == Z_NULL || strm->zfree == (free_func)0)
        return Z_STREAM_ERROR;
    state = (struct inflate_state FAR *)strm->state;
    if (state->window != Z_NULL) ZFREE(strm, state->window);
    ZFREE(strm, strm->state);
    strm->state = Z_NULL;
    Tracev((stderr, "inflate: end\n"));
    return Z_OK;
}

int ZEXPORT inflateSetDictionary(strm, dictionary, dictLength)
z_streamp strm;
const Bytef *dictionary;
uInt dictLength;
{
    struct inflate_state FAR *state;
    unsigned long id;

    /* check state */
    if (strm == Z_NULL || strm->state == Z_NULL) return Z_STREAM_ERROR;
    state = (struct inflate_state FAR *)strm->state;
    if (state->wrap != 0 && state->mode != DICT)
        return Z_STREAM_ERROR;

    /* check for correct dictionary id */
    if (state->mode == DICT) {
        id = adler32(0L, Z_NULL, 0);
        id = adler32(id, dictionary, dictLength);
        if (id != state->check)
            return Z_DATA_ERROR;
    }

    /* copy dictionary to window */
    if (updatewindow(strm, strm->avail_out)) {
        state->mode = MEM;
        return Z_MEM_ERROR;
    }
    if (dictLength > state->wsize) {
        zmemcpy(state->window, dictionary + dictLength - state->wsize,
                state->wsize);
        state->whave = state->wsize;
    }
    else {
        zmemcpy(state->window + state->wsize - dictLength, dictionary,
                dictLength);
        state->whave = dictLength;
    }
    state->havedict = 1;
    Tracev((stderr, "inflate:   dictionary set\n"));
    return Z_OK;
}

int ZEXPORT inflateGetHeader(strm, head)
z_streamp strm;
gz_headerp head;
{
    struct inflate_state FAR *state;

    /* check state */
    if (strm == Z_NULL || strm->state == Z_NULL) return Z_STREAM_ERROR;
    state = (struct inflate_state FAR *)strm->state;
    if ((state->wrap & 2) == 0) return Z_STREAM_ERROR;

    /* save header structure */
    state->head = head;
    head->done = 0;
    return Z_OK;
}

/*
   Search buf[0..len-1] for the pattern: 0, 0, 0xff, 0xff.  Return when found
   or when out of input.  When called, *have is the number of pattern bytes
   found in order so far, in 0..3.  On return *have is updated to the new
   state.  If on return *have equals four, then the pattern was found and the
   return value is how many bytes were read including the last byte of the
   pattern.  If *have is less than four, then the pattern has not been found
   yet and the return value is len.  In the latter case, syncsearch() can be
   called again with more data and the *have state.  *have is initialized to
   zero for the first call.
 */
local unsigned syncsearch(have, buf, len)
unsigned FAR *have;
unsigned char FAR *buf;
unsigned len;
{
    unsigned got;
    unsigned next;

    got = *have;
    next = 0;
    while (next < len && got < 4) {
        if ((int)(buf[next]) == (got < 2 ? 0 : 0xff))
            got++;
        else if (buf[next])
            got = 0;
        else
            got = 4 - got;
        next++;
    }
    *have = got;
    return next;
}

int ZEXPORT inflateSync(strm)
z_streamp strm;
{
    unsigned len;               /* number of bytes to look at or looked at */
    unsigned long in, out;      /* temporary to save total_in and total_out */
    unsigned char buf[4];       /* to restore bit buffer to byte string */
    struct inflate_state FAR *state;

    /* check parameters */
    if (strm == Z_NULL || strm->state == Z_NULL) return Z_STREAM_ERROR;
    state = (struct inflate_state FAR *)strm->state;
    if (strm->avail_in == 0 && state->bits < 8) return Z_BUF_ERROR;

    /* if first time, start search in bit buffer */
    if (state->mode != SYNC) {
        state->mode = SYNC;
        state->hold <<= state->bits & 7;
        state->bits -= state->bits & 7;
        len = 0;
        while (state->bits >= 8) {
            buf[len++] = (unsigned char)(state->hold);
            state->hold >>= 8;
            state->bits -= 8;
        }
        state->have = 0;
        syncsearch(&(state->have), buf, len);
    }

    /* search available input */
    len = syncsearch(&(state->have), strm->next_in, strm->avail_in);
    strm->avail_in -= len;
    strm->next_in += len;
    strm->total_in += len;

    /* return no joy or set up to restart inflate() on a new block */
    if (state->have != 4) return Z_DATA_ERROR;
    in = strm->total_in;  out = strm->total_out;
    inflateReset(strm);
    strm->total_in = in;  strm->total_out = out;
    state->mode = TYPE;
    return Z_OK;
}

/*
   Returns true if inflate is currently at the end of a block generated by
   Z_SYNC_FLUSH or Z_FULL_FLUSH. This function is used by one PPP
   implementation to provide an additional safety check. PPP uses
   Z_SYNC_FLUSH but removes the length bytes of the resulting empty stored
   block. When decompressing, PPP checks that at the end of input packet,
   inflate is waiting for these length bytes.
 */
int ZEXPORT inflateSyncPoint(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;
    return state->mode == STORED && state->bits == 0;
}

int ZEXPORT inflateCopy(dest, source)
z_streamp dest;
z_streamp source;
{
    struct inflate_state FAR *state;
    struct inflate_state FAR *copy;
    unsigned char FAR *window;
    unsigned wsize;

    /* check input */
    if (dest == Z_NULL || source == Z_NULL || source->state == Z_NULL ||
        source->zalloc == (alloc_func)0 || source->zfree == (free_func)0)
        return Z_STREAM_ERROR;
    state = (struct inflate_state FAR *)source->state;

    /* allocate space */
    copy = (struct inflate_state FAR *)
           ZALLOC(source, 1, sizeof(struct inflate_state));
    if (copy == Z_NULL) return Z_MEM_ERROR;
    window = Z_NULL;
    if (state->window != Z_NULL) {
        window = (unsigned char FAR *)
                 ZALLOC(source, 1U << state->wbits, sizeof(unsigned char));
        if (window == Z_NULL) {
            ZFREE(source, copy);
            return Z_MEM_ERROR;
        }
    }

    /* copy state */
    zmemcpy(dest, source, sizeof(z_stream));
    zmemcpy(copy, state, sizeof(struct inflate_state));
    if (state->lencode >= state->codes &&
        state->lencode <= state->codes + ENOUGH - 1) {
        copy->lencode = copy->codes + (state->lencode - state->codes);
        copy->distcode = copy->codes + (state->distcode - state->codes);
    }
    copy->next = copy->codes + (state->next - state->codes);
    if (window != Z_NULL) {
        wsize = 1U << state->wbits;
        zmemcpy(window, state->window, wsize);
    }
    copy->window = window;
    dest->state = (struct internal_state FAR *)copy;
    return Z_OK;
}

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
视频在线观看91| 国内精品伊人久久久久av影院| 亚洲乱码国产乱码精品精98午夜| 日韩久久精品一区| 精品国产乱码久久久久久影片| 精品精品欲导航| 日本一区二区免费在线观看视频| xfplay精品久久| 亚洲女人****多毛耸耸8| 亚洲国产精品欧美一二99| 午夜精品久久久久久不卡8050| 日韩福利视频网| 国产精品996| 欧美人伦禁忌dvd放荡欲情| 欧美成人精品福利| 综合色中文字幕| 日本欧美久久久久免费播放网| 国产白丝网站精品污在线入口| 在线播放日韩导航| 亚洲第一福利视频在线| 99热99精品| 中文一区二区完整视频在线观看| 蜜桃精品视频在线| 成人综合婷婷国产精品久久蜜臀| 色婷婷av久久久久久久| 久久久亚洲高清| 亚洲最大成人网4388xx| 国产成+人+日韩+欧美+亚洲| 欧美一区二区日韩| 日本不卡的三区四区五区| 欧美性欧美巨大黑白大战| 中文字幕一区二区在线观看| 不卡视频在线看| 综合网在线视频| 成人网男人的天堂| 欧美精品一区二区三区视频 | 午夜精品国产更新| 欧美精品一区二区三区蜜桃 | 午夜视频在线观看一区二区| 风间由美性色一区二区三区| 欧美一区二区久久久| 亚洲国产aⅴ成人精品无吗| av福利精品导航| 国产精品伦理一区二区| 盗摄精品av一区二区三区| 欧美三级蜜桃2在线观看| 午夜亚洲福利老司机| 欧美精品1区2区| 日本大胆欧美人术艺术动态| 91精品综合久久久久久| 久久精品国产久精国产| 久久久无码精品亚洲日韩按摩| 精品一区二区三区香蕉蜜桃| 欧美色综合网站| 亚洲欧洲av一区二区三区久久| 九九视频精品免费| 中文字幕中文乱码欧美一区二区 | 麻豆国产一区二区| 国产午夜亚洲精品羞羞网站| www.亚洲激情.com| 日韩精品免费专区| 国产日产欧美一区二区视频| 91小视频在线免费看| 丝袜国产日韩另类美女| 亚洲精品视频在线观看网站| 91精品国产综合久久久久久漫画| 国内外精品视频| 日韩一区在线播放| 日韩精品中文字幕一区| 99re6这里只有精品视频在线观看| 婷婷开心激情综合| 久久久久国产精品免费免费搜索| 在线免费视频一区二区| 日本欧美在线看| 亚洲愉拍自拍另类高清精品| 精品国产成人在线影院| 97久久精品人人澡人人爽| 亚洲精品菠萝久久久久久久| 久久亚洲春色中文字幕久久久| 欧美在线视频全部完| 成人精品在线视频观看| 韩国av一区二区三区| 捆绑变态av一区二区三区| 亚洲综合在线第一页| 国产精品国产三级国产aⅴ入口 | 国产在线视频一区二区| 免费一级片91| 日本v片在线高清不卡在线观看| 亚洲黄色免费电影| 亚洲欧洲日产国码二区| 欧美一区三区二区| 欧美一区二区黄色| 欧美日韩国产中文| 777xxx欧美| 欧美美女一区二区| 色偷偷久久一区二区三区| 国产在线视视频有精品| 亚洲午夜久久久| 日本aⅴ精品一区二区三区| 一区二区三区四区不卡视频 | 国产欧美日韩在线看| 国产调教视频一区| 久久久99精品久久| 久久久精品免费网站| 日韩一级黄色大片| 日韩视频一区二区在线观看| 精品视频在线免费看| 99精品视频中文字幕| 午夜精品福利一区二区三区av| 青娱乐精品视频| 国产成人av一区二区三区在线| 国产老妇另类xxxxx| 欧洲人成人精品| 欧美电视剧免费观看| 欧美亚洲国产一区二区三区va| 91在线视频免费91| 久久久久久一二三区| 国产精品全国免费观看高清| 午夜天堂影视香蕉久久| 国产精品911| 欧美一区二区三区四区视频| 精品国产网站在线观看| 日本亚洲最大的色成网站www| 国产成人aaa| 日韩av二区在线播放| 成人黄色av网站在线| 欧美猛男男办公室激情| 国产精品高潮呻吟| 国内外成人在线视频| 欧美吞精做爰啪啪高潮| 亚洲伊人色欲综合网| 成人sese在线| 久久久九九九九| 国产成人精品www牛牛影视| 日韩三级免费观看| 夜夜亚洲天天久久| 欧美最猛黑人xxxxx猛交| 亚洲小说春色综合另类电影| 国产成人aaa| 性做久久久久久| 欧美精品久久99久久在免费线 | 毛片av中文字幕一区二区| jlzzjlzz亚洲日本少妇| 亚洲丝袜美腿综合| 成人午夜碰碰视频| 亚洲在线观看免费| 欧美不卡一区二区| 国产精品夜夜嗨| 成a人片国产精品| 亚洲一区二区三区视频在线播放| 欧美日韩在线不卡| 视频一区二区国产| 精品日韩99亚洲| 成人动漫av在线| 亚洲a一区二区| 国产片一区二区| 在线播放日韩导航| aaa国产一区| 日本成人中文字幕| 亚洲裸体在线观看| 久久综合色一综合色88| 91免费观看视频在线| 麻豆成人av在线| 一区二区高清在线| 国产精品视频第一区| 麻豆国产欧美一区二区三区| 久久久久久夜精品精品免费| 91精品91久久久中77777| 亚洲成人综合网站| 欧美喷潮久久久xxxxx| 成人夜色视频网站在线观看| 久久99精品国产.久久久久| 亚洲精品亚洲人成人网在线播放| 久久久久久久久免费| 91精品一区二区三区在线观看| 成人激情动漫在线观看| 国产精品亚洲午夜一区二区三区| 图片区小说区区亚洲影院| 亚洲欧美日韩在线不卡| 国产精品乱人伦| 成人自拍视频在线观看| 天天影视涩香欲综合网| 亚洲成人av资源| 亚洲一区二区三区四区的| 久久伊人中文字幕| 色视频成人在线观看免| 欧美亚洲综合另类| 欧美日韩电影在线播放| 欧美一区二区三区成人| 日韩欧美国产一区二区三区| 精品免费一区二区三区| 久久精品视频一区| 夜夜亚洲天天久久| 蜜臀av性久久久久av蜜臀妖精 | 国产精品网站在线观看| 欧美一二区视频| 中文字幕 久热精品 视频在线| 欧美一区二区三区在| 欧美日高清视频| 久久久www成人免费无遮挡大片|