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

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

?? encoding.c

?? 一個很有名的瀏覽器
?? C
字號:
/* Stream reading and decoding (mostly decompression) *//* $Id: encoding.c,v 1.39.4.2 2005/04/06 08:10:39 jonas Exp $ */#ifdef HAVE_CONFIG_H#include "config.h"#endif#include <errno.h>#include <stdio.h>#include <string.h>#include <sys/stat.h> /* OS/2 needs this after sys/types.h */#include <sys/types.h>#ifdef HAVE_FCNTL_H#include <fcntl.h> /* OS/2 needs this after sys/types.h */#endif#ifdef HAVE_UNISTD_H#include <unistd.h>#endif#include "elinks.h"#include "config/options.h"#include "encoding/encoding.h"#include "osdep/osdep.h"#include "sched/connection.h"#include "util/memory.h"#include "util/string.h"/*************************************************************************  Dummy encoding (ENCODING_NONE)*************************************************************************/struct dummy_enc_data {	int fd;};static intdummy_open(struct stream_encoded *stream, int fd){	stream->data = mem_alloc(sizeof(struct dummy_enc_data));	if (!stream->data) return -1;	((struct dummy_enc_data *) stream->data)->fd = fd;	return 0;}static intdummy_read(struct stream_encoded *stream, unsigned char *data, int len){	return safe_read(((struct dummy_enc_data *) stream->data)->fd, data, len);}static unsigned char *dummy_decode(struct stream_encoded *stream, unsigned char *data, int len,	     int *new_len){	*new_len = len;	return data;}static unsigned char *dummy_decode_buffer(unsigned char *data, int len, int *new_len){	unsigned char *buffer = memacpy(data, len);	if (!buffer) return NULL;	*new_len = len;	return buffer;}static voiddummy_close(struct stream_encoded *stream){	close(((struct dummy_enc_data *) stream->data)->fd);	mem_free(stream->data);}static unsigned char *dummy_extensions[] = { NULL };static struct decoding_backend dummy_decoding_backend = {	"none",	dummy_extensions,	dummy_open,	dummy_read,	dummy_decode,	dummy_decode_buffer,	dummy_close,};/* Dynamic backend area */#include "encoding/bzip2.h"#include "encoding/gzip.h"static struct decoding_backend *decoding_backends[] = {	&dummy_decoding_backend,	&gzip_decoding_backend,	&bzip2_decoding_backend,};/*************************************************************************  Public functions*************************************************************************//* Associates encoded stream with a fd. */struct stream_encoded *open_encoded(int fd, enum stream_encoding encoding){	struct stream_encoded *stream;	stream = mem_alloc(sizeof(*stream));	if (!stream) return NULL;	stream->encoding = encoding;	if (decoding_backends[stream->encoding]->open(stream, fd) >= 0)		return stream;	mem_free(stream);	return NULL;}/* Read available data from stream and decode them. Note that when data change * their size during decoding, 'len' indicates desired size of _returned_ data, * not desired size of data read from stream. */intread_encoded(struct stream_encoded *stream, unsigned char *data, int len){	return decoding_backends[stream->encoding]->read(stream, data, len);}/* Decode the given chunk of data in the context of @stream. @data contains the * original data chunk, @len bytes long. The resulting decoded data chunk is * *@new_len bytes long. */unsigned char *decode_encoded(struct stream_encoded *stream, unsigned char *data, int len,		int *new_len){	return decoding_backends[stream->encoding]->decode(stream, data, len, new_len);}unsigned char *decode_encoded_buffer(enum stream_encoding encoding, unsigned char *data, int len,		      int *new_len){	return decoding_backends[encoding]->decode_buffer(data, len, new_len);}/* Closes encoded stream. Note that fd associated with the stream will be * closed here. */voidclose_encoded(struct stream_encoded *stream){	decoding_backends[stream->encoding]->close(stream);	mem_free(stream);}/* Return a list of extensions associated with that encoding. */unsigned char **listext_encoded(enum stream_encoding encoding){	return decoding_backends[encoding]->extensions;}enum stream_encodingguess_encoding(unsigned char *filename){	int fname_len = strlen(filename);	unsigned char *fname_end = filename + fname_len;	int enc;	for (enc = 1; enc < ENCODINGS_KNOWN; enc++) {		unsigned char **ext = decoding_backends[enc]->extensions;		while (ext && *ext) {			int len = strlen(*ext);			if (fname_len >= len && !strcmp(fname_end - len, *ext))				return enc;			ext++;		}	}	return ENCODING_NONE;}unsigned char *get_encoding_name(enum stream_encoding encoding){	return decoding_backends[encoding]->name;}/* File reading *//* Tries to open @prefixname with each of the supported encoding extensions * appended. */static inline enum stream_encodingtry_encoding_extensions(struct string *filename, int *fd){	int length = filename->length;	int encoding;	/* No file of that name was found, try some others names. */	for (encoding = 1; encoding < ENCODINGS_KNOWN; encoding++) {		unsigned char **ext = listext_encoded(encoding);		for (; ext && *ext; ext++) {			add_to_string(filename, *ext);			/* We try with some extensions. */			*fd = open(filename->source, O_RDONLY | O_NOCTTY);			if (*fd >= 0)				/* Ok, found one, use it. */				return encoding;			filename->source[length] = 0;		}	}	return ENCODING_NONE;}/* Reads the file from @stream in chunks of size @readsize. *//* Returns a connection state. S_OK if all is well. */enum connection_stateread_file(struct stream_encoded *stream, int readsize, struct string *page){	if (!init_string(page)) return S_OUT_OF_MEM;	/* We read with granularity of stt.st_size (given as @readsize) - this	 * does best job for uncompressed files, and doesn't hurt for	 * compressed ones anyway - very large files usually tend to inflate	 * fast anyway. At least I hope ;).  --pasky */	/* Also there because of bug in Linux. Read returns -EACCES when	 * reading 0 bytes to invalid address so ensure never to try and	 * allocate zero number of bytes. */	if (!readsize) readsize = 4096;	while (realloc_string(page, page->length + readsize)) {		unsigned char *string_pos = page->source + page->length;		int readlen = read_encoded(stream, string_pos, readsize);		if (readlen < 0) {			done_string(page);			/* If it is some I/O error (and errno is set) that will			 * do. Since errno == 0 == S_WAIT and we cannot have			 * that. */			if (errno)				return (enum connection_state) -errno;			/* FIXME: This is indeed an internal error. If readed from a			 * corrupted encoded file nothing or only some of the			 * data will be read. */			return S_ENCODE_ERROR;		} else if (readlen == 0) {			/* NUL-terminate just in case */			page->source[page->length] = '\0';			return S_OK;		}		page->length += readlen;#if 0		/* This didn't work so well as it should (I had to implement		 * end of stream handling to bzip2 anyway), so I rather		 * disabled this. */		if (readlen < readsize) {			/* This is much safer. It should always mean that we			 * already read everything possible, and it permits us			 * more elegant of handling end of file with bzip2. */			break;		}#endif	}	done_string(page);	return S_OUT_OF_MEM;}static inline intis_stdin_pipe(struct stat *stt, struct string *filename){	/* On Mac OS X, /dev/stdin has type S_IFSOCK. (bug 616) */	return !strlcmp(filename->source, filename->length, "/dev/stdin", 10)		&& (#ifdef S_ISSOCK			S_ISSOCK(stt->st_mode) ||#endif			S_ISFIFO(stt->st_mode));}enum connection_stateread_encoded_file(struct string *filename, struct string *page){	struct stream_encoded *stream;	struct stat stt;	enum stream_encoding encoding = ENCODING_NONE;	int fd = open(filename->source, O_RDONLY | O_NOCTTY);	enum connection_state state = -errno;	if (fd == -1 && get_opt_bool("protocol.file.try_encoding_extensions")) {		encoding = try_encoding_extensions(filename, &fd);	} else if (fd != -1) {		encoding = guess_encoding(filename->source);	}	if (fd == -1) return state;	/* Some file was opened so let's get down to bi'ness */	set_bin(fd);	/* Do all the necessary checks before trying to read the file.	 * @state code is used to block further progress. */	if (fstat(fd, &stt)) {		state = -errno;	} else if (!S_ISREG(stt.st_mode) && encoding != ENCODING_NONE) {		/* We only want to open regular encoded files. */		/* Leave @state being the saved errno */	} else if (!S_ISREG(stt.st_mode) && !is_stdin_pipe(&stt, filename)	           && !get_opt_int("protocol.file.allow_special_files")) {		state = S_FILE_TYPE;	} else if (!(stream = open_encoded(fd, encoding))) {		state = S_OUT_OF_MEM;	} else {		int readsize = (int) stt.st_size;		/* Check if st_size will cause overflow. */		/* FIXME: See bug 497 for info about support for big files. */		if (readsize != stt.st_size || readsize < 0) {#ifdef EFBIG			state = (enum connection_state) -(EFBIG);#else			state = S_FILE_ERROR;#endif		} else {			state = read_file(stream, stt.st_size, page);		}		close_encoded(stream);	}	close(fd);	return state;}

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
欧美久久久久免费| 亚洲国产成人午夜在线一区| 久久综合国产精品| 亚洲福利电影网| 国产综合久久久久久鬼色| 在线亚洲人成电影网站色www| 精品第一国产综合精品aⅴ| 亚洲午夜一区二区| 成av人片一区二区| 久久免费美女视频| 国内一区二区在线| 制服丝袜av成人在线看| 亚洲第四色夜色| 91麻豆免费在线观看| 国产日产欧美一区二区三区| 精品在线一区二区三区| 欧美精品vⅰdeose4hd| 亚洲激情图片qvod| 在线视频一区二区三| 国产精品国产三级国产aⅴ入口 | 日本中文字幕一区| 日本久久精品电影| 夜夜爽夜夜爽精品视频| 一本一道久久a久久精品| 亚洲自拍偷拍网站| 99免费精品视频| 日韩理论电影院| 成人精品亚洲人成在线| 国产免费观看久久| 丁香五精品蜜臀久久久久99网站| 久久久99精品久久| 国模无码大尺度一区二区三区| 欧美岛国在线观看| 国产精品综合视频| 日本一区二区三区dvd视频在线| 成人免费精品视频| 亚洲人成亚洲人成在线观看图片| 色综合咪咪久久| 亚洲成人综合网站| 精品国精品自拍自在线| 国产精品一区一区三区| 国产精品久久久久影院色老大| 91视频观看免费| 亚洲国产中文字幕| 欧美成人vps| 成人午夜免费视频| 亚洲欧美日韩国产手机在线| 欧美亚洲图片小说| 久久精品国产亚洲a| 日本一区二区三区在线不卡| 91丝袜呻吟高潮美腿白嫩在线观看| 亚洲色图视频网| 在线不卡免费欧美| 久久蜜桃一区二区| 亚洲欧美国产77777| 国产成人一区在线| 久久久一区二区三区捆绑**| 青青青爽久久午夜综合久久午夜| 色av成人天堂桃色av| 国产精品久久久爽爽爽麻豆色哟哟 | 亚洲一区二区精品视频| 成人高清视频在线观看| 久久伊99综合婷婷久久伊| 日韩av一区二区三区| 欧美视频一区二区三区在线观看 | 日韩区在线观看| 亚洲不卡一区二区三区| 91极品视觉盛宴| 亚洲男同1069视频| 91在线国产福利| 日韩一区在线播放| 在线免费观看不卡av| 亚洲最快最全在线视频| 91精品91久久久中77777| 亚洲中国最大av网站| 色94色欧美sute亚洲线路一ni| 亚洲人成人一区二区在线观看 | 国内成人精品2018免费看| 日韩欧美国产麻豆| 国内久久婷婷综合| 久久久国产精品麻豆| 丰满放荡岳乱妇91ww| 欧美高清在线一区二区| 不卡视频在线观看| 亚洲天堂av老司机| 在线视频你懂得一区| 首页综合国产亚洲丝袜| 精品免费视频.| 成人看片黄a免费看在线| 1区2区3区国产精品| 欧美日韩精品一区二区三区| 日日摸夜夜添夜夜添亚洲女人| 2021久久国产精品不只是精品| 国产福利91精品一区| 亚洲电影一级片| 欧美日韩一区中文字幕| 久久国产尿小便嘘嘘尿| 国产女人aaa级久久久级 | 欧美r级在线观看| 成人性色生活片免费看爆迷你毛片| 成人免费在线视频观看| 欧美亚洲动漫另类| 精品一区二区久久久| 专区另类欧美日韩| 欧美一级国产精品| 成人av片在线观看| 欧美aⅴ一区二区三区视频| 国产午夜精品美女毛片视频| 在线观看三级视频欧美| 国产一区二区主播在线| 一区二区三区高清| 久久欧美中文字幕| 欧美日韩成人综合天天影院| 福利电影一区二区三区| 日本麻豆一区二区三区视频| 中文字幕一区二区三区不卡 | 91网页版在线| 国模大尺度一区二区三区| 亚洲精品日韩专区silk| 久久综合九色欧美综合狠狠 | 久久精品视频免费| 欧美日韩高清一区二区| 成人午夜大片免费观看| 奇米精品一区二区三区在线观看 | 日韩精品一区二区在线| 欧美午夜免费电影| gogo大胆日本视频一区| 国内成人自拍视频| 另类小说综合欧美亚洲| 亚洲成人一区二区在线观看| 中文字幕中文乱码欧美一区二区| 欧美成人精品二区三区99精品| 欧美日韩一区二区在线观看| av动漫一区二区| 国产一区二区三区观看| 奇米色一区二区| 视频一区视频二区中文| 亚洲成a人v欧美综合天堂| 亚洲欧美另类综合偷拍| 国产精品成人免费精品自在线观看 | 日韩女同互慰一区二区| 欧美理论在线播放| 欧美在线一二三| 在线国产电影不卡| 91浏览器在线视频| 91在线一区二区三区| 成人国产一区二区三区精品| 成人午夜免费电影| 风流少妇一区二区| 成人短视频下载| 成人污视频在线观看| 成人一二三区视频| www.亚洲激情.com| av中文字幕在线不卡| 91小视频在线免费看| 欧美一区二区三区视频在线观看| 在线观看日韩毛片| 欧美日韩一区成人| 欧美一区二区日韩一区二区| 欧美一区二区美女| 2021中文字幕一区亚洲| 国产婷婷一区二区| 一色桃子久久精品亚洲| 一区二区理论电影在线观看| 午夜视频在线观看一区| 日本亚洲电影天堂| 狠狠色丁香久久婷婷综| 国产99久久久国产精品免费看| av电影在线观看一区| 欧美片在线播放| xfplay精品久久| 中文字幕一区二区三区在线观看 | 首页综合国产亚洲丝袜| 美国三级日本三级久久99| 国产麻豆午夜三级精品| 成人动漫在线一区| 欧美剧在线免费观看网站| 久久在线观看免费| 一区二区三区免费网站| 日韩二区在线观看| 国产黄色成人av| 在线亚洲一区二区| 亚洲精品一区二区三区香蕉| 中文字幕一区二区三区四区不卡 | 有码一区二区三区| 精品无人区卡一卡二卡三乱码免费卡| 黄一区二区三区| 欧洲视频一区二区| www成人在线观看| 亚洲男人天堂av| 国产在线视频一区二区| 91国偷自产一区二区使用方法| 日韩精品一区二区三区在线| 中文字幕一区二| 狠狠狠色丁香婷婷综合激情| 欧美唯美清纯偷拍| 国产欧美日韩另类一区| 毛片一区二区三区| 欧美性大战久久久| 国产精品色在线|