# HG changeset patch # User Richard M. Stallman # Date 773781016 0 # Node ID b5cc015a3698a924e4a9f5f3de72441cb70137fe # Parent 8ccef13ebe58f333ea163e6888994a9e04804a94 (Ffile_name_directory, Ffile_name_nondirectory, file_name_as_directory, directory_file_name, Fexpand_file_name, Ffile_name_absolute_p, Fsubstitute_in_file_name) [MSDOS]: Allow backslashed file names. diff -r 8ccef13ebe58 -r b5cc015a3698 src/fileio.c --- a/src/fileio.c Sat Jul 09 19:04:27 1994 +0000 +++ b/src/fileio.c Sat Jul 09 19:10:16 1994 +0000 @@ -290,7 +290,7 @@ && p[-1] != ':' && p[-1] != ']' && p[-1] != '>' #endif /* VMS */ #ifdef MSDOS - && p[-1] != ':' + && p[-1] != ':' && p[-1] != '\\' #endif ) p--; @@ -345,7 +345,7 @@ && p[-1] != ':' && p[-1] != ']' && p[-1] != '>' #endif /* VMS */ #ifdef MSDOS - && p[-1] != ':' + && p[-1] != ':' && p[-1] != '\\' #endif ) p--; @@ -443,7 +443,7 @@ #else /* not VMS */ /* For Unix syntax, Append a slash if necessary */ #ifdef MSDOS - if (out[size] != ':' && out[size] != '/') + if (out[size] != ':' && out[size] != '/' && out[size] != '\\') #else if (out[size] != '/') #endif @@ -623,9 +623,11 @@ But leave "/" unchanged; do not change it to "". */ strcpy (dst, src); if (slen > 1 +#ifdef MSDOS + && (dst[slen - 1] == '/' || dst[slen - 1] == '/') + && dst[slen - 2] != ':' +#else && dst[slen - 1] == '/' -#ifdef MSDOS - && dst[slen - 2] != ':' #endif ) dst[slen - 1] = 0; @@ -764,7 +766,10 @@ nm = XSTRING (name)->data; #ifdef MSDOS - /* firstly, strip drive name. */ + /* First map all backslashes to slashes. */ + dostounix_filename (nm = strcpy (alloca (strlen (nm) + 1), nm)); + + /* Now strip drive name. */ { unsigned char *colon = rindex (nm, ':'); if (colon) @@ -1487,6 +1492,10 @@ CHECK_STRING (string, 0); nm = XSTRING (string)->data; +#ifdef MSDOS + dostounix_filename (nm = strcpy (alloca (strlen (nm) + 1), nm)); + substituted = !strcmp (nm, XSTRING (string)->data); +#endif endp = nm + XSTRING (string)->size; /* If /~ or // appears, discard everything through first slash. */ @@ -2139,7 +2148,7 @@ && ptr[1] != '.') #endif /* VMS */ #ifdef MSDOS - || (*ptr != 0 && ptr[1] == ':' && ptr[2] == '/') + || (*ptr != 0 && ptr[1] == ':' && (ptr[2] == '/' || ptr[2] == '\\')) #endif ) return Qt;