From 86767547be6d071f1ecbc24c22a4cb3832b05a67 Mon Sep 17 00:00:00 2001 From: "Jordan K. Hubbard" Date: Wed, 11 Dec 1996 18:23:19 +0000 Subject: Be more efficient in how we use memory (stumbled across while looking for something else) for attributes and variables. Remove stack-stomper in sstrncpy(). --- usr.sbin/sysinstall/variable.c | 36 ++++++++++++++++++++---------------- 1 file changed, 20 insertions(+), 16 deletions(-) (limited to 'usr.sbin/sysinstall/variable.c') diff --git a/usr.sbin/sysinstall/variable.c b/usr.sbin/sysinstall/variable.c index 013358ece8e1..3b902860652f 100644 --- a/usr.sbin/sysinstall/variable.c +++ b/usr.sbin/sysinstall/variable.c @@ -4,7 +4,7 @@ * This is probably the last program in the `sysinstall' line - the next * generation being essentially a complete rewrite. * - * $Id: variable.c,v 1.11 1996/06/12 14:02:13 jkh Exp $ + * $Id: variable.c,v 1.12 1996/12/09 08:22:19 jkh Exp $ * * Copyright (c) 1995 * Jordan Hubbard. All rights reserved. @@ -41,35 +41,36 @@ static void make_variable(char *var, char *value) { - Variable *newvar; + Variable *vp; /* Put it in the environment in any case */ setenv(var, value, 1); /* Now search to see if it's already in the list */ - for (newvar = VarHead; newvar; newvar = newvar->next) { - if (!strcmp(newvar->name, var)) { + for (vp = VarHead; vp; vp = vp->next) { + if (!strcmp(vp->name, var)) { if (isDebug()) - msgDebug("variable %s was %s, now %s\n", newvar->name, newvar->value, value); - SAFE_STRCPY(newvar->value, value); + msgDebug("variable %s was %s, now %s\n", vp->name, vp->value, value); + free(vp->value); + vp->value = strdup(value); return; } } /* No? Create a new one */ - newvar = (Variable *)safe_malloc(sizeof(Variable)); - SAFE_STRCPY(newvar->name, var); - SAFE_STRCPY(newvar->value, value); - newvar->next = VarHead; - VarHead = newvar; + vp = (Variable *)safe_malloc(sizeof(Variable)); + vp->name = strdup(var); + vp->value = strdup(value); + vp->next = VarHead; + VarHead = vp; if (isDebug()) - msgDebug("Setting variable %s to %s\n", newvar->name, newvar->value); + msgDebug("Setting variable %s to %s\n", vp->name, vp->value); } void variable_set(char *var) { - char tmp[VAR_NAME_MAX + VAR_VALUE_MAX], *cp; + char tmp[1024], *cp; if (!var) msgFatal("NULL variable name & value passed."); @@ -102,12 +103,11 @@ void variable_unset(char *var) { Variable *vp; - char name[VAR_NAME_MAX + 1], *cp; + char name[512], *cp; unsetenv(var); if ((cp = index(var, '=')) != NULL) { - strncpy(name, cp, cp - var); - name[cp - var] = '\0'; + sstrncpy(name, cp, cp - var); var = name; } @@ -115,6 +115,8 @@ variable_unset(char *var) if (!VarHead) return; else if (!VarHead->next && !strcmp(VarHead->name, var)) { + safe_free(VarHead->name); + safe_free(VarHead->value); free(VarHead); VarHead = NULL; } @@ -124,6 +126,8 @@ variable_unset(char *var) Variable *save = vp->next; *vp = *save; + safe_free(save->name); + safe_free(save->value); safe_free(save); break; } -- cgit v1.2.3