diff options
Diffstat (limited to 'src/coding.c')
| -rw-r--r-- | src/coding.c | 21 |
1 files changed, 21 insertions, 0 deletions
diff --git a/src/coding.c b/src/coding.c index a8ddc817565..b82d4f5cda9 100644 --- a/src/coding.c +++ b/src/coding.c | |||
| @@ -7851,6 +7851,15 @@ code_conversion_save (bool with_work_buf, bool multibyte) | |||
| 7851 | return workbuf; | 7851 | return workbuf; |
| 7852 | } | 7852 | } |
| 7853 | 7853 | ||
| 7854 | static void | ||
| 7855 | coding_restore_undo_list (Lisp_Object arg) | ||
| 7856 | { | ||
| 7857 | Lisp_Object undo_list = XCAR (arg); | ||
| 7858 | struct buffer *buf = XBUFFER (XCDR (arg)); | ||
| 7859 | |||
| 7860 | bset_undo_list (buf, undo_list); | ||
| 7861 | } | ||
| 7862 | |||
| 7854 | void | 7863 | void |
| 7855 | decode_coding_gap (struct coding_system *coding, | 7864 | decode_coding_gap (struct coding_system *coding, |
| 7856 | ptrdiff_t chars, ptrdiff_t bytes) | 7865 | ptrdiff_t chars, ptrdiff_t bytes) |
| @@ -7963,13 +7972,19 @@ decode_coding_gap (struct coding_system *coding, | |||
| 7963 | { | 7972 | { |
| 7964 | ptrdiff_t prev_Z = Z, prev_Z_BYTE = Z_BYTE; | 7973 | ptrdiff_t prev_Z = Z, prev_Z_BYTE = Z_BYTE; |
| 7965 | Lisp_Object val; | 7974 | Lisp_Object val; |
| 7975 | Lisp_Object undo_list = BVAR (current_buffer, undo_list); | ||
| 7976 | ptrdiff_t count1 = SPECPDL_INDEX (); | ||
| 7966 | 7977 | ||
| 7978 | record_unwind_protect (coding_restore_undo_list, | ||
| 7979 | Fcons (undo_list, Fcurrent_buffer ())); | ||
| 7980 | bset_undo_list (current_buffer, Qt); | ||
| 7967 | TEMP_SET_PT_BOTH (coding->dst_pos, coding->dst_pos_byte); | 7981 | TEMP_SET_PT_BOTH (coding->dst_pos, coding->dst_pos_byte); |
| 7968 | val = call1 (CODING_ATTR_POST_READ (attrs), | 7982 | val = call1 (CODING_ATTR_POST_READ (attrs), |
| 7969 | make_number (coding->produced_char)); | 7983 | make_number (coding->produced_char)); |
| 7970 | CHECK_NATNUM (val); | 7984 | CHECK_NATNUM (val); |
| 7971 | coding->produced_char += Z - prev_Z; | 7985 | coding->produced_char += Z - prev_Z; |
| 7972 | coding->produced += Z_BYTE - prev_Z_BYTE; | 7986 | coding->produced += Z_BYTE - prev_Z_BYTE; |
| 7987 | unbind_to (count1, Qnil); | ||
| 7973 | } | 7988 | } |
| 7974 | 7989 | ||
| 7975 | unbind_to (count, Qnil); | 7990 | unbind_to (count, Qnil); |
| @@ -8110,13 +8125,19 @@ decode_coding_object (struct coding_system *coding, | |||
| 8110 | { | 8125 | { |
| 8111 | ptrdiff_t prev_Z = Z, prev_Z_BYTE = Z_BYTE; | 8126 | ptrdiff_t prev_Z = Z, prev_Z_BYTE = Z_BYTE; |
| 8112 | Lisp_Object val; | 8127 | Lisp_Object val; |
| 8128 | Lisp_Object undo_list = BVAR (current_buffer, undo_list); | ||
| 8129 | ptrdiff_t count1 = SPECPDL_INDEX (); | ||
| 8113 | 8130 | ||
| 8131 | record_unwind_protect (coding_restore_undo_list, | ||
| 8132 | Fcons (undo_list, Fcurrent_buffer ())); | ||
| 8133 | bset_undo_list (current_buffer, Qt); | ||
| 8114 | TEMP_SET_PT_BOTH (coding->dst_pos, coding->dst_pos_byte); | 8134 | TEMP_SET_PT_BOTH (coding->dst_pos, coding->dst_pos_byte); |
| 8115 | val = safe_call1 (CODING_ATTR_POST_READ (attrs), | 8135 | val = safe_call1 (CODING_ATTR_POST_READ (attrs), |
| 8116 | make_number (coding->produced_char)); | 8136 | make_number (coding->produced_char)); |
| 8117 | CHECK_NATNUM (val); | 8137 | CHECK_NATNUM (val); |
| 8118 | coding->produced_char += Z - prev_Z; | 8138 | coding->produced_char += Z - prev_Z; |
| 8119 | coding->produced += Z_BYTE - prev_Z_BYTE; | 8139 | coding->produced += Z_BYTE - prev_Z_BYTE; |
| 8140 | unbind_to (count1, Qnil); | ||
| 8120 | } | 8141 | } |
| 8121 | 8142 | ||
| 8122 | if (EQ (dst_object, Qt)) | 8143 | if (EQ (dst_object, Qt)) |