]> git.eshelyaron.com Git - emacs.git/commitdiff
(code_convert_region_unwind): ARG is changed to a cons.
authorKenichi Handa <handa@m17n.org>
Thu, 14 Jul 2005 07:57:42 +0000 (07:57 +0000)
committerKenichi Handa <handa@m17n.org>
Thu, 14 Jul 2005 07:57:42 +0000 (07:57 +0000)
(code_convert_region): Adjusted for the above change.
(set_conversion_work_buffer): If the work buffer is already in
use, generate a new buffer and return it.  Otherwise return Qnil.
(run_pre_post_conversion_on_str): Adjusted for the above change.
(run_pre_write_conversin_on_c_str): Likewise.

src/ChangeLog
src/coding.c

index 83df877fd7f6cc0e71f17b57751fd622260600bf..160e667fbf86dbca593b3aa31d1a09ae5d40ade5 100644 (file)
@@ -1,3 +1,12 @@
+2005-07-14  Kenichi Handa  <handa@m17n.org>
+
+       * coding.c (code_convert_region_unwind): ARG is changed to a cons.
+       (code_convert_region): Adjusted for the above change.
+       (set_conversion_work_buffer): If the work buffer is already in
+       use, generate a new buffer and return it.  Otherwise return Qnil.
+       (run_pre_post_conversion_on_str): Adjusted for the above change.
+       (run_pre_write_conversin_on_c_str): Likewise.
+
 2005-07-13  Kim F. Storm  <storm@cua.dk>
 
        * xdisp.c (start_display): Don't reseat to next visible line start
index d74f4a93ce98b08bd329c3b67fac2b720698b8ff..a4f03c70d9670a406c1a24bb7c1c46563283ca23 100644 (file)
@@ -5353,12 +5353,17 @@ static int shrink_conversion_region_threshhold = 1024;
       }                                                                        \
   } while (0)
 
+/* ARG is (CODING . BUFFER) where CODING is what to be set in
+   Vlast_coding_system_used and BUFFER if non-nil is a buffer to
+   kill.  */
 static Lisp_Object
 code_convert_region_unwind (arg)
      Lisp_Object arg;
 {
   inhibit_pre_post_conversion = 0;
-  Vlast_coding_system_used = arg;
+  Vlast_coding_system_used = XCAR (arg);
+  if (! NILP (XCDR (arg)))
+    Fkill_buffer (XCDR (arg));
   return Qnil;
 }
 
@@ -5611,7 +5616,7 @@ code_convert_region (from, from_byte, to, to_byte, coding, encodep, replace)
       Lisp_Object new;
 
       record_unwind_protect (code_convert_region_unwind,
-                            Vlast_coding_system_used);
+                            Fcons (Vlast_coding_system_used, Qnil));
       /* We should not call any more pre-write/post-read-conversion
          functions while this pre-write-conversion is running.  */
       inhibit_pre_post_conversion = 1;
@@ -5979,7 +5984,7 @@ code_convert_region (from, from_byte, to, to_byte, coding, encodep, replace)
        TEMP_SET_PT_BOTH (from, from_byte);
       prev_Z = Z;
       record_unwind_protect (code_convert_region_unwind,
-                            Vlast_coding_system_used);
+                            Fcons (Vlast_coding_system_used, Qnil));
       saved_coding_system = Vlast_coding_system_used;
       Vlast_coding_system_used = coding->symbol;
       /* We should not call any more pre-write/post-read-conversion
@@ -6025,17 +6030,31 @@ static Lisp_Object Vcode_conversion_workbuf_name;
 
 /* Set the current buffer to the working buffer prepared for
    code-conversion.  MULTIBYTE specifies the multibyteness of the
-   buffer.  */
+   buffer.  Return the buffer we set if it must be killed after use.
+   Otherwise return Qnil.  */
 
