1
Fork 0
mirror of git://git.sv.gnu.org/emacs.git synced 2026-01-04 11:00:45 -08:00

(decode_eol): Pay attention to buffer relocation in

del_range_2.
(decode_coding): Call decode_eol before restoring undo_list.
This commit is contained in:
Kenichi Handa 2006-04-07 05:26:46 +00:00
parent e6335dc16c
commit 4347441b23

View file

@ -5623,6 +5623,8 @@ decode_eol (coding)
if (NILP (coding->dst_object)) if (NILP (coding->dst_object))
{ {
/* Start deleting '\r' from the tail to minimize the memory
movement. */
for (p = pend - 2; p >= pbeg; p--) for (p = pend - 2; p >= pbeg; p--)
if (*p == '\r') if (*p == '\r')
{ {
@ -5632,15 +5634,22 @@ decode_eol (coding)
} }
else else
{ {
for (p = pend - 2; p >= pbeg; p--) int pos_byte = coding->dst_pos_byte;
if (*p == '\r') int pos = coding->dst_pos;
{ int pos_end = pos + coding->produced_char - 1;
int pos_byte = coding->dst_pos_byte + (p - pbeg);
int pos = BYTE_TO_CHAR (pos_byte); while (pos < pos_end)
{
del_range_2 (pos, pos_byte, pos + 1, pos_byte + 1, 0); p = BYTE_POS_ADDR (pos_byte);
n++; if (*p == '\r' && p[1] == '\n')
} {
del_range_2 (pos, pos_byte, pos + 1, pos_byte + 1, 0);
n++;
pos_end--;
}
pos++;
pos_byte += BYTES_BY_CHAR_HEAD (*p);
}
} }
coding->produced -= n; coding->produced -= n;
coding->produced_char -= n; coding->produced_char -= n;
@ -6258,13 +6267,13 @@ decode_coding (coding)
coding->consumed = coding->src_bytes; coding->consumed = coding->src_bytes;
} }
if (! EQ (CODING_ID_EOL_TYPE (coding->id), Qunix))
decode_eol (coding);
if (BUFFERP (coding->dst_object)) if (BUFFERP (coding->dst_object))
{ {
current_buffer->undo_list = undo_list; current_buffer->undo_list = undo_list;
record_insert (coding->dst_pos, coding->produced_char); record_insert (coding->dst_pos, coding->produced_char);
} }
if (! EQ (CODING_ID_EOL_TYPE (coding->id), Qunix))
decode_eol (coding);
return coding->result; return coding->result;
} }