summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--winsup/cygwin/ChangeLog7
-rw-r--r--winsup/cygwin/fhandler_disk_file.cc4
-rw-r--r--winsup/cygwin/path.cc9
3 files changed, 18 insertions, 2 deletions
diff --git a/winsup/cygwin/ChangeLog b/winsup/cygwin/ChangeLog
index 64bb229f2..750773fdd 100644
--- a/winsup/cygwin/ChangeLog
+++ b/winsup/cygwin/ChangeLog
@@ -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.
diff --git a/winsup/cygwin/fhandler_disk_file.cc b/winsup/cygwin/fhandler_disk_file.cc
index 902e40aa8..280aa0779 100644
--- a/winsup/cygwin/fhandler_disk_file.cc
+++ b/winsup/cygwin/fhandler_disk_file.cc
@@ -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);
diff --git a/winsup/cygwin/path.cc b/winsup/cygwin/path.cc
index b1d8a4416..8c4f661d4 100644
--- a/winsup/cygwin/path.cc
+++ b/winsup/cygwin/path.cc
@@ -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;
}