This function is part of the file handyFcts.c
Example:
http://www.webkb.org/bin/categSearch.cgi?categ=dog&recursLink=%3C&hyperlinks=
/* GET/POST parameters to CGI script -> paramList */
ErrMess initListParamWithCGIparam (initP HTAssocList *paramList)
{
int c,c1,c2, i, allocSize; char *s, *name, *value;
if (!paramList) return "Internal error: no parameter list to initialize";
if (strEqual(getenv("REQUEST_METHOD"),"GET")) /* no CONTENT_LENGTH */
{
char *query = getenv("QUERY_STRING"); /* *queryBeginning=query */
if (!query || !*query) return "No query information to process.";
allocSize=ALLOC_SIZE; s=(char*) my_calloc(1,sizeof(char)*(allocSize+1));
if (!s) return "Server memory problem: cannot store the parameters";
for (i=0, name=s, value=""; ((c = *query)); i++, query++)
{ if (i==allocSize)
{ allocSize+=ALLOC_SIZE;
s[i]='\0'; s=(char*)my_realloc(s,sizeof(char)*(allocSize+1));
}
if (c=='+') s[i]=' ';
else if (c=='%') { c1= *(++query); c2= *(++query); s[i]=unescapeURLchar(c1,c2); }
else if (c=='=') { s[i]='\0'; value= &s[i+1]; }
else if (c=='&')
{ s[i]='\0'; /* pr("name:%s\n",name); pr("value:%s\n",value); */
if (HTAssocList_addObject(paramList,name,value)==NO)
return "Internal error in storing the parameters";
i=-1; name=s; value="";
}
else s[i]=c;
}
if (i>0) /* && s[i-1]!='&' */
{ s[i]='\0'; /* pr("name2:%s\n",name); pr("value:%s\n",value); */
if (HTAssocList_addObject(paramList,name,value)==NO)
return "Internal error in storing the parameters";
}
}
else if (strEqual(getenv("REQUEST_METHOD"),"POST"))
{
int l=atoi(getenv("CONTENT_LENGTH"));
if (l==0) return "Server internal error: CONTENT_LENGTH==0.";
else if (l>ALLOC_SIZE) allocSize=ALLOC_SIZE; else allocSize=l;
s= (char*) my_calloc(1,sizeof(char)*(allocSize+1));
if (!s) return "Server memory problem: cannot store the parameters";
for (i=0, name=s, value=""; (c=getc(stdin))!=EOF && (l>0); i++,l--)
{ if (i==allocSize)
{ allocSize+=ALLOC_SIZE;
s[i]='\0'; s=(char*)my_realloc(s,sizeof(char)*(allocSize+1));
}
if (c=='+') s[i]=' ';
else if (c=='%') { c1=getc(stdin); s[i]=unescapeURLchar(c1,getc(stdin)); l-=2; }
else if (c=='=') { s[i]='\0'; value= &s[i+1]; }
else if (c=='&')
{ s[i]='\0';
if (HTAssocList_addObject(paramList,name,value)==NO)
{ MY_FREE(s); return "Internal error in storing the parameters."; }
i= -1; name=s; value="";
}
else s[i]=c;
}
if (i>0) /* => s[i-1]!='&' */
{ s[i]='\0';
if (HTAssocList_addObject(paramList,name,value)==NO)
{ MY_FREE(s); return "Internal error in storing the parameters"; }
}
}
else return "This script should be referenced with a METHOD of GET or POST.\n"
"If you don't understand this, see this forms overview";
MY_FREE(s); return NULL;
}