Index: src/nt.c =================================================================== RCS file: /usr/CVSroot/XEmacs/xemacs/src/nt.c,v retrieving revision 1.17.2.23 diff -u -r1.17.2.23 nt.c --- nt.c 2000/08/08 08:27:05 1.17.2.23 +++ nt.c 2000/08/28 01:48:56 @@ -481,7 +481,20 @@ } } else - return FALSE; + { + /* Name too long or current leaf node doesn't exist. In the + latter case return the rest of the path unmodified. */ + if (p) + *p = '\\'; + len = strlen (q); + if (len + 1 < size) + { + strcpy (o, q); + o[len] = '\0'; + return TRUE; + } + return FALSE; + } } while (p != NULL && *p); Index: src/fileio.c =================================================================== RCS file: /usr/CVSroot/XEmacs/xemacs/src/fileio.c,v retrieving revision 1.51.2.26 diff -u -r1.51.2.26 fileio.c --- fileio.c 2000/08/06 09:27:12 1.51.2.26 +++ fileio.c 2000/08/28 01:49:10 @@ -54,6 +54,7 @@ #endif /* HPUX */ #ifdef WIN32_NATIVE +#include "nt.h" #define IS_DRIVE(x) isalpha (x) /* Need to lower-case the drive letter, or else expanded filenames will sometimes compare inequal, because @@ -1291,6 +1292,17 @@ if (elen > MAXPATHLEN) goto toolong; +#ifdef WIN32_NATIVE + if ( win32_get_long_filename (path, resolved_path, MAXPATHLEN) ) + { + /* Convert the directory sep characters again since + win32_get_long_filename converts them to '\' */ + CORRECT_DIR_SEPS (resolved_path); + } + else + /* The name is too long */ + goto toolong; +#else /* Try doing it all at once. */ /* !! Does realpath() Mule-encapsulate? Answer: Nope! So we do it above */ @@ -1357,16 +1369,18 @@ goto lose; } } +#endif { Lisp_Object resolved_name; int rlen = strlen (resolved_path); - if (elen > 0 && XSTRING_BYTE (expanded_name, elen - 1) == '/' - && !(rlen > 0 && resolved_path[rlen - 1] == '/')) + if (elen > 0 + && IS_DIRECTORY_SEP (XSTRING_BYTE (expanded_name, elen - 1)) + && !(rlen > 0 && IS_DIRECTORY_SEP (resolved_path[rlen - 1]))) { if (rlen + 1 > countof (resolved_path)) goto toolong; - resolved_path[rlen++] = '/'; + resolved_path[rlen++] = XSTRING_BYTE (expanded_name, elen - 1); resolved_path[rlen] = '\0'; } TO_INTERNAL_FORMAT (DATA, (resolved_path, rlen), Index: nt/xemacs.mak =================================================================== RCS file: /usr/CVSroot/XEmacs/xemacs/nt/xemacs.mak,v retrieving revision 1.41.2.57 diff -u -r1.41.2.57 xemacs.mak --- xemacs.mak 2000/08/08 08:26:37 1.41.2.57 +++ xemacs.mak 2000/08/28 01:51:48 @@ -698,7 +698,6 @@ $(SRC)\process-nt.c \ $(SRC)\profile.c \ $(SRC)\rangetab.c \ - $(SRC)\realpath.c \ $(SRC)\redisplay-output.c \ $(SRC)\redisplay.c \ $(SRC)\regex.c \ @@ -983,7 +982,6 @@ $(OUTDIR)\process-nt.obj \ $(OUTDIR)\profile.obj \ $(OUTDIR)\rangetab.obj \ - $(OUTDIR)\realpath.obj \ $(OUTDIR)\redisplay-output.obj \ $(OUTDIR)\redisplay.obj \ $(OUTDIR)\regex.obj \