diff options
author | ru <ru@FreeBSD.org> | 2000-01-27 16:12:03 +0000 |
---|---|---|
committer | ru <ru@FreeBSD.org> | 2000-01-27 16:12:03 +0000 |
commit | 275ce72a917efc556389f0ae6b3f35c80bd18eae (patch) | |
tree | fc04ce3f9830c99524b93048f75113eceae873d1 /lib | |
parent | 1427d0852ce293ef9997d38bcd4281a28bf261c5 (diff) | |
download | FreeBSD-src-275ce72a917efc556389f0ae6b3f35c80bd18eae.zip FreeBSD-src-275ce72a917efc556389f0ae6b3f35c80bd18eae.tar.gz |
o Back out rev 1.4 - reallocf() failure clobbers existing `environ'.
o Do not override `environ' if realloc() fails, leave it intact.
o Set `alloced' only when memory is actually allocated.
PR: bin/5604 (2nd part)
Reviewed by: bde
Diffstat (limited to 'lib')
-rw-r--r-- | lib/libc/stdlib/setenv.c | 11 |
1 files changed, 8 insertions, 3 deletions
diff --git a/lib/libc/stdlib/setenv.c b/lib/libc/stdlib/setenv.c index 4c00b6e..96f22a3 100644 --- a/lib/libc/stdlib/setenv.c +++ b/lib/libc/stdlib/setenv.c @@ -32,7 +32,10 @@ */ #if defined(LIBC_SCCS) && !defined(lint) +#if 0 static char sccsid[] = "@(#)setenv.c 8.1 (Berkeley) 6/4/93"; +#endif +static const char rcsid[] = "$FreeBSD$"; #endif /* LIBC_SCCS and not lint */ #include <stddef.h> @@ -73,16 +76,18 @@ setenv(name, value, rewrite) for (p = environ, cnt = 0; *p; ++p, ++cnt); if (alloced) { /* just increase size */ - environ = (char **)reallocf((char *)environ, + p = (char **)realloc((char *)environ, (size_t)(sizeof(char *) * (cnt + 2))); - if (!environ) + if (!p) return (-1); + environ = p; } else { /* get new space */ - alloced = 1; /* copy old entries into it */ + /* copy old entries into it */ p = malloc((size_t)(sizeof(char *) * (cnt + 2))); if (!p) return (-1); + alloced = 1; bcopy(environ, p, cnt * sizeof(char *)); environ = p; } |