mirror of
https://gitlab.gnome.org/GNOME/glib.git
synced 2025-01-13 07:56:17 +01:00
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.
This commit is contained in:
parent
b4d3b6e0de
commit
29ce7385bb
@ -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
|
||||
|
@ -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
|
||||
|
@ -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;
|
||||
|
@ -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,
|
||||
|
Loading…
Reference in New Issue
Block a user