diff options
author | Rob Landley <rob@landley.net> | 2020-02-26 02:45:09 -0600 |
---|---|---|
committer | Rob Landley <rob@landley.net> | 2020-02-26 02:45:09 -0600 |
commit | 3b82917a49f9e5ec3f6d4868adeac35a52c5a06e (patch) | |
tree | afea6268411473019c28714c08d2c881945fa84f | |
parent | 4034fd798d5bca3202e836afbb3cccf4380ba88f (diff) | |
download | toybox-3b82917a49f9e5ec3f6d4868adeac35a52c5a06e.tar.gz |
Fix xclearenv() breakage pointed out by Derrick Pallas.
Toybox doesn't modify inherited environ[] (the same way we don't modify
our inherited argv[]), so instead of freeing our allocated environ[] when
we want to clear it we need to allocate a new environ[] in the else path
(at a length compatible with the existing plumbing's add stride), set the
first entry of _that_ to 0, and set toys.envc = 1 to record it's an
alloced environ.
-rw-r--r-- | lib/env.c | 7 |
1 files changed, 3 insertions, 4 deletions
@@ -2,7 +2,7 @@ #include "toys.h" -// In libc, populated by start code,used by getenv() and exec() and friends. +// In libc, populated by start code, used by getenv() and exec() and friends. extern char **environ; // Returns the number of bytes taken by the environment variables. For use @@ -26,9 +26,8 @@ void xclearenv(void) int i; for (i = 0; environ[i]; i++) if (i>=toys.envc) free(environ[i]); - free(environ); - } - toys.envc = 0; + } else environ = xmalloc(256*sizeof(char *)); + toys.envc = 1; *environ = 0; } |