diff options
Diffstat (limited to 'lib/env/env.c')
| -rw-r--r-- | lib/env/env.c | 79 |
1 files changed, 79 insertions, 0 deletions
diff --git a/lib/env/env.c b/lib/env/env.c index df8e361..1710462 100644 --- a/lib/env/env.c +++ b/lib/env/env.c @@ -1 +1,80 @@ #include "env.h" + +#include "../malloc/malloc.h" + +const char **envp; + +const char **__getenvpair(const char *key); +u8 __match_env_key(const char *p, const char *key); + + +const char *getenv(const char *key) +{ + const char **p = __getenvpair(key); + const char *value; + + if (p == 0) + return ""; + + value = *p; + + while (*value != '=') ++value; + return ++value; +} + + +void setenv(const char *key, const char *value) +{ + const char **p = __getenvpair(key); + *p = value; +} + + +const char **__getenvpair(const char *key) +{ + const char **p = envp; + + while (*p) { + if (__match_env_key(*p, key)) { + return p; + } + + ++p; + } + + return 0; +} + + +u8 __match_env_key(const char *p, const char *key) +{ + while (*key && *p) { + + if (*key != *p) + return 0; + + ++p; + ++key; + } + + if (*p != '=') + return 0; + + return 1; +} + +void init_env(int argc, const char **argv, const char **envp__) +{ + envp = envp__; +} + +#ifdef ENV_UNIT_TEST + +#include "../io/io.h" + +int main(int argc, const char **argv) +{ + wstdf("HOME: %s\n", getenv("HOSTNAME")); +} + +#endif |