Mercurial > emacs
annotate src/callproc.c @ 84260:40edb5448ed7
Move here from ../../man
author | Glenn Morris <rgm@gnu.org> |
---|---|
date | Thu, 06 Sep 2007 04:47:57 +0000 |
parents | 4b264c073ca8 |
children | 23e7b73bbc00 |
rev | line source |
---|---|
296 | 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, |
75348 | 3 2002, 2003, 2004, 2005, 2006, 2007 Free Software Foundation, Inc. |
296 | 4 |
5 This file is part of GNU Emacs. | |
6 | |
7 GNU Emacs is free software; you can redistribute it and/or modify | |
8 it under the terms of the GNU General Public License as published by | |
78260
922696f363b0
Switch license to GPLv3 or later.
Glenn Morris <rgm@gnu.org>
parents:
75969
diff
changeset
|
9 the Free Software Foundation; either version 3, or (at your option) |
296 | 10 any later version. |
11 | |
12 GNU Emacs is distributed in the hope that it will be useful, | |
13 but WITHOUT ANY WARRANTY; without even the implied warranty of | |
14 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the | |
15 GNU General Public License for more details. | |
16 | |
17 You should have received a copy of the GNU General Public License | |
18 along with GNU Emacs; see the file COPYING. If not, write to | |
64084 | 19 the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, |
20 Boston, MA 02110-1301, USA. */ | |
296 | 21 |
22 | |
26088
b7aa6ac26872
Add support for large files, 64-bit Solaris, system locale codings.
Paul Eggert <eggert@twinsun.com>
parents:
25767
diff
changeset
|
23 #include <config.h> |
296 | 24 #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
|
25 #include <errno.h> |
7900
60795e826dad
Put stdio.h after config.h.
Richard M. Stallman <rms@gnu.org>
parents:
7824
diff
changeset
|
26 #include <stdio.h> |
296 | 27 |
31100
92f108b8b281
[USE_CRT_DLL]: Remove unnecessary extern, which
Andrew Innes <andrewi@gnu.org>
parents:
30703
diff
changeset
|
28 #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
|
29 extern int errno; |
31100
92f108b8b281
[USE_CRT_DLL]: Remove unnecessary extern, which
Andrew Innes <andrewi@gnu.org>
parents:
30703
diff
changeset
|
30 #endif |
2286
7f66b40a0192
* callproc.c (child_setup): Make sure that in, out, and err are
Jim Blandy <jimb@redhat.com>
parents:
1912
diff
changeset
|
31 |
296 | 32 /* Define SIGCHLD as an alias for SIGCLD. */ |
33 | |
34 #if !defined (SIGCHLD) && defined (SIGCLD) | |
35 #define SIGCHLD SIGCLD | |
36 #endif /* SIGCLD */ | |
37 | |
38 #include <sys/types.h> | |
3932
9a411d86ca72
(PRIO_PROCESS): Definition deleted.
Richard M. Stallman <rms@gnu.org>
parents:
3826
diff
changeset
|
39 |
25767
30ffae737755
(toplevel) [HAVE_UNISTD_H]: Include unistd.h.
Gerd Moellmann <gerd@gnu.org>
parents:
25645
diff
changeset
|
40 #ifdef HAVE_UNISTD_H |
30ffae737755
(toplevel) [HAVE_UNISTD_H]: Include unistd.h.
Gerd Moellmann <gerd@gnu.org>
parents:
25645
diff
changeset
|
41 #include <unistd.h> |
30ffae737755
(toplevel) [HAVE_UNISTD_H]: Include unistd.h.
Gerd Moellmann <gerd@gnu.org>
parents:
25645
diff
changeset
|
42 #endif |
30ffae737755
(toplevel) [HAVE_UNISTD_H]: Include unistd.h.
Gerd Moellmann <gerd@gnu.org>
parents:
25645
diff
changeset
|
43 |
296 | 44 #include <sys/file.h> |
51403 | 45 #ifdef HAVE_FCNTL_H |
6818
6a9b0b5399ce
If we include fcntl.h, define INCLUDED_FCNTL.
Richard M. Stallman <rms@gnu.org>
parents:
6614
diff
changeset
|
46 #define INCLUDED_FCNTL |
296 | 47 #include <fcntl.h> |
48 #endif | |
49 | |
9786
7f4b72244919
(getenv_internal) [WINDOWSNT]: Use strnicmp, not bcmp.
Richard M. Stallman <rms@gnu.org>
parents:
9609
diff
changeset
|
50 #ifdef WINDOWSNT |
7f4b72244919
(getenv_internal) [WINDOWSNT]: Use strnicmp, not bcmp.
Richard M. Stallman <rms@gnu.org>
parents:
9609
diff
changeset
|
51 #define NOMINMAX |
7f4b72244919
(getenv_internal) [WINDOWSNT]: Use strnicmp, not bcmp.
Richard M. Stallman <rms@gnu.org>
parents:
9609
diff
changeset
|
52 #include <windows.h> |
7f4b72244919
(getenv_internal) [WINDOWSNT]: Use strnicmp, not bcmp.
Richard M. Stallman <rms@gnu.org>
parents:
9609
diff
changeset
|
53 #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
|
54 #include <fcntl.h> |
16593
4ed80eda6fac
Use new names for w32 files
Geoff Voelker <voelker@cs.washington.edu>
parents:
16486
diff
changeset
|
55 #include "w32.h" |
9786
7f4b72244919
(getenv_internal) [WINDOWSNT]: Use strnicmp, not bcmp.
Richard M. Stallman <rms@gnu.org>
parents:
9609
diff
changeset
|
56 #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
|
57 #endif |
7f4b72244919
(getenv_internal) [WINDOWSNT]: Use strnicmp, not bcmp.
Richard M. Stallman <rms@gnu.org>
parents:
9609
diff
changeset
|
58 |
5501
902cd7024cfa
(syms_of_callproc) [MSDOS]: New lisp variable: binary-process.
Richard M. Stallman <rms@gnu.org>
parents:
5348
diff
changeset
|
59 #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
|
60 #define INCLUDED_FCNTL |
5501
902cd7024cfa
(syms_of_callproc) [MSDOS]: New lisp variable: binary-process.
Richard M. Stallman <rms@gnu.org>
parents:
5348
diff
changeset
|
61 #include <fcntl.h> |
902cd7024cfa
(syms_of_callproc) [MSDOS]: New lisp variable: binary-process.
Richard M. Stallman <rms@gnu.org>
parents:
5348
diff
changeset
|
62 #include <sys/stat.h> |
902cd7024cfa
(syms_of_callproc) [MSDOS]: New lisp variable: binary-process.
Richard M. Stallman <rms@gnu.org>
parents:
5348
diff
changeset
|
63 #include <sys/param.h> |
902cd7024cfa
(syms_of_callproc) [MSDOS]: New lisp variable: binary-process.
Richard M. Stallman <rms@gnu.org>
parents:
5348
diff
changeset
|
64 #include <errno.h> |
902cd7024cfa
(syms_of_callproc) [MSDOS]: New lisp variable: binary-process.
Richard M. Stallman <rms@gnu.org>
parents:
5348
diff
changeset
|
65 #endif /* MSDOS */ |
902cd7024cfa
(syms_of_callproc) [MSDOS]: New lisp variable: binary-process.
Richard M. Stallman <rms@gnu.org>
parents:
5348
diff
changeset
|
66 |
296 | 67 #ifndef O_RDONLY |
68 #define O_RDONLY 0 | |
69 #endif | |
70 | |
71 #ifndef O_WRONLY | |
72 #define O_WRONLY 1 | |
73 #endif | |
74 | |
75 #include "lisp.h" | |
76 #include "commands.h" | |
77 #include "buffer.h" | |
17025
3c222a7edda1
Include charset.h and coding.h.
Karl Heuer <kwzh@gnu.org>
parents:
16659
diff
changeset
|
78 #include "charset.h" |
23885 | 79 #include "ccl.h" |
17025
3c222a7edda1
Include charset.h and coding.h.
Karl Heuer <kwzh@gnu.org>
parents:
16659
diff
changeset
|
80 #include "coding.h" |
29273 | 81 #include "composite.h" |
24412
d11ac02f9d6a
Use epaths.h istead of paths.h.
Richard M. Stallman <rms@gnu.org>
parents:
23885
diff
changeset
|
82 #include <epaths.h> |
296 | 83 #include "process.h" |
1504
e074a2236b00
* callproc.c: Arrange for synchronous processes to get SIGINT the
Jim Blandy <jimb@redhat.com>
parents:
1201
diff
changeset
|
84 #include "syssignal.h" |
5348 | 85 #include "systty.h" |
57892 | 86 #include "blockinput.h" |
83421
bb2edc915032
Implement automatic terminal-local environment variables via `local-environment-variables'.
Karoly Lorentey <lorentey@elte.hu>
parents:
64770
diff
changeset
|
87 #include "frame.h" |
bb2edc915032
Implement automatic terminal-local environment variables via `local-environment-variables'.
Karoly Lorentey <lorentey@elte.hu>
parents:
64770
diff
changeset
|
88 #include "termhooks.h" |
296 | 89 |
21786
5f8f1b124f45
nclude msdos.h after lisp.h.
Eli Zaretskii <eliz@gnu.org>
parents:
21694
diff
changeset
|
90 #ifdef MSDOS |
5f8f1b124f45
nclude msdos.h after lisp.h.
Eli Zaretskii <eliz@gnu.org>
parents:
21694
diff
changeset
|
91 #include "msdos.h" |
5f8f1b124f45
nclude msdos.h after lisp.h.
Eli Zaretskii <eliz@gnu.org>
parents:
21694
diff
changeset
|
92 #endif |
5f8f1b124f45
nclude msdos.h after lisp.h.
Eli Zaretskii <eliz@gnu.org>
parents:
21694
diff
changeset
|
93 |
296 | 94 #ifdef VMS |
95 extern noshare char **environ; | |
96 #else | |
31100
92f108b8b281
[USE_CRT_DLL]: Remove unnecessary extern, which
Andrew Innes <andrewi@gnu.org>
parents:
30703
diff
changeset
|
97 #ifndef USE_CRT_DLL |
296 | 98 extern char **environ; |
99 #endif | |
31100
92f108b8b281
[USE_CRT_DLL]: Remove unnecessary extern, which
Andrew Innes <andrewi@gnu.org>
parents:
30703
diff
changeset
|
100 #endif |
296 | 101 |
29125
63520d6017fb
(setpgrp) [HAVE_SETPGID]: Define as setpgid.
Gerd Moellmann <gerd@gnu.org>
parents:
29000
diff
changeset
|
102 #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
|
103 #if !defined (USG) || defined (BSD_PGRPS) |
29905
ca781f54ac48
(setpgrp): Undefine before defining.
Dave Love <fx@gnu.org>
parents:
29287
diff
changeset
|
104 #undef setpgrp |
29125
63520d6017fb
(setpgrp) [HAVE_SETPGID]: Define as setpgid.
Gerd Moellmann <gerd@gnu.org>
parents:
29000
diff
changeset
|
105 #define setpgrp setpgid |
63520d6017fb
(setpgrp) [HAVE_SETPGID]: Define as setpgid.
Gerd Moellmann <gerd@gnu.org>
parents:
29000
diff
changeset
|
106 #endif |
29150
0398ec3316c5
(setpgrp): Don't define if USG and BSD_PGRPS are not defined.
Gerd Moellmann <gerd@gnu.org>
parents:
29125
diff
changeset
|
107 #endif |
29125
63520d6017fb
(setpgrp) [HAVE_SETPGID]: Define as setpgid.
Gerd Moellmann <gerd@gnu.org>
parents:
29000
diff
changeset
|
108 |
39811
9f7e72fba3d2
(Vexec_suffixes): New var.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
39535
diff
changeset
|
109 Lisp_Object Vexec_path, Vexec_directory, Vexec_suffixes; |
9f7e72fba3d2
(Vexec_suffixes): New var.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
39535
diff
changeset
|
110 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
|
111 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
|
112 Lisp_Object Vtemp_file_name_pattern; |
296 | 113 |
114 Lisp_Object Vshell_file_name; | |
115 | |
83796
e7303426ed25
(Vinitial_environment): New variable.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
83652
diff
changeset
|
116 Lisp_Object Vprocess_environment, Vinitial_environment; |
296 | 117 |
9786
7f4b72244919
(getenv_internal) [WINDOWSNT]: Use strnicmp, not bcmp.
Richard M. Stallman <rms@gnu.org>
parents:
9609
diff
changeset
|
118 #ifdef DOS_NT |
7397
e0ffa47f2ed4
[MSDOS]: Rename Vbinary_process to Vbinary_process_output.
Richard M. Stallman <rms@gnu.org>
parents:
7161
diff
changeset
|
119 Lisp_Object Qbuffer_file_type; |
9786
7f4b72244919
(getenv_internal) [WINDOWSNT]: Use strnicmp, not bcmp.
Richard M. Stallman <rms@gnu.org>
parents:
9609
diff
changeset
|
120 #endif /* DOS_NT */ |
7397
e0ffa47f2ed4
[MSDOS]: Rename Vbinary_process to Vbinary_process_output.
Richard M. Stallman <rms@gnu.org>
parents:
7161
diff
changeset
|
121 |
78501 | 122 /* True if we are about to fork off a synchronous process or if we |
296 | 123 are waiting for it. */ |
124 int synch_process_alive; | |
125 | |
126 /* Nonzero => this is a string explaining death of synchronous subprocess. */ | |
127 char *synch_process_death; | |
128 | |
53712
659b9b404c02
Define synch_process_termsig.
Jan Djärv <jan.h.d@swipnet.se>
parents:
52401
diff
changeset
|
129 /* 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
|
130 int synch_process_termsig; |
659b9b404c02
Define synch_process_termsig.
Jan Djärv <jan.h.d@swipnet.se>
parents:
52401
diff
changeset
|
131 |
296 | 132 /* If synch_process_death is zero, |
133 this is exit code of synchronous subprocess. */ | |
134 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
|
135 |
296 | 136 |
6275
132464faeaf4
Don't kill remaining processes if child exits.
Richard M. Stallman <rms@gnu.org>
parents:
6031
diff
changeset
|
137 /* 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
|
138 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
|
139 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
|
140 |
132464faeaf4
Don't kill remaining processes if child exits.
Richard M. Stallman <rms@gnu.org>
parents:
6031
diff
changeset
|
141 /* 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
|
142 static int call_process_exited; |
132464faeaf4
Don't kill remaining processes if child exits.
Richard M. Stallman <rms@gnu.org>
parents:
6031
diff
changeset
|
143 |
296 | 144 #ifndef VMS /* VMS version is in vmsproc.c. */ |
145 | |
1504
e074a2236b00
* callproc.c: Arrange for synchronous processes to get SIGINT the
Jim Blandy <jimb@redhat.com>
parents:
1201
diff
changeset
|
146 static Lisp_Object |
e074a2236b00
* callproc.c: Arrange for synchronous processes to get SIGINT the
Jim Blandy <jimb@redhat.com>
parents:
1201
diff
changeset
|
147 call_process_kill (fdpid) |
e074a2236b00
* callproc.c: Arrange for synchronous processes to get SIGINT the
Jim Blandy <jimb@redhat.com>
parents:
1201
diff
changeset
|
148 Lisp_Object fdpid; |
e074a2236b00
* callproc.c: Arrange for synchronous processes to get SIGINT the
Jim Blandy <jimb@redhat.com>
parents:
1201
diff
changeset
|
149 { |
26088
b7aa6ac26872
Add support for large files, 64-bit Solaris, system locale codings.
Paul Eggert <eggert@twinsun.com>
parents:
25767
diff
changeset
|
150 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
|
151 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
|
152 synch_process_alive = 0; |
e074a2236b00
* callproc.c: Arrange for synchronous processes to get SIGINT the
Jim Blandy <jimb@redhat.com>
parents:
1201
diff
changeset
|
153 return Qnil; |
e074a2236b00
* callproc.c: Arrange for synchronous processes to get SIGINT the
Jim Blandy <jimb@redhat.com>
parents:
1201
diff
changeset
|
154 } |
e074a2236b00
* callproc.c: Arrange for synchronous processes to get SIGINT the
Jim Blandy <jimb@redhat.com>
parents:
1201
diff
changeset
|
155 |
296 | 156 Lisp_Object |
157 call_process_cleanup (fdpid) | |
158 Lisp_Object fdpid; | |
159 { | |
44890
01b93e5e53a7
Patch for building Emacs on Mac OS X. April 26, 2002. See ChangeLog,
Andrew Choi <akochoi@shaw.ca>
parents:
44486
diff
changeset
|
160 #if defined (MSDOS) || defined (MAC_OS8) |
5501
902cd7024cfa
(syms_of_callproc) [MSDOS]: New lisp variable: binary-process.
Richard M. Stallman <rms@gnu.org>
parents:
5348
diff
changeset
|
161 /* 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
|
162 register Lisp_Object file; |
c88f34090aea
(call_process_cleanup, getenv_internal): Use assignment, not initialization.
Karl Heuer <kwzh@gnu.org>
parents:
6466
diff
changeset
|
163 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
|
164 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
|
165 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
|
166 unlink (SDATA (file)); |
44890
01b93e5e53a7
Patch for building Emacs on Mac OS X. April 26, 2002. See ChangeLog,
Andrew Choi <akochoi@shaw.ca>
parents:
44486
diff
changeset
|
167 #else /* not MSDOS and not MAC_OS8 */ |
1504
e074a2236b00
* callproc.c: Arrange for synchronous processes to get SIGINT the
Jim Blandy <jimb@redhat.com>
parents:
1201
diff
changeset
|
168 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
|
169 |
6275
132464faeaf4
Don't kill remaining processes if child exits.
Richard M. Stallman <rms@gnu.org>
parents:
6031
diff
changeset
|
170 if (call_process_exited) |
6466
4b3c537e1169
(Fcall_process): Make sure to close descriptors.
Richard M. Stallman <rms@gnu.org>
parents:
6391
diff
changeset
|
171 { |
26088
b7aa6ac26872
Add support for large files, 64-bit Solaris, system locale codings.
Paul Eggert <eggert@twinsun.com>
parents:
25767
diff
changeset
|
172 emacs_close (XFASTINT (Fcar (fdpid))); |
6466
4b3c537e1169
(Fcall_process): Make sure to close descriptors.
Richard M. Stallman <rms@gnu.org>
parents:
6391
diff
changeset
|
173 return Qnil; |
4b3c537e1169
(Fcall_process): Make sure to close descriptors.
Richard M. Stallman <rms@gnu.org>
parents:
6391
diff
changeset
|
174 } |
6275
132464faeaf4
Don't kill remaining processes if child exits.
Richard M. Stallman <rms@gnu.org>
parents:
6031
diff
changeset
|
175 |
1504
e074a2236b00
* callproc.c: Arrange for synchronous processes to get SIGINT the
Jim Blandy <jimb@redhat.com>
parents:
1201
diff
changeset
|
176 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
|
177 { |
46293
1fb8f75062c6
Use macro SPECPDL_INDEX.
Juanma Barranquero <lekktu@gmail.com>
parents:
46260
diff
changeset
|
178 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
|
179 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
|
180 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
|
181 immediate_quit = 1; |
e074a2236b00
* callproc.c: Arrange for synchronous processes to get SIGINT the
Jim Blandy <jimb@redhat.com>
parents:
1201
diff
changeset
|
182 QUIT; |
e074a2236b00
* callproc.c: Arrange for synchronous processes to get SIGINT the
Jim Blandy <jimb@redhat.com>
parents:
1201
diff
changeset
|
183 wait_for_termination (pid); |
e074a2236b00
* callproc.c: Arrange for synchronous processes to get SIGINT the
Jim Blandy <jimb@redhat.com>
parents:
1201
diff
changeset
|
184 immediate_quit = 0; |
e074a2236b00
* callproc.c: Arrange for synchronous processes to get SIGINT the
Jim Blandy <jimb@redhat.com>
parents:
1201
diff
changeset
|
185 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
|
186 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
|
187 } |
296 | 188 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
|
189 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
|
190 #endif /* not MSDOS */ |
296 | 191 return Qnil; |
192 } | |
193 | |
194 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
|
195 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
|
196 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
|
197 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
|
198 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
|
199 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
|
200 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
|
201 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
|
202 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
|
203 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
|
204 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
|
205 |
6b389fb978bc
Change doc-string comments to `new style' [w/`doc:' keyword].
Pavel Janík <Pavel@Janik.cz>
parents:
39934
diff
changeset
|
206 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
|
207 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
|
208 |
71340
5de9b904c7ad
(Fcall_process): Doc fix.
Richard M. Stallman <rms@gnu.org>
parents:
70705
diff
changeset
|
209 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
|
210 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
|
211 the program only through its return and output. |
5de9b904c7ad
(Fcall_process): Doc fix.
Richard M. Stallman <rms@gnu.org>
parents:
70705
diff
changeset
|
212 |
40103
6b389fb978bc
Change doc-string comments to `new style' [w/`doc:' keyword].
Pavel Janík <Pavel@Janik.cz>
parents:
39934
diff
changeset
|
213 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
|
214 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
|
215 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
|
216 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
|
217 |
c8af574bcf48
(Fcall_process_region, Fcall_process): Add usage: string to doc string.
Miles Bader <miles@gnu.org>
parents:
40103
diff
changeset
|
218 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
|
219 (nargs, args) |
296 | 220 int nargs; |
221 register Lisp_Object *args; | |
222 { | |
57473
fb60234070b0
(Fcall_process): Simplify handling of display arg.
Kim F. Storm <storm@cua.dk>
parents:
57290
diff
changeset
|
223 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
|
224 int display_p; |
296 | 225 int fd[2]; |
226 int filefd; | |
227 register int pid; | |
62982
d7793ac6df62
(Fcall_process): Don't use alloca to gradually
Kim F. Storm <storm@cua.dk>
parents:
60891
diff
changeset
|
228 #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
|
229 #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
|
230 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
|
231 int bufsize = CALLPROC_BUFFER_SIZE_MIN; |
46293
1fb8f75062c6
Use macro SPECPDL_INDEX.
Juanma Barranquero <lekktu@gmail.com>
parents:
46260
diff
changeset
|
232 int count = SPECPDL_INDEX (); |
20525
468f59c6c9bf
(Fcall_process): Cast new_argv for child_setup.
Richard M. Stallman <rms@gnu.org>
parents:
20448
diff
changeset
|
233 |
46546
254af4bff749
(Fcall_process): Make NEW_ARGV array hold pointer to
Ken Raeburn <raeburn@raeburn.org>
parents:
46370
diff
changeset
|
234 register const unsigned char **new_argv |
254af4bff749
(Fcall_process): Make NEW_ARGV array hold pointer to
Ken Raeburn <raeburn@raeburn.org>
parents:
46370
diff
changeset
|
235 = (const unsigned char **) alloca ((max (2, nargs - 2)) * sizeof (char *)); |
296 | 236 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
|
237 /* 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
|
238 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
|
239 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
|
240 #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
|
241 char *outf, *tempfile; |
902cd7024cfa
(syms_of_callproc) [MSDOS]: New lisp variable: binary-process.
Richard M. Stallman <rms@gnu.org>
parents:
5348
diff
changeset
|
242 int outfilefd; |
902cd7024cfa
(syms_of_callproc) [MSDOS]: New lisp variable: binary-process.
Richard M. Stallman <rms@gnu.org>
parents:
5348
diff
changeset
|
243 #endif |
44890
01b93e5e53a7
Patch for building Emacs on Mac OS X. April 26, 2002. See ChangeLog,
Andrew Choi <akochoi@shaw.ca>
parents:
44486
diff
changeset
|
244 #ifdef MAC_OS8 |
25522
c675d8210bda
(call-process) [macintosh]: Call mac_run_command in
Richard M. Stallman <rms@gnu.org>
parents:
25521
diff
changeset
|
245 char *tempfile; |
c675d8210bda
(call-process) [macintosh]: Call mac_run_command in
Richard M. Stallman <rms@gnu.org>
parents:
25521
diff
changeset
|
246 int outfilefd; |
c675d8210bda
(call-process) [macintosh]: Call mac_run_command in
Richard M. Stallman <rms@gnu.org>
parents:
25521
diff
changeset
|
247 #endif |
296 | 248 #if 0 |
249 int mask; | |
250 #endif | |
17025
3c222a7edda1
Include charset.h and coding.h.
Karl Heuer <kwzh@gnu.org>
parents:
16659
diff
changeset
|
251 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
|
252 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
|
253 /* 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
|
254 Lisp_Object coding_systems; |
6ccce3af0d2a
(Fcall_process): Decide coding system for decoding
Richard M. Stallman <rms@gnu.org>
parents:
24920
diff
changeset
|
255 |
6ccce3af0d2a
(Fcall_process): Decide coding system for decoding
Richard M. Stallman <rms@gnu.org>
parents:
24920
diff
changeset
|
256 /* 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
|
257 coding_systems = Qt; |
17025
3c222a7edda1
Include charset.h and coding.h.
Karl Heuer <kwzh@gnu.org>
parents:
16659
diff
changeset
|
258 |
40656
cdfd4d09b79a
Update usage of CHECK_ macros (remove unused second argument).
Pavel Janík <Pavel@Janik.cz>
parents:
40114
diff
changeset
|
259 CHECK_STRING (args[0]); |
296 | 260 |
10839
2e3eae2280eb
(Fcall_process): Extend BUFFER arg so it can specify
Richard M. Stallman <rms@gnu.org>
parents:
10083
diff
changeset
|
261 error_file = Qt; |
2e3eae2280eb
(Fcall_process): Extend BUFFER arg so it can specify
Richard M. Stallman <rms@gnu.org>
parents:
10083
diff
changeset
|
262 |
5501
902cd7024cfa
(syms_of_callproc) [MSDOS]: New lisp variable: binary-process.
Richard M. Stallman <rms@gnu.org>
parents:
5348
diff
changeset
|
263 #ifndef subprocesses |
902cd7024cfa
(syms_of_callproc) [MSDOS]: New lisp variable: binary-process.
Richard M. Stallman <rms@gnu.org>
parents:
5348
diff
changeset
|
264 /* Without asynchronous processes we cannot have BUFFER == 0. */ |
49600
23a1cea22d13
Trailing whitespace deleted.
Juanma Barranquero <lekktu@gmail.com>
parents:
47018
diff
changeset
|
265 if (nargs >= 3 |
22639
8177901b437a
(Fcall_process) [! subprocesses]: Balance parentheses in an if clause.
Eli Zaretskii <eliz@gnu.org>
parents:
22550
diff
changeset
|
266 && (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
|
267 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
|
268 #endif /* subprocesses */ |
902cd7024cfa
(syms_of_callproc) [MSDOS]: New lisp variable: binary-process.
Richard M. Stallman <rms@gnu.org>
parents:
5348
diff
changeset
|
269 |
24931
6ccce3af0d2a
(Fcall_process): Decide coding system for decoding
Richard M. Stallman <rms@gnu.org>
parents:
24920
diff
changeset
|
270 /* Decide the coding-system for giving arguments. */ |
17025
3c222a7edda1
Include charset.h and coding.h.
Karl Heuer <kwzh@gnu.org>
parents:
16659
diff
changeset
|
271 { |
3c222a7edda1
Include charset.h and coding.h.
Karl Heuer <kwzh@gnu.org>
parents:
16659
diff
changeset
|
272 Lisp_Object val, *args2; |
3c222a7edda1
Include charset.h and coding.h.
Karl Heuer <kwzh@gnu.org>
parents:
16659
diff
changeset
|
273 int i; |
3c222a7edda1
Include charset.h and coding.h.
Karl Heuer <kwzh@gnu.org>
parents:
16659
diff
changeset
|
274 |
3c222a7edda1
Include charset.h and coding.h.
Karl Heuer <kwzh@gnu.org>
parents:
16659
diff
changeset
|
275 /* 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
|
276 if (nargs >= 5) |
3c222a7edda1
Include charset.h and coding.h.
Karl Heuer <kwzh@gnu.org>
parents:
16659
diff
changeset
|
277 { |
20595
7d5ca0b58282
(Fcall_process): When deciding whether to encode args,
Richard M. Stallman <rms@gnu.org>
parents:
20525
diff
changeset
|
278 int must_encode = 0; |
7d5ca0b58282
(Fcall_process): When deciding whether to encode args,
Richard M. Stallman <rms@gnu.org>
parents:
20525
diff
changeset
|
279 |
20789
140b6fdd53d0
(Fcall_process): Test only args past args[4] for multibyteness.
Richard M. Stallman <rms@gnu.org>
parents:
20724
diff
changeset
|
280 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
|
281 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
|
282 |
3cfe86230c87
(Fcall_process): Check type of process cmd args earlier on.
Richard M. Stallman <rms@gnu.org>
parents:
22792
diff
changeset
|
283 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
|
284 if (STRING_MULTIBYTE (args[i])) |
7d5ca0b58282
(Fcall_process): When deciding whether to encode args,
Richard M. Stallman <rms@gnu.org>
parents:
20525
diff
changeset
|
285 must_encode = 1; |
7d5ca0b58282
(Fcall_process): When deciding whether to encode args,
Richard M. Stallman <rms@gnu.org>
parents:
20525
diff
changeset
|
286 |
18651
982814f78d0d
(Fcall_process): If enable-multibyte-characters is
Kenichi Handa <handa@m17n.org>
parents:
18539
diff
changeset
|
287 if (!NILP (Vcoding_system_for_write)) |
982814f78d0d
(Fcall_process): If enable-multibyte-characters is
Kenichi Handa <handa@m17n.org>
parents:
18539
diff
changeset
|
288 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
|
289 else if (! must_encode) |
18651
982814f78d0d
(Fcall_process): If enable-multibyte-characters is
Kenichi Handa <handa@m17n.org>
parents:
18539
diff
changeset
|
290 val = Qnil; |
982814f78d0d
(Fcall_process): If enable-multibyte-characters is
Kenichi Handa <handa@m17n.org>
parents:
18539
diff
changeset
|
291 else |
17025
3c222a7edda1
Include charset.h and coding.h.
Karl Heuer <kwzh@gnu.org>
parents:
16659
diff
changeset
|
292 { |
3c222a7edda1
Include charset.h and coding.h.
Karl Heuer <kwzh@gnu.org>
parents:
16659
diff
changeset
|
293 args2 = (Lisp_Object *) alloca ((nargs + 1) * sizeof *args2); |
3c222a7edda1
Include charset.h and coding.h.
Karl Heuer <kwzh@gnu.org>
parents:
16659
diff
changeset
|
294 args2[0] = Qcall_process; |
3c222a7edda1
Include charset.h and coding.h.
Karl Heuer <kwzh@gnu.org>
parents:
16659
diff
changeset
|
295 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
|
296 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
|
297 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
|
298 val = XCDR (coding_systems); |
18182
967f92654591
(Fcall_process): Pay attention to
Kenichi Handa <handa@m17n.org>
parents:
17729
diff
changeset
|
299 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
|
300 val = XCDR (Vdefault_process_coding_system); |
18651
982814f78d0d
(Fcall_process): If enable-multibyte-characters is
Kenichi Handa <handa@m17n.org>
parents:
18539
diff
changeset
|
301 else |
982814f78d0d
(Fcall_process): If enable-multibyte-characters is
Kenichi Handa <handa@m17n.org>
parents:
18539
diff
changeset
|
302 val = Qnil; |
17025
3c222a7edda1
Include charset.h and coding.h.
Karl Heuer <kwzh@gnu.org>
parents:
16659
diff
changeset
|
303 } |
3c222a7edda1
Include charset.h and coding.h.
Karl Heuer <kwzh@gnu.org>
parents:
16659
diff
changeset
|
304 setup_coding_system (Fcheck_coding_system (val), &argument_coding); |
70705
73da2b5d5e9c
(Fcall_process): Reject encoding arguments by
Kenichi Handa <handa@m17n.org>
parents:
70521
diff
changeset
|
305 if (argument_coding.common_flags & CODING_ASCII_INCOMPATIBLE_MASK) |
73da2b5d5e9c
(Fcall_process): Reject encoding arguments by
Kenichi Handa <handa@m17n.org>
parents:
70521
diff
changeset
|
306 setup_coding_system (Qraw_text, &argument_coding); |
70521
2a2e0198d0cf
(Fcall_process): Use system_eol_type for encoding
Kenichi Handa <handa@m17n.org>
parents:
68651
diff
changeset
|
307 if (argument_coding.eol_type == CODING_EOL_UNDECIDED) |
2a2e0198d0cf
(Fcall_process): Use system_eol_type for encoding
Kenichi Handa <handa@m17n.org>
parents:
68651
diff
changeset
|
308 argument_coding.eol_type = system_eol_type; |
17025
3c222a7edda1
Include charset.h and coding.h.
Karl Heuer <kwzh@gnu.org>
parents:
16659
diff
changeset
|
309 } |
3c222a7edda1
Include charset.h and coding.h.
Karl Heuer <kwzh@gnu.org>
parents:
16659
diff
changeset
|
310 } |
3c222a7edda1
Include charset.h and coding.h.
Karl Heuer <kwzh@gnu.org>
parents:
16659
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 >= 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
|
313 { |
928ed74adf4f
Restored up-to-date version of this file from pogo. What is going on
Jim Blandy <jimb@redhat.com>
parents:
942
diff
changeset
|
314 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
|
315 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
|
316 } |
296 | 317 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
|
318 infile = build_string (NULL_DEVICE); |
648 | 319 |
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
|
320 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
|
321 { |
10839
2e3eae2280eb
(Fcall_process): Extend BUFFER arg so it can specify
Richard M. Stallman <rms@gnu.org>
parents:
10083
diff
changeset
|
322 buffer = args[2]; |
2e3eae2280eb
(Fcall_process): Extend BUFFER arg so it can specify
Richard M. Stallman <rms@gnu.org>
parents:
10083
diff
changeset
|
323 |
2e3eae2280eb
(Fcall_process): Extend BUFFER arg so it can specify
Richard M. Stallman <rms@gnu.org>
parents:
10083
diff
changeset
|
324 /* 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
|
325 (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
|
326 if (CONSP (buffer)) |
2e3eae2280eb
(Fcall_process): Extend BUFFER arg so it can specify
Richard M. Stallman <rms@gnu.org>
parents:
10083
diff
changeset
|
327 { |
25645
a14111a2a100
Use XCAR, XCDR, XFLOAT_DATA instead of explicit member access.
Ken Raeburn <raeburn@raeburn.org>
parents:
25522
diff
changeset
|
328 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
|
329 { |
15473
cdf40972804f
(Fcall_process): Fix previous change.
Richard M. Stallman <rms@gnu.org>
parents:
15440
diff
changeset
|
330 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
|
331 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
|
332 |
87c6c9287f45
(Fcall_process): Handle t or nil as STDERR_FILE.
Richard M. Stallman <rms@gnu.org>
parents:
15236
diff
changeset
|
333 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
|
334 error_file = stderr_file; |
87c6c9287f45
(Fcall_process): Handle t or nil as STDERR_FILE.
Richard M. Stallman <rms@gnu.org>
parents:
15236
diff
changeset
|
335 else |
87c6c9287f45
(Fcall_process): Handle t or nil as STDERR_FILE.
Richard M. Stallman <rms@gnu.org>
parents:
15236
diff
changeset
|
336 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
|
337 } |
87c6c9287f45
(Fcall_process): Handle t or nil as STDERR_FILE.
Richard M. Stallman <rms@gnu.org>
parents:
15236
diff
changeset
|
338 |
25645
a14111a2a100
Use XCAR, XCDR, XFLOAT_DATA instead of explicit member access.
Ken Raeburn <raeburn@raeburn.org>
parents:
25522
diff
changeset
|
339 buffer = XCAR (buffer); |
10839
2e3eae2280eb
(Fcall_process): Extend BUFFER arg so it can specify
Richard M. Stallman <rms@gnu.org>
parents:
10083
diff
changeset
|
340 } |
296 | 341 |
10839
2e3eae2280eb
(Fcall_process): Extend BUFFER arg so it can specify
Richard M. Stallman <rms@gnu.org>
parents:
10083
diff
changeset
|
342 if (!(EQ (buffer, Qnil) |
2e3eae2280eb
(Fcall_process): Extend BUFFER arg so it can specify
Richard M. Stallman <rms@gnu.org>
parents:
10083
diff
changeset
|
343 || EQ (buffer, Qt) |
22550
4ec5c343db1f
(Fcall_process): Handle third argument BUFFER
Richard M. Stallman <rms@gnu.org>
parents:
22373
diff
changeset
|
344 || 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
|
345 { |
10839
2e3eae2280eb
(Fcall_process): Extend BUFFER arg so it can specify
Richard M. Stallman <rms@gnu.org>
parents:
10083
diff
changeset
|
346 Lisp_Object spec_buffer; |
2e3eae2280eb
(Fcall_process): Extend BUFFER arg so it can specify
Richard M. Stallman <rms@gnu.org>
parents:
10083
diff
changeset
|
347 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
|
348 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
|
349 /* 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
|
350 if (NILP (buffer)) |
40656
cdfd4d09b79a
Update usage of CHECK_ macros (remove unused second argument).
Pavel Janík <Pavel@Janik.cz>
parents:
40114
diff
changeset
|
351 CHECK_BUFFER (spec_buffer); |
cdfd4d09b79a
Update usage of CHECK_ macros (remove unused second argument).
Pavel Janík <Pavel@Janik.cz>
parents:
40114
diff
changeset
|
352 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
|
353 } |
928ed74adf4f
Restored up-to-date version of this file from pogo. What is going on
Jim Blandy <jimb@redhat.com>
parents:
942
diff
changeset
|
354 } |
49600
23a1cea22d13
Trailing whitespace deleted.
Juanma Barranquero <lekktu@gmail.com>
parents:
47018
diff
changeset
|
355 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
|
356 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
|
357 |
1678
62ecf0c5b54c
Give subprocess creation a way to find a valid current directory
Jim Blandy <jimb@redhat.com>
parents:
1596
diff
changeset
|
358 /* 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
|
359 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
|
360 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
|
361 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
|
362 |
62ecf0c5b54c
Give subprocess creation a way to find a valid current directory
Jim Blandy <jimb@redhat.com>
parents:
1596
diff
changeset
|
363 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
|
364 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
|
365 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
|
366 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
|
367 buffer. */ |
62ecf0c5b54c
Give subprocess creation a way to find a valid current directory
Jim Blandy <jimb@redhat.com>
parents:
1596
diff
changeset
|
368 { |
68389
ee72dfb5a3cd
(Fcall_process): GCPRO error_file. Encode infile,
Kenichi Handa <handa@m17n.org>
parents:
67989
diff
changeset
|
369 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
|
370 |
62ecf0c5b54c
Give subprocess creation a way to find a valid current directory
Jim Blandy <jimb@redhat.com>
parents:
1596
diff
changeset
|
371 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
|
372 |
68389
ee72dfb5a3cd
(Fcall_process): GCPRO error_file. Encode infile,
Kenichi Handa <handa@m17n.org>
parents:
67989
diff
changeset
|
373 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
|
374 |
6391
d4fe8a853557
(Fcall_process): GCPRO some things.
Karl Heuer <kwzh@gnu.org>
parents:
6275
diff
changeset
|
375 current_dir |
d4fe8a853557
(Fcall_process): GCPRO some things.
Karl Heuer <kwzh@gnu.org>
parents:
6275
diff
changeset
|
376 = expand_and_dir_to_file (Funhandled_file_name_directory (current_dir), |
d4fe8a853557
(Fcall_process): GCPRO some things.
Karl Heuer <kwzh@gnu.org>
parents:
6275
diff
changeset
|
377 Qnil); |
1678
62ecf0c5b54c
Give subprocess creation a way to find a valid current directory
Jim Blandy <jimb@redhat.com>
parents:
1596
diff
changeset
|
378 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
|
379 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
|
380 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
|
381 |
68389
ee72dfb5a3cd
(Fcall_process): GCPRO error_file. Encode infile,
Kenichi Handa <handa@m17n.org>
parents:
67989
diff
changeset
|
382 if (STRING_MULTIBYTE (infile)) |
ee72dfb5a3cd
(Fcall_process): GCPRO error_file. Encode infile,
Kenichi Handa <handa@m17n.org>
parents:
67989
diff
changeset
|
383 infile = ENCODE_FILE (infile); |
ee72dfb5a3cd
(Fcall_process): GCPRO error_file. Encode infile,
Kenichi Handa <handa@m17n.org>
parents:
67989
diff
changeset
|
384 if (STRING_MULTIBYTE (current_dir)) |
ee72dfb5a3cd
(Fcall_process): GCPRO error_file. Encode infile,
Kenichi Handa <handa@m17n.org>
parents:
67989
diff
changeset
|
385 current_dir = ENCODE_FILE (current_dir); |
ee72dfb5a3cd
(Fcall_process): GCPRO error_file. Encode infile,
Kenichi Handa <handa@m17n.org>
parents:
67989
diff
changeset
|
386 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
|
387 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
|
388 UNGCPRO; |
62ecf0c5b54c
Give subprocess creation a way to find a valid current directory
Jim Blandy <jimb@redhat.com>
parents:
1596
diff
changeset
|
389 } |
62ecf0c5b54c
Give subprocess creation a way to find a valid current directory
Jim Blandy <jimb@redhat.com>
parents:
1596
diff
changeset
|
390 |
57473
fb60234070b0
(Fcall_process): Simplify handling of display arg.
Kim F. Storm <storm@cua.dk>
parents:
57290
diff
changeset
|
391 display_p = INTERACTIVE && nargs >= 4 && !NILP (args[3]); |
296 | 392 |
46370
40db0673e6f0
Most uses of XSTRING combined with STRING_BYTES or indirection changed to
Ken Raeburn <raeburn@raeburn.org>
parents:
46293
diff
changeset
|
393 filefd = emacs_open (SDATA (infile), O_RDONLY, 0); |
6391
d4fe8a853557
(Fcall_process): GCPRO some things.
Karl Heuer <kwzh@gnu.org>
parents:
6275
diff
changeset
|
394 if (filefd < 0) |
d4fe8a853557
(Fcall_process): GCPRO some things.
Karl Heuer <kwzh@gnu.org>
parents:
6275
diff
changeset
|
395 { |
68389
ee72dfb5a3cd
(Fcall_process): GCPRO error_file. Encode infile,
Kenichi Handa <handa@m17n.org>
parents:
67989
diff
changeset
|
396 infile = DECODE_FILE (infile); |
6391
d4fe8a853557
(Fcall_process): GCPRO some things.
Karl Heuer <kwzh@gnu.org>
parents:
6275
diff
changeset
|
397 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
|
398 } |
d4fe8a853557
(Fcall_process): GCPRO some things.
Karl Heuer <kwzh@gnu.org>
parents:
6275
diff
changeset
|
399 /* Search for program; barf if not found. */ |
d4fe8a853557
(Fcall_process): GCPRO some things.
Karl Heuer <kwzh@gnu.org>
parents:
6275
diff
changeset
|
400 { |
d4fe8a853557
(Fcall_process): GCPRO some things.
Karl Heuer <kwzh@gnu.org>
parents:
6275
diff
changeset
|
401 struct gcpro gcpro1; |
d4fe8a853557
(Fcall_process): GCPRO some things.
Karl Heuer <kwzh@gnu.org>
parents:
6275
diff
changeset
|
402 |
d4fe8a853557
(Fcall_process): GCPRO some things.
Karl Heuer <kwzh@gnu.org>
parents:
6275
diff
changeset
|
403 GCPRO1 (current_dir); |
45002
f1eb7c3e1e04
(Fcall_process): Update call to openp.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
44992
diff
changeset
|
404 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
|
405 UNGCPRO; |
d4fe8a853557
(Fcall_process): GCPRO some things.
Karl Heuer <kwzh@gnu.org>
parents:
6275
diff
changeset
|
406 } |
d4fe8a853557
(Fcall_process): GCPRO some things.
Karl Heuer <kwzh@gnu.org>
parents:
6275
diff
changeset
|
407 if (NILP (path)) |
d4fe8a853557
(Fcall_process): GCPRO some things.
Karl Heuer <kwzh@gnu.org>
parents:
6275
diff
changeset
|
408 { |
26088
b7aa6ac26872
Add support for large files, 64-bit Solaris, system locale codings.
Paul Eggert <eggert@twinsun.com>
parents:
25767
diff
changeset
|
409 emacs_close (filefd); |
6391
d4fe8a853557
(Fcall_process): GCPRO some things.
Karl Heuer <kwzh@gnu.org>
parents:
6275
diff
changeset
|
410 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
|
411 } |
47018
101eb25eab6d
(Fcall_process): Remove /: from program name.
Richard M. Stallman <rms@gnu.org>
parents:
46626
diff
changeset
|
412 |
101eb25eab6d
(Fcall_process): Remove /: from program name.
Richard M. Stallman <rms@gnu.org>
parents:
46626
diff
changeset
|
413 /* 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
|
414 discard that. */ |
101eb25eab6d
(Fcall_process): Remove /: from program name.
Richard M. Stallman <rms@gnu.org>
parents:
46626
diff
changeset
|
415 if (SBYTES (path) > 2 && SREF (path, 0) == '/' |
101eb25eab6d
(Fcall_process): Remove /: from program name.
Richard M. Stallman <rms@gnu.org>
parents:
46626
diff
changeset
|
416 && SREF (path, 1) == ':') |
101eb25eab6d
(Fcall_process): Remove /: from program name.
Richard M. Stallman <rms@gnu.org>
parents:
46626
diff
changeset
|
417 path = Fsubstring (path, make_number (2), Qnil); |
101eb25eab6d
(Fcall_process): Remove /: from program name.
Richard M. Stallman <rms@gnu.org>
parents:
46626
diff
changeset
|
418 |
46370
40db0673e6f0
Most uses of XSTRING combined with STRING_BYTES or indirection changed to
Ken Raeburn <raeburn@raeburn.org>
parents:
46293
diff
changeset
|
419 new_argv[0] = SDATA (path); |
20230
ad33fb40e5e7
(Fcall_process): GCPRO infile, buffer, and
Kenichi Handa <handa@m17n.org>
parents:
20041
diff
changeset
|
420 if (nargs > 4) |
ad33fb40e5e7
(Fcall_process): GCPRO infile, buffer, and
Kenichi Handa <handa@m17n.org>
parents:
20041
diff
changeset
|
421 { |
ad33fb40e5e7
(Fcall_process): GCPRO infile, buffer, and
Kenichi Handa <handa@m17n.org>
parents:
20041
diff
changeset
|
422 register int i; |
29000
f5c7d80ed4de
(Fcall_process): Always encode an argument string if
Kenichi Handa <handa@m17n.org>
parents:
28914
diff
changeset
|
423 struct gcpro gcpro1, gcpro2, gcpro3; |
17025
3c222a7edda1
Include charset.h and coding.h.
Karl Heuer <kwzh@gnu.org>
parents:
16659
diff
changeset
|
424 |
29000
f5c7d80ed4de
(Fcall_process): Always encode an argument string if
Kenichi Handa <handa@m17n.org>
parents:
28914
diff
changeset
|
425 GCPRO3 (infile, buffer, current_dir); |
f5c7d80ed4de
(Fcall_process): Always encode an argument string if
Kenichi Handa <handa@m17n.org>
parents:
28914
diff
changeset
|
426 argument_coding.dst_multibyte = 0; |
f5c7d80ed4de
(Fcall_process): Always encode an argument string if
Kenichi Handa <handa@m17n.org>
parents:
28914
diff
changeset
|
427 for (i = 4; i < nargs; i++) |
f5c7d80ed4de
(Fcall_process): Always encode an argument string if
Kenichi Handa <handa@m17n.org>
parents:
28914
diff
changeset
|
428 { |
f5c7d80ed4de
(Fcall_process): Always encode an argument string if
Kenichi Handa <handa@m17n.org>
parents:
28914
diff
changeset
|
429 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
|
430 if (CODING_REQUIRE_ENCODING (&argument_coding)) |
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 /* We must encode this argument. */ |
f5c7d80ed4de
(Fcall_process): Always encode an argument string if
Kenichi Handa <handa@m17n.org>
parents:
28914
diff
changeset
|
433 args[i] = encode_coding_string (args[i], &argument_coding, 1); |
f5c7d80ed4de
(Fcall_process): Always encode an argument string if
Kenichi Handa <handa@m17n.org>
parents:
28914
diff
changeset
|
434 if (argument_coding.type == coding_type_ccl) |
f5c7d80ed4de
(Fcall_process): Always encode an argument string if
Kenichi Handa <handa@m17n.org>
parents:
28914
diff
changeset
|
435 setup_ccl_program (&(argument_coding.spec.ccl.encoder), Qnil); |
20230
ad33fb40e5e7
(Fcall_process): GCPRO infile, buffer, and
Kenichi Handa <handa@m17n.org>
parents:
20041
diff
changeset
|
436 } |
46370
40db0673e6f0
Most uses of XSTRING combined with STRING_BYTES or indirection changed to
Ken Raeburn <raeburn@raeburn.org>
parents:
46293
diff
changeset
|
437 new_argv[i - 3] = SDATA (args[i]); |
20230
ad33fb40e5e7
(Fcall_process): GCPRO infile, buffer, and
Kenichi Handa <handa@m17n.org>
parents:
20041
diff
changeset
|
438 } |
29000
f5c7d80ed4de
(Fcall_process): Always encode an argument string if
Kenichi Handa <handa@m17n.org>
parents:
28914
diff
changeset
|
439 UNGCPRO; |
20448
afef187a070b
(Fcall_process): Don't clobber new_argv[0]
Karl Heuer <kwzh@gnu.org>
parents:
20436
diff
changeset
|
440 new_argv[nargs - 3] = 0; |
20230
ad33fb40e5e7
(Fcall_process): GCPRO infile, buffer, and
Kenichi Handa <handa@m17n.org>
parents:
20041
diff
changeset
|
441 } |
20448
afef187a070b
(Fcall_process): Don't clobber new_argv[0]
Karl Heuer <kwzh@gnu.org>
parents:
20436
diff
changeset
|
442 else |
afef187a070b
(Fcall_process): Don't clobber new_argv[0]
Karl Heuer <kwzh@gnu.org>
parents:
20436
diff
changeset
|
443 new_argv[1] = 0; |
296 | 444 |
5501
902cd7024cfa
(syms_of_callproc) [MSDOS]: New lisp variable: binary-process.
Richard M. Stallman <rms@gnu.org>
parents:
5348
diff
changeset
|
445 #ifdef MSDOS /* MW, July 1993 */ |
23462
aaad8461ff34
(Fcall_process): Use $TMPDIR instead of trying $TMP
Eli Zaretskii <eliz@gnu.org>
parents:
23079
diff
changeset
|
446 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
|
447 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
|
448 else |
902cd7024cfa
(syms_of_callproc) [MSDOS]: New lisp variable: binary-process.
Richard M. Stallman <rms@gnu.org>
parents:
5348
diff
changeset
|
449 { |
902cd7024cfa
(syms_of_callproc) [MSDOS]: New lisp variable: binary-process.
Richard M. Stallman <rms@gnu.org>
parents:
5348
diff
changeset
|
450 tempfile = alloca (20); |
902cd7024cfa
(syms_of_callproc) [MSDOS]: New lisp variable: binary-process.
Richard M. Stallman <rms@gnu.org>
parents:
5348
diff
changeset
|
451 *tempfile = '\0'; |
902cd7024cfa
(syms_of_callproc) [MSDOS]: New lisp variable: binary-process.
Richard M. Stallman <rms@gnu.org>
parents:
5348
diff
changeset
|
452 } |
902cd7024cfa
(syms_of_callproc) [MSDOS]: New lisp variable: binary-process.
Richard M. Stallman <rms@gnu.org>
parents:
5348
diff
changeset
|
453 dostounix_filename (tempfile); |
49600
23a1cea22d13
Trailing whitespace deleted.
Juanma Barranquero <lekktu@gmail.com>
parents:
47018
diff
changeset
|
454 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
|
455 strcat (tempfile, "/"); |
902cd7024cfa
(syms_of_callproc) [MSDOS]: New lisp variable: binary-process.
Richard M. Stallman <rms@gnu.org>
parents:
5348
diff
changeset
|
456 strcat (tempfile, "detmp.XXX"); |
902cd7024cfa
(syms_of_callproc) [MSDOS]: New lisp variable: binary-process.
Richard M. Stallman <rms@gnu.org>
parents:
5348
diff
changeset
|
457 mktemp (tempfile); |
902cd7024cfa
(syms_of_callproc) [MSDOS]: New lisp variable: binary-process.
Richard M. Stallman <rms@gnu.org>
parents:
5348
diff
changeset
|
458 |
902cd7024cfa
(syms_of_callproc) [MSDOS]: New lisp variable: binary-process.
Richard M. Stallman <rms@gnu.org>
parents:
5348
diff
changeset
|
459 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
|
460 if (outfilefd < 0) |
902cd7024cfa
(syms_of_callproc) [MSDOS]: New lisp variable: binary-process.
Richard M. Stallman <rms@gnu.org>
parents:
5348
diff
changeset
|
461 { |
26088
b7aa6ac26872
Add support for large files, 64-bit Solaris, system locale codings.
Paul Eggert <eggert@twinsun.com>
parents:
25767
diff
changeset
|
462 emacs_close (filefd); |
15610 | 463 report_file_error ("Opening process output file", |
464 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
|
465 } |
15610 | 466 fd[0] = filefd; |
13719
660032b84b23
(Fcall_process) [MSDOS]: Support redirection of
Karl Heuer <kwzh@gnu.org>
parents:
12854
diff
changeset
|
467 fd[1] = outfilefd; |
15610 | 468 #endif /* MSDOS */ |
5501
902cd7024cfa
(syms_of_callproc) [MSDOS]: New lisp variable: binary-process.
Richard M. Stallman <rms@gnu.org>
parents:
5348
diff
changeset
|
469 |
44890
01b93e5e53a7
Patch for building Emacs on Mac OS X. April 26, 2002. See ChangeLog,
Andrew Choi <akochoi@shaw.ca>
parents:
44486
diff
changeset
|
470 #ifdef MAC_OS8 |
25522
c675d8210bda
(call-process) [macintosh]: Call mac_run_command in
Richard M. Stallman <rms@gnu.org>
parents:
25521
diff
changeset
|
471 /* Since we don't have pipes on the Mac, create a temporary file to |
c675d8210bda
(call-process) [macintosh]: Call mac_run_command in
Richard M. Stallman <rms@gnu.org>
parents:
25521
diff
changeset
|
472 hold the output of the subprocess. */ |
46370
40db0673e6f0
Most uses of XSTRING combined with STRING_BYTES or indirection changed to
Ken Raeburn <raeburn@raeburn.org>
parents:
46293
diff
changeset
|
473 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
|
474 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
|
475 SBYTES (Vtemp_file_name_pattern) + 1); |
25522
c675d8210bda
(call-process) [macintosh]: Call mac_run_command in
Richard M. Stallman <rms@gnu.org>
parents:
25521
diff
changeset
|
476 |
c675d8210bda
(call-process) [macintosh]: Call mac_run_command in
Richard M. Stallman <rms@gnu.org>
parents:
25521
diff
changeset
|
477 mktemp (tempfile); |
c675d8210bda
(call-process) [macintosh]: Call mac_run_command in
Richard M. Stallman <rms@gnu.org>
parents:
25521
diff
changeset
|
478 |
c675d8210bda
(call-process) [macintosh]: Call mac_run_command in
Richard M. Stallman <rms@gnu.org>
parents:
25521
diff
changeset
|
479 outfilefd = creat (tempfile, S_IREAD | S_IWRITE); |
c675d8210bda
(call-process) [macintosh]: Call mac_run_command in
Richard M. Stallman <rms@gnu.org>
parents:
25521
diff
changeset
|
480 if (outfilefd < 0) |
c675d8210bda
(call-process) [macintosh]: Call mac_run_command in
Richard M. Stallman <rms@gnu.org>
parents:
25521
diff
changeset
|
481 { |
c675d8210bda
(call-process) [macintosh]: Call mac_run_command in
Richard M. Stallman <rms@gnu.org>
parents:
25521
diff
changeset
|
482 close (filefd); |
c675d8210bda
(call-process) [macintosh]: Call mac_run_command in
Richard M. Stallman <rms@gnu.org>
parents:
25521
diff
changeset
|
483 report_file_error ("Opening process output file", |
c675d8210bda
(call-process) [macintosh]: Call mac_run_command in
Richard M. Stallman <rms@gnu.org>
parents:
25521
diff
changeset
|
484 Fcons (build_string (tempfile), Qnil)); |
c675d8210bda
(call-process) [macintosh]: Call mac_run_command in
Richard M. Stallman <rms@gnu.org>
parents:
25521
diff
changeset
|
485 } |
c675d8210bda
(call-process) [macintosh]: Call mac_run_command in
Richard M. Stallman <rms@gnu.org>
parents:
25521
diff
changeset
|
486 fd[0] = filefd; |
c675d8210bda
(call-process) [macintosh]: Call mac_run_command in
Richard M. Stallman <rms@gnu.org>
parents:
25521
diff
changeset
|
487 fd[1] = outfilefd; |
44890
01b93e5e53a7
Patch for building Emacs on Mac OS X. April 26, 2002. See ChangeLog,
Andrew Choi <akochoi@shaw.ca>
parents:
44486
diff
changeset
|
488 #endif /* MAC_OS8 */ |
25522
c675d8210bda
(call-process) [macintosh]: Call mac_run_command in
Richard M. Stallman <rms@gnu.org>
parents:
25521
diff
changeset
|
489 |
9138
6c814eb4d892
(Fcall_process, child_setup, getenv_internal): Use type test macros.
Karl Heuer <kwzh@gnu.org>
parents:
8853
diff
changeset
|
490 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
|
491 fd[1] = emacs_open (NULL_DEVICE, O_WRONLY, 0), fd[0] = -1; |
296 | 492 else |
493 { | |
5501
902cd7024cfa
(syms_of_callproc) [MSDOS]: New lisp variable: binary-process.
Richard M. Stallman <rms@gnu.org>
parents:
5348
diff
changeset
|
494 #ifndef MSDOS |
44890
01b93e5e53a7
Patch for building Emacs on Mac OS X. April 26, 2002. See ChangeLog,
Andrew Choi <akochoi@shaw.ca>
parents:
44486
diff
changeset
|
495 #ifndef MAC_OS8 |
39359
8d23ea77b66e
(Fcall_process): Handle errors from pipe(2).
Gerd Moellmann <gerd@gnu.org>
parents:
37936
diff
changeset
|
496 errno = 0; |
8d23ea77b66e
(Fcall_process): Handle errors from pipe(2).
Gerd Moellmann <gerd@gnu.org>
parents:
37936
diff
changeset
|
497 if (pipe (fd) == -1) |
8d23ea77b66e
(Fcall_process): Handle errors from pipe(2).
Gerd Moellmann <gerd@gnu.org>
parents:
37936
diff
changeset
|
498 { |
8d23ea77b66e
(Fcall_process): Handle errors from pipe(2).
Gerd Moellmann <gerd@gnu.org>
parents:
37936
diff
changeset
|
499 emacs_close (filefd); |
8d23ea77b66e
(Fcall_process): Handle errors from pipe(2).
Gerd Moellmann <gerd@gnu.org>
parents:
37936
diff
changeset
|
500 report_file_error ("Creating process pipe", Qnil); |
8d23ea77b66e
(Fcall_process): Handle errors from pipe(2).
Gerd Moellmann <gerd@gnu.org>
parents:
37936
diff
changeset
|
501 } |
5501
902cd7024cfa
(syms_of_callproc) [MSDOS]: New lisp variable: binary-process.
Richard M. Stallman <rms@gnu.org>
parents:
5348
diff
changeset
|
502 #endif |
25522
c675d8210bda
(call-process) [macintosh]: Call mac_run_command in
Richard M. Stallman <rms@gnu.org>
parents:
25521
diff
changeset
|
503 #endif |
296 | 504 #if 0 |
505 /* Replaced by close_process_descs */ | |
506 set_exclusive_use (fd[0]); | |
507 #endif | |
508 } | |
509 | |
510 { | |
511 /* child_setup must clobber environ in systems with true vfork. | |
512 Protect it from permanent change. */ | |
513 register char **save_environ = environ; | |
514 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
|
515 int fd_error = fd1; |
296 | 516 |
517 #if 0 /* Some systems don't have sigblock. */ | |
638 | 518 mask = sigblock (sigmask (SIGCHLD)); |
296 | 519 #endif |
520 | |
521 /* Record that we're about to create a synchronous process. */ | |
522 synch_process_alive = 1; | |
523 | |
4977
81c44a01ddda
(Fcall_process): Clear synch_process_death and
Richard M. Stallman <rms@gnu.org>
parents:
4701
diff
changeset
|
524 /* 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
|
525 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
|
526 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
|
527 synch_process_death = 0; |
81c44a01ddda
(Fcall_process): Clear synch_process_death and
Richard M. Stallman <rms@gnu.org>
parents:
4701
diff
changeset
|
528 synch_process_retcode = 0; |
53712
659b9b404c02
Define synch_process_termsig.
Jan Djärv <jan.h.d@swipnet.se>
parents:
52401
diff
changeset
|
529 synch_process_termsig = 0; |
4977
81c44a01ddda
(Fcall_process): Clear synch_process_death and
Richard M. Stallman <rms@gnu.org>
parents:
4701
diff
changeset
|
530 |
10839
2e3eae2280eb
(Fcall_process): Extend BUFFER arg so it can specify
Richard M. Stallman <rms@gnu.org>
parents:
10083
diff
changeset
|
531 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
|
532 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
|
533 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
|
534 { |
2e3eae2280eb
(Fcall_process): Extend BUFFER arg so it can specify
Richard M. Stallman <rms@gnu.org>
parents:
10083
diff
changeset
|
535 #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
|
536 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
|
537 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
|
538 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
|
539 #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
|
540 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
|
541 #endif /* not DOS_NT */ |
2e3eae2280eb
(Fcall_process): Extend BUFFER arg so it can specify
Richard M. Stallman <rms@gnu.org>
parents:
10083
diff
changeset
|
542 } |
2e3eae2280eb
(Fcall_process): Extend BUFFER arg so it can specify
Richard M. Stallman <rms@gnu.org>
parents:
10083
diff
changeset
|
543 |
2e3eae2280eb
(Fcall_process): Extend BUFFER arg so it can specify
Richard M. Stallman <rms@gnu.org>
parents:
10083
diff
changeset
|
544 if (fd_error < 0) |
2e3eae2280eb
(Fcall_process): Extend BUFFER arg so it can specify
Richard M. Stallman <rms@gnu.org>
parents:
10083
diff
changeset
|
545 { |
26088
b7aa6ac26872
Add support for large files, 64-bit Solaris, system locale codings.
Paul Eggert <eggert@twinsun.com>
parents:
25767
diff
changeset
|
546 emacs_close (filefd); |
15610 | 547 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
|
548 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
|
549 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
|
550 emacs_close (fd1); |
15610 | 551 #ifdef MSDOS |
552 unlink (tempfile); | |
553 #endif | |
68389
ee72dfb5a3cd
(Fcall_process): GCPRO error_file. Encode infile,
Kenichi Handa <handa@m17n.org>
parents:
67989
diff
changeset
|
554 if (NILP (error_file)) |
ee72dfb5a3cd
(Fcall_process): GCPRO error_file. Encode infile,
Kenichi Handa <handa@m17n.org>
parents:
67989
diff
changeset
|
555 error_file = build_string (NULL_DEVICE); |
ee72dfb5a3cd
(Fcall_process): GCPRO error_file. Encode infile,
Kenichi Handa <handa@m17n.org>
parents:
67989
diff
changeset
|
556 else if (STRINGP (error_file)) |
ee72dfb5a3cd
(Fcall_process): GCPRO error_file. Encode infile,
Kenichi Handa <handa@m17n.org>
parents:
67989
diff
changeset
|
557 error_file = DECODE_FILE (error_file); |
ee72dfb5a3cd
(Fcall_process): GCPRO error_file. Encode infile,
Kenichi Handa <handa@m17n.org>
parents:
67989
diff
changeset
|
558 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
|
559 } |
19838
7e1bbe58eb02
(Fcall_process): Encode the new current dir.
Richard M. Stallman <rms@gnu.org>
parents:
19790
diff
changeset
|
560 |
44890
01b93e5e53a7
Patch for building Emacs on Mac OS X. April 26, 2002. See ChangeLog,
Andrew Choi <akochoi@shaw.ca>
parents:
44486
diff
changeset
|
561 #ifdef MAC_OS8 |
25522
c675d8210bda
(call-process) [macintosh]: Call mac_run_command in
Richard M. Stallman <rms@gnu.org>
parents:
25521
diff
changeset
|
562 { |
c675d8210bda
(call-process) [macintosh]: Call mac_run_command in
Richard M. Stallman <rms@gnu.org>
parents:
25521
diff
changeset
|
563 /* Call run_mac_command in sysdep.c here directly instead of doing |
c675d8210bda
(call-process) [macintosh]: Call mac_run_command in
Richard M. Stallman <rms@gnu.org>
parents:
25521
diff
changeset
|
564 a child_setup as for MSDOS and other platforms. Note that this |
c675d8210bda
(call-process) [macintosh]: Call mac_run_command in
Richard M. Stallman <rms@gnu.org>
parents:
25521
diff
changeset
|
565 code does not handle passing the environment to the synchronous |
c675d8210bda
(call-process) [macintosh]: Call mac_run_command in
Richard M. Stallman <rms@gnu.org>
parents:
25521
diff
changeset
|
566 Mac subprocess. */ |
c675d8210bda
(call-process) [macintosh]: Call mac_run_command in
Richard M. Stallman <rms@gnu.org>
parents:
25521
diff
changeset
|
567 char *infn, *outfn, *errfn, *currdn; |
49600
23a1cea22d13
Trailing whitespace deleted.
Juanma Barranquero <lekktu@gmail.com>
parents:
47018
diff
changeset
|
568 |
25522
c675d8210bda
(call-process) [macintosh]: Call mac_run_command in
Richard M. Stallman <rms@gnu.org>
parents:
25521
diff
changeset
|
569 /* close these files so subprocess can write to them */ |
c675d8210bda
(call-process) [macintosh]: Call mac_run_command in
Richard M. Stallman <rms@gnu.org>
parents:
25521
diff
changeset
|
570 close (outfilefd); |
c675d8210bda
(call-process) [macintosh]: Call mac_run_command in
Richard M. Stallman <rms@gnu.org>
parents:
25521
diff
changeset
|
571 if (fd_error != outfilefd) |
c675d8210bda
(call-process) [macintosh]: Call mac_run_command in
Richard M. Stallman <rms@gnu.org>
parents:
25521
diff
changeset
|
572 close (fd_error); |
c675d8210bda
(call-process) [macintosh]: Call mac_run_command in
Richard M. Stallman <rms@gnu.org>
parents:
25521
diff
changeset
|
573 fd1 = -1; /* No harm in closing that one! */ |
c675d8210bda
(call-process) [macintosh]: Call mac_run_command in
Richard M. Stallman <rms@gnu.org>
parents:
25521
diff
changeset
|
574 |
46370
40db0673e6f0
Most uses of XSTRING combined with STRING_BYTES or indirection changed to
Ken Raeburn <raeburn@raeburn.org>
parents:
46293
diff
changeset
|
575 infn = SDATA (infile); |
25522
c675d8210bda
(call-process) [macintosh]: Call mac_run_command in
Richard M. Stallman <rms@gnu.org>
parents:
25521
diff
changeset
|
576 outfn = tempfile; |
c675d8210bda
(call-process) [macintosh]: Call mac_run_command in
Richard M. Stallman <rms@gnu.org>
parents:
25521
diff
changeset
|
577 if (NILP (error_file)) |
c675d8210bda
(call-process) [macintosh]: Call mac_run_command in
Richard M. Stallman <rms@gnu.org>
parents:
25521
diff
changeset
|
578 errfn = NULL_DEVICE; |
c675d8210bda
(call-process) [macintosh]: Call mac_run_command in
Richard M. Stallman <rms@gnu.org>
parents:
25521
diff
changeset
|
579 else if (EQ (Qt, error_file)) |
c675d8210bda
(call-process) [macintosh]: Call mac_run_command in
Richard M. Stallman <rms@gnu.org>
parents:
25521
diff
changeset
|
580 errfn = outfn; |
c675d8210bda
(call-process) [macintosh]: Call mac_run_command in
Richard M. Stallman <rms@gnu.org>
parents:
25521
diff
changeset
|
581 else |
46370
40db0673e6f0
Most uses of XSTRING combined with STRING_BYTES or indirection changed to
Ken Raeburn <raeburn@raeburn.org>
parents:
46293
diff
changeset
|
582 errfn = SDATA (error_file); |
40db0673e6f0
Most uses of XSTRING combined with STRING_BYTES or indirection changed to
Ken Raeburn <raeburn@raeburn.org>
parents:
46293
diff
changeset
|
583 currdn = SDATA (current_dir); |
25522
c675d8210bda
(call-process) [macintosh]: Call mac_run_command in
Richard M. Stallman <rms@gnu.org>
parents:
25521
diff
changeset
|
584 pid = run_mac_command (new_argv, currdn, infn, outfn, errfn); |
c675d8210bda
(call-process) [macintosh]: Call mac_run_command in
Richard M. Stallman <rms@gnu.org>
parents:
25521
diff
changeset
|
585 |
c675d8210bda
(call-process) [macintosh]: Call mac_run_command in
Richard M. Stallman <rms@gnu.org>
parents:
25521
diff
changeset
|
586 /* Record that the synchronous process exited and note its |
c675d8210bda
(call-process) [macintosh]: Call mac_run_command in
Richard M. Stallman <rms@gnu.org>
parents:
25521
diff
changeset
|
587 termination status. */ |
c675d8210bda
(call-process) [macintosh]: Call mac_run_command in
Richard M. Stallman <rms@gnu.org>
parents:
25521
diff
changeset
|
588 synch_process_alive = 0; |
c675d8210bda
(call-process) [macintosh]: Call mac_run_command in
Richard M. Stallman <rms@gnu.org>
parents:
25521
diff
changeset
|
589 synch_process_retcode = pid; |
c675d8210bda
(call-process) [macintosh]: Call mac_run_command in
Richard M. Stallman <rms@gnu.org>
parents:
25521
diff
changeset
|
590 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
|
591 { |
26526
b7438760079b
* callproc.c (strerror): Remove decl.
Paul Eggert <eggert@twinsun.com>
parents:
26088
diff
changeset
|
592 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
|
593 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
|
594 } |
25522
c675d8210bda
(call-process) [macintosh]: Call mac_run_command in
Richard M. Stallman <rms@gnu.org>
parents:
25521
diff
changeset
|
595 |
c675d8210bda
(call-process) [macintosh]: Call mac_run_command in
Richard M. Stallman <rms@gnu.org>
parents:
25521
diff
changeset
|
596 /* Since CRLF is converted to LF within `decode_coding', we can |
c675d8210bda
(call-process) [macintosh]: Call mac_run_command in
Richard M. Stallman <rms@gnu.org>
parents:
25521
diff
changeset
|
597 always open a file with binary mode. */ |
c675d8210bda
(call-process) [macintosh]: Call mac_run_command in
Richard M. Stallman <rms@gnu.org>
parents:
25521
diff
changeset
|
598 fd[0] = open (tempfile, O_BINARY); |
c675d8210bda
(call-process) [macintosh]: Call mac_run_command in
Richard M. Stallman <rms@gnu.org>
parents:
25521
diff
changeset
|
599 if (fd[0] < 0) |
c675d8210bda
(call-process) [macintosh]: Call mac_run_command in
Richard M. Stallman <rms@gnu.org>
parents:
25521
diff
changeset
|
600 { |
c675d8210bda
(call-process) [macintosh]: Call mac_run_command in
Richard M. Stallman <rms@gnu.org>
parents:
25521
diff
changeset
|
601 unlink (tempfile); |
c675d8210bda
(call-process) [macintosh]: Call mac_run_command in
Richard M. Stallman <rms@gnu.org>
parents:
25521
diff
changeset
|
602 close (filefd); |
c675d8210bda
(call-process) [macintosh]: Call mac_run_command in
Richard M. Stallman <rms@gnu.org>
parents:
25521
diff
changeset
|
603 report_file_error ("Cannot re-open temporary file", Qnil); |
c675d8210bda
(call-process) [macintosh]: Call mac_run_command in
Richard M. Stallman <rms@gnu.org>
parents:
25521
diff
changeset
|
604 } |
c675d8210bda
(call-process) [macintosh]: Call mac_run_command in
Richard M. Stallman <rms@gnu.org>
parents:
25521
diff
changeset
|
605 } |
44890
01b93e5e53a7
Patch for building Emacs on Mac OS X. April 26, 2002. See ChangeLog,
Andrew Choi <akochoi@shaw.ca>
parents:
44486
diff
changeset
|
606 #else /* not MAC_OS8 */ |
13719
660032b84b23
(Fcall_process) [MSDOS]: Support redirection of
Karl Heuer <kwzh@gnu.org>
parents:
12854
diff
changeset
|
607 #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
|
608 /* 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
|
609 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
|
610 below. */ |
21694
6e12eeda6913
(Fcall_process) [MSDOS]: Call child_setup instead of run_msdos_command.
Eli Zaretskii <eliz@gnu.org>
parents:
21626
diff
changeset
|
611 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
|
612 0, current_dir); |
13719
660032b84b23
(Fcall_process) [MSDOS]: Support redirection of
Karl Heuer <kwzh@gnu.org>
parents:
12854
diff
changeset
|
613 |
660032b84b23
(Fcall_process) [MSDOS]: Support redirection of
Karl Heuer <kwzh@gnu.org>
parents:
12854
diff
changeset
|
614 /* 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
|
615 termination status. */ |
660032b84b23
(Fcall_process) [MSDOS]: Support redirection of
Karl Heuer <kwzh@gnu.org>
parents:
12854
diff
changeset
|
616 synch_process_alive = 0; |
660032b84b23
(Fcall_process) [MSDOS]: Support redirection of
Karl Heuer <kwzh@gnu.org>
parents:
12854
diff
changeset
|
617 synch_process_retcode = pid; |
660032b84b23
(Fcall_process) [MSDOS]: Support redirection of
Karl Heuer <kwzh@gnu.org>
parents:
12854
diff
changeset
|
618 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
|
619 { |
26526
b7438760079b
* callproc.c (strerror): Remove decl.
Paul Eggert <eggert@twinsun.com>
parents:
26088
diff
changeset
|
620 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
|
621 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
|
622 } |
13719
660032b84b23
(Fcall_process) [MSDOS]: Support redirection of
Karl Heuer <kwzh@gnu.org>
parents:
12854
diff
changeset
|
623 |
26088
b7aa6ac26872
Add support for large files, 64-bit Solaris, system locale codings.
Paul Eggert <eggert@twinsun.com>
parents:
25767
diff
changeset
|
624 emacs_close (outfilefd); |
13719
660032b84b23
(Fcall_process) [MSDOS]: Support redirection of
Karl Heuer <kwzh@gnu.org>
parents:
12854
diff
changeset
|
625 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
|
626 emacs_close (fd_error); |
13719
660032b84b23
(Fcall_process) [MSDOS]: Support redirection of
Karl Heuer <kwzh@gnu.org>
parents:
12854
diff
changeset
|
627 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
|
628 /* 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
|
629 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
|
630 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
|
631 if (fd[0] < 0) |
660032b84b23
(Fcall_process) [MSDOS]: Support redirection of
Karl Heuer <kwzh@gnu.org>
parents:
12854
diff
changeset
|
632 { |
660032b84b23
(Fcall_process) [MSDOS]: Support redirection of
Karl Heuer <kwzh@gnu.org>
parents:
12854
diff
changeset
|
633 unlink (tempfile); |
26088
b7aa6ac26872
Add support for large files, 64-bit Solaris, system locale codings.
Paul Eggert <eggert@twinsun.com>
parents:
25767
diff
changeset
|
634 emacs_close (filefd); |
13719
660032b84b23
(Fcall_process) [MSDOS]: Support redirection of
Karl Heuer <kwzh@gnu.org>
parents:
12854
diff
changeset
|
635 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
|
636 } |
660032b84b23
(Fcall_process) [MSDOS]: Support redirection of
Karl Heuer <kwzh@gnu.org>
parents:
12854
diff
changeset
|
637 #else /* not MSDOS */ |
9786
7f4b72244919
(getenv_internal) [WINDOWSNT]: Use strnicmp, not bcmp.
Richard M. Stallman <rms@gnu.org>
parents:
9609
diff
changeset
|
638 #ifdef WINDOWSNT |
20525
468f59c6c9bf
(Fcall_process): Cast new_argv for child_setup.
Richard M. Stallman <rms@gnu.org>
parents:
20448
diff
changeset
|
639 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
|
640 0, current_dir); |
9786
7f4b72244919
(getenv_internal) [WINDOWSNT]: Use strnicmp, not bcmp.
Richard M. Stallman <rms@gnu.org>
parents:
9609
diff
changeset
|
641 #else /* not WINDOWSNT */ |
57892 | 642 BLOCK_INPUT; |
643 | |
296 | 644 pid = vfork (); |
645 | |
646 if (pid == 0) | |
647 { | |
648 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
|
649 emacs_close (fd[0]); |
18235
43ce16d5f31e
(Fcall_process): Use setsid to disconnect child
Richard M. Stallman <rms@gnu.org>
parents:
18182
diff
changeset
|
650 #ifdef HAVE_SETSID |
43ce16d5f31e
(Fcall_process): Use setsid to disconnect child
Richard M. Stallman <rms@gnu.org>
parents:
18182
diff
changeset
|
651 setsid (); |
43ce16d5f31e
(Fcall_process): Use setsid to disconnect child
Richard M. Stallman <rms@gnu.org>
parents:
18182
diff
changeset
|
652 #endif |
43ce16d5f31e
(Fcall_process): Use setsid to disconnect child
Richard M. Stallman <rms@gnu.org>
parents:
18182
diff
changeset
|
653 #if defined (USG) && !defined (BSD_PGRPS) |
296 | 654 setpgrp (); |
655 #else | |
656 setpgrp (pid, pid); | |
657 #endif /* USG */ | |
20525
468f59c6c9bf
(Fcall_process): Cast new_argv for child_setup.
Richard M. Stallman <rms@gnu.org>
parents:
20448
diff
changeset
|
658 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
|
659 0, current_dir); |
296 | 660 } |
57892 | 661 |
662 UNBLOCK_INPUT; | |
13719
660032b84b23
(Fcall_process) [MSDOS]: Support redirection of
Karl Heuer <kwzh@gnu.org>
parents:
12854
diff
changeset
|
663 #endif /* not WINDOWSNT */ |
15225
a78a1df9690c
(Fcall_process): Fix previous change (now !MSDOS only).
Richard M. Stallman <rms@gnu.org>
parents:
15210
diff
changeset
|
664 |
a78a1df9690c
(Fcall_process): Fix previous change (now !MSDOS only).
Richard M. Stallman <rms@gnu.org>
parents:
15210
diff
changeset
|
665 /* 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
|
666 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
|
667 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
|
668 #endif /* not MSDOS */ |
44890
01b93e5e53a7
Patch for building Emacs on Mac OS X. April 26, 2002. See ChangeLog,
Andrew Choi <akochoi@shaw.ca>
parents:
44486
diff
changeset
|
669 #endif /* not MAC_OS8 */ |
296 | 670 |
671 environ = save_environ; | |
672 | |
6466
4b3c537e1169
(Fcall_process): Make sure to close descriptors.
Richard M. Stallman <rms@gnu.org>
parents:
6391
diff
changeset
|
673 /* 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
|
674 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
|
675 emacs_close (filefd); |
15236
99d01b1b8799
(Fcall_process): Don't close the same fd twice.
Karl Heuer <kwzh@gnu.org>
parents:
15225
diff
changeset
|
676 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
|
677 emacs_close (fd1); |
296 | 678 } |
679 | |
680 if (pid < 0) | |
681 { | |
6466
4b3c537e1169
(Fcall_process): Make sure to close descriptors.
Richard M. Stallman <rms@gnu.org>
parents:
6391
diff
changeset
|
682 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
|
683 emacs_close (fd[0]); |
296 | 684 report_file_error ("Doing vfork", Qnil); |
685 } | |
686 | |
9138
6c814eb4d892
(Fcall_process, child_setup, getenv_internal): Use type test macros.
Karl Heuer <kwzh@gnu.org>
parents:
8853
diff
changeset
|
687 if (INTEGERP (buffer)) |
296 | 688 { |
6466
4b3c537e1169
(Fcall_process): Make sure to close descriptors.
Richard M. Stallman <rms@gnu.org>
parents:
6391
diff
changeset
|
689 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
|
690 emacs_close (fd[0]); |
296 | 691 #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
|
692 /* 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
|
693 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
|
694 the facilities for handling SIGCHLD. */ |
296 | 695 wait_without_blocking (); |
696 #endif /* subprocesses */ | |
697 return Qnil; | |
698 } | |
699 | |
6466
4b3c537e1169
(Fcall_process): Make sure to close descriptors.
Richard M. Stallman <rms@gnu.org>
parents:
6391
diff
changeset
|
700 /* 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
|
701 call_process_exited = 0; |
132464faeaf4
Don't kill remaining processes if child exits.
Richard M. Stallman <rms@gnu.org>
parents:
6031
diff
changeset
|
702 |
44890
01b93e5e53a7
Patch for building Emacs on Mac OS X. April 26, 2002. See ChangeLog,
Andrew Choi <akochoi@shaw.ca>
parents:
44486
diff
changeset
|
703 #if defined(MSDOS) || defined(MAC_OS8) |
5501
902cd7024cfa
(syms_of_callproc) [MSDOS]: New lisp variable: binary-process.
Richard M. Stallman <rms@gnu.org>
parents:
5348
diff
changeset
|
704 /* 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
|
705 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
|
706 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
|
707 #else |
296 | 708 record_unwind_protect (call_process_cleanup, |
709 Fcons (make_number (fd[0]), make_number (pid))); | |
44890
01b93e5e53a7
Patch for building Emacs on Mac OS X. April 26, 2002. See ChangeLog,
Andrew Choi <akochoi@shaw.ca>
parents:
44486
diff
changeset
|
710 #endif /* not MSDOS and not MAC_OS8 */ |
296 | 711 |
712 | |
9138
6c814eb4d892
(Fcall_process, child_setup, getenv_internal): Use type test macros.
Karl Heuer <kwzh@gnu.org>
parents:
8853
diff
changeset
|
713 if (BUFFERP (buffer)) |
296 | 714 Fset_buffer (buffer); |
715 | |
24931
6ccce3af0d2a
(Fcall_process): Decide coding system for decoding
Richard M. Stallman <rms@gnu.org>
parents:
24920
diff
changeset
|
716 if (NILP (buffer)) |
6ccce3af0d2a
(Fcall_process): Decide coding system for decoding
Richard M. Stallman <rms@gnu.org>
parents:
24920
diff
changeset
|
717 { |
6ccce3af0d2a
(Fcall_process): Decide coding system for decoding
Richard M. Stallman <rms@gnu.org>
parents:
24920
diff
changeset
|
718 /* 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
|
719 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
|
720 setup_coding_system (Qnil, &process_coding); |
6ccce3af0d2a
(Fcall_process): Decide coding system for decoding
Richard M. Stallman <rms@gnu.org>
parents:
24920
diff
changeset
|
721 } |
6ccce3af0d2a
(Fcall_process): Decide coding system for decoding
Richard M. Stallman <rms@gnu.org>
parents:
24920
diff
changeset
|
722 else |
6ccce3af0d2a
(Fcall_process): Decide coding system for decoding
Richard M. Stallman <rms@gnu.org>
parents:
24920
diff
changeset
|
723 { |
6ccce3af0d2a
(Fcall_process): Decide coding system for decoding
Richard M. Stallman <rms@gnu.org>
parents:
24920
diff
changeset
|
724 Lisp_Object val, *args2; |
6ccce3af0d2a
(Fcall_process): Decide coding system for decoding
Richard M. Stallman <rms@gnu.org>
parents:
24920
diff
changeset
|
725 |
6ccce3af0d2a
(Fcall_process): Decide coding system for decoding
Richard M. Stallman <rms@gnu.org>
parents:
24920
diff
changeset
|
726 val = Qnil; |
6ccce3af0d2a
(Fcall_process): Decide coding system for decoding
Richard M. Stallman <rms@gnu.org>
parents:
24920
diff
changeset
|
727 if (!NILP (Vcoding_system_for_read)) |
6ccce3af0d2a
(Fcall_process): Decide coding system for decoding
Richard M. Stallman <rms@gnu.org>
parents:
24920
diff
changeset
|
728 val = Vcoding_system_for_read; |
6ccce3af0d2a
(Fcall_process): Decide coding system for decoding
Richard M. Stallman <rms@gnu.org>
parents:
24920
diff
changeset
|
729 else |
6ccce3af0d2a
(Fcall_process): Decide coding system for decoding
Richard M. Stallman <rms@gnu.org>
parents:
24920
diff
changeset
|
730 { |
6ccce3af0d2a
(Fcall_process): Decide coding system for decoding
Richard M. Stallman <rms@gnu.org>
parents:
24920
diff
changeset
|
731 if (EQ (coding_systems, Qt)) |
6ccce3af0d2a
(Fcall_process): Decide coding system for decoding
Richard M. Stallman <rms@gnu.org>
parents:
24920
diff
changeset
|
732 { |
6ccce3af0d2a
(Fcall_process): Decide coding system for decoding
Richard M. Stallman <rms@gnu.org>
parents:
24920
diff
changeset
|
733 int i; |
6ccce3af0d2a
(Fcall_process): Decide coding system for decoding
Richard M. Stallman <rms@gnu.org>
parents:
24920
diff
changeset
|
734 |
6ccce3af0d2a
(Fcall_process): Decide coding system for decoding
Richard M. Stallman <rms@gnu.org>
parents:
24920
diff
changeset
|
735 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
|
736 args2[0] = Qcall_process; |
6ccce3af0d2a
(Fcall_process): Decide coding system for decoding
Richard M. Stallman <rms@gnu.org>
parents:
24920
diff
changeset
|
737 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
|
738 coding_systems |
6ccce3af0d2a
(Fcall_process): Decide coding system for decoding
Richard M. Stallman <rms@gnu.org>
parents:
24920
diff
changeset
|
739 = 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
|
740 } |
6ccce3af0d2a
(Fcall_process): Decide coding system for decoding
Richard M. Stallman <rms@gnu.org>
parents:
24920
diff
changeset
|
741 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
|
742 val = XCAR (coding_systems); |
24931
6ccce3af0d2a
(Fcall_process): Decide coding system for decoding
Richard M. Stallman <rms@gnu.org>
parents:
24920
diff
changeset
|
743 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
|
744 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
|
745 else |
6ccce3af0d2a
(Fcall_process): Decide coding system for decoding
Richard M. Stallman <rms@gnu.org>
parents:
24920
diff
changeset
|
746 val = Qnil; |
6ccce3af0d2a
(Fcall_process): Decide coding system for decoding
Richard M. Stallman <rms@gnu.org>
parents:
24920
diff
changeset
|
747 } |
6ccce3af0d2a
(Fcall_process): Decide coding system for decoding
Richard M. Stallman <rms@gnu.org>
parents:
24920
diff
changeset
|
748 setup_coding_system (Fcheck_coding_system (val), &process_coding); |
6ccce3af0d2a
(Fcall_process): Decide coding system for decoding
Richard M. Stallman <rms@gnu.org>
parents:
24920
diff
changeset
|
749 /* 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
|
750 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
|
751 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
|
752 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
|
753 && !NILP (val)) |
6ccce3af0d2a
(Fcall_process): Decide coding system for decoding
Richard M. Stallman <rms@gnu.org>
parents:
24920
diff
changeset
|
754 setup_raw_text_coding_system (&process_coding); |
6ccce3af0d2a
(Fcall_process): Decide coding system for decoding
Richard M. Stallman <rms@gnu.org>
parents:
24920
diff
changeset
|
755 } |
29000
f5c7d80ed4de
(Fcall_process): Always encode an argument string if
Kenichi Handa <handa@m17n.org>
parents:
28914
diff
changeset
|
756 process_coding.src_multibyte = 0; |
f5c7d80ed4de
(Fcall_process): Always encode an argument string if
Kenichi Handa <handa@m17n.org>
parents:
28914
diff
changeset
|
757 process_coding.dst_multibyte |
f5c7d80ed4de
(Fcall_process): Always encode an argument string if
Kenichi Handa <handa@m17n.org>
parents:
28914
diff
changeset
|
758 = (BUFFERP (buffer) |
f5c7d80ed4de
(Fcall_process): Always encode an argument string if
Kenichi Handa <handa@m17n.org>
parents:
28914
diff
changeset
|
759 ? ! NILP (XBUFFER (buffer)->enable_multibyte_characters) |
f5c7d80ed4de
(Fcall_process): Always encode an argument string if
Kenichi Handa <handa@m17n.org>
parents:
28914
diff
changeset
|
760 : ! NILP (current_buffer->enable_multibyte_characters)); |
24931
6ccce3af0d2a
(Fcall_process): Decide coding system for decoding
Richard M. Stallman <rms@gnu.org>
parents:
24920
diff
changeset
|
761 |
296 | 762 immediate_quit = 1; |
763 QUIT; | |
764 | |
765 { | |
766 register int nread; | |
5251
480731ff8e9a
(Fcall_process): Call prepare_menu_bars.
Richard M. Stallman <rms@gnu.org>
parents:
5179
diff
changeset
|
767 int first = 1; |
11619
ff4be652af46
(Fcall_process): Extend BUFFER arg so it can specify
Richard M. Stallman <rms@gnu.org>
parents:
11513
diff
changeset
|
768 int total_read = 0; |
20724
e34b99d443b1
(Fcall_process): Use raw-text instead of emacs-mule
Kenichi Handa <handa@m17n.org>
parents:
20595
diff
changeset
|
769 int carryover = 0; |
57473
fb60234070b0
(Fcall_process): Simplify handling of display arg.
Kim F. Storm <storm@cua.dk>
parents:
57290
diff
changeset
|
770 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
|
771 struct coding_system saved_coding; |
30579
13339fe0bdc0
(Fcall_process): Handle post-read-conversion of coding system if any.
Kenichi Handa <handa@m17n.org>
parents:
30530
diff
changeset
|
772 int pt_orig = PT, pt_byte_orig = PT_BYTE; |
13339fe0bdc0
(Fcall_process): Handle post-read-conversion of coding system if any.
Kenichi Handa <handa@m17n.org>
parents:
30530
diff
changeset
|
773 int inserted; |
22320
aed8bb8b8837
(Fcall_process): Avoid initializer on auto struct.
Karl Heuer <kwzh@gnu.org>
parents:
21997
diff
changeset
|
774 |
aed8bb8b8837
(Fcall_process): Avoid initializer on auto struct.
Karl Heuer <kwzh@gnu.org>
parents:
21997
diff
changeset
|
775 saved_coding = process_coding; |
29273 | 776 if (process_coding.composing != COMPOSITION_DISABLED) |
777 coding_allocate_composition_data (&process_coding, PT); | |
11780
6ae23eecab6a
(Fcall_process): Keep reading till buffer is nearly full.
Richard M. Stallman <rms@gnu.org>
parents:
11619
diff
changeset
|
778 while (1) |
296 | 779 { |
11780
6ae23eecab6a
(Fcall_process): Keep reading till buffer is nearly full.
Richard M. Stallman <rms@gnu.org>
parents:
11619
diff
changeset
|
780 /* 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
|
781 of the buffer size we have. But don't read |
14036 | 782 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
|
783 nread = carryover; |
11780
6ae23eecab6a
(Fcall_process): Keep reading till buffer is nearly full.
Richard M. Stallman <rms@gnu.org>
parents:
11619
diff
changeset
|
784 while (nread < bufsize - 1024) |
8853
f44e40e722b2
(Fcall_process) [__osf__ && __alpha]:
Richard M. Stallman <rms@gnu.org>
parents:
8737
diff
changeset
|
785 { |
62982
d7793ac6df62
(Fcall_process): Don't use alloca to gradually
Kim F. Storm <storm@cua.dk>
parents:
60891
diff
changeset
|
786 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
|
787 bufsize - nread); |
11780
6ae23eecab6a
(Fcall_process): Keep reading till buffer is nearly full.
Richard M. Stallman <rms@gnu.org>
parents:
11619
diff
changeset
|
788 |
6ae23eecab6a
(Fcall_process): Keep reading till buffer is nearly full.
Richard M. Stallman <rms@gnu.org>
parents:
11619
diff
changeset
|
789 if (this_read < 0) |
6ae23eecab6a
(Fcall_process): Keep reading till buffer is nearly full.
Richard M. Stallman <rms@gnu.org>
parents:
11619
diff
changeset
|
790 goto give_up; |
6ae23eecab6a
(Fcall_process): Keep reading till buffer is nearly full.
Richard M. Stallman <rms@gnu.org>
parents:
11619
diff
changeset
|
791 |
6ae23eecab6a
(Fcall_process): Keep reading till buffer is nearly full.
Richard M. Stallman <rms@gnu.org>
parents:
11619
diff
changeset
|
792 if (this_read == 0) |
21966
10183730b250
(Fcall_process): If we must display received data on
Kenichi Handa <handa@m17n.org>
parents:
21786
diff
changeset
|
793 { |
10183730b250
(Fcall_process): If we must display received data on
Kenichi Handa <handa@m17n.org>
parents:
21786
diff
changeset
|
794 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
|
795 break; |
10183730b250
(Fcall_process): If we must display received data on
Kenichi Handa <handa@m17n.org>
parents:
21786
diff
changeset
|
796 } |
11780
6ae23eecab6a
(Fcall_process): Keep reading till buffer is nearly full.
Richard M. Stallman <rms@gnu.org>
parents:
11619
diff
changeset
|
797 |
6ae23eecab6a
(Fcall_process): Keep reading till buffer is nearly full.
Richard M. Stallman <rms@gnu.org>
parents:
11619
diff
changeset
|
798 nread += this_read; |
21966
10183730b250
(Fcall_process): If we must display received data on
Kenichi Handa <handa@m17n.org>
parents:
21786
diff
changeset
|
799 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
|
800 |
21966
10183730b250
(Fcall_process): If we must display received data on
Kenichi Handa <handa@m17n.org>
parents:
21786
diff
changeset
|
801 if (display_on_the_fly) |
10183730b250
(Fcall_process): If we must display received data on
Kenichi Handa <handa@m17n.org>
parents:
21786
diff
changeset
|
802 break; |
10183730b250
(Fcall_process): If we must display received data on
Kenichi Handa <handa@m17n.org>
parents:
21786
diff
changeset
|
803 } |
11780
6ae23eecab6a
(Fcall_process): Keep reading till buffer is nearly full.
Richard M. Stallman <rms@gnu.org>
parents:
11619
diff
changeset
|
804 |
6ae23eecab6a
(Fcall_process): Keep reading till buffer is nearly full.
Richard M. Stallman <rms@gnu.org>
parents:
11619
diff
changeset
|
805 /* Now NREAD is the total amount of data in the buffer. */ |
296 | 806 immediate_quit = 0; |
49600
23a1cea22d13
Trailing whitespace deleted.
Juanma Barranquero <lekktu@gmail.com>
parents:
47018
diff
changeset
|
807 |
942
c519b70eb50b
Replaced fuctions egetenv, Fgetenv, getenv_internal, which had
Joseph Arceneaux <jla@gnu.org>
parents:
934
diff
changeset
|
808 if (!NILP (buffer)) |
17025
3c222a7edda1
Include charset.h and coding.h.
Karl Heuer <kwzh@gnu.org>
parents:
16659
diff
changeset
|
809 { |
29000
f5c7d80ed4de
(Fcall_process): Always encode an argument string if
Kenichi Handa <handa@m17n.org>
parents:
28914
diff
changeset
|
810 if (! 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
|
811 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
|
812 else |
3c222a7edda1
Include charset.h and coding.h.
Karl Heuer <kwzh@gnu.org>
parents:
16659
diff
changeset
|
813 { /* We have to decode the input. */ |
29273 | 814 int size; |
815 char *decoding_buf; | |
17025
3c222a7edda1
Include charset.h and coding.h.
Karl Heuer <kwzh@gnu.org>
parents:
16659
diff
changeset
|
816 |
29273 | 817 repeat_decoding: |
818 size = decoding_buffer_size (&process_coding, nread); | |
819 decoding_buf = (char *) xmalloc (size); | |
49600
23a1cea22d13
Trailing whitespace deleted.
Juanma Barranquero <lekktu@gmail.com>
parents:
47018
diff
changeset
|
820 |
46260
b1e78489c540
(Fcall_process): Fix previous change.
Kenichi Handa <handa@m17n.org>
parents:
45980
diff
changeset
|
821 /* We can't use the macro CODING_REQUIRE_DETECTION |
b1e78489c540
(Fcall_process): Fix previous change.
Kenichi Handa <handa@m17n.org>
parents:
45980
diff
changeset
|
822 because it always returns nonzero if the coding |
b1e78489c540
(Fcall_process): Fix previous change.
Kenichi Handa <handa@m17n.org>
parents:
45980
diff
changeset
|
823 system requires EOL detection. Here, we have to |
b1e78489c540
(Fcall_process): Fix previous change.
Kenichi Handa <handa@m17n.org>
parents:
45980
diff
changeset
|
824 check only whether or not the coding system |
b1e78489c540
(Fcall_process): Fix previous change.
Kenichi Handa <handa@m17n.org>
parents:
45980
diff
changeset
|
825 requires text-encoding detection. */ |
b1e78489c540
(Fcall_process): Fix previous change.
Kenichi Handa <handa@m17n.org>
parents:
45980
diff
changeset
|
826 if (process_coding.type == coding_type_undecided) |
45980
1f38d08f324b
(Fcall_process): If code detection is necessary, call detect_coding
Kenichi Handa <handa@m17n.org>
parents:
45092
diff
changeset
|
827 { |
62982
d7793ac6df62
(Fcall_process): Don't use alloca to gradually
Kim F. Storm <storm@cua.dk>
parents:
60891
diff
changeset
|
828 detect_coding (&process_coding, buf, nread); |
45980
1f38d08f324b
(Fcall_process): If code detection is necessary, call detect_coding
Kenichi Handa <handa@m17n.org>
parents:
45092
diff
changeset
|
829 if (process_coding.composing != COMPOSITION_DISABLED) |
57290 | 830 /* We have not yet allocated the composition |
831 data because the coding type was undecided. */ | |
45980
1f38d08f324b
(Fcall_process): If code detection is necessary, call detect_coding
Kenichi Handa <handa@m17n.org>
parents:
45092
diff
changeset
|
832 coding_allocate_composition_data (&process_coding, PT); |
1f38d08f324b
(Fcall_process): If code detection is necessary, call detect_coding
Kenichi Handa <handa@m17n.org>
parents:
45092
diff
changeset
|
833 } |
29287
5fb859bdf5bd
(Fcall_process): Fix previous change.
Kenichi Handa <handa@m17n.org>
parents:
29273
diff
changeset
|
834 if (process_coding.cmp_data) |
5fb859bdf5bd
(Fcall_process): Fix previous change.
Kenichi Handa <handa@m17n.org>
parents:
29273
diff
changeset
|
835 process_coding.cmp_data->char_offset = PT; |
49600
23a1cea22d13
Trailing whitespace deleted.
Juanma Barranquero <lekktu@gmail.com>
parents:
47018
diff
changeset
|
836 |
62982
d7793ac6df62
(Fcall_process): Don't use alloca to gradually
Kim F. Storm <storm@cua.dk>
parents:
60891
diff
changeset
|
837 decode_coding (&process_coding, buf, decoding_buf, |
20724
e34b99d443b1
(Fcall_process): Use raw-text instead of emacs-mule
Kenichi Handa <handa@m17n.org>
parents:
20595
diff
changeset
|
838 nread, size); |
49600
23a1cea22d13
Trailing whitespace deleted.
Juanma Barranquero <lekktu@gmail.com>
parents:
47018
diff
changeset
|
839 |
21966
10183730b250
(Fcall_process): If we must display received data on
Kenichi Handa <handa@m17n.org>
parents:
21786
diff
changeset
|
840 if (display_on_the_fly |
10183730b250
(Fcall_process): If we must display received data on
Kenichi Handa <handa@m17n.org>
parents:
21786
diff
changeset
|
841 && saved_coding.type == coding_type_undecided |
10183730b250
(Fcall_process): If we must display received data on
Kenichi Handa <handa@m17n.org>
parents:
21786
diff
changeset
|
842 && process_coding.type != coding_type_undecided) |
10183730b250
(Fcall_process): If we must display received data on
Kenichi Handa <handa@m17n.org>
parents:
21786
diff
changeset
|
843 { |
10183730b250
(Fcall_process): If we must display received data on
Kenichi Handa <handa@m17n.org>
parents:
21786
diff
changeset
|
844 /* 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
|
845 there's a possibility that the detection was |
57473
fb60234070b0
(Fcall_process): Simplify handling of display arg.
Kim F. Storm <storm@cua.dk>
parents:
57290
diff
changeset
|
846 done by insufficient data. So, we try the code |
fb60234070b0
(Fcall_process): Simplify handling of display arg.
Kim F. Storm <storm@cua.dk>
parents:
57290
diff
changeset
|
847 detection again with more data. */ |
24432
a1cd251f7a70
(Fcall_process): Use xmalloc, xfree.
Karl Heuer <kwzh@gnu.org>
parents:
24412
diff
changeset
|
848 xfree (decoding_buf); |
21966
10183730b250
(Fcall_process): If we must display received data on
Kenichi Handa <handa@m17n.org>
parents:
21786
diff
changeset
|
849 display_on_the_fly = 0; |
10183730b250
(Fcall_process): If we must display received data on
Kenichi Handa <handa@m17n.org>
parents:
21786
diff
changeset
|
850 process_coding = saved_coding; |
10183730b250
(Fcall_process): If we must display received data on
Kenichi Handa <handa@m17n.org>
parents:
21786
diff
changeset
|
851 carryover = nread; |
57473
fb60234070b0
(Fcall_process): Simplify handling of display arg.
Kim F. Storm <storm@cua.dk>
parents:
57290
diff
changeset
|
852 /* 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
|
853 fails in the future. */ |
fb60234070b0
(Fcall_process): Simplify handling of display arg.
Kim F. Storm <storm@cua.dk>
parents:
57290
diff
changeset
|
854 saved_coding.type = coding_type_no_conversion; |
21966
10183730b250
(Fcall_process): If we must display received data on
Kenichi Handa <handa@m17n.org>
parents:
21786
diff
changeset
|
855 continue; |
10183730b250
(Fcall_process): If we must display received data on
Kenichi Handa <handa@m17n.org>
parents:
21786
diff
changeset
|
856 } |
49600
23a1cea22d13
Trailing whitespace deleted.
Juanma Barranquero <lekktu@gmail.com>
parents:
47018
diff
changeset
|
857 |
20724
e34b99d443b1
(Fcall_process): Use raw-text instead of emacs-mule
Kenichi Handa <handa@m17n.org>
parents:
20595
diff
changeset
|
858 if (process_coding.produced > 0) |
29287
5fb859bdf5bd
(Fcall_process): Fix previous change.
Kenichi Handa <handa@m17n.org>
parents:
29273
diff
changeset
|
859 insert_1_both (decoding_buf, process_coding.produced_char, |
5fb859bdf5bd
(Fcall_process): Fix previous change.
Kenichi Handa <handa@m17n.org>
parents:
29273
diff
changeset
|
860 process_coding.produced, 0, 1, 0); |
24432
a1cd251f7a70
(Fcall_process): Use xmalloc, xfree.
Karl Heuer <kwzh@gnu.org>
parents:
24412
diff
changeset
|
861 xfree (decoding_buf); |
37936
f758c2542a3a
(Fcall_process): Deal with decode_coding returning
Gerd Moellmann <gerd@gnu.org>
parents:
35336
diff
changeset
|
862 |
f758c2542a3a
(Fcall_process): Deal with decode_coding returning
Gerd Moellmann <gerd@gnu.org>
parents:
35336
diff
changeset
|
863 if (process_coding.result == CODING_FINISH_INCONSISTENT_EOL) |
f758c2542a3a
(Fcall_process): Deal with decode_coding returning
Gerd Moellmann <gerd@gnu.org>
parents:
35336
diff
changeset
|
864 { |
f758c2542a3a
(Fcall_process): Deal with decode_coding returning
Gerd Moellmann <gerd@gnu.org>
parents:
35336
diff
changeset
|
865 Lisp_Object eol_type, coding; |
f758c2542a3a
(Fcall_process): Deal with decode_coding returning
Gerd Moellmann <gerd@gnu.org>
parents:
35336
diff
changeset
|
866 |
f758c2542a3a
(Fcall_process): Deal with decode_coding returning
Gerd Moellmann <gerd@gnu.org>
parents:
35336
diff
changeset
|
867 if (process_coding.eol_type == CODING_EOL_CR) |
f758c2542a3a
(Fcall_process): Deal with decode_coding returning
Gerd Moellmann <gerd@gnu.org>
parents:
35336
diff
changeset
|
868 { |
f758c2542a3a
(Fcall_process): Deal with decode_coding returning
Gerd Moellmann <gerd@gnu.org>
parents:
35336
diff
changeset
|
869 /* CRs have been replaced with LFs. Undo |
f758c2542a3a
(Fcall_process): Deal with decode_coding returning
Gerd Moellmann <gerd@gnu.org>
parents:
35336
diff
changeset
|
870 that in the text inserted above. */ |
f758c2542a3a
(Fcall_process): Deal with decode_coding returning
Gerd Moellmann <gerd@gnu.org>
parents:
35336
diff
changeset
|
871 unsigned char *p; |
49600
23a1cea22d13
Trailing whitespace deleted.
Juanma Barranquero <lekktu@gmail.com>
parents:
47018
diff
changeset
|
872 |
37936
f758c2542a3a
(Fcall_process): Deal with decode_coding returning
Gerd Moellmann <gerd@gnu.org>
parents:
35336
diff
changeset
|
873 move_gap_both (PT, PT_BYTE); |
49600
23a1cea22d13
Trailing whitespace deleted.
Juanma Barranquero <lekktu@gmail.com>
parents:
47018
diff
changeset
|
874 |
37936
f758c2542a3a
(Fcall_process): Deal with decode_coding returning
Gerd Moellmann <gerd@gnu.org>
parents:
35336
diff
changeset
|
875 p = BYTE_POS_ADDR (pt_byte_orig); |
f758c2542a3a
(Fcall_process): Deal with decode_coding returning
Gerd Moellmann <gerd@gnu.org>
parents:
35336
diff
changeset
|
876 for (; p < GPT_ADDR; ++p) |
f758c2542a3a
(Fcall_process): Deal with decode_coding returning
Gerd Moellmann <gerd@gnu.org>
parents:
35336
diff
changeset
|
877 if (*p == '\n') |
f758c2542a3a
(Fcall_process): Deal with decode_coding returning
Gerd Moellmann <gerd@gnu.org>
parents:
35336
diff
changeset
|
878 *p = '\r'; |
f758c2542a3a
(Fcall_process): Deal with decode_coding returning
Gerd Moellmann <gerd@gnu.org>
parents:
35336
diff
changeset
|
879 } |
f758c2542a3a
(Fcall_process): Deal with decode_coding returning
Gerd Moellmann <gerd@gnu.org>
parents:
35336
diff
changeset
|
880 else if (process_coding.eol_type == CODING_EOL_CRLF) |
f758c2542a3a
(Fcall_process): Deal with decode_coding returning
Gerd Moellmann <gerd@gnu.org>
parents:
35336
diff
changeset
|
881 { |
f758c2542a3a
(Fcall_process): Deal with decode_coding returning
Gerd Moellmann <gerd@gnu.org>
parents:
35336
diff
changeset
|
882 /* CR LFs have been replaced with LFs. Undo |
f758c2542a3a
(Fcall_process): Deal with decode_coding returning
Gerd Moellmann <gerd@gnu.org>
parents:
35336
diff
changeset
|
883 that by inserting CRs in front of LFs in |
f758c2542a3a
(Fcall_process): Deal with decode_coding returning
Gerd Moellmann <gerd@gnu.org>
parents:
35336
diff
changeset
|
884 the text inserted above. */ |
f758c2542a3a
(Fcall_process): Deal with decode_coding returning
Gerd Moellmann <gerd@gnu.org>
parents:
35336
diff
changeset
|
885 EMACS_INT bytepos, old_pt, old_pt_byte, nCR; |
f758c2542a3a
(Fcall_process): Deal with decode_coding returning
Gerd Moellmann <gerd@gnu.org>
parents:
35336
diff
changeset
|
886 |
f758c2542a3a
(Fcall_process): Deal with decode_coding returning
Gerd Moellmann <gerd@gnu.org>
parents:
35336
diff
changeset
|
887 old_pt = PT; |
f758c2542a3a
(Fcall_process): Deal with decode_coding returning
Gerd Moellmann <gerd@gnu.org>
parents:
35336
diff
changeset
|
888 old_pt_byte = PT_BYTE; |
f758c2542a3a
(Fcall_process): Deal with decode_coding returning
Gerd Moellmann <gerd@gnu.org>
parents:
35336
diff
changeset
|
889 nCR = 0; |
49600
23a1cea22d13
Trailing whitespace deleted.
Juanma Barranquero <lekktu@gmail.com>
parents:
47018
diff
changeset
|
890 |
37936
f758c2542a3a
(Fcall_process): Deal with decode_coding returning
Gerd Moellmann <gerd@gnu.org>
parents:
35336
diff
changeset
|
891 for (bytepos = PT_BYTE - 1; |
f758c2542a3a
(Fcall_process): Deal with decode_coding returning
Gerd Moellmann <gerd@gnu.org>
parents:
35336
diff
changeset
|
892 bytepos >= pt_byte_orig; |
f758c2542a3a
(Fcall_process): Deal with decode_coding returning
Gerd Moellmann <gerd@gnu.org>
parents:
35336
diff
changeset
|
893 --bytepos) |
f758c2542a3a
(Fcall_process): Deal with decode_coding returning
Gerd Moellmann <gerd@gnu.org>
parents:
35336
diff
changeset
|
894 if (FETCH_BYTE (bytepos) == '\n') |
f758c2542a3a
(Fcall_process): Deal with decode_coding returning
Gerd Moellmann <gerd@gnu.org>
parents:
35336
diff
changeset
|
895 { |
f758c2542a3a
(Fcall_process): Deal with decode_coding returning
Gerd Moellmann <gerd@gnu.org>
parents:
35336
diff
changeset
|
896 EMACS_INT charpos = BYTE_TO_CHAR (bytepos); |
f758c2542a3a
(Fcall_process): Deal with decode_coding returning
Gerd Moellmann <gerd@gnu.org>
parents:
35336
diff
changeset
|
897 TEMP_SET_PT_BOTH (charpos, bytepos); |
f758c2542a3a
(Fcall_process): Deal with decode_coding returning
Gerd Moellmann <gerd@gnu.org>
parents:
35336
diff
changeset
|
898 insert_1_both ("\r", 1, 1, 0, 1, 0); |
f758c2542a3a
(Fcall_process): Deal with decode_coding returning
Gerd Moellmann <gerd@gnu.org>
parents:
35336
diff
changeset
|
899 ++nCR; |
f758c2542a3a
(Fcall_process): Deal with decode_coding returning
Gerd Moellmann <gerd@gnu.org>
parents:
35336
diff
changeset
|
900 } |
f758c2542a3a
(Fcall_process): Deal with decode_coding returning
Gerd Moellmann <gerd@gnu.org>
parents:
35336
diff
changeset
|
901 |
f758c2542a3a
(Fcall_process): Deal with decode_coding returning
Gerd Moellmann <gerd@gnu.org>
parents:
35336
diff
changeset
|
902 TEMP_SET_PT_BOTH (old_pt + nCR, old_pt_byte + nCR); |
f758c2542a3a
(Fcall_process): Deal with decode_coding returning
Gerd Moellmann <gerd@gnu.org>
parents:
35336
diff
changeset
|
903 } |
f758c2542a3a
(Fcall_process): Deal with decode_coding returning
Gerd Moellmann <gerd@gnu.org>
parents:
35336
diff
changeset
|
904 |
f758c2542a3a
(Fcall_process): Deal with decode_coding returning
Gerd Moellmann <gerd@gnu.org>
parents:
35336
diff
changeset
|
905 /* Set the coding system symbol to that for |
f758c2542a3a
(Fcall_process): Deal with decode_coding returning
Gerd Moellmann <gerd@gnu.org>
parents:
35336
diff
changeset
|
906 Unix-like EOL. */ |
f758c2542a3a
(Fcall_process): Deal with decode_coding returning
Gerd Moellmann <gerd@gnu.org>
parents:
35336
diff
changeset
|
907 eol_type = Fget (saved_coding.symbol, Qeol_type); |
f758c2542a3a
(Fcall_process): Deal with decode_coding returning
Gerd Moellmann <gerd@gnu.org>
parents:
35336
diff
changeset
|
908 if (VECTORP (eol_type) |
f758c2542a3a
(Fcall_process): Deal with decode_coding returning
Gerd Moellmann <gerd@gnu.org>
parents:
35336
diff
changeset
|
909 && ASIZE (eol_type) == 3 |
f758c2542a3a
(Fcall_process): Deal with decode_coding returning
Gerd Moellmann <gerd@gnu.org>
parents:
35336
diff
changeset
|
910 && SYMBOLP (AREF (eol_type, CODING_EOL_LF))) |
f758c2542a3a
(Fcall_process): Deal with decode_coding returning
Gerd Moellmann <gerd@gnu.org>
parents:
35336
diff
changeset
|
911 coding = AREF (eol_type, CODING_EOL_LF); |
f758c2542a3a
(Fcall_process): Deal with decode_coding returning
Gerd Moellmann <gerd@gnu.org>
parents:
35336
diff
changeset
|
912 else |
f758c2542a3a
(Fcall_process): Deal with decode_coding returning
Gerd Moellmann <gerd@gnu.org>
parents:
35336
diff
changeset
|
913 coding = saved_coding.symbol; |
49600
23a1cea22d13
Trailing whitespace deleted.
Juanma Barranquero <lekktu@gmail.com>
parents:
47018
diff
changeset
|
914 |
37936
f758c2542a3a
(Fcall_process): Deal with decode_coding returning
Gerd Moellmann <gerd@gnu.org>
parents:
35336
diff
changeset
|
915 process_coding.symbol = coding; |
f758c2542a3a
(Fcall_process): Deal with decode_coding returning
Gerd Moellmann <gerd@gnu.org>
parents:
35336
diff
changeset
|
916 process_coding.eol_type = CODING_EOL_LF; |
f758c2542a3a
(Fcall_process): Deal with decode_coding returning
Gerd Moellmann <gerd@gnu.org>
parents:
35336
diff
changeset
|
917 process_coding.mode |
f758c2542a3a
(Fcall_process): Deal with decode_coding returning
Gerd Moellmann <gerd@gnu.org>
parents:
35336
diff
changeset
|
918 &= ~CODING_MODE_INHIBIT_INCONSISTENT_EOL; |
f758c2542a3a
(Fcall_process): Deal with decode_coding returning
Gerd Moellmann <gerd@gnu.org>
parents:
35336
diff
changeset
|
919 } |
49600
23a1cea22d13
Trailing whitespace deleted.
Juanma Barranquero <lekktu@gmail.com>
parents:
47018
diff
changeset
|
920 |
29273 | 921 nread -= process_coding.consumed; |
922 carryover = nread; | |
20724
e34b99d443b1
(Fcall_process): Use raw-text instead of emacs-mule
Kenichi Handa <handa@m17n.org>
parents:
20595
diff
changeset
|
923 if (carryover > 0) |
29000
f5c7d80ed4de
(Fcall_process): Always encode an argument string if
Kenichi Handa <handa@m17n.org>
parents:
28914
diff
changeset
|
924 /* 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
|
925 better avoid overhead of bcopy. */ |
62982
d7793ac6df62
(Fcall_process): Don't use alloca to gradually
Kim F. Storm <storm@cua.dk>
parents:
60891
diff
changeset
|
926 BCOPY_SHORT (buf + process_coding.consumed, buf, |
29000
f5c7d80ed4de
(Fcall_process): Always encode an argument string if
Kenichi Handa <handa@m17n.org>
parents:
28914
diff
changeset
|
927 carryover); |
29273 | 928 if (process_coding.result == CODING_FINISH_INSUFFICIENT_CMP) |
929 { | |
930 /* The decoding ended because of insufficient data | |
931 area to record information about composition. | |
932 We must try decoding with additional data area | |
29287
5fb859bdf5bd
(Fcall_process): Fix previous change.
Kenichi Handa <handa@m17n.org>
parents:
29273
diff
changeset
|
933 before reading more output for the process. */ |
29273 | 934 coding_allocate_composition_data (&process_coding, PT); |
935 goto repeat_decoding; | |
936 } | |
17025
3c222a7edda1
Include charset.h and coding.h.
Karl Heuer <kwzh@gnu.org>
parents:
16659
diff
changeset
|
937 } |
3c222a7edda1
Include charset.h and coding.h.
Karl Heuer <kwzh@gnu.org>
parents:
16659
diff
changeset
|
938 } |
29000
f5c7d80ed4de
(Fcall_process): Always encode an argument string if
Kenichi Handa <handa@m17n.org>
parents:
28914
diff
changeset
|
939 |
20724
e34b99d443b1
(Fcall_process): Use raw-text instead of emacs-mule
Kenichi Handa <handa@m17n.org>
parents:
20595
diff
changeset
|
940 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
|
941 break; |
11619
ff4be652af46
(Fcall_process): Extend BUFFER arg so it can specify
Richard M. Stallman <rms@gnu.org>
parents:
11513
diff
changeset
|
942 |
62982
d7793ac6df62
(Fcall_process): Don't use alloca to gradually
Kim F. Storm <storm@cua.dk>
parents:
60891
diff
changeset
|
943 #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
|
944 /* 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
|
945 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
|
946 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
|
947 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
|
948 bufsize = CALLPROC_BUFFER_SIZE_MAX; |
d7793ac6df62
(Fcall_process): Don't use alloca to gradually
Kim F. Storm <storm@cua.dk>
parents:
60891
diff
changeset
|
949 #endif |
11619
ff4be652af46
(Fcall_process): Extend BUFFER arg so it can specify
Richard M. Stallman <rms@gnu.org>
parents:
11513
diff
changeset
|
950 |
57473
fb60234070b0
(Fcall_process): Simplify handling of display arg.
Kim F. Storm <storm@cua.dk>
parents:
57290
diff
changeset
|
951 if (display_p) |
5251
480731ff8e9a
(Fcall_process): Call prepare_menu_bars.
Richard M. Stallman <rms@gnu.org>
parents:
5179
diff
changeset
|
952 { |
480731ff8e9a
(Fcall_process): Call prepare_menu_bars.
Richard M. Stallman <rms@gnu.org>
parents:
5179
diff
changeset
|
953 if (first) |
480731ff8e9a
(Fcall_process): Call prepare_menu_bars.
Richard M. Stallman <rms@gnu.org>
parents:
5179
diff
changeset
|
954 prepare_menu_bars (); |
480731ff8e9a
(Fcall_process): Call prepare_menu_bars.
Richard M. Stallman <rms@gnu.org>
parents:
5179
diff
changeset
|
955 first = 0; |
35336
002c02db42d3
Call redisplay_preserve_echo_area with additional arg.
Gerd Moellmann <gerd@gnu.org>
parents:
33285
diff
changeset
|
956 redisplay_preserve_echo_area (1); |
57473
fb60234070b0
(Fcall_process): Simplify handling of display arg.
Kim F. Storm <storm@cua.dk>
parents:
57290
diff
changeset
|
957 /* 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
|
958 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
|
959 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
|
960 display_on_the_fly = 1; |
5251
480731ff8e9a
(Fcall_process): Call prepare_menu_bars.
Richard M. Stallman <rms@gnu.org>
parents:
5179
diff
changeset
|
961 } |
296 | 962 immediate_quit = 1; |
963 QUIT; | |
964 } | |
11780
6ae23eecab6a
(Fcall_process): Keep reading till buffer is nearly full.
Richard M. Stallman <rms@gnu.org>
parents:
11619
diff
changeset
|
965 give_up: ; |
296 | 966 |
29287
5fb859bdf5bd
(Fcall_process): Fix previous change.
Kenichi Handa <handa@m17n.org>
parents:
29273
diff
changeset
|
967 if (!NILP (buffer) |
5fb859bdf5bd
(Fcall_process): Fix previous change.
Kenichi Handa <handa@m17n.org>
parents:
29273
diff
changeset
|
968 && process_coding.cmp_data) |
5fb859bdf5bd
(Fcall_process): Fix previous change.
Kenichi Handa <handa@m17n.org>
parents:
29273
diff
changeset
|
969 { |
5fb859bdf5bd
(Fcall_process): Fix previous change.
Kenichi Handa <handa@m17n.org>
parents:
29273
diff
changeset
|
970 coding_restore_composition (&process_coding, Fcurrent_buffer ()); |
5fb859bdf5bd
(Fcall_process): Fix previous change.
Kenichi Handa <handa@m17n.org>
parents:
29273
diff
changeset
|
971 coding_free_composition_data (&process_coding); |
5fb859bdf5bd
(Fcall_process): Fix previous change.
Kenichi Handa <handa@m17n.org>
parents:
29273
diff
changeset
|
972 } |
29273 | 973 |
30703
98dd8e9ba6ca
(Fcall_process): Terminate the unwind-protect around the
Kenichi Handa <handa@m17n.org>
parents:
30607
diff
changeset
|
974 { |
46293
1fb8f75062c6
Use macro SPECPDL_INDEX.
Juanma Barranquero <lekktu@gmail.com>
parents:
46260
diff
changeset
|
975 int post_read_count = SPECPDL_INDEX (); |
30703
98dd8e9ba6ca
(Fcall_process): Terminate the unwind-protect around the
Kenichi Handa <handa@m17n.org>
parents:
30607
diff
changeset
|
976 |
98dd8e9ba6ca
(Fcall_process): Terminate the unwind-protect around the
Kenichi Handa <handa@m17n.org>
parents:
30607
diff
changeset
|
977 record_unwind_protect (save_excursion_restore, save_excursion_save ()); |
98dd8e9ba6ca
(Fcall_process): Terminate the unwind-protect around the
Kenichi Handa <handa@m17n.org>
parents:
30607
diff
changeset
|
978 inserted = PT - pt_orig; |
98dd8e9ba6ca
(Fcall_process): Terminate the unwind-protect around the
Kenichi Handa <handa@m17n.org>
parents:
30607
diff
changeset
|
979 TEMP_SET_PT_BOTH (pt_orig, pt_byte_orig); |
98dd8e9ba6ca
(Fcall_process): Terminate the unwind-protect around the
Kenichi Handa <handa@m17n.org>
parents:
30607
diff
changeset
|
980 if (SYMBOLP (process_coding.post_read_conversion) |
98dd8e9ba6ca
(Fcall_process): Terminate the unwind-protect around the
Kenichi Handa <handa@m17n.org>
parents:
30607
diff
changeset
|
981 && !NILP (Ffboundp (process_coding.post_read_conversion))) |
98dd8e9ba6ca
(Fcall_process): Terminate the unwind-protect around the
Kenichi Handa <handa@m17n.org>
parents:
30607
diff
changeset
|
982 call1 (process_coding.post_read_conversion, make_number (inserted)); |
30579
13339fe0bdc0
(Fcall_process): Handle post-read-conversion of coding system if any.
Kenichi Handa <handa@m17n.org>
parents:
30530
diff
changeset
|
983 |
30703
98dd8e9ba6ca
(Fcall_process): Terminate the unwind-protect around the
Kenichi Handa <handa@m17n.org>
parents:
30607
diff
changeset
|
984 Vlast_coding_system_used = process_coding.symbol; |
20436
62b0709aac6d
(Fcall_process): Set Vlast_coding_system_used after
Kenichi Handa <handa@m17n.org>
parents:
20230
diff
changeset
|
985 |
30703
98dd8e9ba6ca
(Fcall_process): Terminate the unwind-protect around the
Kenichi Handa <handa@m17n.org>
parents:
30607
diff
changeset
|
986 /* If the caller required, let the buffer inherit the |
98dd8e9ba6ca
(Fcall_process): Terminate the unwind-protect around the
Kenichi Handa <handa@m17n.org>
parents:
30607
diff
changeset
|
987 coding-system used to decode the process output. */ |
98dd8e9ba6ca
(Fcall_process): Terminate the unwind-protect around the
Kenichi Handa <handa@m17n.org>
parents:
30607
diff
changeset
|
988 if (inherit_process_coding_system) |
98dd8e9ba6ca
(Fcall_process): Terminate the unwind-protect around the
Kenichi Handa <handa@m17n.org>
parents:
30607
diff
changeset
|
989 call1 (intern ("after-insert-file-set-buffer-file-coding-system"), |
98dd8e9ba6ca
(Fcall_process): Terminate the unwind-protect around the
Kenichi Handa <handa@m17n.org>
parents:
30607
diff
changeset
|
990 make_number (total_read)); |
98dd8e9ba6ca
(Fcall_process): Terminate the unwind-protect around the
Kenichi Handa <handa@m17n.org>
parents:
30607
diff
changeset
|
991 |
98dd8e9ba6ca
(Fcall_process): Terminate the unwind-protect around the
Kenichi Handa <handa@m17n.org>
parents:
30607
diff
changeset
|
992 unbind_to (post_read_count, Qnil); |
98dd8e9ba6ca
(Fcall_process): Terminate the unwind-protect around the
Kenichi Handa <handa@m17n.org>
parents:
30607
diff
changeset
|
993 } |
21572 | 994 } |
995 | |
296 | 996 /* Wait for it to terminate, unless it already has. */ |
997 wait_for_termination (pid); | |
998 | |
999 immediate_quit = 0; | |
1000 | |
1001 set_buffer_internal (old); | |
1002 | |
6275
132464faeaf4
Don't kill remaining processes if child exits.
Richard M. Stallman <rms@gnu.org>
parents:
6031
diff
changeset
|
1003 /* 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
|
1004 when exiting. */ |
132464faeaf4
Don't kill remaining processes if child exits.
Richard M. Stallman <rms@gnu.org>
parents:
6031
diff
changeset
|
1005 call_process_exited = 1; |
132464faeaf4
Don't kill remaining processes if child exits.
Richard M. Stallman <rms@gnu.org>
parents:
6031
diff
changeset
|
1006 |
296 | 1007 unbind_to (count, Qnil); |
1008 | |
53712
659b9b404c02
Define synch_process_termsig.
Jan Djärv <jan.h.d@swipnet.se>
parents:
52401
diff
changeset
|
1009 if (synch_process_termsig) |
659b9b404c02
Define synch_process_termsig.
Jan Djärv <jan.h.d@swipnet.se>
parents:
52401
diff
changeset
|
1010 { |
659b9b404c02
Define synch_process_termsig.
Jan Djärv <jan.h.d@swipnet.se>
parents:
52401
diff
changeset
|
1011 char *signame; |
659b9b404c02
Define synch_process_termsig.
Jan Djärv <jan.h.d@swipnet.se>
parents:
52401
diff
changeset
|
1012 |
659b9b404c02
Define synch_process_termsig.
Jan Djärv <jan.h.d@swipnet.se>
parents:
52401
diff
changeset
|
1013 synchronize_system_messages_locale (); |
659b9b404c02
Define synch_process_termsig.
Jan Djärv <jan.h.d@swipnet.se>
parents:
52401
diff
changeset
|
1014 signame = strsignal (synch_process_termsig); |
659b9b404c02
Define synch_process_termsig.
Jan Djärv <jan.h.d@swipnet.se>
parents:
52401
diff
changeset
|
1015 |
659b9b404c02
Define synch_process_termsig.
Jan Djärv <jan.h.d@swipnet.se>
parents:
52401
diff
changeset
|
1016 if (signame == 0) |
659b9b404c02
Define synch_process_termsig.
Jan Djärv <jan.h.d@swipnet.se>
parents:
52401
diff
changeset
|
1017 signame = "unknown"; |
659b9b404c02
Define synch_process_termsig.
Jan Djärv <jan.h.d@swipnet.se>
parents:
52401
diff
changeset
|
1018 |
659b9b404c02
Define synch_process_termsig.
Jan Djärv <jan.h.d@swipnet.se>
parents:
52401
diff
changeset
|
1019 synch_process_death = signame; |
659b9b404c02
Define synch_process_termsig.
Jan Djärv <jan.h.d@swipnet.se>
parents:
52401
diff
changeset
|
1020 } |
659b9b404c02
Define synch_process_termsig.
Jan Djärv <jan.h.d@swipnet.se>
parents:
52401
diff
changeset
|
1021 |
296 | 1022 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
|
1023 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
|
1024 Vlocale_coding_system, 0); |
296 | 1025 return make_number (synch_process_retcode); |
1026 } | |
1027 #endif | |
1028 | |
1912
f0d4fb2b9157
* callproc.c (delete_temp_file): Declare this to return
Jim Blandy <jimb@redhat.com>
parents:
1886
diff
changeset
|
1029 static Lisp_Object |
296 | 1030 delete_temp_file (name) |
1031 Lisp_Object name; | |
1032 { | |
67989
d7475f0d0bda
(delete_temp_file): Bind file-name-handler-alist to nil for the call
Ken Raeburn <raeburn@raeburn.org>
parents:
67967
diff
changeset
|
1033 /* 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
|
1034 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
|
1035 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
|
1036 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
|
1037 unbind_to (count, Qnil); |
29905
ca781f54ac48
(setpgrp): Undefine before defining.
Dave Love <fx@gnu.org>
parents:
29287
diff
changeset
|
1038 return Qnil; |
296 | 1039 } |
1040 | |
1041 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
|
1042 3, MANY, 0, |
6b389fb978bc
Change doc-string comments to `new style' [w/`doc:' keyword].
Pavel Janík <Pavel@Janik.cz>
parents:
39934
diff
changeset
|
1043 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
|
1044 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
|
1045 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
|
1046 |
6b389fb978bc
Change doc-string comments to `new style' [w/`doc:' keyword].
Pavel Janík <Pavel@Janik.cz>
parents:
39934
diff
changeset
|
1047 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
|
1048 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
|
1049 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
|
1050 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
|
1051 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
|
1052 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
|
1053 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
|
1054 |
6b389fb978bc
Change doc-string comments to `new style' [w/`doc:' keyword].
Pavel Janík <Pavel@Janik.cz>
parents:
39934
diff
changeset
|
1055 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
|
1056 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
|
1057 |
51070
54c727f3404e
(Fcall_process_region): Doc fix.
Richard M. Stallman <rms@gnu.org>
parents:
49600
diff
changeset
|
1058 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
|
1059 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
|
1060 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
|
1061 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
|
1062 |
c8af574bcf48
(Fcall_process_region, Fcall_process): Add usage: string to doc string.
Miles Bader <miles@gnu.org>
parents:
40103
diff
changeset
|
1063 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
|
1064 (nargs, args) |
296 | 1065 int nargs; |
1066 register Lisp_Object *args; | |
1067 { | |
8555
f1b1537ed3f6
(Fcall_process_region): gcpro filename_string.
Karl Heuer <kwzh@gnu.org>
parents:
7900
diff
changeset
|
1068 struct gcpro gcpro1; |
f1b1537ed3f6
(Fcall_process_region): gcpro filename_string.
Karl Heuer <kwzh@gnu.org>
parents:
7900
diff
changeset
|
1069 Lisp_Object filename_string; |
f1b1537ed3f6
(Fcall_process_region): gcpro filename_string.
Karl Heuer <kwzh@gnu.org>
parents:
7900
diff
changeset
|
1070 register Lisp_Object start, end; |
46293
1fb8f75062c6
Use macro SPECPDL_INDEX.
Juanma Barranquero <lekktu@gmail.com>
parents:
46260
diff
changeset
|
1071 int count = SPECPDL_INDEX (); |
18539
8c13c54d52c8
Call Ffind_operation_coding_system.
Kenichi Handa <handa@m17n.org>
parents:
18494
diff
changeset
|
1072 /* 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
|
1073 Lisp_Object coding_systems; |
17025
3c222a7edda1
Include charset.h and coding.h.
Karl Heuer <kwzh@gnu.org>
parents:
16659
diff
changeset
|
1074 Lisp_Object val, *args2; |
3c222a7edda1
Include charset.h and coding.h.
Karl Heuer <kwzh@gnu.org>
parents:
16659
diff
changeset
|
1075 int i; |
9786
7f4b72244919
(getenv_internal) [WINDOWSNT]: Use strnicmp, not bcmp.
Richard M. Stallman <rms@gnu.org>
parents:
9609
diff
changeset
|
1076 #ifdef DOS_NT |
5501
902cd7024cfa
(syms_of_callproc) [MSDOS]: New lisp variable: binary-process.
Richard M. Stallman <rms@gnu.org>
parents:
5348
diff
changeset
|
1077 char *tempfile; |
902cd7024cfa
(syms_of_callproc) [MSDOS]: New lisp variable: binary-process.
Richard M. Stallman <rms@gnu.org>
parents:
5348
diff
changeset
|
1078 char *outf = '\0'; |
902cd7024cfa
(syms_of_callproc) [MSDOS]: New lisp variable: binary-process.
Richard M. Stallman <rms@gnu.org>
parents:
5348
diff
changeset
|
1079 |
23462
aaad8461ff34
(Fcall_process): Use $TMPDIR instead of trying $TMP
Eli Zaretskii <eliz@gnu.org>
parents:
23079
diff
changeset
|
1080 if ((outf = egetenv ("TMPDIR")) |
aaad8461ff34
(Fcall_process): Use $TMPDIR instead of trying $TMP
Eli Zaretskii <eliz@gnu.org>
parents:
23079
diff
changeset
|
1081 || (outf = egetenv ("TMP")) |
aaad8461ff34
(Fcall_process): Use $TMPDIR instead of trying $TMP
Eli Zaretskii <eliz@gnu.org>
parents:
23079
diff
changeset
|
1082 || (outf = egetenv ("TEMP"))) |
5501
902cd7024cfa
(syms_of_callproc) [MSDOS]: New lisp variable: binary-process.
Richard M. Stallman <rms@gnu.org>
parents:
5348
diff
changeset
|
1083 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
|
1084 else |
902cd7024cfa
(syms_of_callproc) [MSDOS]: New lisp variable: binary-process.
Richard M. Stallman <rms@gnu.org>
parents:
5348
diff
changeset
|
1085 { |
902cd7024cfa
(syms_of_callproc) [MSDOS]: New lisp variable: binary-process.
Richard M. Stallman <rms@gnu.org>
parents:
5348
diff
changeset
|
1086 tempfile = alloca (20); |
902cd7024cfa
(syms_of_callproc) [MSDOS]: New lisp variable: binary-process.
Richard M. Stallman <rms@gnu.org>
parents:
5348
diff
changeset
|
1087 *tempfile = '\0'; |
902cd7024cfa
(syms_of_callproc) [MSDOS]: New lisp variable: binary-process.
Richard M. Stallman <rms@gnu.org>
parents:
5348
diff
changeset
|
1088 } |
12238
f442c22815b8
(call-process-region) [DOS_NT]: Use IS_DIRECTORY_SEP.
Richard M. Stallman <rms@gnu.org>
parents:
11780
diff
changeset
|
1089 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
|
1090 strcat (tempfile, "/"); |
15824
11517dc55f5b
(Fcall_process_region) [DOS_NT]: Avoid downcasing
Richard M. Stallman <rms@gnu.org>
parents:
15610
diff
changeset
|
1091 if ('/' == DIRECTORY_SEP) |
11517dc55f5b
(Fcall_process_region) [DOS_NT]: Avoid downcasing
Richard M. Stallman <rms@gnu.org>
parents:
15610
diff
changeset
|
1092 dostounix_filename (tempfile); |
11517dc55f5b
(Fcall_process_region) [DOS_NT]: Avoid downcasing
Richard M. Stallman <rms@gnu.org>
parents:
15610
diff
changeset
|
1093 else |
11517dc55f5b
(Fcall_process_region) [DOS_NT]: Avoid downcasing
Richard M. Stallman <rms@gnu.org>
parents:
15610
diff
changeset
|
1094 unixtodos_filename (tempfile); |
12238
f442c22815b8
(call-process-region) [DOS_NT]: Use IS_DIRECTORY_SEP.
Richard M. Stallman <rms@gnu.org>
parents:
11780
diff
changeset
|
1095 #ifdef WINDOWSNT |
f442c22815b8
(call-process-region) [DOS_NT]: Use IS_DIRECTORY_SEP.
Richard M. Stallman <rms@gnu.org>
parents:
11780
diff
changeset
|
1096 strcat (tempfile, "emXXXXXX"); |
f442c22815b8
(call-process-region) [DOS_NT]: Use IS_DIRECTORY_SEP.
Richard M. Stallman <rms@gnu.org>
parents:
11780
diff
changeset
|
1097 #else |
5501
902cd7024cfa
(syms_of_callproc) [MSDOS]: New lisp variable: binary-process.
Richard M. Stallman <rms@gnu.org>
parents:
5348
diff
changeset
|
1098 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
|
1099 #endif |
9786
7f4b72244919
(getenv_internal) [WINDOWSNT]: Use strnicmp, not bcmp.
Richard M. Stallman <rms@gnu.org>
parents:
9609
diff
changeset
|
1100 #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
|
1101 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
|
1102 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
|
1103 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
|
1104 #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
|
1105 |
24931
6ccce3af0d2a
(Fcall_process): Decide coding system for decoding
Richard M. Stallman <rms@gnu.org>
parents:
24920
diff
changeset
|
1106 coding_systems = Qt; |
6ccce3af0d2a
(Fcall_process): Decide coding system for decoding
Richard M. Stallman <rms@gnu.org>
parents:
24920
diff
changeset
|
1107 |
33285
91819a44456a
(Fcall_process_region): Use HAVE_MKSTEMP.
Dave Love <fx@gnu.org>
parents:
31100
diff
changeset
|
1108 #ifdef HAVE_MKSTEMP |
91819a44456a
(Fcall_process_region): Use HAVE_MKSTEMP.
Dave Love <fx@gnu.org>
parents:
31100
diff
changeset
|
1109 { |
75152
69fafc0d9959
(Fcall_process_region) [HAVE_MKSTEMP]: Add BLOCK_INPUT
YAMAMOTO Mitsuharu <mituharu@math.s.chiba-u.ac.jp>
parents:
74836
diff
changeset
|
1110 int fd; |
69fafc0d9959
(Fcall_process_region) [HAVE_MKSTEMP]: Add BLOCK_INPUT
YAMAMOTO Mitsuharu <mituharu@math.s.chiba-u.ac.jp>
parents:
74836
diff
changeset
|
1111 |
69fafc0d9959
(Fcall_process_region) [HAVE_MKSTEMP]: Add BLOCK_INPUT
YAMAMOTO Mitsuharu <mituharu@math.s.chiba-u.ac.jp>
parents:
74836
diff
changeset
|
1112 BLOCK_INPUT; |
69fafc0d9959
(Fcall_process_region) [HAVE_MKSTEMP]: Add BLOCK_INPUT
YAMAMOTO Mitsuharu <mituharu@math.s.chiba-u.ac.jp>
parents:
74836
diff
changeset
|
1113 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
|
1114 UNBLOCK_INPUT; |
33285
91819a44456a
(Fcall_process_region): Use HAVE_MKSTEMP.
Dave Love <fx@gnu.org>
parents:
31100
diff
changeset
|
1115 if (fd == -1) |
91819a44456a
(Fcall_process_region): Use HAVE_MKSTEMP.
Dave Love <fx@gnu.org>
parents:
31100
diff
changeset
|
1116 report_file_error ("Failed to open temporary file", |
91819a44456a
(Fcall_process_region): Use HAVE_MKSTEMP.
Dave Love <fx@gnu.org>
parents:
31100
diff
changeset
|
1117 Fcons (Vtemp_file_name_pattern, Qnil)); |
91819a44456a
(Fcall_process_region): Use HAVE_MKSTEMP.
Dave Love <fx@gnu.org>
parents:
31100
diff
changeset
|
1118 else |
91819a44456a
(Fcall_process_region): Use HAVE_MKSTEMP.
Dave Love <fx@gnu.org>
parents:
31100
diff
changeset
|
1119 close (fd); |
91819a44456a
(Fcall_process_region): Use HAVE_MKSTEMP.
Dave Love <fx@gnu.org>
parents:
31100
diff
changeset
|
1120 } |
91819a44456a
(Fcall_process_region): Use HAVE_MKSTEMP.
Dave Love <fx@gnu.org>
parents:
31100
diff
changeset
|
1121 #else |
296 | 1122 mktemp (tempfile); |
33285
91819a44456a
(Fcall_process_region): Use HAVE_MKSTEMP.
Dave Love <fx@gnu.org>
parents:
31100
diff
changeset
|
1123 #endif |
296 | 1124 |
1125 filename_string = build_string (tempfile); | |
8555
f1b1537ed3f6
(Fcall_process_region): gcpro filename_string.
Karl Heuer <kwzh@gnu.org>
parents:
7900
diff
changeset
|
1126 GCPRO1 (filename_string); |
296 | 1127 start = args[0]; |
1128 end = args[1]; | |
17025
3c222a7edda1
Include charset.h and coding.h.
Karl Heuer <kwzh@gnu.org>
parents:
16659
diff
changeset
|
1129 /* 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
|
1130 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
|
1131 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
|
1132 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
|
1133 val = Qnil; |
3c222a7edda1
Include charset.h and coding.h.
Karl Heuer <kwzh@gnu.org>
parents:
16659
diff
changeset
|
1134 else |
18651
982814f78d0d
(Fcall_process): If enable-multibyte-characters is
Kenichi Handa <handa@m17n.org>
parents:
18539
diff
changeset
|
1135 { |
19730
1657f4dd8c05
(Fcall_process): Set EOL conversion type to LF when
Richard M. Stallman <rms@gnu.org>
parents:
19580
diff
changeset
|
1136 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
|
1137 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
|
1138 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
|
1139 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
|
1140 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
|
1141 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
|
1142 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
|
1143 val = XCDR (Vdefault_process_coding_system); |
18651
982814f78d0d
(Fcall_process): If enable-multibyte-characters is
Kenichi Handa <handa@m17n.org>
parents:
18539
diff
changeset
|
1144 else |
19730
1657f4dd8c05
(Fcall_process): Set EOL conversion type to LF when
Richard M. Stallman <rms@gnu.org>
parents:
19580
diff
changeset
|
1145 val = Qnil; |
18651
982814f78d0d
(Fcall_process): If enable-multibyte-characters is
Kenichi Handa <handa@m17n.org>
parents:
18539
diff
changeset
|
1146 } |
19730
1657f4dd8c05
(Fcall_process): Set EOL conversion type to LF when
Richard M. Stallman <rms@gnu.org>
parents:
19580
diff
changeset
|
1147 |
21626
ad899130056e
(Fcall_process_region): Unbind coding-system-for-write
Richard M. Stallman <rms@gnu.org>
parents:
21572
diff
changeset
|
1148 { |
46293
1fb8f75062c6
Use macro SPECPDL_INDEX.
Juanma Barranquero <lekktu@gmail.com>
parents:
46260
diff
changeset
|
1149 int count1 = SPECPDL_INDEX (); |
21626
ad899130056e
(Fcall_process_region): Unbind coding-system-for-write
Richard M. Stallman <rms@gnu.org>
parents:
21572
diff
changeset
|
1150 |
ad899130056e
(Fcall_process_region): Unbind coding-system-for-write
Richard M. Stallman <rms@gnu.org>
parents:
21572
diff
changeset
|
1151 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
|
1152 /* 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
|
1153 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
|
1154 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
|
1155 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
|
1156 |
ad899130056e
(Fcall_process_region): Unbind coding-system-for-write
Richard M. Stallman <rms@gnu.org>
parents:
21572
diff
changeset
|
1157 unbind_to (count1, Qnil); |
ad899130056e
(Fcall_process_region): Unbind coding-system-for-write
Richard M. Stallman <rms@gnu.org>
parents:
21572
diff
changeset
|
1158 } |
17025
3c222a7edda1
Include charset.h and coding.h.
Karl Heuer <kwzh@gnu.org>
parents:
16659
diff
changeset
|
1159 |
49600
23a1cea22d13
Trailing whitespace deleted.
Juanma Barranquero <lekktu@gmail.com>
parents:
47018
diff
changeset
|
1160 /* 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
|
1161 coding-system-for-read. */ |
7397
e0ffa47f2ed4
[MSDOS]: Rename Vbinary_process to Vbinary_process_output.
Richard M. Stallman <rms@gnu.org>
parents:
7161
diff
changeset
|
1162 |
296 | 1163 record_unwind_protect (delete_temp_file, filename_string); |
1164 | |
23885 | 1165 if (nargs > 3 && !NILP (args[3])) |
296 | 1166 Fdelete_region (start, end); |
1167 | |
23885 | 1168 if (nargs > 3) |
1169 { | |
1170 args += 2; | |
1171 nargs -= 2; | |
1172 } | |
1173 else | |
1174 { | |
1175 args[0] = args[2]; | |
1176 nargs = 2; | |
1177 } | |
1178 args[1] = filename_string; | |
296 | 1179 |
23885 | 1180 RETURN_UNGCPRO (unbind_to (count, Fcall_process (nargs, args))); |
296 | 1181 } |
1182 | |
1183 #ifndef VMS /* VMS version is in vmsproc.c. */ | |
1184 | |
21514 | 1185 static int relocate_fd (); |
1186 | |
83425
c82829d08b89
Fix semantics of let-binding `process-environment'.
Karoly Lorentey <lorentey@elte.hu>
parents:
83422
diff
changeset
|
1187 static char ** |
c82829d08b89
Fix semantics of let-binding `process-environment'.
Karoly Lorentey <lorentey@elte.hu>
parents:
83422
diff
changeset
|
1188 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
|
1189 { |
c82829d08b89
Fix semantics of let-binding `process-environment'.
Karoly Lorentey <lorentey@elte.hu>
parents:
83422
diff
changeset
|
1190 char **ep; |
c82829d08b89
Fix semantics of let-binding `process-environment'.
Karoly Lorentey <lorentey@elte.hu>
parents:
83422
diff
changeset
|
1191 int ok = 1; |
c82829d08b89
Fix semantics of let-binding `process-environment'.
Karoly Lorentey <lorentey@elte.hu>
parents:
83422
diff
changeset
|
1192 if (string == NULL) |
c82829d08b89
Fix semantics of let-binding `process-environment'.
Karoly Lorentey <lorentey@elte.hu>
parents:
83422
diff
changeset
|
1193 return new_env; |
c82829d08b89
Fix semantics of let-binding `process-environment'.
Karoly Lorentey <lorentey@elte.hu>
parents:
83422
diff
changeset
|
1194 |
c82829d08b89
Fix semantics of let-binding `process-environment'.
Karoly Lorentey <lorentey@elte.hu>
parents:
83422
diff
changeset
|
1195 /* 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
|
1196 If so, don't put it in. |
c82829d08b89
Fix semantics of let-binding `process-environment'.
Karoly Lorentey <lorentey@elte.hu>
parents:
83422
diff
changeset
|
1197 When an env var has multiple definitions, |
c82829d08b89
Fix semantics of let-binding `process-environment'.
Karoly Lorentey <lorentey@elte.hu>
parents:
83422
diff
changeset
|
1198 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
|
1199 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
|
1200 { |
c82829d08b89
Fix semantics of let-binding `process-environment'.
Karoly Lorentey <lorentey@elte.hu>
parents:
83422
diff
changeset
|
1201 char *p = *ep, *q = string; |
c82829d08b89
Fix semantics of let-binding `process-environment'.
Karoly Lorentey <lorentey@elte.hu>
parents:
83422
diff
changeset
|
1202 while (ok) |
c82829d08b89
Fix semantics of let-binding `process-environment'.
Karoly Lorentey <lorentey@elte.hu>
parents:
83422
diff
changeset
|
1203 { |
c82829d08b89
Fix semantics of let-binding `process-environment'.
Karoly Lorentey <lorentey@elte.hu>
parents:
83422
diff
changeset
|
1204 if (*q != *p) |
c82829d08b89
Fix semantics of let-binding `process-environment'.
Karoly Lorentey <lorentey@elte.hu>
parents:
83422
diff
changeset
|
1205 break; |
c82829d08b89
Fix semantics of let-binding `process-environment'.
Karoly Lorentey <lorentey@elte.hu>
parents:
83422
diff
changeset
|
1206 if (*q == 0) |
c82829d08b89
Fix semantics of let-binding `process-environment'.
Karoly Lorentey <lorentey@elte.hu>
parents:
83422
diff
changeset
|
1207 /* 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
|
1208 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
|
1209 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
|
1210 break; |
c82829d08b89
Fix semantics of let-binding `process-environment'.
Karoly Lorentey <lorentey@elte.hu>
parents:
83422
diff
changeset
|
1211 if (*q == '=') |
c82829d08b89
Fix semantics of let-binding `process-environment'.
Karoly Lorentey <lorentey@elte.hu>
parents:
83422
diff
changeset
|
1212 ok = 0; |
c82829d08b89
Fix semantics of let-binding `process-environment'.
Karoly Lorentey <lorentey@elte.hu>
parents:
83422
diff
changeset
|
1213 p++, q++; |
c82829d08b89
Fix semantics of let-binding `process-environment'.
Karoly Lorentey <lorentey@elte.hu>
parents:
83422
diff
changeset
|
1214 } |
c82829d08b89
Fix semantics of let-binding `process-environment'.
Karoly Lorentey <lorentey@elte.hu>
parents:
83422
diff
changeset
|
1215 } |
c82829d08b89
Fix semantics of let-binding `process-environment'.
Karoly Lorentey <lorentey@elte.hu>
parents:
83422
diff
changeset
|
1216 if (ok) |
c82829d08b89
Fix semantics of let-binding `process-environment'.
Karoly Lorentey <lorentey@elte.hu>
parents:
83422
diff
changeset
|
1217 *new_env++ = string; |
c82829d08b89
Fix semantics of let-binding `process-environment'.
Karoly Lorentey <lorentey@elte.hu>
parents:
83422
diff
changeset
|
1218 return new_env; |
c82829d08b89
Fix semantics of let-binding `process-environment'.
Karoly Lorentey <lorentey@elte.hu>
parents:
83422
diff
changeset
|
1219 } |
c82829d08b89
Fix semantics of let-binding `process-environment'.
Karoly Lorentey <lorentey@elte.hu>
parents:
83422
diff
changeset
|
1220 |
296 | 1221 /* This is the last thing run in a newly forked inferior |
1222 either synchronous or asynchronous. | |
1223 Copy descriptors IN, OUT and ERR as descriptors 0, 1 and 2. | |
1224 Initialize inferior's priority, pgrp, connected dir and environment. | |
1225 then exec another program based on new_argv. | |
1226 | |
1227 This function may change environ for the superior process. | |
1228 Therefore, the superior process must save and restore the value | |
1229 of environ around the vfork and the call to this function. | |
1230 | |
1231 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
|
1232 process group. |
296 | 1233 |
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
|
1234 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
|
1235 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
|
1236 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
|
1237 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
|
1238 |
21514 | 1239 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
|
1240 child_setup (in, out, err, new_argv, set_pgrp, current_dir) |
296 | 1241 int in, out, err; |
1242 register char **new_argv; | |
1243 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
|
1244 Lisp_Object current_dir; |
296 | 1245 { |
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
|
1246 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
|
1247 char *pwd_var; |
9786
7f4b72244919
(getenv_internal) [WINDOWSNT]: Use strnicmp, not bcmp.
Richard M. Stallman <rms@gnu.org>
parents:
9609
diff
changeset
|
1248 #ifdef WINDOWSNT |
7f4b72244919
(getenv_internal) [WINDOWSNT]: Use strnicmp, not bcmp.
Richard M. Stallman <rms@gnu.org>
parents:
9609
diff
changeset
|
1249 int cpid; |
15087
46157341f721
(Fcall_process) [WINDOWSNT]: Remove conditional NT code.
Richard M. Stallman <rms@gnu.org>
parents:
14872
diff
changeset
|
1250 HANDLE handles[3]; |
9786
7f4b72244919
(getenv_internal) [WINDOWSNT]: Use strnicmp, not bcmp.
Richard M. Stallman <rms@gnu.org>
parents:
9609
diff
changeset
|
1251 #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
|
1252 |
5530
7ff479a8e8bf
(child_setup): Don't declare PID `register'; we later take its address.
Roland McGrath <roland@gnu.org>
parents:
5516
diff
changeset
|
1253 int pid = getpid (); |
296 | 1254 |
7481
b7d23c08750c
(child_setup): PRIO_PROCESS renamed to SET_EMACS_PRIORITY.
Richard M. Stallman <rms@gnu.org>
parents:
7465
diff
changeset
|
1255 #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
|
1256 { |
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
|
1257 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
|
1258 |
7481
b7d23c08750c
(child_setup): PRIO_PROCESS renamed to SET_EMACS_PRIORITY.
Richard M. Stallman <rms@gnu.org>
parents:
7465
diff
changeset
|
1259 if (emacs_priority < 0) |
b7d23c08750c
(child_setup): PRIO_PROCESS renamed to SET_EMACS_PRIORITY.
Richard M. Stallman <rms@gnu.org>
parents:
7465
diff
changeset
|
1260 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
|
1261 } |
7161
67618cd7bdbf
(child_setup): Test PRIO_PROCESS, as in sys_subshell.
Richard M. Stallman <rms@gnu.org>
parents:
7000
diff
changeset
|
1262 #endif |
296 | 1263 |
1264 #ifdef subprocesses | |
1265 /* Close Emacs's descriptors that this process should not have. */ | |
1266 close_process_descs (); | |
1267 #endif | |
21694
6e12eeda6913
(Fcall_process) [MSDOS]: Call child_setup instead of run_msdos_command.
Eli Zaretskii <eliz@gnu.org>
parents:
21626
diff
changeset
|
1268 /* 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
|
1269 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
|
1270 #ifndef DOS_NT |
5569
b9e2884ca8e6
(child_setup): Call close_load_descs.
Richard M. Stallman <rms@gnu.org>
parents:
5530
diff
changeset
|
1271 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
|
1272 #endif |
296 | 1273 |
1274 /* Note that use of alloca is always safe here. It's obvious for systems | |
1275 that do not have true vfork or that have true (stack) alloca. | |
1276 If using vfork and C_ALLOCA it is safe because that changes | |
1277 the superior's static variables as if the superior had done alloca | |
1278 and will be 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
|
1279 { |
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
|
1280 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
|
1281 register int i; |
296 | 1282 |
46370
40db0673e6f0
Most uses of XSTRING combined with STRING_BYTES or indirection changed to
Ken Raeburn <raeburn@raeburn.org>
parents:
46293
diff
changeset
|
1283 i = SBYTES (current_dir); |
30530
861a1460eba6
(child_setup) [MSDOS]: malloc pwd_var instead of
Eli Zaretskii <eliz@gnu.org>
parents:
29905
diff
changeset
|
1284 #ifdef MSDOS |
861a1460eba6
(child_setup) [MSDOS]: malloc pwd_var instead of
Eli Zaretskii <eliz@gnu.org>
parents:
29905
diff
changeset
|
1285 /* 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
|
1286 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
|
1287 on that. */ |
861a1460eba6
(child_setup) [MSDOS]: malloc pwd_var instead of
Eli Zaretskii <eliz@gnu.org>
parents:
29905
diff
changeset
|
1288 pwd_var = (char *) xmalloc (i + 6); |
861a1460eba6
(child_setup) [MSDOS]: malloc pwd_var instead of
Eli Zaretskii <eliz@gnu.org>
parents:
29905
diff
changeset
|
1289 #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
|
1290 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
|
1291 #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
|
1292 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
|
1293 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
|
1294 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
|
1295 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
|
1296 temp[i] = 0; |
538 | 1297 |
21694
6e12eeda6913
(Fcall_process) [MSDOS]: Call child_setup instead of run_msdos_command.
Eli Zaretskii <eliz@gnu.org>
parents:
21626
diff
changeset
|
1298 #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
|
1299 /* 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
|
1300 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
|
1301 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
|
1302 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
|
1303 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
|
1304 if (chdir (temp) < 0) |
9609
74985a8972e4
(child_setup): Always use _exit.
Richard M. Stallman <rms@gnu.org>
parents:
9138
diff
changeset
|
1305 _exit (errno); |
19967
685d256c8cb5
(child_setup) [WINDOWSNT]: Change directory of
Geoff Voelker <voelker@cs.washington.edu>
parents:
19838
diff
changeset
|
1306 #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
|
1307 |
21694
6e12eeda6913
(Fcall_process) [MSDOS]: Call child_setup instead of run_msdos_command.
Eli Zaretskii <eliz@gnu.org>
parents:
21626
diff
changeset
|
1308 #ifdef DOS_NT |
6e12eeda6913
(Fcall_process) [MSDOS]: Call child_setup instead of run_msdos_command.
Eli Zaretskii <eliz@gnu.org>
parents:
21626
diff
changeset
|
1309 /* 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
|
1310 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
|
1311 { |
6e12eeda6913
(Fcall_process) [MSDOS]: Call child_setup instead of run_msdos_command.
Eli Zaretskii <eliz@gnu.org>
parents:
21626
diff
changeset
|
1312 temp += 2; |
6e12eeda6913
(Fcall_process) [MSDOS]: Call child_setup instead of run_msdos_command.
Eli Zaretskii <eliz@gnu.org>
parents:
21626
diff
changeset
|
1313 i -= 2; |
6e12eeda6913
(Fcall_process) [MSDOS]: Call child_setup instead of run_msdos_command.
Eli Zaretskii <eliz@gnu.org>
parents:
21626
diff
changeset
|
1314 } |
6e12eeda6913
(Fcall_process) [MSDOS]: Call child_setup instead of run_msdos_command.
Eli Zaretskii <eliz@gnu.org>
parents:
21626
diff
changeset
|
1315 #endif |
6e12eeda6913
(Fcall_process) [MSDOS]: Call child_setup instead of run_msdos_command.
Eli Zaretskii <eliz@gnu.org>
parents:
21626
diff
changeset
|
1316 |
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
|
1317 /* 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
|
1318 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
|
1319 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
|
1320 } |
296 | 1321 |
83425
c82829d08b89
Fix semantics of let-binding `process-environment'.
Karoly Lorentey <lorentey@elte.hu>
parents:
83422
diff
changeset
|
1322 /* Set `env' to a vector of the strings in the environment. */ |
296 | 1323 { |
1324 register Lisp_Object tem; | |
1325 register char **new_env; | |
83425
c82829d08b89
Fix semantics of let-binding `process-environment'.
Karoly Lorentey <lorentey@elte.hu>
parents:
83422
diff
changeset
|
1326 char **p, **q; |
296 | 1327 register int new_length; |
83640
2aee92eacdab
* server.el (server-process-filter): Likewise.
Dan Nicolaescu <dann@ics.uci.edu>
parents:
83556
diff
changeset
|
1328 Lisp_Object local = selected_frame; /* get_frame_param (XFRAME (Fframe_with_environment (selected_frame)), */ |
2aee92eacdab
* server.el (server-process-filter): Likewise.
Dan Nicolaescu <dann@ics.uci.edu>
parents:
83556
diff
changeset
|
1329 /* Qenvironment); */ |
296 | 1330 |
83640
2aee92eacdab
* server.el (server-process-filter): Likewise.
Dan Nicolaescu <dann@ics.uci.edu>
parents:
83556
diff
changeset
|
1331 Lisp_Object display; |
2aee92eacdab
* server.el (server-process-filter): Likewise.
Dan Nicolaescu <dann@ics.uci.edu>
parents:
83556
diff
changeset
|
1332 |
296 | 1333 new_length = 0; |
83421
bb2edc915032
Implement automatic terminal-local environment variables via `local-environment-variables'.
Karoly Lorentey <lorentey@elte.hu>
parents:
64770
diff
changeset
|
1334 |
296 | 1335 for (tem = Vprocess_environment; |
83425
c82829d08b89
Fix semantics of let-binding `process-environment'.
Karoly Lorentey <lorentey@elte.hu>
parents:
83422
diff
changeset
|
1336 CONSP (tem) && STRINGP (XCAR (tem)); |
c82829d08b89
Fix semantics of let-binding `process-environment'.
Karoly Lorentey <lorentey@elte.hu>
parents:
83422
diff
changeset
|
1337 tem = XCDR (tem)) |
c82829d08b89
Fix semantics of let-binding `process-environment'.
Karoly Lorentey <lorentey@elte.hu>
parents:
83422
diff
changeset
|
1338 new_length++; |
c82829d08b89
Fix semantics of let-binding `process-environment'.
Karoly Lorentey <lorentey@elte.hu>
parents:
83422
diff
changeset
|
1339 |
83640
2aee92eacdab
* server.el (server-process-filter): Likewise.
Dan Nicolaescu <dann@ics.uci.edu>
parents:
83556
diff
changeset
|
1340 #if 0 |
83529
0d9e16eab053
Rework environment variable support. (Reported by Kalle Olavi Niemitalo and Noah Friedman.)
Karoly Lorentey <lorentey@elte.hu>
parents:
83518
diff
changeset
|
1341 for (tem = local; |
25645
a14111a2a100
Use XCAR, XCDR, XFLOAT_DATA instead of explicit member access.
Ken Raeburn <raeburn@raeburn.org>
parents:
25522
diff
changeset
|
1342 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
|
1343 tem = XCDR (tem)) |
296 | 1344 new_length++; |
83640
2aee92eacdab
* server.el (server-process-filter): Likewise.
Dan Nicolaescu <dann@ics.uci.edu>
parents:
83556
diff
changeset
|
1345 #endif |
2aee92eacdab
* server.el (server-process-filter): Likewise.
Dan Nicolaescu <dann@ics.uci.edu>
parents:
83556
diff
changeset
|
1346 |
83796
e7303426ed25
(Vinitial_environment): New variable.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
83652
diff
changeset
|
1347 /* Add DISPLAY from the frame local values. */ |
83640
2aee92eacdab
* server.el (server-process-filter): Likewise.
Dan Nicolaescu <dann@ics.uci.edu>
parents:
83556
diff
changeset
|
1348 display = get_frame_param (XFRAME (local), Qdisplay_environment_variable); |
2aee92eacdab
* server.el (server-process-filter): Likewise.
Dan Nicolaescu <dann@ics.uci.edu>
parents:
83556
diff
changeset
|
1349 if (! NILP (display)) |
2aee92eacdab
* server.el (server-process-filter): Likewise.
Dan Nicolaescu <dann@ics.uci.edu>
parents:
83556
diff
changeset
|
1350 new_length++; |
296 | 1351 |
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
|
1352 /* 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
|
1353 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
|
1354 /* 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
|
1355 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
|
1356 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
|
1357 *new_env++ = pwd_var; |
83425
c82829d08b89
Fix semantics of let-binding `process-environment'.
Karoly Lorentey <lorentey@elte.hu>
parents:
83422
diff
changeset
|
1358 |
83796
e7303426ed25
(Vinitial_environment): New variable.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
83652
diff
changeset
|
1359 if (STRINGP (display)) |
83640
2aee92eacdab
* server.el (server-process-filter): Likewise.
Dan Nicolaescu <dann@ics.uci.edu>
parents:
83556
diff
changeset
|
1360 { |
2aee92eacdab
* server.el (server-process-filter): Likewise.
Dan Nicolaescu <dann@ics.uci.edu>
parents:
83556
diff
changeset
|
1361 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
|
1362 char *vdata = (char *) alloca (vlen); |
2aee92eacdab
* server.el (server-process-filter): Likewise.
Dan Nicolaescu <dann@ics.uci.edu>
parents:
83556
diff
changeset
|
1363 strcpy (vdata, "DISPLAY="); |
2aee92eacdab
* server.el (server-process-filter): Likewise.
Dan Nicolaescu <dann@ics.uci.edu>
parents:
83556
diff
changeset
|
1364 strcat (vdata, SDATA (display)); |
2aee92eacdab
* server.el (server-process-filter): Likewise.
Dan Nicolaescu <dann@ics.uci.edu>
parents:
83556
diff
changeset
|
1365 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
|
1366 } |
2aee92eacdab
* server.el (server-process-filter): Likewise.
Dan Nicolaescu <dann@ics.uci.edu>
parents:
83556
diff
changeset
|
1367 |
83425
c82829d08b89
Fix semantics of let-binding `process-environment'.
Karoly Lorentey <lorentey@elte.hu>
parents:
83422
diff
changeset
|
1368 /* Overrides. */ |
296 | 1369 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
|
1370 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
|
1371 tem = XCDR (tem)) |
2757
a3ee51f30431
(child_setup): Omit duplicates from new env array.
Richard M. Stallman <rms@gnu.org>
parents:
2509
diff
changeset
|
1372 { |
83796
e7303426ed25
(Vinitial_environment): New variable.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
83652
diff
changeset
|
1373 if (strcmp (SDATA (XCAR (tem)), "DISPLAY") != 0) |
83640
2aee92eacdab
* server.el (server-process-filter): Likewise.
Dan Nicolaescu <dann@ics.uci.edu>
parents:
83556
diff
changeset
|
1374 new_env = add_env (env, new_env, SDATA (XCAR (tem))); |
2757
a3ee51f30431
(child_setup): Omit duplicates from new env array.
Richard M. Stallman <rms@gnu.org>
parents:
2509
diff
changeset
|
1375 } |
296 | 1376 |
83640
2aee92eacdab
* server.el (server-process-filter): Likewise.
Dan Nicolaescu <dann@ics.uci.edu>
parents:
83556
diff
changeset
|
1377 |
2aee92eacdab
* server.el (server-process-filter): Likewise.
Dan Nicolaescu <dann@ics.uci.edu>
parents:
83556
diff
changeset
|
1378 #if 0 |
83529
0d9e16eab053
Rework environment variable support. (Reported by Kalle Olavi Niemitalo and Noah Friedman.)
Karoly Lorentey <lorentey@elte.hu>
parents:
83518
diff
changeset
|
1379 /* Local part of environment. */ |
0d9e16eab053
Rework environment variable support. (Reported by Kalle Olavi Niemitalo and Noah Friedman.)
Karoly Lorentey <lorentey@elte.hu>
parents:
83518
diff
changeset
|
1380 for (tem = local; |
83421
bb2edc915032
Implement automatic terminal-local environment variables via `local-environment-variables'.
Karoly Lorentey <lorentey@elte.hu>
parents:
64770
diff
changeset
|
1381 CONSP (tem) && STRINGP (XCAR (tem)); |
bb2edc915032
Implement automatic terminal-local environment variables via `local-environment-variables'.
Karoly Lorentey <lorentey@elte.hu>
parents:
64770
diff
changeset
|
1382 tem = XCDR (tem)) |
83425
c82829d08b89
Fix semantics of let-binding `process-environment'.
Karoly Lorentey <lorentey@elte.hu>
parents:
83422
diff
changeset
|
1383 new_env = add_env (env, new_env, SDATA (XCAR (tem))); |
83640
2aee92eacdab
* server.el (server-process-filter): Likewise.
Dan Nicolaescu <dann@ics.uci.edu>
parents:
83556
diff
changeset
|
1384 #endif |
2aee92eacdab
* server.el (server-process-filter): Likewise.
Dan Nicolaescu <dann@ics.uci.edu>
parents:
83556
diff
changeset
|
1385 |
296 | 1386 *new_env = 0; |
83425
c82829d08b89
Fix semantics of let-binding `process-environment'.
Karoly Lorentey <lorentey@elte.hu>
parents:
83422
diff
changeset
|
1387 |
c82829d08b89
Fix semantics of let-binding `process-environment'.
Karoly Lorentey <lorentey@elte.hu>
parents:
83422
diff
changeset
|
1388 /* Remove variable names without values. */ |
c82829d08b89
Fix semantics of let-binding `process-environment'.
Karoly Lorentey <lorentey@elte.hu>
parents:
83422
diff
changeset
|
1389 p = q = env; |
c82829d08b89
Fix semantics of let-binding `process-environment'.
Karoly Lorentey <lorentey@elte.hu>
parents:
83422
diff
changeset
|
1390 while (*p != 0) |
2757
a3ee51f30431
(child_setup): Omit duplicates from new env array.
Richard M. Stallman <rms@gnu.org>
parents:
2509
diff
changeset
|
1391 { |
83425
c82829d08b89
Fix semantics of let-binding `process-environment'.
Karoly Lorentey <lorentey@elte.hu>
parents:
83422
diff
changeset
|
1392 while (*q != 0 && strchr (*q, '=') == NULL) |
c82829d08b89
Fix semantics of let-binding `process-environment'.
Karoly Lorentey <lorentey@elte.hu>
parents:
83422
diff
changeset
|
1393 *q++; |
c82829d08b89
Fix semantics of let-binding `process-environment'.
Karoly Lorentey <lorentey@elte.hu>
parents:
83422
diff
changeset
|
1394 *p = *q++; |
c82829d08b89
Fix semantics of let-binding `process-environment'.
Karoly Lorentey <lorentey@elte.hu>
parents:
83422
diff
changeset
|
1395 if (*p != 0) |
c82829d08b89
Fix semantics of let-binding `process-environment'.
Karoly Lorentey <lorentey@elte.hu>
parents:
83422
diff
changeset
|
1396 p++; |
2757
a3ee51f30431
(child_setup): Omit duplicates from new env array.
Richard M. Stallman <rms@gnu.org>
parents:
2509
diff
changeset
|
1397 } |
296 | 1398 } |
83640
2aee92eacdab
* server.el (server-process-filter): Likewise.
Dan Nicolaescu <dann@ics.uci.edu>
parents:
83556
diff
changeset
|
1399 |
2aee92eacdab
* server.el (server-process-filter): Likewise.
Dan Nicolaescu <dann@ics.uci.edu>
parents:
83556
diff
changeset
|
1400 |
9786
7f4b72244919
(getenv_internal) [WINDOWSNT]: Use strnicmp, not bcmp.
Richard M. Stallman <rms@gnu.org>
parents:
9609
diff
changeset
|
1401 #ifdef WINDOWSNT |
7f4b72244919
(getenv_internal) [WINDOWSNT]: Use strnicmp, not bcmp.
Richard M. Stallman <rms@gnu.org>
parents:
9609
diff
changeset
|
1402 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
|
1403 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
|
1404 #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
|
1405 /* 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
|
1406 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
|
1407 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
|
1408 happen under X. */ |
12430
14792ea851f9
(child_setup): Don't get confused if in == err.
Richard M. Stallman <rms@gnu.org>
parents:
12238
diff
changeset
|
1409 { |
14792ea851f9
(child_setup): Don't get confused if in == err.
Richard M. Stallman <rms@gnu.org>
parents:
12238
diff
changeset
|
1410 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
|
1411 |
14792ea851f9
(child_setup): Don't get confused if in == err.
Richard M. Stallman <rms@gnu.org>
parents:
12238
diff
changeset
|
1412 /* 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
|
1413 |
14792ea851f9
(child_setup): Don't get confused if in == err.
Richard M. Stallman <rms@gnu.org>
parents:
12238
diff
changeset
|
1414 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
|
1415 |
14792ea851f9
(child_setup): Don't get confused if in == err.
Richard M. Stallman <rms@gnu.org>
parents:
12238
diff
changeset
|
1416 if (out == oin) |
14792ea851f9
(child_setup): Don't get confused if in == err.
Richard M. Stallman <rms@gnu.org>
parents:
12238
diff
changeset
|
1417 out = in; |
14792ea851f9
(child_setup): Don't get confused if in == err.
Richard M. Stallman <rms@gnu.org>
parents:
12238
diff
changeset
|
1418 else |
6614
e095c5efe2e0
(child_setup): Check out==err when relocating fds.
Karl Heuer <kwzh@gnu.org>
parents:
6495
diff
changeset
|
1419 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
|
1420 |
14792ea851f9
(child_setup): Don't get confused if in == err.
Richard M. Stallman <rms@gnu.org>
parents:
12238
diff
changeset
|
1421 if (err == oin) |
14792ea851f9
(child_setup): Don't get confused if in == err.
Richard M. Stallman <rms@gnu.org>
parents:
12238
diff
changeset
|
1422 err = in; |
14792ea851f9
(child_setup): Don't get confused if in == err.
Richard M. Stallman <rms@gnu.org>
parents:
12238
diff
changeset
|
1423 else if (err == oout) |
14792ea851f9
(child_setup): Don't get confused if in == err.
Richard M. Stallman <rms@gnu.org>
parents:
12238
diff
changeset
|
1424 err = out; |
14792ea851f9
(child_setup): Don't get confused if in == err.
Richard M. Stallman <rms@gnu.org>
parents:
12238
diff
changeset
|
1425 else |
6614
e095c5efe2e0
(child_setup): Check out==err when relocating fds.
Karl Heuer <kwzh@gnu.org>
parents:
6495
diff
changeset
|
1426 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
|
1427 } |
2286
7f66b40a0192
* callproc.c (child_setup): Make sure that in, out, and err are
Jim Blandy <jimb@redhat.com>
parents:
1912
diff
changeset
|
1428 |
21694
6e12eeda6913
(Fcall_process) [MSDOS]: Call child_setup instead of run_msdos_command.
Eli Zaretskii <eliz@gnu.org>
parents:
21626
diff
changeset
|
1429 #ifndef MSDOS |
26088
b7aa6ac26872
Add support for large files, 64-bit Solaris, system locale codings.
Paul Eggert <eggert@twinsun.com>
parents:
25767
diff
changeset
|
1430 emacs_close (0); |
b7aa6ac26872
Add support for large files, 64-bit Solaris, system locale codings.
Paul Eggert <eggert@twinsun.com>
parents:
25767
diff
changeset
|
1431 emacs_close (1); |
b7aa6ac26872
Add support for large files, 64-bit Solaris, system locale codings.
Paul Eggert <eggert@twinsun.com>
parents:
25767
diff
changeset
|
1432 emacs_close (2); |
296 | 1433 |
1434 dup2 (in, 0); | |
1435 dup2 (out, 1); | |
1436 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
|
1437 emacs_close (in); |
b7aa6ac26872
Add support for large files, 64-bit Solaris, system locale codings.
Paul Eggert <eggert@twinsun.com>
parents:
25767
diff
changeset
|
1438 emacs_close (out); |
b7aa6ac26872
Add support for large files, 64-bit Solaris, system locale codings.
Paul Eggert <eggert@twinsun.com>
parents:
25767
diff
changeset
|
1439 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
|
1440 #endif /* not MSDOS */ |
9786
7f4b72244919
(getenv_internal) [WINDOWSNT]: Use strnicmp, not bcmp.
Richard M. Stallman <rms@gnu.org>
parents:
9609
diff
changeset
|
1441 #endif /* not WINDOWSNT */ |
296 | 1442 |
14872
c001b28bf068
(Fcall_process, child_setup): If BSD_PGRPS, call
Richard M. Stallman <rms@gnu.org>
parents:
14438
diff
changeset
|
1443 #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
|
1444 #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
|
1445 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
|
1446 #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
|
1447 #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
|
1448 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
|
1449 #endif /* USG */ |
5348 | 1450 /* setpgrp_of_tty is incorrect here; it uses input_fd. */ |
1451 EMACS_SET_TTY_PGRP (0, &pid); | |
296 | 1452 |
21694
6e12eeda6913
(Fcall_process) [MSDOS]: Call child_setup instead of run_msdos_command.
Eli Zaretskii <eliz@gnu.org>
parents:
21626
diff
changeset
|
1453 #ifdef MSDOS |
6e12eeda6913
(Fcall_process) [MSDOS]: Call child_setup instead of run_msdos_command.
Eli Zaretskii <eliz@gnu.org>
parents:
21626
diff
changeset
|
1454 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
|
1455 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
|
1456 if (pid == -1) |
6e12eeda6913
(Fcall_process) [MSDOS]: Call child_setup instead of run_msdos_command.
Eli Zaretskii <eliz@gnu.org>
parents:
21626
diff
changeset
|
1457 /* 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
|
1458 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
|
1459 return pid; |
6e12eeda6913
(Fcall_process) [MSDOS]: Call child_setup instead of run_msdos_command.
Eli Zaretskii <eliz@gnu.org>
parents:
21626
diff
changeset
|
1460 #else /* not MSDOS */ |
9786
7f4b72244919
(getenv_internal) [WINDOWSNT]: Use strnicmp, not bcmp.
Richard M. Stallman <rms@gnu.org>
parents:
9609
diff
changeset
|
1461 #ifdef WINDOWSNT |
7f4b72244919
(getenv_internal) [WINDOWSNT]: Use strnicmp, not bcmp.
Richard M. Stallman <rms@gnu.org>
parents:
9609
diff
changeset
|
1462 /* 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
|
1463 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
|
1464 reset_standard_handles (in, out, err, handles); |
11379
23f7aa711f96
(child_setup) [WINDOWSNT]: Removed syntax errors.
Karl Heuer <kwzh@gnu.org>
parents:
11235
diff
changeset
|
1465 if (cpid == -1) |
23f7aa711f96
(child_setup) [WINDOWSNT]: Removed syntax errors.
Karl Heuer <kwzh@gnu.org>
parents:
11235
diff
changeset
|
1466 /* 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
|
1467 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
|
1468 return cpid; |
7f4b72244919
(getenv_internal) [WINDOWSNT]: Use strnicmp, not bcmp.
Richard M. Stallman <rms@gnu.org>
parents:
9609
diff
changeset
|
1469 #else /* not WINDOWSNT */ |
296 | 1470 /* execvp does not accept an environment arg so the only way |
1471 to pass this environment is to set environ. Our caller | |
1472 is responsible for restoring the ambient value of environ. */ | |
1473 environ = env; | |
1474 execvp (new_argv[0], new_argv); | |
1475 | |
26088
b7aa6ac26872
Add support for large files, 64-bit Solaris, system locale codings.
Paul Eggert <eggert@twinsun.com>
parents:
25767
diff
changeset
|
1476 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
|
1477 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
|
1478 emacs_write (1, "\n", 1); |
296 | 1479 _exit (1); |
9786
7f4b72244919
(getenv_internal) [WINDOWSNT]: Use strnicmp, not bcmp.
Richard M. Stallman <rms@gnu.org>
parents:
9609
diff
changeset
|
1480 #endif /* not WINDOWSNT */ |
5501
902cd7024cfa
(syms_of_callproc) [MSDOS]: New lisp variable: binary-process.
Richard M. Stallman <rms@gnu.org>
parents:
5348
diff
changeset
|
1481 #endif /* not MSDOS */ |
296 | 1482 } |
1483 | |
21454
1361a790bca8
(relocate_fd): Avoid `min'/`max' as variable names.
Karl Heuer <kwzh@gnu.org>
parents:
21244
diff
changeset
|
1484 /* 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
|
1485 If the file descriptor is moved at all, the original is freed. */ |
21514 | 1486 static int |
21454
1361a790bca8
(relocate_fd): Avoid `min'/`max' as variable names.
Karl Heuer <kwzh@gnu.org>
parents:
21244
diff
changeset
|
1487 relocate_fd (fd, minfd) |
1361a790bca8
(relocate_fd): Avoid `min'/`max' as variable names.
Karl Heuer <kwzh@gnu.org>
parents:
21244
diff
changeset
|
1488 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
|
1489 { |
21454
1361a790bca8
(relocate_fd): Avoid `min'/`max' as variable names.
Karl Heuer <kwzh@gnu.org>
parents:
21244
diff
changeset
|
1490 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
|
1491 return fd; |
7f66b40a0192
* callproc.c (child_setup): Make sure that in, out, and err are
Jim Blandy <jimb@redhat.com>
parents:
1912
diff
changeset
|
1492 else |
7f66b40a0192
* callproc.c (child_setup): Make sure that in, out, and err are
Jim Blandy <jimb@redhat.com>
parents:
1912
diff
changeset
|
1493 { |
7f66b40a0192
* callproc.c (child_setup): Make sure that in, out, and err are
Jim Blandy <jimb@redhat.com>
parents:
1912
diff
changeset
|
1494 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
|
1495 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
|
1496 { |
2509
daaa78c8c980
* callproc.c (relocate_fd): Make messages string literals, not
Jim Blandy <jimb@redhat.com>
parents:
2432
diff
changeset
|
1497 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
|
1498 char *errmessage = strerror (errno); |
2509
daaa78c8c980
* callproc.c (relocate_fd): Make messages string literals, not
Jim Blandy <jimb@redhat.com>
parents:
2432
diff
changeset
|
1499 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
|
1500 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
|
1501 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
|
1502 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
|
1503 _exit (1); |
7f66b40a0192
* callproc.c (child_setup): Make sure that in, out, and err are
Jim Blandy <jimb@redhat.com>
parents:
1912
diff
changeset
|
1504 } |
7f66b40a0192
* callproc.c (child_setup): Make sure that in, out, and err are
Jim Blandy <jimb@redhat.com>
parents:
1912
diff
changeset
|
1505 /* 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
|
1506 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
|
1507 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
|
1508 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
|
1509 return new; |
7f66b40a0192
* callproc.c (child_setup): Make sure that in, out, and err are
Jim Blandy <jimb@redhat.com>
parents:
1912
diff
changeset
|
1510 } |
7f66b40a0192
* callproc.c (child_setup): Make sure that in, out, and err are
Jim Blandy <jimb@redhat.com>
parents:
1912
diff
changeset
|
1511 } |
7f66b40a0192
* callproc.c (child_setup): Make sure that in, out, and err are
Jim Blandy <jimb@redhat.com>
parents:
1912
diff
changeset
|
1512 |
942
c519b70eb50b
Replaced fuctions egetenv, Fgetenv, getenv_internal, which had
Joseph Arceneaux <jla@gnu.org>
parents:
934
diff
changeset
|
1513 static int |
83427
2afc49c9f0c0
Store local environment in frame (not terminal) parameters.
Karoly Lorentey <lorentey@elte.hu>
parents:
83426
diff
changeset
|
1514 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
|
1515 char *var; |
c519b70eb50b
Replaced fuctions egetenv, Fgetenv, getenv_internal, which had
Joseph Arceneaux <jla@gnu.org>
parents:
934
diff
changeset
|
1516 int varlen; |
c519b70eb50b
Replaced fuctions egetenv, Fgetenv, getenv_internal, which had
Joseph Arceneaux <jla@gnu.org>
parents:
934
diff
changeset
|
1517 char **value; |
c519b70eb50b
Replaced fuctions egetenv, Fgetenv, getenv_internal, which had
Joseph Arceneaux <jla@gnu.org>
parents:
934
diff
changeset
|
1518 int *valuelen; |
83427
2afc49c9f0c0
Store local environment in frame (not terminal) parameters.
Karoly Lorentey <lorentey@elte.hu>
parents:
83426
diff
changeset
|
1519 Lisp_Object frame; |
942
c519b70eb50b
Replaced fuctions egetenv, Fgetenv, getenv_internal, which had
Joseph Arceneaux <jla@gnu.org>
parents:
934
diff
changeset
|
1520 { |
c519b70eb50b
Replaced fuctions egetenv, Fgetenv, getenv_internal, which had
Joseph Arceneaux <jla@gnu.org>
parents:
934
diff
changeset
|
1521 Lisp_Object scan; |
83640
2aee92eacdab
* server.el (server-process-filter): Likewise.
Dan Nicolaescu <dann@ics.uci.edu>
parents:
83556
diff
changeset
|
1522 Lisp_Object display; |
83796
e7303426ed25
(Vinitial_environment): New variable.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
83652
diff
changeset
|
1523 |
e7303426ed25
(Vinitial_environment): New variable.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
83652
diff
changeset
|
1524 /* FIXME: Code duplication. */ |
942
c519b70eb50b
Replaced fuctions egetenv, Fgetenv, getenv_internal, which had
Joseph Arceneaux <jla@gnu.org>
parents:
934
diff
changeset
|
1525 |
83529
0d9e16eab053
Rework environment variable support. (Reported by Kalle Olavi Niemitalo and Noah Friedman.)
Karoly Lorentey <lorentey@elte.hu>
parents:
83518
diff
changeset
|
1526 if (NILP (frame)) |
942
c519b70eb50b
Replaced fuctions egetenv, Fgetenv, getenv_internal, which had
Joseph Arceneaux <jla@gnu.org>
parents:
934
diff
changeset
|
1527 { |
83529
0d9e16eab053
Rework environment variable support. (Reported by Kalle Olavi Niemitalo and Noah Friedman.)
Karoly Lorentey <lorentey@elte.hu>
parents:
83518
diff
changeset
|
1528 /* Try to find VAR in Vprocess_environment first. */ |
0d9e16eab053
Rework environment variable support. (Reported by Kalle Olavi Niemitalo and Noah Friedman.)
Karoly Lorentey <lorentey@elte.hu>
parents:
83518
diff
changeset
|
1529 for (scan = Vprocess_environment; CONSP (scan); scan = XCDR (scan)) |
0d9e16eab053
Rework environment variable support. (Reported by Kalle Olavi Niemitalo and Noah Friedman.)
Karoly Lorentey <lorentey@elte.hu>
parents:
83518
diff
changeset
|
1530 { |
0d9e16eab053
Rework environment variable support. (Reported by Kalle Olavi Niemitalo and Noah Friedman.)
Karoly Lorentey <lorentey@elte.hu>
parents:
83518
diff
changeset
|
1531 Lisp_Object entry = XCAR (scan); |
0d9e16eab053
Rework environment variable support. (Reported by Kalle Olavi Niemitalo and Noah Friedman.)
Karoly Lorentey <lorentey@elte.hu>
parents:
83518
diff
changeset
|
1532 if (STRINGP (entry) |
0d9e16eab053
Rework environment variable support. (Reported by Kalle Olavi Niemitalo and Noah Friedman.)
Karoly Lorentey <lorentey@elte.hu>
parents:
83518
diff
changeset
|
1533 && SBYTES (entry) >= varlen |
83425
c82829d08b89
Fix semantics of let-binding `process-environment'.
Karoly Lorentey <lorentey@elte.hu>
parents:
83422
diff
changeset
|
1534 #ifdef WINDOWSNT |
83529
0d9e16eab053
Rework environment variable support. (Reported by Kalle Olavi Niemitalo and Noah Friedman.)
Karoly Lorentey <lorentey@elte.hu>
parents:
83518
diff
changeset
|
1535 /* NT environment variables are case insensitive. */ |
0d9e16eab053
Rework environment variable support. (Reported by Kalle Olavi Niemitalo and Noah Friedman.)
Karoly Lorentey <lorentey@elte.hu>
parents:
83518
diff
changeset
|
1536 && ! strnicmp (SDATA (entry), var, varlen) |
83425
c82829d08b89
Fix semantics of let-binding `process-environment'.
Karoly Lorentey <lorentey@elte.hu>
parents:
83422
diff
changeset
|
1537 #else /* not WINDOWSNT */ |
83529
0d9e16eab053
Rework environment variable support. (Reported by Kalle Olavi Niemitalo and Noah Friedman.)
Karoly Lorentey <lorentey@elte.hu>
parents:
83518
diff
changeset
|
1538 && ! bcmp (SDATA (entry), var, varlen) |
83425
c82829d08b89
Fix semantics of let-binding `process-environment'.
Karoly Lorentey <lorentey@elte.hu>
parents:
83422
diff
changeset
|
1539 #endif /* not WINDOWSNT */ |
83529
0d9e16eab053
Rework environment variable support. (Reported by Kalle Olavi Niemitalo and Noah Friedman.)
Karoly Lorentey <lorentey@elte.hu>
parents:
83518
diff
changeset
|
1540 ) |
83425
c82829d08b89
Fix semantics of let-binding `process-environment'.
Karoly Lorentey <lorentey@elte.hu>
parents:
83422
diff
changeset
|
1541 { |
83529
0d9e16eab053
Rework environment variable support. (Reported by Kalle Olavi Niemitalo and Noah Friedman.)
Karoly Lorentey <lorentey@elte.hu>
parents:
83518
diff
changeset
|
1542 if (SBYTES (entry) > varlen && SREF (entry, varlen) == '=') |
0d9e16eab053
Rework environment variable support. (Reported by Kalle Olavi Niemitalo and Noah Friedman.)
Karoly Lorentey <lorentey@elte.hu>
parents:
83518
diff
changeset
|
1543 { |
0d9e16eab053
Rework environment variable support. (Reported by Kalle Olavi Niemitalo and Noah Friedman.)
Karoly Lorentey <lorentey@elte.hu>
parents:
83518
diff
changeset
|
1544 *value = (char *) SDATA (entry) + (varlen + 1); |
0d9e16eab053
Rework environment variable support. (Reported by Kalle Olavi Niemitalo and Noah Friedman.)
Karoly Lorentey <lorentey@elte.hu>
parents:
83518
diff
changeset
|
1545 *valuelen = SBYTES (entry) - (varlen + 1); |
0d9e16eab053
Rework environment variable support. (Reported by Kalle Olavi Niemitalo and Noah Friedman.)
Karoly Lorentey <lorentey@elte.hu>
parents:
83518
diff
changeset
|
1546 return 1; |
0d9e16eab053
Rework environment variable support. (Reported by Kalle Olavi Niemitalo and Noah Friedman.)
Karoly Lorentey <lorentey@elte.hu>
parents:
83518
diff
changeset
|
1547 } |
0d9e16eab053
Rework environment variable support. (Reported by Kalle Olavi Niemitalo and Noah Friedman.)
Karoly Lorentey <lorentey@elte.hu>
parents:
83518
diff
changeset
|
1548 else if (SBYTES (entry) == varlen) |
0d9e16eab053
Rework environment variable support. (Reported by Kalle Olavi Niemitalo and Noah Friedman.)
Karoly Lorentey <lorentey@elte.hu>
parents:
83518
diff
changeset
|
1549 { |
0d9e16eab053
Rework environment variable support. (Reported by Kalle Olavi Niemitalo and Noah Friedman.)
Karoly Lorentey <lorentey@elte.hu>
parents:
83518
diff
changeset
|
1550 /* Lone variable names in Vprocess_environment mean that |
0d9e16eab053
Rework environment variable support. (Reported by Kalle Olavi Niemitalo and Noah Friedman.)
Karoly Lorentey <lorentey@elte.hu>
parents:
83518
diff
changeset
|
1551 variable should be removed from the environment. */ |
0d9e16eab053
Rework environment variable support. (Reported by Kalle Olavi Niemitalo and Noah Friedman.)
Karoly Lorentey <lorentey@elte.hu>
parents:
83518
diff
changeset
|
1552 return 0; |
0d9e16eab053
Rework environment variable support. (Reported by Kalle Olavi Niemitalo and Noah Friedman.)
Karoly Lorentey <lorentey@elte.hu>
parents:
83518
diff
changeset
|
1553 } |
83425
c82829d08b89
Fix semantics of let-binding `process-environment'.
Karoly Lorentey <lorentey@elte.hu>
parents:
83422
diff
changeset
|
1554 } |
c82829d08b89
Fix semantics of let-binding `process-environment'.
Karoly Lorentey <lorentey@elte.hu>
parents:
83422
diff
changeset
|
1555 } |
83529
0d9e16eab053
Rework environment variable support. (Reported by Kalle Olavi Niemitalo and Noah Friedman.)
Karoly Lorentey <lorentey@elte.hu>
parents:
83518
diff
changeset
|
1556 frame = selected_frame; |
83425
c82829d08b89
Fix semantics of let-binding `process-environment'.
Karoly Lorentey <lorentey@elte.hu>
parents:
83422
diff
changeset
|
1557 } |
942
c519b70eb50b
Replaced fuctions egetenv, Fgetenv, getenv_internal, which had
Joseph Arceneaux <jla@gnu.org>
parents:
934
diff
changeset
|
1558 |
83802
4b264c073ca8
(getenv_internal): Remove special case for $TERM.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
83799
diff
changeset
|
1559 /* For DISPLAY first try to get the values from the frame. */ |
83640
2aee92eacdab
* server.el (server-process-filter): Likewise.
Dan Nicolaescu <dann@ics.uci.edu>
parents:
83556
diff
changeset
|
1560 display = get_frame_param (XFRAME (frame), Qdisplay_environment_variable); |
2aee92eacdab
* server.el (server-process-filter): Likewise.
Dan Nicolaescu <dann@ics.uci.edu>
parents:
83556
diff
changeset
|
1561 if (strcmp (var, "DISPLAY") == 0) |
2aee92eacdab
* server.el (server-process-filter): Likewise.
Dan Nicolaescu <dann@ics.uci.edu>
parents:
83556
diff
changeset
|
1562 if (! NILP (display)) |
2aee92eacdab
* server.el (server-process-filter): Likewise.
Dan Nicolaescu <dann@ics.uci.edu>
parents:
83556
diff
changeset
|
1563 { |
2aee92eacdab
* server.el (server-process-filter): Likewise.
Dan Nicolaescu <dann@ics.uci.edu>
parents:
83556
diff
changeset
|
1564 *value = (char *) SDATA (display); |
2aee92eacdab
* server.el (server-process-filter): Likewise.
Dan Nicolaescu <dann@ics.uci.edu>
parents:
83556
diff
changeset
|
1565 *valuelen = SBYTES (display); |
2aee92eacdab
* server.el (server-process-filter): Likewise.
Dan Nicolaescu <dann@ics.uci.edu>
parents:
83556
diff
changeset
|
1566 return 1; |
2aee92eacdab
* server.el (server-process-filter): Likewise.
Dan Nicolaescu <dann@ics.uci.edu>
parents:
83556
diff
changeset
|
1567 } |
2aee92eacdab
* server.el (server-process-filter): Likewise.
Dan Nicolaescu <dann@ics.uci.edu>
parents:
83556
diff
changeset
|
1568 |
2aee92eacdab
* server.el (server-process-filter): Likewise.
Dan Nicolaescu <dann@ics.uci.edu>
parents:
83556
diff
changeset
|
1569 { |
2aee92eacdab
* server.el (server-process-filter): Likewise.
Dan Nicolaescu <dann@ics.uci.edu>
parents:
83556
diff
changeset
|
1570 /* Try to find VAR in Vprocess_environment. */ |
2aee92eacdab
* server.el (server-process-filter): Likewise.
Dan Nicolaescu <dann@ics.uci.edu>
parents:
83556
diff
changeset
|
1571 for (scan = Vprocess_environment; CONSP (scan); scan = XCDR (scan)) |
2aee92eacdab
* server.el (server-process-filter): Likewise.
Dan Nicolaescu <dann@ics.uci.edu>
parents:
83556
diff
changeset
|
1572 { |
2aee92eacdab
* server.el (server-process-filter): Likewise.
Dan Nicolaescu <dann@ics.uci.edu>
parents:
83556
diff
changeset
|
1573 Lisp_Object entry = XCAR (scan); |
2aee92eacdab
* server.el (server-process-filter): Likewise.
Dan Nicolaescu <dann@ics.uci.edu>
parents:
83556
diff
changeset
|
1574 if (STRINGP (entry) |
2aee92eacdab
* server.el (server-process-filter): Likewise.
Dan Nicolaescu <dann@ics.uci.edu>
parents:
83556
diff
changeset
|
1575 && SBYTES (entry) >= varlen |
2aee92eacdab
* server.el (server-process-filter): Likewise.
Dan Nicolaescu <dann@ics.uci.edu>
parents:
83556
diff
changeset
|
1576 #ifdef WINDOWSNT |
2aee92eacdab
* server.el (server-process-filter): Likewise.
Dan Nicolaescu <dann@ics.uci.edu>
parents:
83556
diff
changeset
|
1577 /* NT environment variables are case insensitive. */ |
2aee92eacdab
* server.el (server-process-filter): Likewise.
Dan Nicolaescu <dann@ics.uci.edu>
parents:
83556
diff
changeset
|
1578 && ! strnicmp (SDATA (entry), var, varlen) |
2aee92eacdab
* server.el (server-process-filter): Likewise.
Dan Nicolaescu <dann@ics.uci.edu>
parents:
83556
diff
changeset
|
1579 #else /* not WINDOWSNT */ |
2aee92eacdab
* server.el (server-process-filter): Likewise.
Dan Nicolaescu <dann@ics.uci.edu>
parents:
83556
diff
changeset
|
1580 && ! bcmp (SDATA (entry), var, varlen) |
2aee92eacdab
* server.el (server-process-filter): Likewise.
Dan Nicolaescu <dann@ics.uci.edu>
parents:
83556
diff
changeset
|
1581 #endif /* not WINDOWSNT */ |
2aee92eacdab
* server.el (server-process-filter): Likewise.
Dan Nicolaescu <dann@ics.uci.edu>
parents:
83556
diff
changeset
|
1582 ) |
2aee92eacdab
* server.el (server-process-filter): Likewise.
Dan Nicolaescu <dann@ics.uci.edu>
parents:
83556
diff
changeset
|
1583 { |
2aee92eacdab
* server.el (server-process-filter): Likewise.
Dan Nicolaescu <dann@ics.uci.edu>
parents:
83556
diff
changeset
|
1584 if (SBYTES (entry) > varlen && SREF (entry, varlen) == '=') |
2aee92eacdab
* server.el (server-process-filter): Likewise.
Dan Nicolaescu <dann@ics.uci.edu>
parents:
83556
diff
changeset
|
1585 { |
2aee92eacdab
* server.el (server-process-filter): Likewise.
Dan Nicolaescu <dann@ics.uci.edu>
parents:
83556
diff
changeset
|
1586 *value = (char *) SDATA (entry) + (varlen + 1); |
2aee92eacdab
* server.el (server-process-filter): Likewise.
Dan Nicolaescu <dann@ics.uci.edu>
parents:
83556
diff
changeset
|
1587 *valuelen = SBYTES (entry) - (varlen + 1); |
2aee92eacdab
* server.el (server-process-filter): Likewise.
Dan Nicolaescu <dann@ics.uci.edu>
parents:
83556
diff
changeset
|
1588 return 1; |
2aee92eacdab
* server.el (server-process-filter): Likewise.
Dan Nicolaescu <dann@ics.uci.edu>
parents:
83556
diff
changeset
|
1589 } |
2aee92eacdab
* server.el (server-process-filter): Likewise.
Dan Nicolaescu <dann@ics.uci.edu>
parents:
83556
diff
changeset
|
1590 else if (SBYTES (entry) == varlen) |
2aee92eacdab
* server.el (server-process-filter): Likewise.
Dan Nicolaescu <dann@ics.uci.edu>
parents:
83556
diff
changeset
|
1591 { |
2aee92eacdab
* server.el (server-process-filter): Likewise.
Dan Nicolaescu <dann@ics.uci.edu>
parents:
83556
diff
changeset
|
1592 /* Lone variable names in Vprocess_environment mean that |
2aee92eacdab
* server.el (server-process-filter): Likewise.
Dan Nicolaescu <dann@ics.uci.edu>
parents:
83556
diff
changeset
|
1593 variable should be removed from the environment. */ |
2aee92eacdab
* server.el (server-process-filter): Likewise.
Dan Nicolaescu <dann@ics.uci.edu>
parents:
83556
diff
changeset
|
1594 return 0; |
2aee92eacdab
* server.el (server-process-filter): Likewise.
Dan Nicolaescu <dann@ics.uci.edu>
parents:
83556
diff
changeset
|
1595 } |
2aee92eacdab
* server.el (server-process-filter): Likewise.
Dan Nicolaescu <dann@ics.uci.edu>
parents:
83556
diff
changeset
|
1596 } |
2aee92eacdab
* server.el (server-process-filter): Likewise.
Dan Nicolaescu <dann@ics.uci.edu>
parents:
83556
diff
changeset
|
1597 } |
2aee92eacdab
* server.el (server-process-filter): Likewise.
Dan Nicolaescu <dann@ics.uci.edu>
parents:
83556
diff
changeset
|
1598 } |
2aee92eacdab
* server.el (server-process-filter): Likewise.
Dan Nicolaescu <dann@ics.uci.edu>
parents:
83556
diff
changeset
|
1599 |
2aee92eacdab
* server.el (server-process-filter): Likewise.
Dan Nicolaescu <dann@ics.uci.edu>
parents:
83556
diff
changeset
|
1600 #if 0 |
83421
bb2edc915032
Implement automatic terminal-local environment variables via `local-environment-variables'.
Karoly Lorentey <lorentey@elte.hu>
parents:
64770
diff
changeset
|
1601 /* Find the environment in which to search the variable. */ |
83529
0d9e16eab053
Rework environment variable support. (Reported by Kalle Olavi Niemitalo and Noah Friedman.)
Karoly Lorentey <lorentey@elte.hu>
parents:
83518
diff
changeset
|
1602 CHECK_FRAME (frame); |
0d9e16eab053
Rework environment variable support. (Reported by Kalle Olavi Niemitalo and Noah Friedman.)
Karoly Lorentey <lorentey@elte.hu>
parents:
83518
diff
changeset
|
1603 frame = Fframe_with_environment (frame); |
83462
75949877b3ed
Fix compilation error on older GCCs (reported by "mace").
Karoly Lorentey <lorentey@elte.hu>
parents:
83461
diff
changeset
|
1604 |
83529
0d9e16eab053
Rework environment variable support. (Reported by Kalle Olavi Niemitalo and Noah Friedman.)
Karoly Lorentey <lorentey@elte.hu>
parents:
83518
diff
changeset
|
1605 for (scan = get_frame_param (XFRAME (frame), Qenvironment); |
0d9e16eab053
Rework environment variable support. (Reported by Kalle Olavi Niemitalo and Noah Friedman.)
Karoly Lorentey <lorentey@elte.hu>
parents:
83518
diff
changeset
|
1606 CONSP (scan); |
0d9e16eab053
Rework environment variable support. (Reported by Kalle Olavi Niemitalo and Noah Friedman.)
Karoly Lorentey <lorentey@elte.hu>
parents:
83518
diff
changeset
|
1607 scan = XCDR (scan)) |
942
c519b70eb50b
Replaced fuctions egetenv, Fgetenv, getenv_internal, which had
Joseph Arceneaux <jla@gnu.org>
parents:
934
diff
changeset
|
1608 { |
6495
c88f34090aea
(call_process_cleanup, getenv_internal): Use assignment, not initialization.
Karl Heuer <kwzh@gnu.org>
parents:
6466
diff
changeset
|
1609 Lisp_Object entry; |
c88f34090aea
(call_process_cleanup, getenv_internal): Use assignment, not initialization.
Karl Heuer <kwzh@gnu.org>
parents:
6466
diff
changeset
|
1610 |
25645
a14111a2a100
Use XCAR, XCDR, XFLOAT_DATA instead of explicit member access.
Ken Raeburn <raeburn@raeburn.org>
parents:
25522
diff
changeset
|
1611 entry = XCAR (scan); |
9138
6c814eb4d892
(Fcall_process, child_setup, getenv_internal): Use type test macros.
Karl Heuer <kwzh@gnu.org>
parents:
8853
diff
changeset
|
1612 if (STRINGP (entry) |
83421
bb2edc915032
Implement automatic terminal-local environment variables via `local-environment-variables'.
Karoly Lorentey <lorentey@elte.hu>
parents:
64770
diff
changeset
|
1613 && SBYTES (entry) > varlen |
bb2edc915032
Implement automatic terminal-local environment variables via `local-environment-variables'.
Karoly Lorentey <lorentey@elte.hu>
parents:
64770
diff
changeset
|
1614 && SREF (entry, varlen) == '=' |
9786
7f4b72244919
(getenv_internal) [WINDOWSNT]: Use strnicmp, not bcmp.
Richard M. Stallman <rms@gnu.org>
parents:
9609
diff
changeset
|
1615 #ifdef WINDOWSNT |
83421
bb2edc915032
Implement automatic terminal-local environment variables via `local-environment-variables'.
Karoly Lorentey <lorentey@elte.hu>
parents:
64770
diff
changeset
|
1616 /* NT environment variables are case insensitive. */ |
bb2edc915032
Implement automatic terminal-local environment variables via `local-environment-variables'.
Karoly Lorentey <lorentey@elte.hu>
parents:
64770
diff
changeset
|
1617 && ! strnicmp (SDATA (entry), var, varlen) |
9786
7f4b72244919
(getenv_internal) [WINDOWSNT]: Use strnicmp, not bcmp.
Richard M. Stallman <rms@gnu.org>
parents:
9609
diff
changeset
|
1618 #else /* not WINDOWSNT */ |
83421
bb2edc915032
Implement automatic terminal-local environment variables via `local-environment-variables'.
Karoly Lorentey <lorentey@elte.hu>
parents:
64770
diff
changeset
|
1619 && ! bcmp (SDATA (entry), var, varlen) |
9786
7f4b72244919
(getenv_internal) [WINDOWSNT]: Use strnicmp, not bcmp.
Richard M. Stallman <rms@gnu.org>
parents:
9609
diff
changeset
|
1620 #endif /* not WINDOWSNT */ |
83421
bb2edc915032
Implement automatic terminal-local environment variables via `local-environment-variables'.
Karoly Lorentey <lorentey@elte.hu>
parents:
64770
diff
changeset
|
1621 ) |
942
c519b70eb50b
Replaced fuctions egetenv, Fgetenv, getenv_internal, which had
Joseph Arceneaux <jla@gnu.org>
parents:
934
diff
changeset
|
1622 { |
46370
40db0673e6f0
Most uses of XSTRING combined with STRING_BYTES or indirection changed to
Ken Raeburn <raeburn@raeburn.org>
parents:
46293
diff
changeset
|
1623 *value = (char *) SDATA (entry) + (varlen + 1); |
40db0673e6f0
Most uses of XSTRING combined with STRING_BYTES or indirection changed to
Ken Raeburn <raeburn@raeburn.org>
parents:
46293
diff
changeset
|
1624 *valuelen = SBYTES (entry) - (varlen + 1); |
942
c519b70eb50b
Replaced fuctions egetenv, Fgetenv, getenv_internal, which had
Joseph Arceneaux <jla@gnu.org>
parents:
934
diff
changeset
|
1625 return 1; |
c519b70eb50b
Replaced fuctions egetenv, Fgetenv, getenv_internal, which had
Joseph Arceneaux <jla@gnu.org>
parents:
934
diff
changeset
|
1626 } |
c519b70eb50b
Replaced fuctions egetenv, Fgetenv, getenv_internal, which had
Joseph Arceneaux <jla@gnu.org>
parents:
934
diff
changeset
|
1627 } |
83640
2aee92eacdab
* server.el (server-process-filter): Likewise.
Dan Nicolaescu <dann@ics.uci.edu>
parents:
83556
diff
changeset
|
1628 #endif |
942
c519b70eb50b
Replaced fuctions egetenv, Fgetenv, getenv_internal, which had
Joseph Arceneaux <jla@gnu.org>
parents:
934
diff
changeset
|
1629 return 0; |
c519b70eb50b
Replaced fuctions egetenv, Fgetenv, getenv_internal, which had
Joseph Arceneaux <jla@gnu.org>
parents:
934
diff
changeset
|
1630 } |
c519b70eb50b
Replaced fuctions egetenv, Fgetenv, getenv_internal, which had
Joseph Arceneaux <jla@gnu.org>
parents:
934
diff
changeset
|
1631 |
83421
bb2edc915032
Implement automatic terminal-local environment variables via `local-environment-variables'.
Karoly Lorentey <lorentey@elte.hu>
parents:
64770
diff
changeset
|
1632 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
|
1633 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
|
1634 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
|
1635 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
|
1636 |
83529
0d9e16eab053
Rework environment variable support. (Reported by Kalle Olavi Niemitalo and Noah Friedman.)
Karoly Lorentey <lorentey@elte.hu>
parents:
83518
diff
changeset
|
1637 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
|
1638 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
|
1639 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
|
1640 |
83529
0d9e16eab053
Rework environment variable support. (Reported by Kalle Olavi Niemitalo and Noah Friedman.)
Karoly Lorentey <lorentey@elte.hu>
parents:
83518
diff
changeset
|
1641 If optional parameter FRAME is non-nil, then this function will ignore |
0d9e16eab053
Rework environment variable support. (Reported by Kalle Olavi Niemitalo and Noah Friedman.)
Karoly Lorentey <lorentey@elte.hu>
parents:
83518
diff
changeset
|
1642 `process-environment' and will simply look up the variable in that |
0d9e16eab053
Rework environment variable support. (Reported by Kalle Olavi Niemitalo and Noah Friedman.)
Karoly Lorentey <lorentey@elte.hu>
parents:
83518
diff
changeset
|
1643 frame's environment. */) |
83427
2afc49c9f0c0
Store local environment in frame (not terminal) parameters.
Karoly Lorentey <lorentey@elte.hu>
parents:
83426
diff
changeset
|
1644 (variable, frame) |
2afc49c9f0c0
Store local environment in frame (not terminal) parameters.
Karoly Lorentey <lorentey@elte.hu>
parents:
83426
diff
changeset
|
1645 Lisp_Object variable, frame; |
942
c519b70eb50b
Replaced fuctions egetenv, Fgetenv, getenv_internal, which had
Joseph Arceneaux <jla@gnu.org>
parents:
934
diff
changeset
|
1646 { |
c519b70eb50b
Replaced fuctions egetenv, Fgetenv, getenv_internal, which had
Joseph Arceneaux <jla@gnu.org>
parents:
934
diff
changeset
|
1647 char *value; |
c519b70eb50b
Replaced fuctions egetenv, Fgetenv, getenv_internal, which had
Joseph Arceneaux <jla@gnu.org>
parents:
934
diff
changeset
|
1648 int valuelen; |
c519b70eb50b
Replaced fuctions egetenv, Fgetenv, getenv_internal, which had
Joseph Arceneaux <jla@gnu.org>
parents:
934
diff
changeset
|
1649 |
83425
c82829d08b89
Fix semantics of let-binding `process-environment'.
Karoly Lorentey <lorentey@elte.hu>
parents:
83422
diff
changeset
|
1650 CHECK_STRING (variable); |
c82829d08b89
Fix semantics of let-binding `process-environment'.
Karoly Lorentey <lorentey@elte.hu>
parents:
83422
diff
changeset
|
1651 if (getenv_internal (SDATA (variable), SBYTES (variable), |
83427
2afc49c9f0c0
Store local environment in frame (not terminal) parameters.
Karoly Lorentey <lorentey@elte.hu>
parents:
83426
diff
changeset
|
1652 &value, &valuelen, frame)) |
942
c519b70eb50b
Replaced fuctions egetenv, Fgetenv, getenv_internal, which had
Joseph Arceneaux <jla@gnu.org>
parents:
934
diff
changeset
|
1653 return make_string (value, valuelen); |
c519b70eb50b
Replaced fuctions egetenv, Fgetenv, getenv_internal, which had
Joseph Arceneaux <jla@gnu.org>
parents:
934
diff
changeset
|
1654 else |
c519b70eb50b
Replaced fuctions egetenv, Fgetenv, getenv_internal, which had
Joseph Arceneaux <jla@gnu.org>
parents:
934
diff
changeset
|
1655 return Qnil; |
c519b70eb50b
Replaced fuctions egetenv, Fgetenv, getenv_internal, which had
Joseph Arceneaux <jla@gnu.org>
parents:
934
diff
changeset
|
1656 } |
c519b70eb50b
Replaced fuctions egetenv, Fgetenv, getenv_internal, which had
Joseph Arceneaux <jla@gnu.org>
parents:
934
diff
changeset
|
1657 |
83425
c82829d08b89
Fix semantics of let-binding `process-environment'.
Karoly Lorentey <lorentey@elte.hu>
parents:
83422
diff
changeset
|
1658 /* 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
|
1659 easily callable from C. */ |
942
c519b70eb50b
Replaced fuctions egetenv, Fgetenv, getenv_internal, which had
Joseph Arceneaux <jla@gnu.org>
parents:
934
diff
changeset
|
1660 char * |
c519b70eb50b
Replaced fuctions egetenv, Fgetenv, getenv_internal, which had
Joseph Arceneaux <jla@gnu.org>
parents:
934
diff
changeset
|
1661 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
|
1662 char *var; |
942
c519b70eb50b
Replaced fuctions egetenv, Fgetenv, getenv_internal, which had
Joseph Arceneaux <jla@gnu.org>
parents:
934
diff
changeset
|
1663 { |
c519b70eb50b
Replaced fuctions egetenv, Fgetenv, getenv_internal, which had
Joseph Arceneaux <jla@gnu.org>
parents:
934
diff
changeset
|
1664 char *value; |
c519b70eb50b
Replaced fuctions egetenv, Fgetenv, getenv_internal, which had
Joseph Arceneaux <jla@gnu.org>
parents:
934
diff
changeset
|
1665 int valuelen; |
c519b70eb50b
Replaced fuctions egetenv, Fgetenv, getenv_internal, which had
Joseph Arceneaux <jla@gnu.org>
parents:
934
diff
changeset
|
1666 |
83421
bb2edc915032
Implement automatic terminal-local environment variables via `local-environment-variables'.
Karoly Lorentey <lorentey@elte.hu>
parents:
64770
diff
changeset
|
1667 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
|
1668 return value; |
c519b70eb50b
Replaced fuctions egetenv, Fgetenv, getenv_internal, which had
Joseph Arceneaux <jla@gnu.org>
parents:
934
diff
changeset
|
1669 else |
c519b70eb50b
Replaced fuctions egetenv, Fgetenv, getenv_internal, which had
Joseph Arceneaux <jla@gnu.org>
parents:
934
diff
changeset
|
1670 return 0; |
c519b70eb50b
Replaced fuctions egetenv, Fgetenv, getenv_internal, which had
Joseph Arceneaux <jla@gnu.org>
parents:
934
diff
changeset
|
1671 } |
c519b70eb50b
Replaced fuctions egetenv, Fgetenv, getenv_internal, which had
Joseph Arceneaux <jla@gnu.org>
parents:
934
diff
changeset
|
1672 |
296 | 1673 #endif /* not VMS */ |
1674 | |
5154
e4e66bcaa016
(init_callproc): Maybe add ../lib-src to exec-path
Richard M. Stallman <rms@gnu.org>
parents:
4977
diff
changeset
|
1675 /* This is run before init_cmdargs. */ |
49600
23a1cea22d13
Trailing whitespace deleted.
Juanma Barranquero <lekktu@gmail.com>
parents:
47018
diff
changeset
|
1676 |
21514 | 1677 void |
5154
e4e66bcaa016
(init_callproc): Maybe add ../lib-src to exec-path
Richard M. Stallman <rms@gnu.org>
parents:
4977
diff
changeset
|
1678 init_callproc_1 () |
e4e66bcaa016
(init_callproc): Maybe add ../lib-src to exec-path
Richard M. Stallman <rms@gnu.org>
parents:
4977
diff
changeset
|
1679 { |
e4e66bcaa016
(init_callproc): Maybe add ../lib-src to exec-path
Richard M. Stallman <rms@gnu.org>
parents:
4977
diff
changeset
|
1680 char *data_dir = egetenv ("EMACSDATA"); |
6031
ae4c6623837b
(syms_of_callproc): New variable Vdoc_directory.
Karl Heuer <kwzh@gnu.org>
parents:
5688
diff
changeset
|
1681 char *doc_dir = egetenv ("EMACSDOC"); |
ae4c6623837b
(syms_of_callproc): New variable Vdoc_directory.
Karl Heuer <kwzh@gnu.org>
parents:
5688
diff
changeset
|
1682 |
5154
e4e66bcaa016
(init_callproc): Maybe add ../lib-src to exec-path
Richard M. Stallman <rms@gnu.org>
parents:
4977
diff
changeset
|
1683 Vdata_directory |
49600
23a1cea22d13
Trailing whitespace deleted.
Juanma Barranquero <lekktu@gmail.com>
parents:
47018
diff
changeset
|
1684 = 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
|
1685 : PATH_DATA)); |
6031
ae4c6623837b
(syms_of_callproc): New variable Vdoc_directory.
Karl Heuer <kwzh@gnu.org>
parents:
5688
diff
changeset
|
1686 Vdoc_directory |
ae4c6623837b
(syms_of_callproc): New variable Vdoc_directory.
Karl Heuer <kwzh@gnu.org>
parents:
5688
diff
changeset
|
1687 = 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
|
1688 : 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
|
1689 |
928ed74adf4f
Restored up-to-date version of this file from pogo. What is going on
Jim Blandy <jimb@redhat.com>
parents:
942
diff
changeset
|
1690 /* 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
|
1691 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
|
1692 Vexec_path = decode_env_path ("EMACSPATH", PATH_EXEC); |
296 | 1693 Vexec_directory = Ffile_name_as_directory (Fcar (Vexec_path)); |
1694 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
|
1695 } |
e4e66bcaa016
(init_callproc): Maybe add ../lib-src to exec-path
Richard M. Stallman <rms@gnu.org>
parents:
4977
diff
changeset
|
1696 |
12615
d5db61e1a4ee
(init_callproc): Set Vdoc_directory based on
Richard M. Stallman <rms@gnu.org>
parents:
12430
diff
changeset
|
1697 /* 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
|
1698 |
21514 | 1699 void |
5154
e4e66bcaa016
(init_callproc): Maybe add ../lib-src to exec-path
Richard M. Stallman <rms@gnu.org>
parents:
4977
diff
changeset
|
1700 init_callproc () |
e4e66bcaa016
(init_callproc): Maybe add ../lib-src to exec-path
Richard M. Stallman <rms@gnu.org>
parents:
4977
diff
changeset
|
1701 { |
e4e66bcaa016
(init_callproc): Maybe add ../lib-src to exec-path
Richard M. Stallman <rms@gnu.org>
parents:
4977
diff
changeset
|
1702 char *data_dir = egetenv ("EMACSDATA"); |
49600
23a1cea22d13
Trailing whitespace deleted.
Juanma Barranquero <lekktu@gmail.com>
parents:
47018
diff
changeset
|
1703 |
5154
e4e66bcaa016
(init_callproc): Maybe add ../lib-src to exec-path
Richard M. Stallman <rms@gnu.org>
parents:
4977
diff
changeset
|
1704 register char * sh; |
e4e66bcaa016
(init_callproc): Maybe add ../lib-src to exec-path
Richard M. Stallman <rms@gnu.org>
parents:
4977
diff
changeset
|
1705 Lisp_Object tempdir; |
e4e66bcaa016
(init_callproc): Maybe add ../lib-src to exec-path
Richard M. Stallman <rms@gnu.org>
parents:
4977
diff
changeset
|
1706 |
22373
cb8484085daf
(init_callproc): Check Vinstallation_directory even if !initialized.
Richard M. Stallman <rms@gnu.org>
parents:
22320
diff
changeset
|
1707 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
|
1708 { |
5618
a70dc7c886d0
(init_callproc): Use Vinstallation_directory.
Richard M. Stallman <rms@gnu.org>
parents:
5569
diff
changeset
|
1709 /* 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
|
1710 Lisp_Object tem; |
a70dc7c886d0
(init_callproc): Use Vinstallation_directory.
Richard M. Stallman <rms@gnu.org>
parents:
5569
diff
changeset
|
1711 tem = Fexpand_file_name (build_string ("lib-src"), |
a70dc7c886d0
(init_callproc): Use Vinstallation_directory.
Richard M. Stallman <rms@gnu.org>
parents:
5569
diff
changeset
|
1712 Vinstallation_directory); |
9786
7f4b72244919
(getenv_internal) [WINDOWSNT]: Use strnicmp, not bcmp.
Richard M. Stallman <rms@gnu.org>
parents:
9609
diff
changeset
|
1713 #ifndef DOS_NT |
7824
de1dfb8aea82
(init_callproc) [MSDOS]: Exclude less code, so ../etc
Richard M. Stallman <rms@gnu.org>
parents:
7782
diff
changeset
|
1714 /* 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
|
1715 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
|
1716 { |
56385cb63c61
(init_callproc): Set Vdata_directory based on the source
Richard M. Stallman <rms@gnu.org>
parents:
41528
diff
changeset
|
1717 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
|
1718 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
|
1719 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
|
1720 } |
49600
23a1cea22d13
Trailing whitespace deleted.
Juanma Barranquero <lekktu@gmail.com>
parents:
47018
diff
changeset
|
1721 |
24920
d95c8bcfe8ae
(init_callproc): Set exec_directory if installation_directory is
Richard M. Stallman <rms@gnu.org>
parents:
24432
diff
changeset
|
1722 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
|
1723 #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
|
1724 |
12615
d5db61e1a4ee
(init_callproc): Set Vdoc_directory based on
Richard M. Stallman <rms@gnu.org>
parents:
12430
diff
changeset
|
1725 /* 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
|
1726 if (data_dir == 0) |
d5db61e1a4ee
(init_callproc): Set Vdoc_directory based on
Richard M. Stallman <rms@gnu.org>
parents:
12430
diff
changeset
|
1727 { |
d5db61e1a4ee
(init_callproc): Set Vdoc_directory based on
Richard M. Stallman <rms@gnu.org>
parents:
12430
diff
changeset
|
1728 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
|
1729 Vinstallation_directory); |
d5db61e1a4ee
(init_callproc): Set Vdoc_directory based on
Richard M. Stallman <rms@gnu.org>
parents:
12430
diff
changeset
|
1730 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
|
1731 } |
e4e66bcaa016
(init_callproc): Maybe add ../lib-src to exec-path
Richard M. Stallman <rms@gnu.org>
parents:
4977
diff
changeset
|
1732 } |
7465
fccf9d4df7bb
(init_callproc): Never set Vdata_directory based on
Richard M. Stallman <rms@gnu.org>
parents:
7397
diff
changeset
|
1733 |
fccf9d4df7bb
(init_callproc): Never set Vdata_directory based on
Richard M. Stallman <rms@gnu.org>
parents:
7397
diff
changeset
|
1734 /* 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
|
1735 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
|
1736 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
|
1737 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
|
1738 |
fccf9d4df7bb
(init_callproc): Never set Vdata_directory based on
Richard M. Stallman <rms@gnu.org>
parents:
7397
diff
changeset
|
1739 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
|
1740 source directory. */ |
fccf9d4df7bb
(init_callproc): Never set Vdata_directory based on
Richard M. Stallman <rms@gnu.org>
parents:
7397
diff
changeset
|
1741 if (data_dir == 0) |
fccf9d4df7bb
(init_callproc): Never set Vdata_directory based on
Richard M. Stallman <rms@gnu.org>
parents:
7397
diff
changeset
|
1742 { |
41861
56385cb63c61
(init_callproc): Set Vdata_directory based on the source
Richard M. Stallman <rms@gnu.org>
parents:
41528
diff
changeset
|
1743 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
|
1744 |
41861
56385cb63c61
(init_callproc): Set Vdata_directory based on the source
Richard M. Stallman <rms@gnu.org>
parents:
41528
diff
changeset
|
1745 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
|
1746 build_string (PATH_DUMPLOADSEARCH)); |
7465
fccf9d4df7bb
(init_callproc): Never set Vdata_directory based on
Richard M. Stallman <rms@gnu.org>
parents:
7397
diff
changeset
|
1747 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
|
1748 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
|
1749 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
|
1750 { |
41861
56385cb63c61
(init_callproc): Set Vdata_directory based on the source
Richard M. Stallman <rms@gnu.org>
parents:
41528
diff
changeset
|
1751 Lisp_Object newdir; |
7465
fccf9d4df7bb
(init_callproc): Never set Vdata_directory based on
Richard M. Stallman <rms@gnu.org>
parents:
7397
diff
changeset
|
1752 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
|
1753 build_string (PATH_DUMPLOADSEARCH)); |
fccf9d4df7bb
(init_callproc): Never set Vdata_directory based on
Richard M. Stallman <rms@gnu.org>
parents:
7397
diff
changeset
|
1754 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
|
1755 tem1 = Ffile_exists_p (tem); |
fccf9d4df7bb
(init_callproc): Never set Vdata_directory based on
Richard M. Stallman <rms@gnu.org>
parents:
7397
diff
changeset
|
1756 if (!NILP (tem1)) |
fccf9d4df7bb
(init_callproc): Never set Vdata_directory based on
Richard M. Stallman <rms@gnu.org>
parents:
7397
diff
changeset
|
1757 Vdata_directory = newdir; |
fccf9d4df7bb
(init_callproc): Never set Vdata_directory based on
Richard M. Stallman <rms@gnu.org>
parents:
7397
diff
changeset
|
1758 } |
fccf9d4df7bb
(init_callproc): Never set Vdata_directory based on
Richard M. Stallman <rms@gnu.org>
parents:
7397
diff
changeset
|
1759 } |
296 | 1760 |
19498
34057e215ab1
(init_callproc): Don't warn about missing
Richard M. Stallman <rms@gnu.org>
parents:
19135
diff
changeset
|
1761 #ifndef CANNOT_DUMP |
34057e215ab1
(init_callproc): Don't warn about missing
Richard M. Stallman <rms@gnu.org>
parents:
19135
diff
changeset
|
1762 if (initialized) |
34057e215ab1
(init_callproc): Don't warn about missing
Richard M. Stallman <rms@gnu.org>
parents:
19135
diff
changeset
|
1763 #endif |
34057e215ab1
(init_callproc): Don't warn about missing
Richard M. Stallman <rms@gnu.org>
parents:
19135
diff
changeset
|
1764 { |
34057e215ab1
(init_callproc): Don't warn about missing
Richard M. Stallman <rms@gnu.org>
parents:
19135
diff
changeset
|
1765 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
|
1766 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
|
1767 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
|
1768 Vexec_directory); |
34057e215ab1
(init_callproc): Don't warn about missing
Richard M. Stallman <rms@gnu.org>
parents:
19135
diff
changeset
|
1769 } |
296 | 1770 |
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
|
1771 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
|
1772 if (access (SDATA (tempdir), 0) < 0) |
16486
30b8c014eaa7
(init_callproc): Use dir_warning.
Richard M. Stallman <rms@gnu.org>
parents:
15824
diff
changeset
|
1773 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
|
1774 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
|
1775 |
296 | 1776 #ifdef VMS |
1777 Vshell_file_name = build_string ("*dcl*"); | |
1778 #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
|
1779 sh = (char *) getenv ("SHELL"); |
296 | 1780 Vshell_file_name = build_string (sh ? sh : "/bin/sh"); |
1781 #endif | |
16627
530b3f7373db
(Vtemp_file_name_pattern): New variable.
Richard M. Stallman <rms@gnu.org>
parents:
16593
diff
changeset
|
1782 |
530b3f7373db
(Vtemp_file_name_pattern): New variable.
Richard M. Stallman <rms@gnu.org>
parents:
16593
diff
changeset
|
1783 #ifdef VMS |
530b3f7373db
(Vtemp_file_name_pattern): New variable.
Richard M. Stallman <rms@gnu.org>
parents:
16593
diff
changeset
|
1784 Vtemp_file_name_pattern = build_string ("tmp:emacsXXXXXX."); |
530b3f7373db
(Vtemp_file_name_pattern): New variable.
Richard M. Stallman <rms@gnu.org>
parents:
16593
diff
changeset
|
1785 #else |
530b3f7373db
(Vtemp_file_name_pattern): New variable.
Richard M. Stallman <rms@gnu.org>
parents:
16593
diff
changeset
|
1786 if (getenv ("TMPDIR")) |
530b3f7373db
(Vtemp_file_name_pattern): New variable.
Richard M. Stallman <rms@gnu.org>
parents:
16593
diff
changeset
|
1787 { |
530b3f7373db
(Vtemp_file_name_pattern): New variable.
Richard M. Stallman <rms@gnu.org>
parents:
16593
diff
changeset
|
1788 char *dir = getenv ("TMPDIR"); |
530b3f7373db
(Vtemp_file_name_pattern): New variable.
Richard M. Stallman <rms@gnu.org>
parents:
16593
diff
changeset
|
1789 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
|
1790 = 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
|
1791 build_string (dir)); |
16627
530b3f7373db
(Vtemp_file_name_pattern): New variable.
Richard M. Stallman <rms@gnu.org>
parents:
16593
diff
changeset
|
1792 } |
530b3f7373db
(Vtemp_file_name_pattern): New variable.
Richard M. Stallman <rms@gnu.org>
parents:
16593
diff
changeset
|
1793 else |
530b3f7373db
(Vtemp_file_name_pattern): New variable.
Richard M. Stallman <rms@gnu.org>
parents:
16593
diff
changeset
|
1794 Vtemp_file_name_pattern = build_string ("/tmp/emacsXXXXXX"); |
530b3f7373db
(Vtemp_file_name_pattern): New variable.
Richard M. Stallman <rms@gnu.org>
parents:
16593
diff
changeset
|
1795 #endif |
46600
736bbb2f8711
(init_callproc): Set up Vshared_game_score_directory.
Richard M. Stallman <rms@gnu.org>
parents:
46546
diff
changeset
|
1796 |
46626
4173dcd87832
(init_callproc) [DOS_NT]: Initialize Vshared_game_score_directory to nil.
Juanma Barranquero <lekktu@gmail.com>
parents:
46600
diff
changeset
|
1797 #ifdef DOS_NT |
4173dcd87832
(init_callproc) [DOS_NT]: Initialize Vshared_game_score_directory to nil.
Juanma Barranquero <lekktu@gmail.com>
parents:
46600
diff
changeset
|
1798 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
|
1799 #else |
46600
736bbb2f8711
(init_callproc): Set up Vshared_game_score_directory.
Richard M. Stallman <rms@gnu.org>
parents:
46546
diff
changeset
|
1800 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
|
1801 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
|
1802 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
|
1803 #endif |
1912
f0d4fb2b9157
* callproc.c (delete_temp_file): Declare this to return
Jim Blandy <jimb@redhat.com>
parents:
1886
diff
changeset
|
1804 } |
f0d4fb2b9157
* callproc.c (delete_temp_file): Declare this to return
Jim Blandy <jimb@redhat.com>
parents:
1886
diff
changeset
|
1805 |
21514 | 1806 void |
83529
0d9e16eab053
Rework environment variable support. (Reported by Kalle Olavi Niemitalo and Noah Friedman.)
Karoly Lorentey <lorentey@elte.hu>
parents:
83518
diff
changeset
|
1807 set_initial_environment () |
1912
f0d4fb2b9157
* callproc.c (delete_temp_file): Declare this to return
Jim Blandy <jimb@redhat.com>
parents:
1886
diff
changeset
|
1808 { |
f0d4fb2b9157
* callproc.c (delete_temp_file): Declare this to return
Jim Blandy <jimb@redhat.com>
parents:
1886
diff
changeset
|
1809 register char **envp; |
296 | 1810 #ifndef CANNOT_DUMP |
1811 if (initialized) | |
1812 #endif | |
83529
0d9e16eab053
Rework environment variable support. (Reported by Kalle Olavi Niemitalo and Noah Friedman.)
Karoly Lorentey <lorentey@elte.hu>
parents:
83518
diff
changeset
|
1813 { |
0d9e16eab053
Rework environment variable support. (Reported by Kalle Olavi Niemitalo and Noah Friedman.)
Karoly Lorentey <lorentey@elte.hu>
parents:
83518
diff
changeset
|
1814 for (envp = environ; *envp; envp++) |
83640
2aee92eacdab
* server.el (server-process-filter): Likewise.
Dan Nicolaescu <dann@ics.uci.edu>
parents:
83556
diff
changeset
|
1815 Vprocess_environment = Fcons (build_string (*envp), |
2aee92eacdab
* server.el (server-process-filter): Likewise.
Dan Nicolaescu <dann@ics.uci.edu>
parents:
83556
diff
changeset
|
1816 Vprocess_environment); |
2aee92eacdab
* server.el (server-process-filter): Likewise.
Dan Nicolaescu <dann@ics.uci.edu>
parents:
83556
diff
changeset
|
1817 store_frame_param (SELECTED_FRAME(), Qenvironment, Vprocess_environment); |
83799
6aa4d1effd67
(set_initial_environment): Set Vinitial_environment only when
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
83796
diff
changeset
|
1818 /* 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
|
1819 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
|
1820 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
|
1821 } |
296 | 1822 } |
1823 | |
21514 | 1824 void |
296 | 1825 syms_of_callproc () |
1826 { | |
9786
7f4b72244919
(getenv_internal) [WINDOWSNT]: Use strnicmp, not bcmp.
Richard M. Stallman <rms@gnu.org>
parents:
9609
diff
changeset
|
1827 #ifdef DOS_NT |
7397
e0ffa47f2ed4
[MSDOS]: Rename Vbinary_process to Vbinary_process_output.
Richard M. Stallman <rms@gnu.org>
parents:
7161
diff
changeset
|
1828 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
|
1829 staticpro (&Qbuffer_file_type); |
9786
7f4b72244919
(getenv_internal) [WINDOWSNT]: Use strnicmp, not bcmp.
Richard M. Stallman <rms@gnu.org>
parents:
9609
diff
changeset
|
1830 #endif /* DOS_NT */ |
5501
902cd7024cfa
(syms_of_callproc) [MSDOS]: New lisp variable: binary-process.
Richard M. Stallman <rms@gnu.org>
parents:
5348
diff
changeset
|
1831 |
296 | 1832 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
|
1833 doc: /* *File name to load inferior shells from. |
74836 | 1834 Initialized from the SHELL environment variable, or to a system-dependent |
1835 default if SHELL is not set. */); | |
296 | 1836 |
1837 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
|
1838 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
|
1839 Each element is a string (directory name) or nil (try default directory). */); |
296 | 1840 |
39811
9f7e72fba3d2
(Vexec_suffixes): New var.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
39535
diff
changeset
|
1841 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
|
1842 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
|
1843 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
|
1844 Vexec_suffixes = Qnil; |
39811
9f7e72fba3d2
(Vexec_suffixes): New var.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
39535
diff
changeset
|
1845 |
296 | 1846 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
|
1847 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
|
1848 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
|
1849 that are built and installed from the Emacs distribution. */); |
439 | 1850 |
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
|
1851 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
|
1852 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
|
1853 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
|
1854 |
6031
ae4c6623837b
(syms_of_callproc): New variable Vdoc_directory.
Karl Heuer <kwzh@gnu.org>
parents:
5688
diff
changeset
|
1855 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
|
1856 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
|
1857 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
|
1858 |
3064
fa5466904709
* paths.h (PATH_INFO): New path, to edited by the configuration
Jim Blandy <jimb@redhat.com>
parents:
2961
diff
changeset
|
1859 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
|
1860 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
|
1861 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
|
1862 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
|
1863 includes this. */); |
3064
fa5466904709
* paths.h (PATH_INFO): New path, to edited by the configuration
Jim Blandy <jimb@redhat.com>
parents:
2961
diff
changeset
|
1864 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
|
1865 |
45092
7f1d09693ef3
(Vgame_score_directory): Renamed to Vshared_game_score_directory.
Colin Walters <walters@gnu.org>
parents:
45002
diff
changeset
|
1866 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
|
1867 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
|
1868 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
|
1869 #ifdef DOS_NT |
4173dcd87832
(init_callproc) [DOS_NT]: Initialize Vshared_game_score_directory to nil.
Juanma Barranquero <lekktu@gmail.com>
parents:
46600
diff
changeset
|
1870 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
|
1871 #else |
46600
736bbb2f8711
(init_callproc): Set up Vshared_game_score_directory.
Richard M. Stallman <rms@gnu.org>
parents:
46546
diff
changeset
|
1872 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
|
1873 #endif |
44486
7b98c268f335
(Vgame_score_directory): New variable.
Colin Walters <walters@gnu.org>
parents:
43713
diff
changeset
|
1874 |
16627
530b3f7373db
(Vtemp_file_name_pattern): New variable.
Richard M. Stallman <rms@gnu.org>
parents:
16593
diff
changeset
|
1875 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
|
1876 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
|
1877 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
|
1878 /* 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
|
1879 |
83796
e7303426ed25
(Vinitial_environment): New variable.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
83652
diff
changeset
|
1880 DEFVAR_LISP ("initial-environment", &Vinitial_environment, |
e7303426ed25
(Vinitial_environment): New variable.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
83652
diff
changeset
|
1881 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
|
1882 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
|
1883 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
|
1884 Vinitial_environment = Qnil; |
e7303426ed25
(Vinitial_environment): New variable.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
83652
diff
changeset
|
1885 |
296 | 1886 DEFVAR_LISP ("process-environment", &Vprocess_environment, |
83425
c82829d08b89
Fix semantics of let-binding `process-environment'.
Karoly Lorentey <lorentey@elte.hu>
parents:
83422
diff
changeset
|
1887 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
|
1888 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
|
1889 |
83529
0d9e16eab053
Rework environment variable support. (Reported by Kalle Olavi Niemitalo and Noah Friedman.)
Karoly Lorentey <lorentey@elte.hu>
parents:
83518
diff
changeset
|
1890 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
|
1891 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
|
1892 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
|
1893 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
|
1894 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
|
1895 without "=VALUE". |
83425
c82829d08b89
Fix semantics of let-binding `process-environment'.
Karoly Lorentey <lorentey@elte.hu>
parents:
83422
diff
changeset
|
1896 |
c82829d08b89
Fix semantics of let-binding `process-environment'.
Karoly Lorentey <lorentey@elte.hu>
parents:
83422
diff
changeset
|
1897 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
|
1898 |
40103
6b389fb978bc
Change doc-string comments to `new style' [w/`doc:' keyword].
Pavel Janík <Pavel@Janik.cz>
parents:
39934
diff
changeset
|
1899 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
|
1900 takes precedence. |
83425
c82829d08b89
Fix semantics of let-binding `process-environment'.
Karoly Lorentey <lorentey@elte.hu>
parents:
83422
diff
changeset
|
1901 |
51403 | 1902 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
|
1903 `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
|
1904 use. |
c82829d08b89
Fix semantics of let-binding `process-environment'.
Karoly Lorentey <lorentey@elte.hu>
parents:
83422
diff
changeset
|
1905 |
51403 | 1906 See `setenv' and `getenv'. */); |
83426
7c7d1f1cb2e7
Initialize Vprocess_environment to nil.
Karoly Lorentey <lorentey@elte.hu>
parents:
83425
diff
changeset
|
1907 Vprocess_environment = Qnil; |
296 | 1908 |
1909 #ifndef VMS | |
1910 defsubr (&Scall_process); | |
28914
45b919961573
(Fgetenv_internal): Renamed from Fgetenv.
Gerd Moellmann <gerd@gnu.org>
parents:
26838
diff
changeset
|
1911 defsubr (&Sgetenv_internal); |
296 | 1912 #endif |
1913 defsubr (&Scall_process_region); | |
1914 } | |
52401 | 1915 |
1916 /* arch-tag: 769b8045-1df7-4d2b-8968-e3fb49017f95 | |
1917 (do not change this comment) */ |