emacs-diffs
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

[Emacs-diffs] Changes to emacs/src/coding.c


From: Kenichi Handa
Subject: [Emacs-diffs] Changes to emacs/src/coding.c
Date: Wed, 14 Sep 2005 03:05:44 -0400

Index: emacs/src/coding.c
diff -c emacs/src/coding.c:1.324 emacs/src/coding.c:1.325
*** emacs/src/coding.c:1.324    Sun Aug  7 12:33:16 2005
--- emacs/src/coding.c  Wed Sep 14 07:05:43 2005
***************
*** 5353,5360 ****
        }                                                                       
\
    } 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)
--- 5353,5360 ----
        }                                                                       
\
    } while (0)
  
! /* ARG is (CODING BUFFER ...) where CODING is what to be set in
!    Vlast_coding_system_used and the remaining elements are buffers to
     kill.  */
  static Lisp_Object
  code_convert_region_unwind (arg)
***************
*** 5362,5369 ****
  {
    inhibit_pre_post_conversion = 0;
    Vlast_coding_system_used = XCAR (arg);
!   if (! NILP (XCDR (arg)))
!     Fkill_buffer (XCDR (arg));
    return Qnil;
  }
  
--- 5362,5369 ----
  {
    inhibit_pre_post_conversion = 0;
    Vlast_coding_system_used = XCAR (arg);
!   for (arg = XCDR (arg); ! NILP (arg); arg = XCDR (arg))
!     Fkill_buffer (XCAR (arg));
    return Qnil;
  }
  
***************
*** 6081,6086 ****
--- 6081,6087 ----
    int multibyte = STRING_MULTIBYTE (str);
    Lisp_Object old_deactivate_mark;
    Lisp_Object buffer_to_kill;
+   Lisp_Object unwind_arg;
  
    record_unwind_protect (Fset_buffer, Fcurrent_buffer ());
    /* It is not crucial to specbind this.  */
***************
*** 6091,6105 ****
       unibyte<->multibyte conversion.  For that, we adjust the
       multibyteness of the working buffer to that of STR.  */
    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);
    UNGCPRO;
    inhibit_pre_post_conversion = 1;
    if (encodep)
!     call2 (coding->pre_write_conversion, make_number (BEG), make_number (Z));
    else
      {
        Vlast_coding_system_used = coding->symbol;
--- 6092,6116 ----
       unibyte<->multibyte conversion.  For that, we adjust the
       multibyteness of the working buffer to that of STR.  */
    buffer_to_kill = set_conversion_work_buffer (multibyte);
!   if (NILP (buffer_to_kill))
!     unwind_arg = Fcons (Vlast_coding_system_used, Qnil);
!   else
!     unwind_arg = list2 (Vlast_coding_system_used, buffer_to_kill);
!   record_unwind_protect (code_convert_region_unwind, unwind_arg);
  
    insert_from_string (str, 0, 0,
                      SCHARS (str), SBYTES (str), 0);
    UNGCPRO;
    inhibit_pre_post_conversion = 1;
    if (encodep)
!     {
!       struct buffer *prev = current_buffer;
! 
!       call2 (coding->pre_write_conversion, make_number (BEG), make_number 
(Z));
!       if (prev != current_buffer)
!       /* We must kill the current buffer too.  */
!       Fsetcdr (unwind_arg, Fcons (Fcurrent_buffer (), XCDR (unwind_arg)));
!     }
    else
      {
        Vlast_coding_system_used = coding->symbol;
***************
*** 6133,6138 ****
--- 6144,6150 ----
  {
    struct gcpro gcpro1, gcpro2;
    struct buffer *cur = current_buffer;
+   struct buffer *prev;
    Lisp_Object old_deactivate_mark, old_last_coding_system_used;
    Lisp_Object args[3];
    Lisp_Object buffer_to_kill;
***************
*** 6149,6154 ****
--- 6161,6167 ----
    insert_1_both (*str, nchars, nbytes, 0, 0, 0);
    UNGCPRO;
    inhibit_pre_post_conversion = 1;
+   prev = current_buffer;
    args[0] = coding->pre_write_conversion;
    args[1] = make_number (BEG);
    args[2] = make_number (Z);
***************
*** 6168,6173 ****
--- 6181,6188 ----
    bcopy (BEG_ADDR, *str, coding->produced);
    coding->src_multibyte
      = ! NILP (current_buffer->enable_multibyte_characters);
+   if (prev != current_buffer)
+     Fkill_buffer (Fcurrent_buffer ());
    set_buffer_internal (cur);
    if (! NILP (buffer_to_kill))
      Fkill_buffer (buffer_to_kill);




reply via email to

[Prev in Thread] Current Thread [Next in Thread]