annotate src/callproc.c @ 98089:4ea0f5996bd5

(Fcall_process): Don't hold references to string data across garbage collection. Move initialisation of new_argv down to avoid compiler bug.
author Andreas Schwab <schwab@suse.de>
date Sun, 07 Sep 2008 20:35:14 +0000
parents 78f10c77413c
children e038c1a8307c
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
296
558b874b5259 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1 /* Synchronous subprocess invocation for GNU Emacs.
60891
8881d5e2d23f (Vdoc_file_name, Vfile_name_coding_system)
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 57892
diff changeset
2 Copyright (C) 1985, 1986, 1987, 1988, 1993, 1994, 1995, 1999, 2000, 2001,
79759
fc2bcd2a8aad Add 2008 to copyright years.
Glenn Morris <rgm@gnu.org>
parents: 78501
diff changeset
3 2002, 2003, 2004, 2005, 2006, 2007, 2008
fc2bcd2a8aad Add 2008 to copyright years.
Glenn Morris <rgm@gnu.org>
parents: 78501
diff changeset
4 Free Software Foundation, Inc.
296
558b874b5259 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
5
558b874b5259 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
6 This file is part of GNU Emacs.
558b874b5259 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
7
94963
8971ddf55736 Switch to recommended form of GPLv3 permissions notice.
Glenn Morris <rgm@gnu.org>
parents: 91551
diff changeset
8 GNU Emacs is free software: you can redistribute it and/or modify
296
558b874b5259 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
9 it under the terms of the GNU General Public License as published by
94963
8971ddf55736 Switch to recommended form of GPLv3 permissions notice.
Glenn Morris <rgm@gnu.org>
parents: 91551
diff changeset
10 the Free Software Foundation, either version 3 of the License, or
8971ddf55736 Switch to recommended form of GPLv3 permissions notice.
Glenn Morris <rgm@gnu.org>
parents: 91551
diff changeset
11 (at your option) any later version.
296
558b874b5259 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
12
558b874b5259 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
13 GNU Emacs is distributed in the hope that it will be useful,
558b874b5259 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
14 but WITHOUT ANY WARRANTY; without even the implied warranty of
558b874b5259 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
15 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
558b874b5259 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
16 GNU General Public License for more details.
558b874b5259 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
17
558b874b5259 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
18 You should have received a copy of the GNU General Public License
94963
8971ddf55736 Switch to recommended form of GPLv3 permissions notice.
Glenn Morris <rgm@gnu.org>
parents: 91551
diff changeset
19 along with GNU Emacs. If not, see <http://www.gnu.org/licenses/>. */
296
558b874b5259 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
20
558b874b5259 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
21
26088
b7aa6ac26872 Add support for large files, 64-bit Solaris, system locale codings.
Paul Eggert <eggert@twinsun.com>
parents: 25767
diff changeset
22 #include <config.h>
296
558b874b5259 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
23 #include <signal.h>
948
928ed74adf4f Restored up-to-date version of this file from pogo. What is going on
Jim Blandy <jimb@redhat.com>
parents: 942
diff changeset
24 #include <errno.h>
7900
60795e826dad Put stdio.h after config.h.
Richard M. Stallman <rms@gnu.org>
parents: 7824
diff changeset
25 #include <stdio.h>
296
558b874b5259 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
26
31100
92f108b8b281 [USE_CRT_DLL]: Remove unnecessary extern, which
Andrew Innes <andrewi@gnu.org>
parents: 30703
diff changeset
27 #ifndef USE_CRT_DLL
2286
7f66b40a0192 * callproc.c (child_setup): Make sure that in, out, and err are
Jim Blandy <jimb@redhat.com>
parents: 1912
diff changeset
28 extern int errno;
31100
92f108b8b281 [USE_CRT_DLL]: Remove unnecessary extern, which
Andrew Innes <andrewi@gnu.org>
parents: 30703
diff changeset
29 #endif
2286
7f66b40a0192 * callproc.c (child_setup): Make sure that in, out, and err are
Jim Blandy <jimb@redhat.com>
parents: 1912
diff changeset
30
296
558b874b5259 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
31 /* Define SIGCHLD as an alias for SIGCLD. */
558b874b5259 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
32
558b874b5259 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
33 #if !defined (SIGCHLD) && defined (SIGCLD)
558b874b5259 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
34 #define SIGCHLD SIGCLD
558b874b5259 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
35 #endif /* SIGCLD */
558b874b5259 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
36
558b874b5259 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
37 #include <sys/types.h>
3932
9a411d86ca72 (PRIO_PROCESS): Definition deleted.
Richard M. Stallman <rms@gnu.org>
parents: 3826
diff changeset
38
25767
30ffae737755 (toplevel) [HAVE_UNISTD_H]: Include unistd.h.
Gerd Moellmann <gerd@gnu.org>
parents: 25645
diff changeset
39 #ifdef HAVE_UNISTD_H
30ffae737755 (toplevel) [HAVE_UNISTD_H]: Include unistd.h.
Gerd Moellmann <gerd@gnu.org>
parents: 25645
diff changeset
40 #include <unistd.h>
30ffae737755 (toplevel) [HAVE_UNISTD_H]: Include unistd.h.
Gerd Moellmann <gerd@gnu.org>
parents: 25645
diff changeset
41 #endif
30ffae737755 (toplevel) [HAVE_UNISTD_H]: Include unistd.h.
Gerd Moellmann <gerd@gnu.org>
parents: 25645
diff changeset
42
296
558b874b5259 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
43 #include <sys/file.h>
51403
d30115b64d58 Use HAVE_FCNTL_H, not USG5.
Dave Love <fx@gnu.org>
parents: 51070
diff changeset
44 #ifdef HAVE_FCNTL_H
6818
6a9b0b5399ce If we include fcntl.h, define INCLUDED_FCNTL.
Richard M. Stallman <rms@gnu.org>
parents: 6614
diff changeset
45 #define INCLUDED_FCNTL
296
558b874b5259 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
46 #include <fcntl.h>
558b874b5259 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
47 #endif
558b874b5259 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
48
9786
7f4b72244919 (getenv_internal) [WINDOWSNT]: Use strnicmp, not bcmp.
Richard M. Stallman <rms@gnu.org>
parents: 9609
diff changeset
49 #ifdef WINDOWSNT
7f4b72244919 (getenv_internal) [WINDOWSNT]: Use strnicmp, not bcmp.
Richard M. Stallman <rms@gnu.org>
parents: 9609
diff changeset
50 #define NOMINMAX
7f4b72244919 (getenv_internal) [WINDOWSNT]: Use strnicmp, not bcmp.
Richard M. Stallman <rms@gnu.org>
parents: 9609
diff changeset
51 #include <windows.h>
7f4b72244919 (getenv_internal) [WINDOWSNT]: Use strnicmp, not bcmp.
Richard M. Stallman <rms@gnu.org>
parents: 9609
diff changeset
52 #include <stdlib.h> /* for proper declaration of environ */
7f4b72244919 (getenv_internal) [WINDOWSNT]: Use strnicmp, not bcmp.
Richard M. Stallman <rms@gnu.org>
parents: 9609
diff changeset
53 #include <fcntl.h>
16593
4ed80eda6fac Use new names for w32 files
Geoff Voelker <voelker@cs.washington.edu>
parents: 16486
diff changeset
54 #include "w32.h"
9786
7f4b72244919 (getenv_internal) [WINDOWSNT]: Use strnicmp, not bcmp.
Richard M. Stallman <rms@gnu.org>
parents: 9609
diff changeset
55 #define _P_NOWAIT 1 /* from process.h */
7f4b72244919 (getenv_internal) [WINDOWSNT]: Use strnicmp, not bcmp.
Richard M. Stallman <rms@gnu.org>
parents: 9609
diff changeset
56 #endif
7f4b72244919 (getenv_internal) [WINDOWSNT]: Use strnicmp, not bcmp.
Richard M. Stallman <rms@gnu.org>
parents: 9609
diff changeset
57
5501
902cd7024cfa (syms_of_callproc) [MSDOS]: New lisp variable: binary-process.
Richard M. Stallman <rms@gnu.org>
parents: 5348
diff changeset
58 #ifdef MSDOS /* Demacs 1.1.1 91/10/16 HIRANO Satoshi */
6818
6a9b0b5399ce If we include fcntl.h, define INCLUDED_FCNTL.
Richard M. Stallman <rms@gnu.org>
parents: 6614
diff changeset
59 #define INCLUDED_FCNTL
5501
902cd7024cfa (syms_of_callproc) [MSDOS]: New lisp variable: binary-process.
Richard M. Stallman <rms@gnu.org>
parents: 5348
diff changeset
60 #include <fcntl.h>
902cd7024cfa (syms_of_callproc) [MSDOS]: New lisp variable: binary-process.
Richard M. Stallman <rms@gnu.org>
parents: 5348
diff changeset
61 #include <sys/stat.h>
902cd7024cfa (syms_of_callproc) [MSDOS]: New lisp variable: binary-process.
Richard M. Stallman <rms@gnu.org>
parents: 5348
diff changeset
62 #include <sys/param.h>
902cd7024cfa (syms_of_callproc) [MSDOS]: New lisp variable: binary-process.
Richard M. Stallman <rms@gnu.org>
parents: 5348
diff changeset
63 #include <errno.h>
902cd7024cfa (syms_of_callproc) [MSDOS]: New lisp variable: binary-process.
Richard M. Stallman <rms@gnu.org>
parents: 5348
diff changeset
64 #endif /* MSDOS */
902cd7024cfa (syms_of_callproc) [MSDOS]: New lisp variable: binary-process.
Richard M. Stallman <rms@gnu.org>
parents: 5348
diff changeset
65
296
558b874b5259 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
66 #ifndef O_RDONLY
558b874b5259 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
67 #define O_RDONLY 0
558b874b5259 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
68 #endif
558b874b5259 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
69
558b874b5259 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
70 #ifndef O_WRONLY
558b874b5259 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
71 #define O_WRONLY 1
558b874b5259 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
72 #endif
558b874b5259 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
73
558b874b5259 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
74 #include "lisp.h"
558b874b5259 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
75 #include "commands.h"
558b874b5259 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
76 #include "buffer.h"
88356
5ace79aaf5ad Include "character.h" instead of "charset.h".
Kenichi Handa <handa@m17n.org>
parents: 41861
diff changeset
77 #include "character.h"
23885
b08de5b1299c Include "ccl.h".
Kenichi Handa <handa@m17n.org>
parents: 23462
diff changeset
78 #include "ccl.h"
17025
3c222a7edda1 Include charset.h and coding.h.
Karl Heuer <kwzh@gnu.org>
parents: 16659
diff changeset
79 #include "coding.h"
29273
d9e38a948951 Include composite.h.
Kenichi Handa <handa@m17n.org>
parents: 29150
diff changeset
80 #include "composite.h"
24412
d11ac02f9d6a Use epaths.h istead of paths.h.
Richard M. Stallman <rms@gnu.org>
parents: 23885
diff changeset
81 #include <epaths.h>
296
558b874b5259 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
82 #include "process.h"
1504
e074a2236b00 * callproc.c: Arrange for synchronous processes to get SIGINT the
Jim Blandy <jimb@redhat.com>
parents: 1201
diff changeset
83 #include "syssignal.h"
5348
f921e3c48dcb Include systty.h.
Richard M. Stallman <rms@gnu.org>
parents: 5251
diff changeset
84 #include "systty.h"
57892
0cdbbc7bf06a From: YAMAMOTO Mitsuharu
Kim F. Storm <storm@cua.dk>
parents: 57473
diff changeset
85 #include "blockinput.h"
83421
bb2edc915032 Implement automatic terminal-local environment variables via `local-environment-variables'.
Karoly Lorentey <lorentey@elte.hu>
parents: 64770
diff changeset
86 #include "frame.h"
bb2edc915032 Implement automatic terminal-local environment variables via `local-environment-variables'.
Karoly Lorentey <lorentey@elte.hu>
parents: 64770
diff changeset
87 #include "termhooks.h"
296
558b874b5259 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
88
21786
5f8f1b124f45 nclude msdos.h after lisp.h.
Eli Zaretskii <eliz@gnu.org>
parents: 21694
diff changeset
89 #ifdef MSDOS
5f8f1b124f45 nclude msdos.h after lisp.h.
Eli Zaretskii <eliz@gnu.org>
parents: 21694
diff changeset
90 #include "msdos.h"
5f8f1b124f45 nclude msdos.h after lisp.h.
Eli Zaretskii <eliz@gnu.org>
parents: 21694
diff changeset
91 #endif
5f8f1b124f45 nclude msdos.h after lisp.h.
Eli Zaretskii <eliz@gnu.org>
parents: 21694
diff changeset
92
31100
92f108b8b281 [USE_CRT_DLL]: Remove unnecessary extern, which
Andrew Innes <andrewi@gnu.org>
parents: 30703
diff changeset
93 #ifndef USE_CRT_DLL
296
558b874b5259 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
94 extern char **environ;
558b874b5259 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
95 #endif
558b874b5259 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
96
29125
63520d6017fb (setpgrp) [HAVE_SETPGID]: Define as setpgid.
Gerd Moellmann <gerd@gnu.org>
parents: 29000
diff changeset
97 #ifdef HAVE_SETPGID
29150
0398ec3316c5 (setpgrp): Don't define if USG and BSD_PGRPS are not defined.
Gerd Moellmann <gerd@gnu.org>
parents: 29125
diff changeset
98 #if !defined (USG) || defined (BSD_PGRPS)
29905
ca781f54ac48 (setpgrp): Undefine before defining.
Dave Love <fx@gnu.org>
parents: 29287
diff changeset
99 #undef setpgrp
29125
63520d6017fb (setpgrp) [HAVE_SETPGID]: Define as setpgid.
Gerd Moellmann <gerd@gnu.org>
parents: 29000
diff changeset
100 #define setpgrp setpgid
63520d6017fb (setpgrp) [HAVE_SETPGID]: Define as setpgid.
Gerd Moellmann <gerd@gnu.org>
parents: 29000
diff changeset
101 #endif
29150
0398ec3316c5 (setpgrp): Don't define if USG and BSD_PGRPS are not defined.
Gerd Moellmann <gerd@gnu.org>
parents: 29125
diff changeset
102 #endif
29125
63520d6017fb (setpgrp) [HAVE_SETPGID]: Define as setpgid.
Gerd Moellmann <gerd@gnu.org>
parents: 29000
diff changeset
103
39811
9f7e72fba3d2 (Vexec_suffixes): New var.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 39535
diff changeset
104 Lisp_Object Vexec_path, Vexec_directory, Vexec_suffixes;
9f7e72fba3d2 (Vexec_suffixes): New var.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 39535
diff changeset
105 Lisp_Object Vdata_directory, Vdoc_directory;
45092
7f1d09693ef3 (Vgame_score_directory): Renamed to Vshared_game_score_directory.
Colin Walters <walters@gnu.org>
parents: 45002
diff changeset
106 Lisp_Object Vconfigure_info_directory, Vshared_game_score_directory;
16627
530b3f7373db (Vtemp_file_name_pattern): New variable.
Richard M. Stallman <rms@gnu.org>
parents: 16593
diff changeset
107 Lisp_Object Vtemp_file_name_pattern;
296
558b874b5259 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
108
558b874b5259 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
109 Lisp_Object Vshell_file_name;
558b874b5259 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
110
83796
e7303426ed25 (Vinitial_environment): New variable.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 83652
diff changeset
111 Lisp_Object Vprocess_environment, Vinitial_environment;
296
558b874b5259 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
112
9786
7f4b72244919 (getenv_internal) [WINDOWSNT]: Use strnicmp, not bcmp.
Richard M. Stallman <rms@gnu.org>
parents: 9609
diff changeset
113 #ifdef DOS_NT
7397
e0ffa47f2ed4 [MSDOS]: Rename Vbinary_process to Vbinary_process_output.
Richard M. Stallman <rms@gnu.org>
parents: 7161
diff changeset
114 Lisp_Object Qbuffer_file_type;
9786
7f4b72244919 (getenv_internal) [WINDOWSNT]: Use strnicmp, not bcmp.
Richard M. Stallman <rms@gnu.org>
parents: 9609
diff changeset
115 #endif /* DOS_NT */
7397
e0ffa47f2ed4 [MSDOS]: Rename Vbinary_process to Vbinary_process_output.
Richard M. Stallman <rms@gnu.org>
parents: 7161
diff changeset
116
78501
1677cf1c2509 Replace `iff' in comments.
Glenn Morris <rgm@gnu.org>
parents: 78260
diff changeset
117 /* True if we are about to fork off a synchronous process or if we
296
558b874b5259 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
118 are waiting for it. */
558b874b5259 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
119 int synch_process_alive;
558b874b5259 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
120
558b874b5259 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
121 /* Nonzero => this is a string explaining death of synchronous subprocess. */
558b874b5259 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
122 char *synch_process_death;
558b874b5259 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
123
53712
659b9b404c02 Define synch_process_termsig.
Jan Djärv <jan.h.d@swipnet.se>
parents: 52401
diff changeset
124 /* Nonzero => this is the signal number that terminated the subprocess. */
659b9b404c02 Define synch_process_termsig.
Jan Djärv <jan.h.d@swipnet.se>
parents: 52401
diff changeset
125 int synch_process_termsig;
659b9b404c02 Define synch_process_termsig.
Jan Djärv <jan.h.d@swipnet.se>
parents: 52401
diff changeset
126
296
558b874b5259 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
127 /* If synch_process_death is zero,
558b874b5259 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
128 this is exit code of synchronous subprocess. */
558b874b5259 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
129 int synch_process_retcode;
83421
bb2edc915032 Implement automatic terminal-local environment variables via `local-environment-variables'.
Karoly Lorentey <lorentey@elte.hu>
parents: 64770
diff changeset
130
296
558b874b5259 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
131
6275
132464faeaf4 Don't kill remaining processes if child exits.
Richard M. Stallman <rms@gnu.org>
parents: 6031
diff changeset
132 /* Clean up when exiting Fcall_process.
132464faeaf4 Don't kill remaining processes if child exits.
Richard M. Stallman <rms@gnu.org>
parents: 6031
diff changeset
133 On MSDOS, delete the temporary file on any kind of termination.
132464faeaf4 Don't kill remaining processes if child exits.
Richard M. Stallman <rms@gnu.org>
parents: 6031
diff changeset
134 On Unix, kill the process and any children on termination by signal. */
132464faeaf4 Don't kill remaining processes if child exits.
Richard M. Stallman <rms@gnu.org>
parents: 6031
diff changeset
135
132464faeaf4 Don't kill remaining processes if child exits.
Richard M. Stallman <rms@gnu.org>
parents: 6031
diff changeset
136 /* Nonzero if this is termination due to exit. */
132464faeaf4 Don't kill remaining processes if child exits.
Richard M. Stallman <rms@gnu.org>
parents: 6031
diff changeset
137 static int call_process_exited;
132464faeaf4 Don't kill remaining processes if child exits.
Richard M. Stallman <rms@gnu.org>
parents: 6031
diff changeset
138
84740
275cddd2a0da (child_setup, getenv_internal): Use the frame's `display'
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 84702
diff changeset
139 EXFUN (Fgetenv_internal, 2);
275cddd2a0da (child_setup, getenv_internal): Use the frame's `display'
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 84702
diff changeset
140
1504
e074a2236b00 * callproc.c: Arrange for synchronous processes to get SIGINT the
Jim Blandy <jimb@redhat.com>
parents: 1201
diff changeset
141 static Lisp_Object
e074a2236b00 * callproc.c: Arrange for synchronous processes to get SIGINT the
Jim Blandy <jimb@redhat.com>
parents: 1201
diff changeset
142 call_process_kill (fdpid)
e074a2236b00 * callproc.c: Arrange for synchronous processes to get SIGINT the
Jim Blandy <jimb@redhat.com>
parents: 1201
diff changeset
143 Lisp_Object fdpid;
e074a2236b00 * callproc.c: Arrange for synchronous processes to get SIGINT the
Jim Blandy <jimb@redhat.com>
parents: 1201
diff changeset
144 {
26088
b7aa6ac26872 Add support for large files, 64-bit Solaris, system locale codings.
Paul Eggert <eggert@twinsun.com>
parents: 25767
diff changeset
145 emacs_close (XFASTINT (Fcar (fdpid)));
1504
e074a2236b00 * callproc.c: Arrange for synchronous processes to get SIGINT the
Jim Blandy <jimb@redhat.com>
parents: 1201
diff changeset
146 EMACS_KILLPG (XFASTINT (Fcdr (fdpid)), SIGKILL);
e074a2236b00 * callproc.c: Arrange for synchronous processes to get SIGINT the
Jim Blandy <jimb@redhat.com>
parents: 1201
diff changeset
147 synch_process_alive = 0;
e074a2236b00 * callproc.c: Arrange for synchronous processes to get SIGINT the
Jim Blandy <jimb@redhat.com>
parents: 1201
diff changeset
148 return Qnil;
e074a2236b00 * callproc.c: Arrange for synchronous processes to get SIGINT the
Jim Blandy <jimb@redhat.com>
parents: 1201
diff changeset
149 }
e074a2236b00 * callproc.c: Arrange for synchronous processes to get SIGINT the
Jim Blandy <jimb@redhat.com>
parents: 1201
diff changeset
150
296
558b874b5259 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
151 Lisp_Object
558b874b5259 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
152 call_process_cleanup (fdpid)
558b874b5259 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
153 Lisp_Object fdpid;
558b874b5259 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
154 {
87730
91da483b3fa5 * movemail.c:
Dan Nicolaescu <dann@ics.uci.edu>
parents: 87649
diff changeset
155 #if defined (MSDOS)
5501
902cd7024cfa (syms_of_callproc) [MSDOS]: New lisp variable: binary-process.
Richard M. Stallman <rms@gnu.org>
parents: 5348
diff changeset
156 /* for MSDOS fdpid is really (fd . tempfile) */
6495
c88f34090aea (call_process_cleanup, getenv_internal): Use assignment, not initialization.
Karl Heuer <kwzh@gnu.org>
parents: 6466
diff changeset
157 register Lisp_Object file;
c88f34090aea (call_process_cleanup, getenv_internal): Use assignment, not initialization.
Karl Heuer <kwzh@gnu.org>
parents: 6466
diff changeset
158 file = Fcdr (fdpid);
26088
b7aa6ac26872 Add support for large files, 64-bit Solaris, system locale codings.
Paul Eggert <eggert@twinsun.com>
parents: 25767
diff changeset
159 emacs_close (XFASTINT (Fcar (fdpid)));
46370
40db0673e6f0 Most uses of XSTRING combined with STRING_BYTES or indirection changed to
Ken Raeburn <raeburn@raeburn.org>
parents: 46293
diff changeset
160 if (strcmp (SDATA (file), NULL_DEVICE) != 0)
40db0673e6f0 Most uses of XSTRING combined with STRING_BYTES or indirection changed to
Ken Raeburn <raeburn@raeburn.org>
parents: 46293
diff changeset
161 unlink (SDATA (file));
87730
91da483b3fa5 * movemail.c:
Dan Nicolaescu <dann@ics.uci.edu>
parents: 87649
diff changeset
162 #else /* not MSDOS */
1504
e074a2236b00 * callproc.c: Arrange for synchronous processes to get SIGINT the
Jim Blandy <jimb@redhat.com>
parents: 1201
diff changeset
163 register int pid = XFASTINT (Fcdr (fdpid));
e074a2236b00 * callproc.c: Arrange for synchronous processes to get SIGINT the
Jim Blandy <jimb@redhat.com>
parents: 1201
diff changeset
164
6275
132464faeaf4 Don't kill remaining processes if child exits.
Richard M. Stallman <rms@gnu.org>
parents: 6031
diff changeset
165 if (call_process_exited)
6466
4b3c537e1169 (Fcall_process): Make sure to close descriptors.
Richard M. Stallman <rms@gnu.org>
parents: 6391
diff changeset
166 {
26088
b7aa6ac26872 Add support for large files, 64-bit Solaris, system locale codings.
Paul Eggert <eggert@twinsun.com>
parents: 25767
diff changeset
167 emacs_close (XFASTINT (Fcar (fdpid)));
6466
4b3c537e1169 (Fcall_process): Make sure to close descriptors.
Richard M. Stallman <rms@gnu.org>
parents: 6391
diff changeset
168 return Qnil;
4b3c537e1169 (Fcall_process): Make sure to close descriptors.
Richard M. Stallman <rms@gnu.org>
parents: 6391
diff changeset
169 }
6275
132464faeaf4 Don't kill remaining processes if child exits.
Richard M. Stallman <rms@gnu.org>
parents: 6031
diff changeset
170
1504
e074a2236b00 * callproc.c: Arrange for synchronous processes to get SIGINT the
Jim Blandy <jimb@redhat.com>
parents: 1201
diff changeset
171 if (EMACS_KILLPG (pid, SIGINT) == 0)
e074a2236b00 * callproc.c: Arrange for synchronous processes to get SIGINT the
Jim Blandy <jimb@redhat.com>
parents: 1201
diff changeset
172 {
46293
1fb8f75062c6 Use macro SPECPDL_INDEX.
Juanma Barranquero <lekktu@gmail.com>
parents: 46260
diff changeset
173 int count = SPECPDL_INDEX ();
1504
e074a2236b00 * callproc.c: Arrange for synchronous processes to get SIGINT the
Jim Blandy <jimb@redhat.com>
parents: 1201
diff changeset
174 record_unwind_protect (call_process_kill, fdpid);
e074a2236b00 * callproc.c: Arrange for synchronous processes to get SIGINT the
Jim Blandy <jimb@redhat.com>
parents: 1201
diff changeset
175 message1 ("Waiting for process to die...(type C-g again to kill it instantly)");
e074a2236b00 * callproc.c: Arrange for synchronous processes to get SIGINT the
Jim Blandy <jimb@redhat.com>
parents: 1201
diff changeset
176 immediate_quit = 1;
e074a2236b00 * callproc.c: Arrange for synchronous processes to get SIGINT the
Jim Blandy <jimb@redhat.com>
parents: 1201
diff changeset
177 QUIT;
e074a2236b00 * callproc.c: Arrange for synchronous processes to get SIGINT the
Jim Blandy <jimb@redhat.com>
parents: 1201
diff changeset
178 wait_for_termination (pid);
e074a2236b00 * callproc.c: Arrange for synchronous processes to get SIGINT the
Jim Blandy <jimb@redhat.com>
parents: 1201
diff changeset
179 immediate_quit = 0;
e074a2236b00 * callproc.c: Arrange for synchronous processes to get SIGINT the
Jim Blandy <jimb@redhat.com>
parents: 1201
diff changeset
180 specpdl_ptr = specpdl + count; /* Discard the unwind protect. */
e074a2236b00 * callproc.c: Arrange for synchronous processes to get SIGINT the
Jim Blandy <jimb@redhat.com>
parents: 1201
diff changeset
181 message1 ("Waiting for process to die...done");
e074a2236b00 * callproc.c: Arrange for synchronous processes to get SIGINT the
Jim Blandy <jimb@redhat.com>
parents: 1201
diff changeset
182 }
296
558b874b5259 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
183 synch_process_alive = 0;
26088
b7aa6ac26872 Add support for large files, 64-bit Solaris, system locale codings.
Paul Eggert <eggert@twinsun.com>
parents: 25767
diff changeset
184 emacs_close (XFASTINT (Fcar (fdpid)));
5501
902cd7024cfa (syms_of_callproc) [MSDOS]: New lisp variable: binary-process.
Richard M. Stallman <rms@gnu.org>
parents: 5348
diff changeset
185 #endif /* not MSDOS */
296
558b874b5259 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
186 return Qnil;
558b874b5259 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
187 }
558b874b5259 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
188
558b874b5259 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
189 DEFUN ("call-process", Fcall_process, Scall_process, 1, MANY, 0,
40103
6b389fb978bc Change doc-string comments to `new style' [w/`doc:' keyword].
Pavel Janík <Pavel@Janik.cz>
parents: 39934
diff changeset
190 doc: /* Call PROGRAM synchronously in separate process.
6b389fb978bc Change doc-string comments to `new style' [w/`doc:' keyword].
Pavel Janík <Pavel@Janik.cz>
parents: 39934
diff changeset
191 The remaining arguments are optional.
6b389fb978bc Change doc-string comments to `new style' [w/`doc:' keyword].
Pavel Janík <Pavel@Janik.cz>
parents: 39934
diff changeset
192 The program's input comes from file INFILE (nil means `/dev/null').
6b389fb978bc Change doc-string comments to `new style' [w/`doc:' keyword].
Pavel Janík <Pavel@Janik.cz>
parents: 39934
diff changeset
193 Insert output in BUFFER before point; t means current buffer;
6b389fb978bc Change doc-string comments to `new style' [w/`doc:' keyword].
Pavel Janík <Pavel@Janik.cz>
parents: 39934
diff changeset
194 nil for BUFFER means discard it; 0 means discard and don't wait.
6b389fb978bc Change doc-string comments to `new style' [w/`doc:' keyword].
Pavel Janík <Pavel@Janik.cz>
parents: 39934
diff changeset
195 BUFFER can also have the form (REAL-BUFFER STDERR-FILE); in that case,
6b389fb978bc Change doc-string comments to `new style' [w/`doc:' keyword].
Pavel Janík <Pavel@Janik.cz>
parents: 39934
diff changeset
196 REAL-BUFFER says what to do with standard output, as above,
6b389fb978bc Change doc-string comments to `new style' [w/`doc:' keyword].
Pavel Janík <Pavel@Janik.cz>
parents: 39934
diff changeset
197 while STDERR-FILE says what to do with standard error in the child.
6b389fb978bc Change doc-string comments to `new style' [w/`doc:' keyword].
Pavel Janík <Pavel@Janik.cz>
parents: 39934
diff changeset
198 STDERR-FILE may be nil (discard standard error output),
6b389fb978bc Change doc-string comments to `new style' [w/`doc:' keyword].
Pavel Janík <Pavel@Janik.cz>
parents: 39934
diff changeset
199 t (mix it with ordinary output), or a file name string.
6b389fb978bc Change doc-string comments to `new style' [w/`doc:' keyword].
Pavel Janík <Pavel@Janik.cz>
parents: 39934
diff changeset
200
6b389fb978bc Change doc-string comments to `new style' [w/`doc:' keyword].
Pavel Janík <Pavel@Janik.cz>
parents: 39934
diff changeset
201 Fourth arg DISPLAY non-nil means redisplay buffer as output is inserted.
6b389fb978bc Change doc-string comments to `new style' [w/`doc:' keyword].
Pavel Janík <Pavel@Janik.cz>
parents: 39934
diff changeset
202 Remaining arguments are strings passed as command arguments to PROGRAM.
6b389fb978bc Change doc-string comments to `new style' [w/`doc:' keyword].
Pavel Janík <Pavel@Janik.cz>
parents: 39934
diff changeset
203
71340
5de9b904c7ad (Fcall_process): Doc fix.
Richard M. Stallman <rms@gnu.org>
parents: 70705
diff changeset
204 If executable PROGRAM can't be found as an executable, `call-process'
5de9b904c7ad (Fcall_process): Doc fix.
Richard M. Stallman <rms@gnu.org>
parents: 70705
diff changeset
205 signals a Lisp error. `call-process' reports errors in execution of
5de9b904c7ad (Fcall_process): Doc fix.
Richard M. Stallman <rms@gnu.org>
parents: 70705
diff changeset
206 the program only through its return and output.
5de9b904c7ad (Fcall_process): Doc fix.
Richard M. Stallman <rms@gnu.org>
parents: 70705
diff changeset
207
40103
6b389fb978bc Change doc-string comments to `new style' [w/`doc:' keyword].
Pavel Janík <Pavel@Janik.cz>
parents: 39934
diff changeset
208 If BUFFER is 0, `call-process' returns immediately with value nil.
6b389fb978bc Change doc-string comments to `new style' [w/`doc:' keyword].
Pavel Janík <Pavel@Janik.cz>
parents: 39934
diff changeset
209 Otherwise it waits for PROGRAM to terminate
6b389fb978bc Change doc-string comments to `new style' [w/`doc:' keyword].
Pavel Janík <Pavel@Janik.cz>
parents: 39934
diff changeset
210 and returns a numeric exit status or a signal description string.
40114
c8af574bcf48 (Fcall_process_region, Fcall_process): Add usage: string to doc string.
Miles Bader <miles@gnu.org>
parents: 40103
diff changeset
211 If you quit, the process is killed with SIGINT, or SIGKILL if you quit again.
c8af574bcf48 (Fcall_process_region, Fcall_process): Add usage: string to doc string.
Miles Bader <miles@gnu.org>
parents: 40103
diff changeset
212
c8af574bcf48 (Fcall_process_region, Fcall_process): Add usage: string to doc string.
Miles Bader <miles@gnu.org>
parents: 40103
diff changeset
213 usage: (call-process PROGRAM &optional INFILE BUFFER DISPLAY &rest ARGS) */)
40103
6b389fb978bc Change doc-string comments to `new style' [w/`doc:' keyword].
Pavel Janík <Pavel@Janik.cz>
parents: 39934
diff changeset
214 (nargs, args)
296
558b874b5259 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
215 int nargs;
558b874b5259 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
216 register Lisp_Object *args;
558b874b5259 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
217 {
57473
fb60234070b0 (Fcall_process): Simplify handling of display arg.
Kim F. Storm <storm@cua.dk>
parents: 57290
diff changeset
218 Lisp_Object infile, buffer, current_dir, path;
fb60234070b0 (Fcall_process): Simplify handling of display arg.
Kim F. Storm <storm@cua.dk>
parents: 57290
diff changeset
219 int display_p;
296
558b874b5259 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
220 int fd[2];
558b874b5259 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
221 int filefd;
558b874b5259 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
222 register int pid;
62982
d7793ac6df62 (Fcall_process): Don't use alloca to gradually
Kim F. Storm <storm@cua.dk>
parents: 60891
diff changeset
223 #define CALLPROC_BUFFER_SIZE_MIN (16 * 1024)
d7793ac6df62 (Fcall_process): Don't use alloca to gradually
Kim F. Storm <storm@cua.dk>
parents: 60891
diff changeset
224 #define CALLPROC_BUFFER_SIZE_MAX (4 * CALLPROC_BUFFER_SIZE_MIN)
d7793ac6df62 (Fcall_process): Don't use alloca to gradually
Kim F. Storm <storm@cua.dk>
parents: 60891
diff changeset
225 char buf[CALLPROC_BUFFER_SIZE_MAX];
d7793ac6df62 (Fcall_process): Don't use alloca to gradually
Kim F. Storm <storm@cua.dk>
parents: 60891
diff changeset
226 int bufsize = CALLPROC_BUFFER_SIZE_MIN;
46293
1fb8f75062c6 Use macro SPECPDL_INDEX.
Juanma Barranquero <lekktu@gmail.com>
parents: 46260
diff changeset
227 int count = SPECPDL_INDEX ();
20525
468f59c6c9bf (Fcall_process): Cast new_argv for child_setup.
Richard M. Stallman <rms@gnu.org>
parents: 20448
diff changeset
228
98089
4ea0f5996bd5 (Fcall_process): Don't hold references to string data
Andreas Schwab <schwab@suse.de>
parents: 98083
diff changeset
229 register const unsigned char **new_argv;
296
558b874b5259 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
230 struct buffer *old = current_buffer;
10839
2e3eae2280eb (Fcall_process): Extend BUFFER arg so it can specify
Richard M. Stallman <rms@gnu.org>
parents: 10083
diff changeset
231 /* File to use for stderr in the child.
2e3eae2280eb (Fcall_process): Extend BUFFER arg so it can specify
Richard M. Stallman <rms@gnu.org>
parents: 10083
diff changeset
232 t means use same as standard output. */
2e3eae2280eb (Fcall_process): Extend BUFFER arg so it can specify
Richard M. Stallman <rms@gnu.org>
parents: 10083
diff changeset
233 Lisp_Object error_file;
5501
902cd7024cfa (syms_of_callproc) [MSDOS]: New lisp variable: binary-process.
Richard M. Stallman <rms@gnu.org>
parents: 5348
diff changeset
234 #ifdef MSDOS /* Demacs 1.1.1 91/10/16 HIRANO Satoshi */
902cd7024cfa (syms_of_callproc) [MSDOS]: New lisp variable: binary-process.
Richard M. Stallman <rms@gnu.org>
parents: 5348
diff changeset
235 char *outf, *tempfile;
902cd7024cfa (syms_of_callproc) [MSDOS]: New lisp variable: binary-process.
Richard M. Stallman <rms@gnu.org>
parents: 5348
diff changeset
236 int outfilefd;
902cd7024cfa (syms_of_callproc) [MSDOS]: New lisp variable: binary-process.
Richard M. Stallman <rms@gnu.org>
parents: 5348
diff changeset
237 #endif
17025
3c222a7edda1 Include charset.h and coding.h.
Karl Heuer <kwzh@gnu.org>
parents: 16659
diff changeset
238 struct coding_system process_coding; /* coding-system of process output */
3c222a7edda1 Include charset.h and coding.h.
Karl Heuer <kwzh@gnu.org>
parents: 16659
diff changeset
239 struct coding_system argument_coding; /* coding-system of arguments */
24931
6ccce3af0d2a (Fcall_process): Decide coding system for decoding
Richard M. Stallman <rms@gnu.org>
parents: 24920
diff changeset
240 /* Set to the return value of Ffind_operation_coding_system. */
6ccce3af0d2a (Fcall_process): Decide coding system for decoding
Richard M. Stallman <rms@gnu.org>
parents: 24920
diff changeset
241 Lisp_Object coding_systems;
6ccce3af0d2a (Fcall_process): Decide coding system for decoding
Richard M. Stallman <rms@gnu.org>
parents: 24920
diff changeset
242
6ccce3af0d2a (Fcall_process): Decide coding system for decoding
Richard M. Stallman <rms@gnu.org>
parents: 24920
diff changeset
243 /* Qt denotes that Ffind_operation_coding_system is not yet called. */
6ccce3af0d2a (Fcall_process): Decide coding system for decoding
Richard M. Stallman <rms@gnu.org>
parents: 24920
diff changeset
244 coding_systems = Qt;
17025
3c222a7edda1 Include charset.h and coding.h.
Karl Heuer <kwzh@gnu.org>
parents: 16659
diff changeset
245
40656
cdfd4d09b79a Update usage of CHECK_ macros (remove unused second argument).
Pavel Janík <Pavel@Janik.cz>
parents: 40114
diff changeset
246 CHECK_STRING (args[0]);
296
558b874b5259 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
247
10839
2e3eae2280eb (Fcall_process): Extend BUFFER arg so it can specify
Richard M. Stallman <rms@gnu.org>
parents: 10083
diff changeset
248 error_file = Qt;
2e3eae2280eb (Fcall_process): Extend BUFFER arg so it can specify
Richard M. Stallman <rms@gnu.org>
parents: 10083
diff changeset
249
5501
902cd7024cfa (syms_of_callproc) [MSDOS]: New lisp variable: binary-process.
Richard M. Stallman <rms@gnu.org>
parents: 5348
diff changeset
250 #ifndef subprocesses
902cd7024cfa (syms_of_callproc) [MSDOS]: New lisp variable: binary-process.
Richard M. Stallman <rms@gnu.org>
parents: 5348
diff changeset
251 /* Without asynchronous processes we cannot have BUFFER == 0. */
49600
23a1cea22d13 Trailing whitespace deleted.
Juanma Barranquero <lekktu@gmail.com>
parents: 47018
diff changeset
252 if (nargs >= 3
22639
8177901b437a (Fcall_process) [! subprocesses]: Balance parentheses in an if clause.
Eli Zaretskii <eliz@gnu.org>
parents: 22550
diff changeset
253 && (INTEGERP (CONSP (args[2]) ? XCAR (args[2]) : args[2])))
5501
902cd7024cfa (syms_of_callproc) [MSDOS]: New lisp variable: binary-process.
Richard M. Stallman <rms@gnu.org>
parents: 5348
diff changeset
254 error ("Operating system cannot handle asynchronous subprocesses");
902cd7024cfa (syms_of_callproc) [MSDOS]: New lisp variable: binary-process.
Richard M. Stallman <rms@gnu.org>
parents: 5348
diff changeset
255 #endif /* subprocesses */
902cd7024cfa (syms_of_callproc) [MSDOS]: New lisp variable: binary-process.
Richard M. Stallman <rms@gnu.org>
parents: 5348
diff changeset
256
24931
6ccce3af0d2a (Fcall_process): Decide coding system for decoding
Richard M. Stallman <rms@gnu.org>
parents: 24920
diff changeset
257 /* Decide the coding-system for giving arguments. */
17025
3c222a7edda1 Include charset.h and coding.h.
Karl Heuer <kwzh@gnu.org>
parents: 16659
diff changeset
258 {
3c222a7edda1 Include charset.h and coding.h.
Karl Heuer <kwzh@gnu.org>
parents: 16659
diff changeset
259 Lisp_Object val, *args2;
3c222a7edda1 Include charset.h and coding.h.
Karl Heuer <kwzh@gnu.org>
parents: 16659
diff changeset
260 int i;
3c222a7edda1 Include charset.h and coding.h.
Karl Heuer <kwzh@gnu.org>
parents: 16659
diff changeset
261
3c222a7edda1 Include charset.h and coding.h.
Karl Heuer <kwzh@gnu.org>
parents: 16659
diff changeset
262 /* If arguments are supplied, we may have to encode them. */
3c222a7edda1 Include charset.h and coding.h.
Karl Heuer <kwzh@gnu.org>
parents: 16659
diff changeset
263 if (nargs >= 5)
3c222a7edda1 Include charset.h and coding.h.
Karl Heuer <kwzh@gnu.org>
parents: 16659
diff changeset
264 {
20595
7d5ca0b58282 (Fcall_process): When deciding whether to encode args,
Richard M. Stallman <rms@gnu.org>
parents: 20525
diff changeset
265 int must_encode = 0;
90434
8c71fed372cf (Fcall_process): Sync with HEAD.
Kenichi Handa <handa@m17n.org>
parents: 90393
diff changeset
266 Lisp_Object coding_attrs;
20595
7d5ca0b58282 (Fcall_process): When deciding whether to encode args,
Richard M. Stallman <rms@gnu.org>
parents: 20525
diff changeset
267
20789
140b6fdd53d0 (Fcall_process): Test only args past args[4] for multibyteness.
Richard M. Stallman <rms@gnu.org>
parents: 20724
diff changeset
268 for (i = 4; i < nargs; i++)
40656
cdfd4d09b79a Update usage of CHECK_ macros (remove unused second argument).
Pavel Janík <Pavel@Janik.cz>
parents: 40114
diff changeset
269 CHECK_STRING (args[i]);
22940
3cfe86230c87 (Fcall_process): Check type of process cmd args earlier on.
Richard M. Stallman <rms@gnu.org>
parents: 22792
diff changeset
270
3cfe86230c87 (Fcall_process): Check type of process cmd args earlier on.
Richard M. Stallman <rms@gnu.org>
parents: 22792
diff changeset
271 for (i = 4; i < nargs; i++)
20595
7d5ca0b58282 (Fcall_process): When deciding whether to encode args,
Richard M. Stallman <rms@gnu.org>
parents: 20525
diff changeset
272 if (STRING_MULTIBYTE (args[i]))
7d5ca0b58282 (Fcall_process): When deciding whether to encode args,
Richard M. Stallman <rms@gnu.org>
parents: 20525
diff changeset
273 must_encode = 1;
7d5ca0b58282 (Fcall_process): When deciding whether to encode args,
Richard M. Stallman <rms@gnu.org>
parents: 20525
diff changeset
274
18651
982814f78d0d (Fcall_process): If enable-multibyte-characters is
Kenichi Handa <handa@m17n.org>
parents: 18539
diff changeset
275 if (!NILP (Vcoding_system_for_write))
982814f78d0d (Fcall_process): If enable-multibyte-characters is
Kenichi Handa <handa@m17n.org>
parents: 18539
diff changeset
276 val = Vcoding_system_for_write;
20595
7d5ca0b58282 (Fcall_process): When deciding whether to encode args,
Richard M. Stallman <rms@gnu.org>
parents: 20525
diff changeset
277 else if (! must_encode)
18651
982814f78d0d (Fcall_process): If enable-multibyte-characters is
Kenichi Handa <handa@m17n.org>
parents: 18539
diff changeset
278 val = Qnil;
982814f78d0d (Fcall_process): If enable-multibyte-characters is
Kenichi Handa <handa@m17n.org>
parents: 18539
diff changeset
279 else
17025
3c222a7edda1 Include charset.h and coding.h.
Karl Heuer <kwzh@gnu.org>
parents: 16659
diff changeset
280 {
3c222a7edda1 Include charset.h and coding.h.
Karl Heuer <kwzh@gnu.org>
parents: 16659
diff changeset
281 args2 = (Lisp_Object *) alloca ((nargs + 1) * sizeof *args2);
3c222a7edda1 Include charset.h and coding.h.
Karl Heuer <kwzh@gnu.org>
parents: 16659
diff changeset
282 args2[0] = Qcall_process;
3c222a7edda1 Include charset.h and coding.h.
Karl Heuer <kwzh@gnu.org>
parents: 16659
diff changeset
283 for (i = 0; i < nargs; i++) args2[i + 1] = args[i];
18539
8c13c54d52c8 Call Ffind_operation_coding_system.
Kenichi Handa <handa@m17n.org>
parents: 18494
diff changeset
284 coding_systems = Ffind_operation_coding_system (nargs + 1, args2);
18182
967f92654591 (Fcall_process): Pay attention to
Kenichi Handa <handa@m17n.org>
parents: 17729
diff changeset
285 if (CONSP (coding_systems))
25645
a14111a2a100 Use XCAR, XCDR, XFLOAT_DATA instead of explicit member access.
Ken Raeburn <raeburn@raeburn.org>
parents: 25522
diff changeset
286 val = XCDR (coding_systems);
18182
967f92654591 (Fcall_process): Pay attention to
Kenichi Handa <handa@m17n.org>
parents: 17729
diff changeset
287 else if (CONSP (Vdefault_process_coding_system))
25645
a14111a2a100 Use XCAR, XCDR, XFLOAT_DATA instead of explicit member access.
Ken Raeburn <raeburn@raeburn.org>
parents: 25522
diff changeset
288 val = XCDR (Vdefault_process_coding_system);
18651
982814f78d0d (Fcall_process): If enable-multibyte-characters is
Kenichi Handa <handa@m17n.org>
parents: 18539
diff changeset
289 else
982814f78d0d (Fcall_process): If enable-multibyte-characters is
Kenichi Handa <handa@m17n.org>
parents: 18539
diff changeset
290 val = Qnil;
17025
3c222a7edda1 Include charset.h and coding.h.
Karl Heuer <kwzh@gnu.org>
parents: 16659
diff changeset
291 }
90393
6592da24d351 (Fcall_process): Sync with HEAD.
Kenichi Handa <handa@m17n.org>
parents: 90389
diff changeset
292 val = coding_inherit_eol_type (val, Qnil);
17025
3c222a7edda1 Include charset.h and coding.h.
Karl Heuer <kwzh@gnu.org>
parents: 16659
diff changeset
293 setup_coding_system (Fcheck_coding_system (val), &argument_coding);
90434
8c71fed372cf (Fcall_process): Sync with HEAD.
Kenichi Handa <handa@m17n.org>
parents: 90393
diff changeset
294 coding_attrs = CODING_ID_ATTRS (argument_coding.id);
8c71fed372cf (Fcall_process): Sync with HEAD.
Kenichi Handa <handa@m17n.org>
parents: 90393
diff changeset
295 if (NILP (CODING_ATTR_ASCII_COMPAT (coding_attrs)))
8c71fed372cf (Fcall_process): Sync with HEAD.
Kenichi Handa <handa@m17n.org>
parents: 90393
diff changeset
296 {
8c71fed372cf (Fcall_process): Sync with HEAD.
Kenichi Handa <handa@m17n.org>
parents: 90393
diff changeset
297 /* We should not use an ASCII incompatible coding system. */
8c71fed372cf (Fcall_process): Sync with HEAD.
Kenichi Handa <handa@m17n.org>
parents: 90393
diff changeset
298 val = raw_text_coding_system (val);
8c71fed372cf (Fcall_process): Sync with HEAD.
Kenichi Handa <handa@m17n.org>
parents: 90393
diff changeset
299 setup_coding_system (val, &argument_coding);
8c71fed372cf (Fcall_process): Sync with HEAD.
Kenichi Handa <handa@m17n.org>
parents: 90393
diff changeset
300 }
17025
3c222a7edda1 Include charset.h and coding.h.
Karl Heuer <kwzh@gnu.org>
parents: 16659
diff changeset
301 }
3c222a7edda1 Include charset.h and coding.h.
Karl Heuer <kwzh@gnu.org>
parents: 16659
diff changeset
302 }
3c222a7edda1 Include charset.h and coding.h.
Karl Heuer <kwzh@gnu.org>
parents: 16659
diff changeset
303
948
928ed74adf4f Restored up-to-date version of this file from pogo. What is going on
Jim Blandy <jimb@redhat.com>
parents: 942
diff changeset
304 if (nargs >= 2 && ! NILP (args[1]))
928ed74adf4f Restored up-to-date version of this file from pogo. What is going on
Jim Blandy <jimb@redhat.com>
parents: 942
diff changeset
305 {
928ed74adf4f Restored up-to-date version of this file from pogo. What is going on
Jim Blandy <jimb@redhat.com>
parents: 942
diff changeset
306 infile = Fexpand_file_name (args[1], current_buffer->directory);
40656
cdfd4d09b79a Update usage of CHECK_ macros (remove unused second argument).
Pavel Janík <Pavel@Janik.cz>
parents: 40114
diff changeset
307 CHECK_STRING (infile);
948
928ed74adf4f Restored up-to-date version of this file from pogo. What is going on
Jim Blandy <jimb@redhat.com>
parents: 942
diff changeset
308 }
296
558b874b5259 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
309 else
2432
17a84e60603b New macros NULL_DEVICE and EXEC_SUFFIXES, to give the name of the
Jim Blandy <jimb@redhat.com>
parents: 2286
diff changeset
310 infile = build_string (NULL_DEVICE);
648
70b112526394 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 638
diff changeset
311
948
928ed74adf4f Restored up-to-date version of this file from pogo. What is going on
Jim Blandy <jimb@redhat.com>
parents: 942
diff changeset
312 if (nargs >= 3)
928ed74adf4f Restored up-to-date version of this file from pogo. What is going on
Jim Blandy <jimb@redhat.com>
parents: 942
diff changeset
313 {
10839
2e3eae2280eb (Fcall_process): Extend BUFFER arg so it can specify
Richard M. Stallman <rms@gnu.org>
parents: 10083
diff changeset
314 buffer = args[2];
2e3eae2280eb (Fcall_process): Extend BUFFER arg so it can specify
Richard M. Stallman <rms@gnu.org>
parents: 10083
diff changeset
315
2e3eae2280eb (Fcall_process): Extend BUFFER arg so it can specify
Richard M. Stallman <rms@gnu.org>
parents: 10083
diff changeset
316 /* If BUFFER is a list, its meaning is
2e3eae2280eb (Fcall_process): Extend BUFFER arg so it can specify
Richard M. Stallman <rms@gnu.org>
parents: 10083
diff changeset
317 (BUFFER-FOR-STDOUT FILE-FOR-STDERR). */
2e3eae2280eb (Fcall_process): Extend BUFFER arg so it can specify
Richard M. Stallman <rms@gnu.org>
parents: 10083
diff changeset
318 if (CONSP (buffer))
2e3eae2280eb (Fcall_process): Extend BUFFER arg so it can specify
Richard M. Stallman <rms@gnu.org>
parents: 10083
diff changeset
319 {
25645
a14111a2a100 Use XCAR, XCDR, XFLOAT_DATA instead of explicit member access.
Ken Raeburn <raeburn@raeburn.org>
parents: 25522
diff changeset
320 if (CONSP (XCDR (buffer)))
15440
87c6c9287f45 (Fcall_process): Handle t or nil as STDERR_FILE.
Richard M. Stallman <rms@gnu.org>
parents: 15236
diff changeset
321 {
15473
cdf40972804f (Fcall_process): Fix previous change.
Richard M. Stallman <rms@gnu.org>
parents: 15440
diff changeset
322 Lisp_Object stderr_file;
25645
a14111a2a100 Use XCAR, XCDR, XFLOAT_DATA instead of explicit member access.
Ken Raeburn <raeburn@raeburn.org>
parents: 25522
diff changeset
323 stderr_file = XCAR (XCDR (buffer));
15440
87c6c9287f45 (Fcall_process): Handle t or nil as STDERR_FILE.
Richard M. Stallman <rms@gnu.org>
parents: 15236
diff changeset
324
87c6c9287f45 (Fcall_process): Handle t or nil as STDERR_FILE.
Richard M. Stallman <rms@gnu.org>
parents: 15236
diff changeset
325 if (NILP (stderr_file) || EQ (Qt, stderr_file))
87c6c9287f45 (Fcall_process): Handle t or nil as STDERR_FILE.
Richard M. Stallman <rms@gnu.org>
parents: 15236
diff changeset
326 error_file = stderr_file;
87c6c9287f45 (Fcall_process): Handle t or nil as STDERR_FILE.
Richard M. Stallman <rms@gnu.org>
parents: 15236
diff changeset
327 else
87c6c9287f45 (Fcall_process): Handle t or nil as STDERR_FILE.
Richard M. Stallman <rms@gnu.org>
parents: 15236
diff changeset
328 error_file = Fexpand_file_name (stderr_file, Qnil);
87c6c9287f45 (Fcall_process): Handle t or nil as STDERR_FILE.
Richard M. Stallman <rms@gnu.org>
parents: 15236
diff changeset
329 }
87c6c9287f45 (Fcall_process): Handle t or nil as STDERR_FILE.
Richard M. Stallman <rms@gnu.org>
parents: 15236
diff changeset
330
25645
a14111a2a100 Use XCAR, XCDR, XFLOAT_DATA instead of explicit member access.
Ken Raeburn <raeburn@raeburn.org>
parents: 25522
diff changeset
331 buffer = XCAR (buffer);
10839
2e3eae2280eb (Fcall_process): Extend BUFFER arg so it can specify
Richard M. Stallman <rms@gnu.org>
parents: 10083
diff changeset
332 }
296
558b874b5259 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
333
10839
2e3eae2280eb (Fcall_process): Extend BUFFER arg so it can specify
Richard M. Stallman <rms@gnu.org>
parents: 10083
diff changeset
334 if (!(EQ (buffer, Qnil)
2e3eae2280eb (Fcall_process): Extend BUFFER arg so it can specify
Richard M. Stallman <rms@gnu.org>
parents: 10083
diff changeset
335 || EQ (buffer, Qt)
22550
4ec5c343db1f (Fcall_process): Handle third argument BUFFER
Richard M. Stallman <rms@gnu.org>
parents: 22373
diff changeset
336 || INTEGERP (buffer)))
948
928ed74adf4f Restored up-to-date version of this file from pogo. What is going on
Jim Blandy <jimb@redhat.com>
parents: 942
diff changeset
337 {
10839
2e3eae2280eb (Fcall_process): Extend BUFFER arg so it can specify
Richard M. Stallman <rms@gnu.org>
parents: 10083
diff changeset
338 Lisp_Object spec_buffer;
2e3eae2280eb (Fcall_process): Extend BUFFER arg so it can specify
Richard M. Stallman <rms@gnu.org>
parents: 10083
diff changeset
339 spec_buffer = buffer;
20823
146647357199 (Fcall_process): Allow creating a new buffer for the output.
Richard M. Stallman <rms@gnu.org>
parents: 20789
diff changeset
340 buffer = Fget_buffer_create (buffer);
10839
2e3eae2280eb (Fcall_process): Extend BUFFER arg so it can specify
Richard M. Stallman <rms@gnu.org>
parents: 10083
diff changeset
341 /* Mention the buffer name for a better error message. */
2e3eae2280eb (Fcall_process): Extend BUFFER arg so it can specify
Richard M. Stallman <rms@gnu.org>
parents: 10083
diff changeset
342 if (NILP (buffer))
40656
cdfd4d09b79a Update usage of CHECK_ macros (remove unused second argument).
Pavel Janík <Pavel@Janik.cz>
parents: 40114
diff changeset
343 CHECK_BUFFER (spec_buffer);
cdfd4d09b79a Update usage of CHECK_ macros (remove unused second argument).
Pavel Janík <Pavel@Janik.cz>
parents: 40114
diff changeset
344 CHECK_BUFFER (buffer);
948
928ed74adf4f Restored up-to-date version of this file from pogo. What is going on
Jim Blandy <jimb@redhat.com>
parents: 942
diff changeset
345 }
928ed74adf4f Restored up-to-date version of this file from pogo. What is going on
Jim Blandy <jimb@redhat.com>
parents: 942
diff changeset
346 }
49600
23a1cea22d13 Trailing whitespace deleted.
Juanma Barranquero <lekktu@gmail.com>
parents: 47018
diff changeset
347 else
948
928ed74adf4f Restored up-to-date version of this file from pogo. What is going on
Jim Blandy <jimb@redhat.com>
parents: 942
diff changeset
348 buffer = Qnil;
928ed74adf4f Restored up-to-date version of this file from pogo. What is going on
Jim Blandy <jimb@redhat.com>
parents: 942
diff changeset
349
1678
62ecf0c5b54c Give subprocess creation a way to find a valid current directory
Jim Blandy <jimb@redhat.com>
parents: 1596
diff changeset
350 /* Make sure that the child will be able to chdir to the current
62ecf0c5b54c Give subprocess creation a way to find a valid current directory
Jim Blandy <jimb@redhat.com>
parents: 1596
diff changeset
351 buffer's current directory, or its unhandled equivalent. We
62ecf0c5b54c Give subprocess creation a way to find a valid current directory
Jim Blandy <jimb@redhat.com>
parents: 1596
diff changeset
352 can't just have the child check for an error when it does the
62ecf0c5b54c Give subprocess creation a way to find a valid current directory
Jim Blandy <jimb@redhat.com>
parents: 1596
diff changeset
353 chdir, since it's in a vfork.
62ecf0c5b54c Give subprocess creation a way to find a valid current directory
Jim Blandy <jimb@redhat.com>
parents: 1596
diff changeset
354
62ecf0c5b54c Give subprocess creation a way to find a valid current directory
Jim Blandy <jimb@redhat.com>
parents: 1596
diff changeset
355 We have to GCPRO around this because Fexpand_file_name,
62ecf0c5b54c Give subprocess creation a way to find a valid current directory
Jim Blandy <jimb@redhat.com>
parents: 1596
diff changeset
356 Funhandled_file_name_directory, and Ffile_accessible_directory_p
62ecf0c5b54c Give subprocess creation a way to find a valid current directory
Jim Blandy <jimb@redhat.com>
parents: 1596
diff changeset
357 might call a file name handling function. The argument list is
62ecf0c5b54c Give subprocess creation a way to find a valid current directory
Jim Blandy <jimb@redhat.com>
parents: 1596
diff changeset
358 protected by the caller, so all we really have to worry about is
62ecf0c5b54c Give subprocess creation a way to find a valid current directory
Jim Blandy <jimb@redhat.com>
parents: 1596
diff changeset
359 buffer. */
62ecf0c5b54c Give subprocess creation a way to find a valid current directory
Jim Blandy <jimb@redhat.com>
parents: 1596
diff changeset
360 {
68389
ee72dfb5a3cd (Fcall_process): GCPRO error_file. Encode infile,
Kenichi Handa <handa@m17n.org>
parents: 67989
diff changeset
361 struct gcpro gcpro1, gcpro2, gcpro3, gcpro4;
1678
62ecf0c5b54c Give subprocess creation a way to find a valid current directory
Jim Blandy <jimb@redhat.com>
parents: 1596
diff changeset
362
62ecf0c5b54c Give subprocess creation a way to find a valid current directory
Jim Blandy <jimb@redhat.com>
parents: 1596
diff changeset
363 current_dir = current_buffer->directory;
62ecf0c5b54c Give subprocess creation a way to find a valid current directory
Jim Blandy <jimb@redhat.com>
parents: 1596
diff changeset
364
68389
ee72dfb5a3cd (Fcall_process): GCPRO error_file. Encode infile,
Kenichi Handa <handa@m17n.org>
parents: 67989
diff changeset
365 GCPRO4 (infile, buffer, current_dir, error_file);
1678
62ecf0c5b54c Give subprocess creation a way to find a valid current directory
Jim Blandy <jimb@redhat.com>
parents: 1596
diff changeset
366
91551
f14242124fd7 * process.c (Fstart_process):
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 91367
diff changeset
367 current_dir = Funhandled_file_name_directory (current_dir);
f14242124fd7 * process.c (Fstart_process):
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 91367
diff changeset
368 if (NILP (current_dir))
f14242124fd7 * process.c (Fstart_process):
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 91367
diff changeset
369 /* If the file name handler says that current_dir is unreachable, use
f14242124fd7 * process.c (Fstart_process):
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 91367
diff changeset
370 a sensible default. */
f14242124fd7 * process.c (Fstart_process):
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 91367
diff changeset
371 current_dir = build_string ("~/");
f14242124fd7 * process.c (Fstart_process):
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 91367
diff changeset
372 current_dir = expand_and_dir_to_file (current_dir, Qnil);
98083
78f10c77413c (Fcall_process): Canonicalize current directory name.
Chong Yidong <cyd@stupidchicken.com>
parents: 97142
diff changeset
373 current_dir = Ffile_name_as_directory (current_dir);
78f10c77413c (Fcall_process): Canonicalize current directory name.
Chong Yidong <cyd@stupidchicken.com>
parents: 97142
diff changeset
374
1678
62ecf0c5b54c Give subprocess creation a way to find a valid current directory
Jim Blandy <jimb@redhat.com>
parents: 1596
diff changeset
375 if (NILP (Ffile_accessible_directory_p (current_dir)))
62ecf0c5b54c Give subprocess creation a way to find a valid current directory
Jim Blandy <jimb@redhat.com>
parents: 1596
diff changeset
376 report_file_error ("Setting current directory",
62ecf0c5b54c Give subprocess creation a way to find a valid current directory
Jim Blandy <jimb@redhat.com>
parents: 1596
diff changeset
377 Fcons (current_buffer->directory, Qnil));
62ecf0c5b54c Give subprocess creation a way to find a valid current directory
Jim Blandy <jimb@redhat.com>
parents: 1596
diff changeset
378
68389
ee72dfb5a3cd (Fcall_process): GCPRO error_file. Encode infile,
Kenichi Handa <handa@m17n.org>
parents: 67989
diff changeset
379 if (STRING_MULTIBYTE (infile))
ee72dfb5a3cd (Fcall_process): GCPRO error_file. Encode infile,
Kenichi Handa <handa@m17n.org>
parents: 67989
diff changeset
380 infile = ENCODE_FILE (infile);
ee72dfb5a3cd (Fcall_process): GCPRO error_file. Encode infile,
Kenichi Handa <handa@m17n.org>
parents: 67989
diff changeset
381 if (STRING_MULTIBYTE (current_dir))
ee72dfb5a3cd (Fcall_process): GCPRO error_file. Encode infile,
Kenichi Handa <handa@m17n.org>
parents: 67989
diff changeset
382 current_dir = ENCODE_FILE (current_dir);
ee72dfb5a3cd (Fcall_process): GCPRO error_file. Encode infile,
Kenichi Handa <handa@m17n.org>
parents: 67989
diff changeset
383 if (STRINGP (error_file) && STRING_MULTIBYTE (error_file))
ee72dfb5a3cd (Fcall_process): GCPRO error_file. Encode infile,
Kenichi Handa <handa@m17n.org>
parents: 67989
diff changeset
384 error_file = ENCODE_FILE (error_file);
1678
62ecf0c5b54c Give subprocess creation a way to find a valid current directory
Jim Blandy <jimb@redhat.com>
parents: 1596
diff changeset
385 UNGCPRO;
62ecf0c5b54c Give subprocess creation a way to find a valid current directory
Jim Blandy <jimb@redhat.com>
parents: 1596
diff changeset
386 }
62ecf0c5b54c Give subprocess creation a way to find a valid current directory
Jim Blandy <jimb@redhat.com>
parents: 1596
diff changeset
387
57473
fb60234070b0 (Fcall_process): Simplify handling of display arg.
Kim F. Storm <storm@cua.dk>
parents: 57290
diff changeset
388 display_p = INTERACTIVE && nargs >= 4 && !NILP (args[3]);
296
558b874b5259 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
389
46370
40db0673e6f0 Most uses of XSTRING combined with STRING_BYTES or indirection changed to
Ken Raeburn <raeburn@raeburn.org>
parents: 46293
diff changeset
390 filefd = emacs_open (SDATA (infile), O_RDONLY, 0);
6391
d4fe8a853557 (Fcall_process): GCPRO some things.
Karl Heuer <kwzh@gnu.org>
parents: 6275
diff changeset
391 if (filefd < 0)
d4fe8a853557 (Fcall_process): GCPRO some things.
Karl Heuer <kwzh@gnu.org>
parents: 6275
diff changeset
392 {
68389
ee72dfb5a3cd (Fcall_process): GCPRO error_file. Encode infile,
Kenichi Handa <handa@m17n.org>
parents: 67989
diff changeset
393 infile = DECODE_FILE (infile);
6391
d4fe8a853557 (Fcall_process): GCPRO some things.
Karl Heuer <kwzh@gnu.org>
parents: 6275
diff changeset
394 report_file_error ("Opening process input file", Fcons (infile, Qnil));
d4fe8a853557 (Fcall_process): GCPRO some things.
Karl Heuer <kwzh@gnu.org>
parents: 6275
diff changeset
395 }
d4fe8a853557 (Fcall_process): GCPRO some things.
Karl Heuer <kwzh@gnu.org>
parents: 6275
diff changeset
396 /* Search for program; barf if not found. */
d4fe8a853557 (Fcall_process): GCPRO some things.
Karl Heuer <kwzh@gnu.org>
parents: 6275
diff changeset
397 {
d4fe8a853557 (Fcall_process): GCPRO some things.
Karl Heuer <kwzh@gnu.org>
parents: 6275
diff changeset
398 struct gcpro gcpro1;
d4fe8a853557 (Fcall_process): GCPRO some things.
Karl Heuer <kwzh@gnu.org>
parents: 6275
diff changeset
399
d4fe8a853557 (Fcall_process): GCPRO some things.
Karl Heuer <kwzh@gnu.org>
parents: 6275
diff changeset
400 GCPRO1 (current_dir);
45002
f1eb7c3e1e04 (Fcall_process): Update call to openp.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 44992
diff changeset
401 openp (Vexec_path, args[0], Vexec_suffixes, &path, make_number (X_OK));
6391
d4fe8a853557 (Fcall_process): GCPRO some things.
Karl Heuer <kwzh@gnu.org>
parents: 6275
diff changeset
402 UNGCPRO;
d4fe8a853557 (Fcall_process): GCPRO some things.
Karl Heuer <kwzh@gnu.org>
parents: 6275
diff changeset
403 }
d4fe8a853557 (Fcall_process): GCPRO some things.
Karl Heuer <kwzh@gnu.org>
parents: 6275
diff changeset
404 if (NILP (path))
d4fe8a853557 (Fcall_process): GCPRO some things.
Karl Heuer <kwzh@gnu.org>
parents: 6275
diff changeset
405 {
26088
b7aa6ac26872 Add support for large files, 64-bit Solaris, system locale codings.
Paul Eggert <eggert@twinsun.com>
parents: 25767
diff changeset
406 emacs_close (filefd);
6391
d4fe8a853557 (Fcall_process): GCPRO some things.
Karl Heuer <kwzh@gnu.org>
parents: 6275
diff changeset
407 report_file_error ("Searching for program", Fcons (args[0], Qnil));
d4fe8a853557 (Fcall_process): GCPRO some things.
Karl Heuer <kwzh@gnu.org>
parents: 6275
diff changeset
408 }
47018
101eb25eab6d (Fcall_process): Remove /: from program name.
Richard M. Stallman <rms@gnu.org>
parents: 46626
diff changeset
409
101eb25eab6d (Fcall_process): Remove /: from program name.
Richard M. Stallman <rms@gnu.org>
parents: 46626
diff changeset
410 /* If program file name starts with /: for quoting a magic name,
101eb25eab6d (Fcall_process): Remove /: from program name.
Richard M. Stallman <rms@gnu.org>
parents: 46626
diff changeset
411 discard that. */
101eb25eab6d (Fcall_process): Remove /: from program name.
Richard M. Stallman <rms@gnu.org>
parents: 46626
diff changeset
412 if (SBYTES (path) > 2 && SREF (path, 0) == '/'
101eb25eab6d (Fcall_process): Remove /: from program name.
Richard M. Stallman <rms@gnu.org>
parents: 46626
diff changeset
413 && SREF (path, 1) == ':')
101eb25eab6d (Fcall_process): Remove /: from program name.
Richard M. Stallman <rms@gnu.org>
parents: 46626
diff changeset
414 path = Fsubstring (path, make_number (2), Qnil);
101eb25eab6d (Fcall_process): Remove /: from program name.
Richard M. Stallman <rms@gnu.org>
parents: 46626
diff changeset
415
98089
4ea0f5996bd5 (Fcall_process): Don't hold references to string data
Andreas Schwab <schwab@suse.de>
parents: 98083
diff changeset
416 new_argv = (const unsigned char **)
4ea0f5996bd5 (Fcall_process): Don't hold references to string data
Andreas Schwab <schwab@suse.de>
parents: 98083
diff changeset
417 alloca (max (2, nargs - 2) * sizeof (char *));
20230
ad33fb40e5e7 (Fcall_process): GCPRO infile, buffer, and
Kenichi Handa <handa@m17n.org>
parents: 20041
diff changeset
418 if (nargs > 4)
ad33fb40e5e7 (Fcall_process): GCPRO infile, buffer, and
Kenichi Handa <handa@m17n.org>
parents: 20041
diff changeset
419 {
ad33fb40e5e7 (Fcall_process): GCPRO infile, buffer, and
Kenichi Handa <handa@m17n.org>
parents: 20041
diff changeset
420 register int i;
29000
f5c7d80ed4de (Fcall_process): Always encode an argument string if
Kenichi Handa <handa@m17n.org>
parents: 28914
diff changeset
421 struct gcpro gcpro1, gcpro2, gcpro3;
17025
3c222a7edda1 Include charset.h and coding.h.
Karl Heuer <kwzh@gnu.org>
parents: 16659
diff changeset
422
29000
f5c7d80ed4de (Fcall_process): Always encode an argument string if
Kenichi Handa <handa@m17n.org>
parents: 28914
diff changeset
423 GCPRO3 (infile, buffer, current_dir);
f5c7d80ed4de (Fcall_process): Always encode an argument string if
Kenichi Handa <handa@m17n.org>
parents: 28914
diff changeset
424 argument_coding.dst_multibyte = 0;
f5c7d80ed4de (Fcall_process): Always encode an argument string if
Kenichi Handa <handa@m17n.org>
parents: 28914
diff changeset
425 for (i = 4; i < nargs; i++)
f5c7d80ed4de (Fcall_process): Always encode an argument string if
Kenichi Handa <handa@m17n.org>
parents: 28914
diff changeset
426 {
f5c7d80ed4de (Fcall_process): Always encode an argument string if
Kenichi Handa <handa@m17n.org>
parents: 28914
diff changeset
427 argument_coding.src_multibyte = STRING_MULTIBYTE (args[i]);
f5c7d80ed4de (Fcall_process): Always encode an argument string if
Kenichi Handa <handa@m17n.org>
parents: 28914
diff changeset
428 if (CODING_REQUIRE_ENCODING (&argument_coding))
88356
5ace79aaf5ad Include "character.h" instead of "charset.h".
Kenichi Handa <handa@m17n.org>
parents: 41861
diff changeset
429 /* We must encode this argument. */
5ace79aaf5ad Include "character.h" instead of "charset.h".
Kenichi Handa <handa@m17n.org>
parents: 41861
diff changeset
430 args[i] = encode_coding_string (&argument_coding, args[i], 1);
20230
ad33fb40e5e7 (Fcall_process): GCPRO infile, buffer, and
Kenichi Handa <handa@m17n.org>
parents: 20041
diff changeset
431 }
29000
f5c7d80ed4de (Fcall_process): Always encode an argument string if
Kenichi Handa <handa@m17n.org>
parents: 28914
diff changeset
432 UNGCPRO;
98089
4ea0f5996bd5 (Fcall_process): Don't hold references to string data
Andreas Schwab <schwab@suse.de>
parents: 98083
diff changeset
433 for (i = 4; i < nargs; i++)
4ea0f5996bd5 (Fcall_process): Don't hold references to string data
Andreas Schwab <schwab@suse.de>
parents: 98083
diff changeset
434 new_argv[i - 3] = SDATA (args[i]);
4ea0f5996bd5 (Fcall_process): Don't hold references to string data
Andreas Schwab <schwab@suse.de>
parents: 98083
diff changeset
435 new_argv[i - 3] = 0;
20230
ad33fb40e5e7 (Fcall_process): GCPRO infile, buffer, and
Kenichi Handa <handa@m17n.org>
parents: 20041
diff changeset
436 }
20448
afef187a070b (Fcall_process): Don't clobber new_argv[0]
Karl Heuer <kwzh@gnu.org>
parents: 20436
diff changeset
437 else
afef187a070b (Fcall_process): Don't clobber new_argv[0]
Karl Heuer <kwzh@gnu.org>
parents: 20436
diff changeset
438 new_argv[1] = 0;
98089
4ea0f5996bd5 (Fcall_process): Don't hold references to string data
Andreas Schwab <schwab@suse.de>
parents: 98083
diff changeset
439 new_argv[0] = SDATA (path);
296
558b874b5259 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
440
5501
902cd7024cfa (syms_of_callproc) [MSDOS]: New lisp variable: binary-process.
Richard M. Stallman <rms@gnu.org>
parents: 5348
diff changeset
441 #ifdef MSDOS /* MW, July 1993 */
23462
aaad8461ff34 (Fcall_process): Use $TMPDIR instead of trying $TMP
Eli Zaretskii <eliz@gnu.org>
parents: 23079
diff changeset
442 if ((outf = egetenv ("TMPDIR")))
5501
902cd7024cfa (syms_of_callproc) [MSDOS]: New lisp variable: binary-process.
Richard M. Stallman <rms@gnu.org>
parents: 5348
diff changeset
443 strcpy (tempfile = alloca (strlen (outf) + 20), outf);
902cd7024cfa (syms_of_callproc) [MSDOS]: New lisp variable: binary-process.
Richard M. Stallman <rms@gnu.org>
parents: 5348
diff changeset
444 else
902cd7024cfa (syms_of_callproc) [MSDOS]: New lisp variable: binary-process.
Richard M. Stallman <rms@gnu.org>
parents: 5348
diff changeset
445 {
902cd7024cfa (syms_of_callproc) [MSDOS]: New lisp variable: binary-process.
Richard M. Stallman <rms@gnu.org>
parents: 5348
diff changeset
446 tempfile = alloca (20);
902cd7024cfa (syms_of_callproc) [MSDOS]: New lisp variable: binary-process.
Richard M. Stallman <rms@gnu.org>
parents: 5348
diff changeset
447 *tempfile = '\0';
902cd7024cfa (syms_of_callproc) [MSDOS]: New lisp variable: binary-process.
Richard M. Stallman <rms@gnu.org>
parents: 5348
diff changeset
448 }
902cd7024cfa (syms_of_callproc) [MSDOS]: New lisp variable: binary-process.
Richard M. Stallman <rms@gnu.org>
parents: 5348
diff changeset
449 dostounix_filename (tempfile);
49600
23a1cea22d13 Trailing whitespace deleted.
Juanma Barranquero <lekktu@gmail.com>
parents: 47018
diff changeset
450 if (*tempfile == '\0' || tempfile[strlen (tempfile) - 1] != '/')
5501
902cd7024cfa (syms_of_callproc) [MSDOS]: New lisp variable: binary-process.
Richard M. Stallman <rms@gnu.org>
parents: 5348
diff changeset
451 strcat (tempfile, "/");
902cd7024cfa (syms_of_callproc) [MSDOS]: New lisp variable: binary-process.
Richard M. Stallman <rms@gnu.org>
parents: 5348
diff changeset
452 strcat (tempfile, "detmp.XXX");
902cd7024cfa (syms_of_callproc) [MSDOS]: New lisp variable: binary-process.
Richard M. Stallman <rms@gnu.org>
parents: 5348
diff changeset
453 mktemp (tempfile);
902cd7024cfa (syms_of_callproc) [MSDOS]: New lisp variable: binary-process.
Richard M. Stallman <rms@gnu.org>
parents: 5348
diff changeset
454
902cd7024cfa (syms_of_callproc) [MSDOS]: New lisp variable: binary-process.
Richard M. Stallman <rms@gnu.org>
parents: 5348
diff changeset
455 outfilefd = creat (tempfile, S_IREAD | S_IWRITE);
902cd7024cfa (syms_of_callproc) [MSDOS]: New lisp variable: binary-process.
Richard M. Stallman <rms@gnu.org>
parents: 5348
diff changeset
456 if (outfilefd < 0)
902cd7024cfa (syms_of_callproc) [MSDOS]: New lisp variable: binary-process.
Richard M. Stallman <rms@gnu.org>
parents: 5348
diff changeset
457 {
26088
b7aa6ac26872 Add support for large files, 64-bit Solaris, system locale codings.
Paul Eggert <eggert@twinsun.com>
parents: 25767
diff changeset
458 emacs_close (filefd);
15610
b43e16d8ab5b (Fcall_process) [MSDOS]:
Miles Bader <miles@gnu.org>
parents: 15473
diff changeset
459 report_file_error ("Opening process output file",
b43e16d8ab5b (Fcall_process) [MSDOS]:
Miles Bader <miles@gnu.org>
parents: 15473
diff changeset
460 Fcons (build_string (tempfile), Qnil));
5501
902cd7024cfa (syms_of_callproc) [MSDOS]: New lisp variable: binary-process.
Richard M. Stallman <rms@gnu.org>
parents: 5348
diff changeset
461 }
15610
b43e16d8ab5b (Fcall_process) [MSDOS]:
Miles Bader <miles@gnu.org>
parents: 15473
diff changeset
462 fd[0] = filefd;
13719
660032b84b23 (Fcall_process) [MSDOS]: Support redirection of
Karl Heuer <kwzh@gnu.org>
parents: 12854
diff changeset
463 fd[1] = outfilefd;
15610
b43e16d8ab5b (Fcall_process) [MSDOS]:
Miles Bader <miles@gnu.org>
parents: 15473
diff changeset
464 #endif /* MSDOS */
5501
902cd7024cfa (syms_of_callproc) [MSDOS]: New lisp variable: binary-process.
Richard M. Stallman <rms@gnu.org>
parents: 5348
diff changeset
465
9138
6c814eb4d892 (Fcall_process, child_setup, getenv_internal): Use type test macros.
Karl Heuer <kwzh@gnu.org>
parents: 8853
diff changeset
466 if (INTEGERP (buffer))
26088
b7aa6ac26872 Add support for large files, 64-bit Solaris, system locale codings.
Paul Eggert <eggert@twinsun.com>
parents: 25767
diff changeset
467 fd[1] = emacs_open (NULL_DEVICE, O_WRONLY, 0), fd[0] = -1;
296
558b874b5259 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
468 else
558b874b5259 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
469 {
5501
902cd7024cfa (syms_of_callproc) [MSDOS]: New lisp variable: binary-process.
Richard M. Stallman <rms@gnu.org>
parents: 5348
diff changeset
470 #ifndef MSDOS
87732
d3276439c0d3 (Fcall_process): Fix previous change.
Dan Nicolaescu <dann@ics.uci.edu>
parents: 87730
diff changeset
471 errno = 0;
d3276439c0d3 (Fcall_process): Fix previous change.
Dan Nicolaescu <dann@ics.uci.edu>
parents: 87730
diff changeset
472 if (pipe (fd) == -1)
d3276439c0d3 (Fcall_process): Fix previous change.
Dan Nicolaescu <dann@ics.uci.edu>
parents: 87730
diff changeset
473 {
d3276439c0d3 (Fcall_process): Fix previous change.
Dan Nicolaescu <dann@ics.uci.edu>
parents: 87730
diff changeset
474 emacs_close (filefd);
d3276439c0d3 (Fcall_process): Fix previous change.
Dan Nicolaescu <dann@ics.uci.edu>
parents: 87730
diff changeset
475 report_file_error ("Creating process pipe", Qnil);
d3276439c0d3 (Fcall_process): Fix previous change.
Dan Nicolaescu <dann@ics.uci.edu>
parents: 87730
diff changeset
476 }
25522
c675d8210bda (call-process) [macintosh]: Call mac_run_command in
Richard M. Stallman <rms@gnu.org>
parents: 25521
diff changeset
477 #endif
296
558b874b5259 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
478 }
558b874b5259 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
479
558b874b5259 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
480 {
558b874b5259 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
481 /* child_setup must clobber environ in systems with true vfork.
558b874b5259 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
482 Protect it from permanent change. */
558b874b5259 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
483 register char **save_environ = environ;
558b874b5259 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
484 register int fd1 = fd[1];
10839
2e3eae2280eb (Fcall_process): Extend BUFFER arg so it can specify
Richard M. Stallman <rms@gnu.org>
parents: 10083
diff changeset
485 int fd_error = fd1;
296
558b874b5259 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
486
558b874b5259 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
487 #if 0 /* Some systems don't have sigblock. */
638
40b255f55df3 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 624
diff changeset
488 mask = sigblock (sigmask (SIGCHLD));
296
558b874b5259 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
489 #endif
558b874b5259 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
490
558b874b5259 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
491 /* Record that we're about to create a synchronous process. */
558b874b5259 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
492 synch_process_alive = 1;
558b874b5259 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
493
4977
81c44a01ddda (Fcall_process): Clear synch_process_death and
Richard M. Stallman <rms@gnu.org>
parents: 4701
diff changeset
494 /* These vars record information from process termination.
81c44a01ddda (Fcall_process): Clear synch_process_death and
Richard M. Stallman <rms@gnu.org>
parents: 4701
diff changeset
495 Clear them now before process can possibly terminate,
81c44a01ddda (Fcall_process): Clear synch_process_death and
Richard M. Stallman <rms@gnu.org>
parents: 4701
diff changeset
496 to avoid timing error if process terminates soon. */
81c44a01ddda (Fcall_process): Clear synch_process_death and
Richard M. Stallman <rms@gnu.org>
parents: 4701
diff changeset
497 synch_process_death = 0;
81c44a01ddda (Fcall_process): Clear synch_process_death and
Richard M. Stallman <rms@gnu.org>
parents: 4701
diff changeset
498 synch_process_retcode = 0;
53712
659b9b404c02 Define synch_process_termsig.
Jan Djärv <jan.h.d@swipnet.se>
parents: 52401
diff changeset
499 synch_process_termsig = 0;
4977
81c44a01ddda (Fcall_process): Clear synch_process_death and
Richard M. Stallman <rms@gnu.org>
parents: 4701
diff changeset
500
10839
2e3eae2280eb (Fcall_process): Extend BUFFER arg so it can specify
Richard M. Stallman <rms@gnu.org>
parents: 10083
diff changeset
501 if (NILP (error_file))
26088
b7aa6ac26872 Add support for large files, 64-bit Solaris, system locale codings.
Paul Eggert <eggert@twinsun.com>
parents: 25767
diff changeset
502 fd_error = emacs_open (NULL_DEVICE, O_WRONLY, 0);
10839
2e3eae2280eb (Fcall_process): Extend BUFFER arg so it can specify
Richard M. Stallman <rms@gnu.org>
parents: 10083
diff changeset
503 else if (STRINGP (error_file))
2e3eae2280eb (Fcall_process): Extend BUFFER arg so it can specify
Richard M. Stallman <rms@gnu.org>
parents: 10083
diff changeset
504 {
2e3eae2280eb (Fcall_process): Extend BUFFER arg so it can specify
Richard M. Stallman <rms@gnu.org>
parents: 10083
diff changeset
505 #ifdef DOS_NT
46370
40db0673e6f0 Most uses of XSTRING combined with STRING_BYTES or indirection changed to
Ken Raeburn <raeburn@raeburn.org>
parents: 46293
diff changeset
506 fd_error = emacs_open (SDATA (error_file),
26088
b7aa6ac26872 Add support for large files, 64-bit Solaris, system locale codings.
Paul Eggert <eggert@twinsun.com>
parents: 25767
diff changeset
507 O_WRONLY | O_TRUNC | O_CREAT | O_TEXT,
b7aa6ac26872 Add support for large files, 64-bit Solaris, system locale codings.
Paul Eggert <eggert@twinsun.com>
parents: 25767
diff changeset
508 S_IREAD | S_IWRITE);
10839
2e3eae2280eb (Fcall_process): Extend BUFFER arg so it can specify
Richard M. Stallman <rms@gnu.org>
parents: 10083
diff changeset
509 #else /* not DOS_NT */
46370
40db0673e6f0 Most uses of XSTRING combined with STRING_BYTES or indirection changed to
Ken Raeburn <raeburn@raeburn.org>
parents: 46293
diff changeset
510 fd_error = creat (SDATA (error_file), 0666);
10839
2e3eae2280eb (Fcall_process): Extend BUFFER arg so it can specify
Richard M. Stallman <rms@gnu.org>
parents: 10083
diff changeset
511 #endif /* not DOS_NT */
2e3eae2280eb (Fcall_process): Extend BUFFER arg so it can specify
Richard M. Stallman <rms@gnu.org>
parents: 10083
diff changeset
512 }
2e3eae2280eb (Fcall_process): Extend BUFFER arg so it can specify
Richard M. Stallman <rms@gnu.org>
parents: 10083
diff changeset
513
2e3eae2280eb (Fcall_process): Extend BUFFER arg so it can specify
Richard M. Stallman <rms@gnu.org>
parents: 10083
diff changeset
514 if (fd_error < 0)
2e3eae2280eb (Fcall_process): Extend BUFFER arg so it can specify
Richard M. Stallman <rms@gnu.org>
parents: 10083
diff changeset
515 {
26088
b7aa6ac26872 Add support for large files, 64-bit Solaris, system locale codings.
Paul Eggert <eggert@twinsun.com>
parents: 25767
diff changeset
516 emacs_close (filefd);
15610
b43e16d8ab5b (Fcall_process) [MSDOS]:
Miles Bader <miles@gnu.org>
parents: 15473
diff changeset
517 if (fd[0] != filefd)
26088
b7aa6ac26872 Add support for large files, 64-bit Solaris, system locale codings.
Paul Eggert <eggert@twinsun.com>
parents: 25767
diff changeset
518 emacs_close (fd[0]);
10839
2e3eae2280eb (Fcall_process): Extend BUFFER arg so it can specify
Richard M. Stallman <rms@gnu.org>
parents: 10083
diff changeset
519 if (fd1 >= 0)
26088
b7aa6ac26872 Add support for large files, 64-bit Solaris, system locale codings.
Paul Eggert <eggert@twinsun.com>
parents: 25767
diff changeset
520 emacs_close (fd1);
15610
b43e16d8ab5b (Fcall_process) [MSDOS]:
Miles Bader <miles@gnu.org>
parents: 15473
diff changeset
521 #ifdef MSDOS
b43e16d8ab5b (Fcall_process) [MSDOS]:
Miles Bader <miles@gnu.org>
parents: 15473
diff changeset
522 unlink (tempfile);
b43e16d8ab5b (Fcall_process) [MSDOS]:
Miles Bader <miles@gnu.org>
parents: 15473
diff changeset
523 #endif
68389
ee72dfb5a3cd (Fcall_process): GCPRO error_file. Encode infile,
Kenichi Handa <handa@m17n.org>
parents: 67989
diff changeset
524 if (NILP (error_file))
ee72dfb5a3cd (Fcall_process): GCPRO error_file. Encode infile,
Kenichi Handa <handa@m17n.org>
parents: 67989
diff changeset
525 error_file = build_string (NULL_DEVICE);
ee72dfb5a3cd (Fcall_process): GCPRO error_file. Encode infile,
Kenichi Handa <handa@m17n.org>
parents: 67989
diff changeset
526 else if (STRINGP (error_file))
ee72dfb5a3cd (Fcall_process): GCPRO error_file. Encode infile,
Kenichi Handa <handa@m17n.org>
parents: 67989
diff changeset
527 error_file = DECODE_FILE (error_file);
ee72dfb5a3cd (Fcall_process): GCPRO error_file. Encode infile,
Kenichi Handa <handa@m17n.org>
parents: 67989
diff changeset
528 report_file_error ("Cannot redirect stderr", Fcons (error_file, Qnil));
10839
2e3eae2280eb (Fcall_process): Extend BUFFER arg so it can specify
Richard M. Stallman <rms@gnu.org>
parents: 10083
diff changeset
529 }
19838
7e1bbe58eb02 (Fcall_process): Encode the new current dir.
Richard M. Stallman <rms@gnu.org>
parents: 19790
diff changeset
530
13719
660032b84b23 (Fcall_process) [MSDOS]: Support redirection of
Karl Heuer <kwzh@gnu.org>
parents: 12854
diff changeset
531 #ifdef MSDOS /* MW, July 1993 */
21694
6e12eeda6913 (Fcall_process) [MSDOS]: Call child_setup instead of run_msdos_command.
Eli Zaretskii <eliz@gnu.org>
parents: 21626
diff changeset
532 /* Note that on MSDOS `child_setup' actually returns the child process
13719
660032b84b23 (Fcall_process) [MSDOS]: Support redirection of
Karl Heuer <kwzh@gnu.org>
parents: 12854
diff changeset
533 exit status, not its PID, so we assign it to `synch_process_retcode'
660032b84b23 (Fcall_process) [MSDOS]: Support redirection of
Karl Heuer <kwzh@gnu.org>
parents: 12854
diff changeset
534 below. */
21694
6e12eeda6913 (Fcall_process) [MSDOS]: Call child_setup instead of run_msdos_command.
Eli Zaretskii <eliz@gnu.org>
parents: 21626
diff changeset
535 pid = child_setup (filefd, outfilefd, fd_error, (char **) new_argv,
6e12eeda6913 (Fcall_process) [MSDOS]: Call child_setup instead of run_msdos_command.
Eli Zaretskii <eliz@gnu.org>
parents: 21626
diff changeset
536 0, current_dir);
13719
660032b84b23 (Fcall_process) [MSDOS]: Support redirection of
Karl Heuer <kwzh@gnu.org>
parents: 12854
diff changeset
537
660032b84b23 (Fcall_process) [MSDOS]: Support redirection of
Karl Heuer <kwzh@gnu.org>
parents: 12854
diff changeset
538 /* Record that the synchronous process exited and note its
660032b84b23 (Fcall_process) [MSDOS]: Support redirection of
Karl Heuer <kwzh@gnu.org>
parents: 12854
diff changeset
539 termination status. */
660032b84b23 (Fcall_process) [MSDOS]: Support redirection of
Karl Heuer <kwzh@gnu.org>
parents: 12854
diff changeset
540 synch_process_alive = 0;
660032b84b23 (Fcall_process) [MSDOS]: Support redirection of
Karl Heuer <kwzh@gnu.org>
parents: 12854
diff changeset
541 synch_process_retcode = pid;
660032b84b23 (Fcall_process) [MSDOS]: Support redirection of
Karl Heuer <kwzh@gnu.org>
parents: 12854
diff changeset
542 if (synch_process_retcode < 0) /* means it couldn't be exec'ed */
26088
b7aa6ac26872 Add support for large files, 64-bit Solaris, system locale codings.
Paul Eggert <eggert@twinsun.com>
parents: 25767
diff changeset
543 {
26526
b7438760079b * callproc.c (strerror): Remove decl.
Paul Eggert <eggert@twinsun.com>
parents: 26088
diff changeset
544 synchronize_system_messages_locale ();
26088
b7aa6ac26872 Add support for large files, 64-bit Solaris, system locale codings.
Paul Eggert <eggert@twinsun.com>
parents: 25767
diff changeset
545 synch_process_death = strerror (errno);
b7aa6ac26872 Add support for large files, 64-bit Solaris, system locale codings.
Paul Eggert <eggert@twinsun.com>
parents: 25767
diff changeset
546 }
13719
660032b84b23 (Fcall_process) [MSDOS]: Support redirection of
Karl Heuer <kwzh@gnu.org>
parents: 12854
diff changeset
547
26088
b7aa6ac26872 Add support for large files, 64-bit Solaris, system locale codings.
Paul Eggert <eggert@twinsun.com>
parents: 25767
diff changeset
548 emacs_close (outfilefd);
13719
660032b84b23 (Fcall_process) [MSDOS]: Support redirection of
Karl Heuer <kwzh@gnu.org>
parents: 12854
diff changeset
549 if (fd_error != outfilefd)
26088
b7aa6ac26872 Add support for large files, 64-bit Solaris, system locale codings.
Paul Eggert <eggert@twinsun.com>
parents: 25767
diff changeset
550 emacs_close (fd_error);
13719
660032b84b23 (Fcall_process) [MSDOS]: Support redirection of
Karl Heuer <kwzh@gnu.org>
parents: 12854
diff changeset
551 fd1 = -1; /* No harm in closing that one! */
17025
3c222a7edda1 Include charset.h and coding.h.
Karl Heuer <kwzh@gnu.org>
parents: 16659
diff changeset
552 /* Since CRLF is converted to LF within `decode_coding', we can
3c222a7edda1 Include charset.h and coding.h.
Karl Heuer <kwzh@gnu.org>
parents: 16659
diff changeset
553 always open a file with binary mode. */
26088
b7aa6ac26872 Add support for large files, 64-bit Solaris, system locale codings.
Paul Eggert <eggert@twinsun.com>
parents: 25767
diff changeset
554 fd[0] = emacs_open (tempfile, O_RDONLY | O_BINARY, 0);
13719
660032b84b23 (Fcall_process) [MSDOS]: Support redirection of
Karl Heuer <kwzh@gnu.org>
parents: 12854
diff changeset
555 if (fd[0] < 0)
660032b84b23 (Fcall_process) [MSDOS]: Support redirection of
Karl Heuer <kwzh@gnu.org>
parents: 12854
diff changeset
556 {
660032b84b23 (Fcall_process) [MSDOS]: Support redirection of
Karl Heuer <kwzh@gnu.org>
parents: 12854
diff changeset
557 unlink (tempfile);
26088
b7aa6ac26872 Add support for large files, 64-bit Solaris, system locale codings.
Paul Eggert <eggert@twinsun.com>
parents: 25767
diff changeset
558 emacs_close (filefd);
13719
660032b84b23 (Fcall_process) [MSDOS]: Support redirection of
Karl Heuer <kwzh@gnu.org>
parents: 12854
diff changeset
559 report_file_error ("Cannot re-open temporary file", Qnil);
660032b84b23 (Fcall_process) [MSDOS]: Support redirection of
Karl Heuer <kwzh@gnu.org>
parents: 12854
diff changeset
560 }
660032b84b23 (Fcall_process) [MSDOS]: Support redirection of
Karl Heuer <kwzh@gnu.org>
parents: 12854
diff changeset
561 #else /* not MSDOS */
9786
7f4b72244919 (getenv_internal) [WINDOWSNT]: Use strnicmp, not bcmp.
Richard M. Stallman <rms@gnu.org>
parents: 9609
diff changeset
562 #ifdef WINDOWSNT
20525
468f59c6c9bf (Fcall_process): Cast new_argv for child_setup.
Richard M. Stallman <rms@gnu.org>
parents: 20448
diff changeset
563 pid = child_setup (filefd, fd1, fd_error, (char **) new_argv,
468f59c6c9bf (Fcall_process): Cast new_argv for child_setup.
Richard M. Stallman <rms@gnu.org>
parents: 20448
diff changeset
564 0, current_dir);
9786
7f4b72244919 (getenv_internal) [WINDOWSNT]: Use strnicmp, not bcmp.
Richard M. Stallman <rms@gnu.org>
parents: 9609
diff changeset
565 #else /* not WINDOWSNT */
57892
0cdbbc7bf06a From: YAMAMOTO Mitsuharu
Kim F. Storm <storm@cua.dk>
parents: 57473
diff changeset
566 BLOCK_INPUT;
0cdbbc7bf06a From: YAMAMOTO Mitsuharu
Kim F. Storm <storm@cua.dk>
parents: 57473
diff changeset
567
296
558b874b5259 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
568 pid = vfork ();
558b874b5259 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
569
558b874b5259 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
570 if (pid == 0)
558b874b5259 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
571 {
558b874b5259 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
572 if (fd[0] >= 0)
26088
b7aa6ac26872 Add support for large files, 64-bit Solaris, system locale codings.
Paul Eggert <eggert@twinsun.com>
parents: 25767
diff changeset
573 emacs_close (fd[0]);
18235
43ce16d5f31e (Fcall_process): Use setsid to disconnect child
Richard M. Stallman <rms@gnu.org>
parents: 18182
diff changeset
574 #ifdef HAVE_SETSID
43ce16d5f31e (Fcall_process): Use setsid to disconnect child
Richard M. Stallman <rms@gnu.org>
parents: 18182
diff changeset
575 setsid ();
43ce16d5f31e (Fcall_process): Use setsid to disconnect child
Richard M. Stallman <rms@gnu.org>
parents: 18182
diff changeset
576 #endif
43ce16d5f31e (Fcall_process): Use setsid to disconnect child
Richard M. Stallman <rms@gnu.org>
parents: 18182
diff changeset
577 #if defined (USG) && !defined (BSD_PGRPS)
296
558b874b5259 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
578 setpgrp ();
558b874b5259 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
579 #else
558b874b5259 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
580 setpgrp (pid, pid);
558b874b5259 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
581 #endif /* USG */
20525
468f59c6c9bf (Fcall_process): Cast new_argv for child_setup.
Richard M. Stallman <rms@gnu.org>
parents: 20448
diff changeset
582 child_setup (filefd, fd1, fd_error, (char **) new_argv,
468f59c6c9bf (Fcall_process): Cast new_argv for child_setup.
Richard M. Stallman <rms@gnu.org>
parents: 20448
diff changeset
583 0, current_dir);
296
558b874b5259 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
584 }
57892
0cdbbc7bf06a From: YAMAMOTO Mitsuharu
Kim F. Storm <storm@cua.dk>
parents: 57473
diff changeset
585
0cdbbc7bf06a From: YAMAMOTO Mitsuharu
Kim F. Storm <storm@cua.dk>
parents: 57473
diff changeset
586 UNBLOCK_INPUT;
13719
660032b84b23 (Fcall_process) [MSDOS]: Support redirection of
Karl Heuer <kwzh@gnu.org>
parents: 12854
diff changeset
587 #endif /* not WINDOWSNT */
15225
a78a1df9690c (Fcall_process): Fix previous change (now !MSDOS only).
Richard M. Stallman <rms@gnu.org>
parents: 15210
diff changeset
588
a78a1df9690c (Fcall_process): Fix previous change (now !MSDOS only).
Richard M. Stallman <rms@gnu.org>
parents: 15210
diff changeset
589 /* The MSDOS case did this already. */
a78a1df9690c (Fcall_process): Fix previous change (now !MSDOS only).
Richard M. Stallman <rms@gnu.org>
parents: 15210
diff changeset
590 if (fd_error >= 0)
26088
b7aa6ac26872 Add support for large files, 64-bit Solaris, system locale codings.
Paul Eggert <eggert@twinsun.com>
parents: 25767
diff changeset
591 emacs_close (fd_error);
5501
902cd7024cfa (syms_of_callproc) [MSDOS]: New lisp variable: binary-process.
Richard M. Stallman <rms@gnu.org>
parents: 5348
diff changeset
592 #endif /* not MSDOS */
296
558b874b5259 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
593
558b874b5259 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
594 environ = save_environ;
558b874b5259 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
595
6466
4b3c537e1169 (Fcall_process): Make sure to close descriptors.
Richard M. Stallman <rms@gnu.org>
parents: 6391
diff changeset
596 /* Close most of our fd's, but not fd[0]
4b3c537e1169 (Fcall_process): Make sure to close descriptors.
Richard M. Stallman <rms@gnu.org>
parents: 6391
diff changeset
597 since we will use that to read input from. */
26088
b7aa6ac26872 Add support for large files, 64-bit Solaris, system locale codings.
Paul Eggert <eggert@twinsun.com>
parents: 25767
diff changeset
598 emacs_close (filefd);
15236
99d01b1b8799 (Fcall_process): Don't close the same fd twice.
Karl Heuer <kwzh@gnu.org>
parents: 15225
diff changeset
599 if (fd1 >= 0 && fd1 != fd_error)
26088
b7aa6ac26872 Add support for large files, 64-bit Solaris, system locale codings.
Paul Eggert <eggert@twinsun.com>
parents: 25767
diff changeset
600 emacs_close (fd1);
296
558b874b5259 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
601 }
558b874b5259 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
602
558b874b5259 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
603 if (pid < 0)
558b874b5259 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
604 {
6466
4b3c537e1169 (Fcall_process): Make sure to close descriptors.
Richard M. Stallman <rms@gnu.org>
parents: 6391
diff changeset
605 if (fd[0] >= 0)
26088
b7aa6ac26872 Add support for large files, 64-bit Solaris, system locale codings.
Paul Eggert <eggert@twinsun.com>
parents: 25767
diff changeset
606 emacs_close (fd[0]);
296
558b874b5259 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
607 report_file_error ("Doing vfork", Qnil);
558b874b5259 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
608 }
558b874b5259 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
609
9138
6c814eb4d892 (Fcall_process, child_setup, getenv_internal): Use type test macros.
Karl Heuer <kwzh@gnu.org>
parents: 8853
diff changeset
610 if (INTEGERP (buffer))
296
558b874b5259 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
611 {
6466
4b3c537e1169 (Fcall_process): Make sure to close descriptors.
Richard M. Stallman <rms@gnu.org>
parents: 6391
diff changeset
612 if (fd[0] >= 0)
26088
b7aa6ac26872 Add support for large files, 64-bit Solaris, system locale codings.
Paul Eggert <eggert@twinsun.com>
parents: 25767
diff changeset
613 emacs_close (fd[0]);
296
558b874b5259 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
614 #ifndef subprocesses
948
928ed74adf4f Restored up-to-date version of this file from pogo. What is going on
Jim Blandy <jimb@redhat.com>
parents: 942
diff changeset
615 /* If Emacs has been built with asynchronous subprocess support,
928ed74adf4f Restored up-to-date version of this file from pogo. What is going on
Jim Blandy <jimb@redhat.com>
parents: 942
diff changeset
616 we don't need to do this, I think because it will then have
928ed74adf4f Restored up-to-date version of this file from pogo. What is going on
Jim Blandy <jimb@redhat.com>
parents: 942
diff changeset
617 the facilities for handling SIGCHLD. */
296
558b874b5259 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
618 wait_without_blocking ();
558b874b5259 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
619 #endif /* subprocesses */
558b874b5259 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
620 return Qnil;
558b874b5259 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
621 }
558b874b5259 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
622
6466
4b3c537e1169 (Fcall_process): Make sure to close descriptors.
Richard M. Stallman <rms@gnu.org>
parents: 6391
diff changeset
623 /* Enable sending signal if user quits below. */
6275
132464faeaf4 Don't kill remaining processes if child exits.
Richard M. Stallman <rms@gnu.org>
parents: 6031
diff changeset
624 call_process_exited = 0;
132464faeaf4 Don't kill remaining processes if child exits.
Richard M. Stallman <rms@gnu.org>
parents: 6031
diff changeset
625
87730
91da483b3fa5 * movemail.c:
Dan Nicolaescu <dann@ics.uci.edu>
parents: 87649
diff changeset
626 #if defined(MSDOS)
5501
902cd7024cfa (syms_of_callproc) [MSDOS]: New lisp variable: binary-process.
Richard M. Stallman <rms@gnu.org>
parents: 5348
diff changeset
627 /* MSDOS needs different cleanup information. */
902cd7024cfa (syms_of_callproc) [MSDOS]: New lisp variable: binary-process.
Richard M. Stallman <rms@gnu.org>
parents: 5348
diff changeset
628 record_unwind_protect (call_process_cleanup,
902cd7024cfa (syms_of_callproc) [MSDOS]: New lisp variable: binary-process.
Richard M. Stallman <rms@gnu.org>
parents: 5348
diff changeset
629 Fcons (make_number (fd[0]), build_string (tempfile)));
902cd7024cfa (syms_of_callproc) [MSDOS]: New lisp variable: binary-process.
Richard M. Stallman <rms@gnu.org>
parents: 5348
diff changeset
630 #else
296
558b874b5259 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
631 record_unwind_protect (call_process_cleanup,
558b874b5259 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
632 Fcons (make_number (fd[0]), make_number (pid)));
87730
91da483b3fa5 * movemail.c:
Dan Nicolaescu <dann@ics.uci.edu>
parents: 87649
diff changeset
633 #endif /* not MSDOS */
296
558b874b5259 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
634
558b874b5259 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
635
9138
6c814eb4d892 (Fcall_process, child_setup, getenv_internal): Use type test macros.
Karl Heuer <kwzh@gnu.org>
parents: 8853
diff changeset
636 if (BUFFERP (buffer))
296
558b874b5259 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
637 Fset_buffer (buffer);
558b874b5259 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
638
24931
6ccce3af0d2a (Fcall_process): Decide coding system for decoding
Richard M. Stallman <rms@gnu.org>
parents: 24920
diff changeset
639 if (NILP (buffer))
6ccce3af0d2a (Fcall_process): Decide coding system for decoding
Richard M. Stallman <rms@gnu.org>
parents: 24920
diff changeset
640 {
6ccce3af0d2a (Fcall_process): Decide coding system for decoding
Richard M. Stallman <rms@gnu.org>
parents: 24920
diff changeset
641 /* If BUFFER is nil, we must read process output once and then
6ccce3af0d2a (Fcall_process): Decide coding system for decoding
Richard M. Stallman <rms@gnu.org>
parents: 24920
diff changeset
642 discard it, so setup coding system but with nil. */
6ccce3af0d2a (Fcall_process): Decide coding system for decoding
Richard M. Stallman <rms@gnu.org>
parents: 24920
diff changeset
643 setup_coding_system (Qnil, &process_coding);
6ccce3af0d2a (Fcall_process): Decide coding system for decoding
Richard M. Stallman <rms@gnu.org>
parents: 24920
diff changeset
644 }
6ccce3af0d2a (Fcall_process): Decide coding system for decoding
Richard M. Stallman <rms@gnu.org>
parents: 24920
diff changeset
645 else
6ccce3af0d2a (Fcall_process): Decide coding system for decoding
Richard M. Stallman <rms@gnu.org>
parents: 24920
diff changeset
646 {
6ccce3af0d2a (Fcall_process): Decide coding system for decoding
Richard M. Stallman <rms@gnu.org>
parents: 24920
diff changeset
647 Lisp_Object val, *args2;
6ccce3af0d2a (Fcall_process): Decide coding system for decoding
Richard M. Stallman <rms@gnu.org>
parents: 24920
diff changeset
648
6ccce3af0d2a (Fcall_process): Decide coding system for decoding
Richard M. Stallman <rms@gnu.org>
parents: 24920
diff changeset
649 val = Qnil;
6ccce3af0d2a (Fcall_process): Decide coding system for decoding
Richard M. Stallman <rms@gnu.org>
parents: 24920
diff changeset
650 if (!NILP (Vcoding_system_for_read))
6ccce3af0d2a (Fcall_process): Decide coding system for decoding
Richard M. Stallman <rms@gnu.org>
parents: 24920
diff changeset
651 val = Vcoding_system_for_read;
6ccce3af0d2a (Fcall_process): Decide coding system for decoding
Richard M. Stallman <rms@gnu.org>
parents: 24920
diff changeset
652 else
6ccce3af0d2a (Fcall_process): Decide coding system for decoding
Richard M. Stallman <rms@gnu.org>
parents: 24920
diff changeset
653 {
6ccce3af0d2a (Fcall_process): Decide coding system for decoding
Richard M. Stallman <rms@gnu.org>
parents: 24920
diff changeset
654 if (EQ (coding_systems, Qt))
6ccce3af0d2a (Fcall_process): Decide coding system for decoding
Richard M. Stallman <rms@gnu.org>
parents: 24920
diff changeset
655 {
6ccce3af0d2a (Fcall_process): Decide coding system for decoding
Richard M. Stallman <rms@gnu.org>
parents: 24920
diff changeset
656 int i;
6ccce3af0d2a (Fcall_process): Decide coding system for decoding
Richard M. Stallman <rms@gnu.org>
parents: 24920
diff changeset
657
6ccce3af0d2a (Fcall_process): Decide coding system for decoding
Richard M. Stallman <rms@gnu.org>
parents: 24920
diff changeset
658 args2 = (Lisp_Object *) alloca ((nargs + 1) * sizeof *args2);
6ccce3af0d2a (Fcall_process): Decide coding system for decoding
Richard M. Stallman <rms@gnu.org>
parents: 24920
diff changeset
659 args2[0] = Qcall_process;
6ccce3af0d2a (Fcall_process): Decide coding system for decoding
Richard M. Stallman <rms@gnu.org>
parents: 24920
diff changeset
660 for (i = 0; i < nargs; i++) args2[i + 1] = args[i];
6ccce3af0d2a (Fcall_process): Decide coding system for decoding
Richard M. Stallman <rms@gnu.org>
parents: 24920
diff changeset
661 coding_systems
6ccce3af0d2a (Fcall_process): Decide coding system for decoding
Richard M. Stallman <rms@gnu.org>
parents: 24920
diff changeset
662 = Ffind_operation_coding_system (nargs + 1, args2);
6ccce3af0d2a (Fcall_process): Decide coding system for decoding
Richard M. Stallman <rms@gnu.org>
parents: 24920
diff changeset
663 }
6ccce3af0d2a (Fcall_process): Decide coding system for decoding
Richard M. Stallman <rms@gnu.org>
parents: 24920
diff changeset
664 if (CONSP (coding_systems))
25645
a14111a2a100 Use XCAR, XCDR, XFLOAT_DATA instead of explicit member access.
Ken Raeburn <raeburn@raeburn.org>
parents: 25522
diff changeset
665 val = XCAR (coding_systems);
24931
6ccce3af0d2a (Fcall_process): Decide coding system for decoding
Richard M. Stallman <rms@gnu.org>
parents: 24920
diff changeset
666 else if (CONSP (Vdefault_process_coding_system))
25645
a14111a2a100 Use XCAR, XCDR, XFLOAT_DATA instead of explicit member access.
Ken Raeburn <raeburn@raeburn.org>
parents: 25522
diff changeset
667 val = XCAR (Vdefault_process_coding_system);
24931
6ccce3af0d2a (Fcall_process): Decide coding system for decoding
Richard M. Stallman <rms@gnu.org>
parents: 24920
diff changeset
668 else
6ccce3af0d2a (Fcall_process): Decide coding system for decoding
Richard M. Stallman <rms@gnu.org>
parents: 24920
diff changeset
669 val = Qnil;
6ccce3af0d2a (Fcall_process): Decide coding system for decoding
Richard M. Stallman <rms@gnu.org>
parents: 24920
diff changeset
670 }
88356
5ace79aaf5ad Include "character.h" instead of "charset.h".
Kenichi Handa <handa@m17n.org>
parents: 41861
diff changeset
671 Fcheck_coding_system (val);
24931
6ccce3af0d2a (Fcall_process): Decide coding system for decoding
Richard M. Stallman <rms@gnu.org>
parents: 24920
diff changeset
672 /* In unibyte mode, character code conversion should not take
6ccce3af0d2a (Fcall_process): Decide coding system for decoding
Richard M. Stallman <rms@gnu.org>
parents: 24920
diff changeset
673 place but EOL conversion should. So, setup raw-text or one
6ccce3af0d2a (Fcall_process): Decide coding system for decoding
Richard M. Stallman <rms@gnu.org>
parents: 24920
diff changeset
674 of the subsidiary according to the information just setup. */
6ccce3af0d2a (Fcall_process): Decide coding system for decoding
Richard M. Stallman <rms@gnu.org>
parents: 24920
diff changeset
675 if (NILP (current_buffer->enable_multibyte_characters)
6ccce3af0d2a (Fcall_process): Decide coding system for decoding
Richard M. Stallman <rms@gnu.org>
parents: 24920
diff changeset
676 && !NILP (val))
88356
5ace79aaf5ad Include "character.h" instead of "charset.h".
Kenichi Handa <handa@m17n.org>
parents: 41861
diff changeset
677 val = raw_text_coding_system (val);
5ace79aaf5ad Include "character.h" instead of "charset.h".
Kenichi Handa <handa@m17n.org>
parents: 41861
diff changeset
678 setup_coding_system (val, &process_coding);
24931
6ccce3af0d2a (Fcall_process): Decide coding system for decoding
Richard M. Stallman <rms@gnu.org>
parents: 24920
diff changeset
679 }
6ccce3af0d2a (Fcall_process): Decide coding system for decoding
Richard M. Stallman <rms@gnu.org>
parents: 24920
diff changeset
680
296
558b874b5259 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
681 immediate_quit = 1;
558b874b5259 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
682 QUIT;
558b874b5259 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
683
558b874b5259 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
684 {
558b874b5259 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
685 register int nread;
5251
480731ff8e9a (Fcall_process): Call prepare_menu_bars.
Richard M. Stallman <rms@gnu.org>
parents: 5179
diff changeset
686 int first = 1;
11619
ff4be652af46 (Fcall_process): Extend BUFFER arg so it can specify
Richard M. Stallman <rms@gnu.org>
parents: 11513
diff changeset
687 int total_read = 0;
20724
e34b99d443b1 (Fcall_process): Use raw-text instead of emacs-mule
Kenichi Handa <handa@m17n.org>
parents: 20595
diff changeset
688 int carryover = 0;
57473
fb60234070b0 (Fcall_process): Simplify handling of display arg.
Kim F. Storm <storm@cua.dk>
parents: 57290
diff changeset
689 int display_on_the_fly = display_p;
22320
aed8bb8b8837 (Fcall_process): Avoid initializer on auto struct.
Karl Heuer <kwzh@gnu.org>
parents: 21997
diff changeset
690 struct coding_system saved_coding;
aed8bb8b8837 (Fcall_process): Avoid initializer on auto struct.
Karl Heuer <kwzh@gnu.org>
parents: 21997
diff changeset
691
aed8bb8b8837 (Fcall_process): Avoid initializer on auto struct.
Karl Heuer <kwzh@gnu.org>
parents: 21997
diff changeset
692 saved_coding = process_coding;
11780
6ae23eecab6a (Fcall_process): Keep reading till buffer is nearly full.
Richard M. Stallman <rms@gnu.org>
parents: 11619
diff changeset
693 while (1)
296
558b874b5259 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
694 {
11780
6ae23eecab6a (Fcall_process): Keep reading till buffer is nearly full.
Richard M. Stallman <rms@gnu.org>
parents: 11619
diff changeset
695 /* Repeatedly read until we've filled as much as possible
6ae23eecab6a (Fcall_process): Keep reading till buffer is nearly full.
Richard M. Stallman <rms@gnu.org>
parents: 11619
diff changeset
696 of the buffer size we have. But don't read
14036
621a575db6f7 Comment fixes.
Karl Heuer <kwzh@gnu.org>
parents: 13719
diff changeset
697 less than 1024--save that for the next bufferful. */
20724
e34b99d443b1 (Fcall_process): Use raw-text instead of emacs-mule
Kenichi Handa <handa@m17n.org>
parents: 20595
diff changeset
698 nread = carryover;
11780
6ae23eecab6a (Fcall_process): Keep reading till buffer is nearly full.
Richard M. Stallman <rms@gnu.org>
parents: 11619
diff changeset
699 while (nread < bufsize - 1024)
8853
f44e40e722b2 (Fcall_process) [__osf__ && __alpha]:
Richard M. Stallman <rms@gnu.org>
parents: 8737
diff changeset
700 {
62982
d7793ac6df62 (Fcall_process): Don't use alloca to gradually
Kim F. Storm <storm@cua.dk>
parents: 60891
diff changeset
701 int this_read = emacs_read (fd[0], buf + nread,
26088
b7aa6ac26872 Add support for large files, 64-bit Solaris, system locale codings.
Paul Eggert <eggert@twinsun.com>
parents: 25767
diff changeset
702 bufsize - nread);
11780
6ae23eecab6a (Fcall_process): Keep reading till buffer is nearly full.
Richard M. Stallman <rms@gnu.org>
parents: 11619
diff changeset
703
6ae23eecab6a (Fcall_process): Keep reading till buffer is nearly full.
Richard M. Stallman <rms@gnu.org>
parents: 11619
diff changeset
704 if (this_read < 0)
6ae23eecab6a (Fcall_process): Keep reading till buffer is nearly full.
Richard M. Stallman <rms@gnu.org>
parents: 11619
diff changeset
705 goto give_up;
6ae23eecab6a (Fcall_process): Keep reading till buffer is nearly full.
Richard M. Stallman <rms@gnu.org>
parents: 11619
diff changeset
706
6ae23eecab6a (Fcall_process): Keep reading till buffer is nearly full.
Richard M. Stallman <rms@gnu.org>
parents: 11619
diff changeset
707 if (this_read == 0)
21966
10183730b250 (Fcall_process): If we must display received data on
Kenichi Handa <handa@m17n.org>
parents: 21786
diff changeset
708 {
10183730b250 (Fcall_process): If we must display received data on
Kenichi Handa <handa@m17n.org>
parents: 21786
diff changeset
709 process_coding.mode |= CODING_MODE_LAST_BLOCK;
10183730b250 (Fcall_process): If we must display received data on
Kenichi Handa <handa@m17n.org>
parents: 21786
diff changeset
710 break;
10183730b250 (Fcall_process): If we must display received data on
Kenichi Handa <handa@m17n.org>
parents: 21786
diff changeset
711 }
11780
6ae23eecab6a (Fcall_process): Keep reading till buffer is nearly full.
Richard M. Stallman <rms@gnu.org>
parents: 11619
diff changeset
712
6ae23eecab6a (Fcall_process): Keep reading till buffer is nearly full.
Richard M. Stallman <rms@gnu.org>
parents: 11619
diff changeset
713 nread += this_read;
21966
10183730b250 (Fcall_process): If we must display received data on
Kenichi Handa <handa@m17n.org>
parents: 21786
diff changeset
714 total_read += this_read;
11780
6ae23eecab6a (Fcall_process): Keep reading till buffer is nearly full.
Richard M. Stallman <rms@gnu.org>
parents: 11619
diff changeset
715
21966
10183730b250 (Fcall_process): If we must display received data on
Kenichi Handa <handa@m17n.org>
parents: 21786
diff changeset
716 if (display_on_the_fly)
10183730b250 (Fcall_process): If we must display received data on
Kenichi Handa <handa@m17n.org>
parents: 21786
diff changeset
717 break;
10183730b250 (Fcall_process): If we must display received data on
Kenichi Handa <handa@m17n.org>
parents: 21786
diff changeset
718 }
11780
6ae23eecab6a (Fcall_process): Keep reading till buffer is nearly full.
Richard M. Stallman <rms@gnu.org>
parents: 11619
diff changeset
719
6ae23eecab6a (Fcall_process): Keep reading till buffer is nearly full.
Richard M. Stallman <rms@gnu.org>
parents: 11619
diff changeset
720 /* Now NREAD is the total amount of data in the buffer. */
296
558b874b5259 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
721 immediate_quit = 0;
49600
23a1cea22d13 Trailing whitespace deleted.
Juanma Barranquero <lekktu@gmail.com>
parents: 47018
diff changeset
722
942
c519b70eb50b Replaced fuctions egetenv, Fgetenv, getenv_internal, which had
Joseph Arceneaux <jla@gnu.org>
parents: 934
diff changeset
723 if (!NILP (buffer))
17025
3c222a7edda1 Include charset.h and coding.h.
Karl Heuer <kwzh@gnu.org>
parents: 16659
diff changeset
724 {
88945
9c97427fb1f6 (Fcall_process): Don't call insert_1_both directly if
Kenichi Handa <handa@m17n.org>
parents: 88828
diff changeset
725 if (NILP (current_buffer->enable_multibyte_characters)
9c97427fb1f6 (Fcall_process): Don't call insert_1_both directly if
Kenichi Handa <handa@m17n.org>
parents: 88828
diff changeset
726 && ! CODING_MAY_REQUIRE_DECODING (&process_coding))
62982
d7793ac6df62 (Fcall_process): Don't use alloca to gradually
Kim F. Storm <storm@cua.dk>
parents: 60891
diff changeset
727 insert_1_both (buf, nread, nread, 0, 1, 0);
17025
3c222a7edda1 Include charset.h and coding.h.
Karl Heuer <kwzh@gnu.org>
parents: 16659
diff changeset
728 else
3c222a7edda1 Include charset.h and coding.h.
Karl Heuer <kwzh@gnu.org>
parents: 16659
diff changeset
729 { /* We have to decode the input. */
90190
d8a6a0474c49 (Fcall_process): Sync with the change in
Kenichi Handa <handa@m17n.org>
parents: 90188
diff changeset
730 Lisp_Object curbuf;
49600
23a1cea22d13 Trailing whitespace deleted.
Juanma Barranquero <lekktu@gmail.com>
parents: 47018
diff changeset
731
90190
d8a6a0474c49 (Fcall_process): Sync with the change in
Kenichi Handa <handa@m17n.org>
parents: 90188
diff changeset
732 XSETBUFFER (curbuf, current_buffer);
d8a6a0474c49 (Fcall_process): Sync with the change in
Kenichi Handa <handa@m17n.org>
parents: 90188
diff changeset
733 decode_coding_c_string (&process_coding, buf, nread,
d8a6a0474c49 (Fcall_process): Sync with the change in
Kenichi Handa <handa@m17n.org>
parents: 90188
diff changeset
734 curbuf);
21966
10183730b250 (Fcall_process): If we must display received data on
Kenichi Handa <handa@m17n.org>
parents: 21786
diff changeset
735 if (display_on_the_fly
88356
5ace79aaf5ad Include "character.h" instead of "charset.h".
Kenichi Handa <handa@m17n.org>
parents: 41861
diff changeset
736 && CODING_REQUIRE_DETECTION (&saved_coding)
5ace79aaf5ad Include "character.h" instead of "charset.h".
Kenichi Handa <handa@m17n.org>
parents: 41861
diff changeset
737 && ! CODING_REQUIRE_DETECTION (&process_coding))
21966
10183730b250 (Fcall_process): If we must display received data on
Kenichi Handa <handa@m17n.org>
parents: 21786
diff changeset
738 {
10183730b250 (Fcall_process): If we must display received data on
Kenichi Handa <handa@m17n.org>
parents: 21786
diff changeset
739 /* We have detected some coding system. But,
10183730b250 (Fcall_process): If we must display received data on
Kenichi Handa <handa@m17n.org>
parents: 21786
diff changeset
740 there's a possibility that the detection was
10183730b250 (Fcall_process): If we must display received data on
Kenichi Handa <handa@m17n.org>
parents: 21786
diff changeset
741 done by insufficient data. So, we give up
10183730b250 (Fcall_process): If we must display received data on
Kenichi Handa <handa@m17n.org>
parents: 21786
diff changeset
742 displaying on the fly. */
88356
5ace79aaf5ad Include "character.h" instead of "charset.h".
Kenichi Handa <handa@m17n.org>
parents: 41861
diff changeset
743 if (process_coding.produced > 0)
5ace79aaf5ad Include "character.h" instead of "charset.h".
Kenichi Handa <handa@m17n.org>
parents: 41861
diff changeset
744 del_range_2 (process_coding.dst_pos,
5ace79aaf5ad Include "character.h" instead of "charset.h".
Kenichi Handa <handa@m17n.org>
parents: 41861
diff changeset
745 process_coding.dst_pos_byte,
5ace79aaf5ad Include "character.h" instead of "charset.h".
Kenichi Handa <handa@m17n.org>
parents: 41861
diff changeset
746 process_coding.dst_pos
5ace79aaf5ad Include "character.h" instead of "charset.h".
Kenichi Handa <handa@m17n.org>
parents: 41861
diff changeset
747 + process_coding.produced_char,
5ace79aaf5ad Include "character.h" instead of "charset.h".
Kenichi Handa <handa@m17n.org>
parents: 41861
diff changeset
748 process_coding.dst_pos_byte
5ace79aaf5ad Include "character.h" instead of "charset.h".
Kenichi Handa <handa@m17n.org>
parents: 41861
diff changeset
749 + process_coding.produced, 0);
21966
10183730b250 (Fcall_process): If we must display received data on
Kenichi Handa <handa@m17n.org>
parents: 21786
diff changeset
750 display_on_the_fly = 0;
10183730b250 (Fcall_process): If we must display received data on
Kenichi Handa <handa@m17n.org>
parents: 21786
diff changeset
751 process_coding = saved_coding;
10183730b250 (Fcall_process): If we must display received data on
Kenichi Handa <handa@m17n.org>
parents: 21786
diff changeset
752 carryover = nread;
57473
fb60234070b0 (Fcall_process): Simplify handling of display arg.
Kim F. Storm <storm@cua.dk>
parents: 57290
diff changeset
753 /* This is to make the above condition always
fb60234070b0 (Fcall_process): Simplify handling of display arg.
Kim F. Storm <storm@cua.dk>
parents: 57290
diff changeset
754 fails in the future. */
90017
6e012bc03071 (Fcall_process): Fix merging of 2004-10-13 change.
Kenichi Handa <handa@m17n.org>
parents: 90016
diff changeset
755 saved_coding.common_flags
6e012bc03071 (Fcall_process): Fix merging of 2004-10-13 change.
Kenichi Handa <handa@m17n.org>
parents: 90016
diff changeset
756 &= ~CODING_REQUIRE_DETECTION_MASK;
21966
10183730b250 (Fcall_process): If we must display received data on
Kenichi Handa <handa@m17n.org>
parents: 21786
diff changeset
757 continue;
10183730b250 (Fcall_process): If we must display received data on
Kenichi Handa <handa@m17n.org>
parents: 21786
diff changeset
758 }
49600
23a1cea22d13 Trailing whitespace deleted.
Juanma Barranquero <lekktu@gmail.com>
parents: 47018
diff changeset
759
88454
47b395dd6f2c (Fcall_process): Be sure to give the current buffer
Kenichi Handa <handa@m17n.org>
parents: 88356
diff changeset
760 TEMP_SET_PT_BOTH (PT + process_coding.produced_char,
47b395dd6f2c (Fcall_process): Be sure to give the current buffer
Kenichi Handa <handa@m17n.org>
parents: 88356
diff changeset
761 PT_BYTE + process_coding.produced);
89461
108e326323e3 (Fcall_process): Handle carryover correctly.
Kenichi Handa <handa@m17n.org>
parents: 88945
diff changeset
762 carryover = process_coding.carryover_bytes;
20724
e34b99d443b1 (Fcall_process): Use raw-text instead of emacs-mule
Kenichi Handa <handa@m17n.org>
parents: 20595
diff changeset
763 if (carryover > 0)
29000
f5c7d80ed4de (Fcall_process): Always encode an argument string if
Kenichi Handa <handa@m17n.org>
parents: 28914
diff changeset
764 /* As CARRYOVER should not be that large, we had
f5c7d80ed4de (Fcall_process): Always encode an argument string if
Kenichi Handa <handa@m17n.org>
parents: 28914
diff changeset
765 better avoid overhead of bcopy. */
90190
d8a6a0474c49 (Fcall_process): Sync with the change in
Kenichi Handa <handa@m17n.org>
parents: 90188
diff changeset
766 BCOPY_SHORT (process_coding.carryover, buf,
89461
108e326323e3 (Fcall_process): Handle carryover correctly.
Kenichi Handa <handa@m17n.org>
parents: 88945
diff changeset
767 process_coding.carryover_bytes);
17025
3c222a7edda1 Include charset.h and coding.h.
Karl Heuer <kwzh@gnu.org>
parents: 16659
diff changeset
768 }
3c222a7edda1 Include charset.h and coding.h.
Karl Heuer <kwzh@gnu.org>
parents: 16659
diff changeset
769 }
29000
f5c7d80ed4de (Fcall_process): Always encode an argument string if
Kenichi Handa <handa@m17n.org>
parents: 28914
diff changeset
770
20724
e34b99d443b1 (Fcall_process): Use raw-text instead of emacs-mule
Kenichi Handa <handa@m17n.org>
parents: 20595
diff changeset
771 if (process_coding.mode & CODING_MODE_LAST_BLOCK)
29000
f5c7d80ed4de (Fcall_process): Always encode an argument string if
Kenichi Handa <handa@m17n.org>
parents: 28914
diff changeset
772 break;
11619
ff4be652af46 (Fcall_process): Extend BUFFER arg so it can specify
Richard M. Stallman <rms@gnu.org>
parents: 11513
diff changeset
773
62982
d7793ac6df62 (Fcall_process): Don't use alloca to gradually
Kim F. Storm <storm@cua.dk>
parents: 60891
diff changeset
774 #if (CALLPROC_BUFFER_SIZE_MIN != CALLPROC_BUFFER_SIZE_MAX)
11619
ff4be652af46 (Fcall_process): Extend BUFFER arg so it can specify
Richard M. Stallman <rms@gnu.org>
parents: 11513
diff changeset
775 /* Make the buffer bigger as we continue to read more data,
62982
d7793ac6df62 (Fcall_process): Don't use alloca to gradually
Kim F. Storm <storm@cua.dk>
parents: 60891
diff changeset
776 but not past CALLPROC_BUFFER_SIZE_MAX. */
d7793ac6df62 (Fcall_process): Don't use alloca to gradually
Kim F. Storm <storm@cua.dk>
parents: 60891
diff changeset
777 if (bufsize < CALLPROC_BUFFER_SIZE_MAX && total_read > 32 * bufsize)
d7793ac6df62 (Fcall_process): Don't use alloca to gradually
Kim F. Storm <storm@cua.dk>
parents: 60891
diff changeset
778 if ((bufsize *= 2) > CALLPROC_BUFFER_SIZE_MAX)
d7793ac6df62 (Fcall_process): Don't use alloca to gradually
Kim F. Storm <storm@cua.dk>
parents: 60891
diff changeset
779 bufsize = CALLPROC_BUFFER_SIZE_MAX;
d7793ac6df62 (Fcall_process): Don't use alloca to gradually
Kim F. Storm <storm@cua.dk>
parents: 60891
diff changeset
780 #endif
11619
ff4be652af46 (Fcall_process): Extend BUFFER arg so it can specify
Richard M. Stallman <rms@gnu.org>
parents: 11513
diff changeset
781
57473
fb60234070b0 (Fcall_process): Simplify handling of display arg.
Kim F. Storm <storm@cua.dk>
parents: 57290
diff changeset
782 if (display_p)
5251
480731ff8e9a (Fcall_process): Call prepare_menu_bars.
Richard M. Stallman <rms@gnu.org>
parents: 5179
diff changeset
783 {
480731ff8e9a (Fcall_process): Call prepare_menu_bars.
Richard M. Stallman <rms@gnu.org>
parents: 5179
diff changeset
784 if (first)
480731ff8e9a (Fcall_process): Call prepare_menu_bars.
Richard M. Stallman <rms@gnu.org>
parents: 5179
diff changeset
785 prepare_menu_bars ();
480731ff8e9a (Fcall_process): Call prepare_menu_bars.
Richard M. Stallman <rms@gnu.org>
parents: 5179
diff changeset
786 first = 0;
35336
002c02db42d3 Call redisplay_preserve_echo_area with additional arg.
Gerd Moellmann <gerd@gnu.org>
parents: 33285
diff changeset
787 redisplay_preserve_echo_area (1);
57473
fb60234070b0 (Fcall_process): Simplify handling of display arg.
Kim F. Storm <storm@cua.dk>
parents: 57290
diff changeset
788 /* This variable might have been set to 0 for code
fb60234070b0 (Fcall_process): Simplify handling of display arg.
Kim F. Storm <storm@cua.dk>
parents: 57290
diff changeset
789 detection. In that case, we set it back to 1 because
fb60234070b0 (Fcall_process): Simplify handling of display arg.
Kim F. Storm <storm@cua.dk>
parents: 57290
diff changeset
790 we should have already detected a coding system. */
fb60234070b0 (Fcall_process): Simplify handling of display arg.
Kim F. Storm <storm@cua.dk>
parents: 57290
diff changeset
791 display_on_the_fly = 1;
5251
480731ff8e9a (Fcall_process): Call prepare_menu_bars.
Richard M. Stallman <rms@gnu.org>
parents: 5179
diff changeset
792 }
296
558b874b5259 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
793 immediate_quit = 1;
558b874b5259 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
794 QUIT;
558b874b5259 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
795 }
11780
6ae23eecab6a (Fcall_process): Keep reading till buffer is nearly full.
Richard M. Stallman <rms@gnu.org>
parents: 11619
diff changeset
796 give_up: ;
296
558b874b5259 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
797
88356
5ace79aaf5ad Include "character.h" instead of "charset.h".
Kenichi Handa <handa@m17n.org>
parents: 41861
diff changeset
798 Vlast_coding_system_used = CODING_ID_NAME (process_coding.id);
5ace79aaf5ad Include "character.h" instead of "charset.h".
Kenichi Handa <handa@m17n.org>
parents: 41861
diff changeset
799 /* If the caller required, let the buffer inherit the
5ace79aaf5ad Include "character.h" instead of "charset.h".
Kenichi Handa <handa@m17n.org>
parents: 41861
diff changeset
800 coding-system used to decode the process output. */
5ace79aaf5ad Include "character.h" instead of "charset.h".
Kenichi Handa <handa@m17n.org>
parents: 41861
diff changeset
801 if (inherit_process_coding_system)
5ace79aaf5ad Include "character.h" instead of "charset.h".
Kenichi Handa <handa@m17n.org>
parents: 41861
diff changeset
802 call1 (intern ("after-insert-file-set-buffer-file-coding-system"),
89483
2f877ed80fa6 *** empty log message ***
Kenichi Handa <handa@m17n.org>
parents: 88123 89461
diff changeset
803 make_number (total_read));
21572
395ad34c576a (Fcall_process): Call
Eli Zaretskii <eliz@gnu.org>
parents: 21564
diff changeset
804 }
395ad34c576a (Fcall_process): Call
Eli Zaretskii <eliz@gnu.org>
parents: 21564
diff changeset
805
296
558b874b5259 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
806 /* Wait for it to terminate, unless it already has. */
558b874b5259 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
807 wait_for_termination (pid);
558b874b5259 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
808
558b874b5259 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
809 immediate_quit = 0;
558b874b5259 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
810
558b874b5259 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
811 set_buffer_internal (old);
558b874b5259 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
812
6275
132464faeaf4 Don't kill remaining processes if child exits.
Richard M. Stallman <rms@gnu.org>
parents: 6031
diff changeset
813 /* Don't kill any children that the subprocess may have left behind
132464faeaf4 Don't kill remaining processes if child exits.
Richard M. Stallman <rms@gnu.org>
parents: 6031
diff changeset
814 when exiting. */
132464faeaf4 Don't kill remaining processes if child exits.
Richard M. Stallman <rms@gnu.org>
parents: 6031
diff changeset
815 call_process_exited = 1;
132464faeaf4 Don't kill remaining processes if child exits.
Richard M. Stallman <rms@gnu.org>
parents: 6031
diff changeset
816
296
558b874b5259 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
817 unbind_to (count, Qnil);
558b874b5259 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
818
53712
659b9b404c02 Define synch_process_termsig.
Jan Djärv <jan.h.d@swipnet.se>
parents: 52401
diff changeset
819 if (synch_process_termsig)
659b9b404c02 Define synch_process_termsig.
Jan Djärv <jan.h.d@swipnet.se>
parents: 52401
diff changeset
820 {
659b9b404c02 Define synch_process_termsig.
Jan Djärv <jan.h.d@swipnet.se>
parents: 52401
diff changeset
821 char *signame;
659b9b404c02 Define synch_process_termsig.
Jan Djärv <jan.h.d@swipnet.se>
parents: 52401
diff changeset
822
659b9b404c02 Define synch_process_termsig.
Jan Djärv <jan.h.d@swipnet.se>
parents: 52401
diff changeset
823 synchronize_system_messages_locale ();
659b9b404c02 Define synch_process_termsig.
Jan Djärv <jan.h.d@swipnet.se>
parents: 52401
diff changeset
824 signame = strsignal (synch_process_termsig);
659b9b404c02 Define synch_process_termsig.
Jan Djärv <jan.h.d@swipnet.se>
parents: 52401
diff changeset
825
659b9b404c02 Define synch_process_termsig.
Jan Djärv <jan.h.d@swipnet.se>
parents: 52401
diff changeset
826 if (signame == 0)
659b9b404c02 Define synch_process_termsig.
Jan Djärv <jan.h.d@swipnet.se>
parents: 52401
diff changeset
827 signame = "unknown";
659b9b404c02 Define synch_process_termsig.
Jan Djärv <jan.h.d@swipnet.se>
parents: 52401
diff changeset
828
659b9b404c02 Define synch_process_termsig.
Jan Djärv <jan.h.d@swipnet.se>
parents: 52401
diff changeset
829 synch_process_death = signame;
659b9b404c02 Define synch_process_termsig.
Jan Djärv <jan.h.d@swipnet.se>
parents: 52401
diff changeset
830 }
659b9b404c02 Define synch_process_termsig.
Jan Djärv <jan.h.d@swipnet.se>
parents: 52401
diff changeset
831
296
558b874b5259 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
832 if (synch_process_death)
26088
b7aa6ac26872 Add support for large files, 64-bit Solaris, system locale codings.
Paul Eggert <eggert@twinsun.com>
parents: 25767
diff changeset
833 return code_convert_string_norecord (build_string (synch_process_death),
b7aa6ac26872 Add support for large files, 64-bit Solaris, system locale codings.
Paul Eggert <eggert@twinsun.com>
parents: 25767
diff changeset
834 Vlocale_coding_system, 0);
296
558b874b5259 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
835 return make_number (synch_process_retcode);
558b874b5259 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
836 }
558b874b5259 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
837
1912
f0d4fb2b9157 * callproc.c (delete_temp_file): Declare this to return
Jim Blandy <jimb@redhat.com>
parents: 1886
diff changeset
838 static Lisp_Object
296
558b874b5259 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
839 delete_temp_file (name)
558b874b5259 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
840 Lisp_Object name;
558b874b5259 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
841 {
67989
d7475f0d0bda (delete_temp_file): Bind file-name-handler-alist to nil for the call
Ken Raeburn <raeburn@raeburn.org>
parents: 67967
diff changeset
842 /* Suppress jka-compr handling, etc. */
d7475f0d0bda (delete_temp_file): Bind file-name-handler-alist to nil for the call
Ken Raeburn <raeburn@raeburn.org>
parents: 67967
diff changeset
843 int count = SPECPDL_INDEX ();
d7475f0d0bda (delete_temp_file): Bind file-name-handler-alist to nil for the call
Ken Raeburn <raeburn@raeburn.org>
parents: 67967
diff changeset
844 specbind (intern ("file-name-handler-alist"), Qnil);
10083
2d7a561cc92c (delete_temp_file): Use internal_delete_file.
Richard M. Stallman <rms@gnu.org>
parents: 9786
diff changeset
845 internal_delete_file (name);
67989
d7475f0d0bda (delete_temp_file): Bind file-name-handler-alist to nil for the call
Ken Raeburn <raeburn@raeburn.org>
parents: 67967
diff changeset
846 unbind_to (count, Qnil);
29905
ca781f54ac48 (setpgrp): Undefine before defining.
Dave Love <fx@gnu.org>
parents: 29287
diff changeset
847 return Qnil;
296
558b874b5259 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
848 }
558b874b5259 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
849
558b874b5259 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
850 DEFUN ("call-process-region", Fcall_process_region, Scall_process_region,
40103
6b389fb978bc Change doc-string comments to `new style' [w/`doc:' keyword].
Pavel Janík <Pavel@Janik.cz>
parents: 39934
diff changeset
851 3, MANY, 0,
6b389fb978bc Change doc-string comments to `new style' [w/`doc:' keyword].
Pavel Janík <Pavel@Janik.cz>
parents: 39934
diff changeset
852 doc: /* Send text from START to END to a synchronous process running PROGRAM.
6b389fb978bc Change doc-string comments to `new style' [w/`doc:' keyword].
Pavel Janík <Pavel@Janik.cz>
parents: 39934
diff changeset
853 The remaining arguments are optional.
6b389fb978bc Change doc-string comments to `new style' [w/`doc:' keyword].
Pavel Janík <Pavel@Janik.cz>
parents: 39934
diff changeset
854 Delete the text if fourth arg DELETE is non-nil.
6b389fb978bc Change doc-string comments to `new style' [w/`doc:' keyword].
Pavel Janík <Pavel@Janik.cz>
parents: 39934
diff changeset
855
6b389fb978bc Change doc-string comments to `new style' [w/`doc:' keyword].
Pavel Janík <Pavel@Janik.cz>
parents: 39934
diff changeset
856 Insert output in BUFFER before point; t means current buffer;
6b389fb978bc Change doc-string comments to `new style' [w/`doc:' keyword].
Pavel Janík <Pavel@Janik.cz>
parents: 39934
diff changeset
857 nil for BUFFER means discard it; 0 means discard and don't wait.
6b389fb978bc Change doc-string comments to `new style' [w/`doc:' keyword].
Pavel Janík <Pavel@Janik.cz>
parents: 39934
diff changeset
858 BUFFER can also have the form (REAL-BUFFER STDERR-FILE); in that case,
6b389fb978bc Change doc-string comments to `new style' [w/`doc:' keyword].
Pavel Janík <Pavel@Janik.cz>
parents: 39934
diff changeset
859 REAL-BUFFER says what to do with standard output, as above,
6b389fb978bc Change doc-string comments to `new style' [w/`doc:' keyword].
Pavel Janík <Pavel@Janik.cz>
parents: 39934
diff changeset
860 while STDERR-FILE says what to do with standard error in the child.
6b389fb978bc Change doc-string comments to `new style' [w/`doc:' keyword].
Pavel Janík <Pavel@Janik.cz>
parents: 39934
diff changeset
861 STDERR-FILE may be nil (discard standard error output),
6b389fb978bc Change doc-string comments to `new style' [w/`doc:' keyword].
Pavel Janík <Pavel@Janik.cz>
parents: 39934
diff changeset
862 t (mix it with ordinary output), or a file name string.
6b389fb978bc Change doc-string comments to `new style' [w/`doc:' keyword].
Pavel Janík <Pavel@Janik.cz>
parents: 39934
diff changeset
863
6b389fb978bc Change doc-string comments to `new style' [w/`doc:' keyword].
Pavel Janík <Pavel@Janik.cz>
parents: 39934
diff changeset
864 Sixth arg DISPLAY non-nil means redisplay buffer as output is inserted.
6b389fb978bc Change doc-string comments to `new style' [w/`doc:' keyword].
Pavel Janík <Pavel@Janik.cz>
parents: 39934
diff changeset
865 Remaining args are passed to PROGRAM at startup as command args.
6b389fb978bc Change doc-string comments to `new style' [w/`doc:' keyword].
Pavel Janík <Pavel@Janik.cz>
parents: 39934
diff changeset
866
51070
54c727f3404e (Fcall_process_region): Doc fix.
Richard M. Stallman <rms@gnu.org>
parents: 49600
diff changeset
867 If BUFFER is 0, `call-process-region' returns immediately with value nil.
40103
6b389fb978bc Change doc-string comments to `new style' [w/`doc:' keyword].
Pavel Janík <Pavel@Janik.cz>
parents: 39934
diff changeset
868 Otherwise it waits for PROGRAM to terminate
6b389fb978bc Change doc-string comments to `new style' [w/`doc:' keyword].
Pavel Janík <Pavel@Janik.cz>
parents: 39934
diff changeset
869 and returns a numeric exit status or a signal description string.
40114
c8af574bcf48 (Fcall_process_region, Fcall_process): Add usage: string to doc string.
Miles Bader <miles@gnu.org>
parents: 40103
diff changeset
870 If you quit, the process is killed with SIGINT, or SIGKILL if you quit again.
c8af574bcf48 (Fcall_process_region, Fcall_process): Add usage: string to doc string.
Miles Bader <miles@gnu.org>
parents: 40103
diff changeset
871
c8af574bcf48 (Fcall_process_region, Fcall_process): Add usage: string to doc string.
Miles Bader <miles@gnu.org>
parents: 40103
diff changeset
872 usage: (call-process-region START END PROGRAM &optional DELETE BUFFER DISPLAY &rest ARGS) */)
40103
6b389fb978bc Change doc-string comments to `new style' [w/`doc:' keyword].
Pavel Janík <Pavel@Janik.cz>
parents: 39934
diff changeset
873 (nargs, args)
296
558b874b5259 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
874 int nargs;
558b874b5259 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
875 register Lisp_Object *args;
558b874b5259 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
876 {
8555
f1b1537ed3f6 (Fcall_process_region): gcpro filename_string.
Karl Heuer <kwzh@gnu.org>
parents: 7900
diff changeset
877 struct gcpro gcpro1;
f1b1537ed3f6 (Fcall_process_region): gcpro filename_string.
Karl Heuer <kwzh@gnu.org>
parents: 7900
diff changeset
878 Lisp_Object filename_string;
f1b1537ed3f6 (Fcall_process_region): gcpro filename_string.
Karl Heuer <kwzh@gnu.org>
parents: 7900
diff changeset
879 register Lisp_Object start, end;
46293
1fb8f75062c6 Use macro SPECPDL_INDEX.
Juanma Barranquero <lekktu@gmail.com>
parents: 46260
diff changeset
880 int count = SPECPDL_INDEX ();
18539
8c13c54d52c8 Call Ffind_operation_coding_system.
Kenichi Handa <handa@m17n.org>
parents: 18494
diff changeset
881 /* Qt denotes we have not yet called Ffind_operation_coding_system. */
24931
6ccce3af0d2a (Fcall_process): Decide coding system for decoding
Richard M. Stallman <rms@gnu.org>
parents: 24920
diff changeset
882 Lisp_Object coding_systems;
17025
3c222a7edda1 Include charset.h and coding.h.
Karl Heuer <kwzh@gnu.org>
parents: 16659
diff changeset
883 Lisp_Object val, *args2;
3c222a7edda1 Include charset.h and coding.h.
Karl Heuer <kwzh@gnu.org>
parents: 16659
diff changeset
884 int i;
9786
7f4b72244919 (getenv_internal) [WINDOWSNT]: Use strnicmp, not bcmp.
Richard M. Stallman <rms@gnu.org>
parents: 9609
diff changeset
885 #ifdef DOS_NT
5501
902cd7024cfa (syms_of_callproc) [MSDOS]: New lisp variable: binary-process.
Richard M. Stallman <rms@gnu.org>
parents: 5348
diff changeset
886 char *tempfile;
902cd7024cfa (syms_of_callproc) [MSDOS]: New lisp variable: binary-process.
Richard M. Stallman <rms@gnu.org>
parents: 5348
diff changeset
887 char *outf = '\0';
902cd7024cfa (syms_of_callproc) [MSDOS]: New lisp variable: binary-process.
Richard M. Stallman <rms@gnu.org>
parents: 5348
diff changeset
888
23462
aaad8461ff34 (Fcall_process): Use $TMPDIR instead of trying $TMP
Eli Zaretskii <eliz@gnu.org>
parents: 23079
diff changeset
889 if ((outf = egetenv ("TMPDIR"))
aaad8461ff34 (Fcall_process): Use $TMPDIR instead of trying $TMP
Eli Zaretskii <eliz@gnu.org>
parents: 23079
diff changeset
890 || (outf = egetenv ("TMP"))
aaad8461ff34 (Fcall_process): Use $TMPDIR instead of trying $TMP
Eli Zaretskii <eliz@gnu.org>
parents: 23079
diff changeset
891 || (outf = egetenv ("TEMP")))
5501
902cd7024cfa (syms_of_callproc) [MSDOS]: New lisp variable: binary-process.
Richard M. Stallman <rms@gnu.org>
parents: 5348
diff changeset
892 strcpy (tempfile = alloca (strlen (outf) + 20), outf);
902cd7024cfa (syms_of_callproc) [MSDOS]: New lisp variable: binary-process.
Richard M. Stallman <rms@gnu.org>
parents: 5348
diff changeset
893 else
902cd7024cfa (syms_of_callproc) [MSDOS]: New lisp variable: binary-process.
Richard M. Stallman <rms@gnu.org>
parents: 5348
diff changeset
894 {
902cd7024cfa (syms_of_callproc) [MSDOS]: New lisp variable: binary-process.
Richard M. Stallman <rms@gnu.org>
parents: 5348
diff changeset
895 tempfile = alloca (20);
902cd7024cfa (syms_of_callproc) [MSDOS]: New lisp variable: binary-process.
Richard M. Stallman <rms@gnu.org>
parents: 5348
diff changeset
896 *tempfile = '\0';
902cd7024cfa (syms_of_callproc) [MSDOS]: New lisp variable: binary-process.
Richard M. Stallman <rms@gnu.org>
parents: 5348
diff changeset
897 }
12238
f442c22815b8 (call-process-region) [DOS_NT]: Use IS_DIRECTORY_SEP.
Richard M. Stallman <rms@gnu.org>
parents: 11780
diff changeset
898 if (!IS_DIRECTORY_SEP (tempfile[strlen (tempfile) - 1]))
5501
902cd7024cfa (syms_of_callproc) [MSDOS]: New lisp variable: binary-process.
Richard M. Stallman <rms@gnu.org>
parents: 5348
diff changeset
899 strcat (tempfile, "/");
15824
11517dc55f5b (Fcall_process_region) [DOS_NT]: Avoid downcasing
Richard M. Stallman <rms@gnu.org>
parents: 15610
diff changeset
900 if ('/' == DIRECTORY_SEP)
11517dc55f5b (Fcall_process_region) [DOS_NT]: Avoid downcasing
Richard M. Stallman <rms@gnu.org>
parents: 15610
diff changeset
901 dostounix_filename (tempfile);
11517dc55f5b (Fcall_process_region) [DOS_NT]: Avoid downcasing
Richard M. Stallman <rms@gnu.org>
parents: 15610
diff changeset
902 else
11517dc55f5b (Fcall_process_region) [DOS_NT]: Avoid downcasing
Richard M. Stallman <rms@gnu.org>
parents: 15610
diff changeset
903 unixtodos_filename (tempfile);
12238
f442c22815b8 (call-process-region) [DOS_NT]: Use IS_DIRECTORY_SEP.
Richard M. Stallman <rms@gnu.org>
parents: 11780
diff changeset
904 #ifdef WINDOWSNT
f442c22815b8 (call-process-region) [DOS_NT]: Use IS_DIRECTORY_SEP.
Richard M. Stallman <rms@gnu.org>
parents: 11780
diff changeset
905 strcat (tempfile, "emXXXXXX");
f442c22815b8 (call-process-region) [DOS_NT]: Use IS_DIRECTORY_SEP.
Richard M. Stallman <rms@gnu.org>
parents: 11780
diff changeset
906 #else
5501
902cd7024cfa (syms_of_callproc) [MSDOS]: New lisp variable: binary-process.
Richard M. Stallman <rms@gnu.org>
parents: 5348
diff changeset
907 strcat (tempfile, "detmp.XXX");
12238
f442c22815b8 (call-process-region) [DOS_NT]: Use IS_DIRECTORY_SEP.
Richard M. Stallman <rms@gnu.org>
parents: 11780
diff changeset
908 #endif
9786
7f4b72244919 (getenv_internal) [WINDOWSNT]: Use strnicmp, not bcmp.
Richard M. Stallman <rms@gnu.org>
parents: 9609
diff changeset
909 #else /* not DOS_NT */
46370
40db0673e6f0 Most uses of XSTRING combined with STRING_BYTES or indirection changed to
Ken Raeburn <raeburn@raeburn.org>
parents: 46293
diff changeset
910 char *tempfile = (char *) alloca (SBYTES (Vtemp_file_name_pattern) + 1);
40db0673e6f0 Most uses of XSTRING combined with STRING_BYTES or indirection changed to
Ken Raeburn <raeburn@raeburn.org>
parents: 46293
diff changeset
911 bcopy (SDATA (Vtemp_file_name_pattern), tempfile,
40db0673e6f0 Most uses of XSTRING combined with STRING_BYTES or indirection changed to
Ken Raeburn <raeburn@raeburn.org>
parents: 46293
diff changeset
912 SBYTES (Vtemp_file_name_pattern) + 1);
9786
7f4b72244919 (getenv_internal) [WINDOWSNT]: Use strnicmp, not bcmp.
Richard M. Stallman <rms@gnu.org>
parents: 9609
diff changeset
913 #endif /* not DOS_NT */
5501
902cd7024cfa (syms_of_callproc) [MSDOS]: New lisp variable: binary-process.
Richard M. Stallman <rms@gnu.org>
parents: 5348
diff changeset
914
24931
6ccce3af0d2a (Fcall_process): Decide coding system for decoding
Richard M. Stallman <rms@gnu.org>
parents: 24920
diff changeset
915 coding_systems = Qt;
6ccce3af0d2a (Fcall_process): Decide coding system for decoding
Richard M. Stallman <rms@gnu.org>
parents: 24920
diff changeset
916
33285
91819a44456a (Fcall_process_region): Use HAVE_MKSTEMP.
Dave Love <fx@gnu.org>
parents: 31100
diff changeset
917 #ifdef HAVE_MKSTEMP
91819a44456a (Fcall_process_region): Use HAVE_MKSTEMP.
Dave Love <fx@gnu.org>
parents: 31100
diff changeset
918 {
75152
69fafc0d9959 (Fcall_process_region) [HAVE_MKSTEMP]: Add BLOCK_INPUT
YAMAMOTO Mitsuharu <mituharu@math.s.chiba-u.ac.jp>
parents: 74836
diff changeset
919 int fd;
69fafc0d9959 (Fcall_process_region) [HAVE_MKSTEMP]: Add BLOCK_INPUT
YAMAMOTO Mitsuharu <mituharu@math.s.chiba-u.ac.jp>
parents: 74836
diff changeset
920
69fafc0d9959 (Fcall_process_region) [HAVE_MKSTEMP]: Add BLOCK_INPUT
YAMAMOTO Mitsuharu <mituharu@math.s.chiba-u.ac.jp>
parents: 74836
diff changeset
921 BLOCK_INPUT;
69fafc0d9959 (Fcall_process_region) [HAVE_MKSTEMP]: Add BLOCK_INPUT
YAMAMOTO Mitsuharu <mituharu@math.s.chiba-u.ac.jp>
parents: 74836
diff changeset
922 fd = mkstemp (tempfile);
69fafc0d9959 (Fcall_process_region) [HAVE_MKSTEMP]: Add BLOCK_INPUT
YAMAMOTO Mitsuharu <mituharu@math.s.chiba-u.ac.jp>
parents: 74836
diff changeset
923 UNBLOCK_INPUT;
33285
91819a44456a (Fcall_process_region): Use HAVE_MKSTEMP.
Dave Love <fx@gnu.org>
parents: 31100
diff changeset
924 if (fd == -1)
91819a44456a (Fcall_process_region): Use HAVE_MKSTEMP.
Dave Love <fx@gnu.org>
parents: 31100
diff changeset
925 report_file_error ("Failed to open temporary file",
91819a44456a (Fcall_process_region): Use HAVE_MKSTEMP.
Dave Love <fx@gnu.org>
parents: 31100
diff changeset
926 Fcons (Vtemp_file_name_pattern, Qnil));
91819a44456a (Fcall_process_region): Use HAVE_MKSTEMP.
Dave Love <fx@gnu.org>
parents: 31100
diff changeset
927 else
91819a44456a (Fcall_process_region): Use HAVE_MKSTEMP.
Dave Love <fx@gnu.org>
parents: 31100
diff changeset
928 close (fd);
91819a44456a (Fcall_process_region): Use HAVE_MKSTEMP.
Dave Love <fx@gnu.org>
parents: 31100
diff changeset
929 }
91819a44456a (Fcall_process_region): Use HAVE_MKSTEMP.
Dave Love <fx@gnu.org>
parents: 31100
diff changeset
930 #else
296
558b874b5259 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
931 mktemp (tempfile);
33285
91819a44456a (Fcall_process_region): Use HAVE_MKSTEMP.
Dave Love <fx@gnu.org>
parents: 31100
diff changeset
932 #endif
296
558b874b5259 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
933
558b874b5259 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
934 filename_string = build_string (tempfile);
8555
f1b1537ed3f6 (Fcall_process_region): gcpro filename_string.
Karl Heuer <kwzh@gnu.org>
parents: 7900
diff changeset
935 GCPRO1 (filename_string);
296
558b874b5259 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
936 start = args[0];
558b874b5259 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
937 end = args[1];
17025
3c222a7edda1 Include charset.h and coding.h.
Karl Heuer <kwzh@gnu.org>
parents: 16659
diff changeset
938 /* Decide coding-system of the contents of the temporary file. */
19730
1657f4dd8c05 (Fcall_process): Set EOL conversion type to LF when
Richard M. Stallman <rms@gnu.org>
parents: 19580
diff changeset
939 if (!NILP (Vcoding_system_for_write))
1657f4dd8c05 (Fcall_process): Set EOL conversion type to LF when
Richard M. Stallman <rms@gnu.org>
parents: 19580
diff changeset
940 val = Vcoding_system_for_write;
1657f4dd8c05 (Fcall_process): Set EOL conversion type to LF when
Richard M. Stallman <rms@gnu.org>
parents: 19580
diff changeset
941 else if (NILP (current_buffer->enable_multibyte_characters))
17025
3c222a7edda1 Include charset.h and coding.h.
Karl Heuer <kwzh@gnu.org>
parents: 16659
diff changeset
942 val = Qnil;
3c222a7edda1 Include charset.h and coding.h.
Karl Heuer <kwzh@gnu.org>
parents: 16659
diff changeset
943 else
18651
982814f78d0d (Fcall_process): If enable-multibyte-characters is
Kenichi Handa <handa@m17n.org>
parents: 18539
diff changeset
944 {
19730
1657f4dd8c05 (Fcall_process): Set EOL conversion type to LF when
Richard M. Stallman <rms@gnu.org>
parents: 19580
diff changeset
945 args2 = (Lisp_Object *) alloca ((nargs + 1) * sizeof *args2);
1657f4dd8c05 (Fcall_process): Set EOL conversion type to LF when
Richard M. Stallman <rms@gnu.org>
parents: 19580
diff changeset
946 args2[0] = Qcall_process_region;
1657f4dd8c05 (Fcall_process): Set EOL conversion type to LF when
Richard M. Stallman <rms@gnu.org>
parents: 19580
diff changeset
947 for (i = 0; i < nargs; i++) args2[i + 1] = args[i];
1657f4dd8c05 (Fcall_process): Set EOL conversion type to LF when
Richard M. Stallman <rms@gnu.org>
parents: 19580
diff changeset
948 coding_systems = Ffind_operation_coding_system (nargs + 1, args2);
1657f4dd8c05 (Fcall_process): Set EOL conversion type to LF when
Richard M. Stallman <rms@gnu.org>
parents: 19580
diff changeset
949 if (CONSP (coding_systems))
25645
a14111a2a100 Use XCAR, XCDR, XFLOAT_DATA instead of explicit member access.
Ken Raeburn <raeburn@raeburn.org>
parents: 25522
diff changeset
950 val = XCDR (coding_systems);
19730
1657f4dd8c05 (Fcall_process): Set EOL conversion type to LF when
Richard M. Stallman <rms@gnu.org>
parents: 19580
diff changeset
951 else if (CONSP (Vdefault_process_coding_system))
25645
a14111a2a100 Use XCAR, XCDR, XFLOAT_DATA instead of explicit member access.
Ken Raeburn <raeburn@raeburn.org>
parents: 25522
diff changeset
952 val = XCDR (Vdefault_process_coding_system);
18651
982814f78d0d (Fcall_process): If enable-multibyte-characters is
Kenichi Handa <handa@m17n.org>
parents: 18539
diff changeset
953 else
19730
1657f4dd8c05 (Fcall_process): Set EOL conversion type to LF when
Richard M. Stallman <rms@gnu.org>
parents: 19580
diff changeset
954 val = Qnil;
18651
982814f78d0d (Fcall_process): If enable-multibyte-characters is
Kenichi Handa <handa@m17n.org>
parents: 18539
diff changeset
955 }
19730
1657f4dd8c05 (Fcall_process): Set EOL conversion type to LF when
Richard M. Stallman <rms@gnu.org>
parents: 19580
diff changeset
956
21626
ad899130056e (Fcall_process_region): Unbind coding-system-for-write
Richard M. Stallman <rms@gnu.org>
parents: 21572
diff changeset
957 {
46293
1fb8f75062c6 Use macro SPECPDL_INDEX.
Juanma Barranquero <lekktu@gmail.com>
parents: 46260
diff changeset
958 int count1 = SPECPDL_INDEX ();
21626
ad899130056e (Fcall_process_region): Unbind coding-system-for-write
Richard M. Stallman <rms@gnu.org>
parents: 21572
diff changeset
959
ad899130056e (Fcall_process_region): Unbind coding-system-for-write
Richard M. Stallman <rms@gnu.org>
parents: 21572
diff changeset
960 specbind (intern ("coding-system-for-write"), val);
67967
5936baa93f63 (Fcall_process_region): Bind file-name-handler-alist to nil for the call to
Ken Raeburn <raeburn@raeburn.org>
parents: 64770
diff changeset
961 /* POSIX lets mk[s]temp use "."; don't invoke jka-compr if we
5936baa93f63 (Fcall_process_region): Bind file-name-handler-alist to nil for the call to
Ken Raeburn <raeburn@raeburn.org>
parents: 64770
diff changeset
962 happen to get a ".Z" suffix. */
5936baa93f63 (Fcall_process_region): Bind file-name-handler-alist to nil for the call to
Ken Raeburn <raeburn@raeburn.org>
parents: 64770
diff changeset
963 specbind (intern ("file-name-handler-alist"), Qnil);
21626
ad899130056e (Fcall_process_region): Unbind coding-system-for-write
Richard M. Stallman <rms@gnu.org>
parents: 21572
diff changeset
964 Fwrite_region (start, end, filename_string, Qnil, Qlambda, Qnil, Qnil);
ad899130056e (Fcall_process_region): Unbind coding-system-for-write
Richard M. Stallman <rms@gnu.org>
parents: 21572
diff changeset
965
ad899130056e (Fcall_process_region): Unbind coding-system-for-write
Richard M. Stallman <rms@gnu.org>
parents: 21572
diff changeset
966 unbind_to (count1, Qnil);
ad899130056e (Fcall_process_region): Unbind coding-system-for-write
Richard M. Stallman <rms@gnu.org>
parents: 21572
diff changeset
967 }
17025
3c222a7edda1 Include charset.h and coding.h.
Karl Heuer <kwzh@gnu.org>
parents: 16659
diff changeset
968
49600
23a1cea22d13 Trailing whitespace deleted.
Juanma Barranquero <lekktu@gmail.com>
parents: 47018
diff changeset
969 /* Note that Fcall_process takes care of binding
19730
1657f4dd8c05 (Fcall_process): Set EOL conversion type to LF when
Richard M. Stallman <rms@gnu.org>
parents: 19580
diff changeset
970 coding-system-for-read. */
7397
e0ffa47f2ed4 [MSDOS]: Rename Vbinary_process to Vbinary_process_output.
Richard M. Stallman <rms@gnu.org>
parents: 7161
diff changeset
971
296
558b874b5259 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
972 record_unwind_protect (delete_temp_file, filename_string);
558b874b5259 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
973
23885
b08de5b1299c Include "ccl.h".
Kenichi Handa <handa@m17n.org>
parents: 23462
diff changeset
974 if (nargs > 3 && !NILP (args[3]))
296
558b874b5259 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
975 Fdelete_region (start, end);
558b874b5259 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
976
23885
b08de5b1299c Include "ccl.h".
Kenichi Handa <handa@m17n.org>
parents: 23462
diff changeset
977 if (nargs > 3)
b08de5b1299c Include "ccl.h".
Kenichi Handa <handa@m17n.org>
parents: 23462
diff changeset
978 {
b08de5b1299c Include "ccl.h".
Kenichi Handa <handa@m17n.org>
parents: 23462
diff changeset
979 args += 2;
b08de5b1299c Include "ccl.h".
Kenichi Handa <handa@m17n.org>
parents: 23462
diff changeset
980 nargs -= 2;
b08de5b1299c Include "ccl.h".
Kenichi Handa <handa@m17n.org>
parents: 23462
diff changeset
981 }
b08de5b1299c Include "ccl.h".
Kenichi Handa <handa@m17n.org>
parents: 23462
diff changeset
982 else
b08de5b1299c Include "ccl.h".
Kenichi Handa <handa@m17n.org>
parents: 23462
diff changeset
983 {
b08de5b1299c Include "ccl.h".
Kenichi Handa <handa@m17n.org>
parents: 23462
diff changeset
984 args[0] = args[2];
b08de5b1299c Include "ccl.h".
Kenichi Handa <handa@m17n.org>
parents: 23462
diff changeset
985 nargs = 2;
b08de5b1299c Include "ccl.h".
Kenichi Handa <handa@m17n.org>
parents: 23462
diff changeset
986 }
b08de5b1299c Include "ccl.h".
Kenichi Handa <handa@m17n.org>
parents: 23462
diff changeset
987 args[1] = filename_string;
296
558b874b5259 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
988
23885
b08de5b1299c Include "ccl.h".
Kenichi Handa <handa@m17n.org>
parents: 23462
diff changeset
989 RETURN_UNGCPRO (unbind_to (count, Fcall_process (nargs, args)));
296
558b874b5259 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
990 }
558b874b5259 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
991
21514
fa9ff387d260 Fix -Wimplicit warnings.
Andreas Schwab <schwab@suse.de>
parents: 21454
diff changeset
992 static int relocate_fd ();
fa9ff387d260 Fix -Wimplicit warnings.
Andreas Schwab <schwab@suse.de>
parents: 21454
diff changeset
993
83425
c82829d08b89 Fix semantics of let-binding `process-environment'.
Karoly Lorentey <lorentey@elte.hu>
parents: 83422
diff changeset
994 static char **
c82829d08b89 Fix semantics of let-binding `process-environment'.
Karoly Lorentey <lorentey@elte.hu>
parents: 83422
diff changeset
995 add_env (char **env, char **new_env, char *string)
c82829d08b89 Fix semantics of let-binding `process-environment'.
Karoly Lorentey <lorentey@elte.hu>
parents: 83422
diff changeset
996 {
c82829d08b89 Fix semantics of let-binding `process-environment'.
Karoly Lorentey <lorentey@elte.hu>
parents: 83422
diff changeset
997 char **ep;
c82829d08b89 Fix semantics of let-binding `process-environment'.
Karoly Lorentey <lorentey@elte.hu>
parents: 83422
diff changeset
998 int ok = 1;
c82829d08b89 Fix semantics of let-binding `process-environment'.
Karoly Lorentey <lorentey@elte.hu>
parents: 83422
diff changeset
999 if (string == NULL)
c82829d08b89 Fix semantics of let-binding `process-environment'.
Karoly Lorentey <lorentey@elte.hu>
parents: 83422
diff changeset
1000 return new_env;
c82829d08b89 Fix semantics of let-binding `process-environment'.
Karoly Lorentey <lorentey@elte.hu>
parents: 83422
diff changeset
1001
c82829d08b89 Fix semantics of let-binding `process-environment'.
Karoly Lorentey <lorentey@elte.hu>
parents: 83422
diff changeset
1002 /* See if this string duplicates any string already in the env.
c82829d08b89 Fix semantics of let-binding `process-environment'.
Karoly Lorentey <lorentey@elte.hu>
parents: 83422
diff changeset
1003 If so, don't put it in.
c82829d08b89 Fix semantics of let-binding `process-environment'.
Karoly Lorentey <lorentey@elte.hu>
parents: 83422
diff changeset
1004 When an env var has multiple definitions,
c82829d08b89 Fix semantics of let-binding `process-environment'.
Karoly Lorentey <lorentey@elte.hu>
parents: 83422
diff changeset
1005 we keep the definition that comes first in process-environment. */
c82829d08b89 Fix semantics of let-binding `process-environment'.
Karoly Lorentey <lorentey@elte.hu>
parents: 83422
diff changeset
1006 for (ep = env; ok && ep != new_env; ep++)
c82829d08b89 Fix semantics of let-binding `process-environment'.
Karoly Lorentey <lorentey@elte.hu>
parents: 83422
diff changeset
1007 {
c82829d08b89 Fix semantics of let-binding `process-environment'.
Karoly Lorentey <lorentey@elte.hu>
parents: 83422
diff changeset
1008 char *p = *ep, *q = string;
c82829d08b89 Fix semantics of let-binding `process-environment'.
Karoly Lorentey <lorentey@elte.hu>
parents: 83422
diff changeset
1009 while (ok)
c82829d08b89 Fix semantics of let-binding `process-environment'.
Karoly Lorentey <lorentey@elte.hu>
parents: 83422
diff changeset
1010 {
c82829d08b89 Fix semantics of let-binding `process-environment'.
Karoly Lorentey <lorentey@elte.hu>
parents: 83422
diff changeset
1011 if (*q != *p)
c82829d08b89 Fix semantics of let-binding `process-environment'.
Karoly Lorentey <lorentey@elte.hu>
parents: 83422
diff changeset
1012 break;
c82829d08b89 Fix semantics of let-binding `process-environment'.
Karoly Lorentey <lorentey@elte.hu>
parents: 83422
diff changeset
1013 if (*q == 0)
c82829d08b89 Fix semantics of let-binding `process-environment'.
Karoly Lorentey <lorentey@elte.hu>
parents: 83422
diff changeset
1014 /* The string is a lone variable name; keep it for now, we
c82829d08b89 Fix semantics of let-binding `process-environment'.
Karoly Lorentey <lorentey@elte.hu>
parents: 83422
diff changeset
1015 will remove it later. It is a placeholder for a
c82829d08b89 Fix semantics of let-binding `process-environment'.
Karoly Lorentey <lorentey@elte.hu>
parents: 83422
diff changeset
1016 variable that is not to be included in the environment. */
c82829d08b89 Fix semantics of let-binding `process-environment'.
Karoly Lorentey <lorentey@elte.hu>
parents: 83422
diff changeset
1017 break;
c82829d08b89 Fix semantics of let-binding `process-environment'.
Karoly Lorentey <lorentey@elte.hu>
parents: 83422
diff changeset
1018 if (*q == '=')
c82829d08b89 Fix semantics of let-binding `process-environment'.
Karoly Lorentey <lorentey@elte.hu>
parents: 83422
diff changeset
1019 ok = 0;
c82829d08b89 Fix semantics of let-binding `process-environment'.
Karoly Lorentey <lorentey@elte.hu>
parents: 83422
diff changeset
1020 p++, q++;
c82829d08b89 Fix semantics of let-binding `process-environment'.
Karoly Lorentey <lorentey@elte.hu>
parents: 83422
diff changeset
1021 }
c82829d08b89 Fix semantics of let-binding `process-environment'.
Karoly Lorentey <lorentey@elte.hu>
parents: 83422
diff changeset
1022 }
c82829d08b89 Fix semantics of let-binding `process-environment'.
Karoly Lorentey <lorentey@elte.hu>
parents: 83422
diff changeset
1023 if (ok)
c82829d08b89 Fix semantics of let-binding `process-environment'.
Karoly Lorentey <lorentey@elte.hu>
parents: 83422
diff changeset
1024 *new_env++ = string;
c82829d08b89 Fix semantics of let-binding `process-environment'.
Karoly Lorentey <lorentey@elte.hu>
parents: 83422
diff changeset
1025 return new_env;
c82829d08b89 Fix semantics of let-binding `process-environment'.
Karoly Lorentey <lorentey@elte.hu>
parents: 83422
diff changeset
1026 }
c82829d08b89 Fix semantics of let-binding `process-environment'.
Karoly Lorentey <lorentey@elte.hu>
parents: 83422
diff changeset
1027
296
558b874b5259 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1028 /* This is the last thing run in a newly forked inferior
558b874b5259 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1029 either synchronous or asynchronous.
558b874b5259 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1030 Copy descriptors IN, OUT and ERR as descriptors 0, 1 and 2.
558b874b5259 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1031 Initialize inferior's priority, pgrp, connected dir and environment.
558b874b5259 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1032 then exec another program based on new_argv.
558b874b5259 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1033
558b874b5259 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1034 This function may change environ for the superior process.
558b874b5259 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1035 Therefore, the superior process must save and restore the value
558b874b5259 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1036 of environ around the vfork and the call to this function.
558b874b5259 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1037
558b874b5259 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1038 SET_PGRP is nonzero if we should put the subprocess into a separate
49600
23a1cea22d13 Trailing whitespace deleted.
Juanma Barranquero <lekktu@gmail.com>
parents: 47018
diff changeset
1039 process group.
296
558b874b5259 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1040
948
928ed74adf4f Restored up-to-date version of this file from pogo. What is going on
Jim Blandy <jimb@redhat.com>
parents: 942
diff changeset
1041 CURRENT_DIR is an elisp string giving the path of the current
928ed74adf4f Restored up-to-date version of this file from pogo. What is going on
Jim Blandy <jimb@redhat.com>
parents: 942
diff changeset
1042 directory the subprocess should have. Since we can't really signal
928ed74adf4f Restored up-to-date version of this file from pogo. What is going on
Jim Blandy <jimb@redhat.com>
parents: 942
diff changeset
1043 a decent error from within the child, this should be verified as an
928ed74adf4f Restored up-to-date version of this file from pogo. What is going on
Jim Blandy <jimb@redhat.com>
parents: 942
diff changeset
1044 executable directory by the parent. */
928ed74adf4f Restored up-to-date version of this file from pogo. What is going on
Jim Blandy <jimb@redhat.com>
parents: 942
diff changeset
1045
21514
fa9ff387d260 Fix -Wimplicit warnings.
Andreas Schwab <schwab@suse.de>
parents: 21454
diff changeset
1046 int
948
928ed74adf4f Restored up-to-date version of this file from pogo. What is going on
Jim Blandy <jimb@redhat.com>
parents: 942
diff changeset
1047 child_setup (in, out, err, new_argv, set_pgrp, current_dir)
296
558b874b5259 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1048 int in, out, err;
558b874b5259 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1049 register char **new_argv;
558b874b5259 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1050 int set_pgrp;
948
928ed74adf4f Restored up-to-date version of this file from pogo. What is going on
Jim Blandy <jimb@redhat.com>
parents: 942
diff changeset
1051 Lisp_Object current_dir;
296
558b874b5259 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1052 {
948
928ed74adf4f Restored up-to-date version of this file from pogo. What is going on
Jim Blandy <jimb@redhat.com>
parents: 942
diff changeset
1053 char **env;
7722
e422f06592d3 (child_setup): If PWD is set, set it in the child so that
Richard M. Stallman <rms@gnu.org>
parents: 7481
diff changeset
1054 char *pwd_var;
9786
7f4b72244919 (getenv_internal) [WINDOWSNT]: Use strnicmp, not bcmp.
Richard M. Stallman <rms@gnu.org>
parents: 9609
diff changeset
1055 #ifdef WINDOWSNT
7f4b72244919 (getenv_internal) [WINDOWSNT]: Use strnicmp, not bcmp.
Richard M. Stallman <rms@gnu.org>
parents: 9609
diff changeset
1056 int cpid;
15087
46157341f721 (Fcall_process) [WINDOWSNT]: Remove conditional NT code.
Richard M. Stallman <rms@gnu.org>
parents: 14872
diff changeset
1057 HANDLE handles[3];
9786
7f4b72244919 (getenv_internal) [WINDOWSNT]: Use strnicmp, not bcmp.
Richard M. Stallman <rms@gnu.org>
parents: 9609
diff changeset
1058 #endif /* WINDOWSNT */
948
928ed74adf4f Restored up-to-date version of this file from pogo. What is going on
Jim Blandy <jimb@redhat.com>
parents: 942
diff changeset
1059
5530
7ff479a8e8bf (child_setup): Don't declare PID `register'; we later take its address.
Roland McGrath <roland@gnu.org>
parents: 5516
diff changeset
1060 int pid = getpid ();
296
558b874b5259 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1061
7481
b7d23c08750c (child_setup): PRIO_PROCESS renamed to SET_EMACS_PRIORITY.
Richard M. Stallman <rms@gnu.org>
parents: 7465
diff changeset
1062 #ifdef SET_EMACS_PRIORITY
1201
4ea86d32c012 * callproc.c (child_setup): Don't use setpriority; we just need a
Jim Blandy <jimb@redhat.com>
parents: 948
diff changeset
1063 {
43713
f92c4d87863a Change defvar_int def and vars to use EMACS_INT instead of just int.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 41861
diff changeset
1064 extern EMACS_INT emacs_priority;
1201
4ea86d32c012 * callproc.c (child_setup): Don't use setpriority; we just need a
Jim Blandy <jimb@redhat.com>
parents: 948
diff changeset
1065
7481
b7d23c08750c (child_setup): PRIO_PROCESS renamed to SET_EMACS_PRIORITY.
Richard M. Stallman <rms@gnu.org>
parents: 7465
diff changeset
1066 if (emacs_priority < 0)
b7d23c08750c (child_setup): PRIO_PROCESS renamed to SET_EMACS_PRIORITY.
Richard M. Stallman <rms@gnu.org>
parents: 7465
diff changeset
1067 nice (- emacs_priority);
1201
4ea86d32c012 * callproc.c (child_setup): Don't use setpriority; we just need a
Jim Blandy <jimb@redhat.com>
parents: 948
diff changeset
1068 }
7161
67618cd7bdbf (child_setup): Test PRIO_PROCESS, as in sys_subshell.
Richard M. Stallman <rms@gnu.org>
parents: 7000
diff changeset
1069 #endif
296
558b874b5259 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1070
558b874b5259 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1071 #ifdef subprocesses
558b874b5259 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1072 /* Close Emacs's descriptors that this process should not have. */
558b874b5259 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1073 close_process_descs ();
558b874b5259 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1074 #endif
21694
6e12eeda6913 (Fcall_process) [MSDOS]: Call child_setup instead of run_msdos_command.
Eli Zaretskii <eliz@gnu.org>
parents: 21626
diff changeset
1075 /* DOS_NT isn't in a vfork, so if we are in the middle of load-file,
6e12eeda6913 (Fcall_process) [MSDOS]: Call child_setup instead of run_msdos_command.
Eli Zaretskii <eliz@gnu.org>
parents: 21626
diff changeset
1076 we will lose if we call close_load_descs here. */
6e12eeda6913 (Fcall_process) [MSDOS]: Call child_setup instead of run_msdos_command.
Eli Zaretskii <eliz@gnu.org>
parents: 21626
diff changeset
1077 #ifndef DOS_NT
5569
b9e2884ca8e6 (child_setup): Call close_load_descs.
Richard M. Stallman <rms@gnu.org>
parents: 5530
diff changeset
1078 close_load_descs ();
21694
6e12eeda6913 (Fcall_process) [MSDOS]: Call child_setup instead of run_msdos_command.
Eli Zaretskii <eliz@gnu.org>
parents: 21626
diff changeset
1079 #endif
296
558b874b5259 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1080
558b874b5259 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1081 /* Note that use of alloca is always safe here. It's obvious for systems
558b874b5259 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1082 that do not have true vfork or that have true (stack) alloca.
84490
23e7b73bbc00 Update comment referring to C_ALLOCA.
Glenn Morris <rgm@gnu.org>
parents: 83802
diff changeset
1083 If using vfork and C_ALLOCA (when Emacs used to include
23e7b73bbc00 Update comment referring to C_ALLOCA.
Glenn Morris <rgm@gnu.org>
parents: 83802
diff changeset
1084 src/alloca.c) it is safe because that changes the superior's
23e7b73bbc00 Update comment referring to C_ALLOCA.
Glenn Morris <rgm@gnu.org>
parents: 83802
diff changeset
1085 static variables as if the superior had done alloca and will be
23e7b73bbc00 Update comment referring to C_ALLOCA.
Glenn Morris <rgm@gnu.org>
parents: 83802
diff changeset
1086 cleaned up in the usual way. */
948
928ed74adf4f Restored up-to-date version of this file from pogo. What is going on
Jim Blandy <jimb@redhat.com>
parents: 942
diff changeset
1087 {
7722
e422f06592d3 (child_setup): If PWD is set, set it in the child so that
Richard M. Stallman <rms@gnu.org>
parents: 7481
diff changeset
1088 register char *temp;
948
928ed74adf4f Restored up-to-date version of this file from pogo. What is going on
Jim Blandy <jimb@redhat.com>
parents: 942
diff changeset
1089 register int i;
296
558b874b5259 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1090
46370
40db0673e6f0 Most uses of XSTRING combined with STRING_BYTES or indirection changed to
Ken Raeburn <raeburn@raeburn.org>
parents: 46293
diff changeset
1091 i = SBYTES (current_dir);
30530
861a1460eba6 (child_setup) [MSDOS]: malloc pwd_var instead of
Eli Zaretskii <eliz@gnu.org>
parents: 29905
diff changeset
1092 #ifdef MSDOS
861a1460eba6 (child_setup) [MSDOS]: malloc pwd_var instead of
Eli Zaretskii <eliz@gnu.org>
parents: 29905
diff changeset
1093 /* MSDOS must have all environment variables malloc'ed, because
861a1460eba6 (child_setup) [MSDOS]: malloc pwd_var instead of
Eli Zaretskii <eliz@gnu.org>
parents: 29905
diff changeset
1094 low-level libc functions that launch subsidiary processes rely
861a1460eba6 (child_setup) [MSDOS]: malloc pwd_var instead of
Eli Zaretskii <eliz@gnu.org>
parents: 29905
diff changeset
1095 on that. */
861a1460eba6 (child_setup) [MSDOS]: malloc pwd_var instead of
Eli Zaretskii <eliz@gnu.org>
parents: 29905
diff changeset
1096 pwd_var = (char *) xmalloc (i + 6);
861a1460eba6 (child_setup) [MSDOS]: malloc pwd_var instead of
Eli Zaretskii <eliz@gnu.org>
parents: 29905
diff changeset
1097 #else
7722
e422f06592d3 (child_setup): If PWD is set, set it in the child so that
Richard M. Stallman <rms@gnu.org>
parents: 7481
diff changeset
1098 pwd_var = (char *) alloca (i + 6);
30530
861a1460eba6 (child_setup) [MSDOS]: malloc pwd_var instead of
Eli Zaretskii <eliz@gnu.org>
parents: 29905
diff changeset
1099 #endif
7722
e422f06592d3 (child_setup): If PWD is set, set it in the child so that
Richard M. Stallman <rms@gnu.org>
parents: 7481
diff changeset
1100 temp = pwd_var + 4;
e422f06592d3 (child_setup): If PWD is set, set it in the child so that
Richard M. Stallman <rms@gnu.org>
parents: 7481
diff changeset
1101 bcopy ("PWD=", pwd_var, 4);
46370
40db0673e6f0 Most uses of XSTRING combined with STRING_BYTES or indirection changed to
Ken Raeburn <raeburn@raeburn.org>
parents: 46293
diff changeset
1102 bcopy (SDATA (current_dir), temp, i);
9786
7f4b72244919 (getenv_internal) [WINDOWSNT]: Use strnicmp, not bcmp.
Richard M. Stallman <rms@gnu.org>
parents: 9609
diff changeset
1103 if (!IS_DIRECTORY_SEP (temp[i - 1])) temp[i++] = DIRECTORY_SEP;
948
928ed74adf4f Restored up-to-date version of this file from pogo. What is going on
Jim Blandy <jimb@redhat.com>
parents: 942
diff changeset
1104 temp[i] = 0;
538
c3e1fe268e78 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 493
diff changeset
1105
21694
6e12eeda6913 (Fcall_process) [MSDOS]: Call child_setup instead of run_msdos_command.
Eli Zaretskii <eliz@gnu.org>
parents: 21626
diff changeset
1106 #ifndef DOS_NT
948
928ed74adf4f Restored up-to-date version of this file from pogo. What is going on
Jim Blandy <jimb@redhat.com>
parents: 942
diff changeset
1107 /* We can't signal an Elisp error here; we're in a vfork. Since
928ed74adf4f Restored up-to-date version of this file from pogo. What is going on
Jim Blandy <jimb@redhat.com>
parents: 942
diff changeset
1108 the callers check the current directory before forking, this
928ed74adf4f Restored up-to-date version of this file from pogo. What is going on
Jim Blandy <jimb@redhat.com>
parents: 942
diff changeset
1109 should only return an error if the directory's permissions
928ed74adf4f Restored up-to-date version of this file from pogo. What is going on
Jim Blandy <jimb@redhat.com>
parents: 942
diff changeset
1110 are changed between the check and this chdir, but we should
928ed74adf4f Restored up-to-date version of this file from pogo. What is going on
Jim Blandy <jimb@redhat.com>
parents: 942
diff changeset
1111 at least check. */
928ed74adf4f Restored up-to-date version of this file from pogo. What is going on
Jim Blandy <jimb@redhat.com>
parents: 942
diff changeset
1112 if (chdir (temp) < 0)
9609
74985a8972e4 (child_setup): Always use _exit.
Richard M. Stallman <rms@gnu.org>
parents: 9138
diff changeset
1113 _exit (errno);
19967
685d256c8cb5 (child_setup) [WINDOWSNT]: Change directory of
Geoff Voelker <voelker@cs.washington.edu>
parents: 19838
diff changeset
1114 #endif
7722
e422f06592d3 (child_setup): If PWD is set, set it in the child so that
Richard M. Stallman <rms@gnu.org>
parents: 7481
diff changeset
1115
21694
6e12eeda6913 (Fcall_process) [MSDOS]: Call child_setup instead of run_msdos_command.
Eli Zaretskii <eliz@gnu.org>
parents: 21626
diff changeset
1116 #ifdef DOS_NT
6e12eeda6913 (Fcall_process) [MSDOS]: Call child_setup instead of run_msdos_command.
Eli Zaretskii <eliz@gnu.org>
parents: 21626
diff changeset
1117 /* Get past the drive letter, so that d:/ is left alone. */
6e12eeda6913 (Fcall_process) [MSDOS]: Call child_setup instead of run_msdos_command.
Eli Zaretskii <eliz@gnu.org>
parents: 21626
diff changeset
1118 if (i > 2 && IS_DEVICE_SEP (temp[1]) && IS_DIRECTORY_SEP (temp[2]))
6e12eeda6913 (Fcall_process) [MSDOS]: Call child_setup instead of run_msdos_command.
Eli Zaretskii <eliz@gnu.org>
parents: 21626
diff changeset
1119 {
6e12eeda6913 (Fcall_process) [MSDOS]: Call child_setup instead of run_msdos_command.
Eli Zaretskii <eliz@gnu.org>
parents: 21626
diff changeset
1120 temp += 2;
6e12eeda6913 (Fcall_process) [MSDOS]: Call child_setup instead of run_msdos_command.
Eli Zaretskii <eliz@gnu.org>
parents: 21626
diff changeset
1121 i -= 2;
6e12eeda6913 (Fcall_process) [MSDOS]: Call child_setup instead of run_msdos_command.
Eli Zaretskii <eliz@gnu.org>
parents: 21626
diff changeset
1122 }
6e12eeda6913 (Fcall_process) [MSDOS]: Call child_setup instead of run_msdos_command.
Eli Zaretskii <eliz@gnu.org>
parents: 21626
diff changeset
1123 #endif
6e12eeda6913 (Fcall_process) [MSDOS]: Call child_setup instead of run_msdos_command.
Eli Zaretskii <eliz@gnu.org>
parents: 21626
diff changeset
1124
7722
e422f06592d3 (child_setup): If PWD is set, set it in the child so that
Richard M. Stallman <rms@gnu.org>
parents: 7481
diff changeset
1125 /* Strip trailing slashes for PWD, but leave "/" and "//" alone. */
9786
7f4b72244919 (getenv_internal) [WINDOWSNT]: Use strnicmp, not bcmp.
Richard M. Stallman <rms@gnu.org>
parents: 9609
diff changeset
1126 while (i > 2 && IS_DIRECTORY_SEP (temp[i - 1]))
7722
e422f06592d3 (child_setup): If PWD is set, set it in the child so that
Richard M. Stallman <rms@gnu.org>
parents: 7481
diff changeset
1127 temp[--i] = 0;
948
928ed74adf4f Restored up-to-date version of this file from pogo. What is going on
Jim Blandy <jimb@redhat.com>
parents: 942
diff changeset
1128 }
296
558b874b5259 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1129
83425
c82829d08b89 Fix semantics of let-binding `process-environment'.
Karoly Lorentey <lorentey@elte.hu>
parents: 83422
diff changeset
1130 /* Set `env' to a vector of the strings in the environment. */
296
558b874b5259 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1131 {
558b874b5259 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1132 register Lisp_Object tem;
558b874b5259 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1133 register char **new_env;
83425
c82829d08b89 Fix semantics of let-binding `process-environment'.
Karoly Lorentey <lorentey@elte.hu>
parents: 83422
diff changeset
1134 char **p, **q;
296
558b874b5259 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1135 register int new_length;
84740
275cddd2a0da (child_setup, getenv_internal): Use the frame's `display'
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 84702
diff changeset
1136 Lisp_Object display = Qnil;
83640
2aee92eacdab * server.el (server-process-filter): Likewise.
Dan Nicolaescu <dann@ics.uci.edu>
parents: 83556
diff changeset
1137
296
558b874b5259 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1138 new_length = 0;
558b874b5259 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1139
558b874b5259 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1140 for (tem = Vprocess_environment;
83425
c82829d08b89 Fix semantics of let-binding `process-environment'.
Karoly Lorentey <lorentey@elte.hu>
parents: 83422
diff changeset
1141 CONSP (tem) && STRINGP (XCAR (tem));
c82829d08b89 Fix semantics of let-binding `process-environment'.
Karoly Lorentey <lorentey@elte.hu>
parents: 83422
diff changeset
1142 tem = XCDR (tem))
84740
275cddd2a0da (child_setup, getenv_internal): Use the frame's `display'
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 84702
diff changeset
1143 {
275cddd2a0da (child_setup, getenv_internal): Use the frame's `display'
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 84702
diff changeset
1144 if (strncmp (SDATA (XCAR (tem)), "DISPLAY", 7) == 0
275cddd2a0da (child_setup, getenv_internal): Use the frame's `display'
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 84702
diff changeset
1145 && (SDATA (XCAR (tem)) [7] == '\0'
275cddd2a0da (child_setup, getenv_internal): Use the frame's `display'
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 84702
diff changeset
1146 || SDATA (XCAR (tem)) [7] == '='))
275cddd2a0da (child_setup, getenv_internal): Use the frame's `display'
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 84702
diff changeset
1147 /* DISPLAY is specified in process-environment. */
275cddd2a0da (child_setup, getenv_internal): Use the frame's `display'
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 84702
diff changeset
1148 display = Qt;
275cddd2a0da (child_setup, getenv_internal): Use the frame's `display'
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 84702
diff changeset
1149 new_length++;
275cddd2a0da (child_setup, getenv_internal): Use the frame's `display'
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 84702
diff changeset
1150 }
83425
c82829d08b89 Fix semantics of let-binding `process-environment'.
Karoly Lorentey <lorentey@elte.hu>
parents: 83422
diff changeset
1151
84740
275cddd2a0da (child_setup, getenv_internal): Use the frame's `display'
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 84702
diff changeset
1152 /* If not provided yet, use the frame's DISPLAY. */
275cddd2a0da (child_setup, getenv_internal): Use the frame's `display'
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 84702
diff changeset
1153 if (NILP (display))
275cddd2a0da (child_setup, getenv_internal): Use the frame's `display'
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 84702
diff changeset
1154 {
275cddd2a0da (child_setup, getenv_internal): Use the frame's `display'
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 84702
diff changeset
1155 Lisp_Object tmp = Fframe_parameter (selected_frame, Qdisplay);
275cddd2a0da (child_setup, getenv_internal): Use the frame's `display'
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 84702
diff changeset
1156 if (!STRINGP (tmp) && CONSP (Vinitial_environment))
275cddd2a0da (child_setup, getenv_internal): Use the frame's `display'
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 84702
diff changeset
1157 /* If still not found, Look for DISPLAY in Vinitial_environment. */
275cddd2a0da (child_setup, getenv_internal): Use the frame's `display'
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 84702
diff changeset
1158 tmp = Fgetenv_internal (build_string ("DISPLAY"),
275cddd2a0da (child_setup, getenv_internal): Use the frame's `display'
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 84702
diff changeset
1159 Vinitial_environment);
275cddd2a0da (child_setup, getenv_internal): Use the frame's `display'
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 84702
diff changeset
1160 if (STRINGP (tmp))
275cddd2a0da (child_setup, getenv_internal): Use the frame's `display'
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 84702
diff changeset
1161 {
275cddd2a0da (child_setup, getenv_internal): Use the frame's `display'
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 84702
diff changeset
1162 display = tmp;
275cddd2a0da (child_setup, getenv_internal): Use the frame's `display'
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 84702
diff changeset
1163 new_length++;
275cddd2a0da (child_setup, getenv_internal): Use the frame's `display'
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 84702
diff changeset
1164 }
275cddd2a0da (child_setup, getenv_internal): Use the frame's `display'
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 84702
diff changeset
1165 }
296
558b874b5259 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1166
7722
e422f06592d3 (child_setup): If PWD is set, set it in the child so that
Richard M. Stallman <rms@gnu.org>
parents: 7481
diff changeset
1167 /* new_length + 2 to include PWD and terminating 0. */
e422f06592d3 (child_setup): If PWD is set, set it in the child so that
Richard M. Stallman <rms@gnu.org>
parents: 7481
diff changeset
1168 env = new_env = (char **) alloca ((new_length + 2) * sizeof (char *));
e422f06592d3 (child_setup): If PWD is set, set it in the child so that
Richard M. Stallman <rms@gnu.org>
parents: 7481
diff changeset
1169 /* If we have a PWD envvar, pass one down,
e422f06592d3 (child_setup): If PWD is set, set it in the child so that
Richard M. Stallman <rms@gnu.org>
parents: 7481
diff changeset
1170 but with corrected value. */
83529
0d9e16eab053 Rework environment variable support. (Reported by Kalle Olavi Niemitalo and Noah Friedman.)
Karoly Lorentey <lorentey@elte.hu>
parents: 83518
diff changeset
1171 if (egetenv ("PWD"))
7722
e422f06592d3 (child_setup): If PWD is set, set it in the child so that
Richard M. Stallman <rms@gnu.org>
parents: 7481
diff changeset
1172 *new_env++ = pwd_var;
83425
c82829d08b89 Fix semantics of let-binding `process-environment'.
Karoly Lorentey <lorentey@elte.hu>
parents: 83422
diff changeset
1173
83796
e7303426ed25 (Vinitial_environment): New variable.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 83652
diff changeset
1174 if (STRINGP (display))
83640
2aee92eacdab * server.el (server-process-filter): Likewise.
Dan Nicolaescu <dann@ics.uci.edu>
parents: 83556
diff changeset
1175 {
2aee92eacdab * server.el (server-process-filter): Likewise.
Dan Nicolaescu <dann@ics.uci.edu>
parents: 83556
diff changeset
1176 int vlen = strlen ("DISPLAY=") + strlen (SDATA (display)) + 1;
2aee92eacdab * server.el (server-process-filter): Likewise.
Dan Nicolaescu <dann@ics.uci.edu>
parents: 83556
diff changeset
1177 char *vdata = (char *) alloca (vlen);
2aee92eacdab * server.el (server-process-filter): Likewise.
Dan Nicolaescu <dann@ics.uci.edu>
parents: 83556
diff changeset
1178 strcpy (vdata, "DISPLAY=");
2aee92eacdab * server.el (server-process-filter): Likewise.
Dan Nicolaescu <dann@ics.uci.edu>
parents: 83556
diff changeset
1179 strcat (vdata, SDATA (display));
2aee92eacdab * server.el (server-process-filter): Likewise.
Dan Nicolaescu <dann@ics.uci.edu>
parents: 83556
diff changeset
1180 new_env = add_env (env, new_env, vdata);
2aee92eacdab * server.el (server-process-filter): Likewise.
Dan Nicolaescu <dann@ics.uci.edu>
parents: 83556
diff changeset
1181 }
296
558b874b5259 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1182
83425
c82829d08b89 Fix semantics of let-binding `process-environment'.
Karoly Lorentey <lorentey@elte.hu>
parents: 83422
diff changeset
1183 /* Overrides. */
296
558b874b5259 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1184 for (tem = Vprocess_environment;
25645
a14111a2a100 Use XCAR, XCDR, XFLOAT_DATA instead of explicit member access.
Ken Raeburn <raeburn@raeburn.org>
parents: 25522
diff changeset
1185 CONSP (tem) && STRINGP (XCAR (tem));
a14111a2a100 Use XCAR, XCDR, XFLOAT_DATA instead of explicit member access.
Ken Raeburn <raeburn@raeburn.org>
parents: 25522
diff changeset
1186 tem = XCDR (tem))
84740
275cddd2a0da (child_setup, getenv_internal): Use the frame's `display'
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 84702
diff changeset
1187 new_env = add_env (env, new_env, SDATA (XCAR (tem)));
296
558b874b5259 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1188
558b874b5259 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1189 *new_env = 0;
83425
c82829d08b89 Fix semantics of let-binding `process-environment'.
Karoly Lorentey <lorentey@elte.hu>
parents: 83422
diff changeset
1190
c82829d08b89 Fix semantics of let-binding `process-environment'.
Karoly Lorentey <lorentey@elte.hu>
parents: 83422
diff changeset
1191 /* Remove variable names without values. */
c82829d08b89 Fix semantics of let-binding `process-environment'.
Karoly Lorentey <lorentey@elte.hu>
parents: 83422
diff changeset
1192 p = q = env;
c82829d08b89 Fix semantics of let-binding `process-environment'.
Karoly Lorentey <lorentey@elte.hu>
parents: 83422
diff changeset
1193 while (*p != 0)
2757
a3ee51f30431 (child_setup): Omit duplicates from new env array.
Richard M. Stallman <rms@gnu.org>
parents: 2509
diff changeset
1194 {
83425
c82829d08b89 Fix semantics of let-binding `process-environment'.
Karoly Lorentey <lorentey@elte.hu>
parents: 83422
diff changeset
1195 while (*q != 0 && strchr (*q, '=') == NULL)
85596
ca34d3d5d8bf (child_setup): Remove spurious *.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 85146
diff changeset
1196 q++;
83425
c82829d08b89 Fix semantics of let-binding `process-environment'.
Karoly Lorentey <lorentey@elte.hu>
parents: 83422
diff changeset
1197 *p = *q++;
c82829d08b89 Fix semantics of let-binding `process-environment'.
Karoly Lorentey <lorentey@elte.hu>
parents: 83422
diff changeset
1198 if (*p != 0)
c82829d08b89 Fix semantics of let-binding `process-environment'.
Karoly Lorentey <lorentey@elte.hu>
parents: 83422
diff changeset
1199 p++;
2757
a3ee51f30431 (child_setup): Omit duplicates from new env array.
Richard M. Stallman <rms@gnu.org>
parents: 2509
diff changeset
1200 }
296
558b874b5259 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1201 }
83640
2aee92eacdab * server.el (server-process-filter): Likewise.
Dan Nicolaescu <dann@ics.uci.edu>
parents: 83556
diff changeset
1202
2aee92eacdab * server.el (server-process-filter): Likewise.
Dan Nicolaescu <dann@ics.uci.edu>
parents: 83556
diff changeset
1203
9786
7f4b72244919 (getenv_internal) [WINDOWSNT]: Use strnicmp, not bcmp.
Richard M. Stallman <rms@gnu.org>
parents: 9609
diff changeset
1204 #ifdef WINDOWSNT
7f4b72244919 (getenv_internal) [WINDOWSNT]: Use strnicmp, not bcmp.
Richard M. Stallman <rms@gnu.org>
parents: 9609
diff changeset
1205 prepare_standard_handles (in, out, err, handles);
46370
40db0673e6f0 Most uses of XSTRING combined with STRING_BYTES or indirection changed to
Ken Raeburn <raeburn@raeburn.org>
parents: 46293
diff changeset
1206 set_process_dir (SDATA (current_dir));
9786
7f4b72244919 (getenv_internal) [WINDOWSNT]: Use strnicmp, not bcmp.
Richard M. Stallman <rms@gnu.org>
parents: 9609
diff changeset
1207 #else /* not WINDOWSNT */
2286
7f66b40a0192 * callproc.c (child_setup): Make sure that in, out, and err are
Jim Blandy <jimb@redhat.com>
parents: 1912
diff changeset
1208 /* Make sure that in, out, and err are not actually already in
7f66b40a0192 * callproc.c (child_setup): Make sure that in, out, and err are
Jim Blandy <jimb@redhat.com>
parents: 1912
diff changeset
1209 descriptors zero, one, or two; this could happen if Emacs is
5501
902cd7024cfa (syms_of_callproc) [MSDOS]: New lisp variable: binary-process.
Richard M. Stallman <rms@gnu.org>
parents: 5348
diff changeset
1210 started with its standard in, out, or error closed, as might
2286
7f66b40a0192 * callproc.c (child_setup): Make sure that in, out, and err are
Jim Blandy <jimb@redhat.com>
parents: 1912
diff changeset
1211 happen under X. */
12430
14792ea851f9 (child_setup): Don't get confused if in == err.
Richard M. Stallman <rms@gnu.org>
parents: 12238
diff changeset
1212 {
14792ea851f9 (child_setup): Don't get confused if in == err.
Richard M. Stallman <rms@gnu.org>
parents: 12238
diff changeset
1213 int oin = in, oout = out;
14792ea851f9 (child_setup): Don't get confused if in == err.
Richard M. Stallman <rms@gnu.org>
parents: 12238
diff changeset
1214
14792ea851f9 (child_setup): Don't get confused if in == err.
Richard M. Stallman <rms@gnu.org>
parents: 12238
diff changeset
1215 /* We have to avoid relocating the same descriptor twice! */
14792ea851f9 (child_setup): Don't get confused if in == err.
Richard M. Stallman <rms@gnu.org>
parents: 12238
diff changeset
1216
14792ea851f9 (child_setup): Don't get confused if in == err.
Richard M. Stallman <rms@gnu.org>
parents: 12238
diff changeset
1217 in = relocate_fd (in, 3);
14792ea851f9 (child_setup): Don't get confused if in == err.
Richard M. Stallman <rms@gnu.org>
parents: 12238
diff changeset
1218
14792ea851f9 (child_setup): Don't get confused if in == err.
Richard M. Stallman <rms@gnu.org>
parents: 12238
diff changeset
1219 if (out == oin)
14792ea851f9 (child_setup): Don't get confused if in == err.
Richard M. Stallman <rms@gnu.org>
parents: 12238
diff changeset
1220 out = in;
14792ea851f9 (child_setup): Don't get confused if in == err.
Richard M. Stallman <rms@gnu.org>
parents: 12238
diff changeset
1221 else
6614
e095c5efe2e0 (child_setup): Check out==err when relocating fds.
Karl Heuer <kwzh@gnu.org>
parents: 6495
diff changeset
1222 out = relocate_fd (out, 3);
12430
14792ea851f9 (child_setup): Don't get confused if in == err.
Richard M. Stallman <rms@gnu.org>
parents: 12238
diff changeset
1223
14792ea851f9 (child_setup): Don't get confused if in == err.
Richard M. Stallman <rms@gnu.org>
parents: 12238
diff changeset
1224 if (err == oin)
14792ea851f9 (child_setup): Don't get confused if in == err.
Richard M. Stallman <rms@gnu.org>
parents: 12238
diff changeset
1225 err = in;
14792ea851f9 (child_setup): Don't get confused if in == err.
Richard M. Stallman <rms@gnu.org>
parents: 12238
diff changeset
1226 else if (err == oout)
14792ea851f9 (child_setup): Don't get confused if in == err.
Richard M. Stallman <rms@gnu.org>
parents: 12238
diff changeset
1227 err = out;
14792ea851f9 (child_setup): Don't get confused if in == err.
Richard M. Stallman <rms@gnu.org>
parents: 12238
diff changeset
1228 else
6614
e095c5efe2e0 (child_setup): Check out==err when relocating fds.
Karl Heuer <kwzh@gnu.org>
parents: 6495
diff changeset
1229 err = relocate_fd (err, 3);
12430
14792ea851f9 (child_setup): Don't get confused if in == err.
Richard M. Stallman <rms@gnu.org>
parents: 12238
diff changeset
1230 }
2286
7f66b40a0192 * callproc.c (child_setup): Make sure that in, out, and err are
Jim Blandy <jimb@redhat.com>
parents: 1912
diff changeset
1231
21694
6e12eeda6913 (Fcall_process) [MSDOS]: Call child_setup instead of run_msdos_command.
Eli Zaretskii <eliz@gnu.org>
parents: 21626
diff changeset
1232 #ifndef MSDOS
26088
b7aa6ac26872 Add support for large files, 64-bit Solaris, system locale codings.
Paul Eggert <eggert@twinsun.com>
parents: 25767
diff changeset
1233 emacs_close (0);
b7aa6ac26872 Add support for large files, 64-bit Solaris, system locale codings.
Paul Eggert <eggert@twinsun.com>
parents: 25767
diff changeset
1234 emacs_close (1);
b7aa6ac26872 Add support for large files, 64-bit Solaris, system locale codings.
Paul Eggert <eggert@twinsun.com>
parents: 25767
diff changeset
1235 emacs_close (2);
296
558b874b5259 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1236
558b874b5259 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1237 dup2 (in, 0);
558b874b5259 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1238 dup2 (out, 1);
558b874b5259 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1239 dup2 (err, 2);
26088
b7aa6ac26872 Add support for large files, 64-bit Solaris, system locale codings.
Paul Eggert <eggert@twinsun.com>
parents: 25767
diff changeset
1240 emacs_close (in);
b7aa6ac26872 Add support for large files, 64-bit Solaris, system locale codings.
Paul Eggert <eggert@twinsun.com>
parents: 25767
diff changeset
1241 emacs_close (out);
b7aa6ac26872 Add support for large files, 64-bit Solaris, system locale codings.
Paul Eggert <eggert@twinsun.com>
parents: 25767
diff changeset
1242 emacs_close (err);
21694
6e12eeda6913 (Fcall_process) [MSDOS]: Call child_setup instead of run_msdos_command.
Eli Zaretskii <eliz@gnu.org>
parents: 21626
diff changeset
1243 #endif /* not MSDOS */
9786
7f4b72244919 (getenv_internal) [WINDOWSNT]: Use strnicmp, not bcmp.
Richard M. Stallman <rms@gnu.org>
parents: 9609
diff changeset
1244 #endif /* not WINDOWSNT */
296
558b874b5259 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1245
14872
c001b28bf068 (Fcall_process, child_setup): If BSD_PGRPS, call
Richard M. Stallman <rms@gnu.org>
parents: 14438
diff changeset
1246 #if defined(USG) && !defined(BSD_PGRPS)
5179
2a1492764d5e (child_setup): Test SETPGRP_RELEASES_CTTY, not IRIX.
Richard M. Stallman <rms@gnu.org>
parents: 5154
diff changeset
1247 #ifndef SETPGRP_RELEASES_CTTY
948
928ed74adf4f Restored up-to-date version of this file from pogo. What is going on
Jim Blandy <jimb@redhat.com>
parents: 942
diff changeset
1248 setpgrp (); /* No arguments but equivalent in this case */
5179
2a1492764d5e (child_setup): Test SETPGRP_RELEASES_CTTY, not IRIX.
Richard M. Stallman <rms@gnu.org>
parents: 5154
diff changeset
1249 #endif
948
928ed74adf4f Restored up-to-date version of this file from pogo. What is going on
Jim Blandy <jimb@redhat.com>
parents: 942
diff changeset
1250 #else
928ed74adf4f Restored up-to-date version of this file from pogo. What is going on
Jim Blandy <jimb@redhat.com>
parents: 942
diff changeset
1251 setpgrp (pid, pid);
928ed74adf4f Restored up-to-date version of this file from pogo. What is going on
Jim Blandy <jimb@redhat.com>
parents: 942
diff changeset
1252 #endif /* USG */
5348
f921e3c48dcb Include systty.h.
Richard M. Stallman <rms@gnu.org>
parents: 5251
diff changeset
1253 /* setpgrp_of_tty is incorrect here; it uses input_fd. */
f921e3c48dcb Include systty.h.
Richard M. Stallman <rms@gnu.org>
parents: 5251
diff changeset
1254 EMACS_SET_TTY_PGRP (0, &pid);
296
558b874b5259 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1255
21694
6e12eeda6913 (Fcall_process) [MSDOS]: Call child_setup instead of run_msdos_command.
Eli Zaretskii <eliz@gnu.org>
parents: 21626
diff changeset
1256 #ifdef MSDOS
6e12eeda6913 (Fcall_process) [MSDOS]: Call child_setup instead of run_msdos_command.
Eli Zaretskii <eliz@gnu.org>
parents: 21626
diff changeset
1257 pid = run_msdos_command (new_argv, pwd_var + 4, in, out, err, env);
30607
7f8793e95bb0 (child_setup): Use xfree instead of free.
Gerd Moellmann <gerd@gnu.org>
parents: 30579
diff changeset
1258 xfree (pwd_var);
21694
6e12eeda6913 (Fcall_process) [MSDOS]: Call child_setup instead of run_msdos_command.
Eli Zaretskii <eliz@gnu.org>
parents: 21626
diff changeset
1259 if (pid == -1)
6e12eeda6913 (Fcall_process) [MSDOS]: Call child_setup instead of run_msdos_command.
Eli Zaretskii <eliz@gnu.org>
parents: 21626
diff changeset
1260 /* An error occurred while trying to run the subprocess. */
6e12eeda6913 (Fcall_process) [MSDOS]: Call child_setup instead of run_msdos_command.
Eli Zaretskii <eliz@gnu.org>
parents: 21626
diff changeset
1261 report_file_error ("Spawning child process", Qnil);
6e12eeda6913 (Fcall_process) [MSDOS]: Call child_setup instead of run_msdos_command.
Eli Zaretskii <eliz@gnu.org>
parents: 21626
diff changeset
1262 return pid;
6e12eeda6913 (Fcall_process) [MSDOS]: Call child_setup instead of run_msdos_command.
Eli Zaretskii <eliz@gnu.org>
parents: 21626
diff changeset
1263 #else /* not MSDOS */
9786
7f4b72244919 (getenv_internal) [WINDOWSNT]: Use strnicmp, not bcmp.
Richard M. Stallman <rms@gnu.org>
parents: 9609
diff changeset
1264 #ifdef WINDOWSNT
7f4b72244919 (getenv_internal) [WINDOWSNT]: Use strnicmp, not bcmp.
Richard M. Stallman <rms@gnu.org>
parents: 9609
diff changeset
1265 /* Spawn the child. (See ntproc.c:Spawnve). */
7f4b72244919 (getenv_internal) [WINDOWSNT]: Use strnicmp, not bcmp.
Richard M. Stallman <rms@gnu.org>
parents: 9609
diff changeset
1266 cpid = spawnve (_P_NOWAIT, new_argv[0], new_argv, env);
20041
c743e52dd2b0 Ensure standard handles are reset even if spawnve fails.
Andrew Innes <andrewi@gnu.org>
parents: 19967
diff changeset
1267 reset_standard_handles (in, out, err, handles);
11379
23f7aa711f96 (child_setup) [WINDOWSNT]: Removed syntax errors.
Karl Heuer <kwzh@gnu.org>
parents: 11235
diff changeset
1268 if (cpid == -1)
23f7aa711f96 (child_setup) [WINDOWSNT]: Removed syntax errors.
Karl Heuer <kwzh@gnu.org>
parents: 11235
diff changeset
1269 /* An error occurred while trying to spawn the process. */
23f7aa711f96 (child_setup) [WINDOWSNT]: Removed syntax errors.
Karl Heuer <kwzh@gnu.org>
parents: 11235
diff changeset
1270 report_file_error ("Spawning child process", Qnil);
9786
7f4b72244919 (getenv_internal) [WINDOWSNT]: Use strnicmp, not bcmp.
Richard M. Stallman <rms@gnu.org>
parents: 9609
diff changeset
1271 return cpid;
7f4b72244919 (getenv_internal) [WINDOWSNT]: Use strnicmp, not bcmp.
Richard M. Stallman <rms@gnu.org>
parents: 9609
diff changeset
1272 #else /* not WINDOWSNT */
296
558b874b5259 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1273 /* execvp does not accept an environment arg so the only way
558b874b5259 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1274 to pass this environment is to set environ. Our caller
558b874b5259 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1275 is responsible for restoring the ambient value of environ. */
558b874b5259 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1276 environ = env;
558b874b5259 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1277 execvp (new_argv[0], new_argv);
558b874b5259 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1278
26088
b7aa6ac26872 Add support for large files, 64-bit Solaris, system locale codings.
Paul Eggert <eggert@twinsun.com>
parents: 25767
diff changeset
1279 emacs_write (1, "Can't exec program: ", 20);
b7aa6ac26872 Add support for large files, 64-bit Solaris, system locale codings.
Paul Eggert <eggert@twinsun.com>
parents: 25767
diff changeset
1280 emacs_write (1, new_argv[0], strlen (new_argv[0]));
b7aa6ac26872 Add support for large files, 64-bit Solaris, system locale codings.
Paul Eggert <eggert@twinsun.com>
parents: 25767
diff changeset
1281 emacs_write (1, "\n", 1);
296
558b874b5259 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1282 _exit (1);
9786
7f4b72244919 (getenv_internal) [WINDOWSNT]: Use strnicmp, not bcmp.
Richard M. Stallman <rms@gnu.org>
parents: 9609
diff changeset
1283 #endif /* not WINDOWSNT */
5501
902cd7024cfa (syms_of_callproc) [MSDOS]: New lisp variable: binary-process.
Richard M. Stallman <rms@gnu.org>
parents: 5348
diff changeset
1284 #endif /* not MSDOS */
296
558b874b5259 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1285 }
558b874b5259 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1286
21454
1361a790bca8 (relocate_fd): Avoid `min'/`max' as variable names.
Karl Heuer <kwzh@gnu.org>
parents: 21244
diff changeset
1287 /* Move the file descriptor FD so that its number is not less than MINFD.
2286
7f66b40a0192 * callproc.c (child_setup): Make sure that in, out, and err are
Jim Blandy <jimb@redhat.com>
parents: 1912
diff changeset
1288 If the file descriptor is moved at all, the original is freed. */
21514
fa9ff387d260 Fix -Wimplicit warnings.
Andreas Schwab <schwab@suse.de>
parents: 21454
diff changeset
1289 static int
21454
1361a790bca8 (relocate_fd): Avoid `min'/`max' as variable names.
Karl Heuer <kwzh@gnu.org>
parents: 21244
diff changeset
1290 relocate_fd (fd, minfd)
1361a790bca8 (relocate_fd): Avoid `min'/`max' as variable names.
Karl Heuer <kwzh@gnu.org>
parents: 21244
diff changeset
1291 int fd, minfd;
2286
7f66b40a0192 * callproc.c (child_setup): Make sure that in, out, and err are
Jim Blandy <jimb@redhat.com>
parents: 1912
diff changeset
1292 {
21454
1361a790bca8 (relocate_fd): Avoid `min'/`max' as variable names.
Karl Heuer <kwzh@gnu.org>
parents: 21244
diff changeset
1293 if (fd >= minfd)
2286
7f66b40a0192 * callproc.c (child_setup): Make sure that in, out, and err are
Jim Blandy <jimb@redhat.com>
parents: 1912
diff changeset
1294 return fd;
7f66b40a0192 * callproc.c (child_setup): Make sure that in, out, and err are
Jim Blandy <jimb@redhat.com>
parents: 1912
diff changeset
1295 else
7f66b40a0192 * callproc.c (child_setup): Make sure that in, out, and err are
Jim Blandy <jimb@redhat.com>
parents: 1912
diff changeset
1296 {
7f66b40a0192 * callproc.c (child_setup): Make sure that in, out, and err are
Jim Blandy <jimb@redhat.com>
parents: 1912
diff changeset
1297 int new = dup (fd);
7f66b40a0192 * callproc.c (child_setup): Make sure that in, out, and err are
Jim Blandy <jimb@redhat.com>
parents: 1912
diff changeset
1298 if (new == -1)
7f66b40a0192 * callproc.c (child_setup): Make sure that in, out, and err are
Jim Blandy <jimb@redhat.com>
parents: 1912
diff changeset
1299 {
2509
daaa78c8c980 * callproc.c (relocate_fd): Make messages string literals, not
Jim Blandy <jimb@redhat.com>
parents: 2432
diff changeset
1300 char *message1 = "Error while setting up child: ";
5516
ec5a245c14ed Don't declare sys_errlist; declare strerror instead.
Roland McGrath <roland@gnu.org>
parents: 5501
diff changeset
1301 char *errmessage = strerror (errno);
2509
daaa78c8c980 * callproc.c (relocate_fd): Make messages string literals, not
Jim Blandy <jimb@redhat.com>
parents: 2432
diff changeset
1302 char *message2 = "\n";
26088
b7aa6ac26872 Add support for large files, 64-bit Solaris, system locale codings.
Paul Eggert <eggert@twinsun.com>
parents: 25767
diff changeset
1303 emacs_write (2, message1, strlen (message1));
b7aa6ac26872 Add support for large files, 64-bit Solaris, system locale codings.
Paul Eggert <eggert@twinsun.com>
parents: 25767
diff changeset
1304 emacs_write (2, errmessage, strlen (errmessage));
b7aa6ac26872 Add support for large files, 64-bit Solaris, system locale codings.
Paul Eggert <eggert@twinsun.com>
parents: 25767
diff changeset
1305 emacs_write (2, message2, strlen (message2));
2286
7f66b40a0192 * callproc.c (child_setup): Make sure that in, out, and err are
Jim Blandy <jimb@redhat.com>
parents: 1912
diff changeset
1306 _exit (1);
7f66b40a0192 * callproc.c (child_setup): Make sure that in, out, and err are
Jim Blandy <jimb@redhat.com>
parents: 1912
diff changeset
1307 }
7f66b40a0192 * callproc.c (child_setup): Make sure that in, out, and err are
Jim Blandy <jimb@redhat.com>
parents: 1912
diff changeset
1308 /* Note that we hold the original FD open while we recurse,
7f66b40a0192 * callproc.c (child_setup): Make sure that in, out, and err are
Jim Blandy <jimb@redhat.com>
parents: 1912
diff changeset
1309 to guarantee we'll get a new FD if we need it. */
21454
1361a790bca8 (relocate_fd): Avoid `min'/`max' as variable names.
Karl Heuer <kwzh@gnu.org>
parents: 21244
diff changeset
1310 new = relocate_fd (new, minfd);
26088
b7aa6ac26872 Add support for large files, 64-bit Solaris, system locale codings.
Paul Eggert <eggert@twinsun.com>
parents: 25767
diff changeset
1311 emacs_close (fd);
2286
7f66b40a0192 * callproc.c (child_setup): Make sure that in, out, and err are
Jim Blandy <jimb@redhat.com>
parents: 1912
diff changeset
1312 return new;
7f66b40a0192 * callproc.c (child_setup): Make sure that in, out, and err are
Jim Blandy <jimb@redhat.com>
parents: 1912
diff changeset
1313 }
7f66b40a0192 * callproc.c (child_setup): Make sure that in, out, and err are
Jim Blandy <jimb@redhat.com>
parents: 1912
diff changeset
1314 }
7f66b40a0192 * callproc.c (child_setup): Make sure that in, out, and err are
Jim Blandy <jimb@redhat.com>
parents: 1912
diff changeset
1315
942
c519b70eb50b Replaced fuctions egetenv, Fgetenv, getenv_internal, which had
Joseph Arceneaux <jla@gnu.org>
parents: 934
diff changeset
1316 static int
84702
f859ca19dbb0 (getenv_internal_1): New function.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 84490
diff changeset
1317 getenv_internal_1 (var, varlen, value, valuelen, env)
942
c519b70eb50b Replaced fuctions egetenv, Fgetenv, getenv_internal, which had
Joseph Arceneaux <jla@gnu.org>
parents: 934
diff changeset
1318 char *var;
c519b70eb50b Replaced fuctions egetenv, Fgetenv, getenv_internal, which had
Joseph Arceneaux <jla@gnu.org>
parents: 934
diff changeset
1319 int varlen;
c519b70eb50b Replaced fuctions egetenv, Fgetenv, getenv_internal, which had
Joseph Arceneaux <jla@gnu.org>
parents: 934
diff changeset
1320 char **value;
c519b70eb50b Replaced fuctions egetenv, Fgetenv, getenv_internal, which had
Joseph Arceneaux <jla@gnu.org>
parents: 934
diff changeset
1321 int *valuelen;
84702
f859ca19dbb0 (getenv_internal_1): New function.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 84490
diff changeset
1322 Lisp_Object env;
942
c519b70eb50b Replaced fuctions egetenv, Fgetenv, getenv_internal, which had
Joseph Arceneaux <jla@gnu.org>
parents: 934
diff changeset
1323 {
84702
f859ca19dbb0 (getenv_internal_1): New function.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 84490
diff changeset
1324 for (; CONSP (env); env = XCDR (env))
942
c519b70eb50b Replaced fuctions egetenv, Fgetenv, getenv_internal, which had
Joseph Arceneaux <jla@gnu.org>
parents: 934
diff changeset
1325 {
84702
f859ca19dbb0 (getenv_internal_1): New function.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 84490
diff changeset
1326 Lisp_Object entry = XCAR (env);
9138
6c814eb4d892 (Fcall_process, child_setup, getenv_internal): Use type test macros.
Karl Heuer <kwzh@gnu.org>
parents: 8853
diff changeset
1327 if (STRINGP (entry)
84702
f859ca19dbb0 (getenv_internal_1): New function.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 84490
diff changeset
1328 && SBYTES (entry) >= varlen
9786
7f4b72244919 (getenv_internal) [WINDOWSNT]: Use strnicmp, not bcmp.
Richard M. Stallman <rms@gnu.org>
parents: 9609
diff changeset
1329 #ifdef WINDOWSNT
7f4b72244919 (getenv_internal) [WINDOWSNT]: Use strnicmp, not bcmp.
Richard M. Stallman <rms@gnu.org>
parents: 9609
diff changeset
1330 /* NT environment variables are case insensitive. */
46370
40db0673e6f0 Most uses of XSTRING combined with STRING_BYTES or indirection changed to
Ken Raeburn <raeburn@raeburn.org>
parents: 46293
diff changeset
1331 && ! strnicmp (SDATA (entry), var, varlen)
9786
7f4b72244919 (getenv_internal) [WINDOWSNT]: Use strnicmp, not bcmp.
Richard M. Stallman <rms@gnu.org>
parents: 9609
diff changeset
1332 #else /* not WINDOWSNT */
46370
40db0673e6f0 Most uses of XSTRING combined with STRING_BYTES or indirection changed to
Ken Raeburn <raeburn@raeburn.org>
parents: 46293
diff changeset
1333 && ! bcmp (SDATA (entry), var, varlen)
9786
7f4b72244919 (getenv_internal) [WINDOWSNT]: Use strnicmp, not bcmp.
Richard M. Stallman <rms@gnu.org>
parents: 9609
diff changeset
1334 #endif /* not WINDOWSNT */
11393
81653012e0a6 (getenv_internal): Balance parentheses across #if/#endif.
Karl Heuer <kwzh@gnu.org>
parents: 11379
diff changeset
1335 )
942
c519b70eb50b Replaced fuctions egetenv, Fgetenv, getenv_internal, which had
Joseph Arceneaux <jla@gnu.org>
parents: 934
diff changeset
1336 {
84702
f859ca19dbb0 (getenv_internal_1): New function.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 84490
diff changeset
1337 if (SBYTES (entry) > varlen && SREF (entry, varlen) == '=')
f859ca19dbb0 (getenv_internal_1): New function.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 84490
diff changeset
1338 {
f859ca19dbb0 (getenv_internal_1): New function.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 84490
diff changeset
1339 *value = (char *) SDATA (entry) + (varlen + 1);
f859ca19dbb0 (getenv_internal_1): New function.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 84490
diff changeset
1340 *valuelen = SBYTES (entry) - (varlen + 1);
f859ca19dbb0 (getenv_internal_1): New function.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 84490
diff changeset
1341 return 1;
f859ca19dbb0 (getenv_internal_1): New function.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 84490
diff changeset
1342 }
f859ca19dbb0 (getenv_internal_1): New function.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 84490
diff changeset
1343 else if (SBYTES (entry) == varlen)
f859ca19dbb0 (getenv_internal_1): New function.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 84490
diff changeset
1344 {
f859ca19dbb0 (getenv_internal_1): New function.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 84490
diff changeset
1345 /* Lone variable names in Vprocess_environment mean that
f859ca19dbb0 (getenv_internal_1): New function.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 84490
diff changeset
1346 variable should be removed from the environment. */
f859ca19dbb0 (getenv_internal_1): New function.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 84490
diff changeset
1347 *value = NULL;
f859ca19dbb0 (getenv_internal_1): New function.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 84490
diff changeset
1348 return 1;
f859ca19dbb0 (getenv_internal_1): New function.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 84490
diff changeset
1349 }
f859ca19dbb0 (getenv_internal_1): New function.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 84490
diff changeset
1350 }
f859ca19dbb0 (getenv_internal_1): New function.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 84490
diff changeset
1351 }
f859ca19dbb0 (getenv_internal_1): New function.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 84490
diff changeset
1352 return 0;
f859ca19dbb0 (getenv_internal_1): New function.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 84490
diff changeset
1353 }
f859ca19dbb0 (getenv_internal_1): New function.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 84490
diff changeset
1354
f859ca19dbb0 (getenv_internal_1): New function.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 84490
diff changeset
1355 static int
83427
2afc49c9f0c0 Store local environment in frame (not terminal) parameters.
Karoly Lorentey <lorentey@elte.hu>
parents: 83426
diff changeset
1356 getenv_internal (var, varlen, value, valuelen, frame)
942
c519b70eb50b Replaced fuctions egetenv, Fgetenv, getenv_internal, which had
Joseph Arceneaux <jla@gnu.org>
parents: 934
diff changeset
1357 char *var;
c519b70eb50b Replaced fuctions egetenv, Fgetenv, getenv_internal, which had
Joseph Arceneaux <jla@gnu.org>
parents: 934
diff changeset
1358 int varlen;
c519b70eb50b Replaced fuctions egetenv, Fgetenv, getenv_internal, which had
Joseph Arceneaux <jla@gnu.org>
parents: 934
diff changeset
1359 char **value;
c519b70eb50b Replaced fuctions egetenv, Fgetenv, getenv_internal, which had
Joseph Arceneaux <jla@gnu.org>
parents: 934
diff changeset
1360 int *valuelen;
83427
2afc49c9f0c0 Store local environment in frame (not terminal) parameters.
Karoly Lorentey <lorentey@elte.hu>
parents: 83426
diff changeset
1361 Lisp_Object frame;
942
c519b70eb50b Replaced fuctions egetenv, Fgetenv, getenv_internal, which had
Joseph Arceneaux <jla@gnu.org>
parents: 934
diff changeset
1362 {
84740
275cddd2a0da (child_setup, getenv_internal): Use the frame's `display'
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 84702
diff changeset
1363 /* Try to find VAR in Vprocess_environment first. */
275cddd2a0da (child_setup, getenv_internal): Use the frame's `display'
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 84702
diff changeset
1364 if (getenv_internal_1 (var, varlen, value, valuelen,
275cddd2a0da (child_setup, getenv_internal): Use the frame's `display'
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 84702
diff changeset
1365 Vprocess_environment))
275cddd2a0da (child_setup, getenv_internal): Use the frame's `display'
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 84702
diff changeset
1366 return *value ? 1 : 0;
83796
e7303426ed25 (Vinitial_environment): New variable.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 83652
diff changeset
1367
84740
275cddd2a0da (child_setup, getenv_internal): Use the frame's `display'
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 84702
diff changeset
1368 /* For DISPLAY try to get the values from the frame or the initial env. */
275cddd2a0da (child_setup, getenv_internal): Use the frame's `display'
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 84702
diff changeset
1369 if (strcmp (var, "DISPLAY") == 0)
942
c519b70eb50b Replaced fuctions egetenv, Fgetenv, getenv_internal, which had
Joseph Arceneaux <jla@gnu.org>
parents: 934
diff changeset
1370 {
84740
275cddd2a0da (child_setup, getenv_internal): Use the frame's `display'
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 84702
diff changeset
1371 Lisp_Object display
275cddd2a0da (child_setup, getenv_internal): Use the frame's `display'
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 84702
diff changeset
1372 = Fframe_parameter (NILP (frame) ? selected_frame : frame, Qdisplay);
275cddd2a0da (child_setup, getenv_internal): Use the frame's `display'
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 84702
diff changeset
1373 if (STRINGP (display))
275cddd2a0da (child_setup, getenv_internal): Use the frame's `display'
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 84702
diff changeset
1374 {
83640
2aee92eacdab * server.el (server-process-filter): Likewise.
Dan Nicolaescu <dann@ics.uci.edu>
parents: 83556
diff changeset
1375 *value = (char *) SDATA (display);
2aee92eacdab * server.el (server-process-filter): Likewise.
Dan Nicolaescu <dann@ics.uci.edu>
parents: 83556
diff changeset
1376 *valuelen = SBYTES (display);
942
c519b70eb50b Replaced fuctions egetenv, Fgetenv, getenv_internal, which had
Joseph Arceneaux <jla@gnu.org>
parents: 934
diff changeset
1377 return 1;
c519b70eb50b Replaced fuctions egetenv, Fgetenv, getenv_internal, which had
Joseph Arceneaux <jla@gnu.org>
parents: 934
diff changeset
1378 }
84740
275cddd2a0da (child_setup, getenv_internal): Use the frame's `display'
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 84702
diff changeset
1379 /* If still not found, Look for DISPLAY in Vinitial_environment. */
275cddd2a0da (child_setup, getenv_internal): Use the frame's `display'
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 84702
diff changeset
1380 if (getenv_internal_1 (var, varlen, value, valuelen,
275cddd2a0da (child_setup, getenv_internal): Use the frame's `display'
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 84702
diff changeset
1381 Vinitial_environment))
275cddd2a0da (child_setup, getenv_internal): Use the frame's `display'
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 84702
diff changeset
1382 return *value ? 1 : 0;
942
c519b70eb50b Replaced fuctions egetenv, Fgetenv, getenv_internal, which had
Joseph Arceneaux <jla@gnu.org>
parents: 934
diff changeset
1383 }
c519b70eb50b Replaced fuctions egetenv, Fgetenv, getenv_internal, which had
Joseph Arceneaux <jla@gnu.org>
parents: 934
diff changeset
1384
c519b70eb50b Replaced fuctions egetenv, Fgetenv, getenv_internal, which had
Joseph Arceneaux <jla@gnu.org>
parents: 934
diff changeset
1385 return 0;
c519b70eb50b Replaced fuctions egetenv, Fgetenv, getenv_internal, which had
Joseph Arceneaux <jla@gnu.org>
parents: 934
diff changeset
1386 }
c519b70eb50b Replaced fuctions egetenv, Fgetenv, getenv_internal, which had
Joseph Arceneaux <jla@gnu.org>
parents: 934
diff changeset
1387
83421
bb2edc915032 Implement automatic terminal-local environment variables via `local-environment-variables'.
Karoly Lorentey <lorentey@elte.hu>
parents: 64770
diff changeset
1388 DEFUN ("getenv-internal", Fgetenv_internal, Sgetenv_internal, 1, 2, 0,
83425
c82829d08b89 Fix semantics of let-binding `process-environment'.
Karoly Lorentey <lorentey@elte.hu>
parents: 83422
diff changeset
1389 doc: /* Get the value of environment variable VARIABLE.
c82829d08b89 Fix semantics of let-binding `process-environment'.
Karoly Lorentey <lorentey@elte.hu>
parents: 83422
diff changeset
1390 VARIABLE should be a string. Value is nil if VARIABLE is undefined in
c82829d08b89 Fix semantics of let-binding `process-environment'.
Karoly Lorentey <lorentey@elte.hu>
parents: 83422
diff changeset
1391 the environment. Otherwise, value is a string.
83421
bb2edc915032 Implement automatic terminal-local environment variables via `local-environment-variables'.
Karoly Lorentey <lorentey@elte.hu>
parents: 64770
diff changeset
1392
83529
0d9e16eab053 Rework environment variable support. (Reported by Kalle Olavi Niemitalo and Noah Friedman.)
Karoly Lorentey <lorentey@elte.hu>
parents: 83518
diff changeset
1393 This function searches `process-environment' for VARIABLE. If it is
0d9e16eab053 Rework environment variable support. (Reported by Kalle Olavi Niemitalo and Noah Friedman.)
Karoly Lorentey <lorentey@elte.hu>
parents: 83518
diff changeset
1394 not found there, then it continues the search in the environment list
0d9e16eab053 Rework environment variable support. (Reported by Kalle Olavi Niemitalo and Noah Friedman.)
Karoly Lorentey <lorentey@elte.hu>
parents: 83518
diff changeset
1395 of the selected frame.
83421
bb2edc915032 Implement automatic terminal-local environment variables via `local-environment-variables'.
Karoly Lorentey <lorentey@elte.hu>
parents: 64770
diff changeset
1396
84702
f859ca19dbb0 (getenv_internal_1): New function.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 84490
diff changeset
1397 If optional parameter ENV is a list, then search this list instead of
f859ca19dbb0 (getenv_internal_1): New function.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 84490
diff changeset
1398 `process-environment', and return t when encountering a negative entry.
f859ca19dbb0 (getenv_internal_1): New function.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 84490
diff changeset
1399
f859ca19dbb0 (getenv_internal_1): New function.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 84490
diff changeset
1400 If it is a frame, then this function will ignore `process-environment' and
f859ca19dbb0 (getenv_internal_1): New function.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 84490
diff changeset
1401 will simply look up the variable in that frame's environment. */)
f859ca19dbb0 (getenv_internal_1): New function.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 84490
diff changeset
1402 (variable, env)
f859ca19dbb0 (getenv_internal_1): New function.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 84490
diff changeset
1403 Lisp_Object variable, env;
942
c519b70eb50b Replaced fuctions egetenv, Fgetenv, getenv_internal, which had
Joseph Arceneaux <jla@gnu.org>
parents: 934
diff changeset
1404 {
c519b70eb50b Replaced fuctions egetenv, Fgetenv, getenv_internal, which had
Joseph Arceneaux <jla@gnu.org>
parents: 934
diff changeset
1405 char *value;
c519b70eb50b Replaced fuctions egetenv, Fgetenv, getenv_internal, which had
Joseph Arceneaux <jla@gnu.org>
parents: 934
diff changeset
1406 int valuelen;
c519b70eb50b Replaced fuctions egetenv, Fgetenv, getenv_internal, which had
Joseph Arceneaux <jla@gnu.org>
parents: 934
diff changeset
1407
83425
c82829d08b89 Fix semantics of let-binding `process-environment'.
Karoly Lorentey <lorentey@elte.hu>
parents: 83422
diff changeset
1408 CHECK_STRING (variable);
84702
f859ca19dbb0 (getenv_internal_1): New function.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 84490
diff changeset
1409 if (CONSP (env))
f859ca19dbb0 (getenv_internal_1): New function.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 84490
diff changeset
1410 {
f859ca19dbb0 (getenv_internal_1): New function.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 84490
diff changeset
1411 if (getenv_internal_1 (SDATA (variable), SBYTES (variable),
f859ca19dbb0 (getenv_internal_1): New function.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 84490
diff changeset
1412 &value, &valuelen, env))
f859ca19dbb0 (getenv_internal_1): New function.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 84490
diff changeset
1413 return value ? make_string (value, valuelen) : Qt;
f859ca19dbb0 (getenv_internal_1): New function.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 84490
diff changeset
1414 else
f859ca19dbb0 (getenv_internal_1): New function.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 84490
diff changeset
1415 return Qnil;
f859ca19dbb0 (getenv_internal_1): New function.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 84490
diff changeset
1416 }
f859ca19dbb0 (getenv_internal_1): New function.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 84490
diff changeset
1417 else if (getenv_internal (SDATA (variable), SBYTES (variable),
84740
275cddd2a0da (child_setup, getenv_internal): Use the frame's `display'
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 84702
diff changeset
1418 &value, &valuelen, env))
942
c519b70eb50b Replaced fuctions egetenv, Fgetenv, getenv_internal, which had
Joseph Arceneaux <jla@gnu.org>
parents: 934
diff changeset
1419 return make_string (value, valuelen);
c519b70eb50b Replaced fuctions egetenv, Fgetenv, getenv_internal, which had
Joseph Arceneaux <jla@gnu.org>
parents: 934
diff changeset
1420 else
c519b70eb50b Replaced fuctions egetenv, Fgetenv, getenv_internal, which had
Joseph Arceneaux <jla@gnu.org>
parents: 934
diff changeset
1421 return Qnil;
c519b70eb50b Replaced fuctions egetenv, Fgetenv, getenv_internal, which had
Joseph Arceneaux <jla@gnu.org>
parents: 934
diff changeset
1422 }
c519b70eb50b Replaced fuctions egetenv, Fgetenv, getenv_internal, which had
Joseph Arceneaux <jla@gnu.org>
parents: 934
diff changeset
1423
83425
c82829d08b89 Fix semantics of let-binding `process-environment'.
Karoly Lorentey <lorentey@elte.hu>
parents: 83422
diff changeset
1424 /* A version of getenv that consults the Lisp environment lists,
c82829d08b89 Fix semantics of let-binding `process-environment'.
Karoly Lorentey <lorentey@elte.hu>
parents: 83422
diff changeset
1425 easily callable from C. */
942
c519b70eb50b Replaced fuctions egetenv, Fgetenv, getenv_internal, which had
Joseph Arceneaux <jla@gnu.org>
parents: 934
diff changeset
1426 char *
c519b70eb50b Replaced fuctions egetenv, Fgetenv, getenv_internal, which had
Joseph Arceneaux <jla@gnu.org>
parents: 934
diff changeset
1427 egetenv (var)
948
928ed74adf4f Restored up-to-date version of this file from pogo. What is going on
Jim Blandy <jimb@redhat.com>
parents: 942
diff changeset
1428 char *var;
942
c519b70eb50b Replaced fuctions egetenv, Fgetenv, getenv_internal, which had
Joseph Arceneaux <jla@gnu.org>
parents: 934
diff changeset
1429 {
c519b70eb50b Replaced fuctions egetenv, Fgetenv, getenv_internal, which had
Joseph Arceneaux <jla@gnu.org>
parents: 934
diff changeset
1430 char *value;
c519b70eb50b Replaced fuctions egetenv, Fgetenv, getenv_internal, which had
Joseph Arceneaux <jla@gnu.org>
parents: 934
diff changeset
1431 int valuelen;
c519b70eb50b Replaced fuctions egetenv, Fgetenv, getenv_internal, which had
Joseph Arceneaux <jla@gnu.org>
parents: 934
diff changeset
1432
83421
bb2edc915032 Implement automatic terminal-local environment variables via `local-environment-variables'.
Karoly Lorentey <lorentey@elte.hu>
parents: 64770
diff changeset
1433 if (getenv_internal (var, strlen (var), &value, &valuelen, Qnil))
942
c519b70eb50b Replaced fuctions egetenv, Fgetenv, getenv_internal, which had
Joseph Arceneaux <jla@gnu.org>
parents: 934
diff changeset
1434 return value;
c519b70eb50b Replaced fuctions egetenv, Fgetenv, getenv_internal, which had
Joseph Arceneaux <jla@gnu.org>
parents: 934
diff changeset
1435 else
c519b70eb50b Replaced fuctions egetenv, Fgetenv, getenv_internal, which had
Joseph Arceneaux <jla@gnu.org>
parents: 934
diff changeset
1436 return 0;
c519b70eb50b Replaced fuctions egetenv, Fgetenv, getenv_internal, which had
Joseph Arceneaux <jla@gnu.org>
parents: 934
diff changeset
1437 }
c519b70eb50b Replaced fuctions egetenv, Fgetenv, getenv_internal, which had
Joseph Arceneaux <jla@gnu.org>
parents: 934
diff changeset
1438
296
558b874b5259 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1439
5154
e4e66bcaa016 (init_callproc): Maybe add ../lib-src to exec-path
Richard M. Stallman <rms@gnu.org>
parents: 4977
diff changeset
1440 /* This is run before init_cmdargs. */
49600
23a1cea22d13 Trailing whitespace deleted.
Juanma Barranquero <lekktu@gmail.com>
parents: 47018
diff changeset
1441
21514
fa9ff387d260 Fix -Wimplicit warnings.
Andreas Schwab <schwab@suse.de>
parents: 21454
diff changeset
1442 void
5154
e4e66bcaa016 (init_callproc): Maybe add ../lib-src to exec-path
Richard M. Stallman <rms@gnu.org>
parents: 4977
diff changeset
1443 init_callproc_1 ()
e4e66bcaa016 (init_callproc): Maybe add ../lib-src to exec-path
Richard M. Stallman <rms@gnu.org>
parents: 4977
diff changeset
1444 {
e4e66bcaa016 (init_callproc): Maybe add ../lib-src to exec-path
Richard M. Stallman <rms@gnu.org>
parents: 4977
diff changeset
1445 char *data_dir = egetenv ("EMACSDATA");
6031
ae4c6623837b (syms_of_callproc): New variable Vdoc_directory.
Karl Heuer <kwzh@gnu.org>
parents: 5688
diff changeset
1446 char *doc_dir = egetenv ("EMACSDOC");
ae4c6623837b (syms_of_callproc): New variable Vdoc_directory.
Karl Heuer <kwzh@gnu.org>
parents: 5688
diff changeset
1447
5154
e4e66bcaa016 (init_callproc): Maybe add ../lib-src to exec-path
Richard M. Stallman <rms@gnu.org>
parents: 4977
diff changeset
1448 Vdata_directory
49600
23a1cea22d13 Trailing whitespace deleted.
Juanma Barranquero <lekktu@gmail.com>
parents: 47018
diff changeset
1449 = Ffile_name_as_directory (build_string (data_dir ? data_dir
5154
e4e66bcaa016 (init_callproc): Maybe add ../lib-src to exec-path
Richard M. Stallman <rms@gnu.org>
parents: 4977
diff changeset
1450 : PATH_DATA));
6031
ae4c6623837b (syms_of_callproc): New variable Vdoc_directory.
Karl Heuer <kwzh@gnu.org>
parents: 5688
diff changeset
1451 Vdoc_directory
ae4c6623837b (syms_of_callproc): New variable Vdoc_directory.
Karl Heuer <kwzh@gnu.org>
parents: 5688
diff changeset
1452 = Ffile_name_as_directory (build_string (doc_dir ? doc_dir
ae4c6623837b (syms_of_callproc): New variable Vdoc_directory.
Karl Heuer <kwzh@gnu.org>
parents: 5688
diff changeset
1453 : PATH_DOC));
948
928ed74adf4f Restored up-to-date version of this file from pogo. What is going on
Jim Blandy <jimb@redhat.com>
parents: 942
diff changeset
1454
928ed74adf4f Restored up-to-date version of this file from pogo. What is going on
Jim Blandy <jimb@redhat.com>
parents: 942
diff changeset
1455 /* Check the EMACSPATH environment variable, defaulting to the
24412
d11ac02f9d6a Use epaths.h istead of paths.h.
Richard M. Stallman <rms@gnu.org>
parents: 23885
diff changeset
1456 PATH_EXEC path from epaths.h. */
948
928ed74adf4f Restored up-to-date version of this file from pogo. What is going on
Jim Blandy <jimb@redhat.com>
parents: 942
diff changeset
1457 Vexec_path = decode_env_path ("EMACSPATH", PATH_EXEC);
296
558b874b5259 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1458 Vexec_directory = Ffile_name_as_directory (Fcar (Vexec_path));
558b874b5259 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1459 Vexec_path = nconc2 (decode_env_path ("PATH", ""), Vexec_path);
5154
e4e66bcaa016 (init_callproc): Maybe add ../lib-src to exec-path
Richard M. Stallman <rms@gnu.org>
parents: 4977
diff changeset
1460 }
e4e66bcaa016 (init_callproc): Maybe add ../lib-src to exec-path
Richard M. Stallman <rms@gnu.org>
parents: 4977
diff changeset
1461
12615
d5db61e1a4ee (init_callproc): Set Vdoc_directory based on
Richard M. Stallman <rms@gnu.org>
parents: 12430
diff changeset
1462 /* This is run after init_cmdargs, when Vinstallation_directory is valid. */
5154
e4e66bcaa016 (init_callproc): Maybe add ../lib-src to exec-path
Richard M. Stallman <rms@gnu.org>
parents: 4977
diff changeset
1463
21514
fa9ff387d260 Fix -Wimplicit warnings.
Andreas Schwab <schwab@suse.de>
parents: 21454
diff changeset
1464 void
5154
e4e66bcaa016 (init_callproc): Maybe add ../lib-src to exec-path
Richard M. Stallman <rms@gnu.org>
parents: 4977
diff changeset
1465 init_callproc ()
e4e66bcaa016 (init_callproc): Maybe add ../lib-src to exec-path
Richard M. Stallman <rms@gnu.org>
parents: 4977
diff changeset
1466 {
e4e66bcaa016 (init_callproc): Maybe add ../lib-src to exec-path
Richard M. Stallman <rms@gnu.org>
parents: 4977
diff changeset
1467 char *data_dir = egetenv ("EMACSDATA");
49600
23a1cea22d13 Trailing whitespace deleted.
Juanma Barranquero <lekktu@gmail.com>
parents: 47018
diff changeset
1468
5154
e4e66bcaa016 (init_callproc): Maybe add ../lib-src to exec-path
Richard M. Stallman <rms@gnu.org>
parents: 4977
diff changeset
1469 register char * sh;
e4e66bcaa016 (init_callproc): Maybe add ../lib-src to exec-path
Richard M. Stallman <rms@gnu.org>
parents: 4977
diff changeset
1470 Lisp_Object tempdir;
e4e66bcaa016 (init_callproc): Maybe add ../lib-src to exec-path
Richard M. Stallman <rms@gnu.org>
parents: 4977
diff changeset
1471
22373
cb8484085daf (init_callproc): Check Vinstallation_directory even if !initialized.
Richard M. Stallman <rms@gnu.org>
parents: 22320
diff changeset
1472 if (!NILP (Vinstallation_directory))
5154
e4e66bcaa016 (init_callproc): Maybe add ../lib-src to exec-path
Richard M. Stallman <rms@gnu.org>
parents: 4977
diff changeset
1473 {
5618
a70dc7c886d0 (init_callproc): Use Vinstallation_directory.
Richard M. Stallman <rms@gnu.org>
parents: 5569
diff changeset
1474 /* Add to the path the lib-src subdir of the installation dir. */
a70dc7c886d0 (init_callproc): Use Vinstallation_directory.
Richard M. Stallman <rms@gnu.org>
parents: 5569
diff changeset
1475 Lisp_Object tem;
a70dc7c886d0 (init_callproc): Use Vinstallation_directory.
Richard M. Stallman <rms@gnu.org>
parents: 5569
diff changeset
1476 tem = Fexpand_file_name (build_string ("lib-src"),
a70dc7c886d0 (init_callproc): Use Vinstallation_directory.
Richard M. Stallman <rms@gnu.org>
parents: 5569
diff changeset
1477 Vinstallation_directory);
9786
7f4b72244919 (getenv_internal) [WINDOWSNT]: Use strnicmp, not bcmp.
Richard M. Stallman <rms@gnu.org>
parents: 9609
diff changeset
1478 #ifndef DOS_NT
7824
de1dfb8aea82 (init_callproc) [MSDOS]: Exclude less code, so ../etc
Richard M. Stallman <rms@gnu.org>
parents: 7782
diff changeset
1479 /* MSDOS uses wrapped binaries, so don't do this. */
24920
d95c8bcfe8ae (init_callproc): Set exec_directory if installation_directory is
Richard M. Stallman <rms@gnu.org>
parents: 24432
diff changeset
1480 if (NILP (Fmember (tem, Vexec_path)))
41861
56385cb63c61 (init_callproc): Set Vdata_directory based on the source
Richard M. Stallman <rms@gnu.org>
parents: 41528
diff changeset
1481 {
56385cb63c61 (init_callproc): Set Vdata_directory based on the source
Richard M. Stallman <rms@gnu.org>
parents: 41528
diff changeset
1482 Vexec_path = decode_env_path ("EMACSPATH", PATH_EXEC);
56385cb63c61 (init_callproc): Set Vdata_directory based on the source
Richard M. Stallman <rms@gnu.org>
parents: 41528
diff changeset
1483 Vexec_path = Fcons (tem, Vexec_path);
56385cb63c61 (init_callproc): Set Vdata_directory based on the source
Richard M. Stallman <rms@gnu.org>
parents: 41528
diff changeset
1484 Vexec_path = nconc2 (decode_env_path ("PATH", ""), Vexec_path);
56385cb63c61 (init_callproc): Set Vdata_directory based on the source
Richard M. Stallman <rms@gnu.org>
parents: 41528
diff changeset
1485 }
49600
23a1cea22d13 Trailing whitespace deleted.
Juanma Barranquero <lekktu@gmail.com>
parents: 47018
diff changeset
1486
24920
d95c8bcfe8ae (init_callproc): Set exec_directory if installation_directory is
Richard M. Stallman <rms@gnu.org>
parents: 24432
diff changeset
1487 Vexec_directory = Ffile_name_as_directory (tem);
9786
7f4b72244919 (getenv_internal) [WINDOWSNT]: Use strnicmp, not bcmp.
Richard M. Stallman <rms@gnu.org>
parents: 9609
diff changeset
1488 #endif /* not DOS_NT */
5154
e4e66bcaa016 (init_callproc): Maybe add ../lib-src to exec-path
Richard M. Stallman <rms@gnu.org>
parents: 4977
diff changeset
1489
12615
d5db61e1a4ee (init_callproc): Set Vdoc_directory based on
Richard M. Stallman <rms@gnu.org>
parents: 12430
diff changeset
1490 /* Maybe use ../etc as well as ../lib-src. */
d5db61e1a4ee (init_callproc): Set Vdoc_directory based on
Richard M. Stallman <rms@gnu.org>
parents: 12430
diff changeset
1491 if (data_dir == 0)
d5db61e1a4ee (init_callproc): Set Vdoc_directory based on
Richard M. Stallman <rms@gnu.org>
parents: 12430
diff changeset
1492 {
d5db61e1a4ee (init_callproc): Set Vdoc_directory based on
Richard M. Stallman <rms@gnu.org>
parents: 12430
diff changeset
1493 tem = Fexpand_file_name (build_string ("etc"),
d5db61e1a4ee (init_callproc): Set Vdoc_directory based on
Richard M. Stallman <rms@gnu.org>
parents: 12430
diff changeset
1494 Vinstallation_directory);
d5db61e1a4ee (init_callproc): Set Vdoc_directory based on
Richard M. Stallman <rms@gnu.org>
parents: 12430
diff changeset
1495 Vdoc_directory = Ffile_name_as_directory (tem);
5154
e4e66bcaa016 (init_callproc): Maybe add ../lib-src to exec-path
Richard M. Stallman <rms@gnu.org>
parents: 4977
diff changeset
1496 }
e4e66bcaa016 (init_callproc): Maybe add ../lib-src to exec-path
Richard M. Stallman <rms@gnu.org>
parents: 4977
diff changeset
1497 }
7465
fccf9d4df7bb (init_callproc): Never set Vdata_directory based on
Richard M. Stallman <rms@gnu.org>
parents: 7397
diff changeset
1498
fccf9d4df7bb (init_callproc): Never set Vdata_directory based on
Richard M. Stallman <rms@gnu.org>
parents: 7397
diff changeset
1499 /* Look for the files that should be in etc. We don't use
fccf9d4df7bb (init_callproc): Never set Vdata_directory based on
Richard M. Stallman <rms@gnu.org>
parents: 7397
diff changeset
1500 Vinstallation_directory, because these files are never installed
12615
d5db61e1a4ee (init_callproc): Set Vdoc_directory based on
Richard M. Stallman <rms@gnu.org>
parents: 12430
diff changeset
1501 near the executable, and they are never in the build
7465
fccf9d4df7bb (init_callproc): Never set Vdata_directory based on
Richard M. Stallman <rms@gnu.org>
parents: 7397
diff changeset
1502 directory when that's different from the source directory.
fccf9d4df7bb (init_callproc): Never set Vdata_directory based on
Richard M. Stallman <rms@gnu.org>
parents: 7397
diff changeset
1503
fccf9d4df7bb (init_callproc): Never set Vdata_directory based on
Richard M. Stallman <rms@gnu.org>
parents: 7397
diff changeset
1504 Instead, if these files are not in the nominal place, we try the
fccf9d4df7bb (init_callproc): Never set Vdata_directory based on
Richard M. Stallman <rms@gnu.org>
parents: 7397
diff changeset
1505 source directory. */
fccf9d4df7bb (init_callproc): Never set Vdata_directory based on
Richard M. Stallman <rms@gnu.org>
parents: 7397
diff changeset
1506 if (data_dir == 0)
fccf9d4df7bb (init_callproc): Never set Vdata_directory based on
Richard M. Stallman <rms@gnu.org>
parents: 7397
diff changeset
1507 {
41861
56385cb63c61 (init_callproc): Set Vdata_directory based on the source
Richard M. Stallman <rms@gnu.org>
parents: 41528
diff changeset
1508 Lisp_Object tem, tem1, srcdir;
7465
fccf9d4df7bb (init_callproc): Never set Vdata_directory based on
Richard M. Stallman <rms@gnu.org>
parents: 7397
diff changeset
1509
41861
56385cb63c61 (init_callproc): Set Vdata_directory based on the source
Richard M. Stallman <rms@gnu.org>
parents: 41528
diff changeset
1510 srcdir = Fexpand_file_name (build_string ("../src/"),
56385cb63c61 (init_callproc): Set Vdata_directory based on the source
Richard M. Stallman <rms@gnu.org>
parents: 41528
diff changeset
1511 build_string (PATH_DUMPLOADSEARCH));
7465
fccf9d4df7bb (init_callproc): Never set Vdata_directory based on
Richard M. Stallman <rms@gnu.org>
parents: 7397
diff changeset
1512 tem = Fexpand_file_name (build_string ("GNU"), Vdata_directory);
fccf9d4df7bb (init_callproc): Never set Vdata_directory based on
Richard M. Stallman <rms@gnu.org>
parents: 7397
diff changeset
1513 tem1 = Ffile_exists_p (tem);
41861
56385cb63c61 (init_callproc): Set Vdata_directory based on the source
Richard M. Stallman <rms@gnu.org>
parents: 41528
diff changeset
1514 if (!NILP (Fequal (srcdir, Vinvocation_directory)) || NILP (tem1))
7465
fccf9d4df7bb (init_callproc): Never set Vdata_directory based on
Richard M. Stallman <rms@gnu.org>
parents: 7397
diff changeset
1515 {
41861
56385cb63c61 (init_callproc): Set Vdata_directory based on the source
Richard M. Stallman <rms@gnu.org>
parents: 41528
diff changeset
1516 Lisp_Object newdir;
7465
fccf9d4df7bb (init_callproc): Never set Vdata_directory based on
Richard M. Stallman <rms@gnu.org>
parents: 7397
diff changeset
1517 newdir = Fexpand_file_name (build_string ("../etc/"),
fccf9d4df7bb (init_callproc): Never set Vdata_directory based on
Richard M. Stallman <rms@gnu.org>
parents: 7397
diff changeset
1518 build_string (PATH_DUMPLOADSEARCH));
fccf9d4df7bb (init_callproc): Never set Vdata_directory based on
Richard M. Stallman <rms@gnu.org>
parents: 7397
diff changeset
1519 tem = Fexpand_file_name (build_string ("GNU"), newdir);
fccf9d4df7bb (init_callproc): Never set Vdata_directory based on
Richard M. Stallman <rms@gnu.org>
parents: 7397
diff changeset
1520 tem1 = Ffile_exists_p (tem);
fccf9d4df7bb (init_callproc): Never set Vdata_directory based on
Richard M. Stallman <rms@gnu.org>
parents: 7397
diff changeset
1521 if (!NILP (tem1))
fccf9d4df7bb (init_callproc): Never set Vdata_directory based on
Richard M. Stallman <rms@gnu.org>
parents: 7397
diff changeset
1522 Vdata_directory = newdir;
fccf9d4df7bb (init_callproc): Never set Vdata_directory based on
Richard M. Stallman <rms@gnu.org>
parents: 7397
diff changeset
1523 }
fccf9d4df7bb (init_callproc): Never set Vdata_directory based on
Richard M. Stallman <rms@gnu.org>
parents: 7397
diff changeset
1524 }
296
558b874b5259 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1525
19498
34057e215ab1 (init_callproc): Don't warn about missing
Richard M. Stallman <rms@gnu.org>
parents: 19135
diff changeset
1526 #ifndef CANNOT_DUMP
34057e215ab1 (init_callproc): Don't warn about missing
Richard M. Stallman <rms@gnu.org>
parents: 19135
diff changeset
1527 if (initialized)
34057e215ab1 (init_callproc): Don't warn about missing
Richard M. Stallman <rms@gnu.org>
parents: 19135
diff changeset
1528 #endif
34057e215ab1 (init_callproc): Don't warn about missing
Richard M. Stallman <rms@gnu.org>
parents: 19135
diff changeset
1529 {
34057e215ab1 (init_callproc): Don't warn about missing
Richard M. Stallman <rms@gnu.org>
parents: 19135
diff changeset
1530 tempdir = Fdirectory_file_name (Vexec_directory);
46370
40db0673e6f0 Most uses of XSTRING combined with STRING_BYTES or indirection changed to
Ken Raeburn <raeburn@raeburn.org>
parents: 46293
diff changeset
1531 if (access (SDATA (tempdir), 0) < 0)
19498
34057e215ab1 (init_callproc): Don't warn about missing
Richard M. Stallman <rms@gnu.org>
parents: 19135
diff changeset
1532 dir_warning ("Warning: arch-dependent data dir (%s) does not exist.\n",
34057e215ab1 (init_callproc): Don't warn about missing
Richard M. Stallman <rms@gnu.org>
parents: 19135
diff changeset
1533 Vexec_directory);
34057e215ab1 (init_callproc): Don't warn about missing
Richard M. Stallman <rms@gnu.org>
parents: 19135
diff changeset
1534 }
296
558b874b5259 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1535
948
928ed74adf4f Restored up-to-date version of this file from pogo. What is going on
Jim Blandy <jimb@redhat.com>
parents: 942
diff changeset
1536 tempdir = Fdirectory_file_name (Vdata_directory);
46370
40db0673e6f0 Most uses of XSTRING combined with STRING_BYTES or indirection changed to
Ken Raeburn <raeburn@raeburn.org>
parents: 46293
diff changeset
1537 if (access (SDATA (tempdir), 0) < 0)
16486
30b8c014eaa7 (init_callproc): Use dir_warning.
Richard M. Stallman <rms@gnu.org>
parents: 15824
diff changeset
1538 dir_warning ("Warning: arch-independent data dir (%s) does not exist.\n",
30b8c014eaa7 (init_callproc): Use dir_warning.
Richard M. Stallman <rms@gnu.org>
parents: 15824
diff changeset
1539 Vdata_directory);
948
928ed74adf4f Restored up-to-date version of this file from pogo. What is going on
Jim Blandy <jimb@redhat.com>
parents: 942
diff changeset
1540
928ed74adf4f Restored up-to-date version of this file from pogo. What is going on
Jim Blandy <jimb@redhat.com>
parents: 942
diff changeset
1541 sh = (char *) getenv ("SHELL");
296
558b874b5259 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1542 Vshell_file_name = build_string (sh ? sh : "/bin/sh");
16627
530b3f7373db (Vtemp_file_name_pattern): New variable.
Richard M. Stallman <rms@gnu.org>
parents: 16593
diff changeset
1543
530b3f7373db (Vtemp_file_name_pattern): New variable.
Richard M. Stallman <rms@gnu.org>
parents: 16593
diff changeset
1544 if (getenv ("TMPDIR"))
530b3f7373db (Vtemp_file_name_pattern): New variable.
Richard M. Stallman <rms@gnu.org>
parents: 16593
diff changeset
1545 {
530b3f7373db (Vtemp_file_name_pattern): New variable.
Richard M. Stallman <rms@gnu.org>
parents: 16593
diff changeset
1546 char *dir = getenv ("TMPDIR");
530b3f7373db (Vtemp_file_name_pattern): New variable.
Richard M. Stallman <rms@gnu.org>
parents: 16593
diff changeset
1547 Vtemp_file_name_pattern
83529
0d9e16eab053 Rework environment variable support. (Reported by Kalle Olavi Niemitalo and Noah Friedman.)
Karoly Lorentey <lorentey@elte.hu>
parents: 83518
diff changeset
1548 = Fexpand_file_name (build_string ("emacsXXXXXX"),
0d9e16eab053 Rework environment variable support. (Reported by Kalle Olavi Niemitalo and Noah Friedman.)
Karoly Lorentey <lorentey@elte.hu>
parents: 83518
diff changeset
1549 build_string (dir));
16627
530b3f7373db (Vtemp_file_name_pattern): New variable.
Richard M. Stallman <rms@gnu.org>
parents: 16593
diff changeset
1550 }
530b3f7373db (Vtemp_file_name_pattern): New variable.
Richard M. Stallman <rms@gnu.org>
parents: 16593
diff changeset
1551 else
530b3f7373db (Vtemp_file_name_pattern): New variable.
Richard M. Stallman <rms@gnu.org>
parents: 16593
diff changeset
1552 Vtemp_file_name_pattern = build_string ("/tmp/emacsXXXXXX");
46600
736bbb2f8711 (init_callproc): Set up Vshared_game_score_directory.
Richard M. Stallman <rms@gnu.org>
parents: 46546
diff changeset
1553
46626
4173dcd87832 (init_callproc) [DOS_NT]: Initialize Vshared_game_score_directory to nil.
Juanma Barranquero <lekktu@gmail.com>
parents: 46600
diff changeset
1554 #ifdef DOS_NT
4173dcd87832 (init_callproc) [DOS_NT]: Initialize Vshared_game_score_directory to nil.
Juanma Barranquero <lekktu@gmail.com>
parents: 46600
diff changeset
1555 Vshared_game_score_directory = Qnil;
4173dcd87832 (init_callproc) [DOS_NT]: Initialize Vshared_game_score_directory to nil.
Juanma Barranquero <lekktu@gmail.com>
parents: 46600
diff changeset
1556 #else
46600
736bbb2f8711 (init_callproc): Set up Vshared_game_score_directory.
Richard M. Stallman <rms@gnu.org>
parents: 46546
diff changeset
1557 Vshared_game_score_directory = build_string (PATH_GAME);
736bbb2f8711 (init_callproc): Set up Vshared_game_score_directory.
Richard M. Stallman <rms@gnu.org>
parents: 46546
diff changeset
1558 if (NILP (Ffile_directory_p (Vshared_game_score_directory)))
736bbb2f8711 (init_callproc): Set up Vshared_game_score_directory.
Richard M. Stallman <rms@gnu.org>
parents: 46546
diff changeset
1559 Vshared_game_score_directory = Qnil;
46626
4173dcd87832 (init_callproc) [DOS_NT]: Initialize Vshared_game_score_directory to nil.
Juanma Barranquero <lekktu@gmail.com>
parents: 46600
diff changeset
1560 #endif
1912
f0d4fb2b9157 * callproc.c (delete_temp_file): Declare this to return
Jim Blandy <jimb@redhat.com>
parents: 1886
diff changeset
1561 }
f0d4fb2b9157 * callproc.c (delete_temp_file): Declare this to return
Jim Blandy <jimb@redhat.com>
parents: 1886
diff changeset
1562
21514
fa9ff387d260 Fix -Wimplicit warnings.
Andreas Schwab <schwab@suse.de>
parents: 21454
diff changeset
1563 void
83529
0d9e16eab053 Rework environment variable support. (Reported by Kalle Olavi Niemitalo and Noah Friedman.)
Karoly Lorentey <lorentey@elte.hu>
parents: 83518
diff changeset
1564 set_initial_environment ()
1912
f0d4fb2b9157 * callproc.c (delete_temp_file): Declare this to return
Jim Blandy <jimb@redhat.com>
parents: 1886
diff changeset
1565 {
f0d4fb2b9157 * callproc.c (delete_temp_file): Declare this to return
Jim Blandy <jimb@redhat.com>
parents: 1886
diff changeset
1566 register char **envp;
296
558b874b5259 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1567 #ifndef CANNOT_DUMP
558b874b5259 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1568 if (initialized)
96675
d45acf0c8d23 merging Emacs.app (NeXTstep port)
Adrian Robert <Adrian.B.Robert@gmail.com>
parents: 94963
diff changeset
1569 {
d45acf0c8d23 merging Emacs.app (NeXTstep port)
Adrian Robert <Adrian.B.Robert@gmail.com>
parents: 94963
diff changeset
1570 #else
d45acf0c8d23 merging Emacs.app (NeXTstep port)
Adrian Robert <Adrian.B.Robert@gmail.com>
parents: 94963
diff changeset
1571 {
d45acf0c8d23 merging Emacs.app (NeXTstep port)
Adrian Robert <Adrian.B.Robert@gmail.com>
parents: 94963
diff changeset
1572 Vprocess_environment = Qnil;
296
558b874b5259 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1573 #endif
83529
0d9e16eab053 Rework environment variable support. (Reported by Kalle Olavi Niemitalo and Noah Friedman.)
Karoly Lorentey <lorentey@elte.hu>
parents: 83518
diff changeset
1574 for (envp = environ; *envp; envp++)
83640
2aee92eacdab * server.el (server-process-filter): Likewise.
Dan Nicolaescu <dann@ics.uci.edu>
parents: 83556
diff changeset
1575 Vprocess_environment = Fcons (build_string (*envp),
2aee92eacdab * server.el (server-process-filter): Likewise.
Dan Nicolaescu <dann@ics.uci.edu>
parents: 83556
diff changeset
1576 Vprocess_environment);
83799
6aa4d1effd67 (set_initial_environment): Set Vinitial_environment only when
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 83796
diff changeset
1577 /* Ideally, the `copy' shouldn't be necessary, but it seems it's frequent
6aa4d1effd67 (set_initial_environment): Set Vinitial_environment only when
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 83796
diff changeset
1578 to use `delete' and friends on process-environment. */
6aa4d1effd67 (set_initial_environment): Set Vinitial_environment only when
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 83796
diff changeset
1579 Vinitial_environment = Fcopy_sequence (Vprocess_environment);
83529
0d9e16eab053 Rework environment variable support. (Reported by Kalle Olavi Niemitalo and Noah Friedman.)
Karoly Lorentey <lorentey@elte.hu>
parents: 83518
diff changeset
1580 }
296
558b874b5259 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1581 }
558b874b5259 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1582
21514
fa9ff387d260 Fix -Wimplicit warnings.
Andreas Schwab <schwab@suse.de>
parents: 21454
diff changeset
1583 void
296
558b874b5259 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1584 syms_of_callproc ()
558b874b5259 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1585 {
9786
7f4b72244919 (getenv_internal) [WINDOWSNT]: Use strnicmp, not bcmp.
Richard M. Stallman <rms@gnu.org>
parents: 9609
diff changeset
1586 #ifdef DOS_NT
7397
e0ffa47f2ed4 [MSDOS]: Rename Vbinary_process to Vbinary_process_output.
Richard M. Stallman <rms@gnu.org>
parents: 7161
diff changeset
1587 Qbuffer_file_type = intern ("buffer-file-type");
e0ffa47f2ed4 [MSDOS]: Rename Vbinary_process to Vbinary_process_output.
Richard M. Stallman <rms@gnu.org>
parents: 7161
diff changeset
1588 staticpro (&Qbuffer_file_type);
9786
7f4b72244919 (getenv_internal) [WINDOWSNT]: Use strnicmp, not bcmp.
Richard M. Stallman <rms@gnu.org>
parents: 9609
diff changeset
1589 #endif /* DOS_NT */
5501
902cd7024cfa (syms_of_callproc) [MSDOS]: New lisp variable: binary-process.
Richard M. Stallman <rms@gnu.org>
parents: 5348
diff changeset
1590
296
558b874b5259 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1591 DEFVAR_LISP ("shell-file-name", &Vshell_file_name,
40103
6b389fb978bc Change doc-string comments to `new style' [w/`doc:' keyword].
Pavel Janík <Pavel@Janik.cz>
parents: 39934
diff changeset
1592 doc: /* *File name to load inferior shells from.
74836
38f9c8fca7b4 Fix last change.
Eli Zaretskii <eliz@gnu.org>
parents: 74834
diff changeset
1593 Initialized from the SHELL environment variable, or to a system-dependent
38f9c8fca7b4 Fix last change.
Eli Zaretskii <eliz@gnu.org>
parents: 74834
diff changeset
1594 default if SHELL is not set. */);
296
558b874b5259 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1595
558b874b5259 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1596 DEFVAR_LISP ("exec-path", &Vexec_path,
40103
6b389fb978bc Change doc-string comments to `new style' [w/`doc:' keyword].
Pavel Janík <Pavel@Janik.cz>
parents: 39934
diff changeset
1597 doc: /* *List of directories to search programs to run in subprocesses.
6b389fb978bc Change doc-string comments to `new style' [w/`doc:' keyword].
Pavel Janík <Pavel@Janik.cz>
parents: 39934
diff changeset
1598 Each element is a string (directory name) or nil (try default directory). */);
296
558b874b5259 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1599
39811
9f7e72fba3d2 (Vexec_suffixes): New var.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 39535
diff changeset
1600 DEFVAR_LISP ("exec-suffixes", &Vexec_suffixes,
40103
6b389fb978bc Change doc-string comments to `new style' [w/`doc:' keyword].
Pavel Janík <Pavel@Janik.cz>
parents: 39934
diff changeset
1601 doc: /* *List of suffixes to try to find executable file names.
6b389fb978bc Change doc-string comments to `new style' [w/`doc:' keyword].
Pavel Janík <Pavel@Janik.cz>
parents: 39934
diff changeset
1602 Each element is a string. */);
39934
674e73ec881a (syms_of_callproc): Init Vexec_suffixes to Qnil.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 39811
diff changeset
1603 Vexec_suffixes = Qnil;
39811
9f7e72fba3d2 (Vexec_suffixes): New var.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 39535
diff changeset
1604
296
558b874b5259 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1605 DEFVAR_LISP ("exec-directory", &Vexec_directory,
40103
6b389fb978bc Change doc-string comments to `new style' [w/`doc:' keyword].
Pavel Janík <Pavel@Janik.cz>
parents: 39934
diff changeset
1606 doc: /* Directory for executables for Emacs to invoke.
6b389fb978bc Change doc-string comments to `new style' [w/`doc:' keyword].
Pavel Janík <Pavel@Janik.cz>
parents: 39934
diff changeset
1607 More generally, this includes any architecture-dependent files
6b389fb978bc Change doc-string comments to `new style' [w/`doc:' keyword].
Pavel Janík <Pavel@Janik.cz>
parents: 39934
diff changeset
1608 that are built and installed from the Emacs distribution. */);
439
350065270fc8 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 311
diff changeset
1609
948
928ed74adf4f Restored up-to-date version of this file from pogo. What is going on
Jim Blandy <jimb@redhat.com>
parents: 942
diff changeset
1610 DEFVAR_LISP ("data-directory", &Vdata_directory,
40103
6b389fb978bc Change doc-string comments to `new style' [w/`doc:' keyword].
Pavel Janík <Pavel@Janik.cz>
parents: 39934
diff changeset
1611 doc: /* Directory of machine-independent files that come with GNU Emacs.
6b389fb978bc Change doc-string comments to `new style' [w/`doc:' keyword].
Pavel Janík <Pavel@Janik.cz>
parents: 39934
diff changeset
1612 These are files intended for Emacs to use while it runs. */);
948
928ed74adf4f Restored up-to-date version of this file from pogo. What is going on
Jim Blandy <jimb@redhat.com>
parents: 942
diff changeset
1613
6031
ae4c6623837b (syms_of_callproc): New variable Vdoc_directory.
Karl Heuer <kwzh@gnu.org>
parents: 5688
diff changeset
1614 DEFVAR_LISP ("doc-directory", &Vdoc_directory,
40103
6b389fb978bc Change doc-string comments to `new style' [w/`doc:' keyword].
Pavel Janík <Pavel@Janik.cz>
parents: 39934
diff changeset
1615 doc: /* Directory containing the DOC file that comes with GNU Emacs.
75969
58d48cd0f5f0 (syms_of_callproc) <doc-directory, configure-info-directory>:
Juanma Barranquero <lekktu@gmail.com>
parents: 75348
diff changeset
1616 This is usually the same as `data-directory'. */);
6031
ae4c6623837b (syms_of_callproc): New variable Vdoc_directory.
Karl Heuer <kwzh@gnu.org>
parents: 5688
diff changeset
1617
3064
fa5466904709 * paths.h (PATH_INFO): New path, to edited by the configuration
Jim Blandy <jimb@redhat.com>
parents: 2961
diff changeset
1618 DEFVAR_LISP ("configure-info-directory", &Vconfigure_info_directory,
40103
6b389fb978bc Change doc-string comments to `new style' [w/`doc:' keyword].
Pavel Janík <Pavel@Janik.cz>
parents: 39934
diff changeset
1619 doc: /* For internal use by the build procedure only.
6b389fb978bc Change doc-string comments to `new style' [w/`doc:' keyword].
Pavel Janík <Pavel@Janik.cz>
parents: 39934
diff changeset
1620 This is the name of the directory in which the build procedure installed
75969
58d48cd0f5f0 (syms_of_callproc) <doc-directory, configure-info-directory>:
Juanma Barranquero <lekktu@gmail.com>
parents: 75348
diff changeset
1621 Emacs's info files; the default value for `Info-default-directory-list'
40103
6b389fb978bc Change doc-string comments to `new style' [w/`doc:' keyword].
Pavel Janík <Pavel@Janik.cz>
parents: 39934
diff changeset
1622 includes this. */);
3064
fa5466904709 * paths.h (PATH_INFO): New path, to edited by the configuration
Jim Blandy <jimb@redhat.com>
parents: 2961
diff changeset
1623 Vconfigure_info_directory = build_string (PATH_INFO);
fa5466904709 * paths.h (PATH_INFO): New path, to edited by the configuration
Jim Blandy <jimb@redhat.com>
parents: 2961
diff changeset
1624
45092
7f1d09693ef3 (Vgame_score_directory): Renamed to Vshared_game_score_directory.
Colin Walters <walters@gnu.org>
parents: 45002
diff changeset
1625 DEFVAR_LISP ("shared-game-score-directory", &Vshared_game_score_directory,
44486
7b98c268f335 (Vgame_score_directory): New variable.
Colin Walters <walters@gnu.org>
parents: 43713
diff changeset
1626 doc: /* Directory of score files for games which come with GNU Emacs.
7b98c268f335 (Vgame_score_directory): New variable.
Colin Walters <walters@gnu.org>
parents: 43713
diff changeset
1627 If this variable is nil, then Emacs is unable to use a shared directory. */);
46626
4173dcd87832 (init_callproc) [DOS_NT]: Initialize Vshared_game_score_directory to nil.
Juanma Barranquero <lekktu@gmail.com>
parents: 46600
diff changeset
1628 #ifdef DOS_NT
4173dcd87832 (init_callproc) [DOS_NT]: Initialize Vshared_game_score_directory to nil.
Juanma Barranquero <lekktu@gmail.com>
parents: 46600
diff changeset
1629 Vshared_game_score_directory = Qnil;
4173dcd87832 (init_callproc) [DOS_NT]: Initialize Vshared_game_score_directory to nil.
Juanma Barranquero <lekktu@gmail.com>
parents: 46600
diff changeset
1630 #else
46600
736bbb2f8711 (init_callproc): Set up Vshared_game_score_directory.
Richard M. Stallman <rms@gnu.org>
parents: 46546
diff changeset
1631 Vshared_game_score_directory = build_string (PATH_GAME);
46626
4173dcd87832 (init_callproc) [DOS_NT]: Initialize Vshared_game_score_directory to nil.
Juanma Barranquero <lekktu@gmail.com>
parents: 46600
diff changeset
1632 #endif
44486
7b98c268f335 (Vgame_score_directory): New variable.
Colin Walters <walters@gnu.org>
parents: 43713
diff changeset
1633
16627
530b3f7373db (Vtemp_file_name_pattern): New variable.
Richard M. Stallman <rms@gnu.org>
parents: 16593
diff changeset
1634 DEFVAR_LISP ("temp-file-name-pattern", &Vtemp_file_name_pattern,
40103
6b389fb978bc Change doc-string comments to `new style' [w/`doc:' keyword].
Pavel Janík <Pavel@Janik.cz>
parents: 39934
diff changeset
1635 doc: /* Pattern for making names for temporary files.
6b389fb978bc Change doc-string comments to `new style' [w/`doc:' keyword].
Pavel Janík <Pavel@Janik.cz>
parents: 39934
diff changeset
1636 This is used by `call-process-region'. */);
19012
b08145625f89 (syms_of_callproc): Don't init Vtemp_file_name_pattern here.
Richard M. Stallman <rms@gnu.org>
parents: 18765
diff changeset
1637 /* This variable is initialized in init_callproc. */
16627
530b3f7373db (Vtemp_file_name_pattern): New variable.
Richard M. Stallman <rms@gnu.org>
parents: 16593
diff changeset
1638
83796
e7303426ed25 (Vinitial_environment): New variable.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 83652
diff changeset
1639 DEFVAR_LISP ("initial-environment", &Vinitial_environment,
e7303426ed25 (Vinitial_environment): New variable.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 83652
diff changeset
1640 doc: /* List of environment variables inherited from the parent process.
e7303426ed25 (Vinitial_environment): New variable.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 83652
diff changeset
1641 Each element should be a string of the form ENVVARNAME=VALUE.
e7303426ed25 (Vinitial_environment): New variable.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 83652
diff changeset
1642 The elements must normally be decoded (using `locale-coding-system') for use. */);
e7303426ed25 (Vinitial_environment): New variable.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 83652
diff changeset
1643 Vinitial_environment = Qnil;
e7303426ed25 (Vinitial_environment): New variable.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 83652
diff changeset
1644
296
558b874b5259 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1645 DEFVAR_LISP ("process-environment", &Vprocess_environment,
83425
c82829d08b89 Fix semantics of let-binding `process-environment'.
Karoly Lorentey <lorentey@elte.hu>
parents: 83422
diff changeset
1646 doc: /* List of overridden environment variables for subprocesses to inherit.
40103
6b389fb978bc Change doc-string comments to `new style' [w/`doc:' keyword].
Pavel Janík <Pavel@Janik.cz>
parents: 39934
diff changeset
1647 Each element should be a string of the form ENVVARNAME=VALUE.
83425
c82829d08b89 Fix semantics of let-binding `process-environment'.
Karoly Lorentey <lorentey@elte.hu>
parents: 83422
diff changeset
1648
83529
0d9e16eab053 Rework environment variable support. (Reported by Kalle Olavi Niemitalo and Noah Friedman.)
Karoly Lorentey <lorentey@elte.hu>
parents: 83518
diff changeset
1649 Entries in this list take precedence to those in the frame-local
0d9e16eab053 Rework environment variable support. (Reported by Kalle Olavi Niemitalo and Noah Friedman.)
Karoly Lorentey <lorentey@elte.hu>
parents: 83518
diff changeset
1650 environments. Therefore, let-binding `process-environment' is an easy
0d9e16eab053 Rework environment variable support. (Reported by Kalle Olavi Niemitalo and Noah Friedman.)
Karoly Lorentey <lorentey@elte.hu>
parents: 83518
diff changeset
1651 way to temporarily change the value of an environment variable,
0d9e16eab053 Rework environment variable support. (Reported by Kalle Olavi Niemitalo and Noah Friedman.)
Karoly Lorentey <lorentey@elte.hu>
parents: 83518
diff changeset
1652 irrespective of where it comes from. To use `process-environment' to
0d9e16eab053 Rework environment variable support. (Reported by Kalle Olavi Niemitalo and Noah Friedman.)
Karoly Lorentey <lorentey@elte.hu>
parents: 83518
diff changeset
1653 remove an environment variable, include only its name in the list,
0d9e16eab053 Rework environment variable support. (Reported by Kalle Olavi Niemitalo and Noah Friedman.)
Karoly Lorentey <lorentey@elte.hu>
parents: 83518
diff changeset
1654 without "=VALUE".
83425
c82829d08b89 Fix semantics of let-binding `process-environment'.
Karoly Lorentey <lorentey@elte.hu>
parents: 83422
diff changeset
1655
c82829d08b89 Fix semantics of let-binding `process-environment'.
Karoly Lorentey <lorentey@elte.hu>
parents: 83422
diff changeset
1656 This variable is set to nil when Emacs starts.
c82829d08b89 Fix semantics of let-binding `process-environment'.
Karoly Lorentey <lorentey@elte.hu>
parents: 83422
diff changeset
1657
40103
6b389fb978bc Change doc-string comments to `new style' [w/`doc:' keyword].
Pavel Janík <Pavel@Janik.cz>
parents: 39934
diff changeset
1658 If multiple entries define the same variable, the first one always
6b389fb978bc Change doc-string comments to `new style' [w/`doc:' keyword].
Pavel Janík <Pavel@Janik.cz>
parents: 39934
diff changeset
1659 takes precedence.
83425
c82829d08b89 Fix semantics of let-binding `process-environment'.
Karoly Lorentey <lorentey@elte.hu>
parents: 83422
diff changeset
1660
51403
d30115b64d58 Use HAVE_FCNTL_H, not USG5.
Dave Love <fx@gnu.org>
parents: 51070
diff changeset
1661 Non-ASCII characters are encoded according to the initial value of
83425
c82829d08b89 Fix semantics of let-binding `process-environment'.
Karoly Lorentey <lorentey@elte.hu>
parents: 83422
diff changeset
1662 `locale-coding-system', i.e. the elements must normally be decoded for
c82829d08b89 Fix semantics of let-binding `process-environment'.
Karoly Lorentey <lorentey@elte.hu>
parents: 83422
diff changeset
1663 use.
c82829d08b89 Fix semantics of let-binding `process-environment'.
Karoly Lorentey <lorentey@elte.hu>
parents: 83422
diff changeset
1664
51403
d30115b64d58 Use HAVE_FCNTL_H, not USG5.
Dave Love <fx@gnu.org>
parents: 51070
diff changeset
1665 See `setenv' and `getenv'. */);
83426
7c7d1f1cb2e7 Initialize Vprocess_environment to nil.
Karoly Lorentey <lorentey@elte.hu>
parents: 83425
diff changeset
1666 Vprocess_environment = Qnil;
296
558b874b5259 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1667
558b874b5259 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1668 defsubr (&Scall_process);
28914
45b919961573 (Fgetenv_internal): Renamed from Fgetenv.
Gerd Moellmann <gerd@gnu.org>
parents: 26838
diff changeset
1669 defsubr (&Sgetenv_internal);
296
558b874b5259 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1670 defsubr (&Scall_process_region);
558b874b5259 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1671 }
52401
695cf19ef79e Add arch taglines
Miles Bader <miles@gnu.org>
parents: 51403
diff changeset
1672
695cf19ef79e Add arch taglines
Miles Bader <miles@gnu.org>
parents: 51403
diff changeset
1673 /* arch-tag: 769b8045-1df7-4d2b-8968-e3fb49017f95
695cf19ef79e Add arch taglines
Miles Bader <miles@gnu.org>
parents: 51403
diff changeset
1674 (do not change this comment) */