summaryrefslogtreecommitdiffstats
path: root/release/sysinstall/variable.c
diff options
context:
space:
mode:
authorjkh <jkh@FreeBSD.org>1996-12-11 18:23:19 +0000
committerjkh <jkh@FreeBSD.org>1996-12-11 18:23:19 +0000
commit17cc23f57886f93c187a29f8994632dac71ebf7b (patch)
treeb4559797b88382d69ce7830e112c0f922eafa0ba /release/sysinstall/variable.c
parente1e9e3aa19b00c35016cddf8a23e2b7fc0d9f4e0 (diff)
downloadFreeBSD-src-17cc23f57886f93c187a29f8994632dac71ebf7b.zip
FreeBSD-src-17cc23f57886f93c187a29f8994632dac71ebf7b.tar.gz
Be more efficient in how we use memory (stumbled across while looking for
something else) for attributes and variables. Remove stack-stomper in sstrncpy().
Diffstat (limited to 'release/sysinstall/variable.c')
-rw-r--r--release/sysinstall/variable.c36
1 files changed, 20 insertions, 16 deletions
diff --git a/release/sysinstall/variable.c b/release/sysinstall/variable.c
index 013358e..3b90286 100644
--- a/release/sysinstall/variable.c
+++ b/release/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;
}
OpenPOWER on IntegriCloud