diff options
-rw-r--r-- | xdg-user-dirs-update.c | 22 |
1 files changed, 15 insertions, 7 deletions
diff --git a/xdg-user-dirs-update.c b/xdg-user-dirs-update.c index 0924a1e..6a99db0 100644 --- a/xdg-user-dirs-update.c +++ b/xdg-user-dirs-update.c @@ -277,18 +277,26 @@ get_home_dir (void) { struct passwd *pw; static char *home_dir = NULL; + const char *home_env; if (home_dir != NULL) return home_dir; - setpwent (); - pw = getpwuid (getuid ()); - endpwent (); - - if (pw && pw->pw_dir) - home_dir = strdup (pw->pw_dir); + home_env = getenv ("HOME"); + + if (home_env && *home_env) + { + home_dir = strdup (home_env); + } else - home_dir = getenv ("HOME"); + { + setpwent (); + pw = getpwuid (getuid ()); + endpwent (); + + if (pw && pw->pw_dir) + home_dir = strdup (pw->pw_dir); + } return home_dir; } |