From: Kenichi Handa Date: Tue, 6 May 2003 08:16:37 +0000 (+0000) Subject: (coding_set_source): Fix for the case that the current X-Git-Tag: emacs-pretest-23.0.90~8295^2~1864^2~55 X-Git-Url: http://git.eshelyaron.com/gitweb/?a=commitdiff_plain;h=2cb260576168c54f9e6a475f3cc5d48c1bfa6444;p=emacs.git (coding_set_source): Fix for the case that the current buffer is different from coding->src_object. (decode_coding_object): Don't use the conversion work buffer if DST_OBJECT is a buffer. --- diff --git a/src/coding.c b/src/coding.c index 3869550a97e..0099c68a812 100644 --- a/src/coding.c +++ b/src/coding.c @@ -899,18 +899,12 @@ coding_set_source (coding) { if (BUFFERP (coding->src_object)) { + struct buffer *buf = XBUFFER (coding->src_object); + if (coding->src_pos < 0) - coding->source = GAP_END_ADDR + coding->src_pos_byte; + coding->source = BUF_GAP_END_ADDR (buf) + coding->src_pos_byte; else - { - struct buffer *buf = XBUFFER (coding->src_object); - EMACS_INT gpt_byte = BUF_GPT_BYTE (buf); - unsigned char *beg_addr = BUF_BEG_ADDR (buf); - - coding->source = beg_addr + coding->src_pos_byte - 1; - if (coding->src_pos_byte >= gpt_byte) - coding->source += BUF_GAP_SIZE (buf); - } + coding->source = BUF_BYTE_ADDRESS (buf, coding->src_pos_byte); } else if (STRINGP (coding->src_object)) { @@ -6231,7 +6225,7 @@ encode_coding_gap (coding, chars, bytes) set in CODING->dst_object. If it is Qnil, the decoded text is stored at CODING->destination. - The called must allocate CODING->dst_bytes bytes at + The caller must allocate CODING->dst_bytes bytes at CODING->destination by xmalloc. If the decoded text is longer than CODING->dst_bytes, CODING->destination is relocated by xrealloc. */ @@ -6293,8 +6287,9 @@ decode_coding_object (coding, src_object, from, from_byte, to, to_byte, detect_coding (coding); attrs = CODING_ID_ATTRS (coding->id); - if (! NILP (CODING_ATTR_POST_READ (attrs)) - || EQ (dst_object, Qt)) + if (EQ (dst_object, Qt) + || (! NILP (CODING_ATTR_POST_READ (attrs)) + && NILP (dst_object))) { coding->dst_object = make_conversion_work_buffer (1); coding->dst_pos = BEG;