aboutsummaryrefslogtreecommitdiff
path: root/lib/envop.c
diff options
context:
space:
mode:
Diffstat (limited to 'lib/envop.c')
-rw-r--r--lib/envop.c51
1 files changed, 33 insertions, 18 deletions
diff --git a/lib/envop.c b/lib/envop.c
index ce24b92..93bd425 100644
--- a/lib/envop.c
+++ b/lib/envop.c
@@ -169,9 +169,11 @@ environ_set (environ_t *env, char const *name, char const *value)
- if (!name)
+ if (!value)
{
- errno = EINVAL;
- return -1;
+ if (!name)
+ {
+ errno = EINVAL;
+ return -1;
+ }
+ return environ_unset (env, name, value);
}
- if (!value)
- return environ_unset (env, name, value);
@@ -193,3 +195,14 @@ environ_set (environ_t *env, char const *name, char const *value)
- if (strcmp (name, ":") == 0)
+ if (ws.ws_envbuf)
+ {
+ free (env->env_base);
+ env->env_base = ws.ws_envbuf;
+ env->env_count = ws.ws_envidx;
+ env->env_max = ws.ws_envsiz;
+ ws.ws_envbuf = NULL;
+ ws.ws_envidx = 0;
+ ws.ws_envsiz = 0;
+ }
+
+ if (name == NULL || strcmp (name, ":") == 0)
{
@@ -336,2 +349,3 @@ envop_entry_add (struct envop_entry **head,
size_t s;
+ char *p;
@@ -343,3 +357,3 @@ envop_entry_add (struct envop_entry **head,
case envop_set:
- if (!name || !(*name == ':' || valid_envar_name (name)))
+ if (name && !(*name == ':' || valid_envar_name (name)))
{
@@ -361,7 +375,5 @@ envop_entry_add (struct envop_entry **head,
if (name)
- {
- s += strlen (name) + 1;
- if (value)
- s += strlen (value) + 1;
- }
+ s += strlen (name) + 1;
+ if (value)
+ s += strlen (value) + 1;
op = malloc (s);
@@ -373,11 +385,14 @@ envop_entry_add (struct envop_entry **head,
op->value = NULL;
+
+ p = (char*)(op + 1);
if (name)
{
- op->name = (char*)(op + 1);
+ op->name = p;
strcpy (op->name, name);
- if (value)
- {
- op->value = op->name + strlen (name) + 1;
- strcpy (op->value, value);
- }
+ p += strlen (name) + 1;
+ }
+ if (value)
+ {
+ op->value = p;
+ strcpy (op->value, value);
}

Return to:

Send suggestions and report system problems to the System administrator.