emacs-diffs
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

[Emacs-diffs] trunk r117106: Add with-file-modes macro, and use it


From: Glenn Morris
Subject: [Emacs-diffs] trunk r117106: Add with-file-modes macro, and use it
Date: Wed, 14 May 2014 17:15:35 +0000
User-agent: Bazaar (2.6b2)

------------------------------------------------------------
revno: 117106
revision-id: address@hidden
parent: address@hidden
committer: Glenn Morris <address@hidden>
branch nick: trunk
timestamp: Wed 2014-05-14 10:15:15 -0700
message:
  Add with-file-modes macro, and use it
  
  * lisp/subr.el (with-file-modes): New macro.
  
  * lisp/printing.el (pr-save-file-modes):
  * lisp/eshell/esh-util.el (eshell-with-file-modes): Make obsolete.
  
  * lisp/emacs-lisp/lisp-mode.el (lisp-el-font-lock-keywords-2):
  Add with-file-modes.
  
  * lisp/doc-view.el (doc-view-make-safe-dir):
  * lisp/epg.el (epg--start):
  * lisp/files.el (locate-user-emacs-file, make-temp-file)
  (backup-buffer-copy, move-file-to-trash):
  * printing.el (pr-despool-print, pr-call-process, pr-text2ps):
  * eshell/esh-util.el (eshell-with-private-file-modes)
  (eshell-make-private-directory):
  * lisp/net/browse-url.el (browse-url-mosaic):
  * lisp/obsolete/mailpost.el (post-mail-send-it):
  * lisp/obsolete/pgg-pgp.el (pgg-pgp-verify-region):
  * lisp/obsolete/pgg-pgp5.el (pgg-pgp5-verify-region):
  * lisp/url/url-util.el (url-make-private-file):
  Use with-file-modes.
  
  * doc/lispref/files.texi (Changing Files): Mention with-file-modes.
  
  * etc/NEWS: Mention this.
modified:
  doc/lispref/ChangeLog          changelog-20091113204419-o5vbwnq5f7feedwu-6155
  doc/lispref/files.texi         files.texi-20091113204419-o5vbwnq5f7feedwu-6179
  etc/NEWS                       news-20100311060928-aoit31wvzf25yr1z-1
  lisp/ChangeLog                 changelog-20091113204419-o5vbwnq5f7feedwu-1432
  lisp/doc-view.el               docview.el-20091113204419-o5vbwnq5f7feedwu-6334
  lisp/emacs-lisp/lisp-mode.el   lispmode.el-20091113204419-o5vbwnq5f7feedwu-205
  lisp/epg.el                    epg.el-20091113204419-o5vbwnq5f7feedwu-8560
  lisp/eshell/esh-util.el        eshutil.el-20091113204419-o5vbwnq5f7feedwu-1849
  lisp/files.el                  files.el-20091113204419-o5vbwnq5f7feedwu-265
  lisp/net/browse-url.el         
browseurl.el-20091113204419-o5vbwnq5f7feedwu-1785
  lisp/obsolete/mailpost.el      mailpost.el-20091113204419-o5vbwnq5f7feedwu-10
  lisp/obsolete/pgg-pgp.el       pggpgp.el-20091113204419-o5vbwnq5f7feedwu-4037
  lisp/obsolete/pgg-pgp5.el      pggpgp5.el-20091113204419-o5vbwnq5f7feedwu-4038
  lisp/printing.el               
printing.el-20091113204419-o5vbwnq5f7feedwu-2550
  lisp/subr.el                   subr.el-20091113204419-o5vbwnq5f7feedwu-151
  lisp/url/ChangeLog             changelog-20091113204419-o5vbwnq5f7feedwu-3116
  lisp/url/url-util.el           urlutil.el-20091113204419-o5vbwnq5f7feedwu-3003
=== modified file 'doc/lispref/ChangeLog'
--- a/doc/lispref/ChangeLog     2014-05-08 03:41:21 +0000
+++ b/doc/lispref/ChangeLog     2014-05-14 17:15:15 +0000
@@ -1,3 +1,7 @@
+2014-05-14  Glenn Morris  <address@hidden>
+
+       * files.texi (Changing Files): Mention with-file-modes.
+
 2014-05-08  Paul Eggert  <address@hidden>
 
        * internals.texi (C Dialect): New section.

