Mercurial > emacs
changeset 22172:e0f5d2438001
(Ffile_name_directory, Ffile_name_nondirectory)
[DOS_NT]: Handle the special construct "/:" when followed by d:foo.
author | Richard M. Stallman <rms@gnu.org> |
---|---|
date | Thu, 21 May 1998 02:06:21 +0000 |
parents | e23d16d11ba9 |
children | ad7d4feb4d64 |
files | src/fileio.c |
diffstat | 1 files changed, 19 insertions(+), 5 deletions(-) [+] |
line wrap: on
line diff
--- a/src/fileio.c Thu May 21 02:05:53 1998 +0000 +++ b/src/fileio.c Thu May 21 02:06:21 1998 +0000 @@ -382,8 +382,11 @@ && p[-1] != ':' && p[-1] != ']' && p[-1] != '>' #endif /* VMS */ #ifdef DOS_NT - /* only recognise drive specifier at beginning */ - && !(p[-1] == ':' && p == beg + 2) + /* only recognise drive specifier at the beginning */ + && !(p[-1] == ':' + /* handle the "/:d:foo" and "/:foo" cases correctly */ + && ((p == beg + 2 && !IS_DIRECTORY_SEP (*beg)) + || (p == beg + 4 && IS_DIRECTORY_SEP (*beg)))) #endif ) p--; @@ -391,11 +394,20 @@ return Qnil; #ifdef DOS_NT /* Expansion of "c:" to drive and default directory. */ - if (p == beg + 2 && beg[1] == ':') + if (p[-1] == ':') { /* MAXPATHLEN+1 is guaranteed to be enough space for getdefdir. */ unsigned char *res = alloca (MAXPATHLEN + 1); - if (getdefdir (toupper (*beg) - 'A' + 1, res)) + unsigned char *r = res; + + if (p == beg + 4 && IS_DIRECTORY_SEP (*beg) && beg[1] == ':') + { + strncpy (res, beg, 2); + beg += 2; + r += 2; + } + + if (getdefdir (toupper (*beg) - 'A' + 1, r)) { if (!IS_DIRECTORY_SEP (res[strlen (res) - 1])) strcat (res, "/"); @@ -440,7 +452,9 @@ #endif /* VMS */ #ifdef DOS_NT /* only recognise drive specifier at beginning */ - && !(p[-1] == ':' && p == beg + 2) + && !(p[-1] == ':' + /* handle the "/:d:foo" case correctly */ + && (p == beg + 2 || (p == beg + 4 && IS_DIRECTORY_SEP (*beg)))) #endif ) p--;