[glib] Add g_get_environ(): portable access to 'environ'
- From: Ryan Lortie <ryanl src gnome org>
- To: commits-list gnome org
- Cc:
- Subject: [glib] Add g_get_environ(): portable access to 'environ'
- Date: Fri, 29 Oct 2010 02:21:13 +0000 (UTC)
commit 29ce7385bb631ac04dc8b965dd0c6fab488c770d
Author: Ryan Lortie <desrt desrt ca>
Date: Thu Oct 28 21:26:09 2010 -0400
Add g_get_environ(): portable access to 'environ'
Return a copy of 'environ' on platforms where that is possible, or do
something else on other platforms.
docs/reference/glib/glib-sections.txt | 1 +
glib/glib.symbols | 1 +
glib/gutils.c | 39 +++++++++++++++++++++++++++++++++
glib/gutils.h | 1 +
4 files changed, 42 insertions(+), 0 deletions(-)
---
diff --git a/docs/reference/glib/glib-sections.txt b/docs/reference/glib/glib-sections.txt
index eefb391..e3d4d59 100644
--- a/docs/reference/glib/glib-sections.txt
+++ b/docs/reference/glib/glib-sections.txt
@@ -1597,6 +1597,7 @@ g_get_application_name
g_set_application_name
g_get_prgname
g_set_prgname
+g_get_environ
g_getenv
g_setenv
g_unsetenv
diff --git a/glib/glib.symbols b/glib/glib.symbols
index c421187..b421788 100644
--- a/glib/glib.symbols
+++ b/glib/glib.symbols
@@ -1642,6 +1642,7 @@ g_get_host_name
g_setenv PRIVATE
#endif
g_listenv
+g_get_environ
#ifdef G_OS_WIN32
g_find_program_in_path_utf8
g_get_current_dir_utf8
diff --git a/glib/gutils.c b/glib/gutils.c
index 4395a52..94e3951 100644
--- a/glib/gutils.c
+++ b/glib/gutils.c
@@ -1453,6 +1453,45 @@ g_listenv (void)
#endif
}
+/**
+ * g_get_environ:
+ *
+ * Gets the list of environment variables for the current process. The
+ * list is %NULL terminated and each item in the list is of the form
+ * 'NAME=VALUE'.
+ *
+ * This is equivalent to direct access to the 'environ' global variable,
+ * except portable.
+ *
+ * The return value is freshly allocated and it should be freed with
+ * g_strfreev() when it is no longer needed.
+ *
+ * Returns: the list of environment variables
+ *
+ * Since: 2.28
+ */
+gchar **
+g_get_environ (void)
+{
+#ifndef G_OS_WIN32
+ return g_strdupv (environ);
+#else
+ gunichar2 *strings;
+ gchar **result;
+ gint i, n;
+
+ strings = GetEnvironmentStringsW ();
+ for (n = 0; strings[n]; n += wcslen (strings + n) + 1);
+ result = g_new (char *, n + 1);
+ for (i = 0; strings[i]; i += wcslen (strings + i) + 1)
+ result[i] = g_utf16_to_utf8 (strings + i, -1, NULL, NULL, NULL);
+ FreeEnvironmentStringsW (strings);
+ result[i] = NULL;
+
+ return result;
+#endif
+}
+
G_LOCK_DEFINE_STATIC (g_utils_global);
static gchar *g_tmp_dir = NULL;
diff --git a/glib/gutils.h b/glib/gutils.h
index 9028157..2809e90 100644
--- a/glib/gutils.h
+++ b/glib/gutils.h
@@ -258,6 +258,7 @@ gboolean g_setenv (const gchar *variable,
gboolean overwrite);
void g_unsetenv (const gchar *variable);
gchar** g_listenv (void);
+gchar** g_get_environ (void);
/* private */
const gchar* _g_getenv_nomalloc (const gchar *variable,
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]