OSDN Git Service

* times.cc (utimes): Revert previous change. Just open the
authorcorinna <corinna>
Wed, 15 Aug 2001 10:48:42 +0000 (10:48 +0000)
committercorinna <corinna>
Wed, 15 Aug 2001 10:48:42 +0000 (10:48 +0000)
        file using FILE_WRITE_ATTRIBUTES instead of GENERIC_WRITE
        on NT/W2K.

winsup/cygwin/ChangeLog
winsup/cygwin/times.cc

index aafe076..dd49aaa 100644 (file)
@@ -1,3 +1,9 @@
+Wed Aug 15 12:43:00 2001  Corinna Vinschen <corinna@vinschen.de>
+
+       * times.cc (utimes): Revert previous change. Just open the
+       file using FILE_WRITE_ATTRIBUTES instead of GENERIC_WRITE
+       on NT/W2K.
+
 Wed Aug 15 12:18:00 2001  Corinna Vinschen <corinna@vinschen.de>
 
        * security.cc (set_nt_attribute): Return always -1 in case of
index 29327e2..860cc55 100644 (file)
@@ -449,8 +449,6 @@ utimes (const char *path, struct timeval *tvp)
   int res = 0;
   struct timeval tmp[2];
   path_conv win32 (path);
-  PSECURITY_DESCRIPTOR sd = NULL;
-  DWORD sd_size;
 
   if (win32.error)
     {
@@ -461,8 +459,10 @@ utimes (const char *path, struct timeval *tvp)
 
   /* MSDN suggests using FILE_FLAG_BACKUP_SEMANTICS for accessing
      the times of directories.  FIXME: what about Win95??? */
+  /* Note: It's not documented in MSDN that FILE_WRITE_ATTRIBUTES is
+     sufficient to change the timestamps... */
   HANDLE h = CreateFileA (win32.get_win32 (),
-                         GENERIC_WRITE,
+                         iswinnt ? FILE_WRITE_ATTRIBUTES : GENERIC_WRITE,
                          FILE_SHARE_READ | FILE_SHARE_WRITE,
                          &sec_none_nih,
                          OPEN_EXISTING,
@@ -477,38 +477,13 @@ utimes (const char *path, struct timeval *tvp)
          /* What we can do with directories more? */
          res = 0;
        }
-      else if (allow_ntsec && win32.has_acls ())
-        {
-         /* The following hack allows setting the correct filetime
-            on NTFS with ntsec ON even when the file is R/O for the
-            current user. This solves the `cp -p' problem and allows
-            a more UNIX like behaviour. Basically we save the file's
-            current security descriptor, change the file access so
-            that we have write access (if possible) and if that worked
-            fine, reset the old security descriptor at the end of the
-            function. */
-         sd_size = 4096;
-         sd = (PSECURITY_DESCRIPTOR) alloca (sd_size);
-         if (read_sd (win32.get_win32 (), sd, &sd_size) <= 0)
-           sd = NULL;
-         else if (set_file_attribute (TRUE, win32.get_win32 (), 0600))
-           sd = NULL;
-         else
-           h = CreateFileA (win32.get_win32 (),
-                            GENERIC_WRITE,
-                            FILE_SHARE_READ | FILE_SHARE_WRITE,
-                            &sec_none_nih,
-                            OPEN_EXISTING,
-                            FILE_ATTRIBUTE_NORMAL | FILE_FLAG_BACKUP_SEMANTICS,
-                            0);
-       }
       else
        {
          res = -1;
          __seterrno ();
        }
     }
-  if (h != INVALID_HANDLE_VALUE)
+  else
     {
       if (tvp == 0)
        {
@@ -544,9 +519,6 @@ utimes (const char *path, struct timeval *tvp)
       CloseHandle (h);
     }
 
-  if (sd)
-    write_sd (win32.get_win32 (), sd, sd_size);
-
   syscall_printf ("%d = utimes (%s, %x); (h%d)",
                  res, path, tvp, h);
   return res;