diff --git a/src/frontend/variable.c b/src/frontend/variable.c index ad239e1bb..8b1b6d1f6 100644 --- a/src/frontend/variable.c +++ b/src/frontend/variable.c @@ -740,7 +740,7 @@ cp_variablesubst(wordlist *wlist) wordlist * vareval(char *string) { - struct variable *v; + struct variable *v, *vfree = NULL; wordlist *wl; char buf[BSIZE_SP], *s; char *oldstring = copy(string); @@ -782,9 +782,10 @@ vareval(char *string) if (eq(v->va_name, string)) break; if (!v) - v = cp_enqvar(string); + vfree = v = cp_enqvar(string); wl = wl_cons(copy(v ? "1" : "0"), NULL); tfree(oldstring); + free_struct_variable(vfree); return (wl); case '#': @@ -793,7 +794,7 @@ vareval(char *string) if (eq(v->va_name, string)) break; if (!v) - v = cp_enqvar(string); + vfree = v = cp_enqvar(string); if (!v) { fprintf(cp_err, "Error: %s: no such variable.\n", string); tfree(oldstring); @@ -806,6 +807,7 @@ vareval(char *string) i = (v->va_type != CP_BOOL); wl = wl_cons(tprintf("%d", i), NULL); tfree(oldstring); + free_struct_variable(vfree); return (wl); case '\0': @@ -830,7 +832,7 @@ vareval(char *string) if (!v) { range = NULL; string = oldstring; - v = cp_enqvar(string); + vfree = v = cp_enqvar(string); } if (!v && (s = getenv(string)) != NULL) { wl = wl_cons(copy(s), NULL); @@ -843,6 +845,7 @@ vareval(char *string) return (NULL); } wl = cp_varwl(v); + free_struct_variable(vfree); /* Now parse and deal with 'range' ... */ if (range) {