From 275ce72a917efc556389f0ae6b3f35c80bd18eae Mon Sep 17 00:00:00 2001 From: ru Date: Thu, 27 Jan 2000 16:12:03 +0000 Subject: [PATCH] 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 --- lib/libc/stdlib/setenv.c | 11 ++++++++--- 1 file changed, 8 insertions(+), 3 deletions(-) diff --git a/lib/libc/stdlib/setenv.c b/lib/libc/stdlib/setenv.c index 4c00b6e882f3..96f22a3e6ce5 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 @@ -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; }