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

? 歡迎來(lái)到蟲(chóng)蟲(chóng)下載站! | ?? 資源下載 ?? 資源專輯 ?? 關(guān)于我們
? 蟲(chóng)蟲(chóng)下載站

?? gzlog.c

?? minix操作系統(tǒng)最新版本(3.1.1)的源代碼
?? C
字號(hào):
/* * gzlog.c * Copyright (C) 2004 Mark Adler * For conditions of distribution and use, see copyright notice in gzlog.h * version 1.0, 26 Nov 2004 * */#include <string.h>             /* memcmp() */#include <stdlib.h>             /* malloc(), free(), NULL */#include <sys/types.h>          /* size_t, off_t */#include <unistd.h>             /* read(), close(), sleep(), ftruncate(), */                                /* lseek() */#include <fcntl.h>              /* open() */#include <sys/file.h>           /* flock() */#include "zlib.h"               /* deflateInit2(), deflate(), deflateEnd() */#include "gzlog.h"              /* interface */#define local static/* log object structure */typedef struct {    int id;                 /* object identifier */    int fd;                 /* log file descriptor */    off_t extra;            /* offset of extra "ap" subfield */    off_t mark_off;         /* offset of marked data */    off_t last_off;         /* offset of last block */    unsigned long crc;      /* uncompressed crc */    unsigned long len;      /* uncompressed length (modulo 2^32) */    unsigned stored;        /* length of current stored block */} gz_log;#define GZLOGID 19334       /* gz_log object identifier */#define LOCK_RETRY 1            /* retry lock once a second */#define LOCK_PATIENCE 1200      /* try about twenty minutes before forcing *//* acquire a lock on a file */local int lock(int fd){    int patience;    /* try to lock every LOCK_RETRY seconds for LOCK_PATIENCE seconds */    patience = LOCK_PATIENCE;    do {        if (flock(fd, LOCK_EX + LOCK_NB) == 0)            return 0;        (void)sleep(LOCK_RETRY);        patience -= LOCK_RETRY;    } while (patience > 0);    /* we've run out of patience -- give up */    return -1;}/* release lock */local void unlock(int fd){    (void)flock(fd, LOCK_UN);}/* release a log object */local void log_clean(gz_log *log){    unlock(log->fd);    (void)close(log->fd);    free(log);}/* read an unsigned long from a byte buffer little-endian */local unsigned long make_ulg(unsigned char *buf){    int n;    unsigned long val;    val = (unsigned long)(*buf++);    for (n = 8; n < 32; n += 8)        val += (unsigned long)(*buf++) << n;    return val;}/* read an off_t from a byte buffer little-endian */local off_t make_off(unsigned char *buf){    int n;    off_t val;    val = (off_t)(*buf++);    for (n = 8; n < 64; n += 8)        val += (off_t)(*buf++) << n;    return val;}/* write an unsigned long little-endian to byte buffer */local void dice_ulg(unsigned long val, unsigned char *buf){    int n;    for (n = 0; n < 4; n++) {        *buf++ = val & 0xff;        val >>= 8;    }}/* write an off_t little-endian to byte buffer */local void dice_off(off_t val, unsigned char *buf){    int n;    for (n = 0; n < 8; n++) {        *buf++ = val & 0xff;        val >>= 8;    }}/* initial, empty gzip file for appending */local char empty_gz[] = {    0x1f, 0x8b,                 /* magic gzip id */    8,                          /* compression method is deflate */    4,                          /* there is an extra field */    0, 0, 0, 0,                 /* no modification time provided */    0, 0xff,                    /* no extra flags, no OS */    20, 0, 'a', 'p', 16, 0,     /* extra field with "ap" subfield */    32, 0, 0, 0, 0, 0, 0, 0,    /* offset of uncompressed data */    32, 0, 0, 0, 0, 0, 0, 0,    /* offset of last block */    1, 0, 0, 0xff, 0xff,        /* empty stored block (last) */    0, 0, 0, 0,                 /* crc */    0, 0, 0, 0                  /* uncompressed length */};/* initialize a log object with locking */void *gzlog_open(char *path){    unsigned xlen;    unsigned char temp[20];    unsigned sub_len;    int good;    gz_log *log;    /* allocate log structure */    log = malloc(sizeof(gz_log));    if (log == NULL)        return NULL;    log->id = GZLOGID;    /* open file, creating it if necessary, and locking it */    log->fd = open(path, O_RDWR | O_CREAT, 0600);    if (log->fd < 0) {        free(log);        return NULL;    }    if (lock(log->fd)) {        close(log->fd);        free(log);        return NULL;    }    /* if file is empty, write new gzip stream */    if (lseek(log->fd, 0, SEEK_END) == 0) {        if (write(log->fd, empty_gz, sizeof(empty_gz)) != sizeof(empty_gz)) {            log_clean(log);            return NULL;        }    }    /* check gzip header */    (void)lseek(log->fd, 0, SEEK_SET);    if (read(log->fd, temp, 12) != 12 || temp[0] != 0x1f ||        temp[1] != 0x8b || temp[2] != 8 || (temp[3] & 4) == 0) {        log_clean(log);        return NULL;    }    /* process extra field to find "ap" sub-field */    xlen = temp[10] + (temp[11] << 8);    good = 0;    while (xlen) {        if (xlen < 4 || read(log->fd, temp, 4) != 4)            break;        sub_len = temp[2];        sub_len += temp[3] << 8;        xlen -= 4;        if (memcmp(temp, "ap", 2) == 0 && sub_len == 16) {            good = 1;            break;        }        if (xlen < sub_len)            break;        (void)lseek(log->fd, sub_len, SEEK_CUR);        xlen -= sub_len;    }    if (!good) {        log_clean(log);        return NULL;    }    /* read in "ap" sub-field */    log->extra = lseek(log->fd, 0, SEEK_CUR);    if (read(log->fd, temp, 16) != 16) {        log_clean(log);        return NULL;    }    log->mark_off = make_off(temp);    log->last_off = make_off(temp + 8);    /* get crc, length of gzip file */    (void)lseek(log->fd, log->last_off, SEEK_SET);    if (read(log->fd, temp, 13) != 13 ||        memcmp(temp, "\001\000\000\377\377", 5) != 0) {        log_clean(log);        return NULL;    }    log->crc = make_ulg(temp + 5);    log->len = make_ulg(temp + 9);    /* set up to write over empty last block */    (void)lseek(log->fd, log->last_off + 5, SEEK_SET);    log->stored = 0;    return (void *)log;}/* maximum amount to put in a stored block before starting a new one */#define MAX_BLOCK 16384/* write a block to a log object */int gzlog_write(void *obj, char *data, size_t len){    size_t some;    unsigned char temp[5];    gz_log *log;    /* check object */    log = (gz_log *)obj;    if (log == NULL || log->id != GZLOGID)        return 1;    /* write stored blocks until all of the input is written */    do {        some = MAX_BLOCK - log->stored;        if (some > len)            some = len;        if (write(log->fd, data, some) != some)            return 1;        log->crc = crc32(log->crc, data, some);        log->len += some;        len -= some;        data += some;        log->stored += some;        /* if the stored block is full, end it and start another */        if (log->stored == MAX_BLOCK) {            (void)lseek(log->fd, log->last_off, SEEK_SET);            temp[0] = 0;            dice_ulg(log->stored + ((unsigned long)(~log->stored) << 16),                     temp + 1);            if (write(log->fd, temp, 5) != 5)                return 1;            log->last_off = lseek(log->fd, log->stored, SEEK_CUR);            (void)lseek(log->fd, 5, SEEK_CUR);            log->stored = 0;        }    } while (len);    return 0;}/* recompress the remaining stored deflate data in place */local int recomp(gz_log *log){    z_stream strm;    size_t len, max;    unsigned char *in;    unsigned char *out;    unsigned char temp[16];    /* allocate space and read it all in (it's around 1 MB) */    len = log->last_off - log->mark_off;    max = len + (len >> 12) + (len >> 14) + 11;    out = malloc(max);    if (out == NULL)        return 1;    in = malloc(len);    if (in == NULL) {        free(out);        return 1;    }    (void)lseek(log->fd, log->mark_off, SEEK_SET);    if (read(log->fd, in, len) != len) {        free(in);        free(out);        return 1;    }    /* recompress in memory, decoding stored data as we go */    /* note: this assumes that unsigned is four bytes or more */    /*       consider not making that assumption */    strm.zalloc = Z_NULL;    strm.zfree = Z_NULL;    strm.opaque = Z_NULL;    if (deflateInit2(&strm, Z_BEST_COMPRESSION, Z_DEFLATED, -15, 8,        Z_DEFAULT_STRATEGY) != Z_OK) {        free(in);        free(out);        return 1;    }    strm.next_in = in;    strm.avail_out = max;    strm.next_out = out;    while (len >= 5) {        if (strm.next_in[0] != 0)            break;        strm.avail_in = strm.next_in[1] + (strm.next_in[2] << 8);        strm.next_in += 5;        len -= 5;        if (strm.avail_in != 0) {            if (len < strm.avail_in)                break;            len -= strm.avail_in;            (void)deflate(&strm, Z_NO_FLUSH);            if (strm.avail_in != 0 || strm.avail_out == 0)                break;        }    }    (void)deflate(&strm, Z_SYNC_FLUSH);    (void)deflateEnd(&strm);    free(in);    if (len != 0 || strm.avail_out == 0) {        free(out);        return 1;    }    /* overwrite stored data with compressed data */    (void)lseek(log->fd, log->mark_off, SEEK_SET);    len = max - strm.avail_out;    if (write(log->fd, out, len) != len) {        free(out);        return 1;    }    free(out);    /* write last empty block, crc, and length */    log->mark_off = log->last_off = lseek(log->fd, 0, SEEK_CUR);    temp[0] = 1;    dice_ulg(0xffffL << 16, temp + 1);    dice_ulg(log->crc, temp + 5);    dice_ulg(log->len, temp + 9);    if (write(log->fd, temp, 13) != 13)        return 1;    /* truncate file to discard remaining stored data and old trailer */    ftruncate(log->fd, lseek(log->fd, 0, SEEK_CUR));    /* update extra field to point to new last empty block */    (void)lseek(log->fd, log->extra, SEEK_SET);    dice_off(log->mark_off, temp);    dice_off(log->last_off, temp + 8);    if (write(log->fd, temp, 16) != 16)        return 1;    return 0;}/* maximum accumulation of stored blocks before compressing */#define MAX_STORED 1048576/* close log object */int gzlog_close(void *obj){    unsigned char temp[8];    gz_log *log;    /* check object */    log = (gz_log *)obj;    if (log == NULL || log->id != GZLOGID)        return 1;    /* go to start of most recent block being written */    (void)lseek(log->fd, log->last_off, SEEK_SET);    /* if some stuff was put there, update block */    if (log->stored) {        temp[0] = 0;        dice_ulg(log->stored + ((unsigned long)(~log->stored) << 16),                 temp + 1);        if (write(log->fd, temp, 5) != 5)            return 1;        log->last_off = lseek(log->fd, log->stored, SEEK_CUR);    }    /* write last block (empty) */    if (write(log->fd, "\001\000\000\377\377", 5) != 5)        return 1;    /* write updated crc and uncompressed length */    dice_ulg(log->crc, temp);    dice_ulg(log->len, temp + 4);    if (write(log->fd, temp, 8) != 8)        return 1;    /* put offset of that last block in gzip extra block */    (void)lseek(log->fd, log->extra + 8, SEEK_SET);    dice_off(log->last_off, temp);    if (write(log->fd, temp, 8) != 8)        return 1;    /* if more than 1 MB stored, then time to compress it */    if (log->last_off - log->mark_off > MAX_STORED) {        if (recomp(log))            return 1;    }    /* unlock and close file */    log_clean(log);    return 0;}

?? 快捷鍵說(shuō)明

復(fù)制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號(hào) Ctrl + =
減小字號(hào) Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
9久草视频在线视频精品| 欧美日韩亚洲不卡| 高清不卡一二三区| 国产乱子轮精品视频| 日本中文字幕不卡| 日韩精品亚洲专区| 日日夜夜精品视频天天综合网| 亚洲一区日韩精品中文字幕| 亚洲欧洲综合另类| 亚洲欧美色综合| 国产精品黄色在线观看| 久久久久九九视频| 日韩写真欧美这视频| 91久久一区二区| 欧美在线观看视频在线| 欧美在线小视频| 欧美三区在线视频| 欧美三级中文字幕| 成人黄色免费短视频| 国产精品久久久99| 欧美视频一区二区| 欧美精品日日鲁夜夜添| 欧美美女喷水视频| 欧美日韩一区二区在线视频| 欧美性感一区二区三区| 欧美主播一区二区三区| 欧美一级搡bbbb搡bbbb| 日韩欧美一卡二卡| 久久久精品影视| 日本一区二区三区视频视频| 成人免费在线观看入口| 亚洲欧美怡红院| 亚洲男人天堂av网| 日韩国产欧美在线视频| 美女视频第一区二区三区免费观看网站| 青青草精品视频| 国产一区二区在线观看免费| 暴力调教一区二区三区| 色呦呦网站一区| 欧美电影精品一区二区 | 欧美一区二区三区在| 欧美成人欧美edvon| 久久久久久久久久美女| 国产精品久久久久精k8| 综合久久给合久久狠狠狠97色| 最新高清无码专区| 午夜精品免费在线| 国产精品亚洲一区二区三区妖精 | 99re亚洲国产精品| 欧美美女黄视频| 精品福利视频一区二区三区| 亚洲欧洲成人精品av97| 亚洲高清在线精品| 国产成人av一区| 日本久久一区二区| www成人在线观看| 中文字幕一区二区在线观看| 久久久精品欧美丰满| 亚洲线精品一区二区三区| 玖玖九九国产精品| 99久久精品免费| 91麻豆精品国产| 中文字幕制服丝袜成人av | 午夜精品久久久久久久久| 国产酒店精品激情| 欧美三级欧美一级| 国产精品久久久久aaaa| 日本三级亚洲精品| 91精品1区2区| 久久亚洲私人国产精品va媚药| 亚洲一区二区三区四区在线观看 | 91网址在线看| 日韩欧美色电影| 亚洲综合一区二区精品导航| 另类中文字幕网| 欧美影视一区二区三区| 久久网这里都是精品| 国产亚洲成aⅴ人片在线观看| 一区二区三区在线观看国产| 美女视频黄频大全不卡视频在线播放| 97国产精品videossex| 26uuu亚洲综合色| 亚洲午夜久久久久久久久电影院 | 4438x亚洲最大成人网| 国产精品二三区| 国产精品1区二区.| 日韩欧美视频在线 | 成人理论电影网| 欧美日韩精品二区第二页| 国产精品乱码人人做人人爱| 亚洲国产你懂的| 成人av在线电影| 日韩欧美国产一区二区三区| 日韩精品一级二级 | 亚洲欧洲一区二区三区| 国产麻豆欧美日韩一区| 欧美一区日韩一区| 亚洲欧洲综合另类在线| 国产a级毛片一区| 欧美一区二视频| 精品国产1区2区3区| 日韩和欧美的一区| 91久久精品一区二区三| 亚洲三级久久久| 久久99国产精品尤物| 在线不卡免费av| 亚洲一区中文在线| 99久久er热在这里只有精品15| 久久综合久久鬼色中文字| 美女在线视频一区| 日韩欧美中文字幕公布| 五月综合激情日本mⅴ| 91黄色免费版| 亚洲视频一二三| 91丨九色丨国产丨porny| 国产欧美一区二区精品婷婷| 国产精品123| 久久婷婷综合激情| 国产一区二区视频在线播放| 日韩女优毛片在线| 久久99精品国产.久久久久| 日韩精品一区二区三区在线| 蜜臀av性久久久久蜜臀aⅴ流畅 | 日韩免费高清电影| 美女在线一区二区| 精品国内片67194| 国内精品写真在线观看| 欧美电视剧免费全集观看| 亚洲图片欧美色图| 国内精品伊人久久久久av一坑 | 99精品国产热久久91蜜凸| 久久尤物电影视频在线观看| 国内精品伊人久久久久av一坑 | 免费观看久久久4p| 欧美zozozo| 国内精品写真在线观看| 欧美韩国日本不卡| 99久久免费精品高清特色大片| 亚洲乱码国产乱码精品精小说 | 91精品国产色综合久久不卡电影| 亚洲一区二区欧美日韩| 欧美性受xxxx黑人xyx| 五月天国产精品| 欧美大胆一级视频| 国产a久久麻豆| 亚洲日本中文字幕区| 欧美日韩在线免费视频| 日本一区中文字幕| 日韩欧美亚洲一区二区| 国产一区二区伦理| 久久蜜臀中文字幕| 91视视频在线直接观看在线看网页在线看 | 日韩一区二区免费在线电影 | 日本大香伊一区二区三区| 日韩激情一区二区| 国产日韩成人精品| 日本精品一区二区三区高清 | 麻豆久久一区二区| 国产日韩欧美一区二区三区综合| 色婷婷国产精品| 日韩黄色在线观看| 国产精品―色哟哟| 91浏览器入口在线观看| 日韩电影在线观看一区| 中文子幕无线码一区tr| 欧美中文字幕一区二区三区| 久久99久久久久久久久久久| 欧美激情中文字幕| 欧美美女视频在线观看| 亚洲国产精品久久艾草纯爱| 久久在线观看免费| 岛国一区二区三区| 亚洲成a人v欧美综合天堂下载| 久久久蜜桃精品| 欧美军同video69gay| 国产不卡视频在线观看| 亚洲最大的成人av| 精品久久久久一区| 欧美网站大全在线观看| 日韩国产高清在线| 自拍偷自拍亚洲精品播放| 久久一夜天堂av一区二区三区| 在线观看欧美黄色| 国产精品18久久久久| 亚洲乱码国产乱码精品精可以看 | 91欧美一区二区| 激情六月婷婷综合| 午夜免费欧美电影| 国产欧美精品一区| 欧美日韩国产综合一区二区| 粉嫩一区二区三区在线看| 日韩精品一级中文字幕精品视频免费观看| 亚洲国产精品高清| 91 com成人网| 91免费版在线| 国产精品一区二区免费不卡| 亚洲va欧美va人人爽| 亚洲精品成人a在线观看| 26uuu精品一区二区在线观看| 欧美丰满少妇xxxbbb|