=== modified file 'doc/lispref/files.texi'
--- a/doc/lispref/files.texi    2014-03-26 15:57:13 +0000
+++ b/doc/lispref/files.texi    2014-05-14 17:15:15 +0000
@@ -1688,6 +1688,16 @@
 permissions.
 @end defun
 
address@hidden with-file-modes mode address@hidden
+This macro evaluates the @var{body} forms with the default
+permissions for new files temporarily set to @var{modes} (whose value
+is as for @code{set-file-modes} above).  When finished, it restores
+the original default file permissions, and returns the value of the
+last form in @var{body}.
+
+This is useful for creating private files, for example.
address@hidden defmac
+
 @defun default-file-modes
 This function returns the default file permissions, as an integer.
 @end defun

=== modified file 'etc/NEWS'
--- a/etc/NEWS  2014-05-04 23:49:33 +0000
+++ b/etc/NEWS  2014-05-14 17:15:15 +0000
@@ -122,6 +122,10 @@
 *** (side-effect-free VAL), if VAL is non-nil, indicates the function does not
 have side effects.
 
++++
+** New macro `with-file-modes', for evaluating expressions with default file
+permissions set to temporary values (e.g., for creating private files).
+
 ** You can access the slots of structures using `cl-struct-slot-value'.
 
 

=== modified file 'lisp/ChangeLog'
--- a/lisp/ChangeLog    2014-05-14 17:05:16 +0000
+++ b/lisp/ChangeLog    2014-05-14 17:15:15 +0000
@@ -1,5 +1,23 @@
 2014-05-14  Glenn Morris  <address@hidden>
 
+       * subr.el (with-file-modes): New macro.
+       * printing.el (pr-save-file-modes): Make obsolete.
+       * eshell/esh-util.el (eshell-with-file-modes): Make obsolete.
+       * emacs-lisp/lisp-mode.el (lisp-el-font-lock-keywords-2):
+       Add with-file-modes.
+       * doc-view.el (doc-view-make-safe-dir):
+       * epg.el (epg--start):
+       * files.el (locate-user-emacs-file, make-temp-file)
+       (backup-buffer-copy, move-file-to-trash):
+       * printing.el (pr-despool-print, pr-call-process, pr-text2ps):
+       * eshell/esh-util.el (eshell-with-private-file-modes)
+       (eshell-make-private-directory):
+       * net/browse-url.el (browse-url-mosaic):
+       * obsolete/mailpost.el (post-mail-send-it):
+       * obsolete/pgg-pgp.el (pgg-pgp-verify-region):
+       * obsolete/pgg-pgp5.el (pgg-pgp5-verify-region):
+       Use with-file-modes.
+
        * vc/emerge.el (emerge-make-temp-file): Simplify.
 
 2014-05-14  Stephen Berman <address@hidden>

