summaryrefslogtreecommitdiff
path: root/hw/xfree86/parser/Flags.c
diff options
context:
space:
mode:
authorMagnus Vigerlöf <Magnus.Vigerlof@home.se>2007-04-10 23:48:00 +0300
committerDaniel Stone <daniels@endtroducing.fooishbar.org>2007-04-10 23:58:20 +0300
commit4771fa8747791498e504d73afccfb5833499a38b (patch)
tree2ed3235b4e2b13c37bc5d7afad969d677ffdbf06 /hw/xfree86/parser/Flags.c
parent07c56abf84080c020a3e7b7703a447c7f996975c (diff)
XFree86: Fix memory leak in option parsing
Fix option parsing functions and callers thereof to not leak memory.
Diffstat (limited to 'hw/xfree86/parser/Flags.c')
-rw-r--r--hw/xfree86/parser/Flags.c28
1 files changed, 14 insertions, 14 deletions
diff --git a/hw/xfree86/parser/Flags.c b/hw/xfree86/parser/Flags.c
index 4adea1ade..5b60a5155 100644
--- a/hw/xfree86/parser/Flags.c
+++ b/hw/xfree86/parser/Flags.c
@@ -198,21 +198,21 @@ addNewOption2 (XF86OptionPtr head, char *name, char *val, int used)
{
XF86OptionPtr new, old = NULL;
- /* Don't allow duplicates */
- if (head != NULL && (old = xf86findOption(head, name)) != NULL)
- new = old;
- else {
+ /* Don't allow duplicates, free old strings */
+ if (head != NULL && (old = xf86findOption(head, name)) != NULL) {
+ new = old;
+ xf86conffree(new->opt_name);
+ xf86conffree(new->opt_val);
+ }
+ else
new = xf86confcalloc (1, sizeof (XF86OptionRec));
- new->list.next = NULL;
- }
- new->opt_name = name;
- new->opt_val = val;
- new->opt_used = used;
-
- if (old == NULL)
- return ((XF86OptionPtr) xf86addListItem ((glp) head, (glp) new));
- else
- return head;
+ new->opt_name = name;
+ new->opt_val = val;
+ new->opt_used = used;
+
+ if (old)
+ return head;
+ return ((XF86OptionPtr) xf86addListItem ((glp) head, (glp) new));
}
XF86OptionPtr