commit b0d268a82264f28f6b78f734d45a13e8272e70ea Author: Alexander Færøy ahf@torproject.org Date: Fri Nov 23 05:43:34 2018 +0100
Add process_reset_environment() to the Process subsystem.
This patch adds a new function that allows us to reset the environment of a given process_t with a list of key/value pairs.
See: https://bugs.torproject.org/28179 --- src/lib/process/process.c | 17 +++++++++++++++++ src/lib/process/process.h | 1 + 2 files changed, 18 insertions(+)
diff --git a/src/lib/process/process.c b/src/lib/process/process.c index 657b319f5..915217e13 100644 --- a/src/lib/process/process.c +++ b/src/lib/process/process.c @@ -441,6 +441,23 @@ process_get_argv(const process_t *process) return argv; }
+/** This function clears the internal environment and copies over every string + * from <b>env</b> as the new environment. */ +void +process_reset_environment(process_t *process, const smartlist_t *env) +{ + tor_assert(process); + tor_assert(env); + + /* Cleanup old environment. */ + SMARTLIST_FOREACH(process->environment, char *, x, tor_free(x)); + smartlist_free(process->environment); + process->environment = smartlist_new(); + + SMARTLIST_FOREACH(env, char *, x, + smartlist_add(process->environment, tor_strdup(x))); +} + /** Set the given <b>key</b>/<b>value</b> pair as environment variable in the * given process. */ void diff --git a/src/lib/process/process.h b/src/lib/process/process.h index c6b733a06..6092c2da7 100644 --- a/src/lib/process/process.h +++ b/src/lib/process/process.h @@ -83,6 +83,7 @@ void process_append_argument(process_t *process, const char *argument); const smartlist_t *process_get_arguments(const process_t *process); char **process_get_argv(const process_t *process);
+void process_reset_environment(process_t *process, const smartlist_t *env); void process_set_environment(process_t *process, const char *key, const char *value);
tor-commits@lists.torproject.org