"Pierre A. Humblet" wrote:
> 
> Corinna Vinschen wrote:
> > Ooops:
> >
> >   $ cd /
> >   /: No such file or directory.
> 
> Oops, nothing to do with chdir. It's in the code that detects
> file components consisting entirely of dots or spaces.

And here is the corrected patch.

Pierre

2004-05-06  Pierre Humblet <[EMAIL PROTECTED]>

        * path.cc (path_conv::check): Strip trailing dots and spaces and returns
        error if the final component had only dots and spaces.
        (normalize_posix_path): Revert 2004-04-30.
Index: path.cc
===================================================================
RCS file: /cvs/src/src/winsup/cygwin/path.cc,v
retrieving revision 1.308
diff -u -p -r1.308 path.cc
--- path.cc     4 May 2004 15:14:48 -0000       1.308
+++ path.cc     6 May 2004 14:47:11 -0000
@@ -286,10 +286,6 @@ normalize_posix_path (const char *src, c
     }
 
 done:
-  /* Remove trailing dots and spaces which are ignored by Win32 functions but
-     not by native NT functions. */
-  while (dst[-1] == '.' || dst[-1] == ' ')
-    --dst;
   *dst = '\0';
   *tail = dst;
 
@@ -552,12 +548,25 @@ path_conv::check (const char *src, unsig
       /* Detect if the user was looking for a directory.  We have to strip the
         trailing slash initially while trying to add extensions but take it
         into account during processing */
-      if (tail > path_copy + 1 && isslash (*(tail - 1)))
+      if (tail > path_copy + 1)
        {
-         need_directory = 1;
-         *--tail = '\0';
-       }
+          if (isslash (tail[-1]))
+            {
+              need_directory = 1;
+              tail--;
+           }
+          /* Remove trailing dots and spaces which are ignored by Win32 functions but
+            not by native NT functions. */
+          while (tail[-1] == '.' || tail[-1] == ' ') 
+           tail--;
+          if (isslash (tail[-1]))
+            {
+             error = ENOENT;
+              return;
+           }
+        }
       path_end = tail;
+      *tail = '\0';
 
       /* Scan path_copy from right to left looking either for a symlink
         or an actual existing file.  If an existing file is found, just

Reply via email to