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

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

?? uri.l

?? Linux TSE 源代碼! 保貴十分
?? L
?? 第 1 頁(yè) / 共 2 頁(yè)
字號(hào):
		yy_delete_buffer(buf);	}	return n;}/* Scan some memory bytes. The last two bytes of the memory MUST be '\0', or * the function will return -1 indicating a failure. This function has better * performance than "uri_parse_bytes", but note there is NO "const" key * word before the "base" argument, which means the content of memory may * be changed. */int uri_parse_buffer(char *base, unsigned int size, struct uri *uri){	YY_BUFFER_STATE buf;	int n = -1;	if (buf = yy_scan_buffer(base, size))	{		yy_switch_to_buffer(buf);		n = __uri_parse(uri);		yy_delete_buffer(buf);	}	return n;}void uri_destroy(struct uri *uri){	free(uri->scheme);	if (uri->authority)	{		AUTH_DESTROY(uri->authority);		free(uri->authority);	}	free(uri->path);	free(uri->query);	free(uri->fragment);}static int __uri_length(void){	BEGIN INITIAL;	return yylex();}int uri_length_string(const char *string){	YY_BUFFER_STATE buf;	int n = -1;	if (buf = yy_scan_string(string))	{		yy_switch_to_buffer(buf);		n = __uri_length();		yy_delete_buffer(buf);	}	return n;}int uri_length_bytes(const char *bytes, int len){	YY_BUFFER_STATE buf;	int n = -1;	if (buf = yy_scan_bytes(bytes, len))	{		yy_switch_to_buffer(buf);		n = __uri_length();		yy_delete_buffer(buf);	}	return n;}int uri_length_buffer(char *base, unsigned int size){	YY_BUFFER_STATE buf;	int n = -1;	if (buf = yy_scan_buffer(base, size))	{		yy_switch_to_buffer(buf);		n = __uri_length();		yy_delete_buffer(buf);	}	return n;}/* Merge two path. It sounds easy but indeed quite troublesome if you take * everything into consideration. Core of merging two URIs. */int __path_merge(const char *rel_path, const char *base_path, char **result){	stack_t *stack;	const char *curpos;	const char *next_slash;	int len, seglen;	/* This merging algorithm is different from RFC 2396, which uses string,	 * while this algorithm uses stack. */	if (!(stack = stack_create(STACK_INITIAL_SIZE)))		return -1;	/* The "base_path" and the "rel_path" are divided into segments and push	 * all these segments and their length into the stack. If a segment	 * is ".", ignore it; if a segment is "..", pop one segment out. */	len = 0;	for (seglen = 0; seglen < 2; seglen++)	{		/* Both "rel_path" and "base_path" can be NULL. */		if (curpos = base_path)		{			while (next_slash = strchr(curpos, '/'))			{				if (strncmp(curpos, "../", next_slash - curpos + 1) == 0)				{					if (stack_height(stack) > sizeof (char *) + sizeof (int) ||						!stack_empty(stack) && stack_top(int, stack) != 1)					{						len -= stack_pop(int, stack);						stack_pop(const char *, stack);					}				}				else if (strncmp(curpos, "./", next_slash - curpos + 1) != 0)				{					len += next_slash - curpos + 1;					if (stack_push(const char *, curpos, stack) < 0 ||						stack_push(int, next_slash - curpos + 1, stack) < 0)					{						stack_destroy(stack);						return -1;					}				}				curpos = next_slash + 1;			}				base_path = rel_path;		}	}	/* This part deals with the "filename", which may be empty, may be "..",	 * may be ".", or may be something else like "index.html". */	if (curpos)	{		if (strcmp(curpos, "..") == 0)		{			if (stack_height(stack) > sizeof (char *) + sizeof (int) ||				!stack_empty(stack) && stack_top(int, stack) != 1)			{				len -= stack_pop(int, stack);				stack_pop(const char *, stack);			}		}		else if (strcmp(curpos, ".") != 0)		{			len += strlen(curpos);			if (stack_push(const char *, curpos, stack) < 0 ||				stack_push(int, strlen(curpos), stack) < 0)			{				stack_destroy(stack);				return -1;			}		}	}	/* Example:	 * rel_path: "../././../game/../document/rfc/rfc2616.pdf"	 * base_path: "/pub/incoming/./software/linux/nasm.tar.gz",	 * Now the stack is:	 *	 *	+---------------+		<-- stack top	 *	|	11			|	 *	|---------------|	 *	|	rfc2616.pdf	|	 *	|---------------|	 *	|	4			|	 *	|---------------|	 *	|	rfc/		|	 *	|---------------|	 *	|	9			|	 *	|---------------|	 *	|	document/	|	 *	|---------------|	 *	|	9			|	 *	|---------------|	 *	|	incoming/	|	 *	|---------------|	 *	|	4			|	 *	|---------------|	 *	|	pub/		|	 *	|---------------|	 *	|	1			|	 *	|---------------|	 *	|	/			|	 *	+---------------+		<-- stack base	 *	 * len = 1 + 4 + 9 + 9 + 4 + 11 = ??	 *	 * Note that we do NOT copy the segments into the stack, we just push the	 * pointers into the stack.	 *	 * All the information we need to compose the result path has been here.	 */	/* The result path is an "empty path". We should turn it into "no path".	 * "no path" is allowed while "empty path" is illegal. */	if (len == 0)		*result = NULL;	else if (*result = (char *)malloc((len + 1) * sizeof (char)))	{		*result += len;		**result = '\0';		while (!stack_empty(stack))		{			seglen = stack_pop(int, stack);			*result -= seglen;			memcpy(*result, stack_pop(const char *, stack), seglen);		}	}	else		len = -1;	stack_destroy(stack);	return len;}int uri_merge(const struct uri *rel_uri, const struct uri *base_uri,			  struct uri *result){	struct authority *tmp;	int len, n;	/* I am lazy. */	#define __STRDUP(str) \	({																	\		char *__res;													\		int __n;														\		if (str)														\		{																\			__n = strlen(str);											\			if (__res = __memtostr(str, __n))							\				len += __n;												\			else														\				break;													\		}																\		else															\			__res = NULL;												\		__res;															\	})	/* The following macro is sooooooo big but it's extended only once	 * and does not matter much. */	#define __AUTH_DUP(auth) \	({																	\		struct authority *__res;										\		if (auth)														\		{																\			if (__res = (struct authority *)							\						malloc(sizeof (struct authority)))				\			{															\				AUTH_INIT(__res, (auth)->type);							\				if ((auth)->type == AT_SERVER)							\				{														\					if (__res->userinfo = __STRDUP((auth)->userinfo))	\						len++;											\					__res->host = __STRDUP((auth)->host);				\					if (__res->port = __STRDUP((auth)->port))			\						len++;											\				}														\				else													\					__res->reg_name = __STRDUP((auth)->reg_name);		\				len += 2;												\			}															\			else														\				break;													\		}																\		else															\			__res = NULL;												\		__res;															\	})	URI_INIT(result);	len = 0;	do {		/* If the relative URI has a scheme, take it; else take the scheme		 * of the base URI. */		if (rel_uri->scheme)		{			result->scheme = __STRDUP(rel_uri->scheme);			len++;		}		else if (result->scheme = __STRDUP(base_uri->scheme))			len++;		/* If the relative URI has a scheme or an authority, take it's		 * authority; else take the authority of the base URI. */		tmp = rel_uri->scheme || rel_uri->authority ? rel_uri->authority :													  base_uri->authority;		result->authority = __AUTH_DUP(tmp);		/* If the relative URI has a scheme or an authority or an absolute		 * path, take it's path; else if the relative URI does not have a		 * path, take the base URI's path; else if base URI has a path,		 * merge the relative URI's path with the base URI's path, and take		 * the result; else if the base URI has no path, merge the relative		 * URI's path with path "/" and take the result; no else. */		if (rel_uri->scheme || rel_uri->authority ||				rel_uri->path && *rel_uri->path == '/')			result->path = __STRDUP(rel_uri->path);		else if (!rel_uri->path)			result->path = __STRDUP(base_uri->path);		else if ((n = __path_merge(rel_uri->path, base_uri->path ?								   base_uri->path : "/",								   &result->path)) >= 0)			len += n;		else			break;		/* Query is taken from relative URI. */		if (result->query = __STRDUP(rel_uri->query))			len++;		/* Fragment is taken from relative URI. */		if (result->fragment = __STRDUP(rel_uri->fragment))			len++;		return len;	} while (0);	#undef __AUTH_DUP	#undef __STRDUP	uri_destroy(result);	return -1;}/* Recombine a URI structure into a URI string. "flags" indicates what * component(s) you would like to appear in the result string. Note that * the result string is NOT necessarily a legal URI string (When you mask * some components) though the second argument has the name "uristr". */int uri_recombine(const struct uri *uri, char *uristr, unsigned int n,				  int flags){	char *curpos = uristr;	char *end = curpos + n;	do {		if (flags & C_SCHEME && uri->scheme)		{			n = strlen(uri->scheme);			if (curpos + n + 1 < end)			{				memcpy(curpos, uri->scheme, n);				curpos += n;				*curpos++ = ':';			}			else				break;		}		if (flags & C_AUTHORITY && uri->authority)		{			if (curpos + 2 < end)			{				*curpos++ = '/';				*curpos++ = '/';			}			else				break;			if (uri->authority->type == AT_SERVER)			{				if (flags & C_USERINFO && uri->authority->userinfo)				{					n = strlen(uri->authority->userinfo);					if (curpos + n + 1 < end)					{						memcpy(curpos, uri->authority->userinfo, n);						curpos += n;						*curpos++ = '@';					}					else						break;				}				if (flags & C_HOST && uri->authority->host)				{					n = strlen(uri->authority->host);					if (curpos + n < end)					{						memcpy(curpos, uri->authority->host, n);						curpos += n;					}					else						break;				}				if (flags & C_PORT && uri->authority->port)				{					n = strlen(uri->authority->port);					if (curpos + n + 1 < end)					{						*curpos++ = ':';						memcpy(curpos, uri->authority->port, n);						curpos += n;					}					else						break;				}			}			else if (flags & C_REG_NAME && uri->authority->reg_name)			{				n = strlen(uri->authority->reg_name);				if (curpos + n < end)				{					memcpy(curpos, uri->authority->reg_name, n);					curpos += n;				}				else					break;			}		}		if (flags & C_PATH && uri->path)		{			n = strlen(uri->path);			if (curpos + n < end)			{				memcpy(curpos, uri->path, n);				curpos += n;			}			else				break;		}		if (flags & C_QUERY && uri->query)		{			n = strlen(uri->query);			if (curpos + n + 1 < end)			{				*curpos++ = '?';				memcpy(curpos, uri->query, n);				curpos += n;			}			else				break;		}		if (flags & C_FRAGMENT && uri->fragment)		{			n = strlen(uri->fragment);			if (curpos + n + 1 < end)			{				*curpos++ = '#';				memcpy(curpos, uri->fragment, n);				curpos += n;			}			else				break;		}		if (curpos < end)			*curpos = '\0';		else			break;		return curpos - uristr;	} while (0);	errno = ENOSPC;	return -1;}/* Turn some bytes into a string of escaped form. */int uri_escape(const char *bytes, unsigned int len,			   char *escstr, unsigned int n){	const char *tmp = bytes + len;	char *curpos = escstr;	char *end = escstr + n;	while (1)	{		if (bytes == tmp)		{			if (curpos < end)			{				*curpos = '\0';				return curpos - escstr;			}			break;		}		if (curpos < end)		{			if (is_uri_chr(*bytes) || *bytes == '%' && bytes + 2 < tmp &&					 isxdigit(*(bytes + 1)) && isxdigit(*(bytes + 2)))				*curpos++ = *bytes;			else if (curpos + 2 < end)			{				*curpos++ = '%';				*curpos++ = char2hex((unsigned char)*bytes >> 4);				*curpos++ = char2hex(*bytes & 0x0f);			}			else				break;		}		else			break;		bytes++;	}	errno = ENOSPC;	return -1;}

?? 快捷鍵說(shuō)明

復(fù)制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號(hào) Ctrl + =
減小字號(hào) Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
亚洲1区2区3区视频| 亚洲午夜精品17c| 日韩精品色哟哟| av亚洲精华国产精华精华| 日韩一区二区在线观看视频播放| 亚洲欧洲av在线| 精品影视av免费| 欧美亚洲综合一区| 最新欧美精品一区二区三区| 韩国精品免费视频| 91精品国产乱码久久蜜臀| 亚洲另类中文字| 波多野结衣91| 久久久久成人黄色影片| 裸体在线国模精品偷拍| 欧美精选一区二区| 亚洲综合偷拍欧美一区色| 粉嫩一区二区三区性色av| 日韩欧美中文字幕精品| 五月天激情综合网| 欧美综合一区二区| 亚洲色图欧美偷拍| 成人黄色大片在线观看| 久久精品亚洲精品国产欧美kt∨| 久久99深爱久久99精品| 91精品国产欧美一区二区| 午夜视频一区在线观看| 欧美性猛片aaaaaaa做受| 亚洲精品国产一区二区精华液 | 欧美激情一区二区三区在线| 激情综合网天天干| 精品国产一区二区国模嫣然| 青青草97国产精品免费观看无弹窗版| 精品视频在线免费| 亚洲一区二区三区小说| 91福利视频网站| 一区二区不卡在线播放 | 在线免费观看日本欧美| 自拍偷拍欧美精品| 99久久综合精品| 日韩美女视频19| 97久久超碰国产精品| 亚洲欧洲精品一区二区精品久久久| 成人综合婷婷国产精品久久| 欧美激情一区二区三区在线| 成人午夜精品在线| 欧美国产国产综合| 成人av电影免费在线播放| 国产精品女人毛片| 99久久精品国产观看| 亚洲精选视频免费看| 91精品91久久久中77777| 亚洲一区二区三区在线看| 欧美最猛性xxxxx直播| 婷婷成人综合网| 日韩精品资源二区在线| 国产在线一区二区综合免费视频| 国产欧美日本一区视频| 成人av电影在线播放| 亚洲精品一二三| 欧美丰满高潮xxxx喷水动漫| 久久福利视频一区二区| 欧美国产禁国产网站cc| 色婷婷久久久久swag精品 | 国产精品乱子久久久久| 91免费版在线| 午夜激情一区二区三区| 91精品啪在线观看国产60岁| 黄网站免费久久| 国产精品久久久久久久久晋中| 色悠悠久久综合| 婷婷丁香久久五月婷婷| 久久一二三国产| 91蜜桃视频在线| 日韩va亚洲va欧美va久久| 久久精品一区蜜桃臀影院| 91亚洲精品久久久蜜桃网站| 亚洲高清久久久| 久久综合五月天婷婷伊人| aaa欧美大片| 日韩av一区二区三区| 久久精品男人的天堂| 色婷婷亚洲一区二区三区| 日韩成人av影视| 国产精品狼人久久影院观看方式| 欧美在线免费观看视频| 久久99精品久久久久久久久久久久| 日本一二三不卡| 欧美美女喷水视频| 国产激情视频一区二区三区欧美| 亚洲综合一二区| 久久免费看少妇高潮| 一本色道久久综合狠狠躁的推荐 | 中文字幕一区av| 91精品国产高清一区二区三区| 风间由美中文字幕在线看视频国产欧美| 亚洲日本青草视频在线怡红院| 日韩亚洲欧美在线观看| jvid福利写真一区二区三区| 日韩精彩视频在线观看| 国产精品的网站| 日韩你懂的在线观看| 一本一道波多野结衣一区二区| 蓝色福利精品导航| 欧美变态tickle挠乳网站| 91美女福利视频| 国产精品一二一区| 爽爽淫人综合网网站| 国产精品久久久久久久浪潮网站 | 色先锋资源久久综合| 狠狠狠色丁香婷婷综合久久五月| 亚洲中国最大av网站| 国产精品视频第一区| 日韩欧美一卡二卡| 欧美无人高清视频在线观看| 高清不卡在线观看| 精品无码三级在线观看视频| 亚洲一区二区三区在线| 国产精品不卡在线观看| 色婷婷综合久久久中文字幕| 国产v日产∨综合v精品视频| 日韩不卡在线观看日韩不卡视频| 亚洲乱码国产乱码精品精可以看| 国产亚洲制服色| 日韩西西人体444www| 欧美性猛交一区二区三区精品| voyeur盗摄精品| 国产一区二区精品在线观看| 日韩电影在线免费| 亚洲一区二区三区四区五区中文 | 欧美欧美午夜aⅴ在线观看| 久久综合久久综合亚洲| 26uuu精品一区二区| 欧美人妇做爰xxxⅹ性高电影| av中文字幕不卡| 国产精品一区二区三区乱码| 男女视频一区二区| 五月婷婷色综合| 亚洲一线二线三线视频| 日韩美女视频一区二区 | 欧美曰成人黄网| 99re这里都是精品| 成人久久18免费网站麻豆| 国产白丝精品91爽爽久久| 国内精品免费**视频| 久久电影网电视剧免费观看| 日日夜夜免费精品| 日韩精品电影一区亚洲| 亚洲成在线观看| 午夜精品福利一区二区蜜股av| 亚洲国产精品影院| 亚洲成人自拍网| 午夜免费欧美电影| 香蕉影视欧美成人| 香蕉影视欧美成人| 日韩国产一二三区| 日本三级韩国三级欧美三级| 日韩高清在线观看| 另类小说视频一区二区| 精品一区二区三区在线播放 | 夜夜嗨av一区二区三区| 亚洲精品国产精华液| 一区二区三区.www| 一个色在线综合| 亚洲高清视频在线| 日韩激情一二三区| 久久精品噜噜噜成人88aⅴ| 九九精品视频在线看| 国产高清成人在线| 成人精品一区二区三区中文字幕| 99久久精品国产麻豆演员表| 色综合天天综合网天天狠天天 | 国产精品99久| 国产1区2区3区精品美女| www.日本不卡| 色综合欧美在线视频区| 欧美日韩一区久久| 欧美一区二区三区喷汁尤物| 26uuu精品一区二区三区四区在线| 2017欧美狠狠色| 中文字幕一区二区三区精华液 | 国产免费成人在线视频| 国产精品对白交换视频| 亚洲在线中文字幕| 免费国产亚洲视频| 国产福利精品导航| 色综合久久66| 日韩欧美区一区二| 日本一区二区三区在线观看| 亚洲精品菠萝久久久久久久| 亚洲成人福利片| 紧缚捆绑精品一区二区| 成人黄色软件下载| 在线观看亚洲一区| 精品国产乱码久久久久久免费 | 中文字幕欧美国产| 亚洲综合色视频| 韩日av一区二区| 91视频com| 日韩欧美高清在线|