changeset 18651:982814f78d0d

(Fcall_process): If enable-multibyte-characters is nil, do not encode arguments for process, and decode output of process by emacs-mule. (Fcall_process_region): If enable-multibyte-characters is nil, do not encode text to be given to process, and decode output of process by emacs-mule.
author Kenichi Handa <handa@m17n.org>
date Mon, 07 Jul 1997 00:59:44 +0000
parents aa3f2820e2ac
children 8873a10882dc
files src/callproc.c
diffstat 1 files changed, 52 insertions(+), 24 deletions(-) [+]
line wrap: on
line diff
--- a/src/callproc.c	Mon Jul 07 00:59:44 1997 +0000
+++ b/src/callproc.c	Mon Jul 07 00:59:44 1997 +0000
@@ -245,7 +245,11 @@
     /* If arguments are supplied, we may have to encode them.  */
     if (nargs >= 5)
       {
-	if (NILP (val = Vcoding_system_for_write))
+	if (!NILP (Vcoding_system_for_write))
+	  val = Vcoding_system_for_write;
+	else if (NILP (current_buffer->enable_multibyte_characters))
+	  val = Qnil;
+	else
 	  {
 	    args2 = (Lisp_Object *) alloca ((nargs + 1) * sizeof *args2);
 	    args2[0] = Qcall_process;
@@ -255,6 +259,8 @@
 	      val = XCONS (coding_systems)->cdr;
 	    else if (CONSP (Vdefault_process_coding_system))
 	      val = XCONS (Vdefault_process_coding_system)->cdr;
+	    else
+	      val = Qnil;
 	  }
 	setup_coding_system (Fcheck_coding_system (val), &argument_coding);
       }
@@ -266,7 +272,12 @@
       setup_coding_system (Qnil, &process_coding);
     else if (!INTEGERP (args[2]))
       {
-	if (NILP (val = Vcoding_system_for_read))
+	val = Qnil;
+	if (!NILP (Vcoding_system_for_read))
+	  val = Vcoding_system_for_read;
+	else if (NILP (current_buffer->enable_multibyte_characters))
+	  val = Qemacs_mule;
+	else
 	  {
 	    if (!EQ (coding_systems, Qt))
 	      {
@@ -280,6 +291,8 @@
 	      val = XCONS (coding_systems)->car;
 	    else if (CONSP (Vdefault_process_coding_system))
 	      val = XCONS (Vdefault_process_coding_system)->car;
+	    else
+	      val = Qnil;
 	  }
 	setup_coding_system (Fcheck_coding_system (val), &process_coding);
       }
@@ -781,17 +794,25 @@
     val = Qnil;
   else
 #endif
-    if (NILP (val = Vcoding_system_for_write))
-      {
-	args2 = (Lisp_Object *) alloca ((nargs + 1) * sizeof *args2);
-	args2[0] = Qcall_process_region;
-	for (i = 0; i < nargs; i++) args2[i + 1] = args[i];
-	coding_systems = Ffind_operation_coding_system (nargs + 1, args2);
-	if (CONSP (coding_systems))
-	  val = XCONS (coding_systems)->cdr;
-	else if (CONSP (Vdefault_process_coding_system))
-	  val = XCONS (Vdefault_process_coding_system)->car;
-      }
+    {
+      if (!NILP (Vcoding_system_for_write))
+	val = Vcoding_system_for_write;
+      else if (NILP (current_buffer->enable_multibyte_characters))
+	val = Qnil;
+      else
+	{
+	  args2 = (Lisp_Object *) alloca ((nargs + 1) * sizeof *args2);
+	  args2[0] = Qcall_process_region;
+	  for (i = 0; i < nargs; i++) args2[i + 1] = args[i];
+	  coding_systems = Ffind_operation_coding_system (nargs + 1, args2);
+	  if (CONSP (coding_systems))
+	    val = XCONS (coding_systems)->cdr;
+	  else if (CONSP (Vdefault_process_coding_system))
+	    val = XCONS (Vdefault_process_coding_system)->car;
+	  else
+	    val = Qnil;
+	}
+    }
   specbind (intern ("coding-system-for-write"), val);
   Fwrite_region (start, end, filename_string, Qnil, Qlambda, Qnil);
 
@@ -800,17 +821,24 @@
     val = Qnil;
   else
 #endif
-    if (NILP (val = Vcoding_system_for_read))
-      {
-	if (EQ (coding_systems, Qt))
-	  {
-	    args2 = (Lisp_Object *) alloca ((nargs + 1) * sizeof *args2);
-	    args2[0] = Qcall_process_region;
-	    for (i = 0; i < nargs; i++) args2[i + 1] = args[i];
-	    coding_systems = Ffind_operation_coding_system (nargs + 1, args2);
-	  }
-	val = CONSP (coding_systems) ? XCONS (coding_systems)->car : Qnil;
-      }
+    {
+      if (!NILP (Vcoding_system_for_read))
+	val = Vcoding_system_for_read;
+      else if (NILP (current_buffer->enable_multibyte_characters))
+	val = Qemacs_mule;
+      else
+	{
+	  if (EQ (coding_systems, Qt))
+	    {
+	      args2 = (Lisp_Object *) alloca ((nargs + 1) * sizeof *args2);
+	      args2[0] = Qcall_process_region;
+	      for (i = 0; i < nargs; i++) args2[i + 1] = args[i];
+	      coding_systems = Ffind_operation_coding_system (nargs + 1,
+							      args2);
+	    }
+	  val = CONSP (coding_systems) ? XCONS (coding_systems)->car : Qnil;
+	}
+    }
   specbind (intern ("coding-system-for-read"), val);
 
   record_unwind_protect (delete_temp_file, filename_string);