Function: archive-*-write-file-member
archive-*-write-file-member is a byte-compiled function defined in
arc-mode.el.gz.
Signature
(archive-*-write-file-member ARCHIVE DESCR COMMAND)
Source Code
;; Defined in /usr/src/emacs/lisp/arc-mode.el.gz
(defun archive-*-write-file-member (archive descr command)
(let* ((archive (expand-file-name archive))
(ename (archive--file-desc-ext-file-name descr))
(tmpfile (expand-file-name ename archive-tmpdir))
(top (directory-file-name (file-name-as-directory archive-tmpdir)))
(default-directory (file-name-as-directory top)))
(unwind-protect
(progn
(make-directory (file-name-directory tmpfile) t)
;; If the member is itself an archive, write it without
;; the dired-like listing we created.
(if (eq major-mode 'archive-mode)
(archive-write-file tmpfile)
(write-region nil nil tmpfile nil 'nomessage))
;; basic-save-buffer needs last-coding-system-used to have
;; the value used to write the file, so save it before any
;; further processing clobbers it (we restore it in
;; archive-write-file-member, above).
(setq archive-member-coding-system last-coding-system-used)
(if (archive--file-desc-mode descr)
;; Set the file modes, but make sure we can read it.
(set-file-modes tmpfile
(logior ?\400 (archive--file-desc-mode descr))))
(setq ename
(encode-coding-string ename archive-file-name-coding-system))
(let* ((coding-system-for-write 'no-conversion)
(default-directory (file-name-as-directory archive-tmpdir))
(exitcode (apply #'call-process
(car command)
nil
nil
nil
(append (cdr command)
(list archive ename)))))
(or (zerop exitcode)
(error "Updating was unsuccessful (%S)" exitcode))))
(archive-delete-local tmpfile))))