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.
This commit is contained in:
parent
8c28ac8023
commit
6e76e11c42
2 changed files with 32 additions and 0 deletions
28
src/fileio.c
28
src/fileio.c
|
|
@ -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)))
|
||||
|
|
|
|||
Loading…
Add table
Reference in a new issue