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

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

?? curl.c

?? linux下開源圖片codec
?? C
字號:
#include <stdio.h>#include <stdlib.h>#include <unistd.h>#include <string.h>#include <time.h>#include <errno.h>#include <sys/select.h>#include <curl/curl.h>#include <curl/easy.h>#include "curl.h"/* curl globals */static CURLM *curlm;static fd_set rd, wr, ex;/* my globals */static int url_debug   = 0;static int url_timeout = 30;/* my structs */struct iobuf {    off_t   start;    size_t  size;    char    *data;};struct url_state {    char           *path;    CURL           *curl;    char           errmsg[CURL_ERROR_SIZE];    off_t          curl_pos;    off_t          buf_pos;    struct iobuf   buf;    int            eof;};/* ---------------------------------------------------------------------- *//* curl stuff                                                             */static void __attribute__ ((constructor)) curl_init(void){    curl_global_init(CURL_GLOBAL_ALL);    curlm = curl_multi_init();}static void __attribute__ ((destructor)) curl_fini(void){    curl_multi_cleanup(curlm);    curl_global_cleanup();}static void curl_free_buffer(struct iobuf *buf){    if (buf->data) {	free(buf->data);	memset(buf,0,sizeof(*buf));    }}/* CURLOPT_WRITEFUNCTION */static int curl_write(void *data,  size_t  size, size_t nmemb, void *handle){    struct url_state *h = handle;    curl_free_buffer(&h->buf);    h->buf.start = h->curl_pos;    h->buf.size  = size * nmemb;    h->buf.data  = malloc(h->buf.size);    memcpy(h->buf.data, data, h->buf.size);    if (url_debug)	fprintf(stderr,"  put %5d @ %5d\n",		(int)h->buf.size, (int)h->buf.start);        h->curl_pos += h->buf.size;    return h->buf.size;}/* do transfers */static int curl_xfer(struct url_state *h){    CURLMcode rc;    struct timeval tv;    int count, maxfd;    FD_ZERO(&rd);    FD_ZERO(&wr);    FD_ZERO(&ex);    maxfd = -1;    rc = curl_multi_fdset(curlm, &rd, &wr, &ex, &maxfd);    if (CURLM_OK != rc) {	fprintf(stderr,"curl_multi_fdset: %d %s\n",rc,h->errmsg);	return -1;    }    if (-1 == maxfd) {	/* wait 0.1 sec */	if (url_debug)	    fprintf(stderr,"wait 0.01 sec\n");	tv.tv_sec  = 0;	tv.tv_usec = 100000;    } else {	/* wait for data */	if (url_debug)	    fprintf(stderr,"select for data [maxfd=%d]\n",maxfd);	tv.tv_sec  = url_timeout;	tv.tv_usec = 0;    }    switch (select(maxfd+1, &rd, &wr, &ex, &tv)) {    case -1:	/* Huh? */	perror("select");	exit(1);    case 0:	/* timeout */	return -1;    }    for (;;) {	rc = curl_multi_perform(curlm,&count);	if (CURLM_CALL_MULTI_PERFORM == rc)	    continue;	if (CURLM_OK != rc) {	    fprintf(stderr,"curl_multi_perform: %d %s\n",rc,h->errmsg);	    return -1;	}	if (0 == count)	    h->eof = 1;	break;    }    return 0;}/* curl setup */static int curl_setup(struct url_state *h){    if (h->curl) {	curl_multi_remove_handle(curlm,h->curl);	curl_easy_cleanup(h->curl);    }    h->curl = curl_easy_init();    curl_easy_setopt(h->curl, CURLOPT_URL,           h->path);    curl_easy_setopt(h->curl, CURLOPT_ERRORBUFFER,   h->errmsg);    curl_easy_setopt(h->curl, CURLOPT_WRITEFUNCTION, curl_write);    curl_easy_setopt(h->curl, CURLOPT_WRITEDATA,     h);    curl_multi_add_handle(curlm, h->curl);    h->buf_pos  = 0;    h->curl_pos = 0;    h->eof      = 0;    return 0;}/* ---------------------------------------------------------------------- *//* GNU glibc custom stream interface                                      */static ssize_t url_read(void *handle, char *buf, size_t size){    struct url_state *h = handle;    size_t bytes, total;    off_t off;    int count;        if (url_debug)	fprintf(stderr,"url_read(size=%d)\n",(int)size);    for (total = 0; size > 0;) {	if (h->buf.start                <= h->buf_pos &&	    h->buf.start + h->buf.size  >  h->buf_pos) {	    /* can satisfy from current buffer */	    bytes = h->buf.start + h->buf.size - h->buf_pos;	    off   = h->buf_pos - h->buf.start;	    if (bytes > size)		bytes = size;	    memcpy(buf+total, h->buf.data + off, bytes);	    if (url_debug)		fprintf(stderr,"  get %5d @ %5d [%5d]\n",			(int)bytes, (int)h->buf_pos, (int)off);	    size       -= bytes;	    total      += bytes;	    h->buf_pos += bytes;	    continue;	}	if (h->buf_pos < h->buf.start) {	    /* seeking backwards -- restart transfer */	    if (url_debug)		fprintf(stderr,"  rewind\n");	    curl_free_buffer(&h->buf);	    curl_setup(h);	    while (CURLM_CALL_MULTI_PERFORM == curl_multi_perform(curlm,&count))		/* nothing */;	}	if (h->eof)	    /* stop on eof */	    break;	/* fetch more data */	if (-1 == curl_xfer(h)) {	    if (0 == total)		return -1;	    break;	}    }    return total;}#if 0static ssize_t url_write(void *handle, const char *buf, size_t size){    //struct url_state *h = handle;    if (url_debug)	fprintf(stderr,"url_write(size=%d)\n",(int)size);    return -1;}#endifstatic int url_seek(void *handle, off64_t *pos, int whence){    struct url_state *h = handle;    int rc = 0;    if (url_debug)	fprintf(stderr,"url_seek(pos=%d,whence=%d)\n", (int)(*pos), whence);    switch (whence) {    case SEEK_SET:	h->buf_pos = *pos;	break;    case SEEK_CUR:	h->buf_pos += *pos;	break;    case SEEK_END: 	rc = -1;    }    *pos = h->buf_pos;    return rc;}static int url_close(void *handle){    struct url_state *h = handle;    if (url_debug)	fprintf(stderr,"url_close()\n");    curl_multi_remove_handle(curlm,h->curl);    curl_easy_cleanup(h->curl);    if (h->buf.data)	free(h->buf.data);    free(h->path);    free(h);    return 0;}static cookie_io_functions_t url_hooks = {    .read  = url_read,#if 0    .write = url_write,#endif    .seek  = url_seek,    .close = url_close,};static FILE *url_open(const char *path, const char *mode){    FILE *fp;    struct url_state *h;    int count;    if (url_debug)	fprintf(stderr,"url_open(%s,%s)\n",path,mode);    h = malloc(sizeof(*h));    if (NULL == h)	goto err;    memset(h,0,sizeof(*h));    h->path = strdup(path);    if (NULL == h->path)	goto err;        /* setup */    curl_setup(h);    fp = fopencookie(h, mode, url_hooks);    if (NULL == fp)	goto err;    /* connect + start fetching */    while (CURLM_CALL_MULTI_PERFORM == curl_multi_perform(curlm,&count))	/* nothing */;    /* check for errors */    if (0 == count  &&  NULL == h->buf.data) {	errno = ENOENT;	goto fetch_err;    }	    /* all done */    return fp; fetch_err:    curl_multi_remove_handle(curlm,h->curl); err:    if (h->curl)	curl_easy_cleanup(h->curl);    if (h->path)	free(h->path);    if (h)	free(h);    return NULL;}/* ---------------------------------------------------------------------- *//* hook into fopen using GNU ld's --wrap                                  */int curl_is_url(const char *url){    static char *protocols[] = {	"ftp://",	"http://",	NULL,    };    int i;    for (i = 0; protocols[i] != NULL; i++)	if (0 == strncasecmp(url, protocols[i], strlen(protocols[i])))	    return 1;    return 0;}FILE *__wrap_fopen(const char *path, const char *mode);FILE *__real_fopen(const char *path, const char *mode);FILE *__wrap_fopen(const char *path, const char *mode){    if (url_debug)	fprintf(stderr,"fopen(%s,%s)\n",path,mode);    /* catch URLs */    if (curl_is_url(path)) {	if (strchr(mode,'w')) {	    fprintf(stderr,"write access over ftp/http is not supported, sorry\n");	    return NULL;	}	return url_open(path,mode);    }        /* files passed to the real fopen */    return __real_fopen(path,mode);}

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
日本va欧美va瓶| 91福利在线观看| 精品区一区二区| 午夜精品久久久| 欧美色图天堂网| 一区二区免费在线| 色婷婷av一区二区三区gif| 中文字幕一区免费在线观看| 国产乱对白刺激视频不卡| 欧美成人午夜电影| 狠狠色综合播放一区二区| 91麻豆精品国产91久久久久久 | 亚洲一区二区欧美激情| 欧美性极品少妇| 视频一区二区三区入口| 欧美成人在线直播| 日本一道高清亚洲日美韩| 欧美一区二区性放荡片| 国内精品久久久久影院色| 久久一区二区三区四区| 成人av网址在线| 亚洲精品日韩一| 7777精品伊人久久久大香线蕉超级流畅| 午夜电影网亚洲视频| 91精品国产综合久久精品麻豆| 一区二区三区资源| 欧美日本精品一区二区三区| 日产精品久久久久久久性色| 精品日韩一区二区| 国产米奇在线777精品观看| 中文字幕精品一区| 91久久精品国产91性色tv| 丝袜诱惑亚洲看片| 26uuu亚洲综合色欧美| 99久久精品国产一区| 午夜欧美视频在线观看| 久久久久久久精| 91片在线免费观看| 秋霞影院一区二区| 国产精品久久毛片a| 欧美日韩一级大片网址| 国产真实乱偷精品视频免| 国产精品久久久久久久久免费樱桃| 色婷婷久久99综合精品jk白丝| 亚洲乱码一区二区三区在线观看| 欧美日韩国产小视频| 青青草伊人久久| 亚洲丝袜另类动漫二区| 94-欧美-setu| 麻豆成人91精品二区三区| 中国色在线观看另类| 欧美日韩精品一区二区| 成人激情小说乱人伦| 免费观看91视频大全| 精品福利一区二区三区免费视频| kk眼镜猥琐国模调教系列一区二区 | 国产欧美视频在线观看| 色先锋久久av资源部| 亚洲图片欧美一区| 在线一区二区三区四区五区 | av一区二区三区| 精品久久国产老人久久综合| 国产乱码字幕精品高清av| 亚洲视频香蕉人妖| 精品国产3级a| 欧美精品在线观看一区二区| 成人精品免费网站| 国模无码大尺度一区二区三区| 亚洲精品免费在线播放| 日韩欧美国产精品一区| 91免费在线看| 国产69精品一区二区亚洲孕妇| 日韩一区在线看| 欧美系列日韩一区| 91丨九色丨国产丨porny| 国产 日韩 欧美大片| 另类人妖一区二区av| 亚洲成年人影院| 一级特黄大欧美久久久| 中文一区在线播放| 久久综合资源网| 日韩欧美区一区二| 欧美一区二区三区白人| 欧美日韩国产天堂| 精品婷婷伊人一区三区三| 色综合天天做天天爱| 成人午夜视频在线观看| 国产98色在线|日韩| 国产一区二区三区四区五区入口| 蜜桃传媒麻豆第一区在线观看| 一区二区在线观看av| 亚洲免费av在线| 亚洲日本va在线观看| ...xxx性欧美| 亚洲日本一区二区| 一区二区三区高清| 亚洲一区视频在线| 丝袜美腿亚洲色图| 日本v片在线高清不卡在线观看| 日韩国产精品久久久| 免费看日韩精品| 美女尤物国产一区| 国产精品自拍三区| 成人自拍视频在线观看| 不卡一区二区三区四区| 色综合婷婷久久| 欧美日韩一卡二卡| 精品日韩在线一区| 欧美激情在线看| 亚洲图片你懂的| 亚洲高清免费观看| 精品亚洲porn| 成人av网站在线观看| 欧美影片第一页| 日韩一级黄色大片| 久久久国产午夜精品| 成人免费在线视频观看| 亚洲国产日韩在线一区模特| 首页综合国产亚洲丝袜| 久久不见久久见中文字幕免费| 国产在线精品视频| 极品销魂美女一区二区三区| 美女视频一区在线观看| 国产精品亚洲人在线观看| 成人av资源下载| 欧美视频在线播放| 精品人在线二区三区| 久久精品一区蜜桃臀影院| 国产精品国产三级国产三级人妇 | www一区二区| 亚洲日本免费电影| 婷婷综合久久一区二区三区| 国产一区二区三区久久久| 色综合咪咪久久| 精品久久久久一区二区国产| 久久品道一品道久久精品| 欧美国产97人人爽人人喊| 亚洲一区二区高清| 国产精品亚洲午夜一区二区三区| 91成人看片片| 久久精品人人爽人人爽| 尤物在线观看一区| 激情五月婷婷综合| 欧美色区777第一页| 国产欧美精品区一区二区三区| 亚洲第一主播视频| 成人av片在线观看| 精品久久久久久综合日本欧美| 一区二区三区欧美日| 国产不卡在线播放| 日韩久久久精品| 亚洲影视资源网| 成人福利视频在线看| 日韩视频永久免费| 亚洲线精品一区二区三区| 成人小视频免费观看| 精品三级在线看| 天天综合色天天| 91网站视频在线观看| 国产婷婷色一区二区三区在线| 亚洲成人黄色影院| 色婷婷综合久色| 国产亚洲综合性久久久影院| 午夜精品久久久久久久| 在线亚洲+欧美+日本专区| 国产精品久久久久三级| 国产一区二区不卡在线| 欧美刺激午夜性久久久久久久| 亚洲午夜羞羞片| 99精品视频一区| 国产精品午夜春色av| 国产呦精品一区二区三区网站 | www.日韩精品| 欧美精品一区二区久久久| 亚洲伊人伊色伊影伊综合网| 丁香一区二区三区| 久久久国产精华| 国内精品不卡在线| 精品国产伦理网| 麻豆精品在线播放| 日韩午夜激情视频| 日本一道高清亚洲日美韩| 欧美精品久久99| 免费欧美在线视频| 日韩一区二区三区电影| 青青草国产成人99久久| 精品欧美久久久| 韩国精品久久久| 久久伊人中文字幕| 国产激情一区二区三区四区| 激情五月婷婷综合| 久久久久久久久久久久电影| av中文字幕一区| 日韩成人精品视频| 欧美国产一区二区在线观看| 99久久伊人网影院| 日韩1区2区3区| 国产精品久久毛片| 欧美一区二区三区视频在线| 丁香激情综合国产|