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

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

?? token822.c

?? linux下qmail的源碼 本人加了一些注釋
?? C
字號:
#include "stralloc.h"#include "alloc.h"#include "str.h"#include "token822.h"#include "gen_allocdefs.h"static struct token822 comma = { TOKEN822_COMMA };void token822_reverse(ta)token822_alloc *ta;{ int i; int n; struct token822 temp; n = ta->len - 1; for (i = 0;i + i < n;++i)  {   temp = ta->t[i];   ta->t[i] = ta->t[n - i];   ta->t[n - i] = temp;  }}GEN_ALLOC_ready(token822_alloc,struct token822,t,len,a,i,n,x,30,token822_ready)GEN_ALLOC_readyplus(token822_alloc,struct token822,t,len,a,i,n,x,30,token822_readyplus)GEN_ALLOC_append(token822_alloc,struct token822,t,len,a,i,n,x,30,token822_readyplus,token822_append)static int needspace(t1,t2)int t1;int t2;{ if (!t1) return 0; if (t1 == TOKEN822_COLON) return 1; if (t1 == TOKEN822_COMMA) return 1; if (t2 == TOKEN822_LEFT) return 1; switch(t1)  {   case TOKEN822_ATOM: case TOKEN822_LITERAL:   case TOKEN822_QUOTE: case TOKEN822_COMMENT:     switch(t2)      {       case TOKEN822_ATOM: case TOKEN822_LITERAL:       case TOKEN822_QUOTE: case TOKEN822_COMMENT:         return 1;      }  } return 0;}static int atomok(ch)char ch;{ switch(ch)  {   case ' ': case '\t': case '\r': case '\n':   case '(': case '[': case '"':   case '<': case '>': case ';': case ':':   case '@': case ',': case '.':     return 0;  } return 1;}static void atomcheck(t)struct token822 *t;{ int i; char ch; for (i = 0;i < t->slen;++i)  {   ch = t->s[i];   if ((ch < 32) || (ch > 126) || (ch == ')') || (ch == ']') || (ch == '\\'))    {     t->type = TOKEN822_QUOTE;     return;    }  }}int token822_unparse(sa,ta,linelen)stralloc *sa;token822_alloc *ta;unsigned int linelen;{ struct token822 *t; int len; int ch; int i; int j; int lasttype; int newtype; char *s; char *lineb; char *linee; len = 0; lasttype = 0; for (i = 0;i < ta->len;++i)  {   t = ta->t + i;   newtype = t->type;   if (needspace(lasttype,newtype))     ++len;   lasttype = newtype;   switch(newtype)    {     case TOKEN822_COMMA:       len += 3; break;     case TOKEN822_AT: case TOKEN822_DOT: case TOKEN822_LEFT: case TOKEN822_RIGHT:     case TOKEN822_SEMI: case TOKEN822_COLON:       ++len; break;     case TOKEN822_ATOM: case TOKEN822_QUOTE: case TOKEN822_LITERAL: case TOKEN822_COMMENT:       if (t->type != TOKEN822_ATOM) len += 2;       for (j = 0;j < t->slen;++j)	 switch(ch = t->s[j])	  {	   case '"': case '[': case ']': case '(': case ')':	   case '\\': case '\r': case '\n': ++len;	   default: ++len;	  }       break;    }  } len += 2; if (!stralloc_ready(sa,len))   return -1; s = sa->s; lineb = s; linee = 0; lasttype = 0; for (i = 0;i < ta->len;++i)  {   t = ta->t + i;   newtype = t->type;   if (needspace(lasttype,newtype))     *s++ = ' ';   lasttype = newtype;   switch(newtype)    {     case TOKEN822_COMMA:       *s++ = ',';#define NSUW \ s[0] = '\n'; s[1] = ' '; \ if (linee && (!linelen || (s - lineb <= linelen))) \  { while (linee < s) { linee[0] = linee[2]; ++linee; } linee -= 2; } \ else { if (linee) lineb = linee + 1; linee = s; s += 2; }       NSUW       break;     case TOKEN822_AT: *s++ = '@'; break;     case TOKEN822_DOT: *s++ = '.'; break;     case TOKEN822_LEFT: *s++ = '<'; break;     case TOKEN822_RIGHT: *s++ = '>'; break;     case TOKEN822_SEMI: *s++ = ';'; break;     case TOKEN822_COLON: *s++ = ':'; break;     case TOKEN822_ATOM: case TOKEN822_QUOTE: case TOKEN822_LITERAL: case TOKEN822_COMMENT:       if (t->type == TOKEN822_QUOTE) *s++ = '"';       if (t->type == TOKEN822_LITERAL) *s++ = '[';       if (t->type == TOKEN822_COMMENT) *s++ = '(';       for (j = 0;j < t->slen;++j)	 switch(ch = t->s[j])	  {	   case '"': case '[': case ']': case '(': case ')':	   case '\\': case '\r': case '\n': *s++ = '\\';	   default: *s++ = ch;	  }       if (t->type == TOKEN822_QUOTE) *s++ = '"';       if (t->type == TOKEN822_LITERAL) *s++ = ']';       if (t->type == TOKEN822_COMMENT) *s++ = ')';       break;    }  } NSUW --s; sa->len = s - sa->s; return 1;}int token822_unquote(sa,ta)stralloc *sa;token822_alloc *ta;{ struct token822 *t; int len; int i; int j; char *s; len = 0; for (i = 0;i < ta->len;++i)  {   t = ta->t + i;   switch(t->type)    {     case TOKEN822_COMMA: case TOKEN822_AT: case TOKEN822_DOT: case TOKEN822_LEFT:      case TOKEN822_RIGHT: case TOKEN822_SEMI: case TOKEN822_COLON:        ++len; break;     case TOKEN822_LITERAL:       len += 2;     case TOKEN822_ATOM: case TOKEN822_QUOTE:       len += t->slen;    }  } if (!stralloc_ready(sa,len))   return -1; s = sa->s; for (i = 0;i < ta->len;++i)  {   t = ta->t + i;   switch(t->type)    {     case TOKEN822_COMMA: *s++ = ','; break;     case TOKEN822_AT: *s++ = '@'; break;     case TOKEN822_DOT: *s++ = '.'; break;     case TOKEN822_LEFT: *s++ = '<'; break;     case TOKEN822_RIGHT: *s++ = '>'; break;     case TOKEN822_SEMI: *s++ = ';'; break;     case TOKEN822_COLON: *s++ = ':'; break;     case TOKEN822_ATOM: case TOKEN822_QUOTE: case TOKEN822_LITERAL:       if (t->type == TOKEN822_LITERAL) *s++ = '[';       for (j = 0;j < t->slen;++j)	 *s++ = t->s[j];       if (t->type == TOKEN822_LITERAL) *s++ = ']';       break;     case TOKEN822_COMMENT: break;    }  } sa->len = s - sa->s; return 1;}int token822_parse(ta,sa,buf)token822_alloc *ta;stralloc *sa;stralloc *buf;{ int i; int salen; int level; struct token822 *t; int numtoks; int numchars; char *cbuf; salen = sa->len; numchars = 0; numtoks = 0; for (i = 0;i < salen;++i)   switch(sa->s[i])    {     case '.': case ',': case '@': case '<': case '>': case ':': case ';':       ++numtoks; break;     case ' ': case '\t': case '\r': case '\n': break;     case ')': case ']': return 0;     /* other control chars and non-ASCII chars are also bad, in theory */     case '(':       level = 1;       while (level)	{	 if (++i >= salen) return 0;	 switch(sa->s[i])	  {	   case '(': ++level; break;	   case ')': --level; break;	   case '\\': if (++i >= salen) return 0;	   default: ++numchars;	  }	}       ++numtoks;       break;     case '"':       level = 1;       while (level)	{	 if (++i >= salen) return 0;	 switch(sa->s[i])	  {	   case '"': --level; break;	   case '\\': if (++i >= salen) return 0;	   default: ++numchars;	  }	}       ++numtoks;       break;     case '[':       level = 1;       while (level)	{	 if (++i >= salen) return 0;	 switch(sa->s[i])	  {	   case ']': --level; break;	   case '\\': if (++i >= salen) return 0;	   default: ++numchars;	  }	}       ++numtoks;       break;     default:       do	{	 if (sa->s[i] == '\\') if (++i >= salen) break;	 ++numchars;	 if (++i >= salen)	   break;	}       while (atomok(sa->s[i]));       --i;       ++numtoks;    } if (!token822_ready(ta,numtoks))   return -1; if (!stralloc_ready(buf,numchars))   return -1; cbuf = buf->s; ta->len = numtoks; t = ta->t; for (i = 0;i < salen;++i)   switch(sa->s[i])    {     case '.': t->type = TOKEN822_DOT; ++t; break;     case ',': t->type = TOKEN822_COMMA; ++t; break;     case '@': t->type = TOKEN822_AT; ++t; break;     case '<': t->type = TOKEN822_LEFT; ++t; break;     case '>': t->type = TOKEN822_RIGHT; ++t; break;     case ':': t->type = TOKEN822_COLON; ++t; break;     case ';': t->type = TOKEN822_SEMI; ++t; break;     case ' ': case '\t': case '\r': case '\n': break;     case '(':       t->type = TOKEN822_COMMENT; t->s = cbuf; t->slen = 0;       level = 1;       while (level)	{	 ++i; /* assert: < salen */	 switch(sa->s[i])	  {	   case '(': ++level; break;	   case ')': --level; break;	   case '\\': ++i; /* assert: < salen */	   default: *cbuf++ = sa->s[i]; ++t->slen;	  }	}       ++t;       break;     case '"':       t->type = TOKEN822_QUOTE; t->s = cbuf; t->slen = 0;       level = 1;       while (level)	{	 ++i; /* assert: < salen */	 switch(sa->s[i])	  {	   case '"': --level; break;	   case '\\': ++i; /* assert: < salen */	   default: *cbuf++ = sa->s[i]; ++t->slen;	  }	}       ++t;       break;     case '[':       t->type = TOKEN822_LITERAL; t->s = cbuf; t->slen = 0;       level = 1;       while (level)	{	 ++i; /* assert: < salen */	 switch(sa->s[i])	  {	   case ']': --level; break;	   case '\\': ++i; /* assert: < salen */	   default: *cbuf++ = sa->s[i]; ++t->slen;	  }	}       ++t;       break;     default:       t->type = TOKEN822_ATOM; t->s = cbuf; t->slen = 0;       do	{	 if (sa->s[i] == '\\') if (++i >= salen) break;	 *cbuf++ = sa->s[i]; ++t->slen;	 if (++i >= salen)	   break;	}       while (atomok(sa->s[i]));       atomcheck(t);       --i;       ++t;    } return 1;}static int gotaddr(taout,taaddr,callback)token822_alloc *taout;token822_alloc *taaddr;int (*callback)();{ int i; if (callback(taaddr) != 1)   return 0; if (!token822_readyplus(taout,taaddr->len))   return 0;  for (i = 0;i < taaddr->len;++i)   taout->t[taout->len++] = taaddr->t[i]; taaddr->len = 0; return 1;}int token822_addrlist(taout,taaddr,ta,callback)token822_alloc *taout;token822_alloc *taaddr;token822_alloc *ta;int (*callback)();{ struct token822 *t; struct token822 *beginning; int ingroup; int wordok; taout->len = 0; taaddr->len = 0; if (!token822_readyplus(taout,1)) return -1; if (!token822_readyplus(taaddr,1)) return -1;  ingroup = 0; wordok = 1; beginning = ta->t + 2; t = ta->t + ta->len - 1; /* rfc 822 address lists are easy to parse from right to left */#define FLUSH if (taaddr->len) if (!gotaddr(taout,taaddr,callback)) return -1;#define FLUSHCOMMA if (taaddr->len) { \if (!gotaddr(taout,taaddr,callback)) return -1; \if (!token822_append(taout,&comma)) return -1; }#define ADDRLEFT if (!token822_append(taaddr,t--)) return -1;#define OUTLEFT if (!token822_append(taout,t--)) return -1; while (t >= beginning)  {   switch(t->type)    {     case TOKEN822_SEMI:       FLUSHCOMMA       if (ingroup) return 0;       ingroup = 1;       wordok = 1;       break;     case TOKEN822_COLON:       FLUSH       if (!ingroup) return 0;       ingroup = 0;       while ((t >= beginning) && (t->type != TOKEN822_COMMA))	 OUTLEFT       if (t >= beginning)	 OUTLEFT       wordok = 1;       continue;     case TOKEN822_RIGHT:       FLUSHCOMMA       OUTLEFT       while ((t >= beginning) && (t->type != TOKEN822_LEFT))	 ADDRLEFT       /* important to use address here even if it's empty: <> */       if (!gotaddr(taout,taaddr,callback)) return -1;       if (t < beginning) return 0;       OUTLEFT       while ((t >= beginning) && ((t->type == TOKEN822_COMMENT) || (t->type == TOKEN822_ATOM) || (t->type == TOKEN822_QUOTE) || (t->type == TOKEN822_AT) || (t->type == TOKEN822_DOT)))	 OUTLEFT       wordok = 0;       continue;     case TOKEN822_ATOM: case TOKEN822_QUOTE: case TOKEN822_LITERAL:       if (!wordok)	 FLUSHCOMMA       wordok = 0;       ADDRLEFT       continue;     case TOKEN822_COMMENT:       /* comment is lexically a space; shouldn't affect wordok */       break;     case TOKEN822_COMMA:       FLUSH       wordok = 1;       break;     default:       wordok = 1;       ADDRLEFT       continue;    }   OUTLEFT  } FLUSH ++t; while (t > ta->t)   if (!token822_append(taout,--t)) return -1; token822_reverse(taout); return 1;}

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
国产欧美日韩麻豆91| 日本一区中文字幕 | 调教+趴+乳夹+国产+精品| 免费高清视频精品| 99视频一区二区| 日韩精品一区二区三区中文精品 | 日韩美女视频一区二区在线观看| 欧美国产综合色视频| 丝袜美腿亚洲综合| av一区二区三区四区| 26uuu亚洲综合色| 日韩精品电影在线观看| 91亚洲国产成人精品一区二区三 | 欧美精品高清视频| 亚洲欧洲日本在线| 成人一区二区三区在线观看| 欧美tk—视频vk| 免费人成精品欧美精品| 欧美系列亚洲系列| 亚洲精品伦理在线| av成人免费在线| 国产精品美女久久久久aⅴ| 国产麻豆视频一区二区| 日韩视频国产视频| 裸体健美xxxx欧美裸体表演| 欧美乱妇15p| 亚洲第一二三四区| 欧美在线影院一区二区| 一区二区三区不卡视频| 97久久超碰精品国产| 综合网在线视频| 97久久久精品综合88久久| 国产精品毛片无遮挡高清| 懂色av一区二区在线播放| 国产精品麻豆网站| 色婷婷狠狠综合| 亚洲午夜视频在线观看| 欧美日韩中文字幕一区| 亚洲va韩国va欧美va精品| 欧美日韩视频不卡| 日本成人中文字幕| 精品奇米国产一区二区三区| 男女男精品视频| 国产日韩欧美亚洲| 成人污视频在线观看| 亚洲日本乱码在线观看| 欧美自拍偷拍一区| 日韩精品亚洲一区| 久久久99精品免费观看| 成人福利电影精品一区二区在线观看 | 日韩精品中午字幕| 国内久久精品视频| 成人免费一区二区三区在线观看| av高清久久久| 三级久久三级久久| 久久精品夜色噜噜亚洲a∨| 99热这里都是精品| 日韩激情一二三区| 国产欧美精品一区二区色综合| 成人av资源站| 天天综合天天做天天综合| 精品国产乱码久久久久久蜜臀| 国产精品中文字幕欧美| 一区二区三区不卡视频在线观看 | 欧美日韩一级视频| 久草这里只有精品视频| 日本一区二区三区高清不卡| 欧美视频在线观看一区| 国内外精品视频| 一区二区三区在线看| 精品裸体舞一区二区三区| 色综合视频在线观看| 青青草成人在线观看| 国产欧美视频一区二区三区| 欧美系列一区二区| 国产不卡视频一区二区三区| 亚洲国产一区在线观看| 国产日韩av一区| 91精品国产色综合久久不卡电影| 国产精品66部| 日本大胆欧美人术艺术动态| 亚洲色大成网站www久久九九| 91精品国产色综合久久不卡蜜臀 | 亚洲国产日韩一级| 久久久久亚洲综合| 制服丝袜成人动漫| 91麻豆国产精品久久| 国产一区二区毛片| 丝袜a∨在线一区二区三区不卡| 中文字幕在线观看不卡| 精品成人a区在线观看| 欧美老肥妇做.爰bbww| 91蝌蚪porny九色| 国产精品1区2区3区| 久草精品在线观看| 久久国产婷婷国产香蕉| 午夜精品久久久久久久蜜桃app| 久久无码av三级| 91精品婷婷国产综合久久性色| av电影一区二区| 国产成a人无v码亚洲福利| 免费在线观看成人| 欧美96一区二区免费视频| 亚洲成人自拍偷拍| 亚洲第一福利视频在线| 亚洲图片欧美视频| 一区二区三区四区在线| 亚洲欧美日韩人成在线播放| 国产精品每日更新| 1000精品久久久久久久久| 欧美经典三级视频一区二区三区| 久久久99精品久久| 日本一区二区三区久久久久久久久不 | 自拍偷拍欧美激情| 国产精品久久久一区麻豆最新章节| 精品国产乱码久久久久久久| 日韩三级精品电影久久久| 欧美成人r级一区二区三区| 51午夜精品国产| 日韩午夜电影在线观看| 91精品国产乱码| 精品1区2区3区| 91精品在线观看入口| 欧美日产在线观看| 在线免费观看成人短视频| 欧洲一区二区av| 欧美视频三区在线播放| 欧美色图在线观看| 91精品国产入口| 精品国产亚洲在线| 日本一二三不卡| 一区二区三区欧美在线观看| 亚洲无线码一区二区三区| 美女网站在线免费欧美精品| 国产精品综合二区| 9久草视频在线视频精品| 91国内精品野花午夜精品| 欧美日韩国产乱码电影| 欧美本精品男人aⅴ天堂| 国产日韩欧美制服另类| 一二三四社区欧美黄| 天天综合色天天综合色h| 国产美女在线观看一区| 丁香婷婷综合网| 欧美日韩高清一区| 欧美电影免费观看高清完整版在线观看 | 国内精品久久久久影院薰衣草| 成人小视频免费观看| 91久久奴性调教| 精品久久国产老人久久综合| 日韩理论电影院| 免费高清不卡av| 91亚洲国产成人精品一区二区三 | 在线影院国内精品| 欧美成人video| 一区二区三区小说| 国产福利一区二区| 4438x成人网最大色成网站| 国产亚洲一区二区在线观看| 亚洲人成伊人成综合网小说| 日韩国产高清在线| 91美女在线看| 国产亚洲欧美中文| 免费在线看一区| 91偷拍与自偷拍精品| 久久午夜免费电影| 蜜臀va亚洲va欧美va天堂| 91麻豆免费看| 久久综合精品国产一区二区三区 | 成人欧美一区二区三区| 久久国产剧场电影| 欧美少妇性性性| 国产精品久久夜| 国产精品乡下勾搭老头1| 欧美一卡二卡三卡| 亚洲综合一区二区三区| 成人精品免费视频| 久久视频一区二区| 久久精品国产精品亚洲精品 | 亚欧色一区w666天堂| 成人国产精品免费观看动漫| 久久综合精品国产一区二区三区 | 奇米精品一区二区三区在线观看| av网站一区二区三区| 日韩欧美国产精品| 五月婷婷色综合| 欧美午夜精品久久久久久孕妇| 一色屋精品亚洲香蕉网站| 国产成人精品综合在线观看| 精品国产网站在线观看| 青青草国产精品97视觉盛宴| 欧美日韩国产一区| 亚洲.国产.中文慕字在线| 欧美日免费三级在线| 亚洲线精品一区二区三区| 欧美日韩一区二区电影| 亚洲gay无套男同| 欧美精品丝袜久久久中文字幕| 午夜精彩视频在线观看不卡| 欧美揉bbbbb揉bbbbb|