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

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

?? gzjoin.c

?? minix操作系統最新版本(3.1.1)的源代碼
?? 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人片一区二区| 国产在线不卡一区| 天天综合色天天综合色h| 亚洲女人的天堂| 国产三级一区二区三区| 91精品国产色综合久久ai换脸| 99久久99精品久久久久久| 国产一区二区在线看| 五月天激情综合| 一区二区激情视频| 中文字幕中文字幕一区| 亚洲精品一区二区在线观看| 欧美日韩精品福利| 色欧美日韩亚洲| av一二三不卡影片| 国产成人精品影院| 国产一区二区剧情av在线| 蜜臀av国产精品久久久久 | 视频一区二区三区入口| 国产精品沙发午睡系列990531| 久久久精品影视| 久久亚洲二区三区| 日韩女优毛片在线| 精品国产青草久久久久福利| 欧美一区二区在线播放| 宅男噜噜噜66一区二区66| 欧美日韩国产在线观看| 欧美精选午夜久久久乱码6080| 欧美视频一区二区三区在线观看 | 亚洲尤物在线视频观看| 亚洲私人黄色宅男| 日韩理论片网站| 亚洲欧美电影院| 亚洲自拍另类综合| 亚洲一区视频在线| 亚洲国产精品视频| 国产精品不卡一区二区三区| 久久九九久久九九| 欧美精品一区二区三区蜜桃视频| 欧美人牲a欧美精品| 欧美日本一区二区在线观看| 91免费观看国产| 色综合天天综合狠狠| 精品一区在线看| 韩国三级中文字幕hd久久精品| 日韩精品乱码免费| 日韩经典一区二区| 视频一区国产视频| 日日噜噜夜夜狠狠视频欧美人| 亚洲第一福利一区| 天天色综合成人网| 日韩福利视频网| 热久久国产精品| 裸体健美xxxx欧美裸体表演| 青青草国产成人99久久| 日韩av在线发布| 国产一二三精品| 91免费观看国产| 在线免费一区三区| 欧洲一区二区三区在线| 日本精品视频一区二区三区| 在线视频中文字幕一区二区| 欧美视频一区二区在线观看| 欧美日本在线播放| 亚洲精品一区二区三区蜜桃下载 | 欧美丰满高潮xxxx喷水动漫| 欧美美女激情18p| 日韩欧美国产综合一区| 精品国产乱码久久| 久久久久久97三级| 中文字幕在线视频一区| 亚洲综合自拍偷拍| 亚洲欧美电影院| 亚洲不卡av一区二区三区| 老司机精品视频在线| 成人综合婷婷国产精品久久免费| 9i在线看片成人免费| 在线观看一区二区视频| 欧美一区二区三区日韩| 国产日韩欧美精品综合| 亚洲精品免费在线播放| 亚洲午夜私人影院| 理论电影国产精品| aaa亚洲精品| 7878成人国产在线观看| 国产日韩精品一区二区三区 | 爽好久久久欧美精品| 国产一区二区三区香蕉| 91免费视频观看| 欧美一区二区三区思思人| 久久精品视频一区二区三区| 午夜精品久久久| 国产大陆精品国产| 欧美日韩免费观看一区二区三区| 欧美r级在线观看| 一区二区三区中文字幕| 国产久卡久卡久卡久卡视频精品| 色噜噜狠狠成人网p站| 日韩美一区二区三区| 亚洲视频在线观看三级| 日韩有码一区二区三区| 欧洲中文字幕精品| 久久久久久久久久久久久女国产乱| 亚洲一区二区三区四区不卡| 国产一区二区在线免费观看| 欧美人妖巨大在线| 国产精品电影院| 国产一区福利在线| 欧美高清视频一二三区| 国产精品不卡在线| 另类小说视频一区二区| 色琪琪一区二区三区亚洲区| 日本一区二区免费在线观看视频| 日韩精品久久久久久| 91免费看视频| 日本一区二区三级电影在线观看| 麻豆一区二区三区| 欧美自拍偷拍午夜视频| 国产精品第一页第二页第三页| 国产自产视频一区二区三区| 欧美三级蜜桃2在线观看| 国产精品久久毛片av大全日韩| 久久99精品国产.久久久久 | 岛国精品一区二区| 日韩午夜在线观看视频| 亚洲一区日韩精品中文字幕| 成人福利视频网站| 久久久欧美精品sm网站| 久久99国产精品免费网站| 欧美视频在线一区| 亚洲免费av网站| 99视频在线精品| 亚洲国产精品成人综合色在线婷婷| 久久99国产精品免费| 日韩一区二区三区观看| 免费在线欧美视频| 欧美一级片在线看| 蜜桃久久av一区| 欧美丰满一区二区免费视频| 亚洲国产日韩一区二区| 欧洲精品在线观看| 樱桃国产成人精品视频| 色婷婷av一区二区三区软件 | 国产精品久久99| 国产成人三级在线观看| 久久午夜色播影院免费高清| 国产老妇另类xxxxx| 日韩一区二区电影| 日韩av网站在线观看| 欧美久久久久久久久| 日本亚洲天堂网| 欧美va亚洲va| 国产精品一区二区在线看| 国产人成一区二区三区影院| 国产成人欧美日韩在线电影| 中文字幕第一区综合| 不卡视频在线看| 18成人在线观看| 欧美精品在线一区二区| 久久电影网站中文字幕| 精品对白一区国产伦| 成人午夜在线播放| 亚洲欧美日韩在线不卡| 欧美日韩一级视频| 日韩国产欧美三级| 欧美sm美女调教| 一本大道综合伊人精品热热| 亚洲电影在线免费观看| 日韩欧美视频一区| 国产不卡视频在线播放| 亚洲色图清纯唯美| 91精品视频网| 国产激情一区二区三区| 亚洲天堂中文字幕| 欧美一区二区播放| 成人免费看黄yyy456| 亚洲一区二区欧美日韩| 日韩欧美国产午夜精品| 成人亚洲精品久久久久软件| 日韩美女精品在线| 欧美日本一道本在线视频| 久久99精品久久久| 亚洲精品国产第一综合99久久| 91精品国产乱码| 国产91富婆露脸刺激对白| 亚洲成在线观看| 久久久91精品国产一区二区精品| 在线观看免费成人| 韩国一区二区在线观看| 自拍偷拍欧美激情|