diff options
author | Willy Tarreau <w@1wt.eu> | 2022-03-21 18:33:08 +0100 |
---|---|---|
committer | Paul E. McKenney <paulmck@kernel.org> | 2022-04-21 02:05:45 +0200 |
commit | 077d0a392446981cde2e8dd23090140bdd9fb728 (patch) | |
tree | 5c30aa3ed1cdb95620b503a7a1211cd9f2cc69c4 /tools/include/nolibc/stdlib.h | |
parent | tools/nolibc/stdio: make printf(%s) accept NULL (diff) | |
download | linux-077d0a392446981cde2e8dd23090140bdd9fb728.tar.xz linux-077d0a392446981cde2e8dd23090140bdd9fb728.zip |
tools/nolibc/stdlib: add a simple getenv() implementation
This implementation relies on an extern definition of the environ
variable, that the caller must declare and initialize from envp.
Signed-off-by: Willy Tarreau <w@1wt.eu>
Signed-off-by: Paul E. McKenney <paulmck@kernel.org>
Diffstat (limited to 'tools/include/nolibc/stdlib.h')
-rw-r--r-- | tools/include/nolibc/stdlib.h | 23 |
1 files changed, 23 insertions, 0 deletions
diff --git a/tools/include/nolibc/stdlib.h b/tools/include/nolibc/stdlib.h index 733105c574ee..aca8616335e3 100644 --- a/tools/include/nolibc/stdlib.h +++ b/tools/include/nolibc/stdlib.h @@ -60,6 +60,29 @@ int atoi(const char *s) return atol(s); } +/* Tries to find the environment variable named <name> in the environment array + * pointed to by global variable "environ" which must be declared as a char **, + * and must be terminated by a NULL (it is recommended to set this variable to + * the "envp" argument of main()). If the requested environment variable exists + * its value is returned otherwise NULL is returned. + */ +static __attribute__((unused)) +char *getenv(const char *name) +{ + extern char **environ; + int idx, i; + + if (environ) { + for (idx = 0; environ[idx]; idx++) { + for (i = 0; name[i] && name[i] == environ[idx][i];) + i++; + if (!name[i] && environ[idx][i] == '=') + return &environ[idx][i+1]; + } + } + return NULL; +} + /* Converts the unsigned long integer <in> to its hex representation into * buffer <buffer>, which must be long enough to store the number and the * trailing zero (17 bytes for "ffffffffffffffff" or 9 for "ffffffff"). The |