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

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

?? gzio.c

?? 一個delphi下壓縮成zip文件的例子
?? C
?? 第 1 頁 / 共 2 頁
字號:
       if (s->mode == 'w') {
           err = deflateEnd(&(s->stream));
       } else if (s->mode == 'r') {
           err = inflateEnd(&(s->stream));
       }
    }
    if (s->file != NULL && fclose(s->file)) {
        err = Z_ERRNO;
    }
    if (s->z_err < 0) err = s->z_err;

    TRYFREE(s->inbuf);
    TRYFREE(s->outbuf);
    TRYFREE(s->path);
    TRYFREE(s);
    return err;
}

/* ===========================================================================
     Reads the given number of uncompressed bytes from the compressed file.
   gzread returns the number of bytes actually read (0 for end of file).
*/
int gzread (file, buf, len)
    gzFile file;
    voidp buf;
    unsigned len;
{
    gz_stream *s = (gz_stream*)file;
    Bytef *start = buf; /* starting point for crc computation */
    Byte  *next_out; /* == stream.next_out but not forced far (for MSDOS) */

    if (s == NULL || s->mode != 'r') return Z_STREAM_ERROR;

    if (s->z_err == Z_DATA_ERROR || s->z_err == Z_ERRNO) return -1;
    if (s->z_err == Z_STREAM_END) return 0;  /* EOF */

    s->stream.next_out = next_out = buf;
    s->stream.avail_out = len;

    while (s->stream.avail_out != 0) {

	if (s->transparent) {
	    /* Copy first the lookahead bytes: */
	    uInt n = s->stream.avail_in;
	    if (n > s->stream.avail_out) n = s->stream.avail_out;
	    if (n > 0) {
		zmemcpy(s->stream.next_out, s->stream.next_in, n);
		next_out += n;
		s->stream.next_out = next_out;
		s->stream.next_in   += n;
		s->stream.avail_out -= n;
		s->stream.avail_in  -= n;
	    }
	    if (s->stream.avail_out > 0) {
		s->stream.avail_out -= fread(next_out, 1, s->stream.avail_out,
					     s->file);
	    }
	    return (int)(len - s->stream.avail_out);
	}
        if (s->stream.avail_in == 0 && !s->z_eof) {

            errno = 0;
            s->stream.avail_in = fread(s->inbuf, 1, Z_BUFSIZE, s->file);
            if (s->stream.avail_in == 0) {
                s->z_eof = 1;
		if (ferror(s->file)) {
		    s->z_err = Z_ERRNO;
		    break;
		}
            }
            s->stream.next_in = s->inbuf;
        }
        s->z_err = inflate(&(s->stream), Z_NO_FLUSH);

	if (s->z_err == Z_STREAM_END) {
	    /* Check CRC and original size */
	    s->crc = crc32(s->crc, start, (uInt)(s->stream.next_out - start));
	    start = s->stream.next_out;

	    if (getLong(s) != s->crc || getLong(s) != s->stream.total_out) {
		s->z_err = Z_DATA_ERROR;
	    } else {
		/* Check for concatenated .gz files: */
		check_header(s);
		if (s->z_err == Z_OK) {
		    inflateReset(&(s->stream));
		    s->crc = crc32(0L, Z_NULL, 0);
		}
	    }
	}
	if (s->z_err != Z_OK || s->z_eof) break;
    }
    s->crc = crc32(s->crc, start, (uInt)(s->stream.next_out - start));

    return (int)(len - s->stream.avail_out);
}

/* ===========================================================================
     Writes the given number of uncompressed bytes into the compressed file.
   gzwrite returns the number of bytes actually written (0 in case of error).
*/
int gzwrite (file, buf, len)
    gzFile file;
    const voidp buf;
    unsigned len;
{
    gz_stream *s = (gz_stream*)file;

    if (s == NULL || s->mode != 'w') return Z_STREAM_ERROR;

    s->stream.next_in = buf;
    s->stream.avail_in = len;

    while (s->stream.avail_in != 0) {

        if (s->stream.avail_out == 0) {

            s->stream.next_out = s->outbuf;
            if (fwrite(s->outbuf, 1, Z_BUFSIZE, s->file) != Z_BUFSIZE) {
                s->z_err = Z_ERRNO;
                break;
            }
            s->stream.avail_out = Z_BUFSIZE;
        }
        s->z_err = deflate(&(s->stream), Z_NO_FLUSH);
        if (s->z_err != Z_OK) break;
    }
    s->crc = crc32(s->crc, buf, len);

    return (int)(len - s->stream.avail_in);
}

