]> git.eshelyaron.com Git - emacs.git/commitdiff
Support setting file times of directories on MS-Windows.
authorEli Zaretskii <eliz@gnu.org>
Fri, 5 Oct 2012 09:17:17 +0000 (11:17 +0200)
committerEli Zaretskii <eliz@gnu.org>
Fri, 5 Oct 2012 09:17:17 +0000 (11:17 +0200)
 src/w32.c (utime): Open the file with FILE_FLAG_BACKUP_SEMANTICS, so
 that time stamps of directories could also be changed.  Don't
 request the too broad GENERIC_WRITE, only the more restrictive
 FILE_WRITE_ATTRIBUTES access rights.
 src/fileio.c (Fset_file_times): Special-case ignoring errors for
 directories only on MSDOS, not on MS-Windows.

src/ChangeLog
src/fileio.c
src/w32.c

index 396240bb7b8d873b9163547ba6ce4c876ad9d169..b25020106196dc3d12a1d5d1341d6f53ae3117ba 100644 (file)
@@ -1,3 +1,13 @@
+2012-10-05  Eli Zaretskii  <eliz@gnu.org>
+
+       * w32.c (utime): Open the file with FILE_FLAG_BACKUP_SEMANTICS, so
+       that time stamps of directories could also be changed.  Don't
+       request the too broad GENERIC_WRITE, only the more restrictive
+       FILE_WRITE_ATTRIBUTES access rights.
+
+       * fileio.c (Fset_file_times): Special-case ignoring errors for
+       directories only on MSDOS, not on MS-Windows.
+
 2012-10-05  Ikumi Keita  <ikumi@ikumi.que.jp>  (tiny change)
 
        * minibuf.c (Fcompleting_read): Doc fix.  (Bug#12555)
index 9ce9e7b83958961ab4915988e562e7ff0883abad..b4eda01afcce12a335ad42d2d0ce18ffc60e2090 100644 (file)
@@ -3034,7 +3034,7 @@ Use the current time if TIMESTAMP is nil.  TIMESTAMP is in the format of
   {
     if (set_file_times (-1, SSDATA (encoded_absname), t, t))
       {
-#ifdef DOS_NT
+#ifdef MSDOS
         struct stat st;
 
         /* Setting times on a directory always fails.  */
index 6b52fb8398dbdf6f3d83160d1b8e106b40af5379..5809e3ff91f0b7cd1bf451af10ac387f0458a7b5 100644 (file)
--- a/src/w32.c
+++ b/src/w32.c
@@ -3952,8 +3952,9 @@ utime (const char *name, struct utimbuf *times)
     }
 
   /* Need write access to set times.  */
-  fh = CreateFile (name, GENERIC_WRITE, FILE_SHARE_READ | FILE_SHARE_WRITE,
-                  0, OPEN_EXISTING, 0, NULL);
+  fh = CreateFile (name, FILE_WRITE_ATTRIBUTES,
+                  FILE_SHARE_READ | FILE_SHARE_WRITE | FILE_SHARE_DELETE,
+                  0, OPEN_EXISTING, FILE_FLAG_BACKUP_SEMANTICS, NULL);
   if (fh != INVALID_HANDLE_VALUE)
     {
       convert_from_time_t (times->actime, &atime);