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

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

?? zran.c

?? ZIP壓縮算法源代碼,可以直接加入C++Project中編譯調用
?? C
?? 第 1 頁 / 共 2 頁
字號:
               except for up to seven bits) -- the totout == 0 provides an
               entry point after the zlib or gzip header, and assures that the
               index always has at least one access point; we avoid creating an
               access point after the last block by checking bit 6 of data_type
             */
            if ((strm.data_type & 128) && !(strm.data_type & 64) &&
                (totout == 0 || totout - last > span)) {
                index = addpoint(index, strm.data_type & 7, totin,
                                 totout, strm.avail_out, window);
                if (index == NULL) {
                    ret = Z_MEM_ERROR;
                    goto build_index_error;
                }
                last = totout;
            }
        } while (strm.avail_in != 0);
    } while (ret != Z_STREAM_END);

    /* clean up and return index (release unused entries in list) */
    (void)inflateEnd(&strm);
    index = realloc(index, sizeof(struct point) * index->have);
    index->size = index->have;
    *built = index;
    return index->size;

    /* return error */
  build_index_error:
    (void)inflateEnd(&strm);
    if (index != NULL)
        free_index(index);
    return ret;
}

/* Use the index to read len bytes from offset into buf, return bytes read or
   negative for error (Z_DATA_ERROR or Z_MEM_ERROR).  If data is requested past
   the end of the uncompressed data, then extract() will return a value less
   than len, indicating how much as actually read into buf.  This function
   should not return a data error unless the file was modified since the index
   was generated.  extract() may also return Z_ERRNO if there is an error on
   reading or seeking the input file. */
local int extract(FILE *in, struct access *index, off_t offset,
                  unsigned char *buf, int len)
{
    int ret, skip;
    z_stream strm;
    struct point *here;
    unsigned char input[CHUNK];
    unsigned char discard[WINSIZE];

    /* proceed only if something reasonable to do */
    if (len < 0)
        return 0;

    /* find where in stream to start */
    here = index->list;
    ret = index->have;
    while (--ret && here[1].out <= offset)
        here++;

    /* initialize file and inflate state to start there */
    strm.zalloc = Z_NULL;
    strm.zfree = Z_NULL;
    strm.opaque = Z_NULL;
    strm.avail_in = 0;
    strm.next_in = Z_NULL;
    ret = inflateInit2(&strm, -15);         /* raw inflate */
    if (ret != Z_OK)
        return ret;
    ret = fseeko(in, here->in - (here->bits ? 1 : 0), SEEK_SET);
    if (ret == -1)
        goto extract_ret;
    if (here->bits) {
        ret = getc(in);
        if (ret == -1) {
            ret = ferror(in) ? Z_ERRNO : Z_DATA_ERROR;
            goto extract_ret;
        }
        (void)inflatePrime(&strm, here->bits, ret >> (8 - here->bits));
    }
    (void)inflateSetDictionary(&strm, here->window, WINSIZE);

    /* skip uncompressed bytes until offset reached, then satisfy request */
    offset -= here->out;
    strm.avail_in = 0;
    skip = 1;                               /* while skipping to offset */
    do {
        /* define where to put uncompressed data, and how much */
        if (offset == 0 && skip) {          /* at offset now */
            strm.avail_out = len;
            strm.next_out = buf;
            skip = 0;                       /* only do this once */
        }
        if (offset > WINSIZE) {             /* skip WINSIZE bytes */
            strm.avail_out = WINSIZE;
            strm.next_out = discard;
            offset -= WINSIZE;
        }
        else if (offset != 0) {             /* last skip */
            strm.avail_out = (unsigned)offset;
            strm.next_out = discard;
            offset = 0;
        }

        /* uncompress until avail_out filled, or end of stream */
        do {
            if (strm.avail_in == 0) {
                strm.avail_in = fread(input, 1, CHUNK, in);
                if (ferror(in)) {
                    ret = Z_ERRNO;
                    goto extract_ret;
                }
                if (strm.avail_in == 0) {
                    ret = Z_DATA_ERROR;
                    goto extract_ret;
                }
                strm.next_in = input;
            }
            ret = inflate(&strm, Z_NO_FLUSH);       /* normal inflate */
            if (ret == Z_NEED_DICT)
                ret = Z_DATA_ERROR;
            if (ret == Z_MEM_ERROR || ret == Z_DATA_ERROR)
                goto extract_ret;
            if (ret == Z_STREAM_END)
                break;
        } while (strm.avail_out != 0);

        /* if reach end of stream, then don't keep trying to get more */
        if (ret == Z_STREAM_END)
            break;

        /* do until offset reached and requested data read, or stream ends */
    } while (skip);

    /* compute number of uncompressed bytes read after offset */
    ret = skip ? 0 : len - strm.avail_out;

    /* clean up and return bytes read or error */
  extract_ret:
    (void)inflateEnd(&strm);
    return ret;
}

