gutils: stop g_get_home_dir() from reading passwd
In the case that the "HOME" environment variable is set (as it is under normal circumstances), we don't really need to be opening /etc/passwd. For historical reasons (ie: how we used to ignore $HOME) and due to the grouping of many unrelated things together (reading username, hostname, home directory, tmpdir, etc.) into one function we were still opening /etc/passwd in g_get_home_dir(), even if $HOME was set. Since earlier commits removed code from it, all that remains in g_get_any_init_do() is the logic for dealing with $HOME and reading the password database. We now split the logic to deal with $HOME into g_get_home_dir(). With only the password database functionality remaining, g_get_any_init_do() is renamed to g_get_user_database_entry() and modified not to set global variables but rather return a struct. If g_get_home_dir() cannot find $HOME, it falls back to calling g_get_user_database_entry() and using the home directory from there. Use of the 'g_utils_global' lock is further reduced by using g_once_init_enter() to protect the critical sections in each of g_get_user_database_entry() and g_get_home_dir(). Finally, the g_get_user_name() and g_get_real_name() functions are modified to use the new regime. https://bugzilla.gnome.org/show_bug.cgi?id=693204
parent
167c73fa
Please register or sign in to comment