summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJames Bursa <james@netsurf-browser.org>2004-05-21 10:25:42 +0000
committerJames Bursa <james@netsurf-browser.org>2004-05-21 10:25:42 +0000
commit9412dfeaed8884e944589461b26a79650b8773d6 (patch)
tree1c48ae3f9c4ccbdff25d27d4e0e232c4e65ff568
parent5a7948924850bc0309edb262b90372a5e2b2d4d3 (diff)
downloadnetsurf-9412dfeaed8884e944589461b26a79650b8773d6.tar.gz
netsurf-9412dfeaed8884e944589461b26a79650b8773d6.tar.bz2
[project @ 2004-05-21 10:25:42 by bursa]
Add form_new_control() and form_free_control(). svn path=/import/netsurf/; revision=878
-rw-r--r--render/form.c53
-rw-r--r--render/form.h22
2 files changed, 71 insertions, 4 deletions
diff --git a/render/form.c b/render/form.c
index 0641379b7..a9714b78d 100644
--- a/render/form.c
+++ b/render/form.c
@@ -21,6 +21,34 @@
static char *form_textarea_value(struct form_control *textarea);
+
+/**
+ * Create a struct form_control.
+ *
+ * \param type control type
+ * \return a new structure, or 0 on memory exhaustion
+ */
+
+struct form_control *form_new_control(form_control_type type)
+{
+ struct form_control *control;
+
+ control = malloc(sizeof *control);
+ if (!control)
+ return 0;
+ control->type = type;
+ control->name = 0;
+ control->value = 0;
+ control->initial_value = 0;
+ control->disabled = false;
+ control->form = 0;
+ control->box = 0;
+ control->prev = 0;
+ control->next = 0;
+ return control;
+}
+
+
/**
* Add a control to the list of controls in a form.
*/
@@ -41,6 +69,31 @@ void form_add_control(struct form *form, struct form_control *control)
/**
+ * Free a struct form_control.
+ *
+ * \param control structure to free
+ */
+
+void form_free_control(struct form_control *control)
+{
+ free(control->name);
+ free(control->value);
+ free(control->initial_value);
+ if (control->type == GADGET_SELECT) {
+ struct form_option *option, *next;
+ for (option = control->data.select.items; option;
+ option = next) {
+ next = option->next;
+ free(option->text);
+ free(option->value);
+ free(option);
+ }
+ }
+ free(control);
+}
+
+
+/**
* Identify 'successful' controls.
*
* See HTML 4.01 section 17.13.2.
diff --git a/render/form.h b/render/form.h
index b064e9750..48801f9a9 100644
--- a/render/form.h
+++ b/render/form.h
@@ -32,12 +32,24 @@ struct form {
struct form_control *last_control; /**< Last control in list. */
};
+/** Type of a struct form_control. */
+typedef enum {
+ GADGET_HIDDEN,
+ GADGET_TEXTBOX,
+ GADGET_RADIO,
+ GADGET_CHECKBOX,
+ GADGET_SELECT,
+ GADGET_TEXTAREA,
+ GADGET_IMAGE,
+ GADGET_PASSWORD,
+ GADGET_SUBMIT,
+ GADGET_RESET,
+ GADGET_FILE
+} form_control_type;
+
/** Form control. */
struct form_control {
- enum { GADGET_HIDDEN, GADGET_TEXTBOX, GADGET_RADIO, GADGET_CHECKBOX,
- GADGET_SELECT, GADGET_TEXTAREA, GADGET_IMAGE,
- GADGET_PASSWORD, GADGET_SUBMIT, GADGET_RESET,
- GADGET_FILE } type;
+ form_control_type type;
char *name;
char *value;
char *initial_value;
@@ -88,7 +100,9 @@ struct form_successful_control {
struct form_successful_control *next; /**< Next in linked list. */
};
+struct form_control *form_new_control(form_control_type type);
void form_add_control(struct form *form, struct form_control *control);
+void form_free_control(struct form_control *control);
struct form_successful_control *form_successful_controls(struct form *form,
struct form_control *submit_button);
char *form_url_encode(struct form_successful_control *control);