annotate src/callproc.c @ 83529:0d9e16eab053

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