=== modified file 'lisp/doc-view.el'
--- a/lisp/doc-view.el  2014-04-17 03:58:25 +0000
+++ b/lisp/doc-view.el  2014-05-14 17:15:15 +0000
@@ -654,16 +654,10 @@
 
 (defun doc-view-make-safe-dir (dir)
   (condition-case nil
-      (let ((umask (default-file-modes)))
-       (unwind-protect
-           (progn
-             ;; Create temp files with strict access rights.  It's easy to
-             ;; loosen them later, whereas it's impossible to close the
-             ;; time-window of loose permissions otherwise.
-             (set-default-file-modes #o0700)
-             (make-directory dir))
-         ;; Reset the umask.
-         (set-default-file-modes umask)))
+      ;; Create temp files with strict access rights.  It's easy to
+      ;; loosen them later, whereas it's impossible to close the
+      ;; time-window of loose permissions otherwise.
+      (with-file-modes #o0700 (make-directory dir))
     (file-already-exists
      (when (file-symlink-p dir)
        (error "Danger: %s points to a symbolic link" dir))

=== modified file 'lisp/emacs-lisp/lisp-mode.el'
--- a/lisp/emacs-lisp/lisp-mode.el      2014-05-11 03:48:15 +0000
+++ b/lisp/emacs-lisp/lisp-mode.el      2014-05-14 17:15:15 +0000
@@ -208,6 +208,7 @@
                        "with-category-table" "with-coding-priority"
                        "with-current-buffer" "with-demoted-errors"
                        "with-electric-help" "with-eval-after-load"
+                       "with-file-modes"
                        "with-local-quit" "with-no-warnings"
                        "with-output-to-temp-buffer" "with-selected-window"
                        "with-selected-frame" "with-silent-modifications"

=== modified file 'lisp/epg.el'
--- a/lisp/epg.el       2014-01-06 06:25:30 +0000
+++ b/lisp/epg.el       2014-05-14 17:15:15 +0000
@@ -1206,7 +1206,6 @@
         (coding-system-for-read 'binary)
         process-connection-type
         (process-environment process-environment)
-        (orig-mode (default-file-modes))
         (buffer (generate-new-buffer " *epg*"))
         process
         terminal-name
@@ -1265,14 +1264,9 @@
       (setq epg-agent-file agent-file)
       (make-local-variable 'epg-agent-mtime)
       (setq epg-agent-mtime agent-mtime))
-    (unwind-protect
-       (progn
-         (set-default-file-modes 448)
-         (setq process
-               (apply #'start-process "epg" buffer
-                      (epg-context-program context)
-                      args)))
-      (set-default-file-modes orig-mode))
+    (with-file-modes 448
+      (setq process (apply #'start-process "epg" buffer
+                          (epg-context-program context) args)))
     (set-process-filter process #'epg--process-filter)
     (epg-context-set-process context process)))
 

=== modified file 'lisp/eshell/esh-util.el'
--- a/lisp/eshell/esh-util.el   2014-01-01 07:43:34 +0000
+++ b/lisp/eshell/esh-util.el   2014-05-14 17:15:15 +0000
@@ -539,20 +539,17 @@
 
 (defmacro eshell-with-file-modes (modes &rest forms)
   "Evaluate, with file-modes set to MODES, the given FORMS."
-  `(let ((modes (default-file-modes)))
-     (set-default-file-modes ,modes)
-     (unwind-protect
-        (progn ,@forms)
-       (set-default-file-modes modes))))
+  (declare (obsolete with-file-modes "24.5"))
+  `(with-file-modes ,modes ,@forms))
 
 (defmacro eshell-with-private-file-modes (&rest forms)
   "Evaluate FORMS with private file modes set."
-  `(eshell-with-file-modes ,eshell-private-file-modes ,@forms))
+  `(with-file-modes ,eshell-private-file-modes ,@forms))
 
 (defsubst eshell-make-private-directory (dir &optional parents)
   "Make DIR with file-modes set to `eshell-private-directory-modes'."
-  (eshell-with-file-modes eshell-private-directory-modes
-                         (make-directory dir parents)))
+  (with-file-modes eshell-private-directory-modes
+    (make-directory dir parents)))
 
 (defsubst eshell-substring (string sublen)
   "Return the beginning of STRING, up to SUBLEN bytes."

=== modified file 'lisp/files.el'
--- a/lisp/files.el     2014-05-12 06:59:30 +0000
+++ b/lisp/files.el     2014-05-14 17:15:15 +0000
@@ -941,14 +941,10 @@
             (if (file-directory-p user-emacs-directory)
                 (or (file-accessible-directory-p user-emacs-directory)
                     (setq errtype "access"))
-              (let ((umask (default-file-modes)))
-                (unwind-protect
-                    (progn
-                      (set-default-file-modes ?\700)
-                      (condition-case nil
-                          (make-directory user-emacs-directory)
-                        (error (setq errtype "create"))))
-                  (set-default-file-modes umask))))
+              (with-file-modes ?\700
+                (condition-case nil
+                    (make-directory user-emacs-directory)
+                  (error (setq errtype "create")))))
             (when (and errtype
                        user-emacs-directory-warning
                        (not (get 'user-emacs-directory-warning 'this-session)))
@@ -1273,36 +1269,31 @@
 If DIR-FLAG is non-nil, create a new empty directory instead of a file.
 
 If SUFFIX is non-nil, add that at the end of the file name."
-  (let ((umask (default-file-modes))
-       file)
-    (unwind-protect
-       (progn
-         ;; Create temp files with strict access rights.  It's easy to
-         ;; loosen them later, whereas it's impossible to close the
-         ;; time-window of loose permissions otherwise.
-         (set-default-file-modes ?\700)
-         (while (condition-case ()
-                    (progn
-                      (setq file
-                            (make-temp-name
-                              (if (zerop (length prefix))
-                                  (file-name-as-directory
-                                   temporary-file-directory)
-                                (expand-file-name prefix
-                                                  temporary-file-directory))))
-                      (if suffix
-                          (setq file (concat file suffix)))
-                      (if dir-flag
-                          (make-directory file)
-                        (write-region "" nil file nil 'silent nil 'excl))
-                      nil)
-                  (file-already-exists t))
-           ;; the file was somehow created by someone else between
-           ;; `make-temp-name' and `write-region', let's try again.
-           nil)
-         file)
-      ;; Reset the umask.
-      (set-default-file-modes umask))))
+  ;; Create temp files with strict access rights.  It's easy to
+  ;; loosen them later, whereas it's impossible to close the
+  ;; time-window of loose permissions otherwise.
+  (with-file-modes ?\700
+    (let (file)
+      (while (condition-case ()
+                (progn
+                  (setq file
+                        (make-temp-name
+                         (if (zerop (length prefix))
+                             (file-name-as-directory
+                              temporary-file-directory)
+                           (expand-file-name prefix
+                                             temporary-file-directory))))
+                  (if suffix
+                      (setq file (concat file suffix)))
+                  (if dir-flag
+                      (make-directory file)
+                    (write-region "" nil file nil 'silent nil 'excl))
+                  nil)
+              (file-already-exists t))
+       ;; the file was somehow created by someone else between
+       ;; `make-temp-name' and `write-region', let's try again.
+       nil)
+      file)))
 
 (defun recode-file-name (file coding new-coding &optional ok-if-already-exists)
   "Change the encoding of FILE's name from CODING to NEW-CODING.
@@ -4071,31 +4062,26 @@
            (file-error nil))))))
 
 (defun backup-buffer-copy (from-name to-name modes extended-attributes)
-  (let ((umask (default-file-modes)))
-    (unwind-protect
-       (progn
-         ;; Create temp files with strict access rights.  It's easy to
-         ;; loosen them later, whereas it's impossible to close the
-         ;; time-window of loose permissions otherwise.
-         (set-default-file-modes ?\700)
-         (when (condition-case nil
-                   ;; Try to overwrite old backup first.
-                   (copy-file from-name to-name t t t)
-                 (error t))
-           (while (condition-case nil
-                      (progn
-                        (when (file-exists-p to-name)
-                          (delete-file to-name))
-                        (copy-file from-name to-name nil t t)
-                        nil)
-                    (file-already-exists t))
-             ;; The file was somehow created by someone else between
-             ;; `delete-file' and `copy-file', so let's try again.
-             ;; rms says "I think there is also a possible race
-             ;; condition for making backup files" (emacs-devel 20070821).
-             nil)))
-      ;; Reset the umask.
-      (set-default-file-modes umask)))
+  ;; Create temp files with strict access rights.  It's easy to
+  ;; loosen them later, whereas it's impossible to close the
+  ;; time-window of loose permissions otherwise.
+  (with-file-modes ?\700
+    (when (condition-case nil
+             ;; Try to overwrite old backup first.
+             (copy-file from-name to-name t t t)
+           (error t))
+      (while (condition-case nil
+                (progn
+                  (when (file-exists-p to-name)
+                    (delete-file to-name))
+                  (copy-file from-name to-name nil t t)
+                  nil)
+              (file-already-exists t))
+       ;; The file was somehow created by someone else between
+       ;; `delete-file' and `copy-file', so let's try again.
+       ;; rms says "I think there is also a possible race
+       ;; condition for making backup files" (emacs-devel 20070821).
+       nil)))
   ;; If set-file-extended-attributes fails, fall back on set-file-modes.
   (unless (and extended-attributes
               (with-demoted-errors
@@ -6863,15 +6849,11 @@
                      trash-info-dir filename))
 
           ;; Ensure that the trash directory exists; otherwise, create it.
-          (let ((saved-default-file-modes (default-file-modes)))
-            (unwind-protect
-                (progn
-                  (set-default-file-modes #o700)
-                  (unless (file-exists-p trash-files-dir)
-                    (make-directory trash-files-dir t))
-                  (unless (file-exists-p trash-info-dir)
-                    (make-directory trash-info-dir t)))
-              (set-default-file-modes saved-default-file-modes)))
+          (with-file-modes #o700
+            (unless (file-exists-p trash-files-dir)
+              (make-directory trash-files-dir t))
+            (unless (file-exists-p trash-info-dir)
+              (make-directory trash-info-dir t)))
 
           ;; Try to move to trash with .trashinfo undo information
           (save-excursion

=== modified file 'lisp/net/browse-url.el'
--- a/lisp/net/browse-url.el    2014-05-13 08:54:08 +0000
+++ b/lisp/net/browse-url.el    2014-05-14 17:15:15 +0000
@@ -1343,16 +1343,12 @@
                         "newwin\n"
                       "goto\n")
                     url "\n")
-            (let ((umask (default-file-modes)))
-              (unwind-protect
-                  (progn
-                    (set-default-file-modes ?\700)
-                    (if (file-exists-p
-                         (setq pidfile (format "/tmp/Mosaic.%d" pid)))
-                        (delete-file pidfile))
-                    ;; http://debbugs.gnu.org/17428.  Use O_EXCL.
-                    (write-region nil nil pidfile nil 'silent nil 'excl))
-                (set-default-file-modes umask))))
+            (with-file-modes ?\700
+              (if (file-exists-p
+                   (setq pidfile (format "/tmp/Mosaic.%d" pid)))
+                  (delete-file pidfile))
+              ;; http://debbugs.gnu.org/17428.  Use O_EXCL.
+              (write-region nil nil pidfile nil 'silent nil 'excl)))
          ;; Send signal SIGUSR to Mosaic
          (message "Signaling Mosaic...")
          (signal-process pid 'SIGUSR1)

=== modified file 'lisp/obsolete/mailpost.el'
--- a/lisp/obsolete/mailpost.el 2014-02-10 01:34:22 +0000
+++ b/lisp/obsolete/mailpost.el 2014-05-14 17:15:15 +0000
@@ -75,12 +75,7 @@
            (if mail-interactive
                (with-current-buffer errbuf
                  (erase-buffer))))
