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

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

?? gzjoin.c

?? StormLib是對MPQ文件進行處理的庫 MPQ是暴雪公司的私有的一種壓縮格式
?? C
字號:
/* gzjoin -- command to join gzip files into one gzip file  Copyright (C) 2004 Mark Adler, all rights reserved  version 1.0, 11 Dec 2004  This software is provided 'as-is', without any express or implied  warranty.  In no event will the author be held liable for any damages  arising from the use of this software.  Permission is granted to anyone to use this software for any purpose,  including commercial applications, and to alter it and redistribute it  freely, subject to the following restrictions:  1. The origin of this software must not be misrepresented; you must not     claim that you wrote the original software. If you use this software     in a product, an acknowledgment in the product documentation would be     appreciated but is not required.  2. Altered source versions must be plainly marked as such, and must not be     misrepresented as being the original software.  3. This notice may not be removed or altered from any source distribution.  Mark Adler    madler@alumni.caltech.edu *//* * Change history: * * 1.0  11 Dec 2004     - First version * 1.1  12 Jun 2005     - Changed ssize_t to long for portability *//*   gzjoin takes one or more gzip files on the command line and writes out a   single gzip file that will uncompress to the concatenation of the   uncompressed data from the individual gzip files.  gzjoin does this without   having to recompress any of the data and without having to calculate a new   crc32 for the concatenated uncompressed data.  gzjoin does however have to   decompress all of the input data in order to find the bits in the compressed   data that need to be modified to concatenate the streams.   gzjoin does not do an integrity check on the input gzip files other than   checking the gzip header and decompressing the compressed data.  They are   otherwise assumed to be complete and correct.   Each joint between gzip files removes at least 18 bytes of previous trailer   and subsequent header, and inserts an average of about three bytes to the   compressed data in order to connect the streams.  The output gzip file   has a minimal ten-byte gzip header with no file name or modification time.   This program was written to illustrate the use of the Z_BLOCK option of   inflate() and the crc32_combine() function.  gzjoin will not compile with   versions of zlib earlier than 1.2.3. */#include <stdio.h>      /* fputs(), fprintf(), fwrite(), putc() */#include <stdlib.h>     /* exit(), malloc(), free() */#include <fcntl.h>      /* open() */#include <unistd.h>     /* close(), read(), lseek() */#include "zlib.h"    /* crc32(), crc32_combine(), inflateInit2(), inflate(), inflateEnd() */#define local static/* exit with an error (return a value to allow use in an expression) */local int bail(char *why1, char *why2){    fprintf(stderr, "gzjoin error: %s%s, output incomplete\n", why1, why2);    exit(1);    return 0;}/* -- simple buffered file input with access to the buffer -- */#define CHUNK 32768         /* must be a power of two and fit in unsigned *//* bin buffered input file type */typedef struct {    char *name;             /* name of file for error messages */    int fd;                 /* file descriptor */    unsigned left;          /* bytes remaining at next */    unsigned char *next;    /* next byte to read */    unsigned char *buf;     /* allocated buffer of length CHUNK */} bin;/* close a buffered file and free allocated memory */local void bclose(bin *in){    if (in != NULL) {        if (in->fd != -1)            close(in->fd);        if (in->buf != NULL)            free(in->buf);        free(in);    }}/* open a buffered file for input, return a pointer to type bin, or NULL on   failure */local bin *bopen(char *name){    bin *in;    in = malloc(sizeof(bin));    if (in == NULL)        return NULL;    in->buf = malloc(CHUNK);    in->fd = open(name, O_RDONLY, 0);    if (in->buf == NULL || in->fd == -1) {        bclose(in);        return NULL;    }    in->left = 0;    in->next = in->buf;    in->name = name;    return in;}/* load buffer from file, return -1 on read error, 0 or 1 on success, with   1 indicating that end-of-file was reached */local int bload(bin *in){    long len;    if (in == NULL)        return -1;    if (in->left != 0)        return 0;    in->next = in->buf;    do {        len = (long)read(in->fd, in->buf + in->left, CHUNK - in->left);        if (len < 0)            return -1;        in->left += (unsigned)len;    } while (len != 0 && in->left < CHUNK);    return len == 0 ? 1 : 0;}/* get a byte from the file, bail if end of file */#define bget(in) (in->left ? 0 : bload(in), \                  in->left ? (in->left--, *(in->next)++) : \                    bail("unexpected end of file on ", in->name))/* get a four-byte little-endian unsigned integer from file */local unsigned long bget4(bin *in){    unsigned long val;    val = bget(in);    val += (unsigned long)(bget(in)) << 8;    val += (unsigned long)(bget(in)) << 16;    val += (unsigned long)(bget(in)) << 24;    return val;}/* skip bytes in file */local void bskip(bin *in, unsigned skip){    /* check pointer */    if (in == NULL)        return;    /* easy case -- skip bytes in buffer */    if (skip <= in->left) {        in->left -= skip;        in->next += skip;        return;    }    /* skip what's in buffer, discard buffer contents */    skip -= in->left;    in->left = 0;    /* seek past multiples of CHUNK bytes */    if (skip > CHUNK) {        unsigned left;        left = skip & (CHUNK - 1);        if (left == 0) {            /* exact number of chunks: seek all the way minus one byte to check               for end-of-file with a read */            lseek(in->fd, skip - 1, SEEK_CUR);            if (read(in->fd, in->buf, 1) != 1)                bail("unexpected end of file on ", in->name);            return;        }        /* skip the integral chunks, update skip with remainder */        lseek(in->fd, skip - left, SEEK_CUR);        skip = left;    }    /* read more input and skip remainder */    bload(in);    if (skip > in->left)        bail("unexpected end of file on ", in->name);    in->left -= skip;    in->next += skip;}/* -- end of buffered input functions -- *//* skip the gzip header from file in */local void gzhead(bin *in){    int flags;    /* verify gzip magic header and compression method */    if (bget(in) != 0x1f || bget(in) != 0x8b || bget(in) != 8)        bail(in->name, " is not a valid gzip file");    /* get and verify flags */    flags = bget(in);    if ((flags & 0xe0) != 0)        bail("unknown reserved bits set in ", in->name);    /* skip modification time, extra flags, and os */    bskip(in, 6);    /* skip extra field if present */    if (flags & 4) {        unsigned len;        len = bget(in);        len += (unsigned)(bget(in)) << 8;        bskip(in, len);    }    /* skip file name if present */    if (flags & 8)        while (bget(in) != 0)            ;    /* skip comment if present */    if (flags & 16)        while (bget(in) != 0)            ;    /* skip header crc if present */    if (flags & 2)        bskip(in, 2);}/* write a four-byte little-endian unsigned integer to out */local void put4(unsigned long val, FILE *out){    putc(val & 0xff, out);    putc((val >> 8) & 0xff, out);    putc((val >> 16) & 0xff, out);    putc((val >> 24) & 0xff, out);}/* Load up zlib stream from buffered input, bail if end of file */local void zpull(z_streamp strm, bin *in){    if (in->left == 0)        bload(in);    if (in->left == 0)        bail("unexpected end of file on ", in->name);    strm->avail_in = in->left;    strm->next_in = in->next;}/* Write header for gzip file to out and initialize trailer. */local void gzinit(unsigned long *crc, unsigned long *tot, FILE *out){    fwrite("\x1f\x8b\x08\0\0\0\0\0\0\xff", 1, 10, out);    *crc = crc32(0L, Z_NULL, 0);    *tot = 0;}/* Copy the compressed data from name, zeroing the last block bit of the last   block if clr is true, and adding empty blocks as needed to get to a byte   boundary.  If clr is false, then the last block becomes the last block of   the output, and the gzip trailer is written.  crc and tot maintains the   crc and length (modulo 2^32) of the output for the trailer.  The resulting   gzip file is written to out.  gzinit() must be called before the first call   of gzcopy() to write the gzip header and to initialize crc and tot. */local void gzcopy(char *name, int clr, unsigned long *crc, unsigned long *tot,                  FILE *out){    int ret;                /* return value from zlib functions */    int pos;                /* where the "last block" bit is in byte */    int last;               /* true if processing the last block */    bin *in;                /* buffered input file */    unsigned char *start;   /* start of compressed data in buffer */    unsigned char *junk;    /* buffer for uncompressed data -- discarded */    z_off_t len;            /* length of uncompressed data (support > 4 GB) */    z_stream strm;          /* zlib inflate stream */    /* open gzip file and skip header */    in = bopen(name);    if (in == NULL)        bail("could not open ", name);    gzhead(in);    /* allocate buffer for uncompressed data and initialize raw inflate       stream */    junk = malloc(CHUNK);    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);    if (junk == NULL || ret != Z_OK)        bail("out of memory", "");    /* inflate and copy compressed data, clear last-block bit if requested */    len = 0;    zpull(&strm, in);    start = strm.next_in;    last = start[0] & 1;    if (last && clr)        start[0] &= ~1;    strm.avail_out = 0;    for (;;) {        /* if input used and output done, write used input and get more */        if (strm.avail_in == 0 && strm.avail_out != 0) {            fwrite(start, 1, strm.next_in - start, out);            start = in->buf;            in->left = 0;            zpull(&strm, in);        }        /* decompress -- return early when end-of-block reached */        strm.avail_out = CHUNK;        strm.next_out = junk;        ret = inflate(&strm, Z_BLOCK);        switch (ret) {        case Z_MEM_ERROR:            bail("out of memory", "");        case Z_DATA_ERROR:            bail("invalid compressed data in ", in->name);        }        /* update length of uncompressed data */        len += CHUNK - strm.avail_out;        /* check for block boundary (only get this when block copied out) */        if (strm.data_type & 128) {            /* if that was the last block, then done */            if (last)                break;            /* number of unused bits in last byte */            pos = strm.data_type & 7;            /* find the next last-block bit */            if (pos != 0) {                /* next last-block bit is in last used byte */                pos = 0x100 >> pos;                last = strm.next_in[-1] & pos;                if (last && clr)                    strm.next_in[-1] &= ~pos;            }            else {                /* next last-block bit is in next unused byte */                if (strm.avail_in == 0) {                    /* don't have that byte yet -- get it */                    fwrite(start, 1, strm.next_in - start, out);                    start = in->buf;                    in->left = 0;                    zpull(&strm, in);                }                last = strm.next_in[0] & 1;                if (last && clr)                    strm.next_in[0] &= ~1;            }        }    }    /* update buffer with unused input */    in->left = strm.avail_in;    in->next = strm.next_in;    /* copy used input, write empty blocks to get to byte boundary */    pos = strm.data_type & 7;    fwrite(start, 1, in->next - start - 1, out);    last = in->next[-1];    if (pos == 0 || !clr)        /* already at byte boundary, or last file: write last byte */        putc(last, out);    else {        /* append empty blocks to last byte */        last &= ((0x100 >> pos) - 1);       /* assure unused bits are zero */        if (pos & 1) {            /* odd -- append an empty stored block */            putc(last, out);            if (pos == 1)                putc(0, out);               /* two more bits in block header */            fwrite("\0\0\xff\xff", 1, 4, out);        }        else {            /* even -- append 1, 2, or 3 empty fixed blocks */            switch (pos) {            case 6:                putc(last | 8, out);                last = 0;            case 4:                putc(last | 0x20, out);                last = 0;            case 2:                putc(last | 0x80, out);                putc(0, out);            }        }    }    /* update crc and tot */    *crc = crc32_combine(*crc, bget4(in), len);    *tot += (unsigned long)len;    /* clean up */    inflateEnd(&strm);    free(junk);    bclose(in);    /* write trailer if this is the last gzip file */    if (!clr) {        put4(*crc, out);        put4(*tot, out);    }}/* join the gzip files on the command line, write result to stdout */int main(int argc, char **argv){    unsigned long crc, tot;     /* running crc and total uncompressed length */    /* skip command name */    argc--;    argv++;    /* show usage if no arguments */    if (argc == 0) {        fputs("gzjoin usage: gzjoin f1.gz [f2.gz [f3.gz ...]] > fjoin.gz\n",              stderr);        return 0;    }    /* join gzip files on command line and write to stdout */    gzinit(&crc, &tot, stdout);    while (argc--)        gzcopy(*argv++, argc, &crc, &tot, stdout);    /* done */    return 0;}

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
亚洲精品成人在线| 国产欧美一区二区精品秋霞影院| 欧美一级日韩一级| 国产亚洲综合性久久久影院| 亚洲免费大片在线观看| 日韩精品五月天| 成人免费高清视频在线观看| 欧美日韩中文另类| 久久九九影视网| 亚洲一二三区不卡| 国产剧情一区在线| 欧美三级欧美一级| 国产日韩精品久久久| 亚洲高清在线精品| 国产成人免费视频网站| 欧美午夜电影网| 国产欧美一二三区| 日本不卡一二三| 99精品视频在线免费观看| 日韩欧美视频一区| 亚洲免费色视频| 国内久久精品视频| 欧美视频三区在线播放| 国产午夜精品久久久久久免费视| 亚洲午夜视频在线| 成人深夜视频在线观看| 欧美一区二视频| 亚洲精品中文在线影院| 国产美女娇喘av呻吟久久| 欧美性xxxxxx少妇| 国产精品全国免费观看高清| 蜜臀av一区二区在线免费观看| 色哟哟亚洲精品| 国产偷国产偷亚洲高清人白洁 | 国产不卡高清在线观看视频| 欧美性大战xxxxx久久久| 欧美激情一区二区三区四区| 日本中文字幕一区| 欧美无砖砖区免费| 亚洲免费在线看| 成人av影视在线观看| 亚洲精品一区二区三区四区高清| 亚洲第一主播视频| 91久久久免费一区二区| 国产精品成人免费精品自在线观看 | 懂色av一区二区在线播放| 欧美一区二区三区小说| 亚洲一区国产视频| 97se狠狠狠综合亚洲狠狠| 国产日产欧美一区二区三区| 久久99精品视频| 91精品国产综合久久福利软件| 一区二区三区色| 91在线视频官网| 国产精品乱人伦一区二区| 国产成人在线电影| 久久人人爽人人爽| 国产精品综合在线视频| 久久老女人爱爱| 久久成人麻豆午夜电影| 欧美一级艳片视频免费观看| 日韩和欧美的一区| 欧美精三区欧美精三区| 调教+趴+乳夹+国产+精品| 欧美亚洲动漫另类| 亚洲第一福利视频在线| 欧美日韩黄视频| 亚洲成年人影院| 欧美精品99久久久**| 亚洲bdsm女犯bdsm网站| 欧美久久久久免费| 日韩电影在线观看一区| 日韩一区二区精品在线观看| 麻豆精品新av中文字幕| 欧美成人伊人久久综合网| 精品一区二区三区影院在线午夜| 欧美成人女星排名| 国产精品99久久久| 中文字幕免费不卡在线| 99久久久国产精品免费蜜臀| 亚洲激情自拍偷拍| 欧美日韩精品一区视频| 奇米精品一区二区三区在线观看| 日韩欧美国产电影| 捆绑紧缚一区二区三区视频| 久久久午夜电影| caoporm超碰国产精品| 一区二区三区四区蜜桃| 8x福利精品第一导航| 国内精品伊人久久久久av一坑 | 91热门视频在线观看| 亚洲免费色视频| 欧美久久久久中文字幕| 六月丁香婷婷久久| 欧美国产欧美综合| 一本到三区不卡视频| 亚洲国产精品综合小说图片区| 欧美一区二区三区影视| 国产精品一区免费在线观看| 综合久久给合久久狠狠狠97色| 欧美亚洲自拍偷拍| 精品中文av资源站在线观看| 国产精品家庭影院| 欧美日韩亚洲另类| 国产麻豆午夜三级精品| 亚洲精品日韩综合观看成人91| 欧美欧美欧美欧美首页| 国产成人免费视频精品含羞草妖精 | 韩国成人精品a∨在线观看| 中文字幕精品一区二区三区精品| 色94色欧美sute亚洲线路二 | 26uuu国产日韩综合| 99久久精品国产一区| 天天综合色天天| 久久久91精品国产一区二区精品| 91欧美一区二区| 日韩电影在线观看网站| 中文字幕乱码一区二区免费| 欧美三级韩国三级日本三斤 | 国产精品不卡一区| 欧美日韩午夜在线视频| 国产成人午夜片在线观看高清观看| 亚洲免费观看高清完整版在线 | 国产盗摄精品一区二区三区在线| 一区二区三区在线观看视频 | 成人精品免费看| 亚洲电影欧美电影有声小说| 国产日产欧产精品推荐色| 欧美日韩一区二区三区四区 | 亚洲一区二区三区免费视频| 26uuu亚洲| 欧美日韩在线免费视频| 成人精品在线视频观看| 日本免费在线视频不卡一不卡二| 国产精品毛片久久久久久| 日韩欧美一二三区| 欧美性受极品xxxx喷水| 国产一区二区三区四| 亚洲国产裸拍裸体视频在线观看乱了 | 免费看欧美美女黄的网站| 成人欧美一区二区三区小说 | 国产大片一区二区| 青青草伊人久久| 亚洲伊人色欲综合网| 中文字幕日本不卡| 天天综合色天天| 亚洲免费高清视频在线| 日本一区二区三区久久久久久久久不 | 一级中文字幕一区二区| 欧美国产一区在线| 欧美va在线播放| 欧美肥妇bbw| 欧美日韩你懂的| 欧美在线视频你懂得| 不卡视频在线观看| 国产乱色国产精品免费视频| 奇米888四色在线精品| 亚洲国产日日夜夜| 亚洲免费av高清| 国产精品高潮久久久久无| 久久女同性恋中文字幕| xf在线a精品一区二区视频网站| 欧美精品第一页| 欧美另类一区二区三区| 91福利小视频| 一本高清dvd不卡在线观看| av激情亚洲男人天堂| av在线综合网| av亚洲精华国产精华| www.激情成人| 91女人视频在线观看| 色综合久久久久久久| 99re成人精品视频| 91香蕉视频mp4| 99re这里都是精品| 色婷婷久久综合| 色94色欧美sute亚洲线路一ni| 96av麻豆蜜桃一区二区| 94-欧美-setu| 色婷婷综合久久| 欧美中文字幕一区二区三区亚洲| 91黄色小视频| 欧美性感一区二区三区| 欧美色网站导航| 欧美肥大bbwbbw高潮| 欧美一区午夜精品| 精品国产91乱码一区二区三区| 精品国产一区二区三区久久影院| 欧美成人a∨高清免费观看| 精品国产凹凸成av人导航| 久久99国产精品尤物| 蜜桃精品视频在线观看| 六月丁香综合在线视频| 狠狠狠色丁香婷婷综合久久五月| 国产美女视频91| 成人亚洲精品久久久久软件| 99在线视频精品| 欧美午夜电影在线播放| 欧美一二三区在线观看| 久久这里只精品最新地址|