OSDN Git Service

* child_info.h (CURR_CHILD_INFO_MAGIC): Use updated value.
authorcgf <cgf>
Sun, 19 Dec 2004 02:40:40 +0000 (02:40 +0000)
committercgf <cgf>
Sun, 19 Dec 2004 02:40:40 +0000 (02:40 +0000)
* path.cc (path_conv::check): Check the output Win32 path for trailing spaces
and dots, not the input path.  Disallow all use of foo./bar since consistently
getting this right is time consuming.  Remove strange test for "unc\" since no
one seems to know what it's for.

winsup/cygwin/ChangeLog
winsup/cygwin/child_info.h
winsup/cygwin/path.cc

index 912a12d..051c5ff 100644 (file)
@@ -1,3 +1,15 @@
+2004-12-18  Christopher Faylor  <cgf@timesys.com>
+
+       * child_info.h (CURR_CHILD_INFO_MAGIC): Use updated value.
+
+2004-12-18  Christopher Faylor  <cgf@timesys.com>
+           Pierre Humblet <pierre.humblet@ieee.org>
+
+       * path.cc (path_conv::check): Check the output Win32 path for trailing
+       spaces and dots, not the input path.  Disallow all use of foo./bar
+       since consistently getting this right is time consuming.  Remove
+       strange test for "unc\" since no one seems to know what it's for.
+
 2004-12-18  Chris January  <chris@atomice.net>
 
        * fhandler_proc.cc (proc_listing): Add entry for "self".
index 601fdfd..97cf455 100644 (file)
@@ -29,7 +29,7 @@ enum child_info_types
 
 #define EXEC_MAGIC_SIZE sizeof(child_info)
 
-#define CURR_CHILD_INFO_MAGIC 0x694cd4b8U
+#define CURR_CHILD_INFO_MAGIC 0x17ad771aU
 
 /* NOTE: Do not make gratuitous changes to the names or organization of the
    below class.  The layout is checksummed to determine compatibility between
index 2e4c725..55b4002 100644 (file)
@@ -546,25 +546,12 @@ path_conv::check (const char *src, unsigned opt,
       /* 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)
+      if (tail > path_copy + 1 && isslash (tail[-1]))
        {
-         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 (tail > path_copy + 1 && isslash (tail[-1]))
-           {
-             error = ENOENT;
-             return;
-           }
+         need_directory = 1;
+         *--tail = '\0';
        }
       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
@@ -835,6 +822,32 @@ out:
 
   if (dev.devn == FH_FS)
     {
+      if (strncmp (path, "\\\\.\\", 4))
+       {
+         /* Windows ignores trailing dots and spaces */
+         char *tail = NULL;
+         for (char *p = path; *p; p++)
+           if (*p != '.' && *p != ' ')
+             tail = NULL;
+           else if (p[1] == '\\')
+             {
+               error = ENOENT;
+               return;
+             }
+           else if (!tail)
+             tail = p;
+
+         if (!tail)
+           /* nothing */;
+         else if (tail[-1] != '\\')
+           *tail = '\0';
+         else
+           {
+             error = ENOENT;
+             return;
+           }
+       }
+
       if (fs.update (path))
        {
          debug_printf ("this->path(%s), has_acls(%d)", path, fs.has_acls ());