Fix the ccl decoder for the case that the output buffer is fullfilled.
[bpt/emacs.git] / src / ccl.c
index 6fc6f29..c5523c2 100644 (file)
--- a/src/ccl.c
+++ b/src/ccl.c
@@ -1,8 +1,8 @@
 /* CCL (Code Conversion Language) interpreter.
    Copyright (C) 2001, 2002, 2003, 2004, 2005,
-                 2006, 2007, 2008 Free Software Foundation, Inc.
+                 2006, 2007, 2008, 2009, 2010 Free Software Foundation, Inc.
    Copyright (C) 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002, 2003, 2004,
-     2005, 2006, 2007, 2008
+     2005, 2006, 2007, 2008, 2009, 2010
      National Institute of Advanced Industrial Science and Technology (AIST)
      Registration Number H14PRO021
    Copyright (C) 2003
 
 This file is part of GNU Emacs.
 
-GNU Emacs is free software; you can redistribute it and/or modify
+GNU Emacs is free software: you can redistribute it and/or modify
 it under the terms of the GNU General Public License as published by
-the Free Software Foundation; either version 3, or (at your option)
-any later version.
+the Free Software Foundation, either version 3 of the License, or
+(at your option) any later version.
 
 GNU Emacs is distributed in the hope that it will be useful,
 but WITHOUT ANY WARRANTY; without even the implied warranty of
@@ -22,13 +22,12 @@ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
 GNU General Public License for more details.
 
 You should have received a copy of the GNU General Public License
-along with GNU Emacs; see the file COPYING.  If not, write to
-the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
-Boston, MA 02110-1301, USA.  */
+along with GNU Emacs.  If not, see <http://www.gnu.org/licenses/>.  */
 
 #include <config.h>
 
 #include <stdio.h>
+#include <setjmp.h>
 
 #include "lisp.h"
 #include "character.h"
@@ -44,7 +43,7 @@ Lisp_Object Vcode_conversion_map_vector;
 /* Alist of fontname patterns vs corresponding CCL program.  */
 Lisp_Object Vfont_ccl_encoder_alist;
 
-/* This symbol is a property which assocates with ccl program vector.
+/* This symbol is a property which associates with ccl program vector.
    Ex: (get 'ccl-big5-encoder 'ccl-program) returns ccl program vector.  */
 Lisp_Object Qccl_program;
 
@@ -884,9 +883,6 @@ ccl_driver (ccl, source, destination, src_size, dst_size, charset_list)
   int eof_ic = ccl->eof_ic;
   int eof_hit = 0;
 
-  if (ic >= eof_ic)
-    ic = CCL_HEADER_MAIN;
-
   if (ccl->buf_magnification == 0) /* We can't read/produce any bytes.  */
     dst = NULL;
 
@@ -1745,7 +1741,8 @@ ccl_driver (ccl, source, destination, src_size, dst_size, charset_list)
          break;
 
        case CCL_STAT_QUIT:
-         sprintf(msg, "\nCCL: Quited.");
+         if (! ccl->quit_silently)
+           sprintf(msg, "\nCCL: Quited.");
          break;
 
        default:
@@ -1948,6 +1945,7 @@ setup_ccl_program (ccl, ccl_prog)
   ccl->stack_idx = 0;
   ccl->suppress_error = 0;
   ccl->eight_bit_control = 0;
+  ccl->quit_silently = 0;
   return 0;
 }
 
@@ -2322,22 +2320,22 @@ syms_of_ccl ()
   staticpro (&Vccl_program_table);
   Vccl_program_table = Fmake_vector (make_number (32), Qnil);
 
-  Qccl = intern ("ccl");
+  Qccl = intern_c_string ("ccl");
   staticpro (&Qccl);
 
-  Qcclp = intern ("cclp");
+  Qcclp = intern_c_string ("cclp");
   staticpro (&Qcclp);
 
-  Qccl_program = intern ("ccl-program");
+  Qccl_program = intern_c_string ("ccl-program");
   staticpro (&Qccl_program);
 
-  Qccl_program_idx = intern ("ccl-program-idx");
+  Qccl_program_idx = intern_c_string ("ccl-program-idx");
   staticpro (&Qccl_program_idx);
 
-  Qcode_conversion_map = intern ("code-conversion-map");
+  Qcode_conversion_map = intern_c_string ("code-conversion-map");
   staticpro (&Qcode_conversion_map);
 
-  Qcode_conversion_map_id = intern ("code-conversion-map-id");
+  Qcode_conversion_map_id = intern_c_string ("code-conversion-map-id");
   staticpro (&Qcode_conversion_map_id);
 
   DEFVAR_LISP ("code-conversion-map-vector", &Vcode_conversion_map_vector,