-static struct buffer *
+static Lisp_Object
 set_conversion_work_buffer (multibyte)
      int multibyte;
 {
-  Lisp_Object buffer;
+  Lisp_Object buffer, buffer_to_kill;
   struct buffer *buf;
 
   buffer = Fget_buffer_create (Vcode_conversion_workbuf_name);
   buf = XBUFFER (buffer);
+  if (buf == current_buffer)
+    {
+      /* As we are already in the work buffer, we must generate a new
+        buffer for the work.  */
+      Lisp_Object name;
+       
+      name = Fgenerate_new_buffer_name (Vcode_conversion_workbuf_name, Qnil);
+      buffer = buffer_to_kill = Fget_buffer_create (name);
+      buf = XBUFFER (buffer);
+    }
+  else
+    buffer_to_kill = Qnil;
+
   delete_all_overlays (buf);
   buf->directory = current_buffer->directory;
   buf->read_only = Qnil;
@@ -6048,7 +6067,7 @@ set_conversion_work_buffer (multibyte)
     Fwiden ();
   del_range_2 (BEG, BEG_BYTE, Z, Z_BYTE, 0);
   buf->enable_multibyte_characters = multibyte ? Qt : Qnil;
-  return buf;
+  return buffer_to_kill;
 }
 
 Lisp_Object
@@ -6061,10 +6080,9 @@ run_pre_post_conversion_on_str (str, coding, encodep)
   struct gcpro gcpro1, gcpro2;
   int multibyte = STRING_MULTIBYTE (str);
   Lisp_Object old_deactivate_mark;
+  Lisp_Object buffer_to_kill;
 
   record_unwind_protect (Fset_buffer, Fcurrent_buffer ());
-  record_unwind_protect (code_convert_region_unwind,
-                        Vlast_coding_system_used);
   /* It is not crucial to specbind this.  */
   old_deactivate_mark = Vdeactivate_mark;
   GCPRO2 (str, old_deactivate_mark);
@@ -6072,7 +6090,9 @@ run_pre_post_conversion_on_str (str, coding, encodep)
   /* We must insert the contents of STR as is without
      unibyte<->multibyte conversion.  For that, we adjust the
      multibyteness of the working buffer to that of STR.  */
-  set_conversion_work_buffer (multibyte);
+  buffer_to_kill = set_conversion_work_buffer (multibyte);
+  record_unwind_protect (code_convert_region_unwind,
+                        Fcons (Vlast_coding_system_used, buffer_to_kill));
 
   insert_from_string (str, 0, 0,
                      SCHARS (str), SBYTES (str), 0);
@@ -6115,6 +6135,7 @@ run_pre_write_conversin_on_c_str (str, size, nchars, nbytes, coding)
   struct buffer *cur = current_buffer;
   Lisp_Object old_deactivate_mark, old_last_coding_system_used;
   Lisp_Object args[3];
+  Lisp_Object buffer_to_kill;
 
   /* It is not crucial to specbind this.  */
   old_deactivate_mark = Vdeactivate_mark;
@@ -6124,7 +6145,7 @@ run_pre_write_conversin_on_c_str (str, size, nchars, nbytes, coding)
   /* We must insert the contents of STR as is without
      unibyte<->multibyte conversion.  For that, we adjust the
      multibyteness of the working buffer to that of STR.  */
-  set_conversion_work_buffer (coding->src_multibyte);
+  buffer_to_kill = set_conversion_work_buffer (coding->src_multibyte);
   insert_1_both (*str, nchars, nbytes, 0, 0, 0);
   UNGCPRO;
   inhibit_pre_post_conversion = 1;
@@ -6148,6 +6169,8 @@ run_pre_write_conversin_on_c_str (str, size, nchars, nbytes, coding)
   coding->src_multibyte
     = ! NILP (current_buffer->enable_multibyte_characters);
   set_buffer_internal (cur);
+  if (! NILP (buffer_to_kill))
+    Fkill_buffer (buffer_to_kill);
 }