# HG changeset patch # User Gerd Moellmann # Date 999081111 0 # Node ID f3d3950ed951cac444ed07d73559df1ba34f55df # Parent 47ac337b9bdebd014b9104bf540781ce3e2b7c5a (Finsert_file_contents): Undo change of 2001-08-27. diff -r 47ac337b9bde -r f3d3950ed951 src/fileio.c --- a/src/fileio.c Wed Aug 29 09:31:50 2001 +0000 +++ b/src/fileio.c Wed Aug 29 10:31:51 2001 +0000 @@ -4350,10 +4350,21 @@ || coding.type == coding_type_raw_text)) { /* Visiting a file with these coding systems should always make - the buffer unibyte. The call to Fset_buffer_multibyte - ensures that existing markers etc are converted to unibyte, - too. */ - Fset_buffer_multibyte (Qnil); + the buffer unibyte. If we happen to be replacing text in a + multibyte buffer (this happens when reverting an RMAIL + buffer), positions in the buffer, markers etc. may have byte + positions != character positions, so just setting + enable_multibyte_characters to nil doesn't suffice. */ + if (!NILP (replace) + && !NILP (current_buffer->enable_multibyte_characters)) + Fset_buffer_multibyte (Qnil); + else + /* We cannot Fset_buffer_multibyte(nil) here. When we visit a + file literally in a multibyte buffer, a call to + Fset_buffer_multibyte would change character positions, + although the buffer has unibyte contents, and that's wrong, + of course. */ + current_buffer->enable_multibyte_characters = Qnil; coding.dst_multibyte = 0; }