summaryrefslogtreecommitdiff
path: root/lisp/files.el
diff options
context:
space:
mode:
authorPaul Eggert <eggert@cs.ucla.edu>2019-09-16 17:43:56 -0700
committerPaul Eggert <eggert@cs.ucla.edu>2019-09-16 18:00:59 -0700
commitbc1c2cf009e30af77523fd87a8910fdbc4284704 (patch)
treee825b2ac67c0beb3b43f50ec100eed4c0d93570b /lisp/files.el
parentb124cb8f30d575fcda97507c40f16a499640bcd5 (diff)
downloademacs-bc1c2cf009e30af77523fd87a8910fdbc4284704.tar.gz
Fix some file-mode races
* lisp/emacs-lisp/autoload.el (autoload-ensure-file-writeable): * lisp/files.el (after-find-file): * lisp/gnus/gnus-start.el (gnus-dribble-read-file): * lisp/htmlfontify.el (hfy-copy-and-fontify-file): * lisp/server.el (server-ensure-safe-dir): Avoid a race when getting file permissions.
Diffstat (limited to 'lisp/files.el')
-rw-r--r--lisp/files.el10
1 files changed, 5 insertions, 5 deletions
diff --git a/lisp/files.el b/lisp/files.el
index ce4dd99bd53..5ceaacd744e 100644
--- a/lisp/files.el
+++ b/lisp/files.el
@@ -2554,13 +2554,13 @@ unless NOMODES is non-nil."
(auto-save-mode 1)))
;; Make people do a little extra work (C-x C-q)
;; before altering a backup file.
- (when (backup-file-name-p buffer-file-name)
- (setq buffer-read-only t))
;; When a file is marked read-only,
;; make the buffer read-only even if root is looking at it.
- (when (and (file-modes (buffer-file-name))
- (zerop (logand (file-modes (buffer-file-name)) #o222)))
- (setq buffer-read-only t))
+ (unless buffer-read-only
+ (when (or (backup-file-name-p buffer-file-name)
+ (let ((modes (file-modes (buffer-file-name))))
+ (and modes (zerop (logand modes #o222)))))
+ (setq buffer-read-only t)))
(unless nomodes
(when (and view-read-only view-mode)
(view-mode -1))