size_t CgiListGetValues(Cgi const cgi,char ***darray,char const *name) { size_t size = 0; size_t idx = 0; char **store = NULL; struct pair *pair; assert(darray != NULL); assert(name != NULL); pair = CgiListGetPair(cgi,name); if (pair == NULL) { *darray = NULL; return(0); } while(NodeValid(&pair->node)) { if (strcmp(pair->name,name) == 0) { if (idx == size) { store = realloc(store,size+256); size += 256; } store[idx++] = pair->value; } pair = (struct pair *)NodeNext(&pair->node); } *darray = store; return(idx); }
size_t RFC822HeadersWrite(FILE *out,const List *list) { struct pair *ppair; size_t size; assert(out != NULL); assert(list != NULL); for ( size = 0 , ppair = (struct pair *)ListGetHead((List *)list); NodeValid(&ppair->node); ppair = (struct pair *)NodeNext(&ppair->node) ) { size += RFC822HeaderWrite(out,ppair->name,ppair->value); } return(size); }