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 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);
+ if(*keys) {
+ dynstr_append(d, '?');
+ for(n = 0; keys[n]; ++n) {
+ dynstr_append_string(d, urlencodestring(keys[n]));
+ dynstr_append(d, '=');
+ dynstr_append_string(d, cgi_get(keys[n]));
+ }
+ }
+ dynstr_terminate(d);
+ return d->vec;
+}
+
/*
Local Variables:
c-basic-offset:2