/* ===========================================================================
     Flushes all pending output into the compressed file. The parameter
   flush is as in the deflate() function.
     gzflush should be called only when strictly necessary because it can
   degrade compression.
*/
int gzflush (file, flush)
    gzFile file;
    int flush;
{
    uInt len;
    int done = 0;
    gz_stream *s = (gz_stream*)file;

    if (s == NULL || s->mode != 'w') return Z_STREAM_ERROR;

    s->stream.avail_in = 0; /* should be zero already anyway */

    for (;;) {
        len = Z_BUFSIZE - s->stream.avail_out;

        if (len != 0) {
            if ((uInt)fwrite(s->outbuf, 1, len, s->file) != len) {
                s->z_err = Z_ERRNO;
                return Z_ERRNO;
            }
            s->stream.next_out = s->outbuf;
            s->stream.avail_out = Z_BUFSIZE;
        }
        if (done) break;
        s->z_err = deflate(&(s->stream), flush);

        /* deflate has finished flushing only when it hasn't used up
         * all the available space in the output buffer: 
         */
        done = (s->stream.avail_out != 0 || s->z_err == Z_STREAM_END);
 
        if (s->z_err != Z_OK && s->z_err != Z_STREAM_END) break;
    }
    fflush(s->file);
    return  s->z_err == Z_STREAM_END ? Z_OK : s->z_err;
}

/* ===========================================================================
   Outputs a long in LSB order to the given file
*/
local void putLong (file, x)
    FILE *file;
    uLong x;
{
    int n;
    for (n = 0; n < 4; n++) {
        fputc((int)(x & 0xff), file);
        x >>= 8;
    }
}

/* ===========================================================================
   Reads a long in LSB order from the given gz_stream. Sets 
*/
local uLong getLong (s)
    gz_stream *s;
{
    uLong x = (uLong)get_byte(s);
    int c;

    x += ((uLong)get_byte(s))<<8;
    x += ((uLong)get_byte(s))<<16;
    c = get_byte(s);
    if (c == EOF) s->z_err = Z_DATA_ERROR;
    x += ((uLong)c)<<24;
    return x;
}

/* ===========================================================================
     Flushes all pending output if necessary, closes the compressed file
   and deallocates all the (de)compression state.
*/
int gzclose (file)
    gzFile file;
{
    int err;
    gz_stream *s = (gz_stream*)file;

    if (s == NULL) return Z_STREAM_ERROR;

    if (s->mode == 'w') {
        err = gzflush (file, Z_FINISH);
        if (err != Z_OK) return destroy(file);

        putLong (s->file, s->crc);
        putLong (s->file, s->stream.total_in);

    }
    return destroy(file);
}

