* @brief CGI tools
*/
-#include <config.h>
-#include "types.h"
+#include "common.h"
-#include <stdlib.h>
-#include <string.h>
-#include <assert.h>
#include <unistd.h>
#include <errno.h>
-#include <stdio.h>
#include "cgi.h"
#include "mem.h"
return v ? *v : NULL;
}
+/** @brief Set a CGI argument */
+void cgi_set(const char *name, const char *value) {
+ value = xstrdup(value);
+ hash_add(cgi_args, name, &value, HASH_INSERT_OR_REPLACE);
+}
+
+/** @brief Clear CGI arguments */
+void cgi_clear(void) {
+ cgi_args = hash_new(sizeof (char *));
+}
+
/** @brief Add SGML-style quoting
* @param src String to quote (UTF-8)
* @return Quoted string
return d.vec;
}
+/** @brief Construct a URL from current parameters
+ * @param url Base URL
+ * @return Constructed URL
+ */
+char *cgi_thisurl(const char *url) {
+ struct dynstr d[1];
+ char **keys = hash_keys(cgi_args);
+ int n;
+
+ dynstr_init(d);
+ dynstr_append_string(d, url);
+ for(n = 0; keys[n]; ++n) {
+ dynstr_append(d, n ? '&' : '?');
+ dynstr_append_string(d, urlencodestring(keys[n]));
+ dynstr_append(d, '=');
+ dynstr_append_string(d, urlencodestring(cgi_get(keys[n])));
+ }
+ dynstr_terminate(d);
+ return d->vec;
+}
+
/*
Local Variables:
c-basic-offset:2