Revision: emacs@sv.gnu.org/gnus--devo--0--patch-74
[gnus] / lisp / mm-util.el
index 395c4db..802ad86 100644 (file)
@@ -164,7 +164,7 @@ system object in XEmacs."
     (if (fboundp 'coding-system-p)
        (when (coding-system-p cs)
          cs)
-      ;; Is this branch ever actually useful?
+      ;; no-MULE XEmacs:
       (car (memq cs (mm-get-coding-system-list))))))
 
 (defun mm-codepage-setup (number &optional alias)
@@ -229,7 +229,7 @@ the alias.  Else windows-NUMBER is used."
   `((iso-8859-1 . windows-1252))
   "A mapping from undesired charset names to their replacement.
 
-You may add pair like (iso-8859-1 . windows-1252) here,
+You may add pairs like (iso-8859-1 . windows-1252) here,
 i.e. treat iso-8859-1 as windows-1252.  windows-1252 is a
 superset of iso-8859-1."
   :type '(list (set :inline t
@@ -397,7 +397,7 @@ with Mule charsets.  It is completely useless for Emacs."
          cs mime mule alist)
       (while css
        (setq cs (pop css)
-             mime (or (coding-system-get cs :mime-charset) ; Emacs 22
+             mime (or (coding-system-get cs :mime-charset) ; Emacs 23 (unicode)
                       (coding-system-get cs 'mime-charset)))
        (when (and mime
                   (not (eq t (setq mule
@@ -893,11 +893,18 @@ Use multibyte mode for this."
 (defmacro mm-with-unibyte-current-buffer (&rest forms)
   "Evaluate FORMS with current buffer temporarily made unibyte.
 Also bind `default-enable-multibyte-characters' to nil.
-Equivalent to `progn' in XEmacs"
+Equivalent to `progn' in XEmacs
+
+NOTE: Use this macro with caution in multibyte buffers (it is not
+worth using this macro in unibyte buffers of course).  Use of
+`(set-buffer-multibyte t)', which is run finally, is generally
+harmful since it is likely to modify existing data in the buffer.
+For instance, it converts \"\\300\\255\" into \"\\255\" in
+Emacs 23 (unicode)."
   (let ((multibyte (make-symbol "multibyte"))
        (buffer (make-symbol "buffer")))
     `(if mm-emacs-mule
-        (let ((,multibyte enable-multibyte-characters)
+        (let ((,multibyte enable-multibyte-characters)
               (,buffer (current-buffer)))
           (unwind-protect
               (let (default-enable-multibyte-characters)
@@ -1074,7 +1081,7 @@ If SUFFIX is non-nil, add that at the end of the file name."
            ;; loosen them later, whereas it's impossible to close the
            ;; time-window of loose permissions otherwise.
            (set-default-file-modes 448)
-           (while (condition-case ()
+           (while (condition-case err
                       (progn
                         (setq file
                               (make-temp-name
@@ -1089,8 +1096,8 @@ If SUFFIX is non-nil, add that at the end of the file name."
                         (if dir-flag
                             (make-directory file)
                           (if (featurep 'xemacs)
-                              ;; NOTE: This is unsafe if an XEmacs user
-                              ;; doesn't use a secure temp directory.
+                              ;; NOTE: This is unsafe if XEmacs users
+                              ;; don't use a secure temp directory.
                               (if (file-exists-p file)
                                   (signal 'file-already-exists
                                           (list "File exists" file))
@@ -1099,8 +1106,11 @@ If SUFFIX is non-nil, add that at the end of the file name."
                                           nil 'excl)))
                         nil)
                     (file-already-exists t)
-                    ;; The XEmacs version of `make-directory' issues it.
-                    (file-error t))
+                    ;; The XEmacs version of `make-directory' issues
+                    ;; `file-error'.
+                    (file-error (or (and (featurep 'xemacs)
+                                         (file-exists-p file))
+                                    (signal (car err) (cdr err)))))
              ;; the file was somehow created by someone else between
              ;; `make-temp-name' and `write-region', let's try again.
              nil)