diff options
author | Colin Walters <walters@verbum.org> | 2008-07-24 16:19:34 -0400 |
---|---|---|
committer | Colin Walters <walters@verbum.org> | 2008-07-24 16:19:34 -0400 |
commit | d86df0220e37b9bf10878625664b44b5d79ee488 (patch) | |
tree | 0f7d2cd535d35823499ecf262b5d24870522483c /dbus/dbus-sysdeps.c | |
parent | 4cbc30465e4fba8026240945cac7a651fda5dca3 (diff) | |
parent | 3bc6840b04108d895ec3962ed5933bb0edb20cf4 (diff) |
Merge branch 'master' of ssh://walters@git.freedesktop.org/git/dbus/dbus
Diffstat (limited to 'dbus/dbus-sysdeps.c')
-rw-r--r-- | dbus/dbus-sysdeps.c | 42 |
1 files changed, 42 insertions, 0 deletions
diff --git a/dbus/dbus-sysdeps.c b/dbus/dbus-sysdeps.c index 1a736e42..d740f875 100644 --- a/dbus/dbus-sysdeps.c +++ b/dbus/dbus-sysdeps.c @@ -200,6 +200,48 @@ _dbus_clearenv (void) return rc; } +/** + * Gets a #NULL-terminated list of key=value pairs from the + * environment. Use dbus_free_string_array to free it. + * + * @returns the environment or #NULL on OOM + */ +char ** +_dbus_get_environment (void) +{ + int i, length; + extern char **environ; + char **environment; + + _dbus_assert (environ != NULL); + + for (length = 0; environ[length] != NULL; length++); + + /* Add one for NULL */ + length++; + + environment = dbus_new0 (char *, length); + + if (environment == NULL) + return NULL; + + for (i = 0; environ[i] != NULL; i++) + { + environment[i] = _dbus_strdup (environ[i]); + + if (environment[i] == NULL) + break; + } + + if (environ[i] != NULL) + { + dbus_free_string_array (environment); + environment = NULL; + } + + return environment; +} + /* * init a pipe instance. * |