annotate src/callproc.c @ 87651:d197b59d36b5

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