mirror of
https://gitlab.gnome.org/GNOME/glib.git
synced 2025-04-25 08:36:52 +02: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_set_application_name
|
||||||
g_get_prgname
|
g_get_prgname
|
||||||
g_set_prgname
|
g_set_prgname
|
||||||
|
g_get_environ
|
||||||
g_getenv
|
g_getenv
|
||||||
g_setenv
|
g_setenv
|
||||||
g_unsetenv
|
g_unsetenv
|
||||||
|
@ -1642,6 +1642,7 @@ g_get_host_name
|
|||||||
g_setenv PRIVATE
|
g_setenv PRIVATE
|
||||||
#endif
|
#endif
|
||||||
g_listenv
|
g_listenv
|
||||||
|
g_get_environ
|
||||||
#ifdef G_OS_WIN32
|
#ifdef G_OS_WIN32
|
||||||
g_find_program_in_path_utf8
|
g_find_program_in_path_utf8
|
||||||
g_get_current_dir_utf8
|
g_get_current_dir_utf8
|
||||||
|
@ -1453,6 +1453,45 @@ g_listenv (void)
|
|||||||
#endif
|
#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);
|
G_LOCK_DEFINE_STATIC (g_utils_global);
|
||||||
|
|
||||||
static gchar *g_tmp_dir = NULL;
|
static gchar *g_tmp_dir = NULL;
|
||||||
|
@ -258,6 +258,7 @@ gboolean g_setenv (const gchar *variable,
|
|||||||
gboolean overwrite);
|
gboolean overwrite);
|
||||||
void g_unsetenv (const gchar *variable);
|
void g_unsetenv (const gchar *variable);
|
||||||
gchar** g_listenv (void);
|
gchar** g_listenv (void);
|
||||||
|
gchar** g_get_environ (void);
|
||||||
|
|
||||||
/* private */
|
/* private */
|
||||||
const gchar* _g_getenv_nomalloc (const gchar *variable,
|
const gchar* _g_getenv_nomalloc (const gchar *variable,
|
||||||
|
Loading…
x
Reference in New Issue
Block a user