changeset 4647:e4ed58cb0e5b

Fix bugs with #'find-file, 0-length files, & coding-system-for-read specified. src/ChangeLog addition: 2009-07-11 Aidan Kehoe <kehoea@parhasard.net> * 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 <kehoea@parhasard.net> * 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 <kehoea@parhasard.net> * 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.
author Aidan Kehoe <kehoea@parhasard.net>
date Sat, 11 Jul 2009 16:33:35 +0100
parents 6c6bfdb80a0c
children 907697569a49
files lisp/ChangeLog lisp/code-files.el src/ChangeLog src/file-coding.c tests/ChangeLog tests/automated/mule-tests.el
diffstat 6 files changed, 60 insertions(+), 3 deletions(-) [+]
line wrap: on
line diff
--- 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  <kehoea@parhasard.net>
+
+	* 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 ;)  <m_pupil@yahoo.com.cn>
 	* files.el (cd): Do not #'split-path on nil #'getenv result; Make
 	sure the cd-path value is a list.
--- 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
--- 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  <kehoea@parhasard.net>
+
+	* 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  <james@xemacs.org>
 
 	* glyphs-eimage.c (jpeg_instantiate):
--- 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
--- 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  <kehoea@parhasard.net>
+
+	* 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  <stephen@xemacs.org>
 
 	* XEmacs 21.5.29 "garbanzo" is released.
--- 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.
 ;;-----------------------------------------------------------------