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))))