/* ===========================================================================
     Returns the error message for the last error which occured on the
   given compressed file. errnum is set to zlib error number. If an
   error occured in the file system and not in the compression library,
   errnum is set to Z_ERRNO and the application may consult errno
   to get the exact error code.
*/
const char*  gzerror (file, errnum)
    gzFile file;
    int *errnum;
{
    char *m;
    gz_stream *s = (gz_stream*)file;

    if (s == NULL) {
        *errnum = Z_STREAM_ERROR;
        return (const char*)ERR_MSG(Z_STREAM_ERROR);
    }
    *errnum = s->z_err;
    if (*errnum == Z_OK) return (const char*)"";

    m =  (char*)(*errnum == Z_ERRNO ? zstrerror(errno) : s->stream.msg);

    if (m == NULL || *m == '\0') m = (char*)ERR_MSG(s->z_err);

    TRYFREE(s->msg);
    s->msg = (char*)ALLOC(strlen(s->path) + strlen(m) + 3);
    strcpy(s->msg, s->path);
    strcat(s->msg, ": ");
    strcat(s->msg, m);
    return (const char*)s->msg;
}

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
日韩欧美一区二区免费| 亚洲精品一区二区三区99| 日韩精品一区二区三区swag| 国产精品亚洲一区二区三区在线| 精品视频在线免费| 中文字幕一区二区三区精华液 | 日韩avvvv在线播放| 色噜噜偷拍精品综合在线| 中文字幕一区二区三区精华液 | 欧美主播一区二区三区| 一区二区三区在线视频观看| 99精品国产热久久91蜜凸| 国产亚洲精品7777| 国产成人精品综合在线观看| 久久久久久日产精品| 国产在线看一区| 欧美日免费三级在线| 一区二区理论电影在线观看| 337p亚洲精品色噜噜| 久久精品免视看| 欧美三区免费完整视频在线观看| 国产不卡视频在线播放| 91精品午夜视频| 成人黄色777网| 中文字幕在线观看一区| 日韩一区二区在线看片| 青草av.久久免费一区| 日本精品一级二级| 国产传媒一区在线| 日韩av中文字幕一区二区三区| **网站欧美大片在线观看| 日韩精品专区在线| 91.xcao| 色哟哟日韩精品| 丁香婷婷综合五月| 蜜臀av一区二区| 成人精品鲁一区一区二区| 日韩精品一二三| 国产亚洲短视频| 91精品蜜臀在线一区尤物| 色美美综合视频| 色婷婷综合在线| 国产成人自拍高清视频在线免费播放| 日韩激情在线观看| 亚洲电影第三页| 亚洲一二三专区| 日本黄色一区二区| 高潮精品一区videoshd| 国产一区二区三区综合| 奇米四色…亚洲| 亚洲成人资源在线| 亚洲无线码一区二区三区| 91亚洲男人天堂| 成人性生交大合| 高清beeg欧美| 成人激情综合网站| 成人激情校园春色| av男人天堂一区| 亚洲狠狠爱一区二区三区| 自拍偷拍欧美精品| 亚洲色图视频网| 中文字幕亚洲综合久久菠萝蜜| 亚洲国产精品传媒在线观看| 久久精品夜夜夜夜久久| 久久人人爽爽爽人久久久| 精品国产亚洲在线| 欧美mv日韩mv亚洲| www日韩大片| 国产亚洲精品aa| 中文字幕人成不卡一区| 成人欧美一区二区三区白人| 国产精品久久久久影院| 91香蕉视频mp4| 91麻豆精品视频| 欧美日韩高清影院| 日韩三级在线观看| 久久久久久久精| 国产精品理论在线观看| 最新国产成人在线观看| 亚洲国产乱码最新视频 | 久久99热这里只有精品| 久久福利视频一区二区| 丰满岳乱妇一区二区三区| 不卡一区二区三区四区| 精品视频色一区| 日韩视频一区二区在线观看| 久久久亚洲午夜电影| 国产精品美女www爽爽爽| 亚洲欧美日韩人成在线播放| 亚洲二区在线视频| 激情欧美一区二区三区在线观看| 国产在线精品一区二区不卡了| 成+人+亚洲+综合天堂| 欧美日韩一二三区| 久久久一区二区| 亚洲综合一二三区| 精久久久久久久久久久| 91亚洲精品乱码久久久久久蜜桃 | 欧美日韩国产a| 久久精品夜色噜噜亚洲aⅴ| 亚洲精品免费在线| 久久精品二区亚洲w码| 97久久超碰国产精品电影| 777a∨成人精品桃花网| 欧美激情艳妇裸体舞| 亚洲欧洲综合另类在线| 另类小说综合欧美亚洲| 91在线国产观看| 精品免费视频.| 亚洲一区二区视频| 国产成人免费视| 在线91免费看| 亚洲精品ww久久久久久p站| 麻豆一区二区99久久久久| 一本大道av伊人久久综合| 7777精品伊人久久久大香线蕉超级流畅| 精品免费一区二区三区| 一区2区3区在线看| 色综合久久天天| 久久久久青草大香线综合精品| 亚洲精品乱码久久久久久| 国产美女av一区二区三区| 欧美精品丝袜中出| 亚洲欧美日韩人成在线播放| 国产福利91精品| 欧美久久一区二区| 亚洲精品国产无套在线观| jizzjizzjizz欧美| 久久精品男人天堂av| 蜜臀va亚洲va欧美va天堂| 欧美视频一区二区三区四区| 国产精品嫩草久久久久| 狠狠狠色丁香婷婷综合激情| 欧美影视一区在线| 亚洲丝袜制服诱惑| 国产不卡视频一区二区三区| 欧美xxxxx裸体时装秀| 香蕉av福利精品导航| 色菇凉天天综合网| 亚洲色图清纯唯美| 97se亚洲国产综合自在线不卡| 国产天堂亚洲国产碰碰| 国产自产2019最新不卡| 精品日韩一区二区三区免费视频| 亚洲影院免费观看| 成人黄色av电影| 中文字幕在线不卡视频| 成人动漫av在线| 中文字幕不卡的av| 成人深夜福利app| 中文字幕av资源一区| 成人午夜又粗又硬又大| 中文字幕高清一区| av日韩在线网站| 亚洲天堂中文字幕| 一本大道久久a久久综合| 综合欧美一区二区三区| 91丨九色丨蝌蚪富婆spa| 亚洲欧洲一区二区在线播放| 99v久久综合狠狠综合久久| 中文字幕人成不卡一区| 97久久精品人人爽人人爽蜜臀| 中文字幕av不卡| 不卡的av电影| 亚洲人成精品久久久久久| 欧美影院精品一区| 三级不卡在线观看| 日韩免费高清av| 国产成人精品亚洲午夜麻豆| 中文字幕高清一区| 色天天综合色天天久久| 午夜精品福利一区二区蜜股av | 国产一区二区中文字幕| 久久嫩草精品久久久精品一| 成熟亚洲日本毛茸茸凸凹| 亚洲欧美在线高清| 在线视频一区二区三| 日韩一区精品字幕| 欧美成人一区二区| 国产91丝袜在线播放| 中文字幕综合网| 欧美性色黄大片| 麻豆91在线看| 中文字幕av资源一区| 91福利国产成人精品照片| 日韩精品电影在线观看| 欧美男同性恋视频网站| 精彩视频一区二区| 中文字幕制服丝袜成人av| 在线国产亚洲欧美| 久久99精品久久久久久动态图| 国产日本一区二区| 欧美三级韩国三级日本一级| 久久99精品久久久久久动态图| 亚洲欧洲日产国产综合网| 欧美一区二区日韩一区二区| 激情综合五月婷婷| 尤物在线观看一区| 精品国产青草久久久久福利| 99麻豆久久久国产精品免费|