-         (let ((m (default-file-modes)))
-           (unwind-protect
-               (progn
-                 (set-default-file-modes 384)
-                 (setq temfile  (make-temp-file ",rpost")))
-             (set-default-file-modes m)))
+         (with-file-modes 384 (setq temfile (make-temp-file ",rpost")))
          (apply 'call-process
                 (append (list (if (boundp 'post-mail-program)
                                   post-mail-program

=== modified file 'lisp/obsolete/pgg-pgp.el'
--- a/lisp/obsolete/pgg-pgp.el  2014-01-01 07:43:34 +0000
+++ b/lisp/obsolete/pgg-pgp.el  2014-05-14 17:15:15 +0000
@@ -202,15 +202,11 @@
 (defun pgg-pgp-verify-region (start end &optional signature)
   "Verify region between START and END as the detached signature SIGNATURE."
   (let* ((orig-file (pgg-make-temp-file "pgg"))
-        (args "+verbose=1 +batchmode +language=us")
-        (orig-mode (default-file-modes)))
-    (unwind-protect
-       (progn
-         (set-default-file-modes 448)
-         (let ((coding-system-for-write 'binary)
-               jka-compr-compression-info-list jam-zcat-filename-list)
-           (write-region start end orig-file)))
-      (set-default-file-modes orig-mode))
+        (args "+verbose=1 +batchmode +language=us"))
+    (with-file-modes 448
+      (let ((coding-system-for-write 'binary)
+            jka-compr-compression-info-list jam-zcat-filename-list)
+        (write-region start end orig-file)))
     (if (stringp signature)
        (progn
          (copy-file signature (setq signature (concat orig-file ".asc")))

=== modified file 'lisp/obsolete/pgg-pgp5.el'
--- a/lisp/obsolete/pgg-pgp5.el 2014-01-01 07:43:34 +0000
+++ b/lisp/obsolete/pgg-pgp5.el 2014-05-14 17:15:15 +0000
@@ -208,15 +208,11 @@
 (defun pgg-pgp5-verify-region (start end &optional signature)
   "Verify region between START and END as the detached signature SIGNATURE."
   (let ((orig-file (pgg-make-temp-file "pgg"))
-       (args '("+verbose=1" "+batchmode=1" "+language=us"))
-       (orig-mode (default-file-modes)))
-    (unwind-protect
-       (progn
-         (set-default-file-modes 448)
-         (let ((coding-system-for-write 'binary)
-               jka-compr-compression-info-list jam-zcat-filename-list)
-           (write-region start end orig-file)))
-      (set-default-file-modes orig-mode))
+       (args '("+verbose=1" "+batchmode=1" "+language=us")))
+    (with-file-modes 448
+      (let ((coding-system-for-write 'binary)
+           jka-compr-compression-info-list jam-zcat-filename-list)
+       (write-region start end orig-file)))
     (when (stringp signature)
       (copy-file signature (setq signature (concat orig-file ".asc")))
       (setq args (append args (list signature))))

=== modified file 'lisp/printing.el'
--- a/lisp/printing.el  2014-05-14 06:35:36 +0000
+++ b/lisp/printing.el  2014-05-14 17:15:15 +0000
@@ -3171,12 +3171,9 @@
 
 
 (defmacro pr-save-file-modes (&rest body)
-  "Set temporally file modes to `pr-file-modes'."
-  `(let ((pr--default-file-modes (default-file-modes)))        ; save default
-     (set-default-file-modes pr-file-modes)
-     ,@body
-     (set-default-file-modes pr--default-file-modes))) ; restore default
-
+  "Execute BODY with file permissions temporarily set to `pr-file-modes'."
+  (declare (obsolete with-file-modes "24.5"))
+  `(with-file-modes pr-file-modes ,@body))
 
 ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
 ;; Keys & Menus
@@ -4372,12 +4369,12 @@
 send the image to the printer.  If FILENAME is a string, save the PostScript
 image in a file with that name."
   (interactive (list (ps-print-preprint current-prefix-arg)))
-  (pr-save-file-modes
-   (let ((ps-lpr-command         (pr-command pr-ps-command))
-        (ps-lpr-switches        pr-ps-switches)
-        (ps-printer-name-option pr-ps-printer-switch)
-        (ps-printer-name        pr-ps-printer))
-     (ps-despool filename))))
+  (with-file-modes pr-file-modes
+    (let ((ps-lpr-command         (pr-command pr-ps-command))
+         (ps-lpr-switches        pr-ps-switches)
+         (ps-printer-name-option pr-ps-printer-switch)
+         (ps-printer-name        pr-ps-printer))
+      (ps-despool filename))))
 
 
 ;;;###autoload
@@ -5640,12 +5637,12 @@
       (goto-char (point-max))
       (insert (format "%s %S\n" cmd args)))
     ;; *Printing Command Output* == show any return message from command
-    (pr-save-file-modes
-     (setq status
-          (condition-case data
-              (apply 'call-process cmd nil buffer nil args)
-            ((quit error)
-             (error-message-string data)))))
+    (with-file-modes pr-file-modes
+      (setq status
+           (condition-case data
+               (apply 'call-process cmd nil buffer nil args)
+             ((quit error)
+              (error-message-string data)))))
     ;; *Printing Command Output* == show exit status
     (with-current-buffer buffer
       (goto-char (point-max))
@@ -5890,42 +5887,42 @@
 
 
 (defun pr-text2ps (kind n-up filename &optional from to)
-  (pr-save-file-modes
-   (let ((ps-n-up-printing n-up)
-        (ps-spool-config (and (eq ps-spool-config 'setpagedevice)
-                              'setpagedevice)))
-     (pr-delete-file-if-exists filename)
-     (cond (pr-faces-p
-           (cond (pr-spool-p
-                  ;; pr-faces-p and pr-spool-p
-                  ;; here FILENAME arg is ignored
-                  (cond ((eq kind 'buffer)
-                         (ps-spool-buffer-with-faces))
-                        ((eq kind 'region)
-                         (ps-spool-region-with-faces (or from (point))
-                                                     (or to (mark))))
-                        ))
-                 ;; pr-faces-p and not pr-spool-p
-                 ((eq kind 'buffer)
-                  (ps-print-buffer-with-faces filename))
-                 ((eq kind 'region)
-                  (ps-print-region-with-faces (or from (point))
-                                              (or to (mark)) filename))
-                 ))
-          (pr-spool-p
-           ;; not pr-faces-p and pr-spool-p
-           ;; here FILENAME arg is ignored
-           (cond ((eq kind 'buffer)
-                  (ps-spool-buffer))
-                 ((eq kind 'region)
-                  (ps-spool-region (or from (point)) (or to (mark))))
-                 ))
-          ;; not pr-faces-p and not pr-spool-p
-          ((eq kind 'buffer)
-           (ps-print-buffer filename))
-          ((eq kind 'region)
-           (ps-print-region (or from (point)) (or to (mark)) filename))
-          ))))
+  (with-file-modes pr-file-modes
+    (let ((ps-n-up-printing n-up)
+         (ps-spool-config (and (eq ps-spool-config 'setpagedevice)
+                               'setpagedevice)))
+      (pr-delete-file-if-exists filename)
+      (cond (pr-faces-p
+            (cond (pr-spool-p
+                   ;; pr-faces-p and pr-spool-p
+                   ;; here FILENAME arg is ignored
+                   (cond ((eq kind 'buffer)
+                          (ps-spool-buffer-with-faces))
+                         ((eq kind 'region)
+                          (ps-spool-region-with-faces (or from (point))
+                                                      (or to (mark))))
+                         ))
+                  ;; pr-faces-p and not pr-spool-p
+                  ((eq kind 'buffer)
+                   (ps-print-buffer-with-faces filename))
+                  ((eq kind 'region)
+                   (ps-print-region-with-faces (or from (point))
+                                               (or to (mark)) filename))
+                  ))
+           (pr-spool-p
+            ;; not pr-faces-p and pr-spool-p
+            ;; here FILENAME arg is ignored
+            (cond ((eq kind 'buffer)
+                   (ps-spool-buffer))
+                  ((eq kind 'region)
+                   (ps-spool-region (or from (point)) (or to (mark))))
+                  ))
+           ;; not pr-faces-p and not pr-spool-p
+           ((eq kind 'buffer)
+            (ps-print-buffer filename))
+           ((eq kind 'region)
+            (ps-print-region (or from (point)) (or to (mark)) filename))
+           ))))
 
 
 (defun pr-command (command)

=== modified file 'lisp/subr.el'
--- a/lisp/subr.el      2014-05-12 06:59:30 +0000
+++ b/lisp/subr.el      2014-05-14 17:15:15 +0000
@@ -3292,6 +3292,19 @@
                  ,@body)
         (with-current-buffer ,old-buffer
           (set-case-table ,old-case-table))))))
+
+(defmacro with-file-modes (modes &rest body)
+  "Execute BODY with default file permissions temporarily set to MODES.
+MODES is as for `set-default-file-modes'."
+  (declare (indent 1) (debug t))
+  (let ((umask (make-symbol "umask")))
+    `(let ((,umask (default-file-modes)))
+       (unwind-protect
+           (progn
+             (set-default-file-modes ,modes)
+             ,@body)
+         (set-default-file-modes ,umask)))))
+
 
 ;;; Matching and match data.
 

=== modified file 'lisp/url/ChangeLog'
--- a/lisp/url/ChangeLog        2014-05-12 06:59:30 +0000
+++ b/lisp/url/ChangeLog        2014-05-14 17:15:15 +0000
@@ -1,3 +1,7 @@
+2014-05-14  Glenn Morris  <address@hidden>
+
+       * url-util.el (url-make-private-file): Use with-file-modes.
+
 2014-05-12  Michael Albinus  <address@hidden>
 
        * url-handlers.el (url-file-handler-load-in-progress): New defvar.

=== modified file 'lisp/url/url-util.el'
--- a/lisp/url/url-util.el      2014-03-29 00:55:44 +0000
+++ b/lisp/url/url-util.el      2014-05-14 17:15:15 +0000
@@ -628,14 +628,9 @@
       (make-directory dir t)))
   ;; Based on doc-view-make-safe-dir.
   (condition-case nil
-      (let ((umask (default-file-modes)))
-        (unwind-protect
-            (progn
-              (set-default-file-modes #o0600)
-              (with-temp-buffer
-                (write-region (point-min) (point-max)
-                              file nil 'silent nil 'excl)))
-          (set-default-file-modes umask)))
+      (with-file-modes #o0600
+        (with-temp-buffer
+          (write-region (point-min) (point-max) file nil 'silent nil 'excl)))
     (file-already-exists
      (if (file-symlink-p file)
          (error "Danger: `%s' is a symbolic link" file))


reply via email to

[Prev in Thread] Current Thread [Next in Thread]