/* Demonstrate the use of build_index() and extract() by processing the file
   provided on the command line, and the extracting 16K from about 2/3rds of
   the way through the uncompressed output, and writing that to stdout. */
int main(int argc, char **argv)
{
    int len;
    off_t offset;
    FILE *in;
    struct access *index;
    unsigned char buf[CHUNK];

    /* open input file */
    if (argc != 2) {
        fprintf(stderr, "usage: zran file.gz\n");
        return 1;
    }
    in = fopen(argv[1], "rb");
    if (in == NULL) {
        fprintf(stderr, "zran: could not open %s for reading\n", argv[1]);
        return 1;
    }

    /* build index */
    len = build_index(in, SPAN, &index);
    if (len < 0) {
        fclose(in);
        switch (len) {
        case Z_MEM_ERROR:
            fprintf(stderr, "zran: out of memory\n");
            break;
        case Z_DATA_ERROR:
            fprintf(stderr, "zran: compressed data error in %s\n", argv[1]);
            break;
        case Z_ERRNO:
            fprintf(stderr, "zran: read error on %s\n", argv[1]);
            break;
        default:
            fprintf(stderr, "zran: error %d while building index\n", len);
        }
        return 1;
    }
    fprintf(stderr, "zran: built index with %d access points\n", len);

    /* use index by reading some bytes from an arbitrary offset */
    offset = (index->list[index->have - 1].out << 1) / 3;
    len = extract(in, index, offset, buf, CHUNK);
    if (len < 0)
        fprintf(stderr, "zran: extraction failed: %s error\n",
                len == Z_MEM_ERROR ? "out of memory" : "input corrupted");
    else {
        fwrite(buf, 1, len, stdout);
        fprintf(stderr, "zran: extracted %d bytes at %llu\n", len, offset);
    }

    /* clean up and exit */
    free_index(index);
    fclose(in);
    return 0;
}

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
8x福利精品第一导航| 国产人久久人人人人爽| 九九视频精品免费| 亚洲激情自拍偷拍| 国产欧美一区二区三区鸳鸯浴 | 国产成都精品91一区二区三| 亚洲妇熟xx妇色黄| 亚洲人一二三区| 国产欧美中文在线| 精品福利在线导航| 欧美老肥妇做.爰bbww| 91在线播放网址| 粉嫩av一区二区三区粉嫩| 日本sm残虐另类| 视频一区视频二区中文| 一区二区三区精品视频| 国产精品麻豆网站| 久久久久久久久伊人| 欧美大片一区二区三区| 91精品在线一区二区| 欧美日韩激情在线| 欧美性三三影院| 在线观看免费成人| 91国模大尺度私拍在线视频 | 6080国产精品一区二区| 欧美午夜一区二区三区免费大片| 99在线视频精品| 成人小视频免费在线观看| 免费不卡在线视频| 午夜av一区二区三区| 亚洲女与黑人做爰| 亚洲色大成网站www久久九九| 中文一区在线播放| 国产精品久久久久久久浪潮网站| 欧美韩日一区二区三区| 国产亚洲一本大道中文在线| 久久综合色一综合色88| 欧美精品一区二区三区蜜桃| 欧美videos大乳护士334| 日韩精品一区二区在线| 欧美电影免费观看高清完整版| 3751色影院一区二区三区| 欧美嫩在线观看| 欧美一级黄色片| 精品99999| 久久精品一区四区| 国产视频视频一区| 日韩毛片高清在线播放| 亚洲欧美日韩国产成人精品影院| 亚洲色图欧洲色图| 亚洲综合丝袜美腿| 日日摸夜夜添夜夜添亚洲女人| 蜜桃精品视频在线| 国产高清在线观看免费不卡| av动漫一区二区| 欧美天堂亚洲电影院在线播放| 777xxx欧美| 久久综合色婷婷| 成人免费在线播放视频| 亚洲一区二区视频| 日韩不卡在线观看日韩不卡视频| 国产制服丝袜一区| 99视频在线精品| 欧美精品v日韩精品v韩国精品v| 日韩欧美电影在线| 国产精品久久777777| 亚洲综合丁香婷婷六月香| 奇米综合一区二区三区精品视频| 国产精品自拍一区| 91欧美激情一区二区三区成人| 精品视频一区二区不卡| 日韩美女在线视频| 18欧美亚洲精品| 日韩电影免费一区| 国产福利一区二区| 欧洲精品在线观看| 久久久www免费人成精品| 亚洲精品视频观看| 久久精品国产一区二区三| 成人h动漫精品一区二区| 欧美日韩精品一区二区三区| 欧美大片拔萝卜| 亚洲欧洲韩国日本视频| 美国十次了思思久久精品导航| 国产黄人亚洲片| 欧美三级三级三级爽爽爽| 久久久久久久综合| 五月天中文字幕一区二区| 国产suv精品一区二区三区| 欧美高清视频不卡网| 国产精品欧美久久久久一区二区| 日韩精品午夜视频| 91在线国内视频| 亚洲精品一区二区三区蜜桃下载 | 久久久久久久久一| 亚洲一区二区在线观看视频 | 免费xxxx性欧美18vr| a亚洲天堂av| 久久亚洲精精品中文字幕早川悠里| 亚洲特黄一级片| 国产精品18久久久久久久久久久久 | 久久久蜜桃精品| 石原莉奈在线亚洲二区| 色综合中文综合网| 亚洲高清免费在线| 成人免费毛片嘿嘿连载视频| 欧美成人video| 亚洲午夜免费福利视频| 成人综合在线网站| 久久只精品国产| 日韩黄色小视频| 欧美三级欧美一级| 亚洲免费看黄网站| 99vv1com这只有精品| 精品国产sm最大网站| 日韩福利视频导航| 欧美日韩一区二区三区视频| 亚洲美女视频一区| 成人午夜在线免费| 国产欧美日韩在线| 国产呦萝稀缺另类资源| 日韩女优毛片在线| 日韩精品三区四区| 宅男噜噜噜66一区二区66| 亚洲国产精品嫩草影院| 欧美影院一区二区三区| 亚洲伦在线观看| 91蜜桃在线观看| 亚洲女人小视频在线观看| 99精品国产热久久91蜜凸| 国产精品久久久久影视| 成人sese在线| 亚洲品质自拍视频| 91在线一区二区三区| 亚洲欧美日韩国产中文在线| 色婷婷综合久久久中文一区二区| 国产精品成人在线观看| 91麻豆免费看| 亚洲永久免费视频| 欧美老女人第四色| 免费高清在线视频一区·| 欧美xxxxxxxxx| 国模大尺度一区二区三区| 久久丝袜美腿综合| 成人小视频在线| 亚洲精品亚洲人成人网在线播放| 欧美中文字幕亚洲一区二区va在线| 亚洲图片有声小说| 91麻豆精品国产自产在线观看一区| 日韩精品一级中文字幕精品视频免费观看 | 日韩精品久久理论片| 精品久久久网站| 成人一区二区三区| 日韩伦理免费电影| 欧美日韩久久久一区| 日欧美一区二区| 亚洲精品一区二区三区福利| 国产不卡视频在线观看| 亚洲欧美综合色| 欧美午夜不卡视频| 久久99精品久久久久久久久久久久| 久久久精品日韩欧美| 99视频一区二区| 天天射综合影视| 国产亚洲精品超碰| 在线观看日韩av先锋影音电影院| 日本不卡的三区四区五区| www国产成人| 色嗨嗨av一区二区三区| 麻豆精品国产传媒mv男同| 国产精品久久网站| 69精品人人人人| 国产成人av一区| 午夜天堂影视香蕉久久| 久久久99久久| 欧美日韩五月天| 丁香婷婷综合激情五月色| 亚洲已满18点击进入久久| 日韩欧美激情在线| 94-欧美-setu| 老鸭窝一区二区久久精品| 亚洲三级电影网站| 91精品国产91久久久久久一区二区| 高清日韩电视剧大全免费| 性欧美疯狂xxxxbbbb| 亚洲国产精品精华液ab| 欧美精品久久一区| a在线播放不卡| 经典一区二区三区| 一区av在线播放| 国产精品人成在线观看免费| 91精品国产色综合久久不卡蜜臀 | 青青青伊人色综合久久| 国产精品毛片无遮挡高清| 日韩精品一区二区在线观看| 在线欧美一区二区| 懂色av中文一区二区三区| 美女脱光内衣内裤视频久久网站| 亚洲欧美激情插| 中文字幕第一区第二区|