| Description: Handle the G_HOME environment variable to override the passwd entry |
| This will allow to fix various kinds of build failures due to restricted |
| build environments. |
| Author: Josselin Mouette <joss@debian.org> |
| Origin: vendor |
| |
| --- a/docs/reference/glib/running.sgml |
| +++ b/docs/reference/glib/running.sgml |
| @@ -213,6 +213,22 @@ |
| </para> |
| </formalpara> |
| |
| +<formalpara id="G_HOME"> |
| + <title><envar>G_HOME</envar></title> |
| + |
| + <para> |
| + For various reasons, GLib applications ignore the <envar>HOME</envar> |
| + environment variable on Unix systems and will use the user directory |
| + as specified by the <filename>passwd</filename> entry, which is more |
| + reliable. |
| + </para> |
| + <para> |
| + The <envar>G_HOME</envar> environment variable will override any |
| + other setting for the home directory. It is not meant for daily usage, |
| + but it is useful in testing or building environments. |
| + </para> |
| +</formalpara> |
| + |
| </refsect2> |
| |
| <refsect2 id="setlocale"> |
| --- a/glib/gutils.c |
| +++ b/glib/gutils.c |
| @@ -1626,11 +1626,14 @@ |
| } |
| #endif /* !G_OS_WIN32 */ |
| |
| + g_home_dir = g_strdup (g_getenv ("G_HOME")); |
| + |
| #ifdef G_OS_WIN32 |
| /* We check $HOME first for Win32, though it is a last resort for Unix |
| * where we prefer the results of getpwuid(). |
| */ |
| - g_home_dir = g_strdup (g_getenv ("HOME")); |
| + if (!g_home_dir) |
| + g_home_dir = g_strdup (g_getenv ("HOME")); |
| |
| /* Only believe HOME if it is an absolute path and exists */ |
| if (g_home_dir) |
| @@ -1926,6 +1929,11 @@ |
| * homedir = g_get_home_dir (<!-- -->); |
| * ]| |
| * |
| + * However, to allow changing this value for testing and development |
| + * purposes, the value of the <envar>G_HOME</envar> environment |
| + * variable, if set, will override the <filename>passwd</filename> |
| + * entry. |
| + * |
| * Returns: the current user's home directory |
| */ |
| G_CONST_RETURN gchar* |