OSDN Git Service

* fhandler_disk_file.cc (fhandler_base::utimes_fs): Ignore
authorcorinna <corinna>
Sat, 16 Apr 2005 17:17:32 +0000 (17:17 +0000)
committercorinna <corinna>
Sat, 16 Apr 2005 17:17:32 +0000 (17:17 +0000)
ERROR_NOT_SUPPORTED to workaround Win9x weirdness.
* path.cc (symlink_info::check): Remap ERROR_INVALID_FUNTION to
ERROR_FILE_NOT_FOUND for the same reason.

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

index 64bb229..750773f 100644 (file)
@@ -1,4 +1,11 @@
 2005-04-16  Corinna Vinschen  <corinna@vinschen.de>
+
+       * fhandler_disk_file.cc (fhandler_base::utimes_fs): Ignore
+       ERROR_NOT_SUPPORTED to workaround Win9x weirdness.
+       * path.cc (symlink_info::check): Remap ERROR_INVALID_FUNTION to
+       ERROR_FILE_NOT_FOUND for the same reason.
+
+2005-04-16  Corinna Vinschen  <corinna@vinschen.de>
            Pierre Humblet <pierre.humblet@ieee.org>
 
        * security.h (cygsidlist::addfromgr): Allow duplicate entries.
index 902e40a..280aa07 100644 (file)
@@ -870,7 +870,9 @@ fhandler_base::utimes_fs (const struct timeval *tvp)
   DWORD errcode = GetLastError ();
   if (is_fs_special ())
     SetFileAttributes (pc, pc);
-  if (!res)
+  /* Opening a directory on a 9x share from a NT machine works(!), but
+     then the SetFileTimes fails with ERROR_NOT_SUPPORTED.  Oh well... */
+  if (!res && errcode != ERROR_NOT_SUPPORTED)
     {
       close ();
       __seterrno_from_win_error (errcode);
index b1d8a44..8c4f661 100644 (file)
@@ -3112,7 +3112,14 @@ symlink_info::check (char *path, const suffix_info *suffixes, unsigned opt)
             matter, so we just return 0.  For example, getting the
             attributes of \\HOST will typically fail.  */
          debug_printf ("GetFileAttributes (%s) failed", suffix.path);
-         set_error (geterrno_from_win_error (GetLastError (), EACCES));
+
+         /* The above comment is not *quite* right.  When calling
+            GetFileAttributes for a non-existant file an a Win9x share,
+            GetLastError returns ERROR_INVALID_FUNCTION.  Go figure! */
+         DWORD win_error = GetLastError ();
+         if (win_error == ERROR_INVALID_FUNCTION)
+           win_error = ERROR_FILE_NOT_FOUND;
+         set_error (geterrno_from_win_error (win_error, EACCES));
          continue;
        }