+ if (p == NULL)
+ return (param_add (pl, name, value));
+
+ value_copy = strdup (value);
+ if (value_copy == NULL)
+ return (ENOMEM);
+
+ free (p->value);
+ p->value = value_copy;
+
+ return (0);
+} /* }}} int param_set */
+
+char *param_as_string (param_list_t *pl) /* {{{ */
+{
+ char buffer[4096];
+ char key[2048];
+ char value[2048];
+ size_t i;
+
+ if (pl == NULL)
+ return (NULL);
+
+ buffer[0] = 0;
+ for (i = 0; i < pl->parameters_num; i++)
+ {
+ uri_escape_copy (key, pl->parameters[i].key, sizeof (key));
+ uri_escape_copy (value, pl->parameters[i].value, sizeof (value));
+
+ if (i != 0)
+ strlcat (buffer, ";", sizeof (buffer));
+ strlcat (buffer, key, sizeof (buffer));
+ strlcat (buffer, "=", sizeof (buffer));
+ strlcat (buffer, value, sizeof (buffer));
+ }
+
+ return (strdup (buffer));
+} /* }}} char *param_as_string */
+
+int param_print_hidden (param_list_t *pl) /* {{{ */
+{
+ char key[2048];
+ char value[2048];
+ size_t i;
+
+ if (pl == NULL)
+ return (EINVAL);
+
+ for (i = 0; i < pl->parameters_num; i++)
+ {
+ html_escape_copy (key, pl->parameters[i].key, sizeof (key));
+ html_escape_copy (value, pl->parameters[i].value, sizeof (value));
+
+ printf (" <input type=\"hidden\" name=\"%s\" value=\"%s\" />\n",
+ key, value);
+ }
+
+ return (0);
+} /* }}} int param_print_hidden */
+
+char *uri_escape_copy (char *dest, const char *src, size_t n) /* {{{ */