diff options
author | Magnus Vigerlöf <Magnus.Vigerlof@home.se> | 2007-04-10 23:48:00 +0300 |
---|---|---|
committer | Daniel Stone <daniels@endtroducing.fooishbar.org> | 2007-04-10 23:58:20 +0300 |
commit | 4771fa8747791498e504d73afccfb5833499a38b (patch) | |
tree | 2ed3235b4e2b13c37bc5d7afad969d677ffdbf06 /hw/xfree86/parser/Flags.c | |
parent | 07c56abf84080c020a3e7b7703a447c7f996975c (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.c | 28 |
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 |