diff options
author | Mikael Magnusson <mikma@users.sourceforge.net> | 2024-09-15 21:16:34 +0000 |
---|---|---|
committer | Mikael Magnusson <mikma@users.sourceforge.net> | 2024-09-15 21:16:34 +0000 |
commit | 8e74ad50c97ba0f7624a02189377753e24d52298 (patch) | |
tree | 2c537bedb27fc0eed12bcbc5396dbe6318a3c55f | |
parent | 26d7292934493ebdb848dc4b3dc9d984525be9e3 (diff) |
lib: make copy of environ pointer
Without this fix a call to getenv() without parameters destroys environ,
and subsequent calls to getenv() (with or without parameter) return
nothing.
Fixes: #219
Signed-off-by: Mikael Magnusson <mikma@users.sourceforge.net>
-rw-r--r-- | lib.c | 9 |
1 files changed, 5 insertions, 4 deletions
@@ -854,21 +854,22 @@ uc_getenv(uc_vm_t *vm, size_t nargs) { uc_value_t *key = uc_fn_arg(0), *rv = NULL; extern char **environ; + char **env = environ; char *k, *v; if (!key) { rv = ucv_object_new(vm); - while (*environ) { - v = strchr(*environ, '='); + while (*env) { + v = strchr(*env, '='); if (v) { - xasprintf(&k, "%.*s", (int)(v - *environ), *environ); + xasprintf(&k, "%.*s", (int)(v - *env), *env); ucv_object_add(rv, k, ucv_string_new(v + 1)); free(k); } - environ++; + env++; } } else if (ucv_type(key) == UC_STRING) { |