annotate src/callproc.c @ 91322:fc05151881d9

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