- struct passwd pw, *res;
-
- if (!getpwuid_r (getuid (), &pw, buf, sizeof (buf), &res) && res)
- psz_localhome = pw.pw_dir;
+ const char *psz_localhome = getenv( "HOME" );
+#if defined(HAVE_GETPWUID_R)
+ char buf[sysconf (_SC_GETPW_R_SIZE_MAX)];
+ if (psz_localhome == NULL)
+ {
+ struct passwd pw, *res;
+
+ if (!getpwuid_r (getuid (), &pw, buf, sizeof (buf), &res) && res)
+ psz_localhome = pw.pw_dir;
+ }
+#endif
+ if (psz_localhome == NULL)
+ psz_localhome = getenv( "TMP" );
+ if (psz_localhome == NULL)
+ psz_localhome = "/tmp";
+
+ const char *uhomedir = FromLocale (psz_localhome);
+ strncpy (homedir, uhomedir, sizeof (homedir) - 1);
+ homedir[sizeof (homedir) - 1] = '\0';
+ LocaleFree (uhomedir);