From 1c4e9d25bea317b57a1528cce7cafaeff43923de Mon Sep 17 00:00:00 2001 From: Matthew Dillon Date: Wed, 1 Sep 2010 11:23:53 -0700 Subject: [PATCH] dloader - Fix *_load variable override issue * Setting a local variable that is already set wasn't working due to a programming snafu, so *_load overrides in /boot/loader.conf were not working properly. Fixed! --- sys/boot/dloader/subs.c | 15 ++++++++++----- 1 file changed, 10 insertions(+), 5 deletions(-) diff --git a/sys/boot/dloader/subs.c b/sys/boot/dloader/subs.c index c560d305fc..a9577c4e76 100644 --- a/sys/boot/dloader/subs.c +++ b/sys/boot/dloader/subs.c @@ -67,15 +67,20 @@ dvar_set(const char *name, char **data, int count) var = malloc(sizeof(*var) + strlen(name) + 1); var->name = (char *)(void *)(var + 1); strcpy(var->name, name); - var->count = count; - var->data = malloc(sizeof(char *) * (count + 1)); - var->data[count] = NULL; - while (--count >= 0) - var->data[count] = strdup(data[count]); var->next = NULL; *dvlastp = var; dvlastp = &var->next; + } else { + while (--var->count >= 0) + free(var->data[var->count]); + free(var->data); + /* var->data = NULL; not needed */ } + var->count = count; + var->data = malloc(sizeof(char *) * (count + 1)); + var->data[count] = NULL; + while (--count >= 0) + var->data[count] = strdup(data[count]); } void -- 2.41.0