diff options
author | Lennart Poettering <lennart@poettering.net> | 2009-09-02 00:34:27 +0200 |
---|---|---|
committer | Lennart Poettering <lennart@poettering.net> | 2009-09-02 00:34:27 +0200 |
commit | 5f929963d12c70193a923d620177125d8608f18a (patch) | |
tree | 888d1db957b78a900448db291e2f878d239e4726 | |
parent | 45513a2077719850353a9eb34f32ac4548c0dbea (diff) |
core-util: add api for setting env vars and record them so that we can undo them n fork
-rw-r--r-- | src/pulsecore/core-util.c | 30 | ||||
-rw-r--r-- | src/pulsecore/core-util.h | 2 |
2 files changed, 32 insertions, 0 deletions
diff --git a/src/pulsecore/core-util.c b/src/pulsecore/core-util.c index 67823019..9034dc32 100644 --- a/src/pulsecore/core-util.c +++ b/src/pulsecore/core-util.c @@ -116,6 +116,7 @@ #include <pulsecore/thread.h> #include <pulsecore/strbuf.h> #include <pulsecore/usergroup.h> +#include <pulsecore/strlist.h> #include "core-util.h" @@ -124,6 +125,8 @@ #define MSG_NOSIGNAL 0 #endif +static pa_strlist *recorded_env = NULL; + #ifdef OS_IS_WIN32 #define PULSE_ROOTENV "PULSE_ROOT" @@ -2451,9 +2454,36 @@ void pa_set_env(const char *key, const char *value) { pa_assert(key); pa_assert(value); + /* This is not thread-safe */ + putenv(pa_sprintf_malloc("%s=%s", key, value)); } +void pa_set_env_and_record(const char *key, const char *value) { + pa_assert(key); + pa_assert(value); + + /* This is not thread-safe */ + + pa_set_env(key, value); + recorded_env = pa_strlist_prepend(recorded_env, key); +} + +void pa_unset_env_recorded(void) { + + /* This is not thread-safe */ + + for (;;) { + char *s = NULL; + + if (!(recorded_env = pa_strlist_pop(recorded_env, &s))) + break; + + unsetenv(s); + pa_xfree(s); + } +} + pa_bool_t pa_in_system_mode(void) { const char *e; diff --git a/src/pulsecore/core-util.h b/src/pulsecore/core-util.h index 2551f794..ccc9a38e 100644 --- a/src/pulsecore/core-util.h +++ b/src/pulsecore/core-util.h @@ -195,6 +195,8 @@ int pa_reset_sigs(int except, ...); int pa_reset_sigsv(const int except[]); void pa_set_env(const char *key, const char *value); +void pa_set_env_and_record(const char *key, const char *value); +void pa_unset_env_recorded(void); pa_bool_t pa_in_system_mode(void); |