From 9c45d9ad13fdf439d44d7443ae75da15ea0223ed Mon Sep 17 00:00:00 2001 From: Sam Varshavchik Date: Mon, 19 Aug 2013 16:39:41 -0400 Subject: Initial checkin Imported from subversion report, converted to git. Updated all paths in scripts and makefiles, reflecting the new directory hierarchy. --- cgi/cgiselect.c | 134 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 134 insertions(+) create mode 100644 cgi/cgiselect.c (limited to 'cgi/cgiselect.c') diff --git a/cgi/cgiselect.c b/cgi/cgiselect.c new file mode 100644 index 0000000..647e1fa --- /dev/null +++ b/cgi/cgiselect.c @@ -0,0 +1,134 @@ +/* +** 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; +} -- cgit v1.2.3