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

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

?? htwwwstr.c

?? www工具包. 這是W3C官方支持的www支撐庫. 其中提供通用目的的客戶端的WebAPI: complete HTTP/1.1 (with caching, pipelining, PUT, POS
?? C
?? 第 1 頁 / 共 2 頁
字號:
/*								     HTWWWStr.c**	WWW RELATED STRING UTILITIES****	(c) COPYRIGHT MIT 1995.**	Please first read the full copyright statement in the file COPYRIGH.**	@(#) $Id: HTWWWStr.c,v 2.36 2000/01/06 10:48:50 kahan Exp $****      Now 13 95	Spwaned from HTString.c*//* Library include files */#include "wwwsys.h"#include "WWWUtil.h"#include "HTParse.h"#include "HTInet.h"#include "HTUser.h"#include "HTWWWStr.h"					 /* Implemented here */PRIVATE char * months[12] = {    "Jan","Feb","Mar","Apr","May","Jun","Jul","Aug","Sep","Oct","Nov","Dec"};#ifndef HAVE_STRFTIMEPRIVATE char * wkdays[7] = {    "Sun","Mon","Tue","Wed","Thu","Fri","Sat"};#endif/* ------------------------------------------------------------------------- *//*	Find next Field**	---------------**	Finds the next RFC822 token in a string**	On entry,**	*pstr	points to a string containing a word separated**		by white white space "," ";" or "=". The word**		can optionally be quoted using <"> or "<" ">"**		Comments surrrounded by '(' ')' are filtered out**** 	On exit,**	*pstr	has been moved to the first delimiter past the**		field**		THE STRING HAS BEEN MUTILATED by a 0 terminator****	Returns	a pointer to the first word or NULL on error*/PUBLIC char * HTNextField (char ** pstr){    char * p = *pstr;    char * start = NULL;    if (!pstr || !*pstr) return NULL;    while (1) {	/* Strip white space and other delimiters */	while (*p && (isspace((int) *p) || *p==',' || *p==';' || *p=='=')) p++;	if (!*p) {	    *pstr = p;	    return NULL;				   	 /* No field */	}	if (*p == '"') {				     /* quoted field */	    start = ++p;	    for(;*p && *p!='"'; p++)		if (*p == '\\' && *(p+1)) p++;	       /* Skip escaped chars */	    break;			    /* kr95-10-9: needs to stop here */	} else if (*p == '<') {				     /* quoted field */	    start = ++p;	    for(;*p && *p!='>'; p++)		if (*p == '\\' && *(p+1)) p++;	       /* Skip escaped chars */	    break;			    /* kr95-10-9: needs to stop here */	} else if (*p == '(') {					  /* Comment */	    for(;*p && *p!=')'; p++)		if (*p == '\\' && *(p+1)) p++;	       /* Skip escaped chars */	    p++;	} else {					      /* Spool field */	    start = p;	    while(*p && !isspace((int) *p) && *p!=',' && *p!=';' && *p!='=')		p++;	    break;						   /* Got it */	}    }    if (*p) *p++ = '\0';    *pstr = p;    return start;}/*	Find next LWS delimited token**	-----------------------------**	On entry,**	*pstr	points to a string containing a word separated**		by white white space "," ";" or "=". The word**		can optionally be quoted using <"> or "<" ">"**		Comments surrrounded by '(' ')' are filtered out**** 	On exit,**	*pstr	has been moved to the first delimiter past the**		field**		THE STRING HAS BEEN MUTILATED by a 0 terminator****	Returns	a pointer to the first word or NULL on error*/PUBLIC char * HTNextLWSToken (char ** pstr){    char * p = *pstr;    char * start = NULL;    if (!pstr || !*pstr) return NULL;    /* Strip initial white space  */    while (*p && (isspace((int) *p))) p++;    if (!*p) {	*pstr = p;	return NULL;				   	 /* No field */    }    /* Now search for the next white space */    start = p;    while(*p && !isspace((int) *p)) p++;    if (*p) *p++ = '\0';    *pstr = p;    return start;}/*	Find next Name-value pair**	-------------------------**	This is the same as HTNextField but it does not look for '=' as a**	separator so if there is a name-value pair then both parts are**	returned.**	Returns	a pointer to the first word or NULL on error*/PUBLIC char * HTNextPair (char ** pstr){    char * p = *pstr;    char * start = NULL;    if (!pstr || !*pstr) return NULL;    while (1) {	/* Strip white space and other delimiters */	while (*p && (*p==',' || *p==';')) p++;	if (!*p) {	    *pstr = p;	    return NULL;				   	 /* No field */	}	if (*p == '"') {				     /* quoted field */	    start = ++p;	    for(;*p && *p!='"'; p++)		if (*p == '\\' && *(p+1)) p++;	       /* Skip escaped chars */	    break;			    /* kr95-10-9: needs to stop here */	} else if (*p == '<') {				     /* quoted field */	    start = ++p;	    for(;*p && *p!='>'; p++)		if (*p == '\\' && *(p+1)) p++;	       /* Skip escaped chars */	    break;			    /* kr95-10-9: needs to stop here */	} else if (*p == '(') {					  /* Comment */	    for(;*p && *p!=')'; p++)		if (*p == '\\' && *(p+1)) p++;	       /* Skip escaped chars */	    p++;	} else {					      /* Spool field */	    start = p;	    while(*p && *p!=',' && *p!=';')		p++;	    break;						   /* Got it */	}    }    if (*p) *p++ = '\0';    *pstr = p;    return start;}/*	Find next Name-value param**	--------------------------**	This is the same as HTNextPair but doesn't look for ','**	Returns	a pointer to the first word or NULL on error*/PUBLIC char * HTNextParam (char ** pstr){    char * p = *pstr;    char * start = NULL;    if (!pstr || !*pstr) return NULL;    while (1) {	/* Strip white space and other delimiters */	while (*p && *p==';') p++;	if (!*p) {	    *pstr = p;	    return NULL;				   	 /* No field */	}	if (*p == '"') {				     /* quoted field */	    start = ++p;	    for(;*p && *p!='"'; p++)		if (*p == '\\' && *(p+1)) p++;	       /* Skip escaped chars */	    break;			    /* kr95-10-9: needs to stop here */	} else if (*p == '<') {				     /* quoted field */	    start = ++p;	    for(;*p && *p!='>'; p++)		if (*p == '\\' && *(p+1)) p++;	       /* Skip escaped chars */	    break;			    /* kr95-10-9: needs to stop here */	} else if (*p == '(') {					  /* Comment */	    for(;*p && *p!=')'; p++)		if (*p == '\\' && *(p+1)) p++;	       /* Skip escaped chars */	    p++;	} else {					      /* Spool field */	    start = p;	    while (*p && *p!=';')		p++;	    break;						   /* Got it */	}    }    if (*p) *p++ = '\0';    *pstr = p;    return start;}/*	Find next element in a comma separated string**	---------------------------------------------**	This is the same as HTNextPair but it does not look for anything**	else than ',' as separator**	Returns	a pointer to the first word or NULL on error*/PUBLIC char * HTNextElement (char ** pstr){    char * p = *pstr;    char * start = NULL;    if (!pstr || !*pstr) return NULL;    /* Strip white space and other delimiters */    while (*p && ((isspace((int) *p)) || *p==',')) p++;    if (!*p) {	*pstr = p;	return NULL;					   	 /* No field */    }    start = p;    while (1) {	if (*p == '"') {				     /* quoted field */	    for(;*p && *p!='"'; p++)		if (*p == '\\' && *(p+1)) p++;	       /* Skip escaped chars */	    p++;	} else if (*p == '<') {				     /* quoted field */	    for(;*p && *p!='>'; p++)		if (*p == '\\' && *(p+1)) p++;	       /* Skip escaped chars */	    p++;	} else if (*p == '(') {					  /* Comment */	    for(;*p && *p!=')'; p++)		if (*p == '\\' && *(p+1)) p++;	       /* Skip escaped chars */	    p++;	} else {					      /* Spool field */	    while (*p && *p!=',') p++;	    break;						   /* Got it */	}    }    if (*p) *p++ = '\0';    *pstr = p;    return start;}/*	Find next "/" delimied segment**	------------------------------**	This is the same as HTNextField but it includes "/" as a delimiter.**	Returns	a pointer to the first segment or NULL on error*/PUBLIC char * HTNextSegment (char ** pstr){    char * p = *pstr;    char * start = NULL;    if (!pstr || !*pstr) return NULL;    while (1) {	/* Strip white space and other delimiters */	while (*p && (isspace((int) *p) || *p==',' || *p==';' || *p=='=' || *p=='/')) p++;	if (!*p) {	    *pstr = p;	    return NULL;				   	 /* No field */	}	if (*p == '"') {				     /* quoted field */	    start = ++p;	    for(;*p && *p!='"'; p++)		if (*p == '\\' && *(p+1)) p++;	       /* Skip escaped chars */	    break;			    /* kr95-10-9: needs to stop here */	} else if (*p == '<') {				     /* quoted field */	    start = ++p;	    for(;*p && *p!='>'; p++)		if (*p == '\\' && *(p+1)) p++;	       /* Skip escaped chars */	    break;			    /* kr95-10-9: needs to stop here */	} else if (*p == '(') {					  /* Comment */	    for(;*p && *p!=')'; p++)		if (*p == '\\' && *(p+1)) p++;	       /* Skip escaped chars */	    p++;	} else {					      /* Spool field */	    start = p;	    while(*p && !isspace((int) *p) && *p!=',' && *p!=';' && *p!='=' && *p!='/')		p++;	    break;						   /* Got it */	}    }    if (*p) *p++ = '\0';    *pstr = p;    return start;}/***	Find the next s-expression token from a string of characters.**	We return the name of this expression and the param points to the**	parameters. ****	NOTE: The string has been mutilated by '/0's*/PUBLIC char * HTNextSExp (char ** exp, char ** param){    char * p = *exp;    char * name = NULL;    if (!exp || !*exp) return NULL;    while (*p && isspace((int) *p)) p++;		/* Strip leading white space */    if (!*p) {	*exp = p;	return NULL;					   	 /* No field */    }    if (*p == '{') {					     /* Open bracket */	int cnt = 1;	/*	**  Look for name of this expression. If we find a token then search	**  for the rest of the expression and remove the end '}'	*/	p++;	if ((name = HTNextField(&p)) == NULL) return NULL;	while (*p && isspace((int) *p)) p++;	*param = p;	while (*p) {	    if (*p == '{') cnt++;	    if (*p == '}') cnt--;	    if (!cnt) {		*p = '\0';		break;	    }	    p++;	}    }    return name;}/***	Returns a Message-ID string including the open '<' and the closing '>'.**	The format of the string is:****		"<" time-in-sec "Z" process-id "@" FQDN ">"****	or on systems that doesn't have process-id:****		"<" time-in-sec "Z" user "@" FQDN ">"****	Returns a pointer to the MessageID*/PUBLIC const char * HTMessageIdStr (HTUserProfile * up){    static char buf[80];    time_t sectime = time(NULL);#ifdef HAVE_GETPID    const char * address = HTUserProfile_fqdn(up);#else    const char * address = HTUserProfile_email(up);#endif /* HAVE_GETPID */    if (!address) address = tmpnam(NULL);    if ((!address || !*address) && sectime < 0) {	HTTRACE(CORE_TRACE, "MessageID...  Can't make a unique MessageID\n");	return "";    }#ifdef HAVE_GETPID    sprintf(buf, "<%ldZ%ld@%s>", (long)sectime, (long)getpid(), address ? address : "@@@");#else    sprintf(buf, "<%ldZ%s>", sectime, address ? address : "@@@");#endif /* HAVE_GETPID */    *(buf+79) = '\0';    return buf;}/*	Date and Time Parser**	--------------------**	These functions are taken from the server written by Ari Luotonen*/#if 0PRIVATE int make_num (const char *  s){    if (*s >= '0' && *s <= '9')	return 10 * (*s - '0') + *(s+1) - '0';    else	return *(s+1) - '0';}#endifPRIVATE int make_month (char * s, char ** ends){    char * ptr = s;    while (!isalpha((int) *ptr)) ptr++;    if (*ptr) {	int i;	*ends = ptr+3;			for (i=0; i<12; i++)	    if (!strncasecomp(months[i], ptr, 3)) return i;    }    return 0;}/***	Parse a str in GMT format to a local time time_t representation**	Four formats are accepted:****		Wkd, 00 Mon 0000 00:00:00 GMT		(rfc1123)**		Weekday, 00-Mon-00 00:00:00 GMT		(rfc850)**		Wkd Mon 00 00:00:00 0000 GMT		(ctime)**		1*DIGIT					(delta-seconds)*/PUBLIC time_t HTParseTime (const char * str, HTUserProfile * up, BOOL expand){    char * s;    struct tm tm;    time_t t;    if (!str) return 0;    if ((s = strchr(str, ','))) {	 /* Thursday, 10-Jun-93 01:29:59 GMT */	s++;				/* or: Thu, 10 Jan 1993 01:29:59 GMT */	while (*s && *s==' ') s++;	if (strchr(s,'-')) {				     /* First format */	    HTTRACE(CORE_TRACE, "Format...... Weekday, 00-Mon-00 00:00:00 GMT\n");	    if ((int)strlen(s) < 18) {		HTTRACE(CORE_TRACE, "ERROR....... Not a valid time format \"%s\"\n" _ s);		return 0;	    }	    tm.tm_mday = strtol(s, &s, 10);	    tm.tm_mon = make_month(s, &s);	    tm.tm_year = strtol(++s, &s, 10);

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
日韩视频一区二区在线观看| 婷婷久久综合九色综合伊人色| 欧美va日韩va| 4438x亚洲最大成人网| 欧美日韩美女一区二区| 欧美亚洲一区三区| 欧美日韩国产综合一区二区三区| 色综合天天视频在线观看| 91免费看片在线观看| 972aa.com艺术欧美| 色婷婷精品久久二区二区蜜臂av | 国产v日产∨综合v精品视频| 国产一区亚洲一区| 风间由美一区二区三区在线观看| 高清不卡一二三区| 91免费观看国产| 在线观看一区不卡| 3atv一区二区三区| 精品国产一区二区在线观看| 久久婷婷成人综合色| 中文字幕制服丝袜成人av| 亚洲精品国产精华液| 亚洲sss视频在线视频| 免费av网站大全久久| 韩国女主播一区| hitomi一区二区三区精品| 色婷婷综合激情| 欧美一级淫片007| 久久天堂av综合合色蜜桃网| 亚洲日本在线看| 亚洲国产乱码最新视频| 国产美女一区二区| zzijzzij亚洲日本少妇熟睡| 色婷婷av一区二区三区之一色屋| 欧美人牲a欧美精品| 精品国产一区二区三区四区四 | 精品日韩一区二区| 欧美高清一级片在线观看| 亚洲一区在线观看免费观看电影高清 | 在线观看精品一区| 欧美一区二区精品| 国产精品免费人成网站| 舔着乳尖日韩一区| 国产精品一二三四区| 91久久久免费一区二区| 精品日韩一区二区三区免费视频| 中文字幕一区二区在线观看| 亚洲成人福利片| 国产福利一区二区三区| 欧美午夜电影网| 久久精品夜色噜噜亚洲aⅴ| 亚洲综合在线电影| 国产乱码精品一区二区三区av| 91激情在线视频| 久久―日本道色综合久久| 一区二区三区在线观看国产| 国产一区二区久久| 欧美色图激情小说| 亚洲国产精品av| 老汉av免费一区二区三区| 色综合 综合色| 久久综合九色综合97婷婷| 亚洲自拍偷拍网站| 成人精品在线视频观看| 欧美成人在线直播| 亚洲在线观看免费| 成人深夜福利app| 日韩三级高清在线| 亚洲午夜激情av| eeuss影院一区二区三区 | 亚洲蜜臀av乱码久久精品| 老司机午夜精品| 欧美性色综合网| 国产精品久久久久一区| 激情偷乱视频一区二区三区| 欧美图片一区二区三区| 国产精品欧美经典| 国产成人精品www牛牛影视| 欧美一级高清片在线观看| 亚洲小说欧美激情另类| 一本大道久久a久久精品综合| 久久久无码精品亚洲日韩按摩| 偷拍亚洲欧洲综合| 欧美伊人久久久久久久久影院 | 亚洲日本成人在线观看| 成人中文字幕合集| 久久久久亚洲综合| 久久99这里只有精品| 91.xcao| 亚洲国产aⅴ天堂久久| 色综合久久天天综合网| 自拍偷拍亚洲欧美日韩| 9i在线看片成人免费| 中文字幕高清不卡| 国产成人精品一区二| 久久久久久久久久久久久夜| 久久电影网站中文字幕| 日韩精品专区在线影院重磅| 日本成人中文字幕| 91精品在线一区二区| 三级欧美在线一区| 欧美精品一级二级| 视频一区在线视频| 91麻豆精品国产自产在线观看一区 | 欧美日韩在线播放三区| 亚洲精品精品亚洲| 欧美视频第二页| 亚洲一区二区偷拍精品| 精品视频123区在线观看| 丝袜脚交一区二区| 欧美一区永久视频免费观看| 免费成人你懂的| 久久久久久久久久久久久久久99| 九九九精品视频| 久久综合精品国产一区二区三区| 国产精品亚洲一区二区三区在线| 久久一夜天堂av一区二区三区| 国产露脸91国语对白| 国产精品视频在线看| 95精品视频在线| 亚洲妇女屁股眼交7| 欧美一区二区三区四区视频| 美女尤物国产一区| 国产欧美日韩精品a在线观看| av在线播放一区二区三区| 亚洲在线成人精品| 91精品国产丝袜白色高跟鞋| 久久99精品久久久久久动态图| 国产天堂亚洲国产碰碰| 91免费版在线看| 视频一区二区三区在线| 久久久久久麻豆| 99精品在线观看视频| 天堂在线亚洲视频| www国产精品av| 99久久精品费精品国产一区二区 | 色狠狠一区二区| 丝袜亚洲另类丝袜在线| 国产午夜精品一区二区三区四区| 97久久久精品综合88久久| 亚洲成人综合网站| 久久久综合精品| 一本久道久久综合中文字幕| 麻豆久久一区二区| 亚洲视频精选在线| 欧美一区二区三区四区久久| gogo大胆日本视频一区| 日韩福利视频网| 中文字幕av不卡| 在线播放中文一区| 成人性视频免费网站| 日韩精品欧美成人高清一区二区| 久久精品人人做人人爽97| 91久久精品一区二区三区| 九色综合狠狠综合久久| 亚洲视频中文字幕| 日韩精品一区二区三区在线| 91在线国产观看| 精品一区二区三区日韩| 亚洲制服丝袜av| 中文字幕精品—区二区四季| 欧美一区二区三区视频| 色呦呦国产精品| 国产一区二区三区四区五区入口 | 国产自产高清不卡| 一区二区三区精品视频| 国产午夜精品福利| 欧美一三区三区四区免费在线看| 91视频com| 国产大陆亚洲精品国产| 日本成人在线电影网| 亚洲女同一区二区| 久久美女高清视频| 欧美一卡2卡3卡4卡| 在线观看国产日韩| 91视频观看视频| 国产91精品久久久久久久网曝门| 日本在线不卡一区| 亚洲午夜在线观看视频在线| 亚洲欧美一区二区视频| 26uuu精品一区二区三区四区在线 26uuu精品一区二区在线观看 | 色综合久久久久久久久| 国产91精品一区二区| 韩国一区二区三区| 日本最新不卡在线| 亚洲成人777| 亚洲三级电影网站| 亚洲欧洲精品成人久久奇米网| 久久先锋资源网| 欧美mv和日韩mv国产网站| 欧美丰满一区二区免费视频| 在线看国产一区| 日本电影亚洲天堂一区| 91蜜桃网址入口| jvid福利写真一区二区三区| 丁香婷婷综合五月| 成人黄色网址在线观看| 国产·精品毛片| 成人午夜免费电影| 成人性视频免费网站|