diff options
Diffstat (limited to 'src/stdlib/getenv.c')
-rw-r--r-- | src/stdlib/getenv.c | 10 |
1 files changed, 9 insertions, 1 deletions
diff --git a/src/stdlib/getenv.c b/src/stdlib/getenv.c index 989a5f84..c85c1922 100644 --- a/src/stdlib/getenv.c +++ b/src/stdlib/getenv.c @@ -1,6 +1,7 @@ #include <stdlib.h> #include <string.h> #include "_stdlib.h" +#include "_readonly.h" /** get an environment variable **/ @@ -8,13 +9,20 @@ char * getenv(const char * name) { size_t len = 0; size_t i = 0; + static char *variable = NULL; SIGNAL_SAFE(0); + if (variable == NULL) { + variable = __readonly(RO_ALLOC, "getenv"); + } len = strlen(name); for (i = 0; environ[i] != NULL; i++) { if (!strncmp(environ[i], name, len) && environ[i][len] == '=') { - return environ[i] + len + 1; + __readonly(RO_UNLOCK, variable); + strcpy(variable, environ[i] + len + 1); + __readonly(RO_LOCK, variable); + return variable; } } |