# HG changeset patch # User Kenichi Handa # Date 959599082 0 # Node ID d9e38a9489518650d497fa294c258a95b9188f15 # Parent 0d519872e96637c6f5db05c72ea7d98dbc10b295 Include composite.h. (Fcall_process): Handle composition correctly. diff -r 0d519872e966 -r d9e38a948951 src/callproc.c --- a/src/callproc.c Mon May 29 11:16:46 2000 +0000 +++ b/src/callproc.c Mon May 29 11:18:02 2000 +0000 @@ -75,6 +75,7 @@ #include "charset.h" #include "ccl.h" #include "coding.h" +#include "composite.h" #include #include "process.h" #include "syssignal.h" @@ -727,6 +728,8 @@ struct coding_system saved_coding; saved_coding = process_coding; + if (process_coding.composing != COMPOSITION_DISABLED) + coding_allocate_composition_data (&process_coding, PT); while (1) { @@ -764,9 +767,12 @@ insert_1_both (bufptr, nread, nread, 0, 1, 0); else { /* We have to decode the input. */ - int size = decoding_buffer_size (&process_coding, nread); - char *decoding_buf = (char *) xmalloc (size); + int size; + char *decoding_buf; + repeat_decoding: + size = decoding_buffer_size (&process_coding, nread); + decoding_buf = (char *) xmalloc (size); decode_coding (&process_coding, bufptr, decoding_buf, nread, size); if (display_on_the_fly @@ -784,15 +790,30 @@ continue; } if (process_coding.produced > 0) - insert_1_both (decoding_buf, process_coding.produced_char, - process_coding.produced, 0, 1, 0); + { + insert_1_both (decoding_buf, process_coding.produced_char, + process_coding.produced, 0, 1, 0); + if (process_coding.cmp_data) + coding_restore_composition (&process_coding, + Fcurrent_buffer ()); + } xfree (decoding_buf); - carryover = nread - process_coding.consumed; + nread -= process_coding.consumed; + carryover = nread; if (carryover > 0) /* As CARRYOVER should not be that large, we had better avoid overhead of bcopy. */ BCOPY_SHORT (bufptr + process_coding.consumed, bufptr, carryover); + if (process_coding.result == CODING_FINISH_INSUFFICIENT_CMP) + { + /* The decoding ended because of insufficient data + area to record information about composition. + We must try decoding with additional data area + before reading process output. */ + coding_allocate_composition_data (&process_coding, PT); + goto repeat_decoding; + } } } @@ -819,6 +840,9 @@ } give_up: ; + if (process_coding.cmp_data) + coding_free_composition_data (&process_coding); + Vlast_coding_system_used = process_coding.symbol; /* If the caller required, let the buffer inherit the