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--;