1
Fork 0
mirror of git://git.sv.gnu.org/emacs.git synced 2025-12-25 23:10:47 -08:00

(coding_set_destination): Fix coding->destination for

the case converting a region.
(encode_coding_utf_8): Encode eight-bit chars as single byte.
(encode_coding_object): Fix coding->dst_pos and
coding->dst_pos_byte for the case converting a region.
This commit is contained in:
Kenichi Handa 2002-08-21 12:53:56 +00:00
parent c35e36cc94
commit 28f67a95f7

View file

@ -924,18 +924,23 @@ coding_set_destination (coding)
{
if (BUFFERP (coding->dst_object))
{
/* We are sure that coding->dst_pos_byte is before the gap of the
buffer. */
coding->destination = (BUF_BEG_ADDR (XBUFFER (coding->dst_object))
+ coding->dst_pos_byte - 1);
if (coding->src_pos < 0)
{
coding->destination = BEG_ADDR + coding->dst_pos_byte - 1;
coding->dst_bytes = (GAP_END_ADDR
- (coding->src_bytes - coding->consumed)
- coding->destination);
}
else
{
/* We are sure that coding->dst_pos_byte is before the gap
of the buffer. */
coding->destination = (BUF_BEG_ADDR (XBUFFER (coding->dst_object))
+ coding->dst_pos_byte - 1);
coding->dst_bytes = (BUF_GAP_END_ADDR (XBUFFER (coding->dst_object))
- coding->destination);
}
}
else
/* Otherwise, the destination is C string and is never relocated
automatically. Thus we don't have to update anything. */
@ -1223,11 +1228,19 @@ encode_coding_utf_8 (coding)
ASSURE_DESTINATION (safe_room);
c = *charbuf++;
if (CHAR_BYTE8_P (c))
{
c = CHAR_TO_BYTE8 (c);
EMIT_ONE_BYTE (c);
}
else
{
CHAR_STRING_ADVANCE (c, pend);
for (p = str; p < pend; p++)
EMIT_ONE_BYTE (*p);
}
}
}
else
{
int safe_room = MAX_MULTIBYTE_LENGTH;
@ -6115,8 +6128,16 @@ encode_coding_object (coding, src_object, from, from_byte, to, to_byte,
if (BUFFERP (dst_object))
{
coding->dst_object = dst_object;
if (EQ (src_object, dst_object))
{
coding->dst_pos = from;
coding->dst_pos_byte = from_byte;
}
else
{
coding->dst_pos = BUF_PT (XBUFFER (dst_object));
coding->dst_pos_byte = BUF_PT_BYTE (XBUFFER (dst_object));
}
coding->dst_multibyte
= ! NILP (XBUFFER (dst_object)->enable_multibyte_characters);
}