OSDN Git Service

* (symlink_info::set_error): Change to return bool if input error should be
authorcgf <cgf>
Tue, 11 Oct 2005 16:06:10 +0000 (16:06 +0000)
committercgf <cgf>
Tue, 11 Oct 2005 16:06:10 +0000 (16:06 +0000)
ignored.
(symlink_info::check): Treat path as a normal file if set_error returns false.

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

index 77b6dec..6eef4f0 100644 (file)
@@ -1,3 +1,10 @@
+2005-10-11  Christopher Faylor  <cgf@timesys.com>
+
+       * (symlink_info::set_error): Change to return bool if input error
+       should be ignored.
+       (symlink_info::check): Treat path as a normal file if set_error returns
+       false.
+
 2005-10-03  Christopher Faylor  <cgf@timesys.com>
 
        * cygheap.h (class process_lock): New class.
index c948eec..57b10dc 100644 (file)
@@ -101,7 +101,7 @@ struct symlink_info
   bool case_check (char *path);
   int check_sysfile (const char *path, HANDLE h);
   int check_shortcut (const char *path, HANDLE h);
-  void set_error (int);
+  bool set_error (int);
 };
 
 muto NO_COPY cwdstuff::cwd_lock;
@@ -3130,12 +3130,23 @@ suffix_scan::next ()
     }
 }
 
-void
+bool
 symlink_info::set_error (int in_errno)
 {
-  if ((pflags & PATH_NO_ACCESS_CHECK) && in_errno != ENAMETOOLONG)
-    return;
-  error = in_errno;
+  bool res;
+  if (!(pflags & PATH_NO_ACCESS_CHECK) || in_errno == ENAMETOOLONG || in_errno == EIO)
+    {
+      error = in_errno;
+      res = true;
+    }
+  else if (in_errno == ENOENT)
+    res = true;
+  else
+    {
+      fileattr = FILE_ATTRIBUTE_NORMAL;
+      res = false;
+    }
+  return res;
 }
 
 bool
@@ -3243,8 +3254,8 @@ symlink_info::check (char *path, const suffix_info *suffixes, unsigned opt)
              fileattr = 0;
              goto file_not_symlink;
            }
-         set_error (geterrno_from_win_error (win_error, EACCES));
-         continue;
+         if (set_error (geterrno_from_win_error (win_error, EACCES)))
+           continue;
        }
 
       ext_tacked_on = !!*ext_here;