]> 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:45:25 +0000 (00:45 +0000)
committerJason Rumney <jasonr@gnu.org>
Sat, 9 Mar 2002 00:45:25 +0000 (00:45 +0000)
read-only when setting modified time.

src/ChangeLog
src/fileio.c

index 7f5c1aed680a6755e823a30d99f687ee595b7ee7..d4a0af2eb882cac943f94b7242ab907b37924536 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  Juanma Barranquero  <jbarranquero@peoplecall.com>
 
        * w32fns.c (Fx_display_color_cells): Force 24+ bit color depths to
index b152f0a74e086515cf29baa7c66fd108ede571e3..12c064cb34a01a729b5df63f9cdb2624a4978fbd 100644 (file)
@@ -2342,12 +2342,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);