changeset 20433:a43789debf48

(read_process_output): Fix previous change, i.e, if proc_encode_coding_system[p->outfd] is NULL, instead of allocating `struct coding_system' for encoding, just skip setting up coding system for encoding. Set Vlast_coding_system_used after some text is read. (send_process): Set Vlast_coding_system_used after deciding a coding system to be used for encoding.
author Kenichi Handa <handa@m17n.org>
date Tue, 09 Dec 1997 04:12:03 +0000
parents 987ddd5cb6ee
children 9960d1196c09
files src/process.c
diffstat 1 files changed, 13 insertions(+), 7 deletions(-) [+]
line wrap: on
line diff
--- a/src/process.c	Tue Dec 09 04:12:03 1997 +0000
+++ b/src/process.c	Tue Dec 09 04:12:03 1997 +0000
@@ -2807,15 +2807,17 @@
              proc_decode_coding_system[channel] here.  It is done in
              detect_coding called via decode_coding above.  */
 
-	  /* If coding-system for encoding is not yet decided, we set it
-	     as the same as coding-system for decoding.  */
-	  if (NILP (p->encode_coding_system))
+	  /* If coding-system for encoding is not yet decided, we set
+	     it as the same as coding-system for decoding.
+
+	     But, before doing that we must check if
+	     proc_encode_coding_system[p->outfd] surely points to a
+	     valid memory because p->outfd will be changed once EOF is
+	     sent to the process.  */
+	  if (NILP (p->encode_coding_system)
+	      && proc_encode_coding_system[p->outfd])
 	    {
 	      p->encode_coding_system = coding->symbol;
-	      if (!proc_encode_coding_system[p->outfd])
-		proc_encode_coding_system[p->outfd]
-		  = ((struct coding_system *)
-		     xmalloc (sizeof (struct coding_system)));
 	      setup_coding_system (coding->symbol,
 				   proc_encode_coding_system[p->outfd]);
 	    }
@@ -2846,6 +2848,8 @@
     }
 #endif
 
+  Vlast_coding_system_used = coding->symbol;
+
   outstream = p->filter;
   if (!NILP (outstream))
     {
@@ -3047,6 +3051,8 @@
     error ("Output file descriptor of %s is closed", procname);
 
   coding = proc_encode_coding_system[XINT (XPROCESS (proc)->outfd)];
+  Vlast_coding_system_used = coding->symbol;
+
   if (CODING_REQUIRE_ENCODING (coding))
     {
       int require = encoding_buffer_size (coding, len);