# HG changeset patch # User Aidan Kehoe # Date 1247326415 -3600 # Node ID e4ed58cb0e5b779d7ab5e2939e5a1b20b2acad93 # Parent 6c6bfdb80a0c435a323a0b489174dce5820eb87c Fix bugs with #'find-file, 0-length files, & coding-system-for-read specified. src/ChangeLog addition: 2009-07-11 Aidan Kehoe * file-coding.c (undecided_canonicalize_after_coding): If no data have been seen, or if coding_stream_canonicalize_after_coding gives nil, pass back str->codesys, which will be of type undecided (the same as the old behaviour) but will reflect any CODESYS argument passed to make_coding_input_stream. See also the change in lisp/code-files.el lisp/ChangeLog addition: 2009-07-11 Aidan Kehoe * code-files.el (insert-file-contents): Take advantage of more sensible behaviour from #'insert-file-contents-internal, allowing us to actually follow the documented coding system behaviour for nonexistent files (that is, buffer-file-coding-system reflects coding-system-for-read &c., not becoming undecided for either zero-length or nonexistent files). tests/ChangeLog addition: 2009-07-11 Aidan Kehoe * automated/mule-tests.el: Check for Richard Zidlicky's bug of http://mid.gmane.org/20090602194123.GA5163@linux-m68k.org; also check that supplying CODESYS to #'find-file is respected both for nonexistent files and zero-length existing files. diff -r 6c6bfdb80a0c -r e4ed58cb0e5b lisp/ChangeLog --- a/lisp/ChangeLog Wed Jul 01 16:42:11 2009 -0600 +++ b/lisp/ChangeLog Sat Jul 11 16:33:35 2009 +0100 @@ -1,3 +1,13 @@ +2009-07-11 Aidan Kehoe + + * code-files.el (insert-file-contents): + Take advantage of more sensible behaviour from + #'insert-file-contents-internal, allowing us to actually follow + the documented coding system behaviour for nonexistent files (that + is, buffer-file-coding-system reflects coding-system-for-read &c., + not becoming undecided for either zero-length or nonexistent + files). + 2009-06-20 It's me FKtPp ;) * files.el (cd): Do not #'split-path on nil #'getenv result; Make sure the cd-path value is a list. diff -r 6c6bfdb80a0c -r e4ed58cb0e5b lisp/code-files.el --- a/lisp/code-files.el Wed Jul 01 16:42:11 2009 -0600 +++ b/lisp/code-files.el Sat Jul 11 16:33:35 2009 +0100 @@ -449,7 +449,17 @@ (unless (zerop (buffer-size)) (warn "%s: autodetection failed: setting to default." (file-name-nondirectory (buffer-file-name)))) - (setq coding-system (default-value 'buffer-file-coding-system))) + (setq coding-system + (or + ;; If this property is available, it will be a coding + ;; system that we can use to write a file (as opposed to + ;; the true undecided coding system, which trashes + ;; non-Latin-1 on writing). It might just be the value of + ;; coding-system passed to #'insert-file-contents-internal. + (coding-system-property coding-system 'coding-system) + ;; Otherwise, take the value normally specified by the + ;; language environment: + (default-value 'buffer-file-coding-system)))) ;; call any `post-read-conversion' for the coding system that ;; was used ... (let ((func diff -r 6c6bfdb80a0c -r e4ed58cb0e5b src/ChangeLog --- a/src/ChangeLog Wed Jul 01 16:42:11 2009 -0600 +++ b/src/ChangeLog Sat Jul 11 16:33:35 2009 +0100 @@ -1,3 +1,12 @@ +2009-07-11 Aidan Kehoe + + * file-coding.c (undecided_canonicalize_after_coding): + If no data have been seen, or if + coding_stream_canonicalize_after_coding gives nil, pass back + str->codesys, which will be of type undecided (the same as the old + behaviour) but will reflect any CODESYS argument passed to + make_coding_input_stream. See also the change in lisp/code-files.el + 2009-06-09 Jerry James * glyphs-eimage.c (jpeg_instantiate): diff -r 6c6bfdb80a0c -r e4ed58cb0e5b src/file-coding.c --- a/src/file-coding.c Wed Jul 01 16:42:11 2009 -0600 +++ b/src/file-coding.c Sat Jul 11 16:33:35 2009 +0100 @@ -4078,12 +4078,12 @@ return str->codesys; if (!data->c.initted) - return Fget_coding_system (Qundecided); + return str->codesys; ret = coding_stream_canonicalize_after_coding (XLSTREAM (data->c.lstreams[0])); if (NILP (ret)) - ret = Fget_coding_system (Qundecided); + ret = str->codesys; if (XCODING_SYSTEM_EOL_TYPE (ret) != EOL_AUTODETECT) return ret; eolret = coding_stream_canonicalize_after_coding diff -r 6c6bfdb80a0c -r e4ed58cb0e5b tests/ChangeLog --- a/tests/ChangeLog Wed Jul 01 16:42:11 2009 -0600 +++ b/tests/ChangeLog Sat Jul 11 16:33:35 2009 +0100 @@ -1,3 +1,11 @@ +2009-07-11 Aidan Kehoe + + * automated/mule-tests.el: + Check for Richard Zidlicky's bug of + http://mid.gmane.org/20090602194123.GA5163@linux-m68k.org; also + check that supplying CODESYS to #'find-file is respected both for + nonexistent files and zero-length existing files. + 2009-05-18 Stephen J. Turnbull * XEmacs 21.5.29 "garbanzo" is released. diff -r 6c6bfdb80a0c -r e4ed58cb0e5b tests/automated/mule-tests.el --- a/tests/automated/mule-tests.el Wed Jul 01 16:42:11 2009 -0600 +++ b/tests/automated/mule-tests.el Sat Jul 11 16:33:35 2009 +0100 @@ -141,6 +141,26 @@ (kill-buffer nil)) (delete-file test-file-name)) +(let ((existing-file-name + (make-temp-file (expand-file-name "k7lCS2Mg" (temp-directory)))) + (nonexistent-file-name + (make-temp-name (temp-directory)))) + (find-file existing-file-name) + (Assert (not (eq 'undecided + (coding-system-type buffer-file-coding-system)))) + (kill-buffer nil) + (dolist (coding-system '(utf-8 windows-1251 macintosh big5)) + (when (find-coding-system coding-system) + (find-file existing-file-name coding-system) + (Assert (eq (find-coding-system coding-system) + buffer-file-coding-system)) + (kill-buffer nil) + (find-file nonexistent-file-name coding-system) + (Assert (eq (find-coding-system coding-system) + buffer-file-coding-system)) + (kill-buffer nil))) + (delete-file existing-file-name)) + ;;----------------------------------------------------------------- ;; Test string modification functions that modify the length of a char. ;;-----------------------------------------------------------------