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

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

?? inflate.c

?? 一款最完整的工業組態軟源代碼
?? C
?? 第 1 頁 / 共 4 頁
字號:
                strm->msg = (char *)"invalid distance code";
                state->mode = BAD;
                break;
            }
            state->offset = (unsigned)this.val;
            state->extra = (unsigned)(this.op) & 15;
            state->mode = DISTEXT;
        case DISTEXT:
            if (state->extra) {
                NEEDBITS(state->extra);
                state->offset += BITS(state->extra);
                DROPBITS(state->extra);
            }
            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->mode != DICT) return Z_STREAM_ERROR;

    /* check for correct dictionary id */
    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;
}

/*
   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;

    /* 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 */
    *dest = *source;
    *copy = *state;
    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)
        zmemcpy(window, state->window, 1U << state->wbits);
    copy->window = window;
    dest->state = (voidpf)copy;
    return Z_OK;
}

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
欧美一区二区三区婷婷月色 | 亚洲免费成人av| 高清不卡在线观看| 中文字幕不卡在线| 91网站在线观看视频| 亚洲欧美成人一区二区三区| 色八戒一区二区三区| 亚洲一区二区三区在线播放| 欧美日本一区二区三区| 日本不卡123| 久久精品视频一区二区| av电影一区二区| 亚洲成人免费在线| 日韩一区二区三区在线| 国产成人免费视频一区| 中文字幕一区在线| 欧美久久久久久久久久 | 久久成人免费网| 欧美国产一区在线| 欧美性一级生活| 韩国欧美一区二区| 亚洲乱码国产乱码精品精小说| 欧美色图第一页| 国产一区二区三区久久久| 国产精品乱子久久久久| 欧美人伦禁忌dvd放荡欲情| 久久99久久99| 亚洲色图清纯唯美| 精品国产一区二区三区四区四| 成人黄色在线视频| 调教+趴+乳夹+国产+精品| 久久综合九色综合97婷婷女人 | 日本精品一区二区三区四区的功能| 亚洲6080在线| 亚洲婷婷在线视频| 日韩一区二区在线观看视频| 91丨九色porny丨蝌蚪| 久久国产夜色精品鲁鲁99| 国产精品久久久久9999吃药| 欧美一区二区三区视频免费| 菠萝蜜视频在线观看一区| 9191久久久久久久久久久| 久久国产三级精品| 色综合中文字幕国产| 久久久噜噜噜久久中文字幕色伊伊| 99精品久久久久久| 久久狠狠亚洲综合| 视频一区欧美日韩| 日韩理论片在线| 国产欧美精品一区二区三区四区| 欧美日韩亚洲综合一区| 99免费精品在线| 国产在线精品国自产拍免费| 日韩精品电影在线| 午夜精品成人在线视频| 亚洲精选一二三| 最新国产成人在线观看| 国产校园另类小说区| 日韩久久免费av| 91精品国产综合久久久久久久| 一本大道av一区二区在线播放| 福利一区福利二区| 国产精品18久久久久久久网站| 免费看日韩a级影片| 午夜av一区二区| 亚洲免费观看视频| 1024成人网| 国产精品久久久久影视| 国产欧美精品国产国产专区| 欧美精品一区二区在线观看| 日韩一级二级三级| 欧美一级午夜免费电影| 日韩写真欧美这视频| 日韩午夜激情视频| 日韩视频一区二区| 91精品婷婷国产综合久久| 欧美电影在线免费观看| 欧美精品在线视频| 777色狠狠一区二区三区| 在线综合+亚洲+欧美中文字幕| 欧美日韩国产首页| 91麻豆精品国产| 欧美大尺度电影在线| 精品国产乱码久久久久久图片| 精品国产凹凸成av人导航| 精品国产免费视频| 国产精品私人自拍| 亚洲免费观看视频| 亚洲高清免费观看| 日韩成人午夜精品| 精品亚洲国内自在自线福利| 国产精品99久久久久久有的能看| 国产超碰在线一区| 在线一区二区三区四区| 欧美丰满美乳xxx高潮www| 日韩一级免费一区| 国产性做久久久久久| 亚洲美女视频一区| 亚洲国产日产av| 久久国产尿小便嘘嘘尿| 高清不卡一区二区在线| 91福利在线观看| 欧美一区二区三区视频免费播放| 26uuu另类欧美亚洲曰本| 国产精品美女视频| 亚洲国产精品人人做人人爽| 国产午夜三级一区二区三| 色狠狠色狠狠综合| 欧美色男人天堂| 国产性色一区二区| 日韩精品一区二区三区蜜臀| 久久精品亚洲精品国产欧美kt∨| 日本一区二区三区四区| 一区二区三区在线视频免费| 日日夜夜免费精品视频| 色中色一区二区| 欧美日韩精品一区二区三区四区 | 国产欧美日韩中文久久| 视频一区二区国产| 欧美日韩一级大片网址| 亚洲黄色av一区| 99天天综合性| 中文字幕中文在线不卡住| 高清不卡在线观看| 国产丝袜美腿一区二区三区| 狠狠色丁香九九婷婷综合五月| 777a∨成人精品桃花网| 午夜久久福利影院| 欧美久久久影院| 视频一区国产视频| 欧美一区二区在线不卡| 国产成人av福利| 麻豆国产精品一区二区三区| 国产盗摄精品一区二区三区在线 | 亚洲欧美日韩国产成人精品影院| 豆国产96在线|亚洲| 久久久久久9999| 国产在线精品免费| 欧美国产欧美综合| 99精品在线观看视频| 一区二区三区精品| 欧美视频中文字幕| 婷婷丁香激情综合| 精品国产欧美一区二区| 国产成人午夜高潮毛片| 欧美国产1区2区| 99精品视频一区二区| 亚洲一区二区三区四区五区黄| 在线观看免费视频综合| 日韩黄色一级片| 日韩精品综合一本久道在线视频| 精品制服美女丁香| 国产欧美综合在线| 91视频免费播放| 亚洲高清在线精品| 精品少妇一区二区三区| 国产精品123| 亚洲天堂网中文字| 在线观看av一区| 日韩av在线播放中文字幕| 欧美va亚洲va| 不卡的电影网站| 亚洲电影一级黄| 久久亚洲欧美国产精品乐播| 福利91精品一区二区三区| 亚洲欧美激情小说另类| 日韩视频中午一区| 顶级嫩模精品视频在线看| 一区二区在线看| 日韩欧美一区中文| 不卡的看片网站| 首页亚洲欧美制服丝腿| 久久久99久久| 欧美综合亚洲图片综合区| 奇米一区二区三区| 国产精品久久久久三级| 欧美日韩美少妇| 国产一区二区在线视频| 亚洲免费资源在线播放| 精品久久久久久久一区二区蜜臀| 成人国产免费视频| 日韩国产欧美在线观看| 亚洲欧洲日韩在线| 日韩一区二区三区电影 | 欧美精品久久久久久久多人混战| 麻豆国产欧美日韩综合精品二区| 中文字幕一区二区三中文字幕| 欧美日韩国产美女| 成人av在线一区二区三区| 天天影视色香欲综合网老头| 中文字幕av不卡| 日韩三级视频中文字幕| 色999日韩国产欧美一区二区| 老司机精品视频线观看86| 亚洲免费观看在线观看| 国产三级一区二区| 91精品国产综合久久福利| 91欧美激情一区二区三区成人| 美国毛片一区二区三区| 一区二区三区高清在线|