| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657 |
- From: Felix Fietkau <[email protected]>
- Date: Wed, 8 Oct 2025 19:11:46 +0200
- Subject: [PATCH] uloop: allow reusing the existing environment
- When passing null as environment argument, reuse existing environ.
- This makes it possible to avoid having to duplicate and convert it
- by passing the output of getenv().
- Signed-off-by: Felix Fietkau <[email protected]>
- ---
- --- a/lib/uloop.c
- +++ b/lib/uloop.c
- @@ -1016,7 +1016,22 @@ uc_uloop_process(uc_vm_t *vm, size_t nar
-
- if (pid == 0) {
- argp = calloc(ucv_array_length(arguments) + 2, sizeof(char *));
- - envp = calloc(ucv_object_length(env_arg) + 1, sizeof(char *));
- + envp = environ;
- +
- + if (env_arg) {
- + envp = calloc(ucv_object_length(env_arg) + 1, sizeof(char *));
- + i = 0;
- + ucv_object_foreach(env_arg, envk, envv) {
- + buf = xprintbuf_new();
- +
- + ucv_stringbuf_printf(buf, "%s=", envk);
- + ucv_to_stringbuf(vm, buf, envv, false);
- +
- + envp[i++] = buf->buf;
- +
- + free(buf);
- + }
- + }
-
- if (!argp || !envp)
- _exit(-1);
- @@ -1026,19 +1041,6 @@ uc_uloop_process(uc_vm_t *vm, size_t nar
- for (i = 0; i < ucv_array_length(arguments); i++)
- argp[i+1] = ucv_to_string(vm, ucv_array_get(arguments, i));
-
- - i = 0;
- -
- - ucv_object_foreach(env_arg, envk, envv) {
- - buf = xprintbuf_new();
- -
- - ucv_stringbuf_printf(buf, "%s=", envk);
- - ucv_to_stringbuf(vm, buf, envv, false);
- -
- - envp[i++] = buf->buf;
- -
- - free(buf);
- - }
- -
- execvpe((const char *)ucv_string_get(executable),
- (char * const *)argp, (char * const *)envp);
-
|