From: Mark Lillibridge Date: Mon, 7 Nov 2011 02:52:29 +0000 (+0800) Subject: Fix rmail-mbox handling of terminating newlines. X-Git-Tag: emacs-pretest-24.0.92~121^2~36 X-Git-Url: http://git.eshelyaron.com/gitweb/?a=commitdiff_plain;h=3c6702ef8a797bff39c6e1e4440efab84ca3b8cf;p=emacs.git Fix rmail-mbox handling of terminating newlines. * lisp/mail/rmail.el (rmail-get-new-mail, rmail-insert-inbox-text): Ensure that mbox format messages end in two newlines. Fixes: debbugs:9974 --- diff --git a/lisp/ChangeLog b/lisp/ChangeLog index 6cc9cc86515..e0716bea83f 100644 --- a/lisp/ChangeLog +++ b/lisp/ChangeLog @@ -1,3 +1,8 @@ +2011-11-07 Mark Lillibridge (tiny change) + + * mail/rmail.el (rmail-get-new-mail, rmail-insert-inbox-text): + Ensure that mbox format messages end in two newlines (Bug#9974). + 2011-11-06 Chong Yidong * window.el (window-combination-p): Function deleted; its diff --git a/lisp/mail/rmail.el b/lisp/mail/rmail.el index a535d3a86db..4b3441a8cdc 100644 --- a/lisp/mail/rmail.el +++ b/lisp/mail/rmail.el @@ -1721,10 +1721,12 @@ not be a new one). It returns non-nil if it got any new messages." (setq all-files (cdr all-files))) ;; Put them back in their original order. (setq files (nreverse files)) - ;; In case of brain damage caused by require-final-newline. (goto-char (point-max)) - (skip-chars-backward " \t\n") - (delete-region (point) (point-max)) + ;; Make sure we end with a blank line unless there are + ;; no messages, as required by mbox format (Bug#9974). + (unless (bobp) + (while (not (looking-back "\n\n")) + (insert "\n"))) (setq found (or (rmail-get-new-mail-1 file-name files delete-files) found)))) @@ -2024,22 +2026,12 @@ Value is the size of the newly read mail after conversion." (rmail-unrmail-new-mail-maybe tofile (nth 1 (insert-file-contents tofile)))) - ;; Determine if a pair of newline message separators need - ;; to be added to the new collection of messages. This is - ;; the case for all new message collections added to a - ;; non-empty mail file. - (unless (zerop size) - (save-restriction - (let ((start (point-min))) - (widen) - (unless (eq start (point-min)) - (goto-char start) - (insert "\n\n") - (setq size (+ 2 size)))))) (goto-char (point-max)) - (or (= (preceding-char) ?\n) - (zerop size) - (insert ?\n)) + ;; Make sure the read-in mbox data properly ends with a + ;; blank line unless it is of size 0. + (unless (zerop size) + (while (not (looking-back "\n\n")) + (insert "\n"))) (if (not (and rmail-preserve-inbox (string= file tofile))) (setq delete-files (cons tofile delete-files))))) (message "")