]> git.eshelyaron.com Git - emacs.git/commitdiff
(Fcopy_file) [WINDOWS_NT]: Ensure file is not
authorJason Rumney <jasonr@gnu.org>
Sat, 9 Mar 2002 00:38:54 +0000 (00:38 +0000)
committerJason Rumney <jasonr@gnu.org>
Sat, 9 Mar 2002 00:38:54 +0000 (00:38 +0000)
read-only when setting modified time.

src/ChangeLog
src/fileio.c

index 2864d8f1296af366be2026e27f7fd5f5da56bf9d..5ae6ce6ebf5856b839fab4eac59e15e8aada3889 100644 (file)
@@ -1,3 +1,8 @@
+2002-03-09  Jason Rumney  <jasonr@gnu.org>
+
+       * fileio.c (Fcopy_file) [WINDOWS_NT]: Ensure file is not
+       read-only when setting modified time.
+
 2002-03-08  Gerd Moellmann  <gerd@gnu.org>
 
        * xdisp.c (move_it_vertically_backward): At the end of the
index d328a2d3636f19164ac2e90703dcceee760934af..bb39f2a153bb65023eeee9b097d6a4ac9eef7e09 100644 (file)
@@ -2409,12 +2409,25 @@ A prefix arg makes KEEP-TIME non-nil.  */)
   else if (NILP (keep_time))
     {
       EMACS_TIME now;
+      DWORD attributes;
+      char * filename;
+
       EMACS_GET_TIME (now);
-      if (set_file_times (XSTRING (encoded_newname)->data,
-                         now, now))
-       Fsignal (Qfile_date_error,
-                Fcons (build_string ("Cannot set file date"),
-                       Fcons (newname, Qnil)));
+      filename = XSTRING (encoded_newname)->data;
+
+      /* Ensure file is writable while its modified time is set.  */
+      attributes = GetFileAttributes (filename);
+      SetFileAttributes (filename, attributes ^ FILE_ATTRIBUTE_READONLY);
+      if (set_file_times (filename, now, now))
+       {
+         /* Restore original attributes.  */
+         SetFileAttributes (filename, attributes);
+         Fsignal (Qfile_date_error,
+                  Fcons (build_string ("Cannot set file date"),
+                         Fcons (newname, Qnil)));
+       }
+      /* Restore original attributes.  */
+      SetFileAttributes (filename, attributes);
     }
 #else /* not WINDOWSNT */
   ifd = emacs_open (XSTRING (encoded_file)->data, O_RDONLY, 0);