Merge from emacs--rel--22
[bpt/emacs.git] / lisp / international / mule-cmds.el
index d61e1f3..ca76d4f 100644 (file)
@@ -2619,14 +2619,24 @@ See also `locale-charset-language-names', `locale-language-names',
          (setq locale-coding-system coding-system))))
 
     ;; On Windows, override locale-coding-system,
-    ;; keyboard-coding-system with system codepage.  Note:
-    ;; selection-coding-system is already set in w32select.c.
+    ;; default-file-name-coding-system, keyboard-coding-system,
+    ;; terminal-coding-system with system codepage.
     (when (boundp 'w32-ansi-code-page)
       (let ((code-page-coding (intern (format "cp%d" w32-ansi-code-page))))
        (when (coding-system-p code-page-coding)
          (unless frame (setq locale-coding-system code-page-coding))
          (set-keyboard-coding-system code-page-coding frame)
-         (set-terminal-coding-system code-page-coding frame))))
+         (set-terminal-coding-system code-page-coding frame)
+         ;; Set default-file-name-coding-system last, so that Emacs
+         ;; doesn't try to use cpNNNN when it defines keyboard and
+         ;; terminal encoding.  That's because the above two lines
+         ;; will want to load code-pages.el, where cpNNNN are
+         ;; defined; if default-file-name-coding-system were set to
+         ;; cpNNNN while these two lines run, Emacs will want to use
+         ;; it for encoding the file name it wants to load.  And that
+         ;; will fail, since cpNNNN is not yet usable until
+         ;; code-pages.el finishes loading.
+         (setq default-file-name-coding-system code-page-coding))))
 
     (when (eq system-type 'darwin)
       ;; On Darwin, file names are always encoded in utf-8, no matter