changeset 89418:a9c2b3712863

(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.
author Kenichi Handa <handa@m17n.org>
date Tue, 06 May 2003 08:16:37 +0000
parents 56c80a95cb5b
children 18e57407a82b
files src/coding.c
diffstat 1 files changed, 8 insertions(+), 13 deletions(-) [+]
line wrap: on
line diff
--- a/src/coding.c	Sun May 04 15:46:26 2003 +0000
+++ b/src/coding.c	Tue May 06 08:16:37 2003 +0000
@@ -899,18 +899,12 @@
 {
   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 @@
    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 @@
     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;