]> sourceware.org Git - newlib-cygwin.git/commitdiff
2004-05-30 Pierre Humblet <pierre.humblet@ieee.org>
authorPierre Humblet <phumblet@phumblet.no-ip.org>
Mon, 31 May 2004 02:20:39 +0000 (02:20 +0000)
committerPierre Humblet <phumblet@phumblet.no-ip.org>
Mon, 31 May 2004 02:20:39 +0000 (02:20 +0000)
* path.cc (mount_info::add_item): Make sure native path has drive
or UNC form. Call normalize_xxx_path instead of [back]slashify.
Remove test for double slashes. Reorganize to always debug_print.

winsup/cygwin/ChangeLog
winsup/cygwin/path.cc

index 246779223079147a0ccc2a06b4e71469466fe855..390c0222f2473001910b14198ced93a4723125b5 100644 (file)
@@ -1,3 +1,9 @@
+2004-05-30  Pierre Humblet <pierre.humblet@ieee.org>
+
+       * path.cc (mount_info::add_item): Make sure native path has drive 
+       or UNC form. Call normalize_xxx_path instead of [back]slashify.
+       Remove test for double slashes. Reorganize to always debug_print. 
+
 2004-05-28  Pierre Humblet  <Pierre.Humblet@ieee.org>
 
        * fhandler_disk_file.cc (fhandler_disk_file::fchmod): Only try to open
index 102f51338e94d57ececcc297d572524a5c550caf..b094504766e40a73b2c6998bc78dd78972c93fa2 100644 (file)
@@ -2176,40 +2176,41 @@ mount_info::sort ()
 int
 mount_info::add_item (const char *native, const char *posix, unsigned mountflags, int reg_p)
 {
-  /* Something's wrong if either path is NULL or empty, or if it's
-     not a UNC or absolute path. */
-
-  if ((native == NULL) || (*native == 0) ||
-      (posix == NULL) || (*posix == 0) ||
-      !isabspath (native) || !isabspath (posix) ||
-      is_unc_share (posix) || isdrive (posix))
-    {
-      set_errno (EINVAL);
-      return -1;
-    }
-
-  /* Make sure both paths do not end in /. */
   char nativetmp[CYG_MAX_PATH];
   char posixtmp[CYG_MAX_PATH];
+  char *nativetail, *posixtail, error[] = "error";
+  int nativeerr, posixerr;
 
-  backslashify (native, nativetmp, 0);
-  nofinalslash (nativetmp, nativetmp);
+  /* Something's wrong if either path is NULL or empty, or if it's
+     not a UNC or absolute path. */
 
-  slashify (posix, posixtmp, 0);
-  nofinalslash (posixtmp, posixtmp);
+  if (native == NULL || !isabspath (native) ||
+      !(is_unc_share (native) || isdrive (native)))
+    nativeerr = EINVAL;
+  else
+    nativeerr = normalize_win32_path (native, nativetmp, &nativetail);
+
+  if (posix == NULL || !isabspath (posix) ||
+      is_unc_share (posix) || isdrive (posix))
+    posixerr = EINVAL;
+  else
+    posixerr = normalize_posix_path (posix, posixtmp, &posixtail);
 
   debug_printf ("%s[%s], %s[%s], %p",
-               native, nativetmp, posix, posixtmp, mountflags);
+                native, nativeerr?error:nativetmp,
+               posix, posixerr?error:posixtmp, mountflags);
 
-  /* Duplicate /'s in path are an error. */
-  for (char *p = posixtmp + 1; *p; ++p)
+  if (nativeerr || posixerr) 
     {
-      if (p[-1] == '/' && p[0] == '/')
-       {
-         set_errno (EINVAL);
+      set_errno (nativeerr?:posixerr);
          return -1;
        }
-    }
+
+  /* Make sure both paths do not end in /. */
+  if (nativetail > nativetmp + 1 && nativetail[-1] == '\\')
+    nativetail[-1] = '\0';
+  if (posixtail > posixtmp + 1 && posixtail[-1] == '/')
+    posixtail[-1] = '\0';
 
   /* Write over an existing mount item with the same POSIX path if
      it exists and is from the same registry area. */
This page took 0.038552 seconds and 5 git commands to generate.