From c3f7489af9a3a93be968364c8cbb7bf600643605 Mon Sep 17 00:00:00 2001 From: Jakob Kaivo Date: Wed, 12 Aug 2020 13:55:12 -0400 Subject: make environment available even without POSIX environ --- src/__main.c | 7 +++++++ src/stdlib/_stdlib.h | 1 + src/stdlib/getenv.c | 20 +++++++++----------- 3 files changed, 17 insertions(+), 11 deletions(-) diff --git a/src/__main.c b/src/__main.c index 14e71594..a61cef86 100644 --- a/src/__main.c +++ b/src/__main.c @@ -2,6 +2,7 @@ #include "stdio.h" #include "locale.h" #include "stdio/_stdio.h" +#include "stdlib/_stdlib.h" #ifdef _POSIX_SOURCE #define DEFAULT_LOCALE "POSIX" @@ -20,8 +21,14 @@ static struct termios __tios; void __main(int argc, char **argv) { extern int main(int, char*[]); + + #ifdef _POSIX_SOURCE extern char **environ; environ = argv + argc + 1; + __stdlib.environ = environ; + #else + __stdlib.environ = argv + argc + 1; + #endif stdin = __stdio.FILES + 0; stdin->fd = 0; diff --git a/src/stdlib/_stdlib.h b/src/stdlib/_stdlib.h index b0aa3cd2..089de7df 100644 --- a/src/stdlib/_stdlib.h +++ b/src/stdlib/_stdlib.h @@ -15,6 +15,7 @@ struct __stdlib { struct atexit *prev; } atexit; unsigned int rand; + char **environ; }; extern struct __stdlib __stdlib; diff --git a/src/stdlib/getenv.c b/src/stdlib/getenv.c index e5129dc4..4ba83edb 100644 --- a/src/stdlib/getenv.c +++ b/src/stdlib/getenv.c @@ -1,24 +1,22 @@ #include #include "string.h" +#include "_stdlib.h" /** get an environment variable **/ char * getenv(const char * name) { - #ifdef _POSIX_SOURCE - extern char **environ; - int i = 0; + char **environ = __stdlib.environ; + size_t len = strlen(name); + size_t i = 0; - while (environ[i] != 0) { - if (!strncmp(environ[i], name, strlen(name)) && environ[i][strlen(name)] == '=') - return environ[i]; - i++; + for (i = 0; environ[i] != NULL; i++) { + if (!strncmp(environ[i], name, len) && environ[i][len] == '=') { + break; + } } - #else - (void)name; - #endif - return NULL; + return environ[i]; } /*** -- cgit v1.2.1