summaryrefslogtreecommitdiffhomepage
diff options
context:
space:
mode:
authorMikael Magnusson <mikma@users.sourceforge.net>2024-09-15 21:16:34 +0000
committerMikael Magnusson <mikma@users.sourceforge.net>2024-09-15 21:16:34 +0000
commit8e74ad50c97ba0f7624a02189377753e24d52298 (patch)
tree2c537bedb27fc0eed12bcbc5396dbe6318a3c55f
parent26d7292934493ebdb848dc4b3dc9d984525be9e3 (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.c9
1 files changed, 5 insertions, 4 deletions
diff --git a/lib.c b/lib.c
index e814f49..54ff354 100644
--- a/lib.c
+++ b/lib.c
@@ -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) {