Commit 6e76e11c authored by Eli Zaretskii's avatar Eli Zaretskii
Browse files

Fix regression in expand-file-name with drive-relative HOME

* src/fileio.c (get_homedir) [DOS_NT]: Expand drive-relative
$HOME to begin with "X:/".

* test/src/fileio-tests.el (fileio-tests--relative-HOME): Add
testing of drive-relative value of $HOME on MS-Windows and
MS-DOS.
parent 8c28ac80
Pipeline #264 failed with stage
in 5 minutes and 16 seconds
......@@ -1692,6 +1692,34 @@ get_homedir (void)
if (!home)
return "";
}
#ifdef DOS_NT
/* If home is a drive-relative directory, expand it. */
if (IS_DRIVE (*home)
&& IS_DEVICE_SEP (home[1])
&& !IS_DIRECTORY_SEP (home[2]))
{
# ifdef WINDOWSNT
static char hdir[MAX_UTF8_PATH];
# else
static char hdir[MAXPATHLEN];
# endif
if (!getdefdir (c_toupper (*home) - 'A' + 1, hdir))
{
hdir[0] = c_toupper (*home);
hdir[1] = ':';
hdir[2] = '/';
hdir[3] = '\0';
}
if (home[2])
{
size_t homelen = strlen (hdir);
if (!IS_DIRECTORY_SEP (hdir[homelen - 1]))
strcat (hdir, "/");
strcat (hdir, home + 2);
}
home = hdir;
}
#endif
if (IS_ABSOLUTE_FILE_NAME (home))
return home;
if (!emacs_wd)
......
......@@ -102,4 +102,8 @@ Also check that an encoding error can appear in a symlink."
(setenv "HOME" "a/b/c")
(should (equal (expand-file-name "~/foo")
(expand-file-name "a/b/c/foo")))
(when (memq system-type '(ms-dos windows-nt))
;; Test expansion of drive-relative file names.
(setenv "HOME" "x:foo")
(should (equal (expand-file-name "~/bar") "x:/foo/bar")))
(setenv "HOME" old-home)))
Markdown is supported
0% or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment