func: cgiFormResultType char *name, char ***result) char * * stringArray ; cgiFormEntry * e ; int i ; int total = 0 ; e = cgiFormEntryFindFirst ( name ); static cgiFormEntry *cgiFormEntryFindFirst(char *name) return cgiFormEntryFindNext ( ) ; static cgiFormEntry *cgiFormEntryFindNext() while ( cgiFindPos )  cgiFormEntry * c = cgiFindPos ; cgiFindPos = c -> next; if ( ! strcmp ( c -> attr , cgiFindTarget ) )  return c ; return 0 ; if ( e != 0 )  total ++; while ( ( e = cgiFormEntryFindNext ( ) ) != 0 )  static cgiFormEntry *cgiFormEntryFindNext() while ( cgiFindPos )  cgiFormEntry * c = cgiFindPos ; cgiFindPos = c -> next; if ( ! strcmp ( c -> attr , cgiFindTarget ) )  return c ; return 0 ; stringArray = ( char * * ) malloc ( sizeof ( char * ) * ( total + 1 ) ); if ( ! stringArray )  for (i=0; (i <= total); i++) stringArray [ i ] = 0; e = cgiFormEntryFindFirst ( name ); static cgiFormEntry *cgiFormEntryFindFirst(char *name) return cgiFormEntryFindNext ( ) ; if ( e )  i = 0; int max = ( int ) ( strlen ( e -> value ) + 1 ) ; stringArray [ i ] = ( char * ) malloc ( max ); if ( stringArray [ i ] == 0 )  cgiStringArrayFree ( stringArray ); i ++; while ( ( e = cgiFormEntryFindNext ( ) ) != 0 )  static cgiFormEntry *cgiFormEntryFindNext() while ( cgiFindPos )  cgiFormEntry * c = cgiFindPos ; cgiFindPos = c -> next; if ( ! strcmp ( c -> attr , cgiFindTarget ) )  return c ; return 0 ; void cgiStringArrayFree(char **stringArray) char * p ; p = * stringArray; while ( p )  free ( p ); stringArray ++; p = * stringArray; 