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

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

?? yacgi.c

?? C libs that handle common CGI operations.
?? C
字號:
/* * Copyright(c) 1997 Andrew Girow. * All rights reserved. * * All of the documentation and software included in the YACGI 1.2 * is copyrighted by Andrew Girow. * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions * are met: * 1. Redistributions of source code must retain the above copyright *    notice, this list of conditions and the following disclaimer. * 2. Redistributions in binary form must reproduce the above copyright *    notice, this list of conditions and the following disclaimer in *    the documentation and/or other materials provided with the *    distribution. * 3. All advertising materials mentioning features or use of this *    software must display the following acknowledgement: *    This product includes software developed by Andrew Girow. * 4. The name of Andrew Girow may not be used in advertising or *    publicity pertaining to distribution of the software without *    specific prior written permission. * * THIS SOFTWARE IS PROVIDED BY ANDREW GIROW "AS IS". * ANDREW GIROW DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, * INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN * NO EVENT WILL ANDREW GIROW BE LIABLE FOR ANY SPECIAL, INDIRECT OR * CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS * OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE * OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE * USE OR PERFORMANCE OF THIS SOFTWARE. * */#include "yacgi.h"/*-------------------------------------------------------------------- *                        Name-Value Relation *-------------------------------------------------------------------*/static int    cgiStrInd(char *s,char c);static int    cgiParsePost(CGI *cgi);static int    cgiParseGet(CGI *cgi);static int    cgiParse(CGI *cgi);static char   cgiX2c(char *what);static void   cgiUnescape(char *url);static void   cgiPlus2space(char *str);int cgiFirst(CGI *cgi){   if(!cgi) return 0;   cgi->pos= cgi->first;   return 1;}int cgiNext(CGI *cgi){   CGI_ENTRY *t;   if(!cgi || !cgi->pos->next) return 0;   t = cgi->pos;   cgi->pos = t->next;   return 1;}char *cgiName(CGI *cgi){   CGI_ENTRY *t;   if(!cgi) return 0;   return cgi->pos->name;}char *cgiValue(CGI *cgi){   CGI_ENTRY *t;   if(!cgi) return 0;   return cgi->pos->value;}char *cgiValueFirst(CGI *cgi, char *name){   if(!cgi) return 0;   cgi->pos = cgi->first;   return cgiValueNext(cgi,name);}char *cgiValueNext(CGI *cgi, char *name){   CGI_ENTRY *t;   if(!cgi) return 0;   while( cgi->pos )   {      t = cgi->pos;      cgi->pos = t->next;      if(!strcmp(t->name,name))      {         return t->value;      }   }   return 0;}CGI *cgiOpen(){    CGI *cgi;    cgi = (CGI *) malloc( sizeof(CGI));    if (!cgi)    {       cgiStateSet(CGI_MEMORY);       return 0;    }    /* Init CGI structure */    cgi->cString = 0;    cgi->cLength = 0;    cgi->first = 0;   /* init entries' list */    /* Parse request */    if (!strcmp(cgiEnvGet("REQUEST_METHOD"), "POST"))    {          if (!strcmp(cgiEnvGet("CONTENT_TYPE"),	                   "application/x-www-form-urlencoded"))	  {                if (cgiParsePost(cgi) != CGI_OK)		{		    return 0;		}	  }	  else	  {                cgiStateSet(CGI_CONTENTTYPE);	        return 0;	  }    }    else    {          if (!strcmp(cgiEnvGet("REQUEST_METHOD"), "GET"))          {                if (cgiParseGet(cgi) != CGI_OK)	        {		    return 0;	        }          }          else          {                cgiStateSet(CGI_REQUESTMETHOD);                return 0;          }    }    cgiFirst(cgi);    return cgi;}int cgiParsePost(CGI *cgi){    cgi->cLength = atoi(cgiEnvGet("CONTENT_LENGTH"));    if (!cgi->cLength)    {        return cgiStateSet(CGI_OK);    }    cgi->cString = (char *) malloc(cgi->cLength+1);    if (!cgi->cString)    {        return cgiStateSet(CGI_MEMORY);    }    if (fread(cgi->cString, 1, cgi->cLength, stdin) != cgi->cLength)    {        return cgiStateSet(CGI_IO);    }    cgi->cString[ cgi->cLength ] = '\0';    return cgiParse(cgi);}int cgiParseGet(CGI *cgi){    cgi->cLength = strlen(cgiEnvGet("QUERY_STRING"));    if (!cgi->cLength)    {        return cgiStateSet(CGI_OK);    }    cgi->cString = (char *) malloc(cgi->cLength+1);    if (!cgi->cString)    {        return cgiStateSet(CGI_MEMORY);    }    strcpy(cgi->cString,cgiEnvGet("QUERY_STRING"));    cgi->cString[ cgi->cLength ] = '\0';    return cgiParse(cgi);}int cgiStrInd(char *s, char c) {    register int x;    for(x=0;s[x];x++)    {        if(s[x] == c) return x;    }        return -1;}int cgiParse(CGI *cgi){    char *tokname;    char *tokval;    CGI_ENTRY *n;    CGI_ENTRY *l;    char *string;    int pos;    /* Init pointer */    string= cgi->cString;        /* Take the first pair*/    pos = cgiStrInd(string,'=');    if( pos == -1)    {       tokname = 0;     }    else     {       tokname = string;       string[pos]='\0';       string = &string[pos+1];       pos =  cgiStrInd(string,'&');       tokval = string;       if( pos != -1)       {            string[pos]='\0';            string = &string[pos+1];         }        }    l = 0;    while(tokname)    {        /* Add a new pair to the list */        n = (CGI_ENTRY *) malloc (sizeof(CGI_ENTRY));        if(!n)        {            return cgiStateSet(CGI_MEMORY);        }        n->name = tokname;        n->value = tokval;        n->next = 0;        if(!l)        {           cgi->first = n;        }        else        {           l->next= n;        }        l = n;        cgiPlus2space(n->value);        cgiUnescape(n->value);        /* Get next pair */        pos = cgiStrInd(string,'=');        if( pos == -1)        {           tokname = 0;         }        else         {            tokname = string;           string[pos]='\0';           string = &string[pos+1];           pos =  cgiStrInd(string,'&');           tokval = string;           if( pos != -1)           {               string[pos]='\0';               string = &string[pos+1];             }            }    }    return cgiStateSet(CGI_OK);}void cgiClose(CGI *cgi){     CGI_ENTRY *t;     if(!cgi) return;     /* I think that all names/values are in cgi->cString       * So I need free all entries and THE ONLY cString.       */      cgi->pos = cgi->first;     while(cgi->pos)     {        t= cgi->pos->next;     	free(cgi->pos); 	cgi->pos= t;     }        if(cgi->cString)     {          free(cgi->cString);     }     free(cgi);}/*-------------------------------------------------------------------- *                        Advanced Features & Utilities *-------------------------------------------------------------------*/char cgiX2c(char *what){    register char digit;    digit = (what[0] >= 'A' ? ((what[0] & 0xdf) - 'A')+10 : (what[0] - '0'));    digit *= 16;    digit += (what[1] >= 'A' ? ((what[1] & 0xdf) - 'A')+10 : (what[1] - '0'));    return(digit);}void cgiUnescape(char *url){    register int x,y;    for(x=0,y=0;url[y];++x,++y)    {        if((url[x] = url[y]) == '%')        {            url[x] = cgiX2c(&url[y+1]);            y+=2;        }    }    url[x] = '\0';}void cgiPlus2space(char *str){    register int x;    for(x=0;str[x];x++) if(str[x] == '+') str[x] = ' ';}static char *cgiSafeStr(char *string);char *cgiSafeStr(char *string){   char *t;   t= string;   while(t)   {      t = strpbrk(t,"&;`'\"|*?~<>^()[]{}$\\");      if(t)      {          memmove(t,(char *)(t+1),strlen((char *)(t+1))+1);      }   }   return string;}char *cgiSafeValue(CGI *cgi, char *name){    char *string;    string = cgiValueFirst(cgi, name);    if (!string)    {        return 0;    }    return cgiSafeStr(string);}int cgiValueString(CGI *cgi, char *name, char *result, int max){    char *string;    string = cgiValueFirst(cgi, name);    if (!string)    {        strcpy(result, "");        return cgiStateSet(CGI_VAL_NOTFOUND);    }    strncpy(result,string,max);    if ( strlen(string) > max )    {        return cgiStateSet(CGI_VAL_TRUNCATED);    }    return cgiStateSet(CGI_OK);}int cgiValueInteger(CGI *cgi, char *name, long *result, long defval){    char  *string;    int   cnt,signOn;    char  *tmp;    string = cgiValueFirst(cgi, name);    if (!string)    {        *result = defval;        return cgiStateSet(CGI_VAL_NOTFOUND);    }    if (!strlen(string))    {        *result = defval;        return cgiStateSet(CGI_VAL_EMPTY);    }    /* parse out the long string */    tmp= string;    while(*tmp && *tmp == ' ') tmp++;  /* skip blanks */    if(!(*tmp) )                       /* empty string */    {        *result = defval;        return cgiStateSet(CGI_VAL_EMPTY);    }    cnt= 0;    signOn= 0;    if( *tmp == '-' || *tmp == '+' )   /* signstring */    {       cnt++; signOn++; tmp++;    }    while( *tmp && isdigit(*tmp))      /* string */    {       cnt++;       tmp++;    }    if( !cnt || (cnt==1 && signOn) )    {        *result = defval;        return cgiStateSet(CGI_VAL_INVALID);    }    *result = atol(string);    return cgiStateSet(CGI_OK);}int cgiValueReal(CGI *cgi, char *name, double *result, double defval){    char  *string;    int cnt,signOn,decimal;    char  *tmp;    string = cgiValueFirst(cgi, name);    if (!string)    {        *result = defval;        return cgiStateSet(CGI_VAL_NOTFOUND);    }    if (!strlen(string))    {        *result = defval;        return cgiStateSet(CGI_VAL_EMPTY);    }    /* parse out the numeric string */    tmp= string;    while(*tmp && *tmp == ' ') tmp++;  /* skip blanks */    if(!(*tmp) )                       /* empty string */    {        *result = defval;        return cgiStateSet(CGI_VAL_EMPTY);    }    cnt= 0;    signOn= 0;    if( *tmp == '-' || *tmp == '+' )   /* signstring */    {       cnt++; signOn++; tmp++;    }    while( *tmp && isdigit(*tmp))      /* string */    {       cnt++;       tmp++;    }    if( *tmp == '.')                   /* separator */    {       cnt++; tmp++;    }    decimal =0;    while( *tmp && isdigit(*tmp))      /* decimalstring */    {       decimal++;       cnt++;       tmp++;    }    if( !cnt || (cnt==1 && signOn) )    {        *result = defval;        return cgiStateSet(CGI_VAL_INVALID);    }    *result = atof(string);    return cgiStateSet(CGI_OK);}/*-------------------------------------------------------------------- *                        State of Relation *-------------------------------------------------------------------*//* Private data */static int _cgi_state;static char *_cgi_msgs[]= {    "The function successfully performed",    "Out-of-memory error",    "MIME content type error",    "Request metod error",    "I/O error",    "Value was cut short",    "Value was not a legal type",    "Value contained no data",    "No value was submitted",};    int cgiStateSet( int code){    _cgi_state = code;    return code;}int cgiStateGet(void){    return _cgi_state;}void cgiStateClear(void){    cgiStateSet(CGI_OK);}char *cgiStateMsg(void){    if( 0 <= _cgi_state && _cgi_state < CGI_LASTERROR )       return _cgi_msgs[_cgi_state];    return "";      }/*-------------------------------------------------------------------- *                        CGI Environment *-------------------------------------------------------------------*/char *cgiEnvGet(char *var){    char *s;    s= getenv(var);    if (!s)    {       return("");    }    return s;}/* EOF */

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
色综合久久中文综合久久牛| 精品1区2区3区| 日韩1区2区3区| 中文字幕不卡在线播放| 欧美精品日韩一区| 91美女福利视频| 国产精品一区二区91| 日韩二区三区在线观看| 一区二区三区在线视频免费观看| 精品少妇一区二区三区日产乱码| 欧美中文字幕一区二区三区| 成人毛片老司机大片| 国内精品写真在线观看| 蜜桃一区二区三区在线| 亚洲国产日产av| 亚洲欧美视频在线观看视频| 久久精品夜色噜噜亚洲aⅴ| 欧美一级精品在线| 在线看不卡av| 91浏览器入口在线观看| 国产精品自在欧美一区| 美国精品在线观看| 日韩中文字幕麻豆| 亚洲一卡二卡三卡四卡| 亚洲素人一区二区| 中文久久乱码一区二区| 国产亚洲欧美日韩日本| 日韩一二在线观看| 7777精品伊人久久久大香线蕉超级流畅| 色www精品视频在线观看| www.亚洲色图.com| 成人av先锋影音| 91女厕偷拍女厕偷拍高清| 成人a免费在线看| 91在线视频在线| 91在线视频网址| 色狠狠综合天天综合综合| 91亚洲午夜精品久久久久久| 成人做爰69片免费看网站| 波多野结衣亚洲| 不卡欧美aaaaa| 成人亚洲精品久久久久软件| 高清在线观看日韩| 成人蜜臀av电影| 91亚洲精品久久久蜜桃| 91福利社在线观看| 欧美日韩夫妻久久| 日韩视频免费观看高清在线视频| 欧美日韩五月天| 91麻豆精品国产91| 日韩精品一区在线观看| 2020国产成人综合网| 国产日韩欧美亚洲| 国产精品二三区| 亚洲综合区在线| 午夜精品久久久久影视| 免费观看在线色综合| 国产精品综合网| 91丨porny丨首页| 欧美日本一道本| 久久亚洲精品小早川怜子| 国产精品美女www爽爽爽| 亚洲欧美日韩在线| 日韩中文欧美在线| 国产呦萝稀缺另类资源| av亚洲精华国产精华| 欧美三片在线视频观看| 欧美成人a∨高清免费观看| 国产色产综合产在线视频 | 精品国产第一区二区三区观看体验| 精品捆绑美女sm三区| 中文无字幕一区二区三区| 亚洲另类中文字| 日本成人超碰在线观看| 成人免费三级在线| 欧美日韩激情一区二区三区| 欧美成人vr18sexvr| 《视频一区视频二区| 五月婷婷激情综合| 国产成人高清在线| 在线播放日韩导航| 国产精品久久午夜| 美女看a上一区| 一本久久综合亚洲鲁鲁五月天| 在线不卡a资源高清| 亚洲国产高清aⅴ视频| 视频一区二区中文字幕| 国产成都精品91一区二区三| 欧美视频在线一区二区三区| 久久伊人中文字幕| 亚洲最新视频在线播放| 国产综合久久久久久久久久久久 | 欧美一区二区在线不卡| 久久精品亚洲精品国产欧美kt∨ | 国产精品久久久久久久久免费樱桃| 亚洲综合激情网| 国产精品亚洲а∨天堂免在线| 欧美偷拍一区二区| 中文字幕av一区二区三区高| 强制捆绑调教一区二区| 色999日韩国产欧美一区二区| 久久综合九色综合欧美亚洲| 亚洲二区视频在线| 99r精品视频| 欧美激情在线观看视频免费| 青青国产91久久久久久 | 色狠狠av一区二区三区| 久久精品一区二区三区四区| 日韩av电影免费观看高清完整版 | 欧美电影影音先锋| 亚洲精品国久久99热| 成人夜色视频网站在线观看| 精品久久国产字幕高潮| 天天色综合天天| 在线观看成人免费视频| 亚洲三级免费电影| 成人av电影在线播放| 国产日韩欧美a| 国产一区二区三区最好精华液| 日韩午夜激情电影| 视频一区视频二区中文字幕| 欧美色爱综合网| 亚洲精品美腿丝袜| 91看片淫黄大片一级在线观看| 国产日本亚洲高清| 风流少妇一区二区| 久久精品一区蜜桃臀影院| 国产一区二区三区在线看麻豆| 日韩免费看的电影| 久久99精品国产.久久久久| 日韩精品一区二区三区中文精品| 日韩国产在线观看一区| 91精品国产色综合久久不卡电影| 亚洲色图一区二区| 日本高清无吗v一区| 亚洲综合在线五月| 欧美另类一区二区三区| 五月激情综合婷婷| 日韩欧美色综合网站| 久久99精品久久久| 国产网站一区二区三区| 成人成人成人在线视频| 日韩va亚洲va欧美va久久| 在线不卡一区二区| 久久99精品国产.久久久久| 久久色在线视频| 丁香一区二区三区| 亚洲女性喷水在线观看一区| 91精彩视频在线| 视频一区二区国产| 欧美精品一区二区不卡| 成人午夜激情片| 亚洲综合丝袜美腿| 欧美一区二区视频在线观看2022| 久久99精品国产麻豆婷婷| 国产欧美日韩不卡| 色乱码一区二区三区88 | jlzzjlzz亚洲女人18| 亚洲日本在线天堂| 欧美二区乱c少妇| 国产一区二区主播在线| 国产精品久久久久影院色老大| 色婷婷av一区二区三区大白胸| 婷婷综合另类小说色区| 精品免费视频一区二区| 99re这里只有精品6| 亚洲福利视频三区| 久久先锋资源网| 色系网站成人免费| 久久国内精品视频| 国产精品麻豆久久久| 欧美猛男男办公室激情| 国产传媒欧美日韩成人| 亚洲一区影音先锋| 欧美va亚洲va国产综合| 91浏览器入口在线观看| 免费久久99精品国产| 国产精品成人在线观看| 91精品视频网| 成人免费高清视频| 美女一区二区视频| 亚洲手机成人高清视频| 欧美va亚洲va香蕉在线| 一本到高清视频免费精品| 国内精品自线一区二区三区视频| 亚洲素人一区二区| 久久久亚洲精品石原莉奈| 日本韩国视频一区二区| 国产成人免费9x9x人网站视频| 亚洲国产精品一区二区www在线 | 欧美日韩一区中文字幕| 国产中文字幕精品| 亚洲一区二区免费视频| 国产精品午夜免费| 日韩欧美一级二级三级| 欧美午夜精品久久久久久孕妇| 国产激情偷乱视频一区二区三区| 亚洲福利视频导航| 亚洲人成精品久久久久久 | 一区二区免费在线|