/* ** Copyright 2007 Double Precision, Inc. ** See COPYING for distribution information. */ /* */ #include "cgi.h" #include #include #include #include static void do_cgi_select(const char *name, const char *optvalues, const char *optlabels, const char *default_value, size_t list_size, const char *flags, void (*output_func)(const char *, size_t, void *), void *output_arg) { (*output_func)("", 0, output_arg); } static void cnt_bytes(const char *str, size_t cnt, void *arg) { if (!cnt) cnt=strlen(str); *(size_t *)arg += cnt; } static void save_bytes(const char *str, size_t cnt, void *arg) { char **p=(char **)arg; if (!cnt) cnt=strlen(str); memcpy(*p, str, cnt); *p += cnt; } char *cgi_select(const char *name, const char *optvalues, const char *optlabels, const char *default_value, size_t list_size, const char *flags) { size_t cnt=1; char *buf; char *ptr; if (!flags) flags=""; do_cgi_select(name, optvalues, optlabels, default_value, list_size, flags, cnt_bytes, &cnt); buf=malloc(cnt); if (!buf) return NULL; ptr=buf; do_cgi_select(name, optvalues, optlabels, default_value, list_size, flags, save_bytes, &ptr); *ptr=0; return buf; }