summaryrefslogtreecommitdiff
path: root/src/callproc.c
diff options
context:
space:
mode:
authorKenichi Handa <handa@m17n.org>2000-08-09 07:51:57 +0000
committerKenichi Handa <handa@m17n.org>2000-08-09 07:51:57 +0000
commit838c97260737dd10b00c6e95fcbbe65af5802272 (patch)
treefe3c90b2903e226d2f9afda76841e14478d366bb /src/callproc.c
parent2f2174fad16a7cefe880d505d386820c4304d273 (diff)
downloademacs-838c97260737dd10b00c6e95fcbbe65af5802272.tar.gz
(Fcall_process): Terminate the unwind-protect around the
post-read-conversion of coding system.
Diffstat (limited to 'src/callproc.c')
-rw-r--r--src/callproc.c32
1 files changed, 19 insertions, 13 deletions
diff --git a/src/callproc.c b/src/callproc.c
index 103ece304bc..b29572bae0c 100644
--- a/src/callproc.c
+++ b/src/callproc.c
@@ -1,5 +1,5 @@
/* Synchronous subprocess invocation for GNU Emacs.
- Copyright (C) 1985, 86,87,88,93,94,95, 1999 Free Software Foundation, Inc.
+ Copyright (C) 1985,86,87,88,93,94,95,99,2000 Free Software Foundation, Inc.
This file is part of GNU Emacs.
@@ -846,20 +846,26 @@ If you quit, the process is killed with SIGINT, or SIGKILL if you quit again.")
coding_free_composition_data (&process_coding);
}
- record_unwind_protect (save_excursion_restore, save_excursion_save ());
- inserted = PT - pt_orig;
- TEMP_SET_PT_BOTH (pt_orig, pt_byte_orig);
- if (SYMBOLP (process_coding.post_read_conversion)
- && !NILP (Ffboundp (process_coding.post_read_conversion)))
- call1 (process_coding.post_read_conversion, make_number (inserted));
+ {
+ int post_read_count = specpdl_ptr - specpdl;
+
+ record_unwind_protect (save_excursion_restore, save_excursion_save ());
+ inserted = PT - pt_orig;
+ TEMP_SET_PT_BOTH (pt_orig, pt_byte_orig);
+ if (SYMBOLP (process_coding.post_read_conversion)
+ && !NILP (Ffboundp (process_coding.post_read_conversion)))
+ call1 (process_coding.post_read_conversion, make_number (inserted));
- Vlast_coding_system_used = process_coding.symbol;
+ Vlast_coding_system_used = process_coding.symbol;
- /* If the caller required, let the buffer inherit the
- coding-system used to decode the process output. */
- if (inherit_process_coding_system)
- call1 (intern ("after-insert-file-set-buffer-file-coding-system"),
- make_number (total_read));
+ /* If the caller required, let the buffer inherit the
+ coding-system used to decode the process output. */
+ if (inherit_process_coding_system)
+ call1 (intern ("after-insert-file-set-buffer-file-coding-system"),
+ make_number (total_read));
+
+ unbind_to (post_read_count, Qnil);
+ }
}
/* Wait for it to terminate, unless it already has. */