]> git.eshelyaron.com Git - emacs.git/commitdiff
Fix recent change in fileio.c
authorEli Zaretskii <eliz@gnu.org>
Tue, 13 Nov 2018 20:01:57 +0000 (22:01 +0200)
committerEli Zaretskii <eliz@gnu.org>
Tue, 13 Nov 2018 20:01:57 +0000 (22:01 +0200)
* src/fileio.c (get_homedir) [WINDOWSNT]: Convert $HOME to UTF-8.
(Fexpand_file_name): Don't convert it here.

src/fileio.c

index e178c39fc184a1179f72e92c8c197c684078b9a0..59446ac1833246612d0994d67466d42c42d4c7ca 100644 (file)
@@ -1096,18 +1096,7 @@ the root directory.  */)
 
          newdir = get_homedir ();
          nm++;
-#ifdef WINDOWSNT
-         if (newdir[0])
-           {
-             char newdir_utf8[MAX_UTF8_PATH];
-
-             filename_from_ansi (newdir, newdir_utf8);
-             tem = make_unibyte_string (newdir_utf8, strlen (newdir_utf8));
-             newdir = SSDATA (tem);
-           }
-         else
-#endif
-           tem = build_string (newdir);
+         tem = build_string (newdir);
          newdirlim = newdir + SBYTES (tem);
          /* get_homedir may return a unibyte string, which will bite us
             if we expect the directory to be multibyte.  */
@@ -1669,6 +1658,19 @@ char const *
 get_homedir (void)
 {
   char const *home = egetenv ("HOME");
+
+#ifdef WINDOWSNT
+  /* getpw* functions return UTF-8 encoded file names, whereas egetenv
+     returns strings in locale encoding, so we need to convert for
+     consistency.  */
+  char homedir_utf8[MAX_UTF8_PATH];
+  if (home)
+    {
+      filename_from_ansi (home, homedir_utf8);
+      home = homedir_utf8;
+    }
+#endif
+
   if (!home)
     {
       static char const *userenv[] = {"LOGNAME", "USER"};