diff options
author | Richard M. Stallman <rms@gnu.org> | 2002-03-03 21:37:31 +0000 |
---|---|---|
committer | Richard M. Stallman <rms@gnu.org> | 2002-03-03 21:37:31 +0000 |
commit | aea8821d9a510bb50e5610f056f99a4190c839c3 (patch) | |
tree | 140ecd11e2be64398cebeb2df59676d06ff9ee4a /lisp/terminal.el | |
parent | 22c94cf2a61f49bde396dbc214b8caa0a892d7ac (diff) | |
download | emacs-aea8821d9a510bb50e5610f056f99a4190c839c3.tar.gz |
(te-create-terminfo): Use make-temp-file
to create the source file in a safe way.
Diffstat (limited to 'lisp/terminal.el')
-rw-r--r-- | lisp/terminal.el | 40 |
1 files changed, 23 insertions, 17 deletions
diff --git a/lisp/terminal.el b/lisp/terminal.el index 438f1690673..7d89f3ff824 100644 --- a/lisp/terminal.el +++ b/lisp/terminal.el @@ -1264,10 +1264,10 @@ of the terminal-emulator" (defun te-create-terminfo () "Create and compile a terminfo entry for the virtual terminal. This is kept in the directory specified by `te-terminfo-directory'." - (if (and system-uses-terminfo - (not (file-exists-p (concat te-terminfo-directory - (substring te-terminal-name-prefix 0 1) - "/" te-terminal-name)))) + (when (and system-uses-terminfo + (not (file-exists-p (concat te-terminfo-directory + (substring te-terminal-name-prefix 0 1) + "/" te-terminal-name)))) (let ( (terminfo (concat ;; The first newline avoids trouble with ncurses. @@ -1278,24 +1278,30 @@ in the directory specified by `te-terminfo-directory'." "dch=^Pd%p1%'\\s'%+%c, dch1=^Pd!, dl=^P^K%p1%'\\s'%+%c," "dl1=^P^K!, ed=^PC, el=^Pc, home=^P=\\s\\s," "ich=^P_%p1%'\\s'%+%c, ich1=^P_!, il=^P^O%p1%'\\s'%+%c," + ;; The last newline avoids trouble with ncurses. "il1=^P^O!, ind=^P\\n, nel=\\n,\n")) - ;; The last newline avoids trouble with ncurses. + ;; This is the desired name for the source file. (file-name (concat te-terminfo-directory te-terminal-name ".tif")) ) (make-directory te-terminfo-directory t) - (save-excursion - (set-buffer (create-file-buffer file-name)) - (insert terminfo) - (write-file file-name) - (kill-buffer nil) - ) - (let ( (process-environment - (cons (concat "TERMINFO=" - (directory-file-name te-terminfo-directory)) - process-environment)) ) + (let ((temp-file + (make-temp-file (expand-file-name "tif" te-terminfo-directory)))) + ;; Store the source file under a random temp name. + (with-temp-file temp-file + (insert terminfo)) + ;; Rename it to the desired name. + ;; We use this roundabout approach + ;; to avoid any risk of writing a name that + ;; was michievouslyt set up as a symlink. + (rename-file temp-file file-name)) + ;; Now compile that source to make the binary that the + ;; programs actually use. + (let ((process-environment + (cons (concat "TERMINFO=" + (directory-file-name te-terminfo-directory)) + process-environment))) (set-process-sentinel (start-process "tic" nil "tic" file-name) 'te-tic-sentinel)))) - (directory-file-name te-terminfo-directory) -) + (directory-file-name te-terminfo-directory)) (defun te-create-termcap () "Create a termcap entry for the virtual terminal" |