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

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

?? htwwwstr.c

?? firtext搜索引擎源碼
?? 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一区二区三区免费野_久草精品视频
日韩精品一级中文字幕精品视频免费观看 | 亚洲aaa精品| 欧美tickling网站挠脚心| 丁香六月综合激情| 日本美女视频一区二区| 亚洲欧洲成人自拍| 久久久三级国产网站| 欧美性淫爽ww久久久久无| 国产精品一区久久久久| 午夜a成v人精品| 亚洲精品中文在线观看| 国产视频一区不卡| 精品国产一区二区三区不卡| 欧美伊人精品成人久久综合97| 懂色中文一区二区在线播放| 热久久久久久久| 亚洲午夜私人影院| 亚洲丝袜精品丝袜在线| 久久久精品欧美丰满| 日韩区在线观看| 欧美日韩午夜精品| 日本精品一区二区三区高清| 成人免费看黄yyy456| 国产毛片一区二区| 精品中文av资源站在线观看| 亚洲成人高清在线| 亚洲国产cao| 亚洲国产乱码最新视频| 亚洲精品福利视频网站| 国产精品毛片a∨一区二区三区| 2020国产精品自拍| 久久麻豆一区二区| 久久精品一区二区三区av| 精品久久久久久久久久久院品网| 91精品国产色综合久久久蜜香臀| 欧美日韩国产天堂| 4438x亚洲最大成人网| 欧美三级视频在线观看| 欧美日韩国产大片| 正在播放亚洲一区| 日韩欧美在线影院| 欧美不卡一二三| 欧美va在线播放| 2021国产精品久久精品| 国产日韩欧美制服另类| 久久久一区二区三区捆绑**| 久久久久久久久久久久电影| 久久久久国产免费免费 | 中文字幕一区av| 自拍偷拍欧美激情| 一区二区在线免费| 婷婷开心久久网| 麻豆精品久久精品色综合| 毛片不卡一区二区| 国产另类ts人妖一区二区| 国产盗摄视频一区二区三区| 成人一区在线观看| 91网站最新网址| 欧美日韩综合在线免费观看| 欧美一级在线视频| 久久精品一区八戒影视| 亚洲人成7777| 天天免费综合色| 国产精品伊人色| 一本久久综合亚洲鲁鲁五月天 | 67194成人在线观看| 精品国产免费久久 | 美女免费视频一区二区| 国产福利不卡视频| 91麻豆福利精品推荐| 欧美日韩卡一卡二| 久久综合狠狠综合久久综合88| 中文字幕+乱码+中文字幕一区| 成人免费视频在线观看| 日韩中文字幕av电影| 国内外精品视频| 色综合久久九月婷婷色综合| 91精品国产入口| 欧美国产激情一区二区三区蜜月| 亚洲欧美国产毛片在线| 日韩国产欧美三级| 粉嫩aⅴ一区二区三区四区五区| 欧美最新大片在线看| 久久久久久久精| 亚洲香蕉伊在人在线观| 国产福利91精品一区二区三区| 在线观看日韩一区| 久久中文娱乐网| 五月婷婷久久综合| 成人黄动漫网站免费app| 欧美精品在线一区二区三区| 久久久夜色精品亚洲| 亚洲成人精品在线观看| 成人理论电影网| 日韩欧美国产wwwww| 自拍偷拍亚洲激情| 国产精品一区二区果冻传媒| 精品1区2区3区| 中文字幕一区免费在线观看 | aa级大片欧美| 日韩精品资源二区在线| 亚洲精品日日夜夜| 国产成人免费视频| 欧美xxxxx裸体时装秀| 亚洲美腿欧美偷拍| 成人av在线播放网址| 精品国产网站在线观看| 日精品一区二区三区| 91社区在线播放| 国产欧美日韩在线视频| 蜜臂av日日欢夜夜爽一区| 欧美在线短视频| 国产精品久久久久aaaa| 国产在线精品不卡| 日韩一区二区免费在线观看| 夜夜亚洲天天久久| 91一区二区在线| 国产日韩欧美在线一区| 精品一区二区三区久久| 在线播放视频一区| 香蕉成人啪国产精品视频综合网| 9人人澡人人爽人人精品| 欧美激情中文字幕| 粉嫩aⅴ一区二区三区四区五区| 精品电影一区二区| 久久精工是国产品牌吗| 91麻豆精品国产91久久久久久 | 国产精品一区二区久久精品爱涩| 欧美一个色资源| 日韩一区精品字幕| 在线观看91av| 美国十次了思思久久精品导航| 欧美一区二区视频在线观看2022| 亚洲高清中文字幕| 欧美高清激情brazzers| 香港成人在线视频| 欧美一区二区三区四区五区| 婷婷夜色潮精品综合在线| 337p亚洲精品色噜噜狠狠| 日韩电影网1区2区| 日韩欧美区一区二| 国产在线精品一区二区不卡了 | 波多野洁衣一区| 国产精品进线69影院| 97精品超碰一区二区三区| 国产精品免费丝袜| 91亚洲精品乱码久久久久久蜜桃 | 婷婷综合在线观看| 欧美一级高清片| 九色综合狠狠综合久久| 久久九九影视网| 波多野结衣一区二区三区 | 亚洲福中文字幕伊人影院| 欧美私人免费视频| 美女视频网站黄色亚洲| 久久男人中文字幕资源站| 成人黄页在线观看| 亚洲黄色尤物视频| 欧美精品vⅰdeose4hd| 精品一区二区三区在线播放视频| 久久天堂av综合合色蜜桃网| 丰满岳乱妇一区二区三区| 亚洲人精品午夜| 欧美日韩成人在线一区| 黄页网站大全一区二区| 国产精品久久久久久久久免费桃花| 色域天天综合网| 欧美aa在线视频| 国产精品激情偷乱一区二区∴| 欧美视频完全免费看| 九一久久久久久| 亚洲色图视频网站| 91精品国产综合久久婷婷香蕉| 国产精品一线二线三线精华| 综合自拍亚洲综合图不卡区| 欧美日韩国产欧美日美国产精品| 激情综合色综合久久综合| 亚洲欧洲一区二区在线播放| 欧美日免费三级在线| 国产一区二区免费看| 亚洲男人都懂的| 精品黑人一区二区三区久久 | 久久精品国产久精国产| 国产精品久久久久久久第一福利| 在线播放一区二区三区| 成人性生交大片免费| 婷婷中文字幕综合| 国产精品午夜免费| 91精品国产福利在线观看| 成人教育av在线| 免费亚洲电影在线| 亚洲色欲色欲www在线观看| 欧美一二三区精品| 欧洲色大大久久| 高清免费成人av| 乱一区二区av| 有坂深雪av一区二区精品| 国产亚洲成av人在线观看导航| 欧美女孩性生活视频| 99re热这里只有精品免费视频|