diff lisp/files.el @ 1103:ecaf2b70cd45

*** empty log message ***
author Richard M. Stallman <rms@gnu.org>
date Sat, 12 Sep 1992 08:44:18 +0000
parents 676310a31777
children c9feb3e64805
line wrap: on
line diff
--- a/lisp/files.el	Sat Sep 12 07:46:41 1992 +0000
+++ b/lisp/files.el	Sat Sep 12 08:44:18 1992 +0000
@@ -787,11 +787,16 @@
 			       (let ((attr (file-attributes real-file-name)))
 				 (or (nth 9 attr)
 				     (/= (nth 2 attr) (user-uid))))))
-		      (copy-file real-file-name backupname t t)
-; rename-file should delete old backup.
-;		    (condition-case ()
-;			(delete-file backupname)
-;		      (file-error nil))
+		      (condition-case ()
+			  (copy-file real-file-name backupname t t)
+			(file-error
+			 ;; If copying fails because file BACKUPNAME
+			 ;; is not writable, delete that file and try again.
+			 (if (and (file-exists-p backupname)
+				  (not (file-writable-p backupname)))
+			     (delete-file backupname))
+			 (copy-file real-file-name backupname t t)))
+		    ;; rename-file should delete old backup.
 		    (rename-file real-file-name backupname t)
 		    (setq setmodes (file-modes backupname)))
 		(file-error
@@ -799,7 +804,15 @@
 		 (setq backupname (expand-file-name "~/%backup%~"))
 		 (message "Cannot write backup file; backing up in ~/%%backup%%~")
 		 (sleep-for 1)
-		 (copy-file real-file-name backupname t t)))
+		 (condition-case ()
+		     (copy-file real-file-name backupname t t)
+		   (file-error
+		    ;; If copying fails because file BACKUPNAME
+		    ;; is not writable, delete that file and try again.
+		    (if (and (file-exists-p backupname)
+			     (not (file-writable-p backupname)))
+			(delete-file backupname))
+		    (copy-file real-file-name backupname t t)))))
 	      (setq buffer-backed-up t)
 	      ;; Now delete the old versions, if desired.
 	      (if delete-old-versions