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

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

?? gun.c

?? StormLib是對MPQ文件進行處理的庫 MPQ是暴雪公司的私有的一種壓縮格式
?? C
?? 第 1 頁 / 共 2 頁
字號:
/* gun.c -- simple gunzip to give an example of the use of inflateBack() * Copyright (C) 2003, 2005 Mark Adler * For conditions of distribution and use, see copyright notice in zlib.h   Version 1.3  12 June 2005  Mark Adler *//* Version history:   1.0  16 Feb 2003  First version for testing of inflateBack()   1.1  21 Feb 2005  Decompress concatenated gzip streams                     Remove use of "this" variable (C++ keyword)                     Fix return value for in()                     Improve allocation failure checking                     Add typecasting for void * structures                     Add -h option for command version and usage                     Add a bunch of comments   1.2  20 Mar 2005  Add Unix compress (LZW) decompression                     Copy file attributes from input file to output file   1.3  12 Jun 2005  Add casts for error messages [Oberhumer] *//*   gun [ -t ] [ name ... ]   decompresses the data in the named gzip files.  If no arguments are given,   gun will decompress from stdin to stdout.  The names must end in .gz, -gz,   .z, -z, _z, or .Z.  The uncompressed data will be written to a file name   with the suffix stripped.  On success, the original file is deleted.  On   failure, the output file is deleted.  For most failures, the command will   continue to process the remaining names on the command line.  A memory   allocation failure will abort the command.  If -t is specified, then the   listed files or stdin will be tested as gzip files for integrity (without   checking for a proper suffix), no output will be written, and no files   will be deleted.   Like gzip, gun allows concatenated gzip streams and will decompress them,   writing all of the uncompressed data to the output.  Unlike gzip, gun allows   an empty file on input, and will produce no error writing an empty output   file.   gun will also decompress files made by Unix compress, which uses LZW   compression.  These files are automatically detected by virtue of their   magic header bytes.  Since the end of Unix compress stream is marked by the   end-of-file, they cannot be concantenated.  If a Unix compress stream is   encountered in an input file, it is the last stream in that file.   Like gunzip and uncompress, the file attributes of the orignal compressed   file are maintained in the final uncompressed file, to the extent that the   user permissions allow it.   On my Mac OS X PowerPC G4, gun is almost twice as fast as gunzip (version   1.2.4) is on the same file, when gun is linked with zlib 1.2.2.  Also the   LZW decompression provided by gun is about twice as fast as the standard   Unix uncompress command. *//* external functions and related types and constants */#include <stdio.h>          /* fprintf() */#include <stdlib.h>         /* malloc(), free() */#include <string.h>         /* strerror(), strcmp(), strlen(), memcpy() */#include <errno.h>          /* errno */#include <fcntl.h>          /* open() */#include <unistd.h>         /* read(), write(), close(), chown(), unlink() */#include <sys/types.h>#include <sys/stat.h>       /* stat(), chmod() */#include <utime.h>          /* utime() */#include "zlib.h"           /* inflateBackInit(), inflateBack(), */                            /* inflateBackEnd(), crc32() *//* function declaration */#define local static/* buffer constants */#define SIZE 32768U         /* input and output buffer sizes */#define PIECE 16384         /* limits i/o chunks for 16-bit int case *//* structure for infback() to pass to input function in() -- it maintains the   input file and a buffer of size SIZE */struct ind {    int infile;    unsigned char *inbuf;};/* Load input buffer, assumed to be empty, and return bytes loaded and a   pointer to them.  read() is called until the buffer is full, or until it   returns end-of-file or error.  Return 0 on error. */local unsigned in(void *in_desc, unsigned char **buf){    int ret;    unsigned len;    unsigned char *next;    struct ind *me = (struct ind *)in_desc;    next = me->inbuf;    *buf = next;    len = 0;    do {        ret = PIECE;        if ((unsigned)ret > SIZE - len)            ret = (int)(SIZE - len);        ret = (int)read(me->infile, next, ret);        if (ret == -1) {            len = 0;            break;        }        next += ret;        len += ret;    } while (ret != 0 && len < SIZE);    return len;}/* structure for infback() to pass to output function out() -- it maintains the   output file, a running CRC-32 check on the output and the total number of   bytes output, both for checking against the gzip trailer.  (The length in   the gzip trailer is stored modulo 2^32, so it's ok if a long is 32 bits and   the output is greater than 4 GB.) */struct outd {    int outfile;    int check;                  /* true if checking crc and total */    unsigned long crc;    unsigned long total;};/* Write output buffer and update the CRC-32 and total bytes written.  write()   is called until all of the output is written or an error is encountered.   On success out() returns 0.  For a write failure, out() returns 1.  If the   output file descriptor is -1, then nothing is written. */local int out(void *out_desc, unsigned char *buf, unsigned len){    int ret;    struct outd *me = (struct outd *)out_desc;    if (me->check) {        me->crc = crc32(me->crc, buf, len);        me->total += len;    }    if (me->outfile != -1)        do {            ret = PIECE;            if ((unsigned)ret > len)                ret = (int)len;            ret = (int)write(me->outfile, buf, ret);            if (ret == -1)                return 1;            buf += ret;            len -= ret;        } while (len != 0);    return 0;}/* next input byte macro for use inside lunpipe() and gunpipe() */#define NEXT() (have ? 0 : (have = in(indp, &next)), \                last = have ? (have--, (int)(*next++)) : -1)/* memory for gunpipe() and lunpipe() --   the first 256 entries of prefix[] and suffix[] are never used, could   have offset the index, but it's faster to waste the memory */unsigned char inbuf[SIZE];              /* input buffer */unsigned char outbuf[SIZE];             /* output buffer */unsigned short prefix[65536];           /* index to LZW prefix string */unsigned char suffix[65536];            /* one-character LZW suffix */unsigned char match[65280 + 2];         /* buffer for reversed match or gzip                                           32K sliding window *//* throw out what's left in the current bits byte buffer (this is a vestigial   aspect of the compressed data format derived from an implementation that   made use of a special VAX machine instruction!) */#define FLUSHCODE() \    do { \        left = 0; \        rem = 0; \        if (chunk > have) { \            chunk -= have; \            have = 0; \            if (NEXT() == -1) \                break; \            chunk--; \            if (chunk > have) { \                chunk = have = 0; \                break; \            } \        } \        have -= chunk; \        next += chunk; \        chunk = 0; \    } while (0)/* Decompress a compress (LZW) file from indp to outfile.  The compress magic   header (two bytes) has already been read and verified.  There are have bytes   of buffered input at next.  strm is used for passing error information back   to gunpipe().   lunpipe() will return Z_OK on success, Z_BUF_ERROR for an unexpected end of   file, read error, or write error (a write error indicated by strm->next_in   not equal to Z_NULL), or Z_DATA_ERROR for invalid input. */local int lunpipe(unsigned have, unsigned char *next, struct ind *indp,                  int outfile, z_stream *strm){    int last;                   /* last byte read by NEXT(), or -1 if EOF */    int chunk;                  /* bytes left in current chunk */    int left;                   /* bits left in rem */    unsigned rem;               /* unused bits from input */    int bits;                   /* current bits per code */    unsigned code;              /* code, table traversal index */    unsigned mask;              /* mask for current bits codes */    int max;                    /* maximum bits per code for this stream */    int flags;                  /* compress flags, then block compress flag */    unsigned end;               /* last valid entry in prefix/suffix tables */    unsigned temp;              /* current code */    unsigned prev;              /* previous code */    unsigned final;             /* last character written for previous code */    unsigned stack;             /* next position for reversed string */    unsigned outcnt;            /* bytes in output buffer */    struct outd outd;           /* output structure */    /* set up output */    outd.outfile = outfile;    outd.check = 0;    /* process remainder of compress header -- a flags byte */    flags = NEXT();    if (last == -1)        return Z_BUF_ERROR;    if (flags & 0x60) {        strm->msg = (char *)"unknown lzw flags set";        return Z_DATA_ERROR;    }    max = flags & 0x1f;    if (max < 9 || max > 16) {        strm->msg = (char *)"lzw bits out of range";        return Z_DATA_ERROR;    }    if (max == 9)                           /* 9 doesn't really mean 9 */        max = 10;    flags &= 0x80;                          /* true if block compress */    /* clear table */    bits = 9;    mask = 0x1ff;    end = flags ? 256 : 255;    /* set up: get first 9-bit code, which is the first decompressed byte, but       don't create a table entry until the next code */    if (NEXT() == -1)                       /* no compressed data is ok */        return Z_OK;    final = prev = (unsigned)last;          /* low 8 bits of code */    if (NEXT() == -1)                       /* missing a bit */        return Z_BUF_ERROR;    if (last & 1) {                         /* code must be < 256 */        strm->msg = (char *)"invalid lzw code";        return Z_DATA_ERROR;    }    rem = (unsigned)last >> 1;              /* remaining 7 bits */    left = 7;    chunk = bits - 2;                       /* 7 bytes left in this chunk */    outbuf[0] = (unsigned char)final;       /* write first decompressed byte */    outcnt = 1;    /* decode codes */    stack = 0;    for (;;) {        /* if the table will be full after this, increment the code size */        if (end >= mask && bits < max) {            FLUSHCODE();            bits++;            mask <<= 1;            mask++;        }        /* get a code of length bits */        if (chunk == 0)                     /* decrement chunk modulo bits */            chunk = bits;        code = rem;                         /* low bits of code */        if (NEXT() == -1) {                 /* EOF is end of compressed data */            /* write remaining buffered output */            if (outcnt && out(&outd, outbuf, outcnt)) {                strm->next_in = outbuf;     /* signal write error */                return Z_BUF_ERROR;            }            return Z_OK;        }        code += (unsigned)last << left;     /* middle (or high) bits of code */        left += 8;        chunk--;        if (bits > left) {                  /* need more bits */            if (NEXT() == -1)               /* can't end in middle of code */                return Z_BUF_ERROR;            code += (unsigned)last << left; /* high bits of code */            left += 8;            chunk--;        }        code &= mask;                       /* mask to current code length */        left -= bits;                       /* number of unused bits */        rem = (unsigned)last >> (8 - left); /* unused bits from last byte */        /* process clear code (256) */        if (code == 256 && flags) {            FLUSHCODE();            bits = 9;                       /* initialize bits and mask */            mask = 0x1ff;            end = 255;                      /* empty table */            continue;                       /* get next code */        }        /* special code to reuse last match */        temp = code;                        /* save the current code */        if (code > end) {            /* Be picky on the allowed code here, and make sure that the code               we drop through (prev) will be a valid index so that random               input does not cause an exception.  The code != end + 1 check is               empirically derived, and not checked in the original uncompress               code.  If this ever causes a problem, that check could be safely               removed.  Leaving this check in greatly improves gun's ability               to detect random or corrupted input after a compress header.               In any case, the prev > end check must be retained. */            if (code != end + 1 || prev > end) {                strm->msg = (char *)"invalid lzw code";                return Z_DATA_ERROR;            }            match[stack++] = (unsigned char)final;            code = prev;        }        /* walk through linked list to generate output in reverse order */        while (code >= 256) {            match[stack++] = suffix[code];            code = prefix[code];        }        match[stack++] = (unsigned char)code;        final = code;        /* link new table entry */        if (end < mask) {            end++;            prefix[end] = (unsigned short)prev;            suffix[end] = (unsigned char)final;        }        /* set previous code for next iteration */        prev = temp;        /* write output in forward order */        while (stack > SIZE - outcnt) {            while (outcnt < SIZE)                outbuf[outcnt++] = match[--stack];            if (out(&outd, outbuf, outcnt)) {                strm->next_in = outbuf; /* signal write error */

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
在线区一区二视频| 国产亚洲污的网站| 日韩三级.com| 51精品久久久久久久蜜臀| 日韩视频永久免费| 国产精品久线在线观看| 日韩精品一卡二卡三卡四卡无卡| 国模少妇一区二区三区| 风流少妇一区二区| 欧美高清视频一二三区 | 日本韩国欧美一区| 日韩三级伦理片妻子的秘密按摩| 国产午夜精品一区二区三区视频| 午夜精品成人在线| 欧美日韩小视频| 亚洲精品免费在线观看| av一二三不卡影片| 国产精品嫩草99a| 国产成人精品网址| 国产亚洲精久久久久久| 久久精品久久综合| 日韩视频123| 蜜臀av一区二区在线免费观看| 在线观看国产91| 亚洲精品免费一二三区| 色综合视频一区二区三区高清| 国产精品国产三级国产有无不卡| 国产精品小仙女| 久久综合网色—综合色88| 日本不卡视频在线观看| 欧美一级搡bbbb搡bbbb| 蜜臀久久99精品久久久久久9| 91精品国产乱| 久久se这里有精品| 久久伊人中文字幕| 国产成人精品三级| 中文字幕中文字幕一区| av电影一区二区| 一区二区三区在线不卡| 色婷婷国产精品| 偷窥少妇高潮呻吟av久久免费| 欧美日韩久久一区| 久久精品av麻豆的观看方式| 精品久久人人做人人爱| 国产二区国产一区在线观看| 国产精品天美传媒沈樵| 91精品福利视频| 日本一不卡视频| 久久久不卡网国产精品一区| 风流少妇一区二区| 一区二区在线观看视频在线观看| 欧美日韩国产一区二区三区地区| 久久99精品一区二区三区| 欧美国产日韩一二三区| 91啪亚洲精品| 麻豆精品久久久| 国产精品色呦呦| 欧美精品第1页| 国产精品一区二区三区四区| 亚洲毛片av在线| 在线综合视频播放| 成人一级视频在线观看| 一区二区三区四区中文字幕| 日韩午夜精品电影| 99久久er热在这里只有精品66| 亚洲午夜精品在线| 国产亚洲一区二区三区四区| 在线亚洲高清视频| 国产中文字幕一区| 亚洲动漫第一页| 国产精品视频看| 3atv一区二区三区| 91亚洲资源网| 精品一区二区三区免费播放 | 国产亚洲欧美色| 在线免费观看日本欧美| 国产一区二区三区精品欧美日韩一区二区三区 | 久久精品国产精品亚洲综合| 亚洲欧洲精品一区二区精品久久久| 6080亚洲精品一区二区| 99精品国产99久久久久久白柏| 美女任你摸久久| 一区二区免费视频| 国产精品亲子伦对白| 91精品国产综合久久精品麻豆| 国产成人av资源| 免费成人在线播放| 亚洲观看高清完整版在线观看| 久久伊人中文字幕| 日韩精品一区二区三区三区免费| 日本道在线观看一区二区| 国产91高潮流白浆在线麻豆 | 亚洲国产一二三| 国产精品丝袜在线| 久久伊人中文字幕| 精品国产一区二区国模嫣然| 欧美精品少妇一区二区三区| 色哟哟在线观看一区二区三区| 国产99久久久国产精品免费看| 蜜桃av一区二区| 日产国产欧美视频一区精品| 一区二区三区资源| 亚洲女同一区二区| 玉米视频成人免费看| √…a在线天堂一区| 国产精品久久久久一区二区三区| 久久综合精品国产一区二区三区 | 日韩欧美高清一区| 欧美喷潮久久久xxxxx| 欧美日韩精品欧美日韩精品| 欧美撒尿777hd撒尿| 在线精品视频免费观看| 日本韩国精品在线| 在线视频中文字幕一区二区| 欧美羞羞免费网站| 欧美三级资源在线| 在线播放日韩导航| 日韩欧美一级在线播放| 精品国产乱码久久久久久闺蜜 | 国产麻豆精品久久一二三| 精品亚洲aⅴ乱码一区二区三区| 日韩影院在线观看| 久久99精品一区二区三区| 久久99国产精品久久| 国内精品第一页| 成人黄色av电影| 91麻豆国产福利在线观看| 色www精品视频在线观看| 欧美体内she精高潮| 欧美日韩在线播放| 精品久久久久久久人人人人传媒| 日韩欧美资源站| 国产日韩欧美激情| 一区二区三区毛片| 久久精品国产一区二区三区免费看| 国产一区二区伦理片| 成人伦理片在线| 在线观看一区日韩| 欧美va亚洲va在线观看蝴蝶网| 国产视频一区二区在线观看| 亚洲色图在线看| 视频一区国产视频| 国产99久久久久久免费看农村| 色综合色综合色综合| 欧美一级在线观看| 成人欧美一区二区三区黑人麻豆| 亚洲国产另类精品专区| 国产麻豆精品在线观看| 日本久久一区二区| 久久久亚洲精品石原莉奈| 亚洲精品视频在线观看免费| 麻豆国产精品一区二区三区| 成人夜色视频网站在线观看| 欧美午夜电影在线播放| 精品国产一区二区三区四区四 | 国产免费成人在线视频| 最新国产の精品合集bt伙计| 奇米精品一区二区三区四区 | 日韩欧美在线影院| 亚洲天堂成人在线观看| 蜜桃免费网站一区二区三区| 成人av综合一区| 日韩欧美一二三| 一区二区三区在线影院| 国产成人午夜99999| 在线成人免费视频| 亚洲激情在线播放| 成人av资源站| 亚洲精品中文在线影院| 国产精品一区不卡| 日韩一区二区影院| 一区二区在线观看av| 成人禁用看黄a在线| 精品电影一区二区| 奇米一区二区三区av| 欧美自拍偷拍午夜视频| 中文字幕一区二区三| 国产精品白丝av| 欧美不卡视频一区| 日韩va欧美va亚洲va久久| 欧美色男人天堂| 一区二区三区高清| 色婷婷国产精品| 亚洲少妇最新在线视频| 成人看片黄a免费看在线| 久久久久久久综合| 精品一区二区三区在线播放| 5858s免费视频成人| 午夜视频久久久久久| 91国产福利在线| 亚洲综合一二区| 在线视频一区二区免费| 亚洲人成7777| 91啦中文在线观看| 亚洲欧美偷拍三级| 成人激情午夜影院| 日韩毛片在线免费观看| av午夜精品一区二区三区| 中文字幕一区日韩精品欧美| 成人精品国产免费网站|