aboutsummaryrefslogtreecommitdiffstats
path: root/src/callproc.c
diff options
context:
space:
mode:
authorJoakim Verona2013-02-03 00:03:44 +0100
committerJoakim Verona2013-02-03 00:03:44 +0100
commitcfefa7e817861c3fdf541becf7fbcfa00fa16858 (patch)
tree1a3ed70e7761f27ff2e882ba5148bdb3e4b62231 /src/callproc.c
parent9aa1f4ecdb156a4135c3f7f6125a2b5a40258038 (diff)
parent8ea41ea99608c7483ef5c91e230a760cf90bfb54 (diff)
downloademacs-cfefa7e817861c3fdf541becf7fbcfa00fa16858.tar.gz
emacs-cfefa7e817861c3fdf541becf7fbcfa00fa16858.zip
auto upstream
Diffstat (limited to 'src/callproc.c')
-rw-r--r--src/callproc.c50
1 files changed, 28 insertions, 22 deletions
diff --git a/src/callproc.c b/src/callproc.c
index 5eba3271358..ea79da7ff5a 100644
--- a/src/callproc.c
+++ b/src/callproc.c
@@ -445,28 +445,34 @@ usage: (call-process PROGRAM &optional INFILE BUFFER DISPLAY &rest ARGS) */)
445 path = Fsubstring (path, make_number (2), Qnil); 445 path = Fsubstring (path, make_number (2), Qnil);
446 446
447 new_argv = SAFE_ALLOCA ((nargs > 4 ? nargs - 2 : 2) * sizeof *new_argv); 447 new_argv = SAFE_ALLOCA ((nargs > 4 ? nargs - 2 : 2) * sizeof *new_argv);
448 if (nargs > 4)
449 {
450 ptrdiff_t i;
451 struct gcpro gcpro1, gcpro2, gcpro3, gcpro4, gcpro5;
452 448
453 GCPRO5 (infile, buffer, current_dir, path, error_file); 449 {
454 argument_coding.dst_multibyte = 0; 450 struct gcpro gcpro1, gcpro2, gcpro3, gcpro4, gcpro5;
455 for (i = 4; i < nargs; i++) 451
456 { 452 GCPRO5 (infile, buffer, current_dir, path, error_file);
457 argument_coding.src_multibyte = STRING_MULTIBYTE (args[i]); 453 if (nargs > 4)
458 if (CODING_REQUIRE_ENCODING (&argument_coding)) 454 {
459 /* We must encode this argument. */ 455 ptrdiff_t i;
460 args[i] = encode_coding_string (&argument_coding, args[i], 1); 456
461 } 457 argument_coding.dst_multibyte = 0;
462 UNGCPRO; 458 for (i = 4; i < nargs; i++)
463 for (i = 4; i < nargs; i++) 459 {
464 new_argv[i - 3] = SSDATA (args[i]); 460 argument_coding.src_multibyte = STRING_MULTIBYTE (args[i]);
465 new_argv[i - 3] = 0; 461 if (CODING_REQUIRE_ENCODING (&argument_coding))
466 } 462 /* We must encode this argument. */
467 else 463 args[i] = encode_coding_string (&argument_coding, args[i], 1);
468 new_argv[1] = 0; 464 }
469 new_argv[0] = SSDATA (path); 465 for (i = 4; i < nargs; i++)
466 new_argv[i - 3] = SSDATA (args[i]);
467 new_argv[i - 3] = 0;
468 }
469 else
470 new_argv[1] = 0;
471 if (STRING_MULTIBYTE (path))
472 path = ENCODE_FILE (path);
473 new_argv[0] = SSDATA (path);
474 UNGCPRO;
475 }
470 476
471#ifdef MSDOS /* MW, July 1993 */ 477#ifdef MSDOS /* MW, July 1993 */
472 478
@@ -481,7 +487,7 @@ usage: (call-process PROGRAM &optional INFILE BUFFER DISPLAY &rest ARGS) */)
481 tempfile = alloca (20); 487 tempfile = alloca (20);
482 *tempfile = '\0'; 488 *tempfile = '\0';
483 } 489 }
484 dostounix_filename (tempfile); 490 dostounix_filename (tempfile, 0);
485 if (*tempfile == '\0' || tempfile[strlen (tempfile) - 1] != '/') 491 if (*tempfile == '\0' || tempfile[strlen (tempfile) - 1] != '/')
486 strcat (tempfile, "/"); 492 strcat (tempfile, "/");
487 strcat (tempfile, "detmp.XXX"); 493 strcat (tempfile, "detmp.XXX");