changeset 24263:e81f007b15fa

(encode_terminal_code): Fix previous change.
author Kenichi Handa <handa@m17n.org>
date Fri, 05 Feb 1999 05:40:27 +0000
parents 1c515a6c0686
children ffc2b7069315
files src/term.c
diffstat 1 files changed, 15 insertions(+), 9 deletions(-) [+]
line wrap: on
line diff
--- a/src/term.c	Fri Feb 05 05:39:58 1999 +0000
+++ b/src/term.c	Fri Feb 05 05:40:27 1999 +0000
@@ -815,6 +815,7 @@
   int len;
   register int tlen = GLYPH_TABLE_LENGTH;
   register Lisp_Object *tbase = GLYPH_TABLE_BASE;
+  int result;
   struct coding_system *coding;
 
   coding = (CODING_REQUIRE_ENCODING (&terminal_coding)
@@ -857,19 +858,24 @@
 	      buf = GLYPH_STRING (tbase, g);
 	    }
 	  
-	  encode_coding (coding, buf, dst, len, dst_end - dst);
+	  result = encode_coding (coding, buf, dst, len, dst_end - dst);
 	  len -= coding->consumed;
 	  dst += coding->produced;
+	  if (result == CODING_FINISH_INSUFFICIENT_DST
+	      || (result == CODING_FINISH_INSUFFICIENT_SRC
+		  && len > dst_end - dst))
+	    /* The remaining output buffer is too short.  We must
+	       break the loop here without increasing SRC so that the
+	       next call of this function starts from the same glyph.  */
+	    break;
+
 	  if (len > 0)
 	    {
-	      if (len > dst_end - dst)
-		/* The remaining output buffer is too short.  We must
-		   break the loop here without increasing SRC so that
-		   the next call of this function start from the same
-		   glyph.  */
-		break;
-	      buf += len;
-	      while (len--) *dst++ = *buf++;
+	      /* This is the case that a code of the range 0200..0237
+		 exists in buf.  We must just write out such a code.  */
+	      buf += coding->consumed;
+	      while (len--)
+		*dst++ = *buf++;
 	    }
 	}
       src++;