* process.c (wait_reading_process_output): Always check status
[bpt/emacs.git] / src / process.c
CommitLineData
d0d6b7c5 1/* Asynchronous subprocess control for GNU Emacs.
0b5538bd
TTN
2 Copyright (C) 1985, 1986, 1987, 1988, 1993, 1994, 1995,
3 1996, 1998, 1999, 2001, 2002, 2003, 2004,
8cabe764 4 2005, 2006, 2007, 2008 Free Software Foundation, Inc.
d0d6b7c5
JB
5
6This file is part of GNU Emacs.
7
9ec0b715 8GNU Emacs is free software: you can redistribute it and/or modify
d0d6b7c5 9it under the terms of the GNU General Public License as published by
9ec0b715
GM
10the Free Software Foundation, either version 3 of the License, or
11(at your option) any later version.
d0d6b7c5
JB
12
13GNU Emacs is distributed in the hope that it will be useful,
14but WITHOUT ANY WARRANTY; without even the implied warranty of
15MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
16GNU General Public License for more details.
17
18You should have received a copy of the GNU General Public License
9ec0b715 19along with GNU Emacs. If not, see <http://www.gnu.org/licenses/>. */
d0d6b7c5
JB
20
21
18160b98 22#include <config.h>
68c45bf0
PE
23#include <signal.h>
24
6720a7fb
JB
25/* This file is split into two parts by the following preprocessor
26 conditional. The 'then' clause contains all of the support for
27 asynchronous subprocesses. The 'else' clause contains stub
28 versions of some of the asynchronous subprocess routines that are
29 often called elsewhere in Emacs, so we don't have to #ifdef the
30 sections that call them. */
31
32\f
d0d6b7c5 33#ifdef subprocesses
d0d6b7c5
JB
34
35#include <stdio.h>
36#include <errno.h>
37#include <setjmp.h>
38#include <sys/types.h> /* some typedefs are used in sys/file.h */
39#include <sys/file.h>
40#include <sys/stat.h>
2026418c
YM
41#ifdef HAVE_INTTYPES_H
42#include <inttypes.h>
43#endif
93b4f699
RS
44#ifdef HAVE_UNISTD_H
45#include <unistd.h>
46#endif
d0d6b7c5 47
f22ac298 48#if defined(WINDOWSNT) || defined(UNIX98_PTYS)
e98d950b
RS
49#include <stdlib.h>
50#include <fcntl.h>
51#endif /* not WINDOWSNT */
52
d0d6b7c5
JB
53#ifdef HAVE_SOCKETS /* TCP connection support, if kernel can do it */
54#include <sys/socket.h>
55#include <netdb.h>
56#include <netinet/in.h>
57#include <arpa/inet.h>
e690ca94
KS
58
59/* Are local (unix) sockets supported? */
4624371d 60#if defined (HAVE_SYS_UN_H)
e690ca94
KS
61#if !defined (AF_LOCAL) && defined (AF_UNIX)
62#define AF_LOCAL AF_UNIX
63#endif
64#ifdef AF_LOCAL
65#define HAVE_LOCAL_SOCKETS
66#include <sys/un.h>
67#endif
68#endif
d0d6b7c5
JB
69#endif /* HAVE_SOCKETS */
70
827a1788 71/* TERM is a poor-man's SLIP, used on GNU/Linux. */
1d2c16fa
RS
72#ifdef TERM
73#include <client.h>
74#endif
75
e39a993c 76#if defined(BSD_SYSTEM)
d0d6b7c5 77#include <sys/ioctl.h>
0ad77c54 78#if !defined (O_NDELAY) && defined (HAVE_PTYS) && !defined(USG5)
d0d6b7c5
JB
79#include <fcntl.h>
80#endif /* HAVE_PTYS and no O_NDELAY */
e39a993c 81#endif /* BSD_SYSTEM */
d0d6b7c5 82
99e3d726
RS
83#ifdef BROKEN_O_NONBLOCK
84#undef O_NONBLOCK
85#endif /* BROKEN_O_NONBLOCK */
86
d0d6b7c5
JB
87#ifdef NEED_BSDTTY
88#include <bsdtty.h>
89#endif
90
6b61353c
KH
91/* Can we use SIOCGIFCONF and/or SIOCGIFADDR */
92#ifdef HAVE_SOCKETS
93#if defined(HAVE_SYS_IOCTL_H) && defined(HAVE_NET_IF_H)
94/* sys/ioctl.h may have been included already */
95#ifndef SIOCGIFADDR
96#include <sys/ioctl.h>
97#endif
98#include <net/if.h>
99#endif
100#endif
101
d0d6b7c5
JB
102#ifdef IRIS
103#include <sys/sysmacros.h> /* for "minor" */
104#endif /* not IRIS */
177c0ea7 105
e62cab61
DL
106#ifdef HAVE_SYS_WAIT
107#include <sys/wait.h>
108#endif
d0d6b7c5 109
08116b48
CY
110#ifdef HAVE_RES_INIT
111#include <netinet/in.h>
112#include <arpa/nameser.h>
113#include <resolv.h>
114#endif
115
fa8459a3 116#include "lisp.h"
d0d6b7c5 117#include "systime.h"
36ebaafa 118#include "systty.h"
d0d6b7c5 119
d0d6b7c5
JB
120#include "window.h"
121#include "buffer.h"
5bbf78c1 122#include "character.h"
0fa1789e 123#include "coding.h"
d0d6b7c5 124#include "process.h"
428a555e 125#include "frame.h"
d0d6b7c5
JB
126#include "termhooks.h"
127#include "termopts.h"
128#include "commands.h"
3ec68006 129#include "keyboard.h"
ececcbec 130#include "blockinput.h"
dfcf069d 131#include "dispextern.h"
e0016554 132#include "composite.h"
30904ab7 133#include "atimer.h"
d0d6b7c5 134
dd2281ae 135Lisp_Object Qprocessp;
324e68ba 136Lisp_Object Qrun, Qstop, Qsignal;
e690ca94 137Lisp_Object Qopen, Qclosed, Qconnect, Qfailed, Qlisten;
e1652a86
KS
138Lisp_Object Qlocal, Qipv4, Qdatagram;
139#ifdef AF_INET6
140Lisp_Object Qipv6;
141#endif
9057ff80 142Lisp_Object QCname, QCbuffer, QChost, QCservice, QCtype;
e690ca94 143Lisp_Object QClocal, QCremote, QCcoding;
9057ff80 144Lisp_Object QCserver, QCnowait, QCnoquery, QCstop;
faa7db08 145Lisp_Object QCsentinel, QClog, QCoptions, QCplist;
6545aada 146Lisp_Object Qlast_nonmenu_event;
3635ecad
JR
147/* QCfamily is declared and initialized in xfaces.c,
148 QCfilter in keyboard.c. */
149extern Lisp_Object QCfamily, QCfilter;
150
d0d6b7c5
JB
151/* Qexit is declared and initialized in eval.c. */
152
e0f712ba
AC
153/* QCfamily is defined in xfaces.c. */
154extern Lisp_Object QCfamily;
155/* QCfilter is defined in keyboard.c. */
156extern Lisp_Object QCfilter;
157
d0d6b7c5 158/* a process object is a network connection when its childp field is neither
365aee82 159 Qt nor Qnil but is instead a property list (KEY VAL ...). */
d0d6b7c5
JB
160
161#ifdef HAVE_SOCKETS
8e50cc2d
SM
162#define NETCONN_P(p) (CONSP (XPROCESS (p)->childp))
163#define NETCONN1_P(p) (CONSP ((p)->childp))
d0d6b7c5
JB
164#else
165#define NETCONN_P(p) 0
e690ca94 166#define NETCONN1_P(p) 0
d0d6b7c5
JB
167#endif /* HAVE_SOCKETS */
168
169/* Define first descriptor number available for subprocesses. */
170#ifdef VMS
171#define FIRST_PROC_DESC 1
172#else /* Not VMS */
173#define FIRST_PROC_DESC 3
174#endif
175
176/* Define SIGCHLD as an alias for SIGCLD. There are many conditionals
177 testing SIGCHLD. */
178
179#if !defined (SIGCHLD) && defined (SIGCLD)
180#define SIGCHLD SIGCLD
181#endif /* SIGCLD */
182
183#include "syssignal.h"
184
889255b4 185#include "syswait.h"
d0d6b7c5 186
d9e7c622 187extern char *get_operating_system_release ();
41d03b9a 188
3ec68006 189#ifndef USE_CRT_DLL
b062d1fe 190extern int errno;
3ec68006 191#endif
b062d1fe 192#ifdef VMS
d0d6b7c5 193extern char *sys_errlist[];
b062d1fe 194#endif
d0d6b7c5 195
5f0929a7
RS
196#ifndef HAVE_H_ERRNO
197extern int h_errno;
198#endif
199
d0d6b7c5
JB
200/* t means use pty, nil means use a pipe,
201 maybe other values to come. */
dd2281ae 202static Lisp_Object Vprocess_connection_type;
d0d6b7c5 203
17d02632
KH
204/* These next two vars are non-static since sysdep.c uses them in the
205 emulation of `select'. */
d0d6b7c5 206/* Number of events of change of status of a process. */
17d02632 207int process_tick;
d0d6b7c5 208/* Number of events for which the user or sentinel has been notified. */
17d02632 209int update_tick;
d0d6b7c5 210
dd2a17ab
KS
211/* Define NON_BLOCKING_CONNECT if we can support non-blocking connects. */
212
213#ifdef BROKEN_NON_BLOCKING_CONNECT
214#undef NON_BLOCKING_CONNECT
215#else
216#ifndef NON_BLOCKING_CONNECT
217#ifdef HAVE_SOCKETS
218#ifdef HAVE_SELECT
219#if defined (HAVE_GETPEERNAME) || defined (GNU_LINUX)
220#if defined (O_NONBLOCK) || defined (O_NDELAY)
221#if defined (EWOULDBLOCK) || defined (EINPROGRESS)
222#define NON_BLOCKING_CONNECT
223#endif /* EWOULDBLOCK || EINPROGRESS */
224#endif /* O_NONBLOCK || O_NDELAY */
225#endif /* HAVE_GETPEERNAME || GNU_LINUX */
226#endif /* HAVE_SELECT */
227#endif /* HAVE_SOCKETS */
228#endif /* NON_BLOCKING_CONNECT */
229#endif /* BROKEN_NON_BLOCKING_CONNECT */
230
e690ca94
KS
231/* Define DATAGRAM_SOCKETS if datagrams can be used safely on
232 this system. We need to read full packets, so we need a
233 "non-destructive" select. So we require either native select,
234 or emulation of select using FIONREAD. */
235
e690ca94
KS
236#ifdef BROKEN_DATAGRAM_SOCKETS
237#undef DATAGRAM_SOCKETS
238#else
239#ifndef DATAGRAM_SOCKETS
240#ifdef HAVE_SOCKETS
241#if defined (HAVE_SELECT) || defined (FIONREAD)
242#if defined (HAVE_SENDTO) && defined (HAVE_RECVFROM) && defined (EMSGSIZE)
243#define DATAGRAM_SOCKETS
244#endif /* HAVE_SENDTO && HAVE_RECVFROM && EMSGSIZE */
245#endif /* HAVE_SELECT || FIONREAD */
246#endif /* HAVE_SOCKETS */
247#endif /* DATAGRAM_SOCKETS */
248#endif /* BROKEN_DATAGRAM_SOCKETS */
249
dd2a17ab
KS
250#ifdef TERM
251#undef NON_BLOCKING_CONNECT
e690ca94 252#undef DATAGRAM_SOCKETS
dd2a17ab
KS
253#endif
254
6b61353c
KH
255#if !defined (ADAPTIVE_READ_BUFFERING) && !defined (NO_ADAPTIVE_READ_BUFFERING)
256#ifdef EMACS_HAS_USECS
257#define ADAPTIVE_READ_BUFFERING
258#endif
259#endif
260
261#ifdef ADAPTIVE_READ_BUFFERING
262#define READ_OUTPUT_DELAY_INCREMENT 10000
263#define READ_OUTPUT_DELAY_MAX (READ_OUTPUT_DELAY_INCREMENT * 5)
264#define READ_OUTPUT_DELAY_MAX_MAX (READ_OUTPUT_DELAY_INCREMENT * 7)
265
db853b7a
KS
266/* Number of processes which have a non-zero read_output_delay,
267 and therefore might be delayed for adaptive read buffering. */
6b61353c
KH
268
269static int process_output_delay_count;
270
db853b7a 271/* Non-zero if any process has non-nil read_output_skip. */
6b61353c
KH
272
273static int process_output_skip;
274
275/* Non-nil means to delay reading process output to improve buffering.
276 A value of t means that delay is reset after each send, any other
db853b7a
KS
277 non-nil value does not reset the delay. A value of nil disables
278 adaptive read buffering completely. */
6b61353c
KH
279static Lisp_Object Vprocess_adaptive_read_buffering;
280#else
281#define process_output_delay_count 0
282#endif
283
e690ca94 284
5886acf9 285#include "sysselect.h"
d0d6b7c5 286
ff6daed3
KS
287static int keyboard_bit_set P_ ((SELECT_TYPE *));
288static void deactivate_process P_ ((Lisp_Object));
289static void status_notify P_ ((struct Lisp_Process *));
290static int read_process_output P_ ((Lisp_Object, int));
41d03b9a 291
583dcae4 292/* If we support a window system, turn on the code to poll periodically
44ade2e9 293 to detect C-g. It isn't actually used when doing interrupt input. */
583dcae4 294#ifdef HAVE_WINDOW_SYSTEM
44ade2e9
RS
295#define POLL_FOR_INPUT
296#endif
297
84af9896
RS
298static Lisp_Object get_process ();
299static void exec_sentinel ();
300
301extern EMACS_TIME timer_check ();
302extern int timers_run;
303\f
a69281ff 304/* Mask of bits indicating the descriptors that we wait for input on. */
d0d6b7c5 305
dd2281ae
RS
306static SELECT_TYPE input_wait_mask;
307
994d9841 308/* Mask that excludes keyboard input descriptor(s). */
a69281ff
RS
309
310static SELECT_TYPE non_keyboard_wait_mask;
311
994d9841 312/* Mask that excludes process input descriptor(s). */
b5dc1c83
RS
313
314static SELECT_TYPE non_process_wait_mask;
315
994d9841
NR
316/* Mask for the gpm mouse input descriptor. */
317
318static SELECT_TYPE gpm_wait_mask;
319
bad49fc7 320#ifdef NON_BLOCKING_CONNECT
dd2a17ab
KS
321/* Mask of bits indicating the descriptors that we wait for connect to
322 complete on. Once they complete, they are removed from this mask
323 and added to the input_wait_mask and non_keyboard_wait_mask. */
324
325static SELECT_TYPE connect_wait_mask;
326
327/* Number of bits set in connect_wait_mask. */
328static int num_pending_connects;
329
bad49fc7
KS
330#define IF_NON_BLOCKING_CONNECT(s) s
331#else
332#define IF_NON_BLOCKING_CONNECT(s)
333#endif
334
7d0e672e
RS
335/* The largest descriptor currently in use for a process object. */
336static int max_process_desc;
337
a69281ff
RS
338/* The largest descriptor currently in use for keyboard input. */
339static int max_keyboard_desc;
d0d6b7c5 340
994d9841
NR
341/* The largest descriptor currently in use for gpm mouse input. */
342static int max_gpm_desc;
343
dd2281ae
RS
344/* Nonzero means delete a process right away if it exits. */
345static int delete_exited_processes;
d0d6b7c5
JB
346
347/* Indexed by descriptor, gives the process (if any) for that descriptor */
41f3aa98 348Lisp_Object chan_process[MAXDESC];
d0d6b7c5
JB
349
350/* Alist of elements (NAME . PROCESS) */
41f3aa98 351Lisp_Object Vprocess_alist;
d0d6b7c5
JB
352
353/* Buffered-ahead input char from process, indexed by channel.
354 -1 means empty (no char is buffered).
355 Used on sys V where the only way to tell if there is any
356 output from the process is to read at least one char.
357 Always -1 on systems that support FIONREAD. */
358
e98d950b
RS
359/* Don't make static; need to access externally. */
360int proc_buffered_char[MAXDESC];
dd2281ae 361
0fa1789e 362/* Table of `struct coding-system' for each process. */
c7580538
KH
363static struct coding_system *proc_decode_coding_system[MAXDESC];
364static struct coding_system *proc_encode_coding_system[MAXDESC];
0fa1789e 365
e690ca94
KS
366#ifdef DATAGRAM_SOCKETS
367/* Table of `partner address' for datagram sockets. */
368struct sockaddr_and_len {
369 struct sockaddr *sa;
370 int len;
371} datagram_address[MAXDESC];
372#define DATAGRAM_CHAN_P(chan) (datagram_address[chan].sa != 0)
60f0fb11 373#define DATAGRAM_CONN_P(proc) (PROCESSP (proc) && datagram_address[XPROCESS (proc)->infd].sa != 0)
e690ca94
KS
374#else
375#define DATAGRAM_CHAN_P(chan) (0)
376#define DATAGRAM_CONN_P(proc) (0)
377#endif
378
93b4f699
RS
379/* Maximum number of bytes to send to a pty without an eof. */
380static int pty_max_bytes;
3b9a3dfa 381
84af9896
RS
382/* Nonzero means don't run process sentinels. This is used
383 when exiting. */
384int inhibit_sentinels;
385
875e6b94 386#ifdef HAVE_PTYS
e62cab61
DL
387#ifdef HAVE_PTY_H
388#include <pty.h>
389#endif
875e6b94 390/* The file name of the pty opened by allocate_pty. */
3b9a3dfa
RS
391
392static char pty_name[24];
875e6b94 393#endif
d0d6b7c5
JB
394\f
395/* Compute the Lisp form of the process status, p->status, from
396 the numeric status that was returned by `wait'. */
397
ff6daed3 398static Lisp_Object status_convert ();
f9738840 399
ff6daed3 400static void
d0d6b7c5
JB
401update_status (p)
402 struct Lisp_Process *p;
403{
404 union { int i; WAITTYPE wt; } u;
6bfd98e7
SM
405 eassert (p->raw_status_new);
406 u.i = p->raw_status;
d0d6b7c5 407 p->status = status_convert (u.wt);
6bfd98e7 408 p->raw_status_new = 0;
d0d6b7c5
JB
409}
410
177c0ea7 411/* Convert a process status word in Unix format to
d0d6b7c5
JB
412 the list that we use internally. */
413
ff6daed3 414static Lisp_Object
d0d6b7c5
JB
415status_convert (w)
416 WAITTYPE w;
417{
418 if (WIFSTOPPED (w))
419 return Fcons (Qstop, Fcons (make_number (WSTOPSIG (w)), Qnil));
420 else if (WIFEXITED (w))
421 return Fcons (Qexit, Fcons (make_number (WRETCODE (w)),
422 WCOREDUMP (w) ? Qt : Qnil));
423 else if (WIFSIGNALED (w))
424 return Fcons (Qsignal, Fcons (make_number (WTERMSIG (w)),
425 WCOREDUMP (w) ? Qt : Qnil));
426 else
427 return Qrun;
428}
429
430/* Given a status-list, extract the three pieces of information
431 and store them individually through the three pointers. */
432
ff6daed3 433static void
d0d6b7c5
JB
434decode_status (l, symbol, code, coredump)
435 Lisp_Object l;
436 Lisp_Object *symbol;
437 int *code;
438 int *coredump;
439{
440 Lisp_Object tem;
441
bcd69aea 442 if (SYMBOLP (l))
d0d6b7c5
JB
443 {
444 *symbol = l;
445 *code = 0;
446 *coredump = 0;
447 }
448 else
449 {
70949dac
KR
450 *symbol = XCAR (l);
451 tem = XCDR (l);
452 *code = XFASTINT (XCAR (tem));
453 tem = XCDR (tem);
d0d6b7c5
JB
454 *coredump = !NILP (tem);
455 }
456}
457
458/* Return a string describing a process status list. */
459
116c423c
KS
460static Lisp_Object
461status_message (p)
462 struct Lisp_Process *p;
d0d6b7c5 463{
116c423c 464 Lisp_Object status = p->status;
d0d6b7c5
JB
465 Lisp_Object symbol;
466 int code, coredump;
467 Lisp_Object string, string2;
468
469 decode_status (status, &symbol, &code, &coredump);
470
471 if (EQ (symbol, Qsignal) || EQ (symbol, Qstop))
472 {
68c45bf0 473 char *signame;
ca9c0567 474 synchronize_system_messages_locale ();
68c45bf0 475 signame = strsignal (code);
b97ad9ea
RS
476 if (signame == 0)
477 signame = "unknown";
478 string = build_string (signame);
d0d6b7c5 479 string2 = build_string (coredump ? " (core dumped)\n" : "\n");
a814cc69 480 SSET (string, 0, DOWNCASE (SREF (string, 0)));
d0d6b7c5
JB
481 return concat2 (string, string2);
482 }
483 else if (EQ (symbol, Qexit))
484 {
116c423c
KS
485 if (NETCONN1_P (p))
486 return build_string (code == 0 ? "deleted\n" : "connection broken by remote peer\n");
d0d6b7c5
JB
487 if (code == 0)
488 return build_string ("finished\n");
f2980264 489 string = Fnumber_to_string (make_number (code));
d0d6b7c5 490 string2 = build_string (coredump ? " (core dumped)\n" : "\n");
e690ca94
KS
491 return concat3 (build_string ("exited abnormally with code "),
492 string, string2);
d0d6b7c5 493 }
dd2a17ab
KS
494 else if (EQ (symbol, Qfailed))
495 {
496 string = Fnumber_to_string (make_number (code));
497 string2 = build_string ("\n");
e690ca94
KS
498 return concat3 (build_string ("failed with code "),
499 string, string2);
dd2a17ab 500 }
d0d6b7c5
JB
501 else
502 return Fcopy_sequence (Fsymbol_name (symbol));
503}
504\f
505#ifdef HAVE_PTYS
d0d6b7c5 506
875e6b94
KH
507/* Open an available pty, returning a file descriptor.
508 Return -1 on failure.
509 The file name of the terminal corresponding to the pty
510 is left in the variable pty_name. */
511
ff6daed3 512static int
d0d6b7c5
JB
513allocate_pty ()
514{
dfcf069d 515 register int c, i;
d0d6b7c5
JB
516 int fd;
517
518#ifdef PTY_ITERATION
519 PTY_ITERATION
520#else
521 for (c = FIRST_PTY_LETTER; c <= 'z'; c++)
522 for (i = 0; i < 16; i++)
523#endif
524 {
26d7389d 525 struct stat stb; /* Used in some PTY_OPEN. */
d0d6b7c5
JB
526#ifdef PTY_NAME_SPRINTF
527 PTY_NAME_SPRINTF
d0d6b7c5
JB
528#else
529 sprintf (pty_name, "/dev/pty%c%x", c, i);
d0d6b7c5
JB
530#endif /* no PTY_NAME_SPRINTF */
531
4d7c105e
RS
532#ifdef PTY_OPEN
533 PTY_OPEN;
534#else /* no PTY_OPEN */
34967d0f 535 {
34967d0f
SM
536# ifdef IRIS
537 /* Unusual IRIS code */
538 *ptyv = emacs_open ("/dev/ptc", O_RDWR | O_NDELAY, 0);
539 if (fd < 0)
540 return -1;
541 if (fstat (fd, &stb) < 0)
542 return -1;
543# else /* not IRIS */
544 { /* Some systems name their pseudoterminals so that there are gaps in
545 the usual sequence - for example, on HP9000/S700 systems, there
546 are no pseudoterminals with names ending in 'f'. So we wait for
547 three failures in a row before deciding that we've reached the
548 end of the ptys. */
549 int failed_count = 0;
f3d9532b 550
34967d0f
SM
551 if (stat (pty_name, &stb) < 0)
552 {
553 failed_count++;
554 if (failed_count >= 3)
555 return -1;
556 }
557 else
558 failed_count = 0;
32676c08 559 }
34967d0f
SM
560# ifdef O_NONBLOCK
561 fd = emacs_open (pty_name, O_RDWR | O_NONBLOCK, 0);
562# else
563 fd = emacs_open (pty_name, O_RDWR | O_NDELAY, 0);
564# endif
565# endif /* not IRIS */
566 }
4d7c105e 567#endif /* no PTY_OPEN */
d0d6b7c5
JB
568
569 if (fd >= 0)
570 {
571 /* check to make certain that both sides are available
572 this avoids a nasty yet stupid bug in rlogins */
573#ifdef PTY_TTY_NAME_SPRINTF
574 PTY_TTY_NAME_SPRINTF
d0d6b7c5
JB
575#else
576 sprintf (pty_name, "/dev/tty%c%x", c, i);
d0d6b7c5 577#endif /* no PTY_TTY_NAME_SPRINTF */
d0d6b7c5
JB
578 if (access (pty_name, 6) != 0)
579 {
68c45bf0 580 emacs_close (fd);
34967d0f 581# if !defined(IRIS) && !defined(__sgi)
d0d6b7c5 582 continue;
34967d0f 583# else
d0d6b7c5 584 return -1;
34967d0f 585# endif /* IRIS */
d0d6b7c5 586 }
d0d6b7c5
JB
587 setup_pty (fd);
588 return fd;
589 }
590 }
591 return -1;
592}
593#endif /* HAVE_PTYS */
594\f
ff6daed3 595static Lisp_Object
d0d6b7c5
JB
596make_process (name)
597 Lisp_Object name;
598{
599 register Lisp_Object val, tem, name1;
600 register struct Lisp_Process *p;
601 char suffix[10];
602 register int i;
603
98423852 604 p = allocate_process ();
23d6bb9c 605
60f0fb11
SM
606 p->infd = -1;
607 p->outfd = -1;
608 p->tick = 0;
609 p->update_tick = 0;
6bfd98e7 610 p->pid = 0;
fd41ad98 611 p->pty_flag = 0;
6bfd98e7 612 p->raw_status_new = 0;
d0d6b7c5
JB
613 p->status = Qrun;
614 p->mark = Fmake_marker ();
615
6b61353c 616#ifdef ADAPTIVE_READ_BUFFERING
60f0fb11
SM
617 p->adaptive_read_buffering = 0;
618 p->read_output_delay = 0;
619 p->read_output_skip = 0;
6b61353c
KH
620#endif
621
d0d6b7c5
JB
622 /* If name is already in use, modify it until it is unused. */
623
624 name1 = name;
625 for (i = 1; ; i++)
626 {
627 tem = Fget_process (name1);
628 if (NILP (tem)) break;
629 sprintf (suffix, "<%d>", i);
630 name1 = concat2 (name, build_string (suffix));
631 }
632 name = name1;
633 p->name = name;
23d6bb9c 634 XSETPROCESS (val, p);
d0d6b7c5
JB
635 Vprocess_alist = Fcons (Fcons (name, val), Vprocess_alist);
636 return val;
637}
638
ff6daed3 639static void
d0d6b7c5
JB
640remove_process (proc)
641 register Lisp_Object proc;
642{
643 register Lisp_Object pair;
644
645 pair = Frassq (proc, Vprocess_alist);
646 Vprocess_alist = Fdelq (pair, Vprocess_alist);
d0d6b7c5
JB
647
648 deactivate_process (proc);
649}
03f04413
KH
650
651/* Setup coding systems of PROCESS. */
652
653void
654setup_process_coding_systems (process)
655 Lisp_Object process;
656{
657 struct Lisp_Process *p = XPROCESS (process);
60f0fb11
SM
658 int inch = p->infd;
659 int outch = p->outfd;
8f924df7 660 Lisp_Object coding_system;
03f04413 661
20f1ef2e
KH
662 if (inch < 0 || outch < 0)
663 return;
664
03f04413
KH
665 if (!proc_decode_coding_system[inch])
666 proc_decode_coding_system[inch]
667 = (struct coding_system *) xmalloc (sizeof (struct coding_system));
8f924df7 668 coding_system = p->decode_coding_system;
03f04413 669 if (! NILP (p->filter))
5431bd6a 670 ;
03f04413
KH
671 else if (BUFFERP (p->buffer))
672 {
673 if (NILP (XBUFFER (p->buffer)->enable_multibyte_characters))
8f924df7 674 coding_system = raw_text_coding_system (coding_system);
03f04413 675 }
8f924df7 676 setup_coding_system (coding_system, proc_decode_coding_system[inch]);
03f04413
KH
677
678 if (!proc_encode_coding_system[outch])
679 proc_encode_coding_system[outch]
680 = (struct coding_system *) xmalloc (sizeof (struct coding_system));
681 setup_coding_system (p->encode_coding_system,
682 proc_encode_coding_system[outch]);
683}
d0d6b7c5
JB
684\f
685DEFUN ("processp", Fprocessp, Sprocessp, 1, 1, 0,
fdb82f93
PJ
686 doc: /* Return t if OBJECT is a process. */)
687 (object)
4ee3e309 688 Lisp_Object object;
d0d6b7c5 689{
4ee3e309 690 return PROCESSP (object) ? Qt : Qnil;
d0d6b7c5
JB
691}
692
693DEFUN ("get-process", Fget_process, Sget_process, 1, 1, 0,
fdb82f93
PJ
694 doc: /* Return the process named NAME, or nil if there is none. */)
695 (name)
d0d6b7c5
JB
696 register Lisp_Object name;
697{
bcd69aea 698 if (PROCESSP (name))
d0d6b7c5 699 return name;
b7826503 700 CHECK_STRING (name);
d0d6b7c5
JB
701 return Fcdr (Fassoc (name, Vprocess_alist));
702}
703
704DEFUN ("get-buffer-process", Fget_buffer_process, Sget_buffer_process, 1, 1, 0,
fdb82f93
PJ
705 doc: /* Return the (or a) process associated with BUFFER.
706BUFFER may be a buffer or the name of one. */)
707 (buffer)
4ee3e309 708 register Lisp_Object buffer;
d0d6b7c5
JB
709{
710 register Lisp_Object buf, tail, proc;
711
4ee3e309
EN
712 if (NILP (buffer)) return Qnil;
713 buf = Fget_buffer (buffer);
d0d6b7c5
JB
714 if (NILP (buf)) return Qnil;
715
99784d63 716 for (tail = Vprocess_alist; CONSP (tail); tail = XCDR (tail))
d0d6b7c5 717 {
99784d63 718 proc = Fcdr (XCAR (tail));
bcd69aea 719 if (PROCESSP (proc) && EQ (XPROCESS (proc)->buffer, buf))
d0d6b7c5
JB
720 return proc;
721 }
722 return Qnil;
723}
724
ebb9e16f
JB
725/* This is how commands for the user decode process arguments. It
726 accepts a process, a process name, a buffer, a buffer name, or nil.
727 Buffers denote the first process in the buffer, and nil denotes the
728 current buffer. */
d0d6b7c5 729
77b221b1 730static Lisp_Object
d0d6b7c5
JB
731get_process (name)
732 register Lisp_Object name;
733{
1619761d
KH
734 register Lisp_Object proc, obj;
735 if (STRINGP (name))
736 {
737 obj = Fget_process (name);
738 if (NILP (obj))
739 obj = Fget_buffer (name);
740 if (NILP (obj))
d5db4077 741 error ("Process %s does not exist", SDATA (name));
1619761d
KH
742 }
743 else if (NILP (name))
744 obj = Fcurrent_buffer ();
d0d6b7c5 745 else
1619761d
KH
746 obj = name;
747
748 /* Now obj should be either a buffer object or a process object.
749 */
750 if (BUFFERP (obj))
d0d6b7c5 751 {
1619761d 752 proc = Fget_buffer_process (obj);
d0d6b7c5 753 if (NILP (proc))
d5db4077 754 error ("Buffer %s has no process", SDATA (XBUFFER (obj)->name));
d0d6b7c5 755 }
d0d6b7c5 756 else
1619761d 757 {
b7826503 758 CHECK_PROCESS (obj);
1619761d
KH
759 proc = obj;
760 }
761 return proc;
d0d6b7c5
JB
762}
763
a5cfdda8
KS
764
765#ifdef SIGCHLD
766/* Fdelete_process promises to immediately forget about the process, but in
767 reality, Emacs needs to remember those processes until they have been
768 treated by sigchld_handler; otherwise this handler would consider the
769 process as being synchronous and say that the synchronous process is
770 dead. */
771static Lisp_Object deleted_pid_list;
772#endif
773
d0d6b7c5 774DEFUN ("delete-process", Fdelete_process, Sdelete_process, 1, 1, 0,
fdb82f93
PJ
775 doc: /* Delete PROCESS: kill it and forget about it immediately.
776PROCESS may be a process, a buffer, the name of a process or buffer, or
777nil, indicating the current buffer's process. */)
778 (process)
4ee3e309 779 register Lisp_Object process;
d0d6b7c5 780{
ff6daed3
KS
781 register struct Lisp_Process *p;
782
4ee3e309 783 process = get_process (process);
ff6daed3
KS
784 p = XPROCESS (process);
785
6bfd98e7 786 p->raw_status_new = 0;
ff6daed3 787 if (NETCONN1_P (p))
d0d6b7c5 788 {
ff6daed3 789 p->status = Fcons (Qexit, Fcons (make_number (0), Qnil));
60f0fb11 790 p->tick = ++process_tick;
ff6daed3 791 status_notify (p);
d0d6b7c5 792 }
60f0fb11 793 else if (p->infd >= 0)
d0d6b7c5 794 {
a5cfdda8
KS
795#ifdef SIGCHLD
796 Lisp_Object symbol;
d30fe779
EZ
797 /* Assignment to EMACS_INT stops GCC whining about limited range
798 of data type. */
29ed4d51 799 EMACS_INT pid = p->pid;
a5cfdda8
KS
800
801 /* No problem storing the pid here, as it is still in Vprocess_alist. */
d30fe779 802 deleted_pid_list = Fcons (make_fixnum_or_float (pid),
a5cfdda8
KS
803 /* GC treated elements set to nil. */
804 Fdelq (Qnil, deleted_pid_list));
805 /* If the process has already signaled, remove it from the list. */
806 if (p->raw_status_new)
807 update_status (p);
808 symbol = p->status;
809 if (CONSP (p->status))
810 symbol = XCAR (p->status);
811 if (EQ (symbol, Qsignal) || EQ (symbol, Qexit))
29ed4d51
CY
812 deleted_pid_list
813 = Fdelete (make_fixnum_or_float (pid), deleted_pid_list);
a5cfdda8
KS
814 else
815#endif
816 {
817 Fkill_process (process, Qnil);
818 /* Do this now, since remove_process will make sigchld_handler do nothing. */
819 p->status
820 = Fcons (Qsignal, Fcons (make_number (SIGKILL), Qnil));
60f0fb11 821 p->tick = ++process_tick;
a5cfdda8
KS
822 status_notify (p);
823 }
d0d6b7c5 824 }
4ee3e309 825 remove_process (process);
d0d6b7c5
JB
826 return Qnil;
827}
828\f
829DEFUN ("process-status", Fprocess_status, Sprocess_status, 1, 1, 0,
fdb82f93
PJ
830 doc: /* Return the status of PROCESS.
831The returned value is one of the following symbols:
832run -- for a process that is running.
833stop -- for a process stopped but continuable.
834exit -- for a process that has exited.
835signal -- for a process that has got a fatal signal.
836open -- for a network stream connection that is open.
e690ca94 837listen -- for a network stream server that is listening.
fdb82f93 838closed -- for a network stream connection that is closed.
e4984112
KS
839connect -- when waiting for a non-blocking connection to complete.
840failed -- when a non-blocking connection has failed.
fdb82f93
PJ
841nil -- if arg is a process name and no such process exists.
842PROCESS may be a process, a buffer, the name of a process, or
843nil, indicating the current buffer's process. */)
844 (process)
4ee3e309 845 register Lisp_Object process;
d0d6b7c5
JB
846{
847 register struct Lisp_Process *p;
848 register Lisp_Object status;
343f4114 849
4ee3e309
EN
850 if (STRINGP (process))
851 process = Fget_process (process);
343f4114 852 else
4ee3e309 853 process = get_process (process);
343f4114 854
4ee3e309
EN
855 if (NILP (process))
856 return process;
343f4114 857
4ee3e309 858 p = XPROCESS (process);
6bfd98e7 859 if (p->raw_status_new)
d0d6b7c5
JB
860 update_status (p);
861 status = p->status;
bcd69aea 862 if (CONSP (status))
70949dac 863 status = XCAR (status);
e690ca94 864 if (NETCONN1_P (p))
d0d6b7c5 865 {
e690ca94 866 if (EQ (status, Qexit))
d0d6b7c5 867 status = Qclosed;
e690ca94
KS
868 else if (EQ (p->command, Qt))
869 status = Qstop;
870 else if (EQ (status, Qrun))
871 status = Qopen;
d0d6b7c5
JB
872 }
873 return status;
874}
875
876DEFUN ("process-exit-status", Fprocess_exit_status, Sprocess_exit_status,
877 1, 1, 0,
fdb82f93
PJ
878 doc: /* Return the exit status of PROCESS or the signal number that killed it.
879If PROCESS has not yet exited or died, return 0. */)
880 (process)
4ee3e309 881 register Lisp_Object process;
d0d6b7c5 882{
b7826503 883 CHECK_PROCESS (process);
6bfd98e7 884 if (XPROCESS (process)->raw_status_new)
4ee3e309
EN
885 update_status (XPROCESS (process));
886 if (CONSP (XPROCESS (process)->status))
70949dac 887 return XCAR (XCDR (XPROCESS (process)->status));
d0d6b7c5
JB
888 return make_number (0);
889}
890
891DEFUN ("process-id", Fprocess_id, Sprocess_id, 1, 1, 0,
fdb82f93 892 doc: /* Return the process id of PROCESS.
f3d9532b 893This is the pid of the external process which PROCESS uses or talks to.
fdb82f93
PJ
894For a network connection, this value is nil. */)
895 (process)
4ee3e309 896 register Lisp_Object process;
d0d6b7c5 897{
d30fe779
EZ
898 /* Assignment to EMACS_INT stops GCC whining about limited range of
899 data type. */
900 EMACS_INT pid;
901
b7826503 902 CHECK_PROCESS (process);
d30fe779
EZ
903 pid = XPROCESS (process)->pid;
904 return (pid ? make_fixnum_or_float (pid) : Qnil);
d0d6b7c5
JB
905}
906
907DEFUN ("process-name", Fprocess_name, Sprocess_name, 1, 1, 0,
fdb82f93
PJ
908 doc: /* Return the name of PROCESS, as a string.
909This is the name of the program invoked in PROCESS,
910possibly modified to make it unique among process names. */)
911 (process)
4ee3e309 912 register Lisp_Object process;
d0d6b7c5 913{
b7826503 914 CHECK_PROCESS (process);
4ee3e309 915 return XPROCESS (process)->name;
d0d6b7c5
JB
916}
917
918DEFUN ("process-command", Fprocess_command, Sprocess_command, 1, 1, 0,
fdb82f93
PJ
919 doc: /* Return the command that was executed to start PROCESS.
920This is a list of strings, the first string being the program executed
921and the rest of the strings being the arguments given to it.
922For a non-child channel, this is nil. */)
923 (process)
4ee3e309 924 register Lisp_Object process;
d0d6b7c5 925{
b7826503 926 CHECK_PROCESS (process);
4ee3e309 927 return XPROCESS (process)->command;
d0d6b7c5
JB
928}
929
3b9a3dfa 930DEFUN ("process-tty-name", Fprocess_tty_name, Sprocess_tty_name, 1, 1, 0,
fdb82f93
PJ
931 doc: /* Return the name of the terminal PROCESS uses, or nil if none.
932This is the terminal that the process itself reads and writes on,
933not the name of the pty that Emacs uses to talk with that terminal. */)
934 (process)
4ee3e309 935 register Lisp_Object process;
3b9a3dfa 936{
b7826503 937 CHECK_PROCESS (process);
4ee3e309 938 return XPROCESS (process)->tty_name;
3b9a3dfa
RS
939}
940
d0d6b7c5 941DEFUN ("set-process-buffer", Fset_process_buffer, Sset_process_buffer,
fdb82f93
PJ
942 2, 2, 0,
943 doc: /* Set buffer associated with PROCESS to BUFFER (a buffer, or nil). */)
944 (process, buffer)
4ee3e309 945 register Lisp_Object process, buffer;
d0d6b7c5 946{
e690ca94
KS
947 struct Lisp_Process *p;
948
b7826503 949 CHECK_PROCESS (process);
d0d6b7c5 950 if (!NILP (buffer))
b7826503 951 CHECK_BUFFER (buffer);
e690ca94
KS
952 p = XPROCESS (process);
953 p->buffer = buffer;
954 if (NETCONN1_P (p))
955 p->childp = Fplist_put (p->childp, QCbuffer, buffer);
03f04413 956 setup_process_coding_systems (process);
d0d6b7c5
JB
957 return buffer;
958}
959
960DEFUN ("process-buffer", Fprocess_buffer, Sprocess_buffer,
fdb82f93
PJ
961 1, 1, 0,
962 doc: /* Return the buffer PROCESS is associated with.
963Output from PROCESS is inserted in this buffer unless PROCESS has a filter. */)
964 (process)
4ee3e309 965 register Lisp_Object process;
d0d6b7c5 966{
b7826503 967 CHECK_PROCESS (process);
4ee3e309 968 return XPROCESS (process)->buffer;
d0d6b7c5
JB
969}
970
971DEFUN ("process-mark", Fprocess_mark, Sprocess_mark,
fdb82f93
PJ
972 1, 1, 0,
973 doc: /* Return the marker for the end of the last output from PROCESS. */)
974 (process)
4ee3e309 975 register Lisp_Object process;
d0d6b7c5 976{
b7826503 977 CHECK_PROCESS (process);
4ee3e309 978 return XPROCESS (process)->mark;
d0d6b7c5
JB
979}
980
981DEFUN ("set-process-filter", Fset_process_filter, Sset_process_filter,
fdb82f93
PJ
982 2, 2, 0,
983 doc: /* Give PROCESS the filter function FILTER; nil means no filter.
7b82c3b6 984A value of t means stop accepting output from the process.
3452df9e
KS
985
986When a process has a filter, its buffer is not used for output.
987Instead, each time it does output, the entire string of output is
177c0ea7 988passed to the filter.
3452df9e 989
fdb82f93 990The filter gets two arguments: the process and the string of output.
3452df9e
KS
991The string argument is normally a multibyte string, except:
992- if the process' input coding system is no-conversion or raw-text,
993 it is a unibyte string (the non-converted input), or else
994- if `default-enable-multibyte-characters' is nil, it is a unibyte
995 string (the result of converting the decoded input multibyte
996 string to unibyte with `string-make-unibyte'). */)
fdb82f93 997 (process, filter)
4ee3e309 998 register Lisp_Object process, filter;
d0d6b7c5 999{
471f86b9 1000 struct Lisp_Process *p;
177c0ea7 1001
b7826503 1002 CHECK_PROCESS (process);
471f86b9
GM
1003 p = XPROCESS (process);
1004
1005 /* Don't signal an error if the process' input file descriptor
1006 is closed. This could make debugging Lisp more difficult,
1007 for example when doing something like
1008
1009 (setq process (start-process ...))
1010 (debug)
1011 (set-process-filter process ...) */
177c0ea7 1012
60f0fb11 1013 if (p->infd >= 0)
a69281ff 1014 {
e690ca94 1015 if (EQ (filter, Qt) && !EQ (p->status, Qlisten))
471f86b9 1016 {
60f0fb11
SM
1017 FD_CLR (p->infd, &input_wait_mask);
1018 FD_CLR (p->infd, &non_keyboard_wait_mask);
471f86b9 1019 }
e690ca94
KS
1020 else if (EQ (p->filter, Qt)
1021 && !EQ (p->command, Qt)) /* Network process not stopped. */
471f86b9 1022 {
60f0fb11
SM
1023 FD_SET (p->infd, &input_wait_mask);
1024 FD_SET (p->infd, &non_keyboard_wait_mask);
471f86b9 1025 }
a69281ff 1026 }
177c0ea7 1027
471f86b9 1028 p->filter = filter;
e690ca94
KS
1029 if (NETCONN1_P (p))
1030 p->childp = Fplist_put (p->childp, QCfilter, filter);
03f04413 1031 setup_process_coding_systems (process);
d0d6b7c5
JB
1032 return filter;
1033}
1034
1035DEFUN ("process-filter", Fprocess_filter, Sprocess_filter,
fdb82f93
PJ
1036 1, 1, 0,
1037 doc: /* Returns the filter function of PROCESS; nil if none.
1038See `set-process-filter' for more info on filter functions. */)
1039 (process)
4ee3e309 1040 register Lisp_Object process;
d0d6b7c5 1041{
b7826503 1042 CHECK_PROCESS (process);
4ee3e309 1043 return XPROCESS (process)->filter;
d0d6b7c5
JB
1044}
1045
1046DEFUN ("set-process-sentinel", Fset_process_sentinel, Sset_process_sentinel,
fdb82f93
PJ
1047 2, 2, 0,
1048 doc: /* Give PROCESS the sentinel SENTINEL; nil for none.
1049The sentinel is called as a function when the process changes state.
1050It gets two arguments: the process, and a string describing the change. */)
1051 (process, sentinel)
4ee3e309 1052 register Lisp_Object process, sentinel;
d0d6b7c5 1053{
6b61353c
KH
1054 struct Lisp_Process *p;
1055
b7826503 1056 CHECK_PROCESS (process);
6b61353c
KH
1057 p = XPROCESS (process);
1058
1059 p->sentinel = sentinel;
1060 if (NETCONN1_P (p))
1061 p->childp = Fplist_put (p->childp, QCsentinel, sentinel);
d0d6b7c5
JB
1062 return sentinel;
1063}
1064
1065DEFUN ("process-sentinel", Fprocess_sentinel, Sprocess_sentinel,
fdb82f93
PJ
1066 1, 1, 0,
1067 doc: /* Return the sentinel of PROCESS; nil if none.
1068See `set-process-sentinel' for more info on sentinels. */)
1069 (process)
4ee3e309 1070 register Lisp_Object process;
d0d6b7c5 1071{
b7826503 1072 CHECK_PROCESS (process);
4ee3e309 1073 return XPROCESS (process)->sentinel;
d0d6b7c5
JB
1074}
1075
396df322 1076DEFUN ("set-process-window-size", Fset_process_window_size,
fdb82f93
PJ
1077 Sset_process_window_size, 3, 3, 0,
1078 doc: /* Tell PROCESS that it has logical window size HEIGHT and WIDTH. */)
1079 (process, height, width)
4ee3e309 1080 register Lisp_Object process, height, width;
396df322 1081{
b7826503
PJ
1082 CHECK_PROCESS (process);
1083 CHECK_NATNUM (height);
1084 CHECK_NATNUM (width);
177c0ea7 1085
60f0fb11
SM
1086 if (XPROCESS (process)->infd < 0
1087 || set_window_size (XPROCESS (process)->infd,
471f86b9 1088 XINT (height), XINT (width)) <= 0)
396df322
RS
1089 return Qnil;
1090 else
1091 return Qt;
1092}
1093
52a1b894 1094DEFUN ("set-process-inherit-coding-system-flag",
fdb82f93
PJ
1095 Fset_process_inherit_coding_system_flag,
1096 Sset_process_inherit_coding_system_flag, 2, 2, 0,
1097 doc: /* Determine whether buffer of PROCESS will inherit coding-system.
1098If the second argument FLAG is non-nil, then the variable
1099`buffer-file-coding-system' of the buffer associated with PROCESS
1100will be bound to the value of the coding system used to decode
1101the process output.
1102
1103This is useful when the coding system specified for the process buffer
1104leaves either the character code conversion or the end-of-line conversion
1105unspecified, or if the coding system used to decode the process output
1106is more appropriate for saving the process buffer.
1107
1108Binding the variable `inherit-process-coding-system' to non-nil before
1109starting the process is an alternative way of setting the inherit flag
1110for the process which will run. */)
1111 (process, flag)
52a1b894
EZ
1112 register Lisp_Object process, flag;
1113{
b7826503 1114 CHECK_PROCESS (process);
60f0fb11 1115 XPROCESS (process)->inherit_coding_system_flag = !NILP (flag);
52a1b894
EZ
1116 return flag;
1117}
1118
1119DEFUN ("process-inherit-coding-system-flag",
fdb82f93
PJ
1120 Fprocess_inherit_coding_system_flag, Sprocess_inherit_coding_system_flag,
1121 1, 1, 0,
1122 doc: /* Return the value of inherit-coding-system flag for PROCESS.
1123If this flag is t, `buffer-file-coding-system' of the buffer
1124associated with PROCESS will inherit the coding system used to decode
1125the process output. */)
1126 (process)
52a1b894
EZ
1127 register Lisp_Object process;
1128{
b7826503 1129 CHECK_PROCESS (process);
60f0fb11 1130 return XPROCESS (process)->inherit_coding_system_flag ? Qt : Qnil;
52a1b894
EZ
1131}
1132
e690ca94
KS
1133DEFUN ("set-process-query-on-exit-flag",
1134 Fset_process_query_on_exit_flag, Sset_process_query_on_exit_flag,
1135 2, 2, 0,
1136 doc: /* Specify if query is needed for PROCESS when Emacs is exited.
f3d9532b 1137If the second argument FLAG is non-nil, Emacs will query the user before
e690ca94
KS
1138exiting if PROCESS is running. */)
1139 (process, flag)
1140 register Lisp_Object process, flag;
d0d6b7c5 1141{
b7826503 1142 CHECK_PROCESS (process);
60f0fb11 1143 XPROCESS (process)->kill_without_query = NILP (flag);
e690ca94 1144 return flag;
d0d6b7c5 1145}
312c9964 1146
e690ca94
KS
1147DEFUN ("process-query-on-exit-flag",
1148 Fprocess_query_on_exit_flag, Sprocess_query_on_exit_flag,
fdb82f93 1149 1, 1, 0,
f3d9532b 1150 doc: /* Return the current value of query-on-exit flag for PROCESS. */)
fdb82f93 1151 (process)
de282a05
RS
1152 register Lisp_Object process;
1153{
b7826503 1154 CHECK_PROCESS (process);
60f0fb11 1155 return (XPROCESS (process)->kill_without_query ? Qnil : Qt);
e690ca94
KS
1156}
1157
1158#ifdef DATAGRAM_SOCKETS
1159Lisp_Object Fprocess_datagram_address ();
1160#endif
1161
1162DEFUN ("process-contact", Fprocess_contact, Sprocess_contact,
1163 1, 2, 0,
1164 doc: /* Return the contact info of PROCESS; t for a real child.
1165For a net connection, the value depends on the optional KEY arg.
1166If KEY is nil, value is a cons cell of the form (HOST SERVICE),
1167if KEY is t, the complete contact information for the connection is
1168returned, else the specific value for the keyword KEY is returned.
1169See `make-network-process' for a list of keywords. */)
1170 (process, key)
1171 register Lisp_Object process, key;
1172{
1173 Lisp_Object contact;
1174
1175 CHECK_PROCESS (process);
1176 contact = XPROCESS (process)->childp;
1177
1178#ifdef DATAGRAM_SOCKETS
1179 if (DATAGRAM_CONN_P (process)
1180 && (EQ (key, Qt) || EQ (key, QCremote)))
177c0ea7 1181 contact = Fplist_put (contact, QCremote,
e690ca94
KS
1182 Fprocess_datagram_address (process));
1183#endif
1184
1185 if (!NETCONN_P (process) || EQ (key, Qt))
1186 return contact;
1187 if (NILP (key))
1188 return Fcons (Fplist_get (contact, QChost),
1189 Fcons (Fplist_get (contact, QCservice), Qnil));
1190 return Fplist_get (contact, key);
de282a05
RS
1191}
1192
faa7db08
KS
1193DEFUN ("process-plist", Fprocess_plist, Sprocess_plist,
1194 1, 1, 0,
1195 doc: /* Return the plist of PROCESS. */)
1196 (process)
1197 register Lisp_Object process;
365aee82 1198{
ac4a7584 1199 CHECK_PROCESS (process);
faa7db08 1200 return XPROCESS (process)->plist;
ac4a7584 1201}
365aee82 1202
faa7db08
KS
1203DEFUN ("set-process-plist", Fset_process_plist, Sset_process_plist,
1204 2, 2, 0,
26a086c6 1205 doc: /* Replace the plist of PROCESS with PLIST. Returns PLIST. */)
faa7db08
KS
1206 (process, plist)
1207 register Lisp_Object process, plist;
ac4a7584 1208{
365aee82 1209 CHECK_PROCESS (process);
faa7db08 1210 CHECK_LIST (plist);
365aee82 1211
faa7db08 1212 XPROCESS (process)->plist = plist;
26a086c6 1213 return plist;
365aee82
KS
1214}
1215
312c9964
RS
1216#if 0 /* Turned off because we don't currently record this info
1217 in the process. Perhaps add it. */
1218DEFUN ("process-connection", Fprocess_connection, Sprocess_connection, 1, 1, 0,
fdb82f93
PJ
1219 doc: /* Return the connection type of PROCESS.
1220The value is nil for a pipe, t or `pty' for a pty, or `stream' for
1221a socket connection. */)
1222 (process)
312c9964
RS
1223 Lisp_Object process;
1224{
1225 return XPROCESS (process)->type;
1226}
1227#endif
991234f0
KS
1228
1229#ifdef HAVE_SOCKETS
1230DEFUN ("format-network-address", Fformat_network_address, Sformat_network_address,
0dccee41 1231 1, 2, 0,
991234f0 1232 doc: /* Convert network ADDRESS from internal format to a string.
e1652a86
KS
1233A 4 or 5 element vector represents an IPv4 address (with port number).
1234An 8 or 9 element vector represents an IPv6 address (with port number).
0dccee41 1235If optional second argument OMIT-PORT is non-nil, don't include a port
e1652a86
KS
1236number in the string, even when present in ADDRESS.
1237Returns nil if format of ADDRESS is invalid. */)
0dccee41
KS
1238 (address, omit_port)
1239 Lisp_Object address, omit_port;
991234f0 1240{
991234f0
KS
1241 if (NILP (address))
1242 return Qnil;
1243
1244 if (STRINGP (address)) /* AF_LOCAL */
1245 return address;
1246
e1652a86 1247 if (VECTORP (address)) /* AF_INET or AF_INET6 */
991234f0
KS
1248 {
1249 register struct Lisp_Vector *p = XVECTOR (address);
ded83665 1250 Lisp_Object args[10];
0dccee41 1251 int nargs, i;
991234f0 1252
e1652a86 1253 if (p->size == 4 || (p->size == 5 && !NILP (omit_port)))
0dccee41
KS
1254 {
1255 args[0] = build_string ("%d.%d.%d.%d");
1256 nargs = 4;
1257 }
1258 else if (p->size == 5)
1259 {
1260 args[0] = build_string ("%d.%d.%d.%d:%d");
1261 nargs = 5;
1262 }
e1652a86
KS
1263 else if (p->size == 8 || (p->size == 9 && !NILP (omit_port)))
1264 {
1265 args[0] = build_string ("%x:%x:%x:%x:%x:%x:%x:%x");
1266 nargs = 8;
1267 }
1268 else if (p->size == 9)
1269 {
1270 args[0] = build_string ("[%x:%x:%x:%x:%x:%x:%x:%x]:%d");
1271 nargs = 9;
1272 }
0dccee41 1273 else
991234f0
KS
1274 return Qnil;
1275
0dccee41 1276 for (i = 0; i < nargs; i++)
cbf23adb
JB
1277 {
1278 EMACS_INT element = XINT (p->contents[i]);
1279
1280 if (element < 0 || element > 65535)
1281 return Qnil;
1282
1283 if (nargs <= 5 /* IPv4 */
1284 && i < 4 /* host, not port */
1285 && element > 255)
1286 return Qnil;
1287
1288 args[i+1] = p->contents[i];
1289 }
1290
0dccee41 1291 return Fformat (nargs+1, args);
991234f0
KS
1292 }
1293
1294 if (CONSP (address))
1295 {
1296 Lisp_Object args[2];
1297 args[0] = build_string ("<Family %d>");
8d2ff840 1298 args[1] = Fcar (address);
991234f0 1299 return Fformat (2, args);
991234f0
KS
1300 }
1301
1302 return Qnil;
1303}
1304#endif
d0d6b7c5 1305\f
ff6daed3 1306static Lisp_Object
e690ca94
KS
1307list_processes_1 (query_only)
1308 Lisp_Object query_only;
d0d6b7c5
JB
1309{
1310 register Lisp_Object tail, tem;
1311 Lisp_Object proc, minspace, tem1;
d0d6b7c5 1312 register struct Lisp_Process *p;
e690ca94
KS
1313 char tembuf[300];
1314 int w_proc, w_buffer, w_tty;
1eed3bdc 1315 int exited = 0;
e690ca94
KS
1316 Lisp_Object i_status, i_buffer, i_tty, i_command;
1317
1318 w_proc = 4; /* Proc */
1319 w_buffer = 6; /* Buffer */
1320 w_tty = 0; /* Omit if no ttys */
1321
99784d63 1322 for (tail = Vprocess_alist; CONSP (tail); tail = XCDR (tail))
e690ca94
KS
1323 {
1324 int i;
1325
99784d63 1326 proc = Fcdr (XCAR (tail));
e690ca94
KS
1327 p = XPROCESS (proc);
1328 if (NILP (p->childp))
1329 continue;
60f0fb11 1330 if (!NILP (query_only) && p->kill_without_query)
e690ca94
KS
1331 continue;
1332 if (STRINGP (p->name)
d5db4077 1333 && ( i = SCHARS (p->name), (i > w_proc)))
e690ca94
KS
1334 w_proc = i;
1335 if (!NILP (p->buffer))
1336 {
e69c4cae
SM
1337 if (NILP (XBUFFER (p->buffer)->name))
1338 {
1339 if (w_buffer < 8)
1340 w_buffer = 8; /* (Killed) */
1341 }
d5db4077 1342 else if ((i = SCHARS (XBUFFER (p->buffer)->name), (i > w_buffer)))
e690ca94
KS
1343 w_buffer = i;
1344 }
1345 if (STRINGP (p->tty_name)
d5db4077 1346 && (i = SCHARS (p->tty_name), (i > w_tty)))
e690ca94
KS
1347 w_tty = i;
1348 }
1349
1350 XSETFASTINT (i_status, w_proc + 1);
1351 XSETFASTINT (i_buffer, XFASTINT (i_status) + 9);
1352 if (w_tty)
1353 {
1354 XSETFASTINT (i_tty, XFASTINT (i_buffer) + w_buffer + 1);
d3c0009d
AS
1355 XSETFASTINT (i_command, XFASTINT (i_tty) + w_tty + 1);
1356 }
1357 else
1358 {
e690ca94
KS
1359 i_tty = Qnil;
1360 XSETFASTINT (i_command, XFASTINT (i_buffer) + w_buffer + 1);
1361 }
d0d6b7c5 1362
22719df2 1363 XSETFASTINT (minspace, 1);
d0d6b7c5
JB
1364
1365 set_buffer_internal (XBUFFER (Vstandard_output));
ec2258fa 1366 current_buffer->undo_list = Qt;
d0d6b7c5
JB
1367
1368 current_buffer->truncate_lines = Qt;
1369
e690ca94
KS
1370 write_string ("Proc", -1);
1371 Findent_to (i_status, minspace); write_string ("Status", -1);
1372 Findent_to (i_buffer, minspace); write_string ("Buffer", -1);
1373 if (!NILP (i_tty))
1374 {
1375 Findent_to (i_tty, minspace); write_string ("Tty", -1);
1376 }
1377 Findent_to (i_command, minspace); write_string ("Command", -1);
1378 write_string ("\n", -1);
1379
1380 write_string ("----", -1);
1381 Findent_to (i_status, minspace); write_string ("------", -1);
1382 Findent_to (i_buffer, minspace); write_string ("------", -1);
1383 if (!NILP (i_tty))
1384 {
1385 Findent_to (i_tty, minspace); write_string ("---", -1);
1386 }
1387 Findent_to (i_command, minspace); write_string ("-------", -1);
1388 write_string ("\n", -1);
d0d6b7c5 1389
99784d63 1390 for (tail = Vprocess_alist; CONSP (tail); tail = XCDR (tail))
d0d6b7c5
JB
1391 {
1392 Lisp_Object symbol;
1393
99784d63 1394 proc = Fcdr (XCAR (tail));
d0d6b7c5
JB
1395 p = XPROCESS (proc);
1396 if (NILP (p->childp))
1397 continue;
60f0fb11 1398 if (!NILP (query_only) && p->kill_without_query)
e690ca94 1399 continue;
d0d6b7c5
JB
1400
1401 Finsert (1, &p->name);
e690ca94 1402 Findent_to (i_status, minspace);
d0d6b7c5 1403
6bfd98e7 1404 if (p->raw_status_new)
d0d6b7c5
JB
1405 update_status (p);
1406 symbol = p->status;
bcd69aea 1407 if (CONSP (p->status))
70949dac 1408 symbol = XCAR (p->status);
d0d6b7c5 1409
d0d6b7c5
JB
1410 if (EQ (symbol, Qsignal))
1411 {
1412 Lisp_Object tem;
1413 tem = Fcar (Fcdr (p->status));
1414#ifdef VMS
1415 if (XINT (tem) < NSIG)
b0310da4 1416 write_string (sys_errlist [XINT (tem)], -1);
d0d6b7c5
JB
1417 else
1418#endif
1419 Fprinc (symbol, Qnil);
1420 }
e690ca94 1421 else if (NETCONN1_P (p))
d0d6b7c5 1422 {
e690ca94 1423 if (EQ (symbol, Qexit))
d0d6b7c5 1424 write_string ("closed", -1);
e690ca94
KS
1425 else if (EQ (p->command, Qt))
1426 write_string ("stopped", -1);
1427 else if (EQ (symbol, Qrun))
1428 write_string ("open", -1);
d0d6b7c5
JB
1429 else
1430 Fprinc (symbol, Qnil);
1431 }
1432 else
1433 Fprinc (symbol, Qnil);
1434
1435 if (EQ (symbol, Qexit))
1436 {
1437 Lisp_Object tem;
1438 tem = Fcar (Fcdr (p->status));
1439 if (XFASTINT (tem))
1440 {
3162bafa 1441 sprintf (tembuf, " %d", (int) XFASTINT (tem));
d0d6b7c5
JB
1442 write_string (tembuf, -1);
1443 }
1444 }
1445
1eed3bdc
KS
1446 if (EQ (symbol, Qsignal) || EQ (symbol, Qexit) || EQ (symbol, Qclosed))
1447 exited++;
d0d6b7c5 1448
e690ca94 1449 Findent_to (i_buffer, minspace);
d0d6b7c5
JB
1450 if (NILP (p->buffer))
1451 insert_string ("(none)");
1452 else if (NILP (XBUFFER (p->buffer)->name))
1453 insert_string ("(Killed)");
1454 else
1455 Finsert (1, &XBUFFER (p->buffer)->name);
1456
e690ca94
KS
1457 if (!NILP (i_tty))
1458 {
1459 Findent_to (i_tty, minspace);
1460 if (STRINGP (p->tty_name))
1461 Finsert (1, &p->tty_name);
1462 }
a9fde32e 1463
e690ca94 1464 Findent_to (i_command, minspace);
a9fde32e 1465
e690ca94
KS
1466 if (EQ (p->status, Qlisten))
1467 {
1468 Lisp_Object port = Fplist_get (p->childp, QCservice);
1469 if (INTEGERP (port))
1470 port = Fnumber_to_string (port);
991234f0 1471 if (NILP (port))
0dccee41 1472 port = Fformat_network_address (Fplist_get (p->childp, QClocal), Qnil);
e690ca94 1473 sprintf (tembuf, "(network %s server on %s)\n",
60f0fb11 1474 (DATAGRAM_CHAN_P (p->infd) ? "datagram" : "stream"),
991234f0 1475 (STRINGP (port) ? (char *)SDATA (port) : "?"));
e690ca94
KS
1476 insert_string (tembuf);
1477 }
1478 else if (NETCONN1_P (p))
d0d6b7c5 1479 {
e690ca94
KS
1480 /* For a local socket, there is no host name,
1481 so display service instead. */
1482 Lisp_Object host = Fplist_get (p->childp, QChost);
1483 if (!STRINGP (host))
1484 {
1485 host = Fplist_get (p->childp, QCservice);
1486 if (INTEGERP (host))
1487 host = Fnumber_to_string (host);
1488 }
991234f0 1489 if (NILP (host))
0dccee41 1490 host = Fformat_network_address (Fplist_get (p->childp, QCremote), Qnil);
e690ca94 1491 sprintf (tembuf, "(network %s connection to %s)\n",
60f0fb11 1492 (DATAGRAM_CHAN_P (p->infd) ? "datagram" : "stream"),
991234f0 1493 (STRINGP (host) ? (char *)SDATA (host) : "?"));
d0d6b7c5
JB
1494 insert_string (tembuf);
1495 }
177c0ea7 1496 else
d0d6b7c5
JB
1497 {
1498 tem = p->command;
1499 while (1)
1500 {
1501 tem1 = Fcar (tem);
1502 Finsert (1, &tem1);
1503 tem = Fcdr (tem);
1504 if (NILP (tem))
1505 break;
1506 insert_string (" ");
1507 }
1508 insert_string ("\n");
1509 }
1510 }
1eed3bdc
KS
1511 if (exited)
1512 status_notify (NULL);
d0d6b7c5
JB
1513 return Qnil;
1514}
1515
e690ca94 1516DEFUN ("list-processes", Flist_processes, Slist_processes, 0, 1, "P",
fdb82f93 1517 doc: /* Display a list of all processes.
e690ca94
KS
1518If optional argument QUERY-ONLY is non-nil, only processes with
1519the query-on-exit flag set will be listed.
fdb82f93
PJ
1520Any process listed as exited or signaled is actually eliminated
1521after the listing is made. */)
e690ca94
KS
1522 (query_only)
1523 Lisp_Object query_only;
d0d6b7c5
JB
1524{
1525 internal_with_output_to_temp_buffer ("*Process List*",
e690ca94 1526 list_processes_1, query_only);
d0d6b7c5
JB
1527 return Qnil;
1528}
1529
1530DEFUN ("process-list", Fprocess_list, Sprocess_list, 0, 0, 0,
fdb82f93
PJ
1531 doc: /* Return a list of all processes. */)
1532 ()
d0d6b7c5
JB
1533{
1534 return Fmapcar (Qcdr, Vprocess_alist);
1535}
1536\f
b0310da4
JB
1537/* Starting asynchronous inferior processes. */
1538
1539static Lisp_Object start_process_unwind ();
1540
d0d6b7c5 1541DEFUN ("start-process", Fstart_process, Sstart_process, 3, MANY, 0,
fdb82f93
PJ
1542 doc: /* Start a program in a subprocess. Return the process object for it.
1543NAME is name for process. It is modified if necessary to make it unique.
553acde5 1544BUFFER is the buffer (or buffer name) to associate with the process.
4b6c5eee
EZ
1545
1546Process output (both standard output and standard error streams) goes
1547at end of BUFFER, unless you specify an output stream or filter
1548function to handle the output. BUFFER may also be nil, meaning that
16fdeb17
RS
1549this process is not associated with any buffer.
1550
553acde5 1551PROGRAM is the program file name. It is searched for in PATH.
3ecdf100 1552Remaining arguments are strings to give program as arguments.
320aebc9 1553
4b6c5eee
EZ
1554If you want to separate standard output from standard error, invoke
1555the command through a shell and redirect one of them using the shell
1556syntax.
320aebc9 1557
3ecdf100 1558usage: (start-process NAME BUFFER PROGRAM &rest PROGRAM-ARGS) */)
fdb82f93 1559 (nargs, args)
d0d6b7c5
JB
1560 int nargs;
1561 register Lisp_Object *args;
1562{
1e30af70 1563 Lisp_Object buffer, name, program, proc, current_dir, tem;
d0d6b7c5
JB
1564#ifdef VMS
1565 register unsigned char *new_argv;
1566 int len;
1567#else
1568 register unsigned char **new_argv;
1569#endif
1570 register int i;
aed13378 1571 int count = SPECPDL_INDEX ();
d0d6b7c5
JB
1572
1573 buffer = args[1];
1574 if (!NILP (buffer))
1575 buffer = Fget_buffer_create (buffer);
1576
1e30af70
JB
1577 /* Make sure that the child will be able to chdir to the current
1578 buffer's current directory, or its unhandled equivalent. We
1579 can't just have the child check for an error when it does the
1580 chdir, since it's in a vfork.
1581
1582 We have to GCPRO around this because Fexpand_file_name and
1583 Funhandled_file_name_directory might call a file name handling
1584 function. The argument list is protected by the caller, so all
1585 we really have to worry about is buffer. */
1586 {
1587 struct gcpro gcpro1, gcpro2;
1588
1589 current_dir = current_buffer->directory;
1590
1591 GCPRO2 (buffer, current_dir);
1592
ca319910
SM
1593 current_dir = Funhandled_file_name_directory (current_dir);
1594 if (NILP (current_dir))
1595 /* If the file name handler says that current_dir is unreachable, use
1596 a sensible default. */
1597 current_dir = build_string ("~/");
1598 current_dir = expand_and_dir_to_file (current_dir, Qnil);
1e30af70
JB
1599 if (NILP (Ffile_accessible_directory_p (current_dir)))
1600 report_file_error ("Setting current directory",
1601 Fcons (current_buffer->directory, Qnil));
1602
1603 UNGCPRO;
1604 }
1605
d0d6b7c5 1606 name = args[0];
b7826503 1607 CHECK_STRING (name);
d0d6b7c5
JB
1608
1609 program = args[2];
1610
b7826503 1611 CHECK_STRING (program);
d0d6b7c5 1612
d0d6b7c5 1613 proc = make_process (name);
b0310da4
JB
1614 /* If an error occurs and we can't start the process, we want to
1615 remove it from the process list. This means that each error
1616 check in create_process doesn't need to call remove_process
1617 itself; it's all taken care of here. */
1618 record_unwind_protect (start_process_unwind, proc);
d0d6b7c5
JB
1619
1620 XPROCESS (proc)->childp = Qt;
faa7db08 1621 XPROCESS (proc)->plist = Qnil;
d0d6b7c5
JB
1622 XPROCESS (proc)->buffer = buffer;
1623 XPROCESS (proc)->sentinel = Qnil;
1624 XPROCESS (proc)->filter = Qnil;
1625 XPROCESS (proc)->command = Flist (nargs - 2, args + 2);
1626
6b61353c 1627#ifdef ADAPTIVE_READ_BUFFERING
60f0fb11
SM
1628 XPROCESS (proc)->adaptive_read_buffering
1629 = (NILP (Vprocess_adaptive_read_buffering) ? 0
1630 : EQ (Vprocess_adaptive_read_buffering, Qt) ? 1 : 2);
6b61353c
KH
1631#endif
1632
7af71e17 1633 /* Make the process marker point into the process buffer (if any). */
f523e0c3 1634 if (BUFFERP (buffer))
d8a2934e
RS
1635 set_marker_both (XPROCESS (proc)->mark, buffer,
1636 BUF_ZV (XBUFFER (buffer)),
1637 BUF_ZV_BYTE (XBUFFER (buffer)));
7af71e17 1638
67918941 1639 {
d5d4ae71
KH
1640 /* Decide coding systems for communicating with the process. Here
1641 we don't setup the structure coding_system nor pay attention to
1642 unibyte mode. They are done in create_process. */
1643
67918941
RS
1644 /* Qt denotes we have not yet called Ffind_operation_coding_system. */
1645 Lisp_Object coding_systems = Qt;
1646 Lisp_Object val, *args2;
a4a37e65 1647 struct gcpro gcpro1, gcpro2;
67918941 1648
d5d4ae71
KH
1649 val = Vcoding_system_for_read;
1650 if (NILP (val))
67918941
RS
1651 {
1652 args2 = (Lisp_Object *) alloca ((nargs + 1) * sizeof *args2);
1653 args2[0] = Qstart_process;
1654 for (i = 0; i < nargs; i++) args2[i + 1] = args[i];
a4a37e65 1655 GCPRO2 (proc, current_dir);
67918941
RS
1656 coding_systems = Ffind_operation_coding_system (nargs + 1, args2);
1657 UNGCPRO;
1658 if (CONSP (coding_systems))
70949dac 1659 val = XCAR (coding_systems);
67918941 1660 else if (CONSP (Vdefault_process_coding_system))
70949dac 1661 val = XCAR (Vdefault_process_coding_system);
67918941
RS
1662 }
1663 XPROCESS (proc)->decode_coding_system = val;
1664
d5d4ae71
KH
1665 val = Vcoding_system_for_write;
1666 if (NILP (val))
67918941
RS
1667 {
1668 if (EQ (coding_systems, Qt))
1669 {
1670 args2 = (Lisp_Object *) alloca ((nargs + 1) * sizeof args2);
1671 args2[0] = Qstart_process;
1672 for (i = 0; i < nargs; i++) args2[i + 1] = args[i];
a4a37e65 1673 GCPRO2 (proc, current_dir);
67918941
RS
1674 coding_systems = Ffind_operation_coding_system (nargs + 1, args2);
1675 UNGCPRO;
1676 }
1677 if (CONSP (coding_systems))
70949dac 1678 val = XCDR (coding_systems);
67918941 1679 else if (CONSP (Vdefault_process_coding_system))
70949dac 1680 val = XCDR (Vdefault_process_coding_system);
67918941
RS
1681 }
1682 XPROCESS (proc)->encode_coding_system = val;
1683 }
0fa1789e 1684
a4a37e65
KH
1685#ifdef VMS
1686 /* Make a one member argv with all args concatenated
1687 together separated by a blank. */
d5db4077 1688 len = SBYTES (program) + 2;
a4a37e65
KH
1689 for (i = 3; i < nargs; i++)
1690 {
1691 tem = args[i];
b7826503 1692 CHECK_STRING (tem);
d5db4077 1693 len += SBYTES (tem) + 1; /* count the blank */
a4a37e65
KH
1694 }
1695 new_argv = (unsigned char *) alloca (len);
d5db4077 1696 strcpy (new_argv, SDATA (program));
a4a37e65
KH
1697 for (i = 3; i < nargs; i++)
1698 {
1699 tem = args[i];
b7826503 1700 CHECK_STRING (tem);
a4a37e65 1701 strcat (new_argv, " ");
d5db4077 1702 strcat (new_argv, SDATA (tem));
a4a37e65
KH
1703 }
1704 /* Need to add code here to check for program existence on VMS */
177c0ea7 1705
a4a37e65
KH
1706#else /* not VMS */
1707 new_argv = (unsigned char **) alloca ((nargs - 1) * sizeof (char *));
1708
ed30cf85
RS
1709 /* If program file name is not absolute, search our path for it.
1710 Put the name we will really use in TEM. */
d5db4077
KR
1711 if (!IS_DIRECTORY_SEP (SREF (program, 0))
1712 && !(SCHARS (program) > 1
1713 && IS_DEVICE_SEP (SREF (program, 1))))
a4a37e65
KH
1714 {
1715 struct gcpro gcpro1, gcpro2, gcpro3, gcpro4;
1716
1717 tem = Qnil;
1718 GCPRO4 (name, program, buffer, current_dir);
cc4db0c7 1719 openp (Vexec_path, program, Vexec_suffixes, &tem, make_number (X_OK));
a4a37e65
KH
1720 UNGCPRO;
1721 if (NILP (tem))
1722 report_file_error ("Searching for program", Fcons (program, Qnil));
1723 tem = Fexpand_file_name (tem, Qnil);
a4a37e65
KH
1724 }
1725 else
1726 {
1727 if (!NILP (Ffile_directory_p (program)))
1728 error ("Specified program for new process is a directory");
ed30cf85 1729 tem = program;
a4a37e65
KH
1730 }
1731
ed30cf85
RS
1732 /* If program file name starts with /: for quoting a magic name,
1733 discard that. */
1734 if (SBYTES (tem) > 2 && SREF (tem, 0) == '/'
1735 && SREF (tem, 1) == ':')
1736 tem = Fsubstring (tem, make_number (2), Qnil);
1737
1738 /* Encode the file name and put it in NEW_ARGV.
1739 That's where the child will use it to execute the program. */
1740 tem = ENCODE_FILE (tem);
1741 new_argv[0] = SDATA (tem);
1742
a4a37e65
KH
1743 /* Here we encode arguments by the coding system used for sending
1744 data to the process. We don't support using different coding
1745 systems for encoding arguments and for encoding data sent to the
1746 process. */
1747
1748 for (i = 3; i < nargs; i++)
1749 {
1750 tem = args[i];
b7826503 1751 CHECK_STRING (tem);
a4a37e65
KH
1752 if (STRING_MULTIBYTE (tem))
1753 tem = (code_convert_string_norecord
1754 (tem, XPROCESS (proc)->encode_coding_system, 1));
d5db4077 1755 new_argv[i - 2] = SDATA (tem);
a4a37e65
KH
1756 }
1757 new_argv[i - 2] = 0;
1758#endif /* not VMS */
1759
0fa1789e 1760 XPROCESS (proc)->decoding_buf = make_uninit_string (0);
60f0fb11 1761 XPROCESS (proc)->decoding_carryover = 0;
0fa1789e
KH
1762 XPROCESS (proc)->encoding_buf = make_uninit_string (0);
1763
52a1b894 1764 XPROCESS (proc)->inherit_coding_system_flag
e6fca843 1765 = !(NILP (buffer) || !inherit_process_coding_system);
52a1b894 1766
6b53bb85 1767 create_process (proc, (char **) new_argv, current_dir);
d0d6b7c5 1768
b0310da4 1769 return unbind_to (count, proc);
d0d6b7c5
JB
1770}
1771
b0310da4 1772/* This function is the unwind_protect form for Fstart_process. If
8e6208c5 1773 PROC doesn't have its pid set, then we know someone has signaled
b0310da4
JB
1774 an error and the process wasn't started successfully, so we should
1775 remove it from the process list. */
1776static Lisp_Object
1777start_process_unwind (proc)
1778 Lisp_Object proc;
1779{
bcd69aea 1780 if (!PROCESSP (proc))
b0310da4
JB
1781 abort ();
1782
1783 /* Was PROC started successfully? */
6bfd98e7 1784 if (XPROCESS (proc)->pid <= 0)
b0310da4
JB
1785 remove_process (proc);
1786
1787 return Qnil;
1788}
1789
ff6daed3 1790static void
30904ab7
GM
1791create_process_1 (timer)
1792 struct atimer *timer;
d0d6b7c5 1793{
30904ab7 1794 /* Nothing to do. */
d0d6b7c5
JB
1795}
1796
30904ab7 1797
d0d6b7c5
JB
1798#if 0 /* This doesn't work; see the note before sigchld_handler. */
1799#ifdef USG
1800#ifdef SIGCHLD
1801/* Mimic blocking of signals on system V, which doesn't really have it. */
1802
1803/* Nonzero means we got a SIGCHLD when it was supposed to be blocked. */
1804int sigchld_deferred;
1805
1806SIGTYPE
1807create_process_sigchld ()
1808{
1809 signal (SIGCHLD, create_process_sigchld);
1810
1811 sigchld_deferred = 1;
1812}
1813#endif
1814#endif
1815#endif
1816
1817#ifndef VMS /* VMS version of this function is in vmsproc.c. */
6b53bb85 1818void
1e30af70 1819create_process (process, new_argv, current_dir)
d0d6b7c5
JB
1820 Lisp_Object process;
1821 char **new_argv;
1e30af70 1822 Lisp_Object current_dir;
d0d6b7c5 1823{
29ed4d51
CY
1824 int inchannel, outchannel;
1825 pid_t pid;
d0d6b7c5 1826 int sv[2];
0dc70c33
KH
1827#ifdef POSIX_SIGNALS
1828 sigset_t procmask;
1829 sigset_t blocked;
1830 struct sigaction sigint_action;
1831 struct sigaction sigquit_action;
1832#ifdef AIX
1833 struct sigaction sighup_action;
1834#endif
1835#else /* !POSIX_SIGNALS */
41d03b9a 1836#if 0
d0d6b7c5
JB
1837#ifdef SIGCHLD
1838 SIGTYPE (*sigchld)();
1839#endif
41d03b9a 1840#endif /* 0 */
0dc70c33 1841#endif /* !POSIX_SIGNALS */
ecd1f654
KH
1842 /* Use volatile to protect variables from being clobbered by longjmp. */
1843 volatile int forkin, forkout;
1844 volatile int pty_flag = 0;
3ec68006 1845#ifndef USE_CRT_DLL
d0d6b7c5 1846 extern char **environ;
3ec68006 1847#endif
d0d6b7c5 1848
d0d6b7c5
JB
1849 inchannel = outchannel = -1;
1850
1851#ifdef HAVE_PTYS
fe45da4e 1852 if (!NILP (Vprocess_connection_type))
d0d6b7c5
JB
1853 outchannel = inchannel = allocate_pty ();
1854
d0d6b7c5
JB
1855 if (inchannel >= 0)
1856 {
2af70a0c
RS
1857#if ! defined (USG) || defined (USG_SUBTTY_WORKS)
1858 /* On most USG systems it does not work to open the pty's tty here,
1859 then close it and reopen it in the child. */
d0d6b7c5
JB
1860#ifdef O_NOCTTY
1861 /* Don't let this terminal become our controlling terminal
1862 (in case we don't have one). */
68c45bf0 1863 forkout = forkin = emacs_open (pty_name, O_RDWR | O_NOCTTY, 0);
d0d6b7c5 1864#else
68c45bf0 1865 forkout = forkin = emacs_open (pty_name, O_RDWR, 0);
d0d6b7c5
JB
1866#endif
1867 if (forkin < 0)
1868 report_file_error ("Opening pty", Qnil);
e39a993c 1869#if defined (DONT_REOPEN_PTY)
21375f1e
YM
1870 /* In the case that vfork is defined as fork, the parent process
1871 (Emacs) may send some data before the child process completes
1872 tty options setup. So we setup tty before forking. */
1873 child_setup_tty (forkout);
e39a993c 1874#endif /* DONT_REOPEN_PTY */
d0d6b7c5
JB
1875#else
1876 forkin = forkout = -1;
2af70a0c 1877#endif /* not USG, or USG_SUBTTY_WORKS */
d0d6b7c5
JB
1878 pty_flag = 1;
1879 }
1880 else
1881#endif /* HAVE_PTYS */
d0d6b7c5 1882 {
fc14013c
KH
1883 int tem;
1884 tem = pipe (sv);
1885 if (tem < 0)
1886 report_file_error ("Creating pipe", Qnil);
d0d6b7c5
JB
1887 inchannel = sv[0];
1888 forkout = sv[1];
fc14013c
KH
1889 tem = pipe (sv);
1890 if (tem < 0)
1891 {
68c45bf0
PE
1892 emacs_close (inchannel);
1893 emacs_close (forkout);
fc14013c
KH
1894 report_file_error ("Creating pipe", Qnil);
1895 }
d0d6b7c5
JB
1896 outchannel = sv[1];
1897 forkin = sv[0];
1898 }
d0d6b7c5
JB
1899
1900#if 0
1901 /* Replaced by close_process_descs */
1902 set_exclusive_use (inchannel);
1903 set_exclusive_use (outchannel);
1904#endif
1905
d0d6b7c5
JB
1906#ifdef O_NONBLOCK
1907 fcntl (inchannel, F_SETFL, O_NONBLOCK);
03832893 1908 fcntl (outchannel, F_SETFL, O_NONBLOCK);
d0d6b7c5
JB
1909#else
1910#ifdef O_NDELAY
1911 fcntl (inchannel, F_SETFL, O_NDELAY);
03832893 1912 fcntl (outchannel, F_SETFL, O_NDELAY);
d0d6b7c5
JB
1913#endif
1914#endif
1915
1916 /* Record this as an active process, with its channels.
1917 As a result, child_setup will close Emacs's side of the pipes. */
1918 chan_process[inchannel] = process;
60f0fb11
SM
1919 XPROCESS (process)->infd = inchannel;
1920 XPROCESS (process)->outfd = outchannel;
16782258
JD
1921
1922 /* Previously we recorded the tty descriptor used in the subprocess.
1923 It was only used for getting the foreground tty process, so now
1924 we just reopen the device (see emacs_get_tty_pgrp) as this is
1925 more portable (see USG_SUBTTY_WORKS above). */
1926
60f0fb11 1927 XPROCESS (process)->pty_flag = pty_flag;
d0d6b7c5 1928 XPROCESS (process)->status = Qrun;
03f04413 1929 setup_process_coding_systems (process);
d0d6b7c5
JB
1930
1931 /* Delay interrupts until we have a chance to store
1932 the new fork's pid in its process structure */
0dc70c33
KH
1933#ifdef POSIX_SIGNALS
1934 sigemptyset (&blocked);
1935#ifdef SIGCHLD
1936 sigaddset (&blocked, SIGCHLD);
1937#endif
351e611f 1938#ifdef HAVE_WORKING_VFORK
0dc70c33
KH
1939 /* On many hosts (e.g. Solaris 2.4), if a vforked child calls `signal',
1940 this sets the parent's signal handlers as well as the child's.
1941 So delay all interrupts whose handlers the child might munge,
1942 and record the current handlers so they can be restored later. */
1943 sigaddset (&blocked, SIGINT ); sigaction (SIGINT , 0, &sigint_action );
1944 sigaddset (&blocked, SIGQUIT); sigaction (SIGQUIT, 0, &sigquit_action);
1945#ifdef AIX
1946 sigaddset (&blocked, SIGHUP ); sigaction (SIGHUP , 0, &sighup_action );
1947#endif
351e611f 1948#endif /* HAVE_WORKING_VFORK */
0dc70c33
KH
1949 sigprocmask (SIG_BLOCK, &blocked, &procmask);
1950#else /* !POSIX_SIGNALS */
d0d6b7c5
JB
1951#ifdef SIGCHLD
1952#ifdef BSD4_1
1953 sighold (SIGCHLD);
1954#else /* not BSD4_1 */
e39a993c 1955#if defined (BSD_SYSTEM) || defined (HPUX)
d0d6b7c5
JB
1956 sigsetmask (sigmask (SIGCHLD));
1957#else /* ordinary USG */
1958#if 0
1959 sigchld_deferred = 0;
1960 sigchld = signal (SIGCHLD, create_process_sigchld);
1961#endif
1962#endif /* ordinary USG */
1963#endif /* not BSD4_1 */
1964#endif /* SIGCHLD */
0dc70c33 1965#endif /* !POSIX_SIGNALS */
d0d6b7c5 1966
3081bf8d 1967 FD_SET (inchannel, &input_wait_mask);
a69281ff 1968 FD_SET (inchannel, &non_keyboard_wait_mask);
3081bf8d
KH
1969 if (inchannel > max_process_desc)
1970 max_process_desc = inchannel;
1971
d0d6b7c5
JB
1972 /* Until we store the proper pid, enable sigchld_handler
1973 to recognize an unknown pid as standing for this process.
1974 It is very important not to let this `marker' value stay
1975 in the table after this function has returned; if it does
1976 it might cause call-process to hang and subsequent asynchronous
1977 processes to get their return values scrambled. */
6bfd98e7 1978 XPROCESS (process)->pid = -1;
d0d6b7c5 1979
ececcbec 1980 BLOCK_INPUT;
177c0ea7 1981
d0d6b7c5
JB
1982 {
1983 /* child_setup must clobber environ on systems with true vfork.
1984 Protect it from permanent change. */
1985 char **save_environ = environ;
1986
14dc6093 1987 current_dir = ENCODE_FILE (current_dir);
a932f187 1988
e98d950b 1989#ifndef WINDOWSNT
d0d6b7c5
JB
1990 pid = vfork ();
1991 if (pid == 0)
e98d950b 1992#endif /* not WINDOWSNT */
d0d6b7c5
JB
1993 {
1994 int xforkin = forkin;
1995 int xforkout = forkout;
1996
1997#if 0 /* This was probably a mistake--it duplicates code later on,
1998 but fails to handle all the cases. */
1999 /* Make sure SIGCHLD is not blocked in the child. */
2000 sigsetmask (SIGEMPTYMASK);
2001#endif
2002
2003 /* Make the pty be the controlling terminal of the process. */
2004#ifdef HAVE_PTYS
2005 /* First, disconnect its current controlling terminal. */
2006#ifdef HAVE_SETSID
7ce48618
RS
2007 /* We tried doing setsid only if pty_flag, but it caused
2008 process_set_signal to fail on SGI when using a pipe. */
2009 setsid ();
ce4c9c90 2010 /* Make the pty's terminal the controlling terminal. */
084fd64a 2011 if (pty_flag)
39e9ebcd 2012 {
39e9ebcd
RS
2013#ifdef TIOCSCTTY
2014 /* We ignore the return value
2015 because faith@cs.unc.edu says that is necessary on Linux. */
2016 ioctl (xforkin, TIOCSCTTY, 0);
ce4c9c90 2017#endif
39e9ebcd 2018 }
d0d6b7c5 2019#else /* not HAVE_SETSID */
c14e53a4 2020#ifdef USG
000ab717 2021 /* It's very important to call setpgrp here and no time
d0d6b7c5
JB
2022 afterwards. Otherwise, we lose our controlling tty which
2023 is set when we open the pty. */
2024 setpgrp ();
2025#endif /* USG */
2026#endif /* not HAVE_SETSID */
9bcf8ec6
KH
2027#if defined (HAVE_TERMIOS) && defined (LDISC1)
2028 if (pty_flag && xforkin >= 0)
2029 {
2030 struct termios t;
2031 tcgetattr (xforkin, &t);
2032 t.c_lflag = LDISC1;
2033 if (tcsetattr (xforkin, TCSANOW, &t) < 0)
68c45bf0 2034 emacs_write (1, "create_process/tcsetattr LDISC1 failed\n", 39);
9bcf8ec6
KH
2035 }
2036#else
aafadd9f 2037#if defined (NTTYDISC) && defined (TIOCSETD)
ff773a4e 2038 if (pty_flag && xforkin >= 0)
afc549fd
RS
2039 {
2040 /* Use new line discipline. */
2041 int ldisc = NTTYDISC;
4458f555 2042 ioctl (xforkin, TIOCSETD, &ldisc);
afc549fd 2043 }
000ab717 2044#endif
9bcf8ec6 2045#endif
177c0ea7 2046#ifdef TIOCNOTTY
d0d6b7c5
JB
2047 /* In 4.3BSD, the TIOCSPGRP bug has been fixed, and now you
2048 can do TIOCSPGRP only to the process's controlling tty. */
2049 if (pty_flag)
2050 {
177c0ea7 2051 /* I wonder: would just ioctl (0, TIOCNOTTY, 0) work here?
d0d6b7c5 2052 I can't test it since I don't have 4.3. */
68c45bf0 2053 int j = emacs_open ("/dev/tty", O_RDWR, 0);
d0d6b7c5 2054 ioctl (j, TIOCNOTTY, 0);
68c45bf0 2055 emacs_close (j);
5a570e37 2056#ifndef USG
d0d6b7c5
JB
2057 /* In order to get a controlling terminal on some versions
2058 of BSD, it is necessary to put the process in pgrp 0
2059 before it opens the terminal. */
99c1aeca 2060#ifdef HAVE_SETPGID
3ea1d291
RS
2061 setpgid (0, 0);
2062#else
d0d6b7c5 2063 setpgrp (0, 0);
3ea1d291 2064#endif
d0d6b7c5
JB
2065#endif
2066 }
2067#endif /* TIOCNOTTY */
2068
e39a993c 2069#if !defined (DONT_REOPEN_PTY)
d0d6b7c5 2070/*** There is a suggestion that this ought to be a
99153b9e
RS
2071 conditional on TIOCSPGRP,
2072 or !(defined (HAVE_SETSID) && defined (TIOCSCTTY)).
2073 Trying the latter gave the wrong results on Debian GNU/Linux 1.1;
2074 that system does seem to need this code, even though
2075 both HAVE_SETSID and TIOCSCTTY are defined. */
d0d6b7c5
JB
2076 /* Now close the pty (if we had it open) and reopen it.
2077 This makes the pty the controlling terminal of the subprocess. */
2078 if (pty_flag)
2079 {
99e3d726
RS
2080#ifdef SET_CHILD_PTY_PGRP
2081 int pgrp = getpid ();
2082#endif
2083
68c45bf0
PE
2084 /* I wonder if emacs_close (emacs_open (pty_name, ...))
2085 would work? */
d0d6b7c5 2086 if (xforkin >= 0)
68c45bf0
PE
2087 emacs_close (xforkin);
2088 xforkout = xforkin = emacs_open (pty_name, O_RDWR, 0);
d0d6b7c5 2089
4aa54ba8
RS
2090 if (xforkin < 0)
2091 {
68c45bf0
PE
2092 emacs_write (1, "Couldn't open the pty terminal ", 31);
2093 emacs_write (1, pty_name, strlen (pty_name));
2094 emacs_write (1, "\n", 1);
4aa54ba8
RS
2095 _exit (1);
2096 }
2097
99e3d726
RS
2098#ifdef SET_CHILD_PTY_PGRP
2099 ioctl (xforkin, TIOCSPGRP, &pgrp);
2100 ioctl (xforkout, TIOCSPGRP, &pgrp);
2101#endif
d0d6b7c5 2102 }
e39a993c 2103#endif /* not DONT_REOPEN_PTY */
e9bf058b 2104
d0d6b7c5 2105#ifdef SETUP_SLAVE_PTY
13a72104
RS
2106 if (pty_flag)
2107 {
2108 SETUP_SLAVE_PTY;
2109 }
d0d6b7c5
JB
2110#endif /* SETUP_SLAVE_PTY */
2111#ifdef AIX
2112 /* On AIX, we've disabled SIGHUP above once we start a child on a pty.
2113 Now reenable it in the child, so it will die when we want it to. */
2114 if (pty_flag)
2115 signal (SIGHUP, SIG_DFL);
2116#endif
2117#endif /* HAVE_PTYS */
2118
0dc70c33
KH
2119 signal (SIGINT, SIG_DFL);
2120 signal (SIGQUIT, SIG_DFL);
2121
2122 /* Stop blocking signals in the child. */
2123#ifdef POSIX_SIGNALS
2124 sigprocmask (SIG_SETMASK, &procmask, 0);
2125#else /* !POSIX_SIGNALS */
d0d6b7c5
JB
2126#ifdef SIGCHLD
2127#ifdef BSD4_1
2128 sigrelse (SIGCHLD);
2129#else /* not BSD4_1 */
e39a993c 2130#if defined (BSD_SYSTEM) || defined (HPUX)
d0d6b7c5
JB
2131 sigsetmask (SIGEMPTYMASK);
2132#else /* ordinary USG */
63528b78 2133#if 0
d0d6b7c5 2134 signal (SIGCHLD, sigchld);
63528b78 2135#endif
d0d6b7c5
JB
2136#endif /* ordinary USG */
2137#endif /* not BSD4_1 */
2138#endif /* SIGCHLD */
0dc70c33 2139#endif /* !POSIX_SIGNALS */
5e7e1da2 2140
e39a993c 2141#if !defined (DONT_REOPEN_PTY)
ab01d0a8
RS
2142 if (pty_flag)
2143 child_setup_tty (xforkout);
e39a993c 2144#endif /* not DONT_REOPEN_PTY */
e98d950b
RS
2145#ifdef WINDOWSNT
2146 pid = child_setup (xforkin, xforkout, xforkout,
2147 new_argv, 1, current_dir);
177c0ea7 2148#else /* not WINDOWSNT */
d0d6b7c5 2149 child_setup (xforkin, xforkout, xforkout,
e065a56e 2150 new_argv, 1, current_dir);
e98d950b 2151#endif /* not WINDOWSNT */
d0d6b7c5
JB
2152 }
2153 environ = save_environ;
2154 }
2155
ececcbec
RS
2156 UNBLOCK_INPUT;
2157
4a127b3b 2158 /* This runs in the Emacs process. */
d0d6b7c5 2159 if (pid < 0)
6311cf58
RS
2160 {
2161 if (forkin >= 0)
68c45bf0 2162 emacs_close (forkin);
6311cf58 2163 if (forkin != forkout && forkout >= 0)
68c45bf0 2164 emacs_close (forkout);
6311cf58 2165 }
4a127b3b
KH
2166 else
2167 {
2168 /* vfork succeeded. */
6bfd98e7 2169 XPROCESS (process)->pid = pid;
d0d6b7c5 2170
e98d950b 2171#ifdef WINDOWSNT
4a127b3b 2172 register_child (pid, inchannel);
e98d950b
RS
2173#endif /* WINDOWSNT */
2174
4a127b3b
KH
2175 /* If the subfork execv fails, and it exits,
2176 this close hangs. I don't know why.
2177 So have an interrupt jar it loose. */
30904ab7
GM
2178 {
2179 struct atimer *timer;
2180 EMACS_TIME offset;
177c0ea7 2181
30904ab7
GM
2182 stop_polling ();
2183 EMACS_SET_SECS_USECS (offset, 1, 0);
2184 timer = start_atimer (ATIMER_RELATIVE, offset, create_process_1, 0);
177c0ea7 2185
30904ab7
GM
2186 if (forkin >= 0)
2187 emacs_close (forkin);
2188
2189 cancel_atimer (timer);
2190 start_polling ();
2191 }
177c0ea7 2192
4a127b3b 2193 if (forkin != forkout && forkout >= 0)
68c45bf0 2194 emacs_close (forkout);
d0d6b7c5 2195
875e6b94 2196#ifdef HAVE_PTYS
4a127b3b
KH
2197 if (pty_flag)
2198 XPROCESS (process)->tty_name = build_string (pty_name);
2199 else
875e6b94 2200#endif
4a127b3b
KH
2201 XPROCESS (process)->tty_name = Qnil;
2202 }
3b9a3dfa 2203
4a127b3b
KH
2204 /* Restore the signal state whether vfork succeeded or not.
2205 (We will signal an error, below, if it failed.) */
0dc70c33 2206#ifdef POSIX_SIGNALS
351e611f 2207#ifdef HAVE_WORKING_VFORK
0dc70c33
KH
2208 /* Restore the parent's signal handlers. */
2209 sigaction (SIGINT, &sigint_action, 0);
2210 sigaction (SIGQUIT, &sigquit_action, 0);
2211#ifdef AIX
2212 sigaction (SIGHUP, &sighup_action, 0);
2213#endif
351e611f 2214#endif /* HAVE_WORKING_VFORK */
0dc70c33
KH
2215 /* Stop blocking signals in the parent. */
2216 sigprocmask (SIG_SETMASK, &procmask, 0);
2217#else /* !POSIX_SIGNALS */
d0d6b7c5
JB
2218#ifdef SIGCHLD
2219#ifdef BSD4_1
2220 sigrelse (SIGCHLD);
2221#else /* not BSD4_1 */
e39a993c 2222#if defined (BSD_SYSTEM) || defined (HPUX)
d0d6b7c5
JB
2223 sigsetmask (SIGEMPTYMASK);
2224#else /* ordinary USG */
2225#if 0
2226 signal (SIGCHLD, sigchld);
2227 /* Now really handle any of these signals
2228 that came in during this function. */
2229 if (sigchld_deferred)
2230 kill (getpid (), SIGCHLD);
2231#endif
2232#endif /* ordinary USG */
2233#endif /* not BSD4_1 */
2234#endif /* SIGCHLD */
0dc70c33 2235#endif /* !POSIX_SIGNALS */
4a127b3b
KH
2236
2237 /* Now generate the error if vfork failed. */
2238 if (pid < 0)
2239 report_file_error ("Doing vfork", Qnil);
d0d6b7c5
JB
2240}
2241#endif /* not VMS */
2242
e690ca94 2243\f
d0d6b7c5
JB
2244#ifdef HAVE_SOCKETS
2245
e690ca94
KS
2246/* Convert an internal struct sockaddr to a lisp object (vector or string).
2247 The address family of sa is not included in the result. */
2248
2249static Lisp_Object
2250conv_sockaddr_to_lisp (sa, len)
2251 struct sockaddr *sa;
2252 int len;
2253{
2254 Lisp_Object address;
2255 int i;
2256 unsigned char *cp;
2257 register struct Lisp_Vector *p;
2258
2259 switch (sa->sa_family)
2260 {
2261 case AF_INET:
2262 {
2263 struct sockaddr_in *sin = (struct sockaddr_in *) sa;
2264 len = sizeof (sin->sin_addr) + 1;
2265 address = Fmake_vector (make_number (len), Qnil);
2266 p = XVECTOR (address);
2267 p->contents[--len] = make_number (ntohs (sin->sin_port));
2268 cp = (unsigned char *)&sin->sin_addr;
2269 break;
2270 }
e1652a86
KS
2271#ifdef AF_INET6
2272 case AF_INET6:
2273 {
2274 struct sockaddr_in6 *sin6 = (struct sockaddr_in6 *) sa;
2275 uint16_t *ip6 = (uint16_t *)&sin6->sin6_addr;
2276 len = sizeof (sin6->sin6_addr)/2 + 1;
2277 address = Fmake_vector (make_number (len), Qnil);
2278 p = XVECTOR (address);
2279 p->contents[--len] = make_number (ntohs (sin6->sin6_port));
2280 for (i = 0; i < len; i++)
2281 p->contents[i] = make_number (ntohs (ip6[i]));
2282 return address;
2283 }
2284#endif
e690ca94
KS
2285#ifdef HAVE_LOCAL_SOCKETS
2286 case AF_LOCAL:
2287 {
fb23673a
EZ
2288 struct sockaddr_un *sockun = (struct sockaddr_un *) sa;
2289 for (i = 0; i < sizeof (sockun->sun_path); i++)
2290 if (sockun->sun_path[i] == 0)
e690ca94 2291 break;
fb23673a 2292 return make_unibyte_string (sockun->sun_path, i);
e690ca94
KS
2293 }
2294#endif
2295 default:
2296 len -= sizeof (sa->sa_family);
2297 address = Fcons (make_number (sa->sa_family),
2298 Fmake_vector (make_number (len), Qnil));
2299 p = XVECTOR (XCDR (address));
2300 cp = (unsigned char *) sa + sizeof (sa->sa_family);
2301 break;
2302 }
2303
2304 i = 0;
2305 while (i < len)
2306 p->contents[i++] = make_number (*cp++);
2307
2308 return address;
2309}
2310
2311
2312/* Get family and required size for sockaddr structure to hold ADDRESS. */
2313
2314static int
2315get_lisp_to_sockaddr_size (address, familyp)
2316 Lisp_Object address;
2317 int *familyp;
2318{
2319 register struct Lisp_Vector *p;
2320
2321 if (VECTORP (address))
2322 {
2323 p = XVECTOR (address);
2324 if (p->size == 5)
2325 {
2326 *familyp = AF_INET;
2327 return sizeof (struct sockaddr_in);
2328 }
e1652a86
KS
2329#ifdef AF_INET6
2330 else if (p->size == 9)
2331 {
2332 *familyp = AF_INET6;
2333 return sizeof (struct sockaddr_in6);
2334 }
2335#endif
e690ca94
KS
2336 }
2337#ifdef HAVE_LOCAL_SOCKETS
2338 else if (STRINGP (address))
2339 {
2340 *familyp = AF_LOCAL;
2341 return sizeof (struct sockaddr_un);
2342 }
2343#endif
2344 else if (CONSP (address) && INTEGERP (XCAR (address)) && VECTORP (XCDR (address)))
2345 {
2346 struct sockaddr *sa;
2347 *familyp = XINT (XCAR (address));
2348 p = XVECTOR (XCDR (address));
2349 return p->size + sizeof (sa->sa_family);
2350 }
2351 return 0;
2352}
2353
2354/* Convert an address object (vector or string) to an internal sockaddr.
9d1a8e5d
RS
2355
2356 The address format has been basically validated by
2357 get_lisp_to_sockaddr_size, but this does not mean FAMILY is valid;
2358 it could have come from user data. So if FAMILY is not valid,
2359 we return after zeroing *SA. */
e690ca94
KS
2360
2361static void
2362conv_lisp_to_sockaddr (family, address, sa, len)
2363 int family;
2364 Lisp_Object address;
2365 struct sockaddr *sa;
2366 int len;
2367{
2368 register struct Lisp_Vector *p;
34967d0f 2369 register unsigned char *cp = NULL;
e690ca94
KS
2370 register int i;
2371
2372 bzero (sa, len);
e690ca94
KS
2373
2374 if (VECTORP (address))
2375 {
2376 p = XVECTOR (address);
2377 if (family == AF_INET)
2378 {
2379 struct sockaddr_in *sin = (struct sockaddr_in *) sa;
2380 len = sizeof (sin->sin_addr) + 1;
2381 i = XINT (p->contents[--len]);
2382 sin->sin_port = htons (i);
2383 cp = (unsigned char *)&sin->sin_addr;
9d1a8e5d 2384 sa->sa_family = family;
e690ca94 2385 }
e1652a86
KS
2386#ifdef AF_INET6
2387 else if (family == AF_INET6)
2388 {
2389 struct sockaddr_in6 *sin6 = (struct sockaddr_in6 *) sa;
2390 uint16_t *ip6 = (uint16_t *)&sin6->sin6_addr;
2391 len = sizeof (sin6->sin6_addr) + 1;
2392 i = XINT (p->contents[--len]);
2393 sin6->sin6_port = htons (i);
2394 for (i = 0; i < len; i++)
2395 if (INTEGERP (p->contents[i]))
2396 {
2397 int j = XFASTINT (p->contents[i]) & 0xffff;
2398 ip6[i] = ntohs (j);
2399 }
9d1a8e5d 2400 sa->sa_family = family;
e1652a86
KS
2401 }
2402#endif
6bf890d7 2403 return;
e690ca94
KS
2404 }
2405 else if (STRINGP (address))
2406 {
2407#ifdef HAVE_LOCAL_SOCKETS
2408 if (family == AF_LOCAL)
2409 {
fb23673a 2410 struct sockaddr_un *sockun = (struct sockaddr_un *) sa;
d5db4077 2411 cp = SDATA (address);
fb23673a
EZ
2412 for (i = 0; i < sizeof (sockun->sun_path) && *cp; i++)
2413 sockun->sun_path[i] = *cp++;
9d1a8e5d 2414 sa->sa_family = family;
e690ca94
KS
2415 }
2416#endif
2417 return;
2418 }
2419 else
2420 {
2421 p = XVECTOR (XCDR (address));
2422 cp = (unsigned char *)sa + sizeof (sa->sa_family);
2423 }
2424
2425 for (i = 0; i < len; i++)
2426 if (INTEGERP (p->contents[i]))
2427 *cp++ = XFASTINT (p->contents[i]) & 0xff;
2428}
2429
2430#ifdef DATAGRAM_SOCKETS
2431DEFUN ("process-datagram-address", Fprocess_datagram_address, Sprocess_datagram_address,
2432 1, 1, 0,
2433 doc: /* Get the current datagram address associated with PROCESS. */)
2434 (process)
2435 Lisp_Object process;
2436{
2437 int channel;
2438
2439 CHECK_PROCESS (process);
2440
2441 if (!DATAGRAM_CONN_P (process))
2442 return Qnil;
2443
60f0fb11 2444 channel = XPROCESS (process)->infd;
e690ca94
KS
2445 return conv_sockaddr_to_lisp (datagram_address[channel].sa,
2446 datagram_address[channel].len);
2447}
2448
2449DEFUN ("set-process-datagram-address", Fset_process_datagram_address, Sset_process_datagram_address,
2450 2, 2, 0,
2451 doc: /* Set the datagram address for PROCESS to ADDRESS.
2452Returns nil upon error setting address, ADDRESS otherwise. */)
2453 (process, address)
2454 Lisp_Object process, address;
2455{
2456 int channel;
2457 int family, len;
2458
2459 CHECK_PROCESS (process);
2460
2461 if (!DATAGRAM_CONN_P (process))
2462 return Qnil;
2463
60f0fb11 2464 channel = XPROCESS (process)->infd;
e690ca94
KS
2465
2466 len = get_lisp_to_sockaddr_size (address, &family);
2467 if (datagram_address[channel].len != len)
2468 return Qnil;
2469 conv_lisp_to_sockaddr (family, address, datagram_address[channel].sa, len);
2470 return address;
2471}
2472#endif
2473\f
2474
2475static struct socket_options {
2476 /* The name of this option. Should be lowercase version of option
177c0ea7 2477 name without SO_ prefix. */
e690ca94 2478 char *name;
e690ca94
KS
2479 /* Option level SOL_... */
2480 int optlevel;
2481 /* Option number SO_... */
2482 int optnum;
6b61353c
KH
2483 enum { SOPT_UNKNOWN, SOPT_BOOL, SOPT_INT, SOPT_IFNAME, SOPT_LINGER } opttype;
2484 enum { OPIX_NONE=0, OPIX_MISC=1, OPIX_REUSEADDR=2 } optbit;
e690ca94
KS
2485} socket_options[] =
2486 {
2487#ifdef SO_BINDTODEVICE
6b61353c 2488 { ":bindtodevice", SOL_SOCKET, SO_BINDTODEVICE, SOPT_IFNAME, OPIX_MISC },
e690ca94
KS
2489#endif
2490#ifdef SO_BROADCAST
6b61353c 2491 { ":broadcast", SOL_SOCKET, SO_BROADCAST, SOPT_BOOL, OPIX_MISC },
e690ca94
KS
2492#endif
2493#ifdef SO_DONTROUTE
6b61353c 2494 { ":dontroute", SOL_SOCKET, SO_DONTROUTE, SOPT_BOOL, OPIX_MISC },
e690ca94
KS
2495#endif
2496#ifdef SO_KEEPALIVE
6b61353c 2497 { ":keepalive", SOL_SOCKET, SO_KEEPALIVE, SOPT_BOOL, OPIX_MISC },
e690ca94
KS
2498#endif
2499#ifdef SO_LINGER
6b61353c 2500 { ":linger", SOL_SOCKET, SO_LINGER, SOPT_LINGER, OPIX_MISC },
e690ca94
KS
2501#endif
2502#ifdef SO_OOBINLINE
6b61353c 2503 { ":oobinline", SOL_SOCKET, SO_OOBINLINE, SOPT_BOOL, OPIX_MISC },
e690ca94
KS
2504#endif
2505#ifdef SO_PRIORITY
6b61353c 2506 { ":priority", SOL_SOCKET, SO_PRIORITY, SOPT_INT, OPIX_MISC },
e690ca94
KS
2507#endif
2508#ifdef SO_REUSEADDR
6b61353c 2509 { ":reuseaddr", SOL_SOCKET, SO_REUSEADDR, SOPT_BOOL, OPIX_REUSEADDR },
e690ca94 2510#endif
6b61353c 2511 { 0, 0, 0, SOPT_UNKNOWN, OPIX_NONE }
e690ca94
KS
2512 };
2513
6b61353c 2514/* Set option OPT to value VAL on socket S.
e690ca94 2515
6b61353c
KH
2516 Returns (1<<socket_options[OPT].optbit) if option is known, 0 otherwise.
2517 Signals an error if setting a known option fails.
2518*/
e690ca94
KS
2519
2520static int
6b61353c 2521set_socket_option (s, opt, val)
e690ca94 2522 int s;
6b61353c 2523 Lisp_Object opt, val;
e690ca94 2524{
6b61353c
KH
2525 char *name;
2526 struct socket_options *sopt;
2527 int ret = 0;
e690ca94 2528
6b61353c 2529 CHECK_SYMBOL (opt);
e690ca94 2530
6b61353c
KH
2531 name = (char *) SDATA (SYMBOL_NAME (opt));
2532 for (sopt = socket_options; sopt->name; sopt++)
2533 if (strcmp (name, sopt->name) == 0)
2534 break;
e690ca94 2535
6b61353c
KH
2536 switch (sopt->opttype)
2537 {
2538 case SOPT_BOOL:
2539 {
2540 int optval;
2541 optval = NILP (val) ? 0 : 1;
2542 ret = setsockopt (s, sopt->optlevel, sopt->optnum,
2543 &optval, sizeof (optval));
2544 break;
2545 }
e690ca94 2546
6b61353c
KH
2547 case SOPT_INT:
2548 {
2549 int optval;
2550 if (INTEGERP (val))
2551 optval = XINT (val);
2552 else
2553 error ("Bad option value for %s", name);
2554 ret = setsockopt (s, sopt->optlevel, sopt->optnum,
2555 &optval, sizeof (optval));
2556 break;
2557 }
e690ca94 2558
6b61353c
KH
2559#ifdef SO_BINDTODEVICE
2560 case SOPT_IFNAME:
2561 {
2562 char devname[IFNAMSIZ+1];
e690ca94 2563
6b61353c
KH
2564 /* This is broken, at least in the Linux 2.4 kernel.
2565 To unbind, the arg must be a zero integer, not the empty string.
2566 This should work on all systems. KFS. 2003-09-23. */
2567 bzero (devname, sizeof devname);
2568 if (STRINGP (val))
e690ca94 2569 {
6b61353c
KH
2570 char *arg = (char *) SDATA (val);
2571 int len = min (strlen (arg), IFNAMSIZ);
2572 bcopy (arg, devname, len);
e690ca94 2573 }
6b61353c
KH
2574 else if (!NILP (val))
2575 error ("Bad option value for %s", name);
2576 ret = setsockopt (s, sopt->optlevel, sopt->optnum,
2577 devname, IFNAMSIZ);
2578 break;
2579 }
2580#endif
e690ca94 2581
177c0ea7 2582#ifdef SO_LINGER
6b61353c
KH
2583 case SOPT_LINGER:
2584 {
2585 struct linger linger;
e690ca94 2586
6b61353c
KH
2587 linger.l_onoff = 1;
2588 linger.l_linger = 0;
2589 if (INTEGERP (val))
2590 linger.l_linger = XINT (val);
2591 else
2592 linger.l_onoff = NILP (val) ? 0 : 1;
2593 ret = setsockopt (s, sopt->optlevel, sopt->optnum,
2594 &linger, sizeof (linger));
2595 break;
2596 }
e690ca94 2597#endif
6b61353c
KH
2598
2599 default:
2600 return 0;
e690ca94 2601 }
6b61353c
KH
2602
2603 if (ret < 0)
2604 report_file_error ("Cannot set network option",
2605 Fcons (opt, Fcons (val, Qnil)));
2606 return (1 << sopt->optbit);
e690ca94
KS
2607}
2608
6b61353c
KH
2609
2610DEFUN ("set-network-process-option",
2611 Fset_network_process_option, Sset_network_process_option,
2612 3, 4, 0,
2613 doc: /* For network process PROCESS set option OPTION to value VALUE.
2614See `make-network-process' for a list of options and values.
2615If optional fourth arg NO-ERROR is non-nil, don't signal an error if
2616OPTION is not a supported option, return nil instead; otherwise return t. */)
2617 (process, option, value, no_error)
2618 Lisp_Object process, option, value;
2619 Lisp_Object no_error;
e690ca94 2620{
6b61353c
KH
2621 int s;
2622 struct Lisp_Process *p;
e690ca94 2623
e690ca94 2624 CHECK_PROCESS (process);
6b61353c
KH
2625 p = XPROCESS (process);
2626 if (!NETCONN1_P (p))
2627 error ("Process is not a network process");
2628
60f0fb11 2629 s = p->infd;
6b61353c
KH
2630 if (s < 0)
2631 error ("Process is not running");
2632
2633 if (set_socket_option (s, option, value))
e690ca94 2634 {
6b61353c
KH
2635 p->childp = Fplist_put (p->childp, option, value);
2636 return Qt;
e690ca94 2637 }
6b61353c
KH
2638
2639 if (NILP (no_error))
2640 error ("Unknown or unsupported option");
2641
2642 return Qnil;
e690ca94 2643}
6b61353c 2644
e690ca94 2645\f
e690ca94
KS
2646/* A version of request_sigio suitable for a record_unwind_protect. */
2647
98228e72 2648#ifdef __ultrix__
ff6daed3 2649static Lisp_Object
e690ca94
KS
2650unwind_request_sigio (dummy)
2651 Lisp_Object dummy;
2652{
2653 if (interrupt_input)
2654 request_sigio ();
2655 return Qnil;
2656}
98228e72 2657#endif
e690ca94
KS
2658
2659/* Create a network stream/datagram client/server process. Treated
2660 exactly like a normal process when reading and writing. Primary
d0d6b7c5
JB
2661 differences are in status display and process deletion. A network
2662 connection has no PID; you cannot signal it. All you can do is
e690ca94
KS
2663 stop/continue it and deactivate/close it via delete-process */
2664
177c0ea7
JB
2665DEFUN ("make-network-process", Fmake_network_process, Smake_network_process,
2666 0, MANY, 0,
e690ca94
KS
2667 doc: /* Create and return a network server or client process.
2668
fa9d4315 2669In Emacs, network connections are represented by process objects, so
e690ca94
KS
2670input and output work as for subprocesses and `delete-process' closes
2671a network connection. However, a network process has no process id,
d22426e1 2672it cannot be signaled, and the status codes are different from normal
e690ca94
KS
2673processes.
2674
2675Arguments are specified as keyword/argument pairs. The following
2676arguments are defined:
2677
2678:name NAME -- NAME is name for process. It is modified if necessary
2679to make it unique.
2680
2681:buffer BUFFER -- BUFFER is the buffer (or buffer-name) to associate
2682with the process. Process output goes at end of that buffer, unless
2683you specify an output stream or filter function to handle the output.
2684BUFFER may be also nil, meaning that this process is not associated
2685with any buffer.
2686
2687:host HOST -- HOST is name of the host to connect to, or its IP
2688address. The symbol `local' specifies the local host. If specified
2689for a server process, it must be a valid name or address for the local
2690host, and only clients connecting to that address will be accepted.
2691
2692:service SERVICE -- SERVICE is name of the service desired, or an
2693integer specifying a port number to connect to. If SERVICE is t,
eba25e7c
GM
2694a random port number is selected for the server. (If Emacs was
2695compiled with getaddrinfo, a port number can also be specified as a
2696string, e.g. "80", as well as an integer. This is not portable.)
e690ca94 2697
9057ff80
KS
2698:type TYPE -- TYPE is the type of connection. The default (nil) is a
2699stream type connection, `datagram' creates a datagram type connection.
2700
e690ca94 2701:family FAMILY -- FAMILY is the address (and protocol) family for the
e1652a86
KS
2702service specified by HOST and SERVICE. The default (nil) is to use
2703whatever address family (IPv4 or IPv6) that is defined for the host
2704and port number specified by HOST and SERVICE. Other address families
2705supported are:
e690ca94 2706 local -- for a local (i.e. UNIX) address specified by SERVICE.
e1652a86
KS
2707 ipv4 -- use IPv4 address family only.
2708 ipv6 -- use IPv6 address family only.
e690ca94
KS
2709
2710:local ADDRESS -- ADDRESS is the local address used for the connection.
2711This parameter is ignored when opening a client process. When specified
2712for a server process, the FAMILY, HOST and SERVICE args are ignored.
2713
2714:remote ADDRESS -- ADDRESS is the remote partner's address for the
2715connection. This parameter is ignored when opening a stream server
2716process. For a datagram server process, it specifies the initial
2717setting of the remote datagram address. When specified for a client
2718process, the FAMILY, HOST, and SERVICE args are ignored.
2719
2720The format of ADDRESS depends on the address family:
2721- An IPv4 address is represented as an vector of integers [A B C D P]
2722corresponding to numeric IP address A.B.C.D and port number P.
2723- A local address is represented as a string with the address in the
2724local address space.
2725- An "unsupported family" address is represented by a cons (F . AV)
2726where F is the family number and AV is a vector containing the socket
2727address data with one element per address data byte. Do not rely on
2728this format in portable code, as it may depend on implementation
2729defined constants, data sizes, and data structure alignment.
2730
6b61353c
KH
2731:coding CODING -- If CODING is a symbol, it specifies the coding
2732system used for both reading and writing for this process. If CODING
2733is a cons (DECODING . ENCODING), DECODING is used for reading, and
2734ENCODING is used for writing.
e690ca94
KS
2735
2736:nowait BOOL -- If BOOL is non-nil for a stream type client process,
2737return without waiting for the connection to complete; instead, the
2738sentinel function will be called with second arg matching "open" (if
2739successful) or "failed" when the connect completes. Default is to use
2740a blocking connect (i.e. wait) for stream type connections.
2741
2742:noquery BOOL -- Query the user unless BOOL is non-nil, and process is
f3d9532b 2743running when Emacs is exited.
e690ca94
KS
2744
2745:stop BOOL -- Start process in the `stopped' state if BOOL non-nil.
2746In the stopped state, a server process does not accept new
2747connections, and a client process does not handle incoming traffic.
2748The stopped state is cleared by `continue-process' and set by
2749`stop-process'.
2750
2751:filter FILTER -- Install FILTER as the process filter.
2752
7392e23c
KS
2753:filter-multibyte BOOL -- If BOOL is non-nil, strings given to the
2754process filter are multibyte, otherwise they are unibyte.
e0f24100 2755If this keyword is not specified, the strings are multibyte if
03f04413
KH
2756`default-enable-multibyte-characters' is non-nil.
2757
e690ca94
KS
2758:sentinel SENTINEL -- Install SENTINEL as the process sentinel.
2759
2760:log LOG -- Install LOG as the server process log function. This
991234f0 2761function is called when the server accepts a network connection from a
e690ca94
KS
2762client. The arguments are SERVER, CLIENT, and MESSAGE, where SERVER
2763is the server process, CLIENT is the new process for the connection,
2764and MESSAGE is a string.
2765
faa7db08 2766:plist PLIST -- Install PLIST as the new process' initial plist.
177c0ea7 2767
6b61353c 2768:server QLEN -- if QLEN is non-nil, create a server process for the
e690ca94 2769specified FAMILY, SERVICE, and connection type (stream or datagram).
6b61353c
KH
2770If QLEN is an integer, it is used as the max. length of the server's
2771pending connection queue (also known as the backlog); the default
2772queue length is 5. Default is to create a client process.
2773
2774The following network options can be specified for this connection:
2775
2776:broadcast BOOL -- Allow send and receive of datagram broadcasts.
2777:dontroute BOOL -- Only send to directly connected hosts.
2778:keepalive BOOL -- Send keep-alive messages on network stream.
2779:linger BOOL or TIMEOUT -- Send queued messages before closing.
2780:oobinline BOOL -- Place out-of-band data in receive data stream.
2781:priority INT -- Set protocol defined priority for sent packets.
2782:reuseaddr BOOL -- Allow reusing a recently used local address
2783 (this is allowed by default for a server process).
2784:bindtodevice NAME -- bind to interface NAME. Using this may require
2785 special privileges on some systems.
2786
2787Consult the relevant system programmer's manual pages for more
2788information on using these options.
2789
2790
2791A server process will listen for and accept connections from clients.
2792When a client connection is accepted, a new network process is created
2793for the connection with the following parameters:
e690ca94 2794
e690ca94
KS
2795- The client's process name is constructed by concatenating the server
2796process' NAME and a client identification string.
2797- If the FILTER argument is non-nil, the client process will not get a
2798separate process buffer; otherwise, the client's process buffer is a newly
2799created buffer named after the server process' BUFFER name or process
177c0ea7 2800NAME concatenated with the client identification string.
e690ca94
KS
2801- The connection type and the process filter and sentinel parameters are
2802inherited from the server process' TYPE, FILTER and SENTINEL.
2803- The client process' contact info is set according to the client's
2804addressing information (typically an IP address and a port number).
faa7db08 2805- The client process' plist is initialized from the server's plist.
e690ca94
KS
2806
2807Notice that the FILTER and SENTINEL args are never used directly by
2808the server process. Also, the BUFFER argument is not used directly by
9e9a5792
KS
2809the server process, but via the optional :log function, accepted (and
2810failed) connections may be logged in the server process' buffer.
e690ca94 2811
365aee82
KS
2812The original argument list, modified with the actual connection
2813information, is available via the `process-contact' function.
365aee82 2814
fa9d4315 2815usage: (make-network-process &rest ARGS) */)
e690ca94
KS
2816 (nargs, args)
2817 int nargs;
2818 Lisp_Object *args;
d0d6b7c5
JB
2819{
2820 Lisp_Object proc;
e690ca94
KS
2821 Lisp_Object contact;
2822 struct Lisp_Process *p;
70dbdb36 2823#ifdef HAVE_GETADDRINFO
e690ca94 2824 struct addrinfo ai, *res, *lres;
e1652a86
KS
2825 struct addrinfo hints;
2826 char *portstring, portbuf[128];
70dbdb36 2827#else /* HAVE_GETADDRINFO */
dd2a17ab
KS
2828 struct _emacs_addrinfo
2829 {
2830 int ai_family;
2831 int ai_socktype;
2832 int ai_protocol;
2833 int ai_addrlen;
2834 struct sockaddr *ai_addr;
2835 struct _emacs_addrinfo *ai_next;
2836 } ai, *res, *lres;
418b48fd 2837#endif /* HAVE_GETADDRINFO */
e690ca94
KS
2838 struct sockaddr_in address_in;
2839#ifdef HAVE_LOCAL_SOCKETS
2840 struct sockaddr_un address_un;
2841#endif
2842 int port;
dd2a17ab
KS
2843 int ret = 0;
2844 int xerrno = 0;
418b48fd 2845 int s = -1, outch, inch;
e690ca94 2846 struct gcpro gcpro1;
aed13378 2847 int count = SPECPDL_INDEX ();
5684cd6e 2848 int count1;
e690ca94
KS
2849 Lisp_Object QCaddress; /* one of QClocal or QCremote */
2850 Lisp_Object tem;
2851 Lisp_Object name, buffer, host, service, address;
2852 Lisp_Object filter, sentinel;
2853 int is_non_blocking_client = 0;
6b61353c 2854 int is_server = 0, backlog = 5;
9057ff80 2855 int socktype;
e690ca94
KS
2856 int family = -1;
2857
2858 if (nargs == 0)
2859 return Qnil;
dd2a17ab 2860
e690ca94
KS
2861 /* Save arguments for process-contact and clone-process. */
2862 contact = Flist (nargs, args);
2863 GCPRO1 (contact);
2864
bff3ed0a
RS
2865#ifdef WINDOWSNT
2866 /* Ensure socket support is loaded if available. */
2867 init_winsock (TRUE);
2868#endif
2869
9057ff80
KS
2870 /* :type TYPE (nil: stream, datagram */
2871 tem = Fplist_get (contact, QCtype);
2872 if (NILP (tem))
2873 socktype = SOCK_STREAM;
2874#ifdef DATAGRAM_SOCKETS
2875 else if (EQ (tem, Qdatagram))
2876 socktype = SOCK_DGRAM;
e690ca94 2877#endif
9057ff80
KS
2878 else
2879 error ("Unsupported connection type");
e690ca94
KS
2880
2881 /* :server BOOL */
2882 tem = Fplist_get (contact, QCserver);
2883 if (!NILP (tem))
2884 {
75728599
JR
2885 /* Don't support network sockets when non-blocking mode is
2886 not available, since a blocked Emacs is not useful. */
2887#if defined(TERM) || (!defined(O_NONBLOCK) && !defined(O_NDELAY))
e690ca94
KS
2888 error ("Network servers not supported");
2889#else
2890 is_server = 1;
6b61353c
KH
2891 if (INTEGERP (tem))
2892 backlog = XINT (tem);
e690ca94
KS
2893#endif
2894 }
2895
2896 /* Make QCaddress an alias for :local (server) or :remote (client). */
2897 QCaddress = is_server ? QClocal : QCremote;
2898
d7e344cd 2899 /* :nowait BOOL */
e690ca94
KS
2900 if (!is_server && socktype == SOCK_STREAM
2901 && (tem = Fplist_get (contact, QCnowait), !NILP (tem)))
2902 {
2903#ifndef NON_BLOCKING_CONNECT
2904 error ("Non-blocking connect not supported");
2905#else
2906 is_non_blocking_client = 1;
2907#endif
2908 }
2909
2910 name = Fplist_get (contact, QCname);
2911 buffer = Fplist_get (contact, QCbuffer);
2912 filter = Fplist_get (contact, QCfilter);
2913 sentinel = Fplist_get (contact, QCsentinel);
2914
b7826503 2915 CHECK_STRING (name);
e690ca94
KS
2916
2917#ifdef TERM
2918 /* Let's handle TERM before things get complicated ... */
2919 host = Fplist_get (contact, QChost);
b7826503 2920 CHECK_STRING (host);
177c0ea7 2921
e690ca94
KS
2922 service = Fplist_get (contact, QCservice);
2923 if (INTEGERP (service))
2924 port = htons ((unsigned short) XINT (service));
2925 else
2926 {
2927 struct servent *svc_info;
2928 CHECK_STRING (service);
d5db4077 2929 svc_info = getservbyname (SDATA (service), "tcp");
e690ca94 2930 if (svc_info == 0)
d5db4077 2931 error ("Unknown service: %s", SDATA (service));
e690ca94
KS
2932 port = svc_info->s_port;
2933 }
2934
2935 s = connect_server (0);
2936 if (s < 0)
2937 report_file_error ("error creating socket", Fcons (name, Qnil));
d5db4077 2938 send_command (s, C_PORT, 0, "%s:%d", SDATA (host), ntohs (port));
e690ca94
KS
2939 send_command (s, C_DUMB, 1, 0);
2940
2941#else /* not TERM */
2942
2943 /* Initialize addrinfo structure in case we don't use getaddrinfo. */
2944 ai.ai_socktype = socktype;
2945 ai.ai_protocol = 0;
2946 ai.ai_next = NULL;
2947 res = &ai;
a319f7c1 2948
e690ca94
KS
2949 /* :local ADDRESS or :remote ADDRESS */
2950 address = Fplist_get (contact, QCaddress);
2951 if (!NILP (address))
a319f7c1 2952 {
e690ca94
KS
2953 host = service = Qnil;
2954
2955 if (!(ai.ai_addrlen = get_lisp_to_sockaddr_size (address, &family)))
2956 error ("Malformed :address");
2957 ai.ai_family = family;
2958 ai.ai_addr = alloca (ai.ai_addrlen);
2959 conv_lisp_to_sockaddr (family, address, ai.ai_addr, ai.ai_addrlen);
2960 goto open_socket;
a319f7c1 2961 }
e690ca94
KS
2962
2963 /* :family FAMILY -- nil (for Inet), local, or integer. */
2964 tem = Fplist_get (contact, QCfamily);
e1652a86 2965 if (NILP (tem))
a319f7c1 2966 {
87b6ca8d 2967#if defined(HAVE_GETADDRINFO) && defined(AF_INET6)
e1652a86
KS
2968 family = AF_UNSPEC;
2969#else
2970 family = AF_INET;
e690ca94 2971#endif
a319f7c1 2972 }
e1652a86
KS
2973#ifdef HAVE_LOCAL_SOCKETS
2974 else if (EQ (tem, Qlocal))
2975 family = AF_LOCAL;
2976#endif
2977#ifdef AF_INET6
2978 else if (EQ (tem, Qipv6))
2979 family = AF_INET6;
2980#endif
2981 else if (EQ (tem, Qipv4))
2982 family = AF_INET;
2983 else if (INTEGERP (tem))
2984 family = XINT (tem);
2985 else
e690ca94 2986 error ("Unknown address family");
e1652a86 2987
e690ca94
KS
2988 ai.ai_family = family;
2989
2990 /* :service SERVICE -- string, integer (port number), or t (random port). */
2991 service = Fplist_get (contact, QCservice);
2992
2993#ifdef HAVE_LOCAL_SOCKETS
2994 if (family == AF_LOCAL)
d0d6b7c5 2995 {
e690ca94
KS
2996 /* Host is not used. */
2997 host = Qnil;
b7826503 2998 CHECK_STRING (service);
e690ca94
KS
2999 bzero (&address_un, sizeof address_un);
3000 address_un.sun_family = AF_LOCAL;
d5db4077 3001 strncpy (address_un.sun_path, SDATA (service), sizeof address_un.sun_path);
e690ca94
KS
3002 ai.ai_addr = (struct sockaddr *) &address_un;
3003 ai.ai_addrlen = sizeof address_un;
3004 goto open_socket;
d0d6b7c5 3005 }
e690ca94 3006#endif
a319f7c1 3007
e690ca94
KS
3008 /* :host HOST -- hostname, ip address, or 'local for localhost. */
3009 host = Fplist_get (contact, QChost);
3010 if (!NILP (host))
3011 {
3012 if (EQ (host, Qlocal))
3013 host = build_string ("localhost");
3014 CHECK_STRING (host);
3015 }
d0d6b7c5 3016
798b64bb
KH
3017 /* Slow down polling to every ten seconds.
3018 Some kernels have a bug which causes retrying connect to fail
3019 after a connect. Polling can interfere with gethostbyname too. */
3020#ifdef POLL_FOR_INPUT
e690ca94
KS
3021 if (socktype == SOCK_STREAM)
3022 {
3023 record_unwind_protect (unwind_stop_other_atimers, Qnil);
3024 bind_polling_period (10);
3025 }
798b64bb
KH
3026#endif
3027
a319f7c1 3028#ifdef HAVE_GETADDRINFO
e690ca94
KS
3029 /* If we have a host, use getaddrinfo to resolve both host and service.
3030 Otherwise, use getservbyname to lookup the service. */
3031 if (!NILP (host))
3032 {
3033
3034 /* SERVICE can either be a string or int.
3035 Convert to a C string for later use by getaddrinfo. */
3036 if (EQ (service, Qt))
3037 portstring = "0";
3038 else if (INTEGERP (service))
3039 {
3040 sprintf (portbuf, "%ld", (long) XINT (service));
3041 portstring = portbuf;
3042 }
3043 else
3044 {
3045 CHECK_STRING (service);
d5db4077 3046 portstring = SDATA (service);
e690ca94
KS
3047 }
3048
3049 immediate_quit = 1;
3050 QUIT;
3051 memset (&hints, 0, sizeof (hints));
3052 hints.ai_flags = 0;
e1652a86 3053 hints.ai_family = family;
e690ca94
KS
3054 hints.ai_socktype = socktype;
3055 hints.ai_protocol = 0;
08116b48
CY
3056
3057#ifdef HAVE_RES_INIT
3058 res_init ();
3059#endif
3060
d5db4077 3061 ret = getaddrinfo (SDATA (host), portstring, &hints, &res);
e690ca94 3062 if (ret)
f6270f62 3063#ifdef HAVE_GAI_STRERROR
d5db4077 3064 error ("%s/%s %s", SDATA (host), portstring, gai_strerror(ret));
f6270f62 3065#else
d5db4077 3066 error ("%s/%s getaddrinfo error %d", SDATA (host), portstring, ret);
f6270f62 3067#endif
e690ca94 3068 immediate_quit = 0;
a319f7c1 3069
e690ca94
KS
3070 goto open_socket;
3071 }
3072#endif /* HAVE_GETADDRINFO */
a319f7c1 3073
e690ca94
KS
3074 /* We end up here if getaddrinfo is not defined, or in case no hostname
3075 has been specified (e.g. for a local server process). */
3076
3077 if (EQ (service, Qt))
3078 port = 0;
3079 else if (INTEGERP (service))
3080 port = htons ((unsigned short) XINT (service));
3081 else
616da37c 3082 {
e690ca94
KS
3083 struct servent *svc_info;
3084 CHECK_STRING (service);
177c0ea7 3085 svc_info = getservbyname (SDATA (service),
e690ca94
KS
3086 (socktype == SOCK_DGRAM ? "udp" : "tcp"));
3087 if (svc_info == 0)
d5db4077 3088 error ("Unknown service: %s", SDATA (service));
e690ca94
KS
3089 port = svc_info->s_port;
3090 }
3091
3092 bzero (&address_in, sizeof address_in);
3093 address_in.sin_family = family;
3094 address_in.sin_addr.s_addr = INADDR_ANY;
3095 address_in.sin_port = port;
3096
3097#ifndef HAVE_GETADDRINFO
3098 if (!NILP (host))
3099 {
3100 struct hostent *host_info_ptr;
3101
3102 /* gethostbyname may fail with TRY_AGAIN, but we don't honour that,
f3d9532b 3103 as it may `hang' Emacs for a very long time. */
5d6c2aa3
RS
3104 immediate_quit = 1;
3105 QUIT;
08116b48
CY
3106
3107#ifdef HAVE_RES_INIT
3108 res_init ();
3109#endif
3110
d5db4077 3111 host_info_ptr = gethostbyname (SDATA (host));
5d6c2aa3 3112 immediate_quit = 0;
177c0ea7 3113
e690ca94
KS
3114 if (host_info_ptr)
3115 {
3116 bcopy (host_info_ptr->h_addr, (char *) &address_in.sin_addr,
3117 host_info_ptr->h_length);
3118 family = host_info_ptr->h_addrtype;
3119 address_in.sin_family = family;
3120 }
3121 else
3122 /* Attempt to interpret host as numeric inet address */
3123 {
4624371d 3124 unsigned long numeric_addr;
d5db4077 3125 numeric_addr = inet_addr ((char *) SDATA (host));
4624371d 3126 if (numeric_addr == -1)
d5db4077 3127 error ("Unknown host \"%s\"", SDATA (host));
d0d6b7c5 3128
e690ca94
KS
3129 bcopy ((char *)&numeric_addr, (char *) &address_in.sin_addr,
3130 sizeof (address_in.sin_addr));
3131 }
d0d6b7c5 3132
e690ca94 3133 }
dd2a17ab 3134#endif /* not HAVE_GETADDRINFO */
d0d6b7c5 3135
e690ca94
KS
3136 ai.ai_family = family;
3137 ai.ai_addr = (struct sockaddr *) &address_in;
3138 ai.ai_addrlen = sizeof address_in;
3139
3140 open_socket:
3141
6bbba5a6
KL
3142#ifdef __ultrix__
3143 /* Previously this was compiled unconditionally, but that seems
3144 unnecessary on modern systems, and `unrequest_sigio' was a noop
3145 under X anyway. --lorentey */
e690ca94
KS
3146 /* Kernel bugs (on Ultrix at least) cause lossage (not just EINTR)
3147 when connect is interrupted. So let's not let it get interrupted.
3148 Note we do not turn off polling, because polling is only used
3149 when not interrupt_input, and thus not normally used on the systems
3150 which have this bug. On systems which use polling, there's no way
3151 to quit if polling is turned off. */
3152 if (interrupt_input
3153 && !is_server && socktype == SOCK_STREAM)
3154 {
3155 /* Comment from KFS: The original open-network-stream code
3156 didn't unwind protect this, but it seems like the proper
3157 thing to do. In any case, I don't see how it could harm to
3158 do this -- and it makes cleanup (using unbind_to) easier. */
3159 record_unwind_protect (unwind_request_sigio, Qnil);
3160 unrequest_sigio ();
3161 }
6bbba5a6 3162#endif
e690ca94 3163
dd2a17ab 3164 /* Do this in case we never enter the for-loop below. */
aed13378 3165 count1 = SPECPDL_INDEX ();
dd2a17ab 3166 s = -1;
457a9bee 3167
dd2a17ab
KS
3168 for (lres = res; lres; lres = lres->ai_next)
3169 {
6b61353c
KH
3170 int optn, optbits;
3171
4e9dd03b
KS
3172 retry_connect:
3173
dd2a17ab
KS
3174 s = socket (lres->ai_family, lres->ai_socktype, lres->ai_protocol);
3175 if (s < 0)
3176 {
3177 xerrno = errno;
3178 continue;
3179 }
0f2ee0c1 3180
e690ca94
KS
3181#ifdef DATAGRAM_SOCKETS
3182 if (!is_server && socktype == SOCK_DGRAM)
3183 break;
3184#endif /* DATAGRAM_SOCKETS */
3185
dd2a17ab 3186#ifdef NON_BLOCKING_CONNECT
e690ca94 3187 if (is_non_blocking_client)
dd2a17ab
KS
3188 {
3189#ifdef O_NONBLOCK
3190 ret = fcntl (s, F_SETFL, O_NONBLOCK);
3191#else
3192 ret = fcntl (s, F_SETFL, O_NDELAY);
3193#endif
3194 if (ret < 0)
3195 {
3196 xerrno = errno;
3197 emacs_close (s);
3198 s = -1;
3199 continue;
3200 }
3201 }
3202#endif
177c0ea7 3203
dd2a17ab 3204 /* Make us close S if quit. */
dd2a17ab
KS
3205 record_unwind_protect (close_file_unwind, make_number (s));
3206
6b61353c
KH
3207 /* Parse network options in the arg list.
3208 We simply ignore anything which isn't a known option (including other keywords).
3209 An error is signalled if setting a known option fails. */
3210 for (optn = optbits = 0; optn < nargs-1; optn += 2)
3211 optbits |= set_socket_option (s, args[optn], args[optn+1]);
3212
e690ca94
KS
3213 if (is_server)
3214 {
3215 /* Configure as a server socket. */
6b61353c
KH
3216
3217 /* SO_REUSEADDR = 1 is default for server sockets; must specify
3218 explicit :reuseaddr key to override this. */
e690ca94
KS
3219#ifdef HAVE_LOCAL_SOCKETS
3220 if (family != AF_LOCAL)
3221#endif
6b61353c
KH
3222 if (!(optbits & (1 << OPIX_REUSEADDR)))
3223 {
3224 int optval = 1;
3225 if (setsockopt (s, SOL_SOCKET, SO_REUSEADDR, &optval, sizeof optval))
3226 report_file_error ("Cannot set reuse option on server socket", Qnil);
3227 }
177c0ea7 3228
e690ca94
KS
3229 if (bind (s, lres->ai_addr, lres->ai_addrlen))
3230 report_file_error ("Cannot bind server socket", Qnil);
3231
3232#ifdef HAVE_GETSOCKNAME
3233 if (EQ (service, Qt))
3234 {
3235 struct sockaddr_in sa1;
3236 int len1 = sizeof (sa1);
3237 if (getsockname (s, (struct sockaddr *)&sa1, &len1) == 0)
3238 {
3239 ((struct sockaddr_in *)(lres->ai_addr))->sin_port = sa1.sin_port;
21bd170d 3240 service = make_number (ntohs (sa1.sin_port));
e690ca94
KS
3241 contact = Fplist_put (contact, QCservice, service);
3242 }
3243 }
3244#endif
3245
6b61353c 3246 if (socktype == SOCK_STREAM && listen (s, backlog))
e690ca94
KS
3247 report_file_error ("Cannot listen on server socket", Qnil);
3248
3249 break;
3250 }
3251
dd2a17ab
KS
3252 immediate_quit = 1;
3253 QUIT;
3254
3255 /* This turns off all alarm-based interrupts; the
3256 bind_polling_period call above doesn't always turn all the
3257 short-interval ones off, especially if interrupt_input is
3258 set.
3259
3260 It'd be nice to be able to control the connect timeout
177c0ea7 3261 though. Would non-blocking connect calls be portable?
dd2a17ab
KS
3262
3263 This used to be conditioned by HAVE_GETADDRINFO. Why? */
3264
f40f9848 3265 turn_on_atimers (0);
dd2a17ab
KS
3266
3267 ret = connect (s, lres->ai_addr, lres->ai_addrlen);
3268 xerrno = errno;
3269
f40f9848 3270 turn_on_atimers (1);
dd2a17ab
KS
3271
3272 if (ret == 0 || xerrno == EISCONN)
3273 {
dd2a17ab
KS
3274 /* The unwind-protect will be discarded afterwards.
3275 Likewise for immediate_quit. */
3276 break;
3277 }
3278
3279#ifdef NON_BLOCKING_CONNECT
3280#ifdef EINPROGRESS
e690ca94 3281 if (is_non_blocking_client && xerrno == EINPROGRESS)
dd2a17ab
KS
3282 break;
3283#else
3284#ifdef EWOULDBLOCK
e690ca94 3285 if (is_non_blocking_client && xerrno == EWOULDBLOCK)
dd2a17ab
KS
3286 break;
3287#endif
3288#endif
3289#endif
e333e864 3290
0f2ee0c1
RS
3291 immediate_quit = 0;
3292
dd2a17ab 3293 /* Discard the unwind protect closing S. */
5684cd6e 3294 specpdl_ptr = specpdl + count1;
68c45bf0 3295 emacs_close (s);
dd2a17ab 3296 s = -1;
4e9dd03b
KS
3297
3298 if (xerrno == EINTR)
3299 goto retry_connect;
dd2a17ab 3300 }
457a9bee 3301
e690ca94
KS
3302 if (s >= 0)
3303 {
3304#ifdef DATAGRAM_SOCKETS
3305 if (socktype == SOCK_DGRAM)
3306 {
3307 if (datagram_address[s].sa)
3308 abort ();
3309 datagram_address[s].sa = (struct sockaddr *) xmalloc (lres->ai_addrlen);
3310 datagram_address[s].len = lres->ai_addrlen;
3311 if (is_server)
3312 {
3313 Lisp_Object remote;
3314 bzero (datagram_address[s].sa, lres->ai_addrlen);
3315 if (remote = Fplist_get (contact, QCremote), !NILP (remote))
3316 {
3317 int rfamily, rlen;
3318 rlen = get_lisp_to_sockaddr_size (remote, &rfamily);
3319 if (rfamily == lres->ai_family && rlen == lres->ai_addrlen)
3320 conv_lisp_to_sockaddr (rfamily, remote,
3321 datagram_address[s].sa, rlen);
3322 }
3323 }
3324 else
3325 bcopy (lres->ai_addr, datagram_address[s].sa, lres->ai_addrlen);
3326 }
3327#endif
177c0ea7 3328 contact = Fplist_put (contact, QCaddress,
e690ca94 3329 conv_sockaddr_to_lisp (lres->ai_addr, lres->ai_addrlen));
2185db04
KS
3330#ifdef HAVE_GETSOCKNAME
3331 if (!is_server)
3332 {
3333 struct sockaddr_in sa1;
3334 int len1 = sizeof (sa1);
3335 if (getsockname (s, (struct sockaddr *)&sa1, &len1) == 0)
3336 contact = Fplist_put (contact, QClocal,
3337 conv_sockaddr_to_lisp (&sa1, len1));
3338 }
3339#endif
e690ca94
KS
3340 }
3341
54b3b62f
YM
3342 immediate_quit = 0;
3343
dd2a17ab 3344#ifdef HAVE_GETADDRINFO
e690ca94 3345 if (res != &ai)
54b3b62f
YM
3346 {
3347 BLOCK_INPUT;
3348 freeaddrinfo (res);
3349 UNBLOCK_INPUT;
3350 }
dd2a17ab
KS
3351#endif
3352
e690ca94
KS
3353 /* Discard the unwind protect for closing S, if any. */
3354 specpdl_ptr = specpdl + count1;
3355
3356 /* Unwind bind_polling_period and request_sigio. */
3357 unbind_to (count, Qnil);
3358
dd2a17ab
KS
3359 if (s < 0)
3360 {
dd2a17ab
KS
3361 /* If non-blocking got this far - and failed - assume non-blocking is
3362 not supported after all. This is probably a wrong assumption, but
e690ca94
KS
3363 the normal blocking calls to open-network-stream handles this error
3364 better. */
3365 if (is_non_blocking_client)
dd2a17ab 3366 return Qnil;
dd2a17ab 3367
d0d6b7c5 3368 errno = xerrno;
e690ca94
KS
3369 if (is_server)
3370 report_file_error ("make server process failed", contact);
3371 else
3372 report_file_error ("make client process failed", contact);
d0d6b7c5 3373 }
44ade2e9 3374
e690ca94 3375#endif /* not TERM */
d0d6b7c5
JB
3376
3377 inch = s;
59f23005 3378 outch = s;
d0d6b7c5
JB
3379
3380 if (!NILP (buffer))
3381 buffer = Fget_buffer_create (buffer);
3382 proc = make_process (name);
3383
3384 chan_process[inch] = proc;
3385
3386#ifdef O_NONBLOCK
3387 fcntl (inch, F_SETFL, O_NONBLOCK);
3388#else
3389#ifdef O_NDELAY
3390 fcntl (inch, F_SETFL, O_NDELAY);
3391#endif
3392#endif
3393
e690ca94
KS
3394 p = XPROCESS (proc);
3395
3396 p->childp = contact;
faa7db08 3397 p->plist = Fcopy_sequence (Fplist_get (contact, QCplist));
177c0ea7 3398
e690ca94
KS
3399 p->buffer = buffer;
3400 p->sentinel = sentinel;
3401 p->filter = filter;
3402 p->log = Fplist_get (contact, QClog);
3403 if (tem = Fplist_get (contact, QCnoquery), !NILP (tem))
60f0fb11 3404 p->kill_without_query = 1;
e690ca94
KS
3405 if ((tem = Fplist_get (contact, QCstop), !NILP (tem)))
3406 p->command = Qt;
6bfd98e7 3407 p->pid = 0;
60f0fb11
SM
3408 p->infd = inch;
3409 p->outfd = outch;
e690ca94
KS
3410 if (is_server && socktype == SOCK_STREAM)
3411 p->status = Qlisten;
dd2a17ab 3412
f523e0c3
SM
3413 /* Make the process marker point into the process buffer (if any). */
3414 if (BUFFERP (buffer))
3415 set_marker_both (p->mark, buffer,
3416 BUF_ZV (XBUFFER (buffer)),
3417 BUF_ZV_BYTE (XBUFFER (buffer)));
3418
dd2a17ab 3419#ifdef NON_BLOCKING_CONNECT
e690ca94 3420 if (is_non_blocking_client)
dd2a17ab
KS
3421 {
3422 /* We may get here if connect did succeed immediately. However,
3423 in that case, we still need to signal this like a non-blocking
3424 connection. */
e690ca94 3425 p->status = Qconnect;
dd2a17ab
KS
3426 if (!FD_ISSET (inch, &connect_wait_mask))
3427 {
3428 FD_SET (inch, &connect_wait_mask);
3429 num_pending_connects++;
3430 }
3431 }
3432 else
3433#endif
e690ca94
KS
3434 /* A server may have a client filter setting of Qt, but it must
3435 still listen for incoming connects unless it is stopped. */
3436 if ((!EQ (p->filter, Qt) && !EQ (p->command, Qt))
3437 || (EQ (p->status, Qlisten) && NILP (p->command)))
dd2a17ab
KS
3438 {
3439 FD_SET (inch, &input_wait_mask);
3440 FD_SET (inch, &non_keyboard_wait_mask);
3441 }
3442
7d0e672e
RS
3443 if (inch > max_process_desc)
3444 max_process_desc = inch;
d0d6b7c5 3445
e690ca94
KS
3446 tem = Fplist_member (contact, QCcoding);
3447 if (!NILP (tem) && (!CONSP (tem) || !CONSP (XCDR (tem))))
3448 tem = Qnil; /* No error message (too late!). */
3449
67918941
RS
3450 {
3451 /* Setup coding systems for communicating with the network stream. */
3452 struct gcpro gcpro1;
3453 /* Qt denotes we have not yet called Ffind_operation_coding_system. */
3454 Lisp_Object coding_systems = Qt;
3455 Lisp_Object args[5], val;
3456
e690ca94 3457 if (!NILP (tem))
6b61353c
KH
3458 {
3459 val = XCAR (XCDR (tem));
3460 if (CONSP (val))
3461 val = XCAR (val);
3462 }
e690ca94 3463 else if (!NILP (Vcoding_system_for_read))
67918941 3464 val = Vcoding_system_for_read;
41d03b9a
GM
3465 else if ((!NILP (buffer) && NILP (XBUFFER (buffer)->enable_multibyte_characters))
3466 || (NILP (buffer) && NILP (buffer_defaults.enable_multibyte_characters)))
67918941
RS
3467 /* We dare not decode end-of-line format by setting VAL to
3468 Qraw_text, because the existing Emacs Lisp libraries
3469 assume that they receive bare code including a sequene of
3470 CR LF. */
3471 val = Qnil;
3472 else
3473 {
991234f0
KS
3474 if (NILP (host) || NILP (service))
3475 coding_systems = Qnil;
3476 else
3477 {
3478 args[0] = Qopen_network_stream, args[1] = name,
3479 args[2] = buffer, args[3] = host, args[4] = service;
3480 GCPRO1 (proc);
3481 coding_systems = Ffind_operation_coding_system (5, args);
3482 UNGCPRO;
3483 }
67918941 3484 if (CONSP (coding_systems))
70949dac 3485 val = XCAR (coding_systems);
67918941 3486 else if (CONSP (Vdefault_process_coding_system))
70949dac 3487 val = XCAR (Vdefault_process_coding_system);
67918941
RS
3488 else
3489 val = Qnil;
3490 }
e690ca94 3491 p->decode_coding_system = val;
0fa1789e 3492
e690ca94 3493 if (!NILP (tem))
6b61353c
KH
3494 {
3495 val = XCAR (XCDR (tem));
3496 if (CONSP (val))
3497 val = XCDR (val);
3498 }
e690ca94 3499 else if (!NILP (Vcoding_system_for_write))
67918941
RS
3500 val = Vcoding_system_for_write;
3501 else if (NILP (current_buffer->enable_multibyte_characters))
3502 val = Qnil;
3503 else
3504 {
3505 if (EQ (coding_systems, Qt))
3506 {
991234f0
KS
3507 if (NILP (host) || NILP (service))
3508 coding_systems = Qnil;
3509 else
3510 {
3511 args[0] = Qopen_network_stream, args[1] = name,
3512 args[2] = buffer, args[3] = host, args[4] = service;
3513 GCPRO1 (proc);
3514 coding_systems = Ffind_operation_coding_system (5, args);
3515 UNGCPRO;
3516 }
67918941
RS
3517 }
3518 if (CONSP (coding_systems))
70949dac 3519 val = XCDR (coding_systems);
67918941 3520 else if (CONSP (Vdefault_process_coding_system))
70949dac 3521 val = XCDR (Vdefault_process_coding_system);
67918941
RS
3522 else
3523 val = Qnil;
3524 }
e690ca94 3525 p->encode_coding_system = val;
67918941 3526 }
03f04413 3527 setup_process_coding_systems (proc);
0fa1789e 3528
e690ca94 3529 p->decoding_buf = make_uninit_string (0);
60f0fb11 3530 p->decoding_carryover = 0;
e690ca94 3531 p->encoding_buf = make_uninit_string (0);
0fa1789e 3532
e690ca94 3533 p->inherit_coding_system_flag
e6fca843 3534 = !(!NILP (tem) || NILP (buffer) || !inherit_process_coding_system);
52a1b894 3535
d0d6b7c5
JB
3536 UNGCPRO;
3537 return proc;
3538}
3539#endif /* HAVE_SOCKETS */
3540
6b61353c
KH
3541\f
3542#if defined(HAVE_SOCKETS) && defined(HAVE_NET_IF_H) && defined(HAVE_SYS_IOCTL_H)
3543
3544#ifdef SIOCGIFCONF
3545DEFUN ("network-interface-list", Fnetwork_interface_list, Snetwork_interface_list, 0, 0, 0,
3546 doc: /* Return an alist of all network interfaces and their network address.
3547Each element is a cons, the car of which is a string containing the
3548interface name, and the cdr is the network address in internal
3549format; see the description of ADDRESS in `make-network-process'. */)
3550 ()
3551{
3552 struct ifconf ifconf;
3553 struct ifreq *ifreqs = NULL;
3554 int ifaces = 0;
3555 int buf_size, s;
3556 Lisp_Object res;
3557
3558 s = socket (AF_INET, SOCK_STREAM, 0);
3559 if (s < 0)
3560 return Qnil;
3561
3562 again:
3563 ifaces += 25;
3564 buf_size = ifaces * sizeof(ifreqs[0]);
3565 ifreqs = (struct ifreq *)xrealloc(ifreqs, buf_size);
3566 if (!ifreqs)
3567 {
3568 close (s);
3569 return Qnil;
3570 }
3571
3572 ifconf.ifc_len = buf_size;
3573 ifconf.ifc_req = ifreqs;
3574 if (ioctl (s, SIOCGIFCONF, &ifconf))
3575 {
3576 close (s);
3577 return Qnil;
3578 }
3579
3580 if (ifconf.ifc_len == buf_size)
3581 goto again;
3582
3583 close (s);
3584 ifaces = ifconf.ifc_len / sizeof (ifreqs[0]);
3585
3586 res = Qnil;
3587 while (--ifaces >= 0)
3588 {
3589 struct ifreq *ifq = &ifreqs[ifaces];
3590 char namebuf[sizeof (ifq->ifr_name) + 1];
3591 if (ifq->ifr_addr.sa_family != AF_INET)
3592 continue;
3593 bcopy (ifq->ifr_name, namebuf, sizeof (ifq->ifr_name));
3594 namebuf[sizeof (ifq->ifr_name)] = 0;
3595 res = Fcons (Fcons (build_string (namebuf),
3596 conv_sockaddr_to_lisp (&ifq->ifr_addr,
3597 sizeof (struct sockaddr))),
3598 res);
3599 }
3600
3601 return res;
3602}
3603#endif /* SIOCGIFCONF */
3604
3605#if defined(SIOCGIFADDR) || defined(SIOCGIFHWADDR) || defined(SIOCGIFFLAGS)
3606
3607struct ifflag_def {
3608 int flag_bit;
3609 char *flag_sym;
3610};
3611
3612static struct ifflag_def ifflag_table[] = {
3613#ifdef IFF_UP
3614 { IFF_UP, "up" },
3615#endif
3616#ifdef IFF_BROADCAST
3617 { IFF_BROADCAST, "broadcast" },
3618#endif
3619#ifdef IFF_DEBUG
3620 { IFF_DEBUG, "debug" },
3621#endif
3622#ifdef IFF_LOOPBACK
3623 { IFF_LOOPBACK, "loopback" },
3624#endif
3625#ifdef IFF_POINTOPOINT
3626 { IFF_POINTOPOINT, "pointopoint" },
3627#endif
3628#ifdef IFF_RUNNING
3629 { IFF_RUNNING, "running" },
3630#endif
3631#ifdef IFF_NOARP
3632 { IFF_NOARP, "noarp" },
3633#endif
3634#ifdef IFF_PROMISC
3635 { IFF_PROMISC, "promisc" },
3636#endif
3637#ifdef IFF_NOTRAILERS
3638 { IFF_NOTRAILERS, "notrailers" },
3639#endif
3640#ifdef IFF_ALLMULTI
3641 { IFF_ALLMULTI, "allmulti" },
3642#endif
3643#ifdef IFF_MASTER
3644 { IFF_MASTER, "master" },
3645#endif
3646#ifdef IFF_SLAVE
3647 { IFF_SLAVE, "slave" },
3648#endif
3649#ifdef IFF_MULTICAST
3650 { IFF_MULTICAST, "multicast" },
3651#endif
3652#ifdef IFF_PORTSEL
3653 { IFF_PORTSEL, "portsel" },
3654#endif
3655#ifdef IFF_AUTOMEDIA
3656 { IFF_AUTOMEDIA, "automedia" },
3657#endif
3658#ifdef IFF_DYNAMIC
3659 { IFF_DYNAMIC, "dynamic" },
e1652a86 3660#endif
2026418c
YM
3661#ifdef IFF_OACTIVE
3662 { IFF_OACTIVE, "oactive" }, /* OpenBSD: transmission in progress */
e1652a86
KS
3663#endif
3664#ifdef IFF_SIMPLEX
3665 { IFF_SIMPLEX, "simplex" }, /* OpenBSD: can't hear own transmissions */
3666#endif
3667#ifdef IFF_LINK0
3668 { IFF_LINK0, "link0" }, /* OpenBSD: per link layer defined bit */
3669#endif
3670#ifdef IFF_LINK1
3671 { IFF_LINK1, "link1" }, /* OpenBSD: per link layer defined bit */
3672#endif
3673#ifdef IFF_LINK2
3674 { IFF_LINK2, "link2" }, /* OpenBSD: per link layer defined bit */
6b61353c
KH
3675#endif
3676 { 0, 0 }
3677};
3678
3679DEFUN ("network-interface-info", Fnetwork_interface_info, Snetwork_interface_info, 1, 1, 0,
3680 doc: /* Return information about network interface named IFNAME.
3681The return value is a list (ADDR BCAST NETMASK HWADDR FLAGS),
3682where ADDR is the layer 3 address, BCAST is the layer 3 broadcast address,
3683NETMASK is the layer 3 network mask, HWADDR is the layer 2 addres, and
3684FLAGS is the current flags of the interface. */)
3685 (ifname)
3686 Lisp_Object ifname;
3687{
3688 struct ifreq rq;
3689 Lisp_Object res = Qnil;
3690 Lisp_Object elt;
3691 int s;
3692 int any = 0;
3693
3694 CHECK_STRING (ifname);
3695
3696 bzero (rq.ifr_name, sizeof rq.ifr_name);
3697 strncpy (rq.ifr_name, SDATA (ifname), sizeof (rq.ifr_name));
3698
3699 s = socket (AF_INET, SOCK_STREAM, 0);
3700 if (s < 0)
3701 return Qnil;
3702
3703 elt = Qnil;
3704#if defined(SIOCGIFFLAGS) && defined(HAVE_STRUCT_IFREQ_IFR_FLAGS)
3705 if (ioctl (s, SIOCGIFFLAGS, &rq) == 0)
3706 {
3707 int flags = rq.ifr_flags;
3708 struct ifflag_def *fp;
3709 int fnum;
3710
3711 any++;
82a80058 3712 for (fp = ifflag_table; flags != 0 && fp->flag_sym; fp++)
6b61353c
KH
3713 {
3714 if (flags & fp->flag_bit)
3715 {
3716 elt = Fcons (intern (fp->flag_sym), elt);
3717 flags -= fp->flag_bit;
3718 }
3719 }
3720 for (fnum = 0; flags && fnum < 32; fnum++)
3721 {
3722 if (flags & (1 << fnum))
3723 {
3724 elt = Fcons (make_number (fnum), elt);
3725 }
3726 }
3727 }
3728#endif
3729 res = Fcons (elt, res);
3730
3731 elt = Qnil;
3732#if defined(SIOCGIFHWADDR) && defined(HAVE_STRUCT_IFREQ_IFR_HWADDR)
3733 if (ioctl (s, SIOCGIFHWADDR, &rq) == 0)
3734 {
3735 Lisp_Object hwaddr = Fmake_vector (make_number (6), Qnil);
3736 register struct Lisp_Vector *p = XVECTOR (hwaddr);
3737 int n;
3738
3739 any++;
3740 for (n = 0; n < 6; n++)
3741 p->contents[n] = make_number (((unsigned char *)&rq.ifr_hwaddr.sa_data[0])[n]);
3742 elt = Fcons (make_number (rq.ifr_hwaddr.sa_family), hwaddr);
3743 }
3744#endif
3745 res = Fcons (elt, res);
3746
3747 elt = Qnil;
2026418c 3748#if defined(SIOCGIFNETMASK) && (defined(HAVE_STRUCT_IFREQ_IFR_NETMASK) || defined(HAVE_STRUCT_IFREQ_IFR_ADDR))
6b61353c
KH
3749 if (ioctl (s, SIOCGIFNETMASK, &rq) == 0)
3750 {
3751 any++;
2026418c 3752#ifdef HAVE_STRUCT_IFREQ_IFR_NETMASK
6b61353c 3753 elt = conv_sockaddr_to_lisp (&rq.ifr_netmask, sizeof (rq.ifr_netmask));
2026418c
YM
3754#else
3755 elt = conv_sockaddr_to_lisp (&rq.ifr_addr, sizeof (rq.ifr_addr));
3756#endif
6b61353c
KH
3757 }
3758#endif
3759 res = Fcons (elt, res);
3760
3761 elt = Qnil;
3762#if defined(SIOCGIFBRDADDR) && defined(HAVE_STRUCT_IFREQ_IFR_BROADADDR)
3763 if (ioctl (s, SIOCGIFBRDADDR, &rq) == 0)
3764 {
3765 any++;
3766 elt = conv_sockaddr_to_lisp (&rq.ifr_broadaddr, sizeof (rq.ifr_broadaddr));
3767 }
3768#endif
3769 res = Fcons (elt, res);
3770
3771 elt = Qnil;
3772#if defined(SIOCGIFADDR) && defined(HAVE_STRUCT_IFREQ_IFR_ADDR)
3773 if (ioctl (s, SIOCGIFADDR, &rq) == 0)
3774 {
3775 any++;
3776 elt = conv_sockaddr_to_lisp (&rq.ifr_addr, sizeof (rq.ifr_addr));
3777 }
3778#endif
3779 res = Fcons (elt, res);
3780
3781 close (s);
3782
3783 return any ? res : Qnil;
3784}
3785#endif
3786#endif /* HAVE_SOCKETS */
3787
04391069
RS
3788/* Turn off input and output for process PROC. */
3789
6b53bb85 3790void
d0d6b7c5
JB
3791deactivate_process (proc)
3792 Lisp_Object proc;
3793{
3794 register int inchannel, outchannel;
3795 register struct Lisp_Process *p = XPROCESS (proc);
3796
60f0fb11
SM
3797 inchannel = p->infd;
3798 outchannel = p->outfd;
d0d6b7c5 3799
6b61353c 3800#ifdef ADAPTIVE_READ_BUFFERING
60f0fb11 3801 if (p->read_output_delay > 0)
6b61353c
KH
3802 {
3803 if (--process_output_delay_count < 0)
3804 process_output_delay_count = 0;
60f0fb11
SM
3805 p->read_output_delay = 0;
3806 p->read_output_skip = 0;
6b61353c
KH
3807 }
3808#endif
f3d9532b 3809
a9f2c884 3810 if (inchannel >= 0)
d0d6b7c5
JB
3811 {
3812 /* Beware SIGCHLD hereabouts. */
3813 flush_pending_output (inchannel);
3814#ifdef VMS
3815 {
3816 VMS_PROC_STUFF *get_vms_process_pointer (), *vs;
3817 sys$dassgn (outchannel);
c6c6865d 3818 vs = get_vms_process_pointer (p->pid);
d0d6b7c5
JB
3819 if (vs)
3820 give_back_vms_process_stuff (vs);
3821 }
3822#else
68c45bf0 3823 emacs_close (inchannel);
a9f2c884 3824 if (outchannel >= 0 && outchannel != inchannel)
68c45bf0 3825 emacs_close (outchannel);
d0d6b7c5
JB
3826#endif
3827
60f0fb11
SM
3828 p->infd = -1;
3829 p->outfd = -1;
e690ca94
KS
3830#ifdef DATAGRAM_SOCKETS
3831 if (DATAGRAM_CHAN_P (inchannel))
3832 {
3833 xfree (datagram_address[inchannel].sa);
3834 datagram_address[inchannel].sa = 0;
3835 datagram_address[inchannel].len = 0;
3836 }
3837#endif
d0d6b7c5
JB
3838 chan_process[inchannel] = Qnil;
3839 FD_CLR (inchannel, &input_wait_mask);
a69281ff 3840 FD_CLR (inchannel, &non_keyboard_wait_mask);
bad49fc7 3841#ifdef NON_BLOCKING_CONNECT
dd2a17ab
KS
3842 if (FD_ISSET (inchannel, &connect_wait_mask))
3843 {
3844 FD_CLR (inchannel, &connect_wait_mask);
3845 if (--num_pending_connects < 0)
3846 abort ();
3847 }
bad49fc7 3848#endif
7d0e672e
RS
3849 if (inchannel == max_process_desc)
3850 {
3851 int i;
3852 /* We just closed the highest-numbered process input descriptor,
3853 so recompute the highest-numbered one now. */
3854 max_process_desc = 0;
3855 for (i = 0; i < MAXDESC; i++)
3856 if (!NILP (chan_process[i]))
3857 max_process_desc = i;
3858 }
d0d6b7c5
JB
3859 }
3860}
3861
3862/* Close all descriptors currently in use for communication
3863 with subprocess. This is used in a newly-forked subprocess
3864 to get rid of irrelevant descriptors. */
3865
6b53bb85 3866void
d0d6b7c5
JB
3867close_process_descs ()
3868{
e98d950b 3869#ifndef WINDOWSNT
d0d6b7c5
JB
3870 int i;
3871 for (i = 0; i < MAXDESC; i++)
3872 {
3873 Lisp_Object process;
3874 process = chan_process[i];
3875 if (!NILP (process))
3876 {
60f0fb11
SM
3877 int in = XPROCESS (process)->infd;
3878 int out = XPROCESS (process)->outfd;
a9f2c884 3879 if (in >= 0)
68c45bf0 3880 emacs_close (in);
a9f2c884 3881 if (out >= 0 && in != out)
68c45bf0 3882 emacs_close (out);
d0d6b7c5
JB
3883 }
3884 }
e98d950b 3885#endif
d0d6b7c5
JB
3886}
3887\f
3888DEFUN ("accept-process-output", Faccept_process_output, Saccept_process_output,
107ed38d 3889 0, 4, 0,
fdb82f93
PJ
3890 doc: /* Allow any pending output from subprocesses to be read by Emacs.
3891It is read into the process' buffers or given to their filter functions.
3892Non-nil arg PROCESS means do not return until some output has been received
3893from PROCESS.
5088da42
KS
3894
3895Non-nil second arg SECONDS and third arg MILLISEC are number of
3896seconds and milliseconds to wait; return after that much time whether
3897or not there is input. If SECONDS is a floating point number,
3898it specifies a fractional number of seconds to wait.
3899
107ed38d
KS
3900If optional fourth arg JUST-THIS-ONE is non-nil, only accept output
3901from PROCESS, suspending reading output from other processes.
3902If JUST-THIS-ONE is an integer, don't run any timers either.
e0f24100 3903Return non-nil if we received any output before the timeout expired. */)
5088da42
KS
3904 (process, seconds, millisec, just_this_one)
3905 register Lisp_Object process, seconds, millisec, just_this_one;
d0d6b7c5 3906{
5088da42 3907 int secs, usecs = 0;
d0d6b7c5 3908
0748d150 3909 if (! NILP (process))
b7826503 3910 CHECK_PROCESS (process);
107ed38d
KS
3911 else
3912 just_this_one = Qnil;
0748d150 3913
5088da42 3914 if (!NILP (seconds))
d0d6b7c5 3915 {
5088da42
KS
3916 if (INTEGERP (seconds))
3917 secs = XINT (seconds);
3918 else if (FLOATP (seconds))
3919 {
3920 double timeout = XFLOAT_DATA (seconds);
3921 secs = (int) timeout;
3922 usecs = (int) ((timeout - (double) secs) * 1000000);
3923 }
3924 else
3925 wrong_type_argument (Qnumberp, seconds);
d0d6b7c5 3926
5088da42
KS
3927 if (INTEGERP (millisec))
3928 {
3929 int carry;
3930 usecs += XINT (millisec) * 1000;
3931 carry = usecs / 1000000;
3932 secs += carry;
3933 if ((usecs -= carry * 1000000) < 0)
3934 {
3935 secs--;
3936 usecs += 1000000;
3937 }
3938 }
d0d6b7c5 3939
5088da42
KS
3940 if (secs < 0 || (secs == 0 && usecs == 0))
3941 secs = -1, usecs = 0;
d0d6b7c5
JB
3942 }
3943 else
5088da42 3944 secs = NILP (process) ? -1 : 0;
d0d6b7c5
JB
3945
3946 return
5088da42 3947 (wait_reading_process_output (secs, usecs, 0, 0,
214d6069
KS
3948 Qnil,
3949 !NILP (process) ? XPROCESS (process) : NULL,
3950 NILP (just_this_one) ? 0 :
3951 !INTEGERP (just_this_one) ? 1 : -1)
d0d6b7c5
JB
3952 ? Qt : Qnil);
3953}
3954
e690ca94
KS
3955/* Accept a connection for server process SERVER on CHANNEL. */
3956
3957static int connect_counter = 0;
3958
3959static void
3960server_accept_connection (server, channel)
3961 Lisp_Object server;
3962 int channel;
3963{
3964 Lisp_Object proc, caller, name, buffer;
3965 Lisp_Object contact, host, service;
3966 struct Lisp_Process *ps= XPROCESS (server);
3967 struct Lisp_Process *p;
3968 int s;
3969 union u_sockaddr {
3970 struct sockaddr sa;
3971 struct sockaddr_in in;
e1652a86
KS
3972#ifdef AF_INET6
3973 struct sockaddr_in6 in6;
3974#endif
e690ca94
KS
3975#ifdef HAVE_LOCAL_SOCKETS
3976 struct sockaddr_un un;
3977#endif
3978 } saddr;
3979 int len = sizeof saddr;
3980
3981 s = accept (channel, &saddr.sa, &len);
3982
3983 if (s < 0)
3984 {
3985 int code = errno;
3986
3987 if (code == EAGAIN)
3988 return;
3989#ifdef EWOULDBLOCK
3990 if (code == EWOULDBLOCK)
3991 return;
3992#endif
3993
3994 if (!NILP (ps->log))
3995 call3 (ps->log, server, Qnil,
3996 concat3 (build_string ("accept failed with code"),
3997 Fnumber_to_string (make_number (code)),
3998 build_string ("\n")));
3999 return;
4000 }
4001
4002 connect_counter++;
4003
4004 /* Setup a new process to handle the connection. */
4005
4006 /* Generate a unique identification of the caller, and build contact
4007 information for this process. */
4008 host = Qt;
4009 service = Qnil;
4010 switch (saddr.sa.sa_family)
4011 {
4012 case AF_INET:
4013 {
4014 Lisp_Object args[5];
4015 unsigned char *ip = (unsigned char *)&saddr.in.sin_addr.s_addr;
4016 args[0] = build_string ("%d.%d.%d.%d");
4017 args[1] = make_number (*ip++);
4018 args[2] = make_number (*ip++);
4019 args[3] = make_number (*ip++);
4020 args[4] = make_number (*ip++);
4021 host = Fformat (5, args);
4022 service = make_number (ntohs (saddr.in.sin_port));
4023
4024 args[0] = build_string (" <%s:%d>");
4025 args[1] = host;
4026 args[2] = service;
4027 caller = Fformat (3, args);
4028 }
4029 break;
4030
e1652a86
KS
4031#ifdef AF_INET6
4032 case AF_INET6:
4033 {
4034 Lisp_Object args[9];
4035 uint16_t *ip6 = (uint16_t *)&saddr.in6.sin6_addr;
4036 int i;
4037 args[0] = build_string ("%x:%x:%x:%x:%x:%x:%x:%x");
4038 for (i = 0; i < 8; i++)
4039 args[i+1] = make_number (ntohs(ip6[i]));
4040 host = Fformat (9, args);
4041 service = make_number (ntohs (saddr.in.sin_port));
4042
4043 args[0] = build_string (" <[%s]:%d>");
4044 args[1] = host;
4045 args[2] = service;
4046 caller = Fformat (3, args);
4047 }
4048 break;
4049#endif
4050
e690ca94
KS
4051#ifdef HAVE_LOCAL_SOCKETS
4052 case AF_LOCAL:
4053#endif
4054 default:
4055 caller = Fnumber_to_string (make_number (connect_counter));
eef60308 4056 caller = concat3 (build_string (" <"), caller, build_string (">"));
e690ca94
KS
4057 break;
4058 }
4059
4060 /* Create a new buffer name for this process if it doesn't have a
4061 filter. The new buffer name is based on the buffer name or
4062 process name of the server process concatenated with the caller
4063 identification. */
4064
4065 if (!NILP (ps->filter) && !EQ (ps->filter, Qt))
4066 buffer = Qnil;
4067 else
4068 {
4069 buffer = ps->buffer;
4070 if (!NILP (buffer))
4071 buffer = Fbuffer_name (buffer);
4072 else
4073 buffer = ps->name;
4074 if (!NILP (buffer))
4075 {
4076 buffer = concat2 (buffer, caller);
4077 buffer = Fget_buffer_create (buffer);
4078 }
4079 }
4080
4081 /* Generate a unique name for the new server process. Combine the
4082 server process name with the caller identification. */
4083
4084 name = concat2 (ps->name, caller);
4085 proc = make_process (name);
4086
4087 chan_process[s] = proc;
4088
4089#ifdef O_NONBLOCK
4090 fcntl (s, F_SETFL, O_NONBLOCK);
4091#else
4092#ifdef O_NDELAY
4093 fcntl (s, F_SETFL, O_NDELAY);
4094#endif
4095#endif
4096
4097 p = XPROCESS (proc);
4098
4099 /* Build new contact information for this setup. */
4100 contact = Fcopy_sequence (ps->childp);
4101 contact = Fplist_put (contact, QCserver, Qnil);
4102 contact = Fplist_put (contact, QChost, host);
4103 if (!NILP (service))
4104 contact = Fplist_put (contact, QCservice, service);
177c0ea7 4105 contact = Fplist_put (contact, QCremote,
e690ca94
KS
4106 conv_sockaddr_to_lisp (&saddr.sa, len));
4107#ifdef HAVE_GETSOCKNAME
4108 len = sizeof saddr;
2185db04 4109 if (getsockname (s, &saddr.sa, &len) == 0)
177c0ea7 4110 contact = Fplist_put (contact, QClocal,
e690ca94
KS
4111 conv_sockaddr_to_lisp (&saddr.sa, len));
4112#endif
4113
4114 p->childp = contact;
faa7db08 4115 p->plist = Fcopy_sequence (ps->plist);
ac4a7584 4116
e690ca94
KS
4117 p->buffer = buffer;
4118 p->sentinel = ps->sentinel;
4119 p->filter = ps->filter;
4120 p->command = Qnil;
6bfd98e7 4121 p->pid = 0;
60f0fb11
SM
4122 p->infd = s;
4123 p->outfd = s;
e690ca94
KS
4124 p->status = Qrun;
4125
4126 /* Client processes for accepted connections are not stopped initially. */
4127 if (!EQ (p->filter, Qt))
4128 {
4129 FD_SET (s, &input_wait_mask);
4130 FD_SET (s, &non_keyboard_wait_mask);
4131 }
4132
4133 if (s > max_process_desc)
4134 max_process_desc = s;
4135
177c0ea7 4136 /* Setup coding system for new process based on server process.
e690ca94
KS
4137 This seems to be the proper thing to do, as the coding system
4138 of the new process should reflect the settings at the time the
4139 server socket was opened; not the current settings. */
4140
4141 p->decode_coding_system = ps->decode_coding_system;
4142 p->encode_coding_system = ps->encode_coding_system;
03f04413 4143 setup_process_coding_systems (proc);
e690ca94
KS
4144
4145 p->decoding_buf = make_uninit_string (0);
60f0fb11 4146 p->decoding_carryover = 0;
e690ca94 4147 p->encoding_buf = make_uninit_string (0);
e690ca94
KS
4148
4149 p->inherit_coding_system_flag
60f0fb11 4150 = (NILP (buffer) ? 0 : ps->inherit_coding_system_flag);
e690ca94
KS
4151
4152 if (!NILP (ps->log))
4153 call3 (ps->log, server, proc,
4154 concat3 (build_string ("accept from "),
4155 (STRINGP (host) ? host : build_string ("-")),
4156 build_string ("\n")));
4157
bed9664a 4158 if (!NILP (p->sentinel))
177c0ea7 4159 exec_sentinel (proc,
e690ca94
KS
4160 concat3 (build_string ("open from "),
4161 (STRINGP (host) ? host : build_string ("-")),
4162 build_string ("\n")));
4163}
4164
d0d6b7c5
JB
4165/* This variable is different from waiting_for_input in keyboard.c.
4166 It is used to communicate to a lisp process-filter/sentinel (via the
f3d9532b 4167 function Fwaiting_for_user_input_p below) whether Emacs was waiting
d0d6b7c5
JB
4168 for user-input when that process-filter was called.
4169 waiting_for_input cannot be used as that is by definition 0 when
d430ee71
RS
4170 lisp code is being evalled.
4171 This is also used in record_asynch_buffer_change.
4172 For that purpose, this must be 0
214d6069 4173 when not inside wait_reading_process_output. */
d0d6b7c5
JB
4174static int waiting_for_user_input_p;
4175
2beb96f9
KS
4176static Lisp_Object
4177wait_reading_process_output_unwind (data)
4178 Lisp_Object data;
4179{
4180 waiting_for_user_input_p = XINT (data);
4181 return Qnil;
4182}
4183
c573ae8e 4184/* This is here so breakpoints can be put on it. */
dfcf069d 4185static void
214d6069 4186wait_reading_process_output_1 ()
c573ae8e
RS
4187{
4188}
4189
e1e541bd
KS
4190/* Use a wrapper around select to work around a bug in gdb 5.3.
4191 Normally, the wrapper is optimzed away by inlining.
4192
4193 If emacs is stopped inside select, the gdb backtrace doesn't
4194 show the function which called select, so it is practically
4195 impossible to step through wait_reading_process_output. */
4196
4197#ifndef select
4198static INLINE int
4199select_wrapper (n, rfd, wfd, xfd, tmo)
4200 int n;
4201 SELECT_TYPE *rfd, *wfd, *xfd;
4202 EMACS_TIME *tmo;
4203{
4204 return select (n, rfd, wfd, xfd, tmo);
4205}
4206#define select select_wrapper
4207#endif
4208
d0d6b7c5
JB
4209/* Read and dispose of subprocess output while waiting for timeout to
4210 elapse and/or keyboard input to be available.
4211
de6fd4b9 4212 TIME_LIMIT is:
d0d6b7c5
JB
4213 timeout in seconds, or
4214 zero for no limit, or
4215 -1 means gobble data immediately available but don't wait for any.
4216
de6fd4b9
RS
4217 MICROSECS is:
4218 an additional duration to wait, measured in microseconds.
4219 If this is nonzero and time_limit is 0, then the timeout
4220 consists of MICROSECS only.
6e4f3667 4221
de6fd4b9 4222 READ_KBD is a lisp value:
d0d6b7c5
JB
4223 0 to ignore keyboard input, or
4224 1 to return when input is available, or
84aa3ace 4225 -1 meaning caller will actually read the input, so don't throw to
d0d6b7c5 4226 the quit handler, or
d0d6b7c5 4227
de6fd4b9 4228 DO_DISPLAY != 0 means redisplay should be done to show subprocess
107ed38d 4229 output that arrives.
d0d6b7c5 4230
b89a415a
KS
4231 If WAIT_FOR_CELL is a cons cell, wait until its car is non-nil
4232 (and gobble terminal input into the buffer if any arrives).
d0d6b7c5 4233
b89a415a 4234 If WAIT_PROC is specified, wait until something arrives from that
e0f24100 4235 process. The return value is true if we read some input from
b89a415a
KS
4236 that process.
4237
4238 If JUST_WAIT_PROC is non-nil, handle only output from WAIT_PROC
4239 (suspending output from other processes). A negative value
4240 means don't run any timers either.
4241
e0f24100 4242 If WAIT_PROC is specified, then the function returns true if we
b89a415a 4243 received input from that process before the timeout elapsed.
e0f24100 4244 Otherwise, return true if we received input from any process. */
d0d6b7c5 4245
dfcf069d 4246int
214d6069
KS
4247wait_reading_process_output (time_limit, microsecs, read_kbd, do_display,
4248 wait_for_cell, wait_proc, just_wait_proc)
b89a415a
KS
4249 int time_limit, microsecs, read_kbd, do_display;
4250 Lisp_Object wait_for_cell;
4251 struct Lisp_Process *wait_proc;
4252 int just_wait_proc;
d0d6b7c5 4253{
41d03b9a 4254 register int channel, nfds;
855448dc 4255 SELECT_TYPE Available;
bad49fc7 4256#ifdef NON_BLOCKING_CONNECT
855448dc 4257 SELECT_TYPE Connecting;
bad49fc7
KS
4258 int check_connect;
4259#endif
4260 int check_delay, no_avail;
d0d6b7c5
JB
4261 int xerrno;
4262 Lisp_Object proc;
41d03b9a 4263 EMACS_TIME timeout, end_time;
a9f2c884 4264 int wait_channel = -1;
d0d6b7c5 4265 int got_some_input = 0;
2beb96f9 4266 int count = SPECPDL_INDEX ();
d0d6b7c5
JB
4267
4268 FD_ZERO (&Available);
bad49fc7 4269#ifdef NON_BLOCKING_CONNECT
dd2a17ab 4270 FD_ZERO (&Connecting);
bad49fc7 4271#endif
d0d6b7c5 4272
b89a415a
KS
4273 /* If wait_proc is a process to watch, set wait_channel accordingly. */
4274 if (wait_proc != NULL)
60f0fb11 4275 wait_channel = wait_proc->infd;
84aa3ace 4276
2beb96f9
KS
4277 record_unwind_protect (wait_reading_process_output_unwind,
4278 make_number (waiting_for_user_input_p));
b89a415a 4279 waiting_for_user_input_p = read_kbd;
d0d6b7c5
JB
4280
4281 /* Since we may need to wait several times,
4282 compute the absolute time to return at. */
4283 if (time_limit || microsecs)
4284 {
4285 EMACS_GET_TIME (end_time);
4286 EMACS_SET_SECS_USECS (timeout, time_limit, microsecs);
4287 EMACS_ADD_TIME (end_time, end_time, timeout);
4288 }
19310311 4289#ifdef POLL_INTERRUPTED_SYS_CALL
e07d5449
KH
4290 /* AlainF 5-Jul-1996
4291 HP-UX 10.10 seem to have problems with signals coming in
4292 Causes "poll: interrupted system call" messages when Emacs is run
4293 in an X window
75eb23f1
RS
4294 Turn off periodic alarms (in case they are in use),
4295 and then turn off any other atimers. */
4296 stop_polling ();
30904ab7 4297 turn_on_atimers (0);
19310311 4298#endif /* POLL_INTERRUPTED_SYS_CALL */
d0d6b7c5 4299
d0d6b7c5
JB
4300 while (1)
4301 {
c0239a0b
RS
4302 int timeout_reduced_for_timers = 0;
4303
d0d6b7c5
JB
4304 /* If calling from keyboard input, do not quit
4305 since we want to return C-g as an input character.
4306 Otherwise, do pending quit if requested. */
b89a415a 4307 if (read_kbd >= 0)
d0d6b7c5 4308 QUIT;
6b61353c 4309#ifdef SYNC_INPUT
ef5eb925
JD
4310 else
4311 {
4312 if (interrupt_input_pending)
4313 handle_async_input ();
4314 if (pending_atimers)
4315 do_pending_atimers ();
4316 }
6b61353c 4317#endif
d0d6b7c5 4318
889255b4 4319 /* Exit now if the cell we're waiting for became non-nil. */
f3fbd155 4320 if (! NILP (wait_for_cell) && ! NILP (XCAR (wait_for_cell)))
889255b4
RS
4321 break;
4322
d0d6b7c5
JB
4323 /* Compute time from now till when time limit is up */
4324 /* Exit if already run out */
4325 if (time_limit == -1)
4326 {
4327 /* -1 specified for timeout means
4328 gobble output available now
4329 but don't wait at all. */
4330
4331 EMACS_SET_SECS_USECS (timeout, 0, 0);
4332 }
4333 else if (time_limit || microsecs)
4334 {
4335 EMACS_GET_TIME (timeout);
4336 EMACS_SUB_TIME (timeout, end_time, timeout);
4337 if (EMACS_TIME_NEG_P (timeout))
4338 break;
4339 }
4340 else
4341 {
4342 EMACS_SET_SECS_USECS (timeout, 100000, 0);
4343 }
4344
f854a00b
RS
4345 /* Normally we run timers here.
4346 But not if wait_for_cell; in those cases,
4347 the wait is supposed to be short,
4348 and those callers cannot handle running arbitrary Lisp code here. */
107ed38d 4349 if (NILP (wait_for_cell)
b89a415a 4350 && just_wait_proc >= 0)
fb4c3627 4351 {
c0239a0b 4352 EMACS_TIME timer_delay;
c573ae8e 4353
9baacf76 4354 do
c573ae8e 4355 {
9baacf76 4356 int old_timers_run = timers_run;
c88164fe 4357 struct buffer *old_buffer = current_buffer;
70bb1e5f 4358 Lisp_Object old_window = selected_window;
177c0ea7 4359
9baacf76 4360 timer_delay = timer_check (1);
a2fab450
GM
4361
4362 /* If a timer has run, this might have changed buffers
4363 an alike. Make read_key_sequence aware of that. */
4364 if (timers_run != old_timers_run
70bb1e5f
CY
4365 && (old_buffer != current_buffer
4366 || !EQ (old_window, selected_window))
a2fab450
GM
4367 && waiting_for_user_input_p == -1)
4368 record_asynch_buffer_change ();
177c0ea7 4369
9baacf76
GM
4370 if (timers_run != old_timers_run && do_display)
4371 /* We must retry, since a timer may have requeued itself
4372 and that could alter the time_delay. */
3007ebfb 4373 redisplay_preserve_echo_area (9);
9baacf76
GM
4374 else
4375 break;
c573ae8e 4376 }
9baacf76 4377 while (!detect_input_pending ());
c573ae8e 4378
69645afc 4379 /* If there is unread keyboard input, also return. */
b89a415a 4380 if (read_kbd != 0
69645afc
RS
4381 && requeued_events_pending_p ())
4382 break;
4383
c0239a0b 4384 if (! EMACS_TIME_NEG_P (timer_delay) && time_limit != -1)
fb4c3627
RS
4385 {
4386 EMACS_TIME difference;
4387 EMACS_SUB_TIME (difference, timer_delay, timeout);
4388 if (EMACS_TIME_NEG_P (difference))
c0239a0b
RS
4389 {
4390 timeout = timer_delay;
4391 timeout_reduced_for_timers = 1;
4392 }
fb4c3627 4393 }
4abca5e7
RS
4394 /* If time_limit is -1, we are not going to wait at all. */
4395 else if (time_limit != -1)
c573ae8e
RS
4396 {
4397 /* This is so a breakpoint can be put here. */
214d6069 4398 wait_reading_process_output_1 ();
c573ae8e 4399 }
fb4c3627
RS
4400 }
4401
90ab1a81
JB
4402 /* Cause C-g and alarm signals to take immediate action,
4403 and cause input available signals to zero out timeout.
4404
4405 It is important that we do this before checking for process
4406 activity. If we get a SIGCHLD after the explicit checks for
4407 process activity, timeout is the only way we will know. */
b89a415a 4408 if (read_kbd < 0)
90ab1a81
JB
4409 set_waiting_for_input (&timeout);
4410
6be429b1
JB
4411 /* If status of something has changed, and no input is
4412 available, notify the user of the change right away. After
4413 this explicit check, we'll let the SIGCHLD handler zap
4414 timeout to get our attention. */
4415 if (update_tick != process_tick && do_display)
4416 {
bad49fc7
KS
4417 SELECT_TYPE Atemp;
4418#ifdef NON_BLOCKING_CONNECT
4419 SELECT_TYPE Ctemp;
4420#endif
dd2a17ab 4421
6be429b1 4422 Atemp = input_wait_mask;
e082ac9d
ST
4423#if 0
4424 /* On Mac OS X 10.0, the SELECT system call always says input is
e0f712ba 4425 present (for reading) at stdin, even when none is. This
aa87aafc 4426 causes the call to SELECT below to return 1 and
e0f712ba 4427 status_notify not to be called. As a result output of
39b1da20 4428 subprocesses are incorrectly discarded.
e082ac9d 4429 */
e0f712ba
AC
4430 FD_CLR (0, &Atemp);
4431#endif
bad49fc7
KS
4432 IF_NON_BLOCKING_CONNECT (Ctemp = connect_wait_mask);
4433
6be429b1 4434 EMACS_SET_SECS_USECS (timeout, 0, 0);
994d9841
NR
4435 if ((select (max (max (max_process_desc, max_keyboard_desc),
4436 max_gpm_desc) + 1,
177c0ea7 4437 &Atemp,
bad49fc7 4438#ifdef NON_BLOCKING_CONNECT
dd2a17ab 4439 (num_pending_connects > 0 ? &Ctemp : (SELECT_TYPE *)0),
bad49fc7
KS
4440#else
4441 (SELECT_TYPE *)0,
4442#endif
dd2a17ab 4443 (SELECT_TYPE *)0, &timeout)
ecd1f654 4444 <= 0))
90ab1a81
JB
4445 {
4446 /* It's okay for us to do this and then continue with
a0e4d3f3 4447 the loop, since timeout has already been zeroed out. */
90ab1a81 4448 clear_waiting_for_input ();
ff6daed3 4449 status_notify (NULL);
90ab1a81 4450 }
6be429b1
JB
4451 }
4452
dd2a17ab
KS
4453 /* Don't wait for output from a non-running process. Just
4454 read whatever data has already been received. */
6bfd98e7 4455 if (wait_proc && wait_proc->raw_status_new)
6be429b1 4456 update_status (wait_proc);
6bfd98e7 4457 if (wait_proc
dd2a17ab
KS
4458 && ! EQ (wait_proc->status, Qrun)
4459 && ! EQ (wait_proc->status, Qconnect))
9aa2a7f4 4460 {
215b45e9 4461 int nread, total_nread = 0;
7ce63188 4462
9aa2a7f4 4463 clear_waiting_for_input ();
7ce63188
RS
4464 XSETPROCESS (proc, wait_proc);
4465
4466 /* Read data from the process, until we exhaust it. */
60f0fb11 4467 while (wait_proc->infd >= 0)
215b45e9 4468 {
60f0fb11 4469 nread = read_process_output (proc, wait_proc->infd);
e1b37c34
GM
4470
4471 if (nread == 0)
4472 break;
4473
177c0ea7 4474 if (0 < nread)
215b45e9
RS
4475 total_nread += nread;
4476#ifdef EIO
4477 else if (nread == -1 && EIO == errno)
4478 break;
e1b37c34
GM
4479#endif
4480#ifdef EAGAIN
4481 else if (nread == -1 && EAGAIN == errno)
4482 break;
4483#endif
4484#ifdef EWOULDBLOCK
4485 else if (nread == -1 && EWOULDBLOCK == errno)
4486 break;
215b45e9
RS
4487#endif
4488 }
7ce63188 4489 if (total_nread > 0 && do_display)
3007ebfb 4490 redisplay_preserve_echo_area (10);
7ce63188 4491
9aa2a7f4
JB
4492 break;
4493 }
6be429b1 4494
d0d6b7c5
JB
4495 /* Wait till there is something to do */
4496
b89a415a 4497 if (wait_proc && just_wait_proc)
107ed38d 4498 {
60f0fb11 4499 if (wait_proc->infd < 0) /* Terminated */
b89a415a 4500 break;
60f0fb11 4501 FD_SET (wait_proc->infd, &Available);
bad49fc7
KS
4502 check_delay = 0;
4503 IF_NON_BLOCKING_CONNECT (check_connect = 0);
107ed38d
KS
4504 }
4505 else if (!NILP (wait_for_cell))
dd2a17ab
KS
4506 {
4507 Available = non_process_wait_mask;
bad49fc7
KS
4508 check_delay = 0;
4509 IF_NON_BLOCKING_CONNECT (check_connect = 0);
dd2a17ab 4510 }
a69281ff 4511 else
dd2a17ab 4512 {
b89a415a 4513 if (! read_kbd)
dd2a17ab
KS
4514 Available = non_keyboard_wait_mask;
4515 else
4516 Available = input_wait_mask;
bad49fc7 4517 IF_NON_BLOCKING_CONNECT (check_connect = (num_pending_connects > 0));
6b61353c 4518 check_delay = wait_channel >= 0 ? 0 : process_output_delay_count;
dd2a17ab 4519 }
d0d6b7c5 4520
ff11dfa1 4521 /* If frame size has changed or the window is newly mapped,
ffd56f97
JB
4522 redisplay now, before we start to wait. There is a race
4523 condition here; if a SIGIO arrives between now and the select
016899c0
JB
4524 and indicates that a frame is trashed, the select may block
4525 displaying a trashed screen. */
5164ee8e 4526 if (frame_garbaged && do_display)
7286affd
RS
4527 {
4528 clear_waiting_for_input ();
3007ebfb 4529 redisplay_preserve_echo_area (11);
b89a415a 4530 if (read_kbd < 0)
7efe788e 4531 set_waiting_for_input (&timeout);
7286affd 4532 }
ffd56f97 4533
dd2a17ab 4534 no_avail = 0;
b89a415a 4535 if (read_kbd && detect_input_pending ())
0a65b032
RS
4536 {
4537 nfds = 0;
dd2a17ab 4538 no_avail = 1;
0a65b032
RS
4539 }
4540 else
dd2a17ab 4541 {
bad49fc7 4542#ifdef NON_BLOCKING_CONNECT
dd2a17ab
KS
4543 if (check_connect)
4544 Connecting = connect_wait_mask;
bad49fc7 4545#endif
6b61353c
KH
4546
4547#ifdef ADAPTIVE_READ_BUFFERING
db853b7a 4548 /* Set the timeout for adaptive read buffering if any
60f0fb11 4549 process has non-zero read_output_skip and non-zero
db853b7a
KS
4550 read_output_delay, and we are not reading output for a
4551 specific wait_channel. It is not executed if
4552 Vprocess_adaptive_read_buffering is nil. */
6b61353c
KH
4553 if (process_output_skip && check_delay > 0)
4554 {
4555 int usecs = EMACS_USECS (timeout);
4556 if (EMACS_SECS (timeout) > 0 || usecs > READ_OUTPUT_DELAY_MAX)
4557 usecs = READ_OUTPUT_DELAY_MAX;
4558 for (channel = 0; check_delay > 0 && channel <= max_process_desc; channel++)
4559 {
4560 proc = chan_process[channel];
4561 if (NILP (proc))
4562 continue;
db853b7a 4563 /* Find minimum non-zero read_output_delay among the
60f0fb11
SM
4564 processes with non-zero read_output_skip. */
4565 if (XPROCESS (proc)->read_output_delay > 0)
6b61353c
KH
4566 {
4567 check_delay--;
60f0fb11 4568 if (!XPROCESS (proc)->read_output_skip)
6b61353c
KH
4569 continue;
4570 FD_CLR (channel, &Available);
60f0fb11
SM
4571 XPROCESS (proc)->read_output_skip = 0;
4572 if (XPROCESS (proc)->read_output_delay < usecs)
4573 usecs = XPROCESS (proc)->read_output_delay;
6b61353c
KH
4574 }
4575 }
4576 EMACS_SET_SECS_USECS (timeout, 0, usecs);
4577 process_output_skip = 0;
4578 }
4579#endif
4580
994d9841
NR
4581 nfds = select (max (max (max_process_desc, max_keyboard_desc),
4582 max_gpm_desc) + 1,
177c0ea7 4583 &Available,
bad49fc7 4584#ifdef NON_BLOCKING_CONNECT
dd2a17ab 4585 (check_connect ? &Connecting : (SELECT_TYPE *)0),
bad49fc7
KS
4586#else
4587 (SELECT_TYPE *)0,
4588#endif
dd2a17ab
KS
4589 (SELECT_TYPE *)0, &timeout);
4590 }
6720a7fb 4591
d0d6b7c5
JB
4592 xerrno = errno;
4593
4594 /* Make C-g and alarm signals set flags again */
4595 clear_waiting_for_input ();
4596
4597 /* If we woke up due to SIGWINCH, actually change size now. */
2b653806 4598 do_pending_window_change (0);
d0d6b7c5 4599
c0239a0b
RS
4600 if (time_limit && nfds == 0 && ! timeout_reduced_for_timers)
4601 /* We wanted the full specified time, so return now. */
d0d6b7c5
JB
4602 break;
4603 if (nfds < 0)
4604 {
4605 if (xerrno == EINTR)
dd2a17ab 4606 no_avail = 1;
b0310da4
JB
4607#ifdef ultrix
4608 /* Ultrix select seems to return ENOMEM when it is
4609 interrupted. Treat it just like EINTR. Bleah. Note
4610 that we want to test for the "ultrix" CPP symbol, not
4611 "__ultrix__"; the latter is only defined under GCC, but
4612 not by DEC's bundled CC. -JimB */
8058415c 4613 else if (xerrno == ENOMEM)
dd2a17ab 4614 no_avail = 1;
d0d6b7c5
JB
4615#endif
4616 else if (xerrno == EBADF)
4617 {
4618#ifdef AIX
4619 /* AIX doesn't handle PTY closure the same way BSD does. On AIX,
4620 the child's closure of the pts gives the parent a SIGHUP, and
4621 the ptc file descriptor is automatically closed,
4622 yielding EBADF here or at select() call above.
4623 So, SIGHUP is ignored (see def of PTY_TTY_NAME_SPRINTF
a0e4d3f3 4624 in m/ibmrt-aix.h), and here we just ignore the select error.
d0d6b7c5 4625 Cleanup occurs c/o status_notify after SIGCLD. */
dd2a17ab 4626 no_avail = 1; /* Cannot depend on values returned */
d0d6b7c5
JB
4627#else
4628 abort ();
4629#endif
4630 }
4631 else
68c45bf0 4632 error ("select error: %s", emacs_strerror (xerrno));
d0d6b7c5 4633 }
dd2a17ab
KS
4634
4635 if (no_avail)
4636 {
4637 FD_ZERO (&Available);
bad49fc7 4638 IF_NON_BLOCKING_CONNECT (check_connect = 0);
dd2a17ab
KS
4639 }
4640
26ec91de 4641#if defined(sun) && !defined(USG5_4)
dd2a17ab
KS
4642 if (nfds > 0 && keyboard_bit_set (&Available)
4643 && interrupt_input)
e0109153
JB
4644 /* System sometimes fails to deliver SIGIO.
4645
4646 David J. Mackenzie says that Emacs doesn't compile under
4647 Solaris if this code is enabled, thus the USG5_4 in the CPP
4648 conditional. "I haven't noticed any ill effects so far.
4649 If you find a Solaris expert somewhere, they might know
4650 better." */
d0d6b7c5
JB
4651 kill (getpid (), SIGIO);
4652#endif
4653
5d5beb62
RS
4654#if 0 /* When polling is used, interrupt_input is 0,
4655 so get_input_pending should read the input.
4656 So this should not be needed. */
4657 /* If we are using polling for input,
4658 and we see input available, make it get read now.
4659 Otherwise it might not actually get read for a second.
214d6069 4660 And on hpux, since we turn off polling in wait_reading_process_output,
5d5beb62 4661 it might never get read at all if we don't spend much time
214d6069 4662 outside of wait_reading_process_output. */
b89a415a 4663 if (read_kbd && interrupt_input
5d5beb62
RS
4664 && keyboard_bit_set (&Available)
4665 && input_polling_used ())
4666 kill (getpid (), SIGALRM);
4667#endif
4668
d0d6b7c5
JB
4669 /* Check for keyboard input */
4670 /* If there is any, return immediately
4671 to give it higher priority than subprocesses */
4672
b89a415a 4673 if (read_kbd != 0)
6ed6233b 4674 {
a2fab450 4675 int old_timers_run = timers_run;
c88164fe 4676 struct buffer *old_buffer = current_buffer;
c0323133 4677 Lisp_Object old_window = selected_window;
a2fab450 4678 int leave = 0;
177c0ea7 4679
5d6c2aa3 4680 if (detect_input_pending_run_timers (do_display))
a2fab450
GM
4681 {
4682 swallow_events (do_display);
4683 if (detect_input_pending_run_timers (do_display))
4684 leave = 1;
4685 }
6ed6233b 4686
a2fab450
GM
4687 /* If a timer has run, this might have changed buffers
4688 an alike. Make read_key_sequence aware of that. */
4689 if (timers_run != old_timers_run
c88164fe 4690 && waiting_for_user_input_p == -1
c0323133
GM
4691 && (old_buffer != current_buffer
4692 || !EQ (old_window, selected_window)))
a2fab450
GM
4693 record_asynch_buffer_change ();
4694
4695 if (leave)
4696 break;
177c0ea7
JB
4697 }
4698
69645afc 4699 /* If there is unread keyboard input, also return. */
b89a415a 4700 if (read_kbd != 0
69645afc
RS
4701 && requeued_events_pending_p ())
4702 break;
4703
77e1b3d4
RS
4704 /* If we are not checking for keyboard input now,
4705 do process events (but don't run any timers).
4706 This is so that X events will be processed.
0c9960e9 4707 Otherwise they may have to wait until polling takes place.
77e1b3d4
RS
4708 That would causes delays in pasting selections, for example.
4709
4710 (We used to do this only if wait_for_cell.) */
b89a415a 4711 if (read_kbd == 0 && detect_input_pending ())
f854a00b
RS
4712 {
4713 swallow_events (do_display);
0c9960e9 4714#if 0 /* Exiting when read_kbd doesn't request that seems wrong, though. */
f854a00b
RS
4715 if (detect_input_pending ())
4716 break;
5d5beb62 4717#endif
0c9960e9 4718 }
f854a00b 4719
84aa3ace 4720 /* Exit now if the cell we're waiting for became non-nil. */
f3fbd155 4721 if (! NILP (wait_for_cell) && ! NILP (XCAR (wait_for_cell)))
84aa3ace
RS
4722 break;
4723
4746118a 4724#ifdef SIGIO
5d5beb62 4725 /* If we think we have keyboard input waiting, but didn't get SIGIO,
d0d6b7c5
JB
4726 go read it. This can happen with X on BSD after logging out.
4727 In that case, there really is no input and no SIGIO,
4728 but select says there is input. */
4729
b89a415a 4730 if (read_kbd && interrupt_input
2601f59e 4731 && keyboard_bit_set (&Available) && ! noninteractive)
e643c5be 4732 kill (getpid (), SIGIO);
4746118a 4733#endif
d0d6b7c5 4734
d0d6b7c5
JB
4735 if (! wait_proc)
4736 got_some_input |= nfds > 0;
4737
32676c08
JB
4738 /* If checking input just got us a size-change event from X,
4739 obey it now if we should. */
b89a415a 4740 if (read_kbd || ! NILP (wait_for_cell))
2b653806 4741 do_pending_window_change (0);
32676c08 4742
a9f2c884 4743 /* Check for data from a process. */
dd2a17ab
KS
4744 if (no_avail || nfds == 0)
4745 continue;
4746
a9f2c884
RS
4747 /* Really FIRST_PROC_DESC should be 0 on Unix,
4748 but this is safer in the short run. */
a69281ff 4749 for (channel = 0; channel <= max_process_desc; channel++)
d0d6b7c5 4750 {
a69281ff
RS
4751 if (FD_ISSET (channel, &Available)
4752 && FD_ISSET (channel, &non_keyboard_wait_mask))
d0d6b7c5
JB
4753 {
4754 int nread;
4755
4756 /* If waiting for this channel, arrange to return as
4757 soon as no more input to be processed. No more
4758 waiting. */
4759 if (wait_channel == channel)
4760 {
a9f2c884 4761 wait_channel = -1;
d0d6b7c5
JB
4762 time_limit = -1;
4763 got_some_input = 1;
4764 }
4765 proc = chan_process[channel];
4766 if (NILP (proc))
4767 continue;
4768
e690ca94
KS
4769 /* If this is a server stream socket, accept connection. */
4770 if (EQ (XPROCESS (proc)->status, Qlisten))
4771 {
4772 server_accept_connection (proc, channel);
4773 continue;
4774 }
4775
d0d6b7c5
JB
4776 /* Read data from the process, starting with our
4777 buffered-ahead character if we have one. */
4778
4779 nread = read_process_output (proc, channel);
4780 if (nread > 0)
4781 {
4782 /* Since read_process_output can run a filter,
4783 which can call accept-process-output,
4784 don't try to read from any other processes
4785 before doing the select again. */
4786 FD_ZERO (&Available);
4787
4788 if (do_display)
3007ebfb 4789 redisplay_preserve_echo_area (12);
d0d6b7c5
JB
4790 }
4791#ifdef EWOULDBLOCK
4792 else if (nread == -1 && errno == EWOULDBLOCK)
4793 ;
0b75e9a4 4794#endif
89d7280d
RS
4795 /* ISC 4.1 defines both EWOULDBLOCK and O_NONBLOCK,
4796 and Emacs uses O_NONBLOCK, so what we get is EAGAIN. */
d0d6b7c5
JB
4797#ifdef O_NONBLOCK
4798 else if (nread == -1 && errno == EAGAIN)
4799 ;
4800#else
4801#ifdef O_NDELAY
4802 else if (nread == -1 && errno == EAGAIN)
4803 ;
4804 /* Note that we cannot distinguish between no input
4805 available now and a closed pipe.
4806 With luck, a closed pipe will be accompanied by
4807 subprocess termination and SIGCHLD. */
4808 else if (nread == 0 && !NETCONN_P (proc))
4809 ;
4740825c
KS
4810#endif /* O_NDELAY */
4811#endif /* O_NONBLOCK */
d0d6b7c5
JB
4812#ifdef HAVE_PTYS
4813 /* On some OSs with ptys, when the process on one end of
4814 a pty exits, the other end gets an error reading with
4815 errno = EIO instead of getting an EOF (0 bytes read).
4816 Therefore, if we get an error reading and errno =
4817 EIO, just continue, because the child process has
4818 exited and should clean itself up soon (e.g. when we
5651af6d
RS
4819 get a SIGCHLD).
4820
4821 However, it has been known to happen that the SIGCHLD
4740825c 4822 got lost. So raise the signal again just in case.
5651af6d 4823 It can't hurt. */
d0d6b7c5 4824 else if (nread == -1 && errno == EIO)
4740825c
KS
4825 {
4826 /* Clear the descriptor now, so we only raise the signal once. */
4827 FD_CLR (channel, &input_wait_mask);
4828 FD_CLR (channel, &non_keyboard_wait_mask);
4829
4830 kill (getpid (), SIGCHLD);
4831 }
4832#endif /* HAVE_PTYS */
ffd56f97
JB
4833 /* If we can detect process termination, don't consider the process
4834 gone just because its pipe is closed. */
d0d6b7c5
JB
4835#ifdef SIGCHLD
4836 else if (nread == 0 && !NETCONN_P (proc))
4837 ;
4838#endif
4839 else
4840 {
4841 /* Preserve status of processes already terminated. */
60f0fb11 4842 XPROCESS (proc)->tick = ++process_tick;
d0d6b7c5 4843 deactivate_process (proc);
6bfd98e7 4844 if (XPROCESS (proc)->raw_status_new)
d0d6b7c5
JB
4845 update_status (XPROCESS (proc));
4846 if (EQ (XPROCESS (proc)->status, Qrun))
4847 XPROCESS (proc)->status
4848 = Fcons (Qexit, Fcons (make_number (256), Qnil));
4849 }
4850 }
177c0ea7 4851#ifdef NON_BLOCKING_CONNECT
1566f511
KS
4852 if (check_connect && FD_ISSET (channel, &Connecting)
4853 && FD_ISSET (channel, &connect_wait_mask))
dd2a17ab
KS
4854 {
4855 struct Lisp_Process *p;
dd2a17ab
KS
4856
4857 FD_CLR (channel, &connect_wait_mask);
4858 if (--num_pending_connects < 0)
4859 abort ();
4860
4861 proc = chan_process[channel];
4862 if (NILP (proc))
4863 continue;
4864
4865 p = XPROCESS (proc);
4866
4867#ifdef GNU_LINUX
4868 /* getsockopt(,,SO_ERROR,,) is said to hang on some systems.
4869 So only use it on systems where it is known to work. */
4870 {
e690ca94 4871 int xlen = sizeof(xerrno);
dd2a17ab
KS
4872 if (getsockopt(channel, SOL_SOCKET, SO_ERROR, &xerrno, &xlen))
4873 xerrno = errno;
4874 }
4875#else
44c887be
PJ
4876 {
4877 struct sockaddr pname;
4878 int pnamelen = sizeof(pname);
4879
4880 /* If connection failed, getpeername will fail. */
4881 xerrno = 0;
4882 if (getpeername(channel, &pname, &pnamelen) < 0)
4883 {
4884 /* Obtain connect failure code through error slippage. */
4885 char dummy;
dd2a17ab 4886 xerrno = errno;
44c887be
PJ
4887 if (errno == ENOTCONN && read(channel, &dummy, 1) < 0)
4888 xerrno = errno;
4889 }
4890 }
dd2a17ab
KS
4891#endif
4892 if (xerrno)
4893 {
60f0fb11 4894 p->tick = ++process_tick;
dd2a17ab
KS
4895 p->status = Fcons (Qfailed, Fcons (make_number (xerrno), Qnil));
4896 deactivate_process (proc);
4897 }
4898 else
4899 {
4900 p->status = Qrun;
4901 /* Execute the sentinel here. If we had relied on
4902 status_notify to do it later, it will read input
4903 from the process before calling the sentinel. */
4904 exec_sentinel (proc, build_string ("open\n"));
e690ca94 4905 if (!EQ (p->filter, Qt) && !EQ (p->command, Qt))
dd2a17ab 4906 {
60f0fb11
SM
4907 FD_SET (p->infd, &input_wait_mask);
4908 FD_SET (p->infd, &non_keyboard_wait_mask);
dd2a17ab
KS
4909 }
4910 }
4911 }
4912#endif /* NON_BLOCKING_CONNECT */
ffd56f97
JB
4913 } /* end for each file descriptor */
4914 } /* end while exit conditions not met */
d0d6b7c5 4915
2beb96f9 4916 unbind_to (count, Qnil);
d430ee71 4917
ffd56f97
JB
4918 /* If calling from keyboard input, do not quit
4919 since we want to return C-g as an input character.
4920 Otherwise, do pending quit if requested. */
b89a415a 4921 if (read_kbd >= 0)
ffd56f97
JB
4922 {
4923 /* Prevent input_pending from remaining set if we quit. */
4924 clear_input_pending ();
4925 QUIT;
4926 }
19310311 4927#ifdef POLL_INTERRUPTED_SYS_CALL
e07d5449
KH
4928 /* AlainF 5-Jul-1996
4929 HP-UX 10.10 seems to have problems with signals coming in
4930 Causes "poll: interrupted system call" messages when Emacs is run
4931 in an X window
4932 Turn periodic alarms back on */
5d5beb62 4933 start_polling ();
19310311 4934#endif /* POLL_INTERRUPTED_SYS_CALL */
efa2a55c 4935
d0d6b7c5
JB
4936 return got_some_input;
4937}
4938\f
3b9a3dfa
RS
4939/* Given a list (FUNCTION ARGS...), apply FUNCTION to the ARGS. */
4940
4941static Lisp_Object
4942read_process_output_call (fun_and_args)
4943 Lisp_Object fun_and_args;
4944{
70949dac 4945 return apply1 (XCAR (fun_and_args), XCDR (fun_and_args));
3b9a3dfa
RS
4946}
4947
4948static Lisp_Object
4949read_process_output_error_handler (error)
4950 Lisp_Object error;
4951{
4952 cmd_error_internal (error, "error in process filter: ");
4953 Vinhibit_quit = Qt;
4954 update_echo_area ();
833ba342 4955 Fsleep_for (make_number (2), Qnil);
8c983bf2 4956 return Qt;
3b9a3dfa
RS
4957}
4958
d0d6b7c5
JB
4959/* Read pending output from the process channel,
4960 starting with our buffered-ahead character if we have one.
0fa1789e 4961 Yield number of decoded characters read.
d0d6b7c5 4962
116c423c 4963 This function reads at most 4096 characters.
d0d6b7c5 4964 If you want to read all available subprocess output,
0fa1789e
KH
4965 you must call it repeatedly until it returns zero.
4966
4967 The characters read are decoded according to PROC's coding-system
4968 for decoding. */
d0d6b7c5 4969
ff6daed3 4970static int
d0d6b7c5
JB
4971read_process_output (proc, channel)
4972 Lisp_Object proc;
4973 register int channel;
4974{
8f924df7 4975 register int nbytes;
d0d6b7c5 4976 char *chars;
d0d6b7c5
JB
4977 register Lisp_Object outstream;
4978 register struct buffer *old = current_buffer;
4979 register struct Lisp_Process *p = XPROCESS (proc);
4980 register int opoint;
c7580538 4981 struct coding_system *coding = proc_decode_coding_system[channel];
60f0fb11 4982 int carryover = p->decoding_carryover;
116c423c 4983 int readmax = 4096;
d0d6b7c5
JB
4984
4985#ifdef VMS
4986 VMS_PROC_STUFF *vs, *get_vms_process_pointer();
4987
4988 vs = get_vms_process_pointer (p->pid);
4989 if (vs)
4990 {
4991 if (!vs->iosb[0])
a319f7c1 4992 return (0); /* Really weird if it does this */
d0d6b7c5
JB
4993 if (!(vs->iosb[0] & 1))
4994 return -1; /* I/O error */
4995 }
4996 else
4997 error ("Could not get VMS process pointer");
4998 chars = vs->inputBuffer;
1d2fc612
RS
4999 nbytes = clean_vms_buffer (chars, vs->iosb[1]);
5000 if (nbytes <= 0)
d0d6b7c5
JB
5001 {
5002 start_vms_process_read (vs); /* Crank up the next read on the process */
5003 return 1; /* Nothing worth printing, say we got 1 */
5004 }
e7fbaa65 5005 if (carryover > 0)
0fa1789e 5006 {
e7fbaa65
KH
5007 /* The data carried over in the previous decoding (which are at
5008 the tail of decoding buffer) should be prepended to the new
5009 data read to decode all together. */
ed7a4b2d 5010 chars = (char *) alloca (nbytes + carryover);
d5db4077 5011 bcopy (SDATA (p->decoding_buf), buf, carryover);
ed7a4b2d 5012 bcopy (vs->inputBuffer, chars + carryover, nbytes);
0fa1789e 5013 }
d0d6b7c5 5014#else /* not VMS */
e690ca94 5015
e690ca94 5016 chars = (char *) alloca (carryover + readmax);
e7fbaa65
KH
5017 if (carryover)
5018 /* See the comment above. */
d5db4077 5019 bcopy (SDATA (p->decoding_buf), chars, carryover);
0fa1789e 5020
e690ca94
KS
5021#ifdef DATAGRAM_SOCKETS
5022 /* We have a working select, so proc_buffered_char is always -1. */
5023 if (DATAGRAM_CHAN_P (channel))
5024 {
5025 int len = datagram_address[channel].len;
39b1da20 5026 nbytes = recvfrom (channel, chars + carryover, readmax,
e690ca94
KS
5027 0, datagram_address[channel].sa, &len);
5028 }
5029 else
5030#endif
d0d6b7c5 5031 if (proc_buffered_char[channel] < 0)
6b61353c 5032 {
39b1da20 5033 nbytes = emacs_read (channel, chars + carryover, readmax);
6b61353c 5034#ifdef ADAPTIVE_READ_BUFFERING
60f0fb11 5035 if (nbytes > 0 && p->adaptive_read_buffering)
6b61353c 5036 {
60f0fb11 5037 int delay = p->read_output_delay;
6b61353c
KH
5038 if (nbytes < 256)
5039 {
5040 if (delay < READ_OUTPUT_DELAY_MAX_MAX)
5041 {
5042 if (delay == 0)
5043 process_output_delay_count++;
5044 delay += READ_OUTPUT_DELAY_INCREMENT * 2;
5045 }
5046 }
39b1da20 5047 else if (delay > 0 && (nbytes == readmax))
6b61353c
KH
5048 {
5049 delay -= READ_OUTPUT_DELAY_INCREMENT;
5050 if (delay == 0)
5051 process_output_delay_count--;
5052 }
60f0fb11 5053 p->read_output_delay = delay;
6b61353c
KH
5054 if (delay)
5055 {
60f0fb11 5056 p->read_output_skip = 1;
6b61353c
KH
5057 process_output_skip = 1;
5058 }
5059 }
5060#endif
5061 }
d0d6b7c5
JB
5062 else
5063 {
ed7a4b2d 5064 chars[carryover] = proc_buffered_char[channel];
d0d6b7c5 5065 proc_buffered_char[channel] = -1;
39b1da20 5066 nbytes = emacs_read (channel, chars + carryover + 1, readmax - 1);
1d2fc612
RS
5067 if (nbytes < 0)
5068 nbytes = 1;
d0d6b7c5 5069 else
1d2fc612 5070 nbytes = nbytes + 1;
d0d6b7c5
JB
5071 }
5072#endif /* not VMS */
5073
60f0fb11 5074 p->decoding_carryover = 0;
ca65341e 5075
ed7a4b2d 5076 /* At this point, NBYTES holds number of bytes just received
0fa1789e 5077 (including the one in proc_buffered_char[channel]). */
de7fbd09
KH
5078 if (nbytes <= 0)
5079 {
5080 if (nbytes < 0 || coding->mode & CODING_MODE_LAST_BLOCK)
5081 return nbytes;
5082 coding->mode |= CODING_MODE_LAST_BLOCK;
5083 }
d0d6b7c5 5084
1d2fc612 5085 /* Now set NBYTES how many bytes we must decode. */
e7fbaa65 5086 nbytes += carryover;
0fa1789e 5087
1d2fc612 5088 /* Read and dispose of the process output. */
d0d6b7c5
JB
5089 outstream = p->filter;
5090 if (!NILP (outstream))
5091 {
177c0ea7 5092 /* We inhibit quit here instead of just catching it so that
d0d6b7c5
JB
5093 hitting ^G when a filter happens to be running won't screw
5094 it up. */
aed13378 5095 int count = SPECPDL_INDEX ();
30c78175 5096 Lisp_Object odeactivate;
dfc21838 5097 Lisp_Object obuffer, okeymap;
1d2fc612 5098 Lisp_Object text;
4da2f5be 5099 int outer_running_asynch_code = running_asynch_code;
bbce7d72 5100 int waiting = waiting_for_user_input_p;
30c78175 5101
dfc21838
RS
5102 /* No need to gcpro these, because all we do with them later
5103 is test them for EQness, and none of them should be a string. */
30c78175 5104 odeactivate = Vdeactivate_mark;
dfc21838
RS
5105 XSETBUFFER (obuffer, current_buffer);
5106 okeymap = current_buffer->keymap;
30c78175 5107
d0d6b7c5 5108 specbind (Qinhibit_quit, Qt);
6545aada 5109 specbind (Qlast_nonmenu_event, Qt);
3b9a3dfa 5110
4da2f5be
RS
5111 /* In case we get recursively called,
5112 and we already saved the match data nonrecursively,
5113 save the same match data in safely recursive fashion. */
5114 if (outer_running_asynch_code)
5115 {
5116 Lisp_Object tem;
5117 /* Don't clobber the CURRENT match data, either! */
89f2614d
KS
5118 tem = Fmatch_data (Qnil, Qnil, Qnil);
5119 restore_search_regs ();
5120 record_unwind_save_match_data ();
5121 Fset_match_data (tem, Qt);
4da2f5be
RS
5122 }
5123
5124 /* For speed, if a search happens within this code,
5125 save the match data in a special nonrecursive fashion. */
7074fde6 5126 running_asynch_code = 1;
4da2f5be 5127
5bbf78c1
KH
5128 decode_coding_c_string (coding, chars, nbytes, Qt);
5129 text = coding->dst_object;
5bbf78c1 5130 Vlast_coding_system_used = CODING_ID_NAME (coding->id);
ed7a4b2d 5131 /* A new coding system might be found. */
5bbf78c1 5132 if (!EQ (p->decode_coding_system, Vlast_coding_system_used))
ed7a4b2d 5133 {
5bbf78c1 5134 p->decode_coding_system = Vlast_coding_system_used;
ed7a4b2d
KH
5135
5136 /* Don't call setup_coding_system for
5137 proc_decode_coding_system[channel] here. It is done in
5138 detect_coding called via decode_coding above. */
5139
5140 /* If a coding system for encoding is not yet decided, we set
5141 it as the same as coding-system for decoding.
5142
5143 But, before doing that we must check if
5144 proc_encode_coding_system[p->outfd] surely points to a
5145 valid memory because p->outfd will be changed once EOF is
5146 sent to the process. */
5147 if (NILP (p->encode_coding_system)
60f0fb11 5148 && proc_encode_coding_system[p->outfd])
ed7a4b2d 5149 {
76d812bb
KH
5150 p->encode_coding_system
5151 = coding_inherit_eol_type (Vlast_coding_system_used, Qnil);
5bbf78c1 5152 setup_coding_system (p->encode_coding_system,
60f0fb11 5153 proc_encode_coding_system[p->outfd]);
ed7a4b2d
KH
5154 }
5155 }
51c6067d 5156
dd8c7a53
KH
5157 if (coding->carryover_bytes > 0)
5158 {
04961398
KH
5159 if (SCHARS (p->decoding_buf) < coding->carryover_bytes)
5160 p->decoding_buf = make_uninit_string (coding->carryover_bytes);
8f924df7 5161 bcopy (coding->carryover, SDATA (p->decoding_buf),
dd8c7a53 5162 coding->carryover_bytes);
8c406a9b 5163 p->decoding_carryover = coding->carryover_bytes;
dd8c7a53 5164 }
e430e5ba 5165 if (SBYTES (text) > 0)
dd97db06
KH
5166 internal_condition_case_1 (read_process_output_call,
5167 Fcons (outstream,
5168 Fcons (proc, Fcons (text, Qnil))),
5169 !NILP (Vdebug_on_error) ? Qnil : Qerror,
5170 read_process_output_error_handler);
4da2f5be
RS
5171
5172 /* If we saved the match data nonrecursively, restore it now. */
89f2614d 5173 restore_search_regs ();
4da2f5be 5174 running_asynch_code = outer_running_asynch_code;
d0d6b7c5 5175
592ce97f 5176 /* Handling the process output should not deactivate the mark. */
30c78175
RS
5177 Vdeactivate_mark = odeactivate;
5178
bbce7d72
RS
5179 /* Restore waiting_for_user_input_p as it was
5180 when we were called, in case the filter clobbered it. */
5181 waiting_for_user_input_p = waiting;
5182
7973cfa8
RS
5183#if 0 /* Call record_asynch_buffer_change unconditionally,
5184 because we might have changed minor modes or other things
5185 that affect key bindings. */
dfc21838
RS
5186 if (! EQ (Fcurrent_buffer (), obuffer)
5187 || ! EQ (current_buffer->keymap, okeymap))
7973cfa8 5188#endif
927e08be
RS
5189 /* But do it only if the caller is actually going to read events.
5190 Otherwise there's no need to make him wake up, and it could
7157b8fe 5191 cause trouble (for example it would make sit_for return). */
927e08be
RS
5192 if (waiting_for_user_input_p == -1)
5193 record_asynch_buffer_change ();
d72534ba 5194
d0d6b7c5
JB
5195#ifdef VMS
5196 start_vms_process_read (vs);
5197#endif
2ea6d561 5198 unbind_to (count, Qnil);
e430e5ba 5199 return nbytes;
d0d6b7c5
JB
5200 }
5201
5202 /* If no filter, write into buffer if it isn't dead. */
5203 if (!NILP (p->buffer) && !NILP (XBUFFER (p->buffer)->name))
5204 {
b0310da4 5205 Lisp_Object old_read_only;
12ca5cdf 5206 int old_begv, old_zv;
d8a2934e 5207 int old_begv_byte, old_zv_byte;
30c78175 5208 Lisp_Object odeactivate;
d8a2934e
RS
5209 int before, before_byte;
5210 int opoint_byte;
ed7a4b2d 5211 Lisp_Object text;
926b7e5e 5212 struct buffer *b;
30c78175
RS
5213
5214 odeactivate = Vdeactivate_mark;
d0d6b7c5
JB
5215
5216 Fset_buffer (p->buffer);
6ec8bbd2 5217 opoint = PT;
d8a2934e 5218 opoint_byte = PT_BYTE;
b0310da4 5219 old_read_only = current_buffer->read_only;
12ca5cdf
RS
5220 old_begv = BEGV;
5221 old_zv = ZV;
d8a2934e
RS
5222 old_begv_byte = BEGV_BYTE;
5223 old_zv_byte = ZV_BYTE;
b0310da4
JB
5224
5225 current_buffer->read_only = Qnil;
d0d6b7c5
JB
5226
5227 /* Insert new output into buffer
5228 at the current end-of-output marker,
5229 thus preserving logical ordering of input and output. */
5230 if (XMARKER (p->mark)->buffer)
d8a2934e
RS
5231 SET_PT_BOTH (clip_to_bounds (BEGV, marker_position (p->mark), ZV),
5232 clip_to_bounds (BEGV_BYTE, marker_byte_position (p->mark),
5233 ZV_BYTE));
d0d6b7c5 5234 else
d8a2934e 5235 SET_PT_BOTH (ZV, ZV_BYTE);
12ca5cdf 5236 before = PT;
d8a2934e 5237 before_byte = PT_BYTE;
b0310da4
JB
5238
5239 /* If the output marker is outside of the visible region, save
5240 the restriction and widen. */
6ec8bbd2 5241 if (! (BEGV <= PT && PT <= ZV))
b0310da4
JB
5242 Fwiden ();
5243
5bbf78c1
KH
5244 decode_coding_c_string (coding, chars, nbytes, Qt);
5245 text = coding->dst_object;
5246 Vlast_coding_system_used = CODING_ID_NAME (coding->id);
ed7a4b2d
KH
5247 /* A new coding system might be found. See the comment in the
5248 similar code in the previous `if' block. */
5bbf78c1 5249 if (!EQ (p->decode_coding_system, Vlast_coding_system_used))
ed7a4b2d 5250 {
5bbf78c1 5251 p->decode_coding_system = Vlast_coding_system_used;
ed7a4b2d 5252 if (NILP (p->encode_coding_system)
60f0fb11 5253 && proc_encode_coding_system[p->outfd])
ed7a4b2d 5254 {
76d812bb
KH
5255 p->encode_coding_system
5256 = coding_inherit_eol_type (Vlast_coding_system_used, Qnil);
5bbf78c1 5257 setup_coding_system (p->encode_coding_system,
60f0fb11 5258 proc_encode_coding_system[p->outfd]);
ed7a4b2d
KH
5259 }
5260 }
dd8c7a53
KH
5261 if (coding->carryover_bytes > 0)
5262 {
04961398
KH
5263 if (SCHARS (p->decoding_buf) < coding->carryover_bytes)
5264 p->decoding_buf = make_uninit_string (coding->carryover_bytes);
8f924df7 5265 bcopy (coding->carryover, SDATA (p->decoding_buf),
dd8c7a53 5266 coding->carryover_bytes);
8c406a9b 5267 p->decoding_carryover = coding->carryover_bytes;
dd8c7a53 5268 }
d69864bf
KH
5269 /* Adjust the multibyteness of TEXT to that of the buffer. */
5270 if (NILP (current_buffer->enable_multibyte_characters)
5271 != ! STRING_MULTIBYTE (text))
5272 text = (STRING_MULTIBYTE (text)
57bb5c37 5273 ? Fstring_as_unibyte (text)
03f04413 5274 : Fstring_to_multibyte (text));
57bb5c37
KH
5275 /* Insert before markers in case we are inserting where
5276 the buffer's mark is, and the user's next command is Meta-y. */
e430e5ba
KH
5277 insert_from_string_before_markers (text, 0, 0,
5278 SCHARS (text), SBYTES (text), 0);
0d023da1 5279
926b7e5e
GM
5280 /* Make sure the process marker's position is valid when the
5281 process buffer is changed in the signal_after_change above.
5282 W3 is known to do that. */
5283 if (BUFFERP (p->buffer)
5284 && (b = XBUFFER (p->buffer), b != current_buffer))
5285 set_marker_both (p->mark, p->buffer, BUF_PT (b), BUF_PT_BYTE (b));
5286 else
5287 set_marker_both (p->mark, p->buffer, PT, PT_BYTE);
b0310da4 5288
d0d6b7c5
JB
5289 update_mode_lines++;
5290
12ca5cdf
RS
5291 /* Make sure opoint and the old restrictions
5292 float ahead of any new text just as point would. */
5293 if (opoint >= before)
d8a2934e
RS
5294 {
5295 opoint += PT - before;
5296 opoint_byte += PT_BYTE - before_byte;
5297 }
12ca5cdf 5298 if (old_begv > before)
d8a2934e
RS
5299 {
5300 old_begv += PT - before;
5301 old_begv_byte += PT_BYTE - before_byte;
5302 }
12ca5cdf 5303 if (old_zv >= before)
d8a2934e
RS
5304 {
5305 old_zv += PT - before;
5306 old_zv_byte += PT_BYTE - before_byte;
5307 }
12ca5cdf 5308
b0310da4 5309 /* If the restriction isn't what it should be, set it. */
12ca5cdf
RS
5310 if (old_begv != BEGV || old_zv != ZV)
5311 Fnarrow_to_region (make_number (old_begv), make_number (old_zv));
b0310da4 5312
592ce97f 5313 /* Handling the process output should not deactivate the mark. */
30c78175
RS
5314 Vdeactivate_mark = odeactivate;
5315
b0310da4 5316 current_buffer->read_only = old_read_only;
d8a2934e 5317 SET_PT_BOTH (opoint, opoint_byte);
d0d6b7c5
JB
5318 set_buffer_internal (old);
5319 }
5320#ifdef VMS
5321 start_vms_process_read (vs);
5322#endif
1d2fc612 5323 return nbytes;
d0d6b7c5
JB
5324}
5325
5326DEFUN ("waiting-for-user-input-p", Fwaiting_for_user_input_p, Swaiting_for_user_input_p,
5327 0, 0, 0,
f3d9532b 5328 doc: /* Returns non-nil if Emacs is waiting for input from the user.
fdb82f93
PJ
5329This is intended for use by asynchronous process output filters and sentinels. */)
5330 ()
d0d6b7c5 5331{
8b4d685f 5332 return (waiting_for_user_input_p ? Qt : Qnil);
d0d6b7c5
JB
5333}
5334\f
5335/* Sending data to subprocess */
5336
5337jmp_buf send_process_frame;
0daad115 5338Lisp_Object process_sent_to;
d0d6b7c5
JB
5339
5340SIGTYPE
5341send_process_trap ()
5342{
333f1b6f 5343 SIGNAL_THREAD_CHECK (SIGPIPE);
d0d6b7c5
JB
5344#ifdef BSD4_1
5345 sigrelse (SIGPIPE);
5346 sigrelse (SIGALRM);
5347#endif /* BSD4_1 */
c8f44005 5348 sigunblock (sigmask (SIGPIPE));
d0d6b7c5
JB
5349 longjmp (send_process_frame, 1);
5350}
5351
4556b700
RS
5352/* Send some data to process PROC.
5353 BUF is the beginning of the data; LEN is the number of characters.
a92e4183
KH
5354 OBJECT is the Lisp object that the data comes from. If OBJECT is
5355 nil or t, it means that the data comes from C string.
0fa1789e 5356
a92e4183
KH
5357 If OBJECT is not nil, the data is encoded by PROC's coding-system
5358 for encoding before it is sent.
1fb0098c
GM
5359
5360 This function can evaluate Lisp code and can garbage collect. */
4556b700 5361
ff6daed3 5362static void
4556b700 5363send_process (proc, buf, len, object)
ecd1f654 5364 volatile Lisp_Object proc;
0daad115
GM
5365 unsigned char *volatile buf;
5366 volatile int len;
5367 volatile Lisp_Object object;
d0d6b7c5 5368{
ecd1f654 5369 /* Use volatile to protect variables from being clobbered by longjmp. */
6b61353c 5370 struct Lisp_Process *p = XPROCESS (proc);
d0d6b7c5 5371 int rv;
0fa1789e 5372 struct coding_system *coding;
6044e593 5373 struct gcpro gcpro1;
41c4895c 5374 SIGTYPE (*volatile old_sigpipe) ();
6044e593
RS
5375
5376 GCPRO1 (object);
d0d6b7c5 5377
d0d6b7c5 5378#ifdef VMS
d0d6b7c5
JB
5379 VMS_PROC_STUFF *vs, *get_vms_process_pointer();
5380#endif /* VMS */
5381
6bfd98e7 5382 if (p->raw_status_new)
6b61353c
KH
5383 update_status (p);
5384 if (! EQ (p->status, Qrun))
5385 error ("Process %s not running", SDATA (p->name));
60f0fb11 5386 if (p->outfd < 0)
6b61353c 5387 error ("Output file descriptor of %s is closed", SDATA (p->name));
0fa1789e 5388
60f0fb11 5389 coding = proc_encode_coding_system[p->outfd];
5bbf78c1 5390 Vlast_coding_system_used = CODING_ID_NAME (coding->id);
486b111b 5391
ed7a4b2d
KH
5392 if ((STRINGP (object) && STRING_MULTIBYTE (object))
5393 || (BUFFERP (object)
a92e4183
KH
5394 && !NILP (XBUFFER (object)->enable_multibyte_characters))
5395 || EQ (object, Qt))
278bfdd6 5396 {
6b61353c 5397 if (!EQ (Vlast_coding_system_used, p->encode_coding_system))
278bfdd6
KH
5398 /* The coding system for encoding was changed to raw-text
5399 because we sent a unibyte text previously. Now we are
5400 sending a multibyte text, thus we must encode it by the
6b61353c
KH
5401 original coding system specified for the current process. */
5402 setup_coding_system (p->encode_coding_system, coding);
e08bbb84 5403 coding->src_multibyte = 1;
278bfdd6
KH
5404 }
5405 else
5406 {
a92e4183
KH
5407 /* For sending a unibyte text, character code conversion should
5408 not take place but EOL conversion should. So, setup raw-text
5409 or one of the subsidiary if we have not yet done it. */
5bbf78c1 5410 if (CODING_REQUIRE_ENCODING (coding))
a92e4183
KH
5411 {
5412 if (CODING_REQUIRE_FLUSHING (coding))
5413 {
5414 /* But, before changing the coding, we must flush out data. */
5415 coding->mode |= CODING_MODE_LAST_BLOCK;
5416 send_process (proc, "", 0, Qt);
8f924df7 5417 coding->mode &= CODING_MODE_LAST_BLOCK;
a92e4183 5418 }
5bbf78c1
KH
5419 setup_coding_system (raw_text_coding_system
5420 (Vlast_coding_system_used),
5421 coding);
e08bbb84 5422 coding->src_multibyte = 0;
a92e4183 5423 }
278bfdd6 5424 }
a4a37e65
KH
5425 coding->dst_multibyte = 0;
5426
ed7a4b2d 5427 if (CODING_REQUIRE_ENCODING (coding))
0fa1789e 5428 {
5bbf78c1 5429 coding->dst_object = Qt;
ed7a4b2d 5430 if (BUFFERP (object))
0fa1789e 5431 {
5bbf78c1
KH
5432 int from_byte, from, to;
5433 int save_pt, save_pt_byte;
5434 struct buffer *cur = current_buffer;
5435
5436 set_buffer_internal (XBUFFER (object));
5437 save_pt = PT, save_pt_byte = PT_BYTE;
5438
5439 from_byte = PTR_BYTE_POS (buf);
5440 from = BYTE_TO_CHAR (from_byte);
5441 to = BYTE_TO_CHAR (from_byte + len);
5442 TEMP_SET_PT_BOTH (from, from_byte);
5443 encode_coding_object (coding, object, from, from_byte,
5444 to, from_byte + len, Qt);
5445 TEMP_SET_PT_BOTH (save_pt, save_pt_byte);
5446 set_buffer_internal (cur);
ed7a4b2d
KH
5447 }
5448 else if (STRINGP (object))
5449 {
5bbf78c1 5450 encode_coding_string (coding, object, 1);
0fa1789e 5451 }
5bbf78c1 5452 else
452294c2 5453 {
5bbf78c1
KH
5454 coding->dst_object = make_unibyte_string (buf, len);
5455 coding->produced = len;
452294c2 5456 }
ed7a4b2d 5457
e7fbaa65 5458 len = coding->produced;
8f924df7 5459 buf = SDATA (coding->dst_object);
0fa1789e 5460 }
d0d6b7c5
JB
5461
5462#ifdef VMS
5463 vs = get_vms_process_pointer (p->pid);
5464 if (vs == 0)
5465 error ("Could not find this process: %x", p->pid);
5466 else if (write_to_vms_process (vs, buf, len))
5467 ;
0daad115 5468#else /* not VMS */
4556b700
RS
5469
5470 if (pty_max_bytes == 0)
5471 {
5472#if defined (HAVE_FPATHCONF) && defined (_PC_MAX_CANON)
60f0fb11 5473 pty_max_bytes = fpathconf (p->outfd, _PC_MAX_CANON);
4556b700
RS
5474 if (pty_max_bytes < 0)
5475 pty_max_bytes = 250;
5476#else
5477 pty_max_bytes = 250;
5478#endif
5479 /* Deduct one, to leave space for the eof. */
5480 pty_max_bytes--;
5481 }
5482
0daad115
GM
5483 /* 2000-09-21: Emacs 20.7, sparc-sun-solaris-2.6, GCC 2.95.2,
5484 CFLAGS="-g -O": The value of the parameter `proc' is clobbered
5485 when returning with longjmp despite being declared volatile. */
d0d6b7c5 5486 if (!setjmp (send_process_frame))
0daad115
GM
5487 {
5488 process_sent_to = proc;
5489 while (len > 0)
5490 {
5491 int this = len;
93b4f699 5492
0daad115
GM
5493 /* Decide how much data we can send in one batch.
5494 Long lines need to be split into multiple batches. */
60f0fb11 5495 if (p->pty_flag)
0daad115 5496 {
c0ec53ad
SM
5497 /* Starting this at zero is always correct when not the first
5498 iteration because the previous iteration ended by sending C-d.
0daad115
GM
5499 It may not be correct for the first iteration
5500 if a partial line was sent in a separate send_process call.
5501 If that proves worth handling, we need to save linepos
5502 in the process object. */
5503 int linepos = 0;
5504 unsigned char *ptr = (unsigned char *) buf;
5505 unsigned char *end = (unsigned char *) buf + len;
5506
5507 /* Scan through this text for a line that is too long. */
5508 while (ptr != end && linepos < pty_max_bytes)
5509 {
5510 if (*ptr == '\n')
5511 linepos = 0;
5512 else
5513 linepos++;
5514 ptr++;
5515 }
5516 /* If we found one, break the line there
5517 and put in a C-d to force the buffer through. */
5518 this = ptr - buf;
5519 }
93b4f699 5520
0daad115
GM
5521 /* Send this batch, using one or more write calls. */
5522 while (this > 0)
5523 {
60f0fb11 5524 int outfd = p->outfd;
0daad115 5525 old_sigpipe = (SIGTYPE (*) ()) signal (SIGPIPE, send_process_trap);
e690ca94
KS
5526#ifdef DATAGRAM_SOCKETS
5527 if (DATAGRAM_CHAN_P (outfd))
5528 {
5529 rv = sendto (outfd, (char *) buf, this,
5530 0, datagram_address[outfd].sa,
5531 datagram_address[outfd].len);
5532 if (rv < 0 && errno == EMSGSIZE)
c8f44005
RS
5533 {
5534 signal (SIGPIPE, old_sigpipe);
5535 report_file_error ("sending datagram",
5536 Fcons (proc, Qnil));
5537 }
e690ca94
KS
5538 }
5539 else
5540#endif
6b61353c
KH
5541 {
5542 rv = emacs_write (outfd, (char *) buf, this);
5543#ifdef ADAPTIVE_READ_BUFFERING
60f0fb11
SM
5544 if (p->read_output_delay > 0
5545 && p->adaptive_read_buffering == 1)
6b61353c 5546 {
60f0fb11 5547 p->read_output_delay = 0;
6b61353c 5548 process_output_delay_count--;
60f0fb11 5549 p->read_output_skip = 0;
6b61353c
KH
5550 }
5551#endif
5552 }
0daad115 5553 signal (SIGPIPE, old_sigpipe);
4556b700 5554
0daad115
GM
5555 if (rv < 0)
5556 {
5557 if (0
d0d6b7c5 5558#ifdef EWOULDBLOCK
0daad115 5559 || errno == EWOULDBLOCK
d0d6b7c5
JB
5560#endif
5561#ifdef EAGAIN
0daad115 5562 || errno == EAGAIN
d0d6b7c5 5563#endif
0daad115 5564 )
177c0ea7 5565 /* Buffer is full. Wait, accepting input;
0daad115
GM
5566 that may allow the program
5567 to finish doing output and read more. */
5568 {
0daad115 5569 int offset = 0;
4556b700 5570
3433b6bd 5571#ifdef BROKEN_PTY_READ_AFTER_EAGAIN
0daad115
GM
5572 /* A gross hack to work around a bug in FreeBSD.
5573 In the following sequence, read(2) returns
5574 bogus data:
5575
5576 write(2) 1022 bytes
5577 write(2) 954 bytes, get EAGAIN
5578 read(2) 1024 bytes in process_read_output
5579 read(2) 11 bytes in process_read_output
5580
5581 That is, read(2) returns more bytes than have
5582 ever been written successfully. The 1033 bytes
5583 read are the 1022 bytes written successfully
5584 after processing (for example with CRs added if
5585 the terminal is set up that way which it is
5586 here). The same bytes will be seen again in a
5587 later read(2), without the CRs. */
177c0ea7 5588
0daad115
GM
5589 if (errno == EAGAIN)
5590 {
5591 int flags = FWRITE;
60f0fb11 5592 ioctl (p->outfd, TIOCFLUSH, &flags);
0daad115 5593 }
3433b6bd 5594#endif /* BROKEN_PTY_READ_AFTER_EAGAIN */
177c0ea7 5595
0daad115
GM
5596 /* Running filters might relocate buffers or strings.
5597 Arrange to relocate BUF. */
5598 if (BUFFERP (object))
5599 offset = BUF_PTR_BYTE_POS (XBUFFER (object), buf);
5600 else if (STRINGP (object))
d5db4077 5601 offset = buf - SDATA (object);
0daad115 5602
f3e6605c 5603#ifdef EMACS_HAS_USECS
214d6069 5604 wait_reading_process_output (0, 20000, 0, 0, Qnil, NULL, 0);
f3e6605c 5605#else
214d6069 5606 wait_reading_process_output (1, 0, 0, 0, Qnil, NULL, 0);
f3e6605c 5607#endif
4556b700 5608
0daad115
GM
5609 if (BUFFERP (object))
5610 buf = BUF_BYTE_ADDRESS (XBUFFER (object), offset);
5611 else if (STRINGP (object))
d5db4077 5612 buf = offset + SDATA (object);
4556b700 5613
0daad115
GM
5614 rv = 0;
5615 }
5616 else
5617 /* This is a real error. */
5618 report_file_error ("writing to process", Fcons (proc, Qnil));
5619 }
5620 buf += rv;
5621 len -= rv;
5622 this -= rv;
5623 }
f76475ad 5624
0daad115
GM
5625 /* If we sent just part of the string, put in an EOF
5626 to force it through, before we send the rest. */
5627 if (len > 0)
5628 Fprocess_send_eof (proc);
5629 }
5630 }
5631#endif /* not VMS */
d0d6b7c5
JB
5632 else
5633 {
0ff69270 5634 signal (SIGPIPE, old_sigpipe);
0daad115
GM
5635#ifndef VMS
5636 proc = process_sent_to;
6b61353c 5637 p = XPROCESS (proc);
0daad115 5638#endif
6bfd98e7 5639 p->raw_status_new = 0;
6b61353c 5640 p->status = Fcons (Qexit, Fcons (make_number (256), Qnil));
60f0fb11 5641 p->tick = ++process_tick;
d0d6b7c5
JB
5642 deactivate_process (proc);
5643#ifdef VMS
6b61353c 5644 error ("Error writing to process %s; closed it", SDATA (p->name));
d0d6b7c5 5645#else
6b61353c 5646 error ("SIGPIPE raised on process %s; closed it", SDATA (p->name));
d0d6b7c5
JB
5647#endif
5648 }
6044e593
RS
5649
5650 UNGCPRO;
d0d6b7c5
JB
5651}
5652
5653DEFUN ("process-send-region", Fprocess_send_region, Sprocess_send_region,
fdb82f93
PJ
5654 3, 3, 0,
5655 doc: /* Send current contents of region as input to PROCESS.
5656PROCESS may be a process, a buffer, the name of a process or buffer, or
5657nil, indicating the current buffer's process.
5658Called from program, takes three arguments, PROCESS, START and END.
5659If the region is more than 500 characters long,
5660it is sent in several bunches. This may happen even for shorter regions.
5661Output from processes can arrive in between bunches. */)
5662 (process, start, end)
d0d6b7c5
JB
5663 Lisp_Object process, start, end;
5664{
5665 Lisp_Object proc;
1b234f64 5666 int start1, end1;
d0d6b7c5
JB
5667
5668 proc = get_process (process);
5669 validate_region (&start, &end);
1b234f64
KH
5670
5671 if (XINT (start) < GPT && XINT (end) > GPT)
5672 move_gap (XINT (start));
5673
5674 start1 = CHAR_TO_BYTE (XINT (start));
5675 end1 = CHAR_TO_BYTE (XINT (end));
5676 send_process (proc, BYTE_POS_ADDR (start1), end1 - start1,
5677 Fcurrent_buffer ());
5678
d0d6b7c5
JB
5679 return Qnil;
5680}
5681
5682DEFUN ("process-send-string", Fprocess_send_string, Sprocess_send_string,
fdb82f93
PJ
5683 2, 2, 0,
5684 doc: /* Send PROCESS the contents of STRING as input.
5685PROCESS may be a process, a buffer, the name of a process or buffer, or
5686nil, indicating the current buffer's process.
5687If STRING is more than 500 characters long,
5688it is sent in several bunches. This may happen even for shorter strings.
5689Output from processes can arrive in between bunches. */)
5690 (process, string)
d0d6b7c5
JB
5691 Lisp_Object process, string;
5692{
5693 Lisp_Object proc;
b7826503 5694 CHECK_STRING (string);
d0d6b7c5 5695 proc = get_process (process);
1b234f64
KH
5696 send_process (proc, SDATA (string),
5697 SBYTES (string), string);
d0d6b7c5
JB
5698 return Qnil;
5699}
5700\f
16782258
JD
5701/* Return the foreground process group for the tty/pty that
5702 the process P uses. */
5703static int
5704emacs_get_tty_pgrp (p)
5705 struct Lisp_Process *p;
5706{
5707 int gid = -1;
5708
f3d9532b 5709#ifdef TIOCGPGRP
60f0fb11 5710 if (ioctl (p->infd, TIOCGPGRP, &gid) == -1 && ! NILP (p->tty_name))
16782258
JD
5711 {
5712 int fd;
5713 /* Some OS:es (Solaris 8/9) does not allow TIOCGPGRP from the
5714 master side. Try the slave side. */
eef60308 5715 fd = emacs_open (SDATA (p->tty_name), O_RDONLY, 0);
16782258
JD
5716
5717 if (fd != -1)
5718 {
5719 ioctl (fd, TIOCGPGRP, &gid);
5720 emacs_close (fd);
5721 }
5722 }
5723#endif /* defined (TIOCGPGRP ) */
5724
5725 return gid;
5726}
5727
b81ea5ef
RS
5728DEFUN ("process-running-child-p", Fprocess_running_child_p,
5729 Sprocess_running_child_p, 0, 1, 0,
fdb82f93
PJ
5730 doc: /* Return t if PROCESS has given the terminal to a child.
5731If the operating system does not make it possible to find out,
5732return t unconditionally. */)
5733 (process)
b81ea5ef
RS
5734 Lisp_Object process;
5735{
5736 /* Initialize in case ioctl doesn't exist or gives an error,
5737 in a way that will cause returning t. */
16782258 5738 int gid;
b81ea5ef
RS
5739 Lisp_Object proc;
5740 struct Lisp_Process *p;
5741
5742 proc = get_process (process);
5743 p = XPROCESS (proc);
5744
5745 if (!EQ (p->childp, Qt))
5746 error ("Process %s is not a subprocess",
d5db4077 5747 SDATA (p->name));
60f0fb11 5748 if (p->infd < 0)
b81ea5ef 5749 error ("Process %s is not active",
d5db4077 5750 SDATA (p->name));
b81ea5ef 5751
16782258 5752 gid = emacs_get_tty_pgrp (p);
b81ea5ef 5753
6bfd98e7 5754 if (gid == p->pid)
b81ea5ef
RS
5755 return Qnil;
5756 return Qt;
5757}
5758\f
d0d6b7c5 5759/* send a signal number SIGNO to PROCESS.
b81ea5ef
RS
5760 If CURRENT_GROUP is t, that means send to the process group
5761 that currently owns the terminal being used to communicate with PROCESS.
d0d6b7c5 5762 This is used for various commands in shell mode.
b81ea5ef
RS
5763 If CURRENT_GROUP is lambda, that means send to the process group
5764 that currently owns the terminal, but only if it is NOT the shell itself.
5765
d0d6b7c5 5766 If NOMSG is zero, insert signal-announcements into process's buffers
b0310da4
JB
5767 right away.
5768
5769 If we can, we try to signal PROCESS by sending control characters
e333e864 5770 down the pty. This allows us to signal inferiors who have changed
b0310da4 5771 their uid, for which killpg would return an EPERM error. */
d0d6b7c5 5772
f9738840 5773static void
d0d6b7c5
JB
5774process_send_signal (process, signo, current_group, nomsg)
5775 Lisp_Object process;
5776 int signo;
5777 Lisp_Object current_group;
5778 int nomsg;
5779{
5780 Lisp_Object proc;
5781 register struct Lisp_Process *p;
5782 int gid;
5783 int no_pgrp = 0;
5784
5785 proc = get_process (process);
5786 p = XPROCESS (proc);
5787
5788 if (!EQ (p->childp, Qt))
5789 error ("Process %s is not a subprocess",
d5db4077 5790 SDATA (p->name));
60f0fb11 5791 if (p->infd < 0)
d0d6b7c5 5792 error ("Process %s is not active",
d5db4077 5793 SDATA (p->name));
d0d6b7c5 5794
60f0fb11 5795 if (!p->pty_flag)
d0d6b7c5
JB
5796 current_group = Qnil;
5797
d0d6b7c5 5798 /* If we are using pgrps, get a pgrp number and make it negative. */
2af70a0c
RS
5799 if (NILP (current_group))
5800 /* Send the signal to the shell's process group. */
6bfd98e7 5801 gid = p->pid;
2af70a0c 5802 else
d0d6b7c5 5803 {
b0310da4 5804#ifdef SIGNALS_VIA_CHARACTERS
d0d6b7c5
JB
5805 /* If possible, send signals to the entire pgrp
5806 by sending an input character to it. */
b0310da4 5807
6be429b1
JB
5808 /* TERMIOS is the latest and bestest, and seems most likely to
5809 work. If the system has it, use it. */
5810#ifdef HAVE_TERMIOS
5811 struct termios t;
7f916a36
RS
5812 cc_t *sig_char = NULL;
5813
60f0fb11 5814 tcgetattr (p->infd, &t);
6be429b1
JB
5815
5816 switch (signo)
5817 {
5818 case SIGINT:
7f916a36
RS
5819 sig_char = &t.c_cc[VINTR];
5820 break;
6be429b1
JB
5821
5822 case SIGQUIT:
7f916a36
RS
5823 sig_char = &t.c_cc[VQUIT];
5824 break;
6be429b1
JB
5825
5826 case SIGTSTP:
d0adf46f 5827#if defined (VSWTCH) && !defined (PREFER_VSUSP)
7f916a36 5828 sig_char = &t.c_cc[VSWTCH];
6be429b1 5829#else
7f916a36 5830 sig_char = &t.c_cc[VSUSP];
6be429b1 5831#endif
7f916a36 5832 break;
6be429b1
JB
5833 }
5834
ca4313d5 5835 if (sig_char && *sig_char != CDISABLE)
f1c206fc
RS
5836 {
5837 send_process (proc, sig_char, 1, Qnil);
5838 return;
5839 }
5840 /* If we can't send the signal with a character,
5841 fall through and send it another way. */
6be429b1
JB
5842#else /* ! HAVE_TERMIOS */
5843
b0310da4
JB
5844 /* On Berkeley descendants, the following IOCTL's retrieve the
5845 current control characters. */
d0d6b7c5 5846#if defined (TIOCGLTC) && defined (TIOCGETC)
b0310da4 5847
d0d6b7c5
JB
5848 struct tchars c;
5849 struct ltchars lc;
5850
5851 switch (signo)
5852 {
5853 case SIGINT:
60f0fb11 5854 ioctl (p->infd, TIOCGETC, &c);
4556b700 5855 send_process (proc, &c.t_intrc, 1, Qnil);
f9738840 5856 return;
d0d6b7c5 5857 case SIGQUIT:
60f0fb11 5858 ioctl (p->infd, TIOCGETC, &c);
4556b700 5859 send_process (proc, &c.t_quitc, 1, Qnil);
f9738840 5860 return;
0ad77c54 5861#ifdef SIGTSTP
d0d6b7c5 5862 case SIGTSTP:
60f0fb11 5863 ioctl (p->infd, TIOCGLTC, &lc);
4556b700 5864 send_process (proc, &lc.t_suspc, 1, Qnil);
f9738840 5865 return;
b0310da4 5866#endif /* ! defined (SIGTSTP) */
d0d6b7c5 5867 }
b0310da4
JB
5868
5869#else /* ! defined (TIOCGLTC) && defined (TIOCGETC) */
5870
5871 /* On SYSV descendants, the TCGETA ioctl retrieves the current control
5872 characters. */
5873#ifdef TCGETA
d0d6b7c5
JB
5874 struct termio t;
5875 switch (signo)
5876 {
5877 case SIGINT:
60f0fb11 5878 ioctl (p->infd, TCGETA, &t);
4556b700 5879 send_process (proc, &t.c_cc[VINTR], 1, Qnil);
f9738840 5880 return;
d0d6b7c5 5881 case SIGQUIT:
60f0fb11 5882 ioctl (p->infd, TCGETA, &t);
4556b700 5883 send_process (proc, &t.c_cc[VQUIT], 1, Qnil);
f9738840 5884 return;
7d79e3b4 5885#ifdef SIGTSTP
d0d6b7c5 5886 case SIGTSTP:
60f0fb11 5887 ioctl (p->infd, TCGETA, &t);
4556b700 5888 send_process (proc, &t.c_cc[VSWTCH], 1, Qnil);
f9738840 5889 return;
b0310da4 5890#endif /* ! defined (SIGTSTP) */
d0d6b7c5 5891 }
b0310da4
JB
5892#else /* ! defined (TCGETA) */
5893 Your configuration files are messed up.
5894 /* If your system configuration files define SIGNALS_VIA_CHARACTERS,
5895 you'd better be using one of the alternatives above! */
5896#endif /* ! defined (TCGETA) */
5897#endif /* ! defined (TIOCGLTC) && defined (TIOCGETC) */
eef60308 5898 /* In this case, the code above should alway return. */
20505336 5899 abort ();
f1c206fc
RS
5900#endif /* ! defined HAVE_TERMIOS */
5901
5902 /* The code above may fall through if it can't
5903 handle the signal. */
20505336 5904#endif /* defined (SIGNALS_VIA_CHARACTERS) */
d0d6b7c5 5905
177c0ea7 5906#ifdef TIOCGPGRP
2af70a0c 5907 /* Get the current pgrp using the tty itself, if we have that.
d0d6b7c5
JB
5908 Otherwise, use the pty to get the pgrp.
5909 On pfa systems, saka@pfu.fujitsu.co.JP writes:
b0310da4
JB
5910 "TIOCGPGRP symbol defined in sys/ioctl.h at E50.
5911 But, TIOCGPGRP does not work on E50 ;-P works fine on E60"
d0d6b7c5
JB
5912 His patch indicates that if TIOCGPGRP returns an error, then
5913 we should just assume that p->pid is also the process group id. */
d0d6b7c5 5914
16782258 5915 gid = emacs_get_tty_pgrp (p);
f3d9532b 5916
16782258
JD
5917 if (gid == -1)
5918 /* If we can't get the information, assume
5919 the shell owns the tty. */
6bfd98e7 5920 gid = p->pid;
2af70a0c
RS
5921
5922 /* It is not clear whether anything really can set GID to -1.
5923 Perhaps on some system one of those ioctls can or could do so.
5924 Or perhaps this is vestigial. */
d0d6b7c5
JB
5925 if (gid == -1)
5926 no_pgrp = 1;
b0310da4 5927#else /* ! defined (TIOCGPGRP ) */
301c3fe4
JB
5928 /* Can't select pgrps on this system, so we know that
5929 the child itself heads the pgrp. */
6bfd98e7 5930 gid = p->pid;
301c3fe4 5931#endif /* ! defined (TIOCGPGRP ) */
b81ea5ef
RS
5932
5933 /* If current_group is lambda, and the shell owns the terminal,
5934 don't send any signal. */
6bfd98e7 5935 if (EQ (current_group, Qlambda) && gid == p->pid)
b81ea5ef 5936 return;
d0d6b7c5 5937 }
d0d6b7c5
JB
5938
5939 switch (signo)
5940 {
5941#ifdef SIGCONT
5942 case SIGCONT:
6bfd98e7 5943 p->raw_status_new = 0;
d0d6b7c5 5944 p->status = Qrun;
60f0fb11 5945 p->tick = ++process_tick;
d0d6b7c5 5946 if (!nomsg)
ff6daed3 5947 status_notify (NULL);
d0d6b7c5 5948 break;
301c3fe4 5949#endif /* ! defined (SIGCONT) */
d0d6b7c5
JB
5950 case SIGINT:
5951#ifdef VMS
4556b700 5952 send_process (proc, "\003", 1, Qnil); /* ^C */
d0d6b7c5
JB
5953 goto whoosh;
5954#endif
5955 case SIGQUIT:
5956#ifdef VMS
4556b700 5957 send_process (proc, "\031", 1, Qnil); /* ^Y */
d0d6b7c5
JB
5958 goto whoosh;
5959#endif
5960 case SIGKILL:
5961#ifdef VMS
6bfd98e7 5962 sys$forcex (&(p->pid), 0, 1);
d0d6b7c5
JB
5963 whoosh:
5964#endif
60f0fb11 5965 flush_pending_output (p->infd);
d0d6b7c5
JB
5966 break;
5967 }
5968
5969 /* If we don't have process groups, send the signal to the immediate
5970 subprocess. That isn't really right, but it's better than any
5971 obvious alternative. */
5972 if (no_pgrp)
5973 {
6bfd98e7 5974 kill (p->pid, signo);
d0d6b7c5
JB
5975 return;
5976 }
5977
5978 /* gid may be a pid, or minus a pgrp's number */
5979#ifdef TIOCSIGSEND
5980 if (!NILP (current_group))
16782258 5981 {
60f0fb11 5982 if (ioctl (p->infd, TIOCSIGSEND, signo) == -1)
16782258
JD
5983 EMACS_KILLPG (gid, signo);
5984 }
d0d6b7c5
JB
5985 else
5986 {
6bfd98e7 5987 gid = - p->pid;
d0d6b7c5
JB
5988 kill (gid, signo);
5989 }
301c3fe4 5990#else /* ! defined (TIOCSIGSEND) */
2af70a0c 5991 EMACS_KILLPG (gid, signo);
301c3fe4 5992#endif /* ! defined (TIOCSIGSEND) */
d0d6b7c5
JB
5993}
5994
5995DEFUN ("interrupt-process", Finterrupt_process, Sinterrupt_process, 0, 2, 0,
fdb82f93
PJ
5996 doc: /* Interrupt process PROCESS.
5997PROCESS may be a process, a buffer, or the name of a process or buffer.
f3d9532b 5998No arg or nil means current buffer's process.
fdb82f93
PJ
5999Second arg CURRENT-GROUP non-nil means send signal to
6000the current process-group of the process's controlling terminal
6001rather than to the process's own process group.
6002If the process is a shell, this means interrupt current subjob
6003rather than the shell.
6004
6005If CURRENT-GROUP is `lambda', and if the shell owns the terminal,
6006don't send the signal. */)
6007 (process, current_group)
d0d6b7c5
JB
6008 Lisp_Object process, current_group;
6009{
6010 process_send_signal (process, SIGINT, current_group, 0);
6011 return process;
6012}
6013
6014DEFUN ("kill-process", Fkill_process, Skill_process, 0, 2, 0,
fdb82f93
PJ
6015 doc: /* Kill process PROCESS. May be process or name of one.
6016See function `interrupt-process' for more details on usage. */)
6017 (process, current_group)
d0d6b7c5
JB
6018 Lisp_Object process, current_group;
6019{
6020 process_send_signal (process, SIGKILL, current_group, 0);
6021 return process;
6022}
6023
6024DEFUN ("quit-process", Fquit_process, Squit_process, 0, 2, 0,
fdb82f93
PJ
6025 doc: /* Send QUIT signal to process PROCESS. May be process or name of one.
6026See function `interrupt-process' for more details on usage. */)
6027 (process, current_group)
d0d6b7c5
JB
6028 Lisp_Object process, current_group;
6029{
6030 process_send_signal (process, SIGQUIT, current_group, 0);
6031 return process;
6032}
6033
6034DEFUN ("stop-process", Fstop_process, Sstop_process, 0, 2, 0,
fdb82f93 6035 doc: /* Stop process PROCESS. May be process or name of one.
177c0ea7 6036See function `interrupt-process' for more details on usage.
e690ca94 6037If PROCESS is a network process, inhibit handling of incoming traffic. */)
fdb82f93 6038 (process, current_group)
d0d6b7c5
JB
6039 Lisp_Object process, current_group;
6040{
e690ca94
KS
6041#ifdef HAVE_SOCKETS
6042 if (PROCESSP (process) && NETCONN_P (process))
6043 {
6044 struct Lisp_Process *p;
177c0ea7 6045
e690ca94
KS
6046 p = XPROCESS (process);
6047 if (NILP (p->command)
60f0fb11 6048 && p->infd >= 0)
e690ca94 6049 {
60f0fb11
SM
6050 FD_CLR (p->infd, &input_wait_mask);
6051 FD_CLR (p->infd, &non_keyboard_wait_mask);
e690ca94
KS
6052 }
6053 p->command = Qt;
6054 return process;
6055 }
6056#endif
d0d6b7c5 6057#ifndef SIGTSTP
a9a73d6c 6058 error ("No SIGTSTP support");
d0d6b7c5
JB
6059#else
6060 process_send_signal (process, SIGTSTP, current_group, 0);
6061#endif
6062 return process;
6063}
6064
6065DEFUN ("continue-process", Fcontinue_process, Scontinue_process, 0, 2, 0,
fdb82f93 6066 doc: /* Continue process PROCESS. May be process or name of one.
177c0ea7 6067See function `interrupt-process' for more details on usage.
e690ca94 6068If PROCESS is a network process, resume handling of incoming traffic. */)
fdb82f93 6069 (process, current_group)
d0d6b7c5
JB
6070 Lisp_Object process, current_group;
6071{
e690ca94
KS
6072#ifdef HAVE_SOCKETS
6073 if (PROCESSP (process) && NETCONN_P (process))
6074 {
6075 struct Lisp_Process *p;
6076
6077 p = XPROCESS (process);
6078 if (EQ (p->command, Qt)
60f0fb11 6079 && p->infd >= 0
e690ca94
KS
6080 && (!EQ (p->filter, Qt) || EQ (p->status, Qlisten)))
6081 {
60f0fb11
SM
6082 FD_SET (p->infd, &input_wait_mask);
6083 FD_SET (p->infd, &non_keyboard_wait_mask);
e690ca94
KS
6084 }
6085 p->command = Qnil;
6086 return process;
6087 }
6088#endif
d0d6b7c5
JB
6089#ifdef SIGCONT
6090 process_send_signal (process, SIGCONT, current_group, 0);
6091#else
a9a73d6c 6092 error ("No SIGCONT support");
d0d6b7c5
JB
6093#endif
6094 return process;
6095}
6096
6097DEFUN ("signal-process", Fsignal_process, Ssignal_process,
cdd5ea86
KS
6098 2, 2, "sProcess (name or number): \nnSignal code: ",
6099 doc: /* Send PROCESS the signal with code SIGCODE.
648f6edf 6100PROCESS may also be a number specifying the process id of the
cdd5ea86
KS
6101process to signal; in this case, the process need not be a child of
6102this Emacs.
fdb82f93 6103SIGCODE may be an integer, or a symbol whose name is a signal name. */)
cdd5ea86
KS
6104 (process, sigcode)
6105 Lisp_Object process, sigcode;
d0d6b7c5 6106{
6bfd98e7 6107 pid_t pid;
cdd5ea86
KS
6108
6109 if (INTEGERP (process))
6110 {
6bfd98e7
SM
6111 pid = XINT (process);
6112 goto got_it;
6113 }
6114
6115 if (FLOATP (process))
6116 {
648f6edf 6117 pid = (pid_t) XFLOAT_DATA (process);
cdd5ea86
KS
6118 goto got_it;
6119 }
6120
6121 if (STRINGP (process))
6122 {
6123 Lisp_Object tem;
6124 if (tem = Fget_process (process), NILP (tem))
6125 {
6bfd98e7
SM
6126 pid = XINT (Fstring_to_number (process, make_number (10)));
6127 if (pid > 0)
cdd5ea86
KS
6128 goto got_it;
6129 }
6130 process = tem;
6131 }
6132 else
6133 process = get_process (process);
177c0ea7 6134
cdd5ea86
KS
6135 if (NILP (process))
6136 return process;
6137
6138 CHECK_PROCESS (process);
6139 pid = XPROCESS (process)->pid;
6bfd98e7 6140 if (pid <= 0)
cdd5ea86
KS
6141 error ("Cannot signal process %s", SDATA (XPROCESS (process)->name));
6142
6143 got_it:
4766242d 6144
59324b1d 6145#define parse_signal(NAME, VALUE) \
ec0f21f4 6146 else if (!xstricmp (name, NAME)) \
4766242d
RS
6147 XSETINT (sigcode, VALUE)
6148
6149 if (INTEGERP (sigcode))
6150 ;
6151 else
6152 {
6153 unsigned char *name;
6154
b7826503 6155 CHECK_SYMBOL (sigcode);
d5db4077 6156 name = SDATA (SYMBOL_NAME (sigcode));
4766242d 6157
ec0f21f4 6158 if (!strncmp(name, "SIG", 3) || !strncmp(name, "sig", 3))
675984ed
KS
6159 name += 3;
6160
4766242d
RS
6161 if (0)
6162 ;
59324b1d
KS
6163#ifdef SIGUSR1
6164 parse_signal ("usr1", SIGUSR1);
6165#endif
6166#ifdef SIGUSR2
6167 parse_signal ("usr2", SIGUSR2);
6168#endif
6169#ifdef SIGTERM
6170 parse_signal ("term", SIGTERM);
6171#endif
4766242d 6172#ifdef SIGHUP
59324b1d 6173 parse_signal ("hup", SIGHUP);
4766242d
RS
6174#endif
6175#ifdef SIGINT
59324b1d 6176 parse_signal ("int", SIGINT);
4766242d
RS
6177#endif
6178#ifdef SIGQUIT
59324b1d 6179 parse_signal ("quit", SIGQUIT);
4766242d
RS
6180#endif
6181#ifdef SIGILL
59324b1d 6182 parse_signal ("ill", SIGILL);
4766242d
RS
6183#endif
6184#ifdef SIGABRT
59324b1d 6185 parse_signal ("abrt", SIGABRT);
4766242d
RS
6186#endif
6187#ifdef SIGEMT
59324b1d 6188 parse_signal ("emt", SIGEMT);
4766242d
RS
6189#endif
6190#ifdef SIGKILL
59324b1d 6191 parse_signal ("kill", SIGKILL);
4766242d
RS
6192#endif
6193#ifdef SIGFPE
59324b1d 6194 parse_signal ("fpe", SIGFPE);
4766242d
RS
6195#endif
6196#ifdef SIGBUS
59324b1d 6197 parse_signal ("bus", SIGBUS);
4766242d
RS
6198#endif
6199#ifdef SIGSEGV
59324b1d 6200 parse_signal ("segv", SIGSEGV);
4766242d
RS
6201#endif
6202#ifdef SIGSYS
59324b1d 6203 parse_signal ("sys", SIGSYS);
4766242d
RS
6204#endif
6205#ifdef SIGPIPE
59324b1d 6206 parse_signal ("pipe", SIGPIPE);
4766242d
RS
6207#endif
6208#ifdef SIGALRM
59324b1d 6209 parse_signal ("alrm", SIGALRM);
4766242d
RS
6210#endif
6211#ifdef SIGURG
59324b1d 6212 parse_signal ("urg", SIGURG);
4766242d
RS
6213#endif
6214#ifdef SIGSTOP
59324b1d 6215 parse_signal ("stop", SIGSTOP);
4766242d
RS
6216#endif
6217#ifdef SIGTSTP
59324b1d 6218 parse_signal ("tstp", SIGTSTP);
4766242d
RS
6219#endif
6220#ifdef SIGCONT
59324b1d 6221 parse_signal ("cont", SIGCONT);
4766242d
RS
6222#endif
6223#ifdef SIGCHLD
59324b1d 6224 parse_signal ("chld", SIGCHLD);
4766242d
RS
6225#endif
6226#ifdef SIGTTIN
59324b1d 6227 parse_signal ("ttin", SIGTTIN);
4766242d
RS
6228#endif
6229#ifdef SIGTTOU
59324b1d 6230 parse_signal ("ttou", SIGTTOU);
4766242d
RS
6231#endif
6232#ifdef SIGIO
59324b1d 6233 parse_signal ("io", SIGIO);
4766242d
RS
6234#endif
6235#ifdef SIGXCPU
59324b1d 6236 parse_signal ("xcpu", SIGXCPU);
4766242d
RS
6237#endif
6238#ifdef SIGXFSZ
59324b1d 6239 parse_signal ("xfsz", SIGXFSZ);
4766242d
RS
6240#endif
6241#ifdef SIGVTALRM
59324b1d 6242 parse_signal ("vtalrm", SIGVTALRM);
4766242d
RS
6243#endif
6244#ifdef SIGPROF
59324b1d 6245 parse_signal ("prof", SIGPROF);
4766242d
RS
6246#endif
6247#ifdef SIGWINCH
59324b1d 6248 parse_signal ("winch", SIGWINCH);
4766242d
RS
6249#endif
6250#ifdef SIGINFO
59324b1d 6251 parse_signal ("info", SIGINFO);
4766242d
RS
6252#endif
6253 else
9fa195a2 6254 error ("Undefined signal name %s", name);
4766242d
RS
6255 }
6256
59324b1d 6257#undef parse_signal
4766242d 6258
6bfd98e7 6259 return make_number (kill (pid, XINT (sigcode)));
d0d6b7c5
JB
6260}
6261
6262DEFUN ("process-send-eof", Fprocess_send_eof, Sprocess_send_eof, 0, 1, 0,
fdb82f93
PJ
6263 doc: /* Make PROCESS see end-of-file in its input.
6264EOF comes after any text already sent to it.
6265PROCESS may be a process, a buffer, the name of a process or buffer, or
6266nil, indicating the current buffer's process.
6267If PROCESS is a network connection, or is a process communicating
6268through a pipe (as opposed to a pty), then you cannot send any more
6269text to PROCESS after you call this function. */)
6270 (process)
d0d6b7c5
JB
6271 Lisp_Object process;
6272{
6273 Lisp_Object proc;
de7fbd09 6274 struct coding_system *coding;
d0d6b7c5 6275
e690ca94
KS
6276 if (DATAGRAM_CONN_P (process))
6277 return process;
6278
d0d6b7c5 6279 proc = get_process (process);
60f0fb11 6280 coding = proc_encode_coding_system[XPROCESS (proc)->outfd];
577d03d5
RS
6281
6282 /* Make sure the process is really alive. */
6bfd98e7 6283 if (XPROCESS (proc)->raw_status_new)
577d03d5
RS
6284 update_status (XPROCESS (proc));
6285 if (! EQ (XPROCESS (proc)->status, Qrun))
d5db4077 6286 error ("Process %s not running", SDATA (XPROCESS (proc)->name));
577d03d5 6287
de7fbd09
KH
6288 if (CODING_REQUIRE_FLUSHING (coding))
6289 {
6290 coding->mode |= CODING_MODE_LAST_BLOCK;
6291 send_process (proc, "", 0, Qnil);
6292 }
6293
d0d6b7c5 6294#ifdef VMS
4556b700 6295 send_process (proc, "\032", 1, Qnil); /* ^z */
d0d6b7c5 6296#else
60f0fb11 6297 if (XPROCESS (proc)->pty_flag)
4556b700 6298 send_process (proc, "\004", 1, Qnil);
d0d6b7c5
JB
6299 else
6300 {
4525f571
RS
6301 int old_outfd, new_outfd;
6302
93853f3d 6303#ifdef HAVE_SHUTDOWN
02f55c4b
RS
6304 /* If this is a network connection, or socketpair is used
6305 for communication with the subprocess, call shutdown to cause EOF.
6306 (In some old system, shutdown to socketpair doesn't work.
6307 Then we just can't win.) */
6bfd98e7 6308 if (XPROCESS (proc)->pid == 0
60f0fb11
SM
6309 || XPROCESS (proc)->outfd == XPROCESS (proc)->infd)
6310 shutdown (XPROCESS (proc)->outfd, 1);
02f55c4b 6311 /* In case of socketpair, outfd == infd, so don't close it. */
60f0fb11
SM
6312 if (XPROCESS (proc)->outfd != XPROCESS (proc)->infd)
6313 emacs_close (XPROCESS (proc)->outfd);
93853f3d 6314#else /* not HAVE_SHUTDOWN */
60f0fb11 6315 emacs_close (XPROCESS (proc)->outfd);
93853f3d 6316#endif /* not HAVE_SHUTDOWN */
68c45bf0 6317 new_outfd = emacs_open (NULL_DEVICE, O_WRONLY, 0);
27448380
RS
6318 if (new_outfd < 0)
6319 abort ();
60f0fb11 6320 old_outfd = XPROCESS (proc)->outfd;
4525f571
RS
6321
6322 if (!proc_encode_coding_system[new_outfd])
6323 proc_encode_coding_system[new_outfd]
6324 = (struct coding_system *) xmalloc (sizeof (struct coding_system));
6325 bcopy (proc_encode_coding_system[old_outfd],
6326 proc_encode_coding_system[new_outfd],
6327 sizeof (struct coding_system));
6328 bzero (proc_encode_coding_system[old_outfd],
6329 sizeof (struct coding_system));
6330
60f0fb11 6331 XPROCESS (proc)->outfd = new_outfd;
d0d6b7c5
JB
6332 }
6333#endif /* VMS */
d0d6b7c5
JB
6334 return process;
6335}
6336
6337/* Kill all processes associated with `buffer'.
3fed8ad5 6338 If `buffer' is nil, kill all processes */
d0d6b7c5 6339
6b53bb85 6340void
d0d6b7c5
JB
6341kill_buffer_processes (buffer)
6342 Lisp_Object buffer;
6343{
6344 Lisp_Object tail, proc;
6345
8e50cc2d 6346 for (tail = Vprocess_alist; CONSP (tail); tail = XCDR (tail))
d0d6b7c5 6347 {
70949dac 6348 proc = XCDR (XCAR (tail));
8e50cc2d 6349 if (PROCESSP (proc)
d0d6b7c5
JB
6350 && (NILP (buffer) || EQ (XPROCESS (proc)->buffer, buffer)))
6351 {
6352 if (NETCONN_P (proc))
e1ab4959 6353 Fdelete_process (proc);
60f0fb11 6354 else if (XPROCESS (proc)->infd >= 0)
d0d6b7c5
JB
6355 process_send_signal (proc, SIGHUP, Qnil, 1);
6356 }
6357 }
6358}
6359\f
3fed8ad5
GM
6360/* On receipt of a signal that a child status has changed, loop asking
6361 about children with changed statuses until the system says there
6362 are no more.
177c0ea7 6363
3fed8ad5
GM
6364 All we do is change the status; we do not run sentinels or print
6365 notifications. That is saved for the next time keyboard input is
6366 done, in order to avoid timing errors.
6367
6368 ** WARNING: this can be called during garbage collection.
6369 Therefore, it must not be fooled by the presence of mark bits in
6370 Lisp objects.
6371
6372 ** USG WARNING: Although it is not obvious from the documentation
6373 in signal(2), on a USG system the SIGCLD handler MUST NOT call
6374 signal() before executing at least one wait(), otherwise the
6375 handler will be called again, resulting in an infinite loop. The
6376 relevant portion of the documentation reads "SIGCLD signals will be
6377 queued and the signal-catching function will be continually
6378 reentered until the queue is empty". Invoking signal() causes the
6379 kernel to reexamine the SIGCLD queue. Fred Fish, UniSoft Systems
6b61353c
KH
6380 Inc.
6381
6382 ** Malloc WARNING: This should never call malloc either directly or
6383 indirectly; if it does, that is a bug */
d0d6b7c5 6384
a5cfdda8 6385#ifdef SIGCHLD
d0d6b7c5
JB
6386SIGTYPE
6387sigchld_handler (signo)
6388 int signo;
6389{
6390 int old_errno = errno;
6391 Lisp_Object proc;
6392 register struct Lisp_Process *p;
6be429b1 6393 extern EMACS_TIME *input_available_clear_time;
d0d6b7c5 6394
333f1b6f
JD
6395 SIGNAL_THREAD_CHECK (signo);
6396
d0d6b7c5
JB
6397#ifdef BSD4_1
6398 extern int sigheld;
6399 sigheld |= sigbit (SIGCHLD);
6400#endif
6401
6402 while (1)
6403 {
8e050977 6404 pid_t pid;
d0d6b7c5
JB
6405 WAITTYPE w;
6406 Lisp_Object tail;
6407
6408#ifdef WNOHANG
6409#ifndef WUNTRACED
6410#define WUNTRACED 0
6411#endif /* no WUNTRACED */
6412 /* Keep trying to get a status until we get a definitive result. */
e7d4a904
SS
6413 do
6414 {
29ed4d51
CY
6415 errno = 0;
6416 pid = wait3 (&w, WNOHANG | WUNTRACED, 0);
29ed4d51 6417 }
e7d4a904 6418 while (pid < 0 && errno == EINTR);
d0d6b7c5
JB
6419
6420 if (pid <= 0)
6421 {
3fed8ad5
GM
6422 /* PID == 0 means no processes found, PID == -1 means a real
6423 failure. We have done all our job, so return. */
d0d6b7c5
JB
6424
6425 /* USG systems forget handlers when they are used;
6426 must reestablish each time */
3c0ee47b 6427#if defined (USG) && !defined (POSIX_SIGNALS)
d0d6b7c5
JB
6428 signal (signo, sigchld_handler); /* WARNING - must come after wait3() */
6429#endif
6430#ifdef BSD4_1
6431 sigheld &= ~sigbit (SIGCHLD);
6432 sigrelse (SIGCHLD);
6433#endif
6434 errno = old_errno;
6435 return;
6436 }
6437#else
6438 pid = wait (&w);
6439#endif /* no WNOHANG */
6440
6441 /* Find the process that signaled us, and record its status. */
6442
a5cfdda8 6443 /* The process can have been deleted by Fdelete_process. */
8e50cc2d 6444 for (tail = deleted_pid_list; CONSP (tail); tail = XCDR (tail))
a5cfdda8 6445 {
8e050977 6446 Lisp_Object xpid = XCAR (tail);
8e50cc2d
SM
6447 if ((INTEGERP (xpid) && pid == (pid_t) XINT (xpid))
6448 || (FLOATP (xpid) && pid == (pid_t) XFLOAT_DATA (xpid)))
8e050977
CY
6449 {
6450 XSETCAR (tail, Qnil);
6451 goto sigchld_end_of_loop;
6452 }
a5cfdda8
KS
6453 }
6454
6455 /* Otherwise, if it is asynchronous, it is in Vprocess_alist. */
d0d6b7c5 6456 p = 0;
8e50cc2d 6457 for (tail = Vprocess_alist; CONSP (tail); tail = XCDR (tail))
d0d6b7c5 6458 {
70949dac 6459 proc = XCDR (XCAR (tail));
d0d6b7c5 6460 p = XPROCESS (proc);
8e50cc2d 6461 if (EQ (p->childp, Qt) && p->pid == pid)
d0d6b7c5
JB
6462 break;
6463 p = 0;
6464 }
6465
6466 /* Look for an asynchronous process whose pid hasn't been filled
6467 in yet. */
6468 if (p == 0)
8e50cc2d 6469 for (tail = Vprocess_alist; CONSP (tail); tail = XCDR (tail))
d0d6b7c5 6470 {
70949dac 6471 proc = XCDR (XCAR (tail));
d0d6b7c5 6472 p = XPROCESS (proc);
6bfd98e7 6473 if (p->pid == -1)
d0d6b7c5
JB
6474 break;
6475 p = 0;
6476 }
177c0ea7 6477
d0d6b7c5
JB
6478 /* Change the status of the process that was found. */
6479 if (p != 0)
6480 {
6481 union { int i; WAITTYPE wt; } u;
e98d950b 6482 int clear_desc_flag = 0;
177c0ea7 6483
60f0fb11 6484 p->tick = ++process_tick;
d0d6b7c5 6485 u.wt = w;
6bfd98e7
SM
6486 p->raw_status = u.i;
6487 p->raw_status_new = 1;
177c0ea7 6488
d0d6b7c5 6489 /* If process has terminated, stop waiting for its output. */
e98d950b 6490 if ((WIFSIGNALED (w) || WIFEXITED (w))
60f0fb11 6491 && p->infd >= 0)
e98d950b
RS
6492 clear_desc_flag = 1;
6493
6494 /* We use clear_desc_flag to avoid a compiler bug in Microsoft C. */
6495 if (clear_desc_flag)
6496 {
60f0fb11
SM
6497 FD_CLR (p->infd, &input_wait_mask);
6498 FD_CLR (p->infd, &non_keyboard_wait_mask);
e98d950b 6499 }
6be429b1 6500
214d6069 6501 /* Tell wait_reading_process_output that it needs to wake up and
6be429b1
JB
6502 look around. */
6503 if (input_available_clear_time)
6504 EMACS_SET_SECS_USECS (*input_available_clear_time, 0, 0);
d0d6b7c5
JB
6505 }
6506
a5cfdda8
KS
6507 /* There was no asynchronous process found for that pid: we have
6508 a synchronous process. */
d0d6b7c5
JB
6509 else
6510 {
6511 synch_process_alive = 0;
6512
6513 /* Report the status of the synchronous process. */
6514 if (WIFEXITED (w))
6515 synch_process_retcode = WRETCODE (w);
6516 else if (WIFSIGNALED (w))
6b61353c 6517 synch_process_termsig = WTERMSIG (w);
6be429b1 6518
214d6069 6519 /* Tell wait_reading_process_output that it needs to wake up and
6be429b1
JB
6520 look around. */
6521 if (input_available_clear_time)
6522 EMACS_SET_SECS_USECS (*input_available_clear_time, 0, 0);
d0d6b7c5
JB
6523 }
6524
a5cfdda8
KS
6525 sigchld_end_of_loop:
6526 ;
6527
d0d6b7c5
JB
6528 /* On some systems, we must return right away.
6529 If any more processes want to signal us, we will
6530 get another signal.
6531 Otherwise (on systems that have WNOHANG), loop around
6532 to use up all the processes that have something to tell us. */
4e6277d8 6533#if (defined WINDOWSNT \
8a2a6032 6534 || (defined USG && !defined GNU_LINUX \
4e6277d8 6535 && !(defined HPUX && defined WNOHANG)))
3c0ee47b 6536#if defined (USG) && ! defined (POSIX_SIGNALS)
d0d6b7c5
JB
6537 signal (signo, sigchld_handler);
6538#endif
6539 errno = old_errno;
6540 return;
6541#endif /* USG, but not HPUX with WNOHANG */
6542 }
6543}
a5cfdda8 6544#endif /* SIGCHLD */
d0d6b7c5
JB
6545\f
6546
6547static Lisp_Object
6548exec_sentinel_unwind (data)
6549 Lisp_Object data;
6550{
70949dac 6551 XPROCESS (XCAR (data))->sentinel = XCDR (data);
d0d6b7c5
JB
6552 return Qnil;
6553}
6554
3b9a3dfa
RS
6555static Lisp_Object
6556exec_sentinel_error_handler (error)
6557 Lisp_Object error;
6558{
6559 cmd_error_internal (error, "error in process sentinel: ");
6560 Vinhibit_quit = Qt;
6561 update_echo_area ();
833ba342 6562 Fsleep_for (make_number (2), Qnil);
8c983bf2 6563 return Qt;
3b9a3dfa
RS
6564}
6565
d0d6b7c5
JB
6566static void
6567exec_sentinel (proc, reason)
6568 Lisp_Object proc, reason;
6569{
dfc21838 6570 Lisp_Object sentinel, obuffer, odeactivate, okeymap;
d0d6b7c5 6571 register struct Lisp_Process *p = XPROCESS (proc);
aed13378 6572 int count = SPECPDL_INDEX ();
4da2f5be 6573 int outer_running_asynch_code = running_asynch_code;
bbce7d72 6574 int waiting = waiting_for_user_input_p;
d0d6b7c5 6575
84af9896
RS
6576 if (inhibit_sentinels)
6577 return;
6578
dfc21838
RS
6579 /* No need to gcpro these, because all we do with them later
6580 is test them for EQness, and none of them should be a string. */
8fb3cf64 6581 odeactivate = Vdeactivate_mark;
dfc21838
RS
6582 XSETBUFFER (obuffer, current_buffer);
6583 okeymap = current_buffer->keymap;
6584
d0d6b7c5
JB
6585 sentinel = p->sentinel;
6586 if (NILP (sentinel))
6587 return;
6588
6589 /* Zilch the sentinel while it's running, to avoid recursive invocations;
6590 assure that it gets restored no matter how the sentinel exits. */
6591 p->sentinel = Qnil;
6592 record_unwind_protect (exec_sentinel_unwind, Fcons (proc, sentinel));
6593 /* Inhibit quit so that random quits don't screw up a running filter. */
6594 specbind (Qinhibit_quit, Qt);
6545aada 6595 specbind (Qlast_nonmenu_event, Qt);
3b9a3dfa 6596
4da2f5be
RS
6597 /* In case we get recursively called,
6598 and we already saved the match data nonrecursively,
6599 save the same match data in safely recursive fashion. */
6600 if (outer_running_asynch_code)
6601 {
6602 Lisp_Object tem;
89f2614d
KS
6603 tem = Fmatch_data (Qnil, Qnil, Qnil);
6604 restore_search_regs ();
6605 record_unwind_save_match_data ();
6606 Fset_match_data (tem, Qt);
4da2f5be
RS
6607 }
6608
6609 /* For speed, if a search happens within this code,
6610 save the match data in a special nonrecursive fashion. */
7074fde6 6611 running_asynch_code = 1;
4da2f5be 6612
3b9a3dfa
RS
6613 internal_condition_case_1 (read_process_output_call,
6614 Fcons (sentinel,
6615 Fcons (proc, Fcons (reason, Qnil))),
6616 !NILP (Vdebug_on_error) ? Qnil : Qerror,
6617 exec_sentinel_error_handler);
4da2f5be
RS
6618
6619 /* If we saved the match data nonrecursively, restore it now. */
89f2614d 6620 restore_search_regs ();
4da2f5be 6621 running_asynch_code = outer_running_asynch_code;
8fb3cf64
KH
6622
6623 Vdeactivate_mark = odeactivate;
bbce7d72
RS
6624
6625 /* Restore waiting_for_user_input_p as it was
6626 when we were called, in case the filter clobbered it. */
6627 waiting_for_user_input_p = waiting;
6628
7973cfa8 6629#if 0
dfc21838
RS
6630 if (! EQ (Fcurrent_buffer (), obuffer)
6631 || ! EQ (current_buffer->keymap, okeymap))
7973cfa8 6632#endif
927e08be
RS
6633 /* But do it only if the caller is actually going to read events.
6634 Otherwise there's no need to make him wake up, and it could
7157b8fe 6635 cause trouble (for example it would make sit_for return). */
927e08be
RS
6636 if (waiting_for_user_input_p == -1)
6637 record_asynch_buffer_change ();
8fb3cf64 6638
2ea6d561 6639 unbind_to (count, Qnil);
d0d6b7c5
JB
6640}
6641
6642/* Report all recent events of a change in process status
6643 (either run the sentinel or output a message).
b50fe468
RS
6644 This is usually done while Emacs is waiting for keyboard input
6645 but can be done at other times. */
d0d6b7c5 6646
ff6daed3
KS
6647static void
6648status_notify (deleting_process)
6649 struct Lisp_Process *deleting_process;
d0d6b7c5
JB
6650{
6651 register Lisp_Object proc, buffer;
2e4149a8 6652 Lisp_Object tail, msg;
d0d6b7c5
JB
6653 struct gcpro gcpro1, gcpro2;
6654
2e4149a8
KH
6655 tail = Qnil;
6656 msg = Qnil;
d0d6b7c5
JB
6657 /* We need to gcpro tail; if read_process_output calls a filter
6658 which deletes a process and removes the cons to which tail points
6659 from Vprocess_alist, and then causes a GC, tail is an unprotected
6660 reference. */
6661 GCPRO2 (tail, msg);
6662
30623085
RS
6663 /* Set this now, so that if new processes are created by sentinels
6664 that we run, we get called again to handle their status changes. */
6665 update_tick = process_tick;
6666
99784d63 6667 for (tail = Vprocess_alist; CONSP (tail); tail = XCDR (tail))
d0d6b7c5 6668 {
30623085
RS
6669 Lisp_Object symbol;
6670 register struct Lisp_Process *p;
6671
99784d63 6672 proc = Fcdr (XCAR (tail));
30623085
RS
6673 p = XPROCESS (proc);
6674
60f0fb11 6675 if (p->tick != p->update_tick)
d0d6b7c5 6676 {
60f0fb11 6677 p->update_tick = p->tick;
d0d6b7c5 6678
30623085 6679 /* If process is still active, read any output that remains. */
4da2f5be 6680 while (! EQ (p->filter, Qt)
dd2a17ab 6681 && ! EQ (p->status, Qconnect)
e690ca94
KS
6682 && ! EQ (p->status, Qlisten)
6683 && ! EQ (p->command, Qt) /* Network process not stopped. */
60f0fb11 6684 && p->infd >= 0
ff6daed3 6685 && p != deleting_process
60f0fb11 6686 && read_process_output (proc, p->infd) > 0);
d0d6b7c5 6687
30623085 6688 buffer = p->buffer;
d0d6b7c5 6689
30623085 6690 /* Get the text to use for the message. */
6bfd98e7 6691 if (p->raw_status_new)
30623085 6692 update_status (p);
116c423c 6693 msg = status_message (p);
d0d6b7c5 6694
30623085
RS
6695 /* If process is terminated, deactivate it or delete it. */
6696 symbol = p->status;
6697 if (CONSP (p->status))
70949dac 6698 symbol = XCAR (p->status);
d0d6b7c5 6699
30623085
RS
6700 if (EQ (symbol, Qsignal) || EQ (symbol, Qexit)
6701 || EQ (symbol, Qclosed))
6702 {
6703 if (delete_exited_processes)
6704 remove_process (proc);
6705 else
6706 deactivate_process (proc);
6707 }
d0d6b7c5 6708
0ad61fe7
RS
6709 /* The actions above may have further incremented p->tick.
6710 So set p->update_tick again
6711 so that an error in the sentinel will not cause
6712 this code to be run again. */
60f0fb11 6713 p->update_tick = p->tick;
30623085
RS
6714 /* Now output the message suitably. */
6715 if (!NILP (p->sentinel))
6716 exec_sentinel (proc, msg);
6717 /* Don't bother with a message in the buffer
6718 when a process becomes runnable. */
6719 else if (!EQ (symbol, Qrun) && !NILP (buffer))
6720 {
6721 Lisp_Object ro, tem;
6722 struct buffer *old = current_buffer;
d8a2934e
RS
6723 int opoint, opoint_byte;
6724 int before, before_byte;
2e4149a8 6725
30623085 6726 ro = XBUFFER (buffer)->read_only;
d0d6b7c5 6727
30623085
RS
6728 /* Avoid error if buffer is deleted
6729 (probably that's why the process is dead, too) */
6730 if (NILP (XBUFFER (buffer)->name))
6731 continue;
6732 Fset_buffer (buffer);
12ca5cdf 6733
6ec8bbd2 6734 opoint = PT;
d8a2934e 6735 opoint_byte = PT_BYTE;
30623085
RS
6736 /* Insert new output into buffer
6737 at the current end-of-output marker,
6738 thus preserving logical ordering of input and output. */
6739 if (XMARKER (p->mark)->buffer)
d8a2934e 6740 Fgoto_char (p->mark);
30623085 6741 else
d8a2934e 6742 SET_PT_BOTH (ZV, ZV_BYTE);
12ca5cdf
RS
6743
6744 before = PT;
d8a2934e 6745 before_byte = PT_BYTE;
30623085
RS
6746
6747 tem = current_buffer->read_only;
6748 current_buffer->read_only = Qnil;
6749 insert_string ("\nProcess ");
6750 Finsert (1, &p->name);
6751 insert_string (" ");
6752 Finsert (1, &msg);
6753 current_buffer->read_only = tem;
d8a2934e 6754 set_marker_both (p->mark, p->buffer, PT, PT_BYTE);
30623085 6755
12ca5cdf 6756 if (opoint >= before)
d8a2934e
RS
6757 SET_PT_BOTH (opoint + (PT - before),
6758 opoint_byte + (PT_BYTE - before_byte));
12ca5cdf 6759 else
d8a2934e 6760 SET_PT_BOTH (opoint, opoint_byte);
12ca5cdf 6761
30623085 6762 set_buffer_internal (old);
d0d6b7c5 6763 }
30623085
RS
6764 }
6765 } /* end for */
d0d6b7c5
JB
6766
6767 update_mode_lines++; /* in case buffers use %s in mode-line-format */
3007ebfb 6768 redisplay_preserve_echo_area (13);
d0d6b7c5 6769
d0d6b7c5
JB
6770 UNGCPRO;
6771}
0fa1789e
KH
6772
6773\f
6774DEFUN ("set-process-coding-system", Fset_process_coding_system,
6775 Sset_process_coding_system, 1, 3, 0,
fdb82f93
PJ
6776 doc: /* Set coding systems of PROCESS to DECODING and ENCODING.
6777DECODING will be used to decode subprocess output and ENCODING to
6778encode subprocess input. */)
f3d9532b
JB
6779 (process, decoding, encoding)
6780 register Lisp_Object process, decoding, encoding;
0fa1789e
KH
6781{
6782 register struct Lisp_Process *p;
6783
f3d9532b
JB
6784 CHECK_PROCESS (process);
6785 p = XPROCESS (process);
60f0fb11 6786 if (p->infd < 0)
d5db4077 6787 error ("Input file descriptor of %s closed", SDATA (p->name));
60f0fb11 6788 if (p->outfd < 0)
d5db4077 6789 error ("Output file descriptor of %s closed", SDATA (p->name));
03f04413
KH
6790 Fcheck_coding_system (decoding);
6791 Fcheck_coding_system (encoding);
76d812bb 6792 encoding = coding_inherit_eol_type (encoding, Qnil);
03f04413
KH
6793 p->decode_coding_system = decoding;
6794 p->encode_coding_system = encoding;
f3d9532b 6795 setup_process_coding_systems (process);
0fa1789e
KH
6796
6797 return Qnil;
6798}
6799
6800DEFUN ("process-coding-system",
6801 Fprocess_coding_system, Sprocess_coding_system, 1, 1, 0,
fdb82f93 6802 doc: /* Return a cons of coding systems for decoding and encoding of PROCESS. */)
f3d9532b
JB
6803 (process)
6804 register Lisp_Object process;
0fa1789e 6805{
f3d9532b
JB
6806 CHECK_PROCESS (process);
6807 return Fcons (XPROCESS (process)->decode_coding_system,
6808 XPROCESS (process)->encode_coding_system);
0fa1789e 6809}
03f04413
KH
6810
6811DEFUN ("set-process-filter-multibyte", Fset_process_filter_multibyte,
6812 Sset_process_filter_multibyte, 2, 2, 0,
7392e23c
KS
6813 doc: /* Set multibyteness of the strings given to PROCESS's filter.
6814If FLAG is non-nil, the filter is given multibyte strings.
6815If FLAG is nil, the filter is given unibyte strings. In this case,
03f04413
KH
6816all character code conversion except for end-of-line conversion is
6817suppressed. */)
f3d9532b
JB
6818 (process, flag)
6819 Lisp_Object process, flag;
03f04413
KH
6820{
6821 register struct Lisp_Process *p;
6822
f3d9532b
JB
6823 CHECK_PROCESS (process);
6824 p = XPROCESS (process);
5431bd6a
SM
6825 if (NILP (flag))
6826 p->decode_coding_system = raw_text_coding_system (p->decode_coding_system);
f3d9532b 6827 setup_process_coding_systems (process);
03f04413
KH
6828
6829 return Qnil;
6830}
6831
6832DEFUN ("process-filter-multibyte-p", Fprocess_filter_multibyte_p,
6833 Sprocess_filter_multibyte_p, 1, 1, 0,
6834 doc: /* Return t if a multibyte string is given to PROCESS's filter.*/)
f3d9532b
JB
6835 (process)
6836 Lisp_Object process;
03f04413
KH
6837{
6838 register struct Lisp_Process *p;
5431bd6a 6839 struct coding_system *coding;
03f04413 6840
f3d9532b
JB
6841 CHECK_PROCESS (process);
6842 p = XPROCESS (process);
5431bd6a
SM
6843 coding = proc_decode_coding_system[p->infd];
6844 return (CODING_FOR_UNIBYTE (coding) ? Qnil : Qt);
03f04413
KH
6845}
6846
6847
d0d6b7c5 6848\f
da8e1115 6849/* Add DESC to the set of keyboard input descriptors. */
a69281ff
RS
6850
6851void
6852add_keyboard_wait_descriptor (desc)
6853 int desc;
6854{
a69281ff 6855 FD_SET (desc, &input_wait_mask);
b5dc1c83 6856 FD_SET (desc, &non_process_wait_mask);
a69281ff
RS
6857 if (desc > max_keyboard_desc)
6858 max_keyboard_desc = desc;
6859}
6860
994d9841
NR
6861static int add_gpm_wait_descriptor_called_flag;
6862
6863void
6864add_gpm_wait_descriptor (desc)
6865 int desc;
6866{
6867 if (! add_gpm_wait_descriptor_called_flag)
6868 FD_CLR (0, &input_wait_mask);
6869 add_gpm_wait_descriptor_called_flag = 1;
6870 FD_SET (desc, &input_wait_mask);
6871 FD_SET (desc, &gpm_wait_mask);
6872 if (desc > max_gpm_desc)
6873 max_gpm_desc = desc;
6874}
6875
a69281ff
RS
6876/* From now on, do not expect DESC to give keyboard input. */
6877
6878void
6879delete_keyboard_wait_descriptor (desc)
6880 int desc;
6881{
6882 int fd;
6883 int lim = max_keyboard_desc;
6884
6885 FD_CLR (desc, &input_wait_mask);
b5dc1c83 6886 FD_CLR (desc, &non_process_wait_mask);
a69281ff
RS
6887
6888 if (desc == max_keyboard_desc)
6889 for (fd = 0; fd < lim; fd++)
6890 if (FD_ISSET (fd, &input_wait_mask)
994d9841
NR
6891 && !FD_ISSET (fd, &non_keyboard_wait_mask)
6892 && !FD_ISSET (fd, &gpm_wait_mask))
a69281ff
RS
6893 max_keyboard_desc = fd;
6894}
6895
994d9841
NR
6896void
6897delete_gpm_wait_descriptor (desc)
6898 int desc;
6899{
6900 int fd;
6901 int lim = max_gpm_desc;
6902
6903 FD_CLR (desc, &input_wait_mask);
6904 FD_CLR (desc, &non_process_wait_mask);
6905
6906 if (desc == max_gpm_desc)
6907 for (fd = 0; fd < lim; fd++)
6908 if (FD_ISSET (fd, &input_wait_mask)
6909 && !FD_ISSET (fd, &non_keyboard_wait_mask)
6910 && !FD_ISSET (fd, &non_process_wait_mask))
6911 max_gpm_desc = fd;
6912}
6913
a69281ff
RS
6914/* Return nonzero if *MASK has a bit set
6915 that corresponds to one of the keyboard input descriptors. */
6916
ff6daed3 6917static int
a69281ff
RS
6918keyboard_bit_set (mask)
6919 SELECT_TYPE *mask;
6920{
6921 int fd;
6922
ee8e09af 6923 for (fd = 0; fd <= max_keyboard_desc; fd++)
a69281ff
RS
6924 if (FD_ISSET (fd, mask) && FD_ISSET (fd, &input_wait_mask)
6925 && !FD_ISSET (fd, &non_keyboard_wait_mask))
6926 return 1;
6927
6928 return 0;
6929}
6930\f
dfcf069d 6931void
d0d6b7c5
JB
6932init_process ()
6933{
6934 register int i;
6935
84af9896
RS
6936 inhibit_sentinels = 0;
6937
d0d6b7c5
JB
6938#ifdef SIGCHLD
6939#ifndef CANNOT_DUMP
6940 if (! noninteractive || initialized)
6941#endif
6942 signal (SIGCHLD, sigchld_handler);
6943#endif
6944
6945 FD_ZERO (&input_wait_mask);
a69281ff 6946 FD_ZERO (&non_keyboard_wait_mask);
b5dc1c83 6947 FD_ZERO (&non_process_wait_mask);
7d0e672e 6948 max_process_desc = 0;
dd2281ae 6949
bad49fc7
KS
6950#ifdef NON_BLOCKING_CONNECT
6951 FD_ZERO (&connect_wait_mask);
6952 num_pending_connects = 0;
6953#endif
6954
6b61353c
KH
6955#ifdef ADAPTIVE_READ_BUFFERING
6956 process_output_delay_count = 0;
6957 process_output_skip = 0;
6958#endif
6959
c0707982
KL
6960 /* Don't do this, it caused infinite select loops. The display
6961 method should call add_keyboard_wait_descriptor on stdin if it
6962 needs that. */
6963#if 0
a69281ff 6964 FD_SET (0, &input_wait_mask);
c0707982 6965#endif
dd2281ae 6966
d0d6b7c5 6967 Vprocess_alist = Qnil;
a5cfdda8
KS
6968#ifdef SIGCHLD
6969 deleted_pid_list = Qnil;
6970#endif
d0d6b7c5
JB
6971 for (i = 0; i < MAXDESC; i++)
6972 {
6973 chan_process[i] = Qnil;
6974 proc_buffered_char[i] = -1;
6975 }
c7580538
KH
6976 bzero (proc_decode_coding_system, sizeof proc_decode_coding_system);
6977 bzero (proc_encode_coding_system, sizeof proc_encode_coding_system);
e690ca94
KS
6978#ifdef DATAGRAM_SOCKETS
6979 bzero (datagram_address, sizeof datagram_address);
6980#endif
9057ff80 6981
c2bd2c26
KS
6982#ifdef HAVE_SOCKETS
6983 {
6984 Lisp_Object subfeatures = Qnil;
6b61353c
KH
6985 struct socket_options *sopt;
6986
9057ff80
KS
6987#define ADD_SUBFEATURE(key, val) \
6988 subfeatures = Fcons (Fcons (key, Fcons (val, Qnil)), subfeatures)
6989
9057ff80 6990#ifdef NON_BLOCKING_CONNECT
c2bd2c26 6991 ADD_SUBFEATURE (QCnowait, Qt);
9057ff80
KS
6992#endif
6993#ifdef DATAGRAM_SOCKETS
c2bd2c26 6994 ADD_SUBFEATURE (QCtype, Qdatagram);
9057ff80
KS
6995#endif
6996#ifdef HAVE_LOCAL_SOCKETS
c2bd2c26 6997 ADD_SUBFEATURE (QCfamily, Qlocal);
e1652a86
KS
6998#endif
6999 ADD_SUBFEATURE (QCfamily, Qipv4);
7000#ifdef AF_INET6
7001 ADD_SUBFEATURE (QCfamily, Qipv6);
9057ff80
KS
7002#endif
7003#ifdef HAVE_GETSOCKNAME
c2bd2c26 7004 ADD_SUBFEATURE (QCservice, Qt);
9057ff80 7005#endif
a8e8ea61 7006#if !defined(TERM) && (defined(O_NONBLOCK) || defined(O_NDELAY))
c2bd2c26 7007 ADD_SUBFEATURE (QCserver, Qt);
9057ff80 7008#endif
6b61353c
KH
7009
7010 for (sopt = socket_options; sopt->name; sopt++)
7011 subfeatures = Fcons (intern (sopt->name), subfeatures);
7012
c2bd2c26
KS
7013 Fprovide (intern ("make-network-process"), subfeatures);
7014 }
7015#endif /* HAVE_SOCKETS */
d9e7c622 7016
ecc175e2 7017#if defined (DARWIN) || defined (MAC_OSX)
db853b7a 7018 /* PTYs are broken on Darwin < 6, but are sometimes useful for interactive
d9e7c622
ST
7019 processes. As such, we only change the default value. */
7020 if (initialized)
7021 {
7022 char *release = get_operating_system_release();
7023 if (!release || !release[0] || (release[0] < MIN_PTY_KERNEL_VERSION
7024 && release[1] == '.')) {
7025 Vprocess_connection_type = Qnil;
7026 }
7027 }
7028#endif
d0d6b7c5 7029}
312c9964 7030
dfcf069d 7031void
d0d6b7c5
JB
7032syms_of_process ()
7033{
d0d6b7c5
JB
7034 Qprocessp = intern ("processp");
7035 staticpro (&Qprocessp);
7036 Qrun = intern ("run");
7037 staticpro (&Qrun);
7038 Qstop = intern ("stop");
7039 staticpro (&Qstop);
324e68ba
KS
7040 Qsignal = intern ("signal");
7041 staticpro (&Qsignal);
d0d6b7c5
JB
7042
7043 /* Qexit is already staticpro'd by syms_of_eval; don't staticpro it
7044 here again.
7045
7046 Qexit = intern ("exit");
7047 staticpro (&Qexit); */
7048
7049 Qopen = intern ("open");
7050 staticpro (&Qopen);
7051 Qclosed = intern ("closed");
7052 staticpro (&Qclosed);
dd2a17ab
KS
7053 Qconnect = intern ("connect");
7054 staticpro (&Qconnect);
7055 Qfailed = intern ("failed");
7056 staticpro (&Qfailed);
e690ca94
KS
7057 Qlisten = intern ("listen");
7058 staticpro (&Qlisten);
7059 Qlocal = intern ("local");
7060 staticpro (&Qlocal);
e1652a86
KS
7061 Qipv4 = intern ("ipv4");
7062 staticpro (&Qipv4);
7063#ifdef AF_INET6
7064 Qipv6 = intern ("ipv6");
7065 staticpro (&Qipv6);
7066#endif
9057ff80
KS
7067 Qdatagram = intern ("datagram");
7068 staticpro (&Qdatagram);
e690ca94
KS
7069
7070 QCname = intern (":name");
7071 staticpro (&QCname);
7072 QCbuffer = intern (":buffer");
7073 staticpro (&QCbuffer);
7074 QChost = intern (":host");
7075 staticpro (&QChost);
7076 QCservice = intern (":service");
7077 staticpro (&QCservice);
9057ff80
KS
7078 QCtype = intern (":type");
7079 staticpro (&QCtype);
e690ca94
KS
7080 QClocal = intern (":local");
7081 staticpro (&QClocal);
7082 QCremote = intern (":remote");
7083 staticpro (&QCremote);
7084 QCcoding = intern (":coding");
7085 staticpro (&QCcoding);
7086 QCserver = intern (":server");
7087 staticpro (&QCserver);
e690ca94
KS
7088 QCnowait = intern (":nowait");
7089 staticpro (&QCnowait);
e690ca94
KS
7090 QCsentinel = intern (":sentinel");
7091 staticpro (&QCsentinel);
7092 QClog = intern (":log");
7093 staticpro (&QClog);
7094 QCnoquery = intern (":noquery");
7095 staticpro (&QCnoquery);
7096 QCstop = intern (":stop");
7097 staticpro (&QCstop);
7098 QCoptions = intern (":options");
7099 staticpro (&QCoptions);
faa7db08
KS
7100 QCplist = intern (":plist");
7101 staticpro (&QCplist);
177c0ea7 7102
6545aada
RS
7103 Qlast_nonmenu_event = intern ("last-nonmenu-event");
7104 staticpro (&Qlast_nonmenu_event);
7105
d0d6b7c5 7106 staticpro (&Vprocess_alist);
a5cfdda8
KS
7107#ifdef SIGCHLD
7108 staticpro (&deleted_pid_list);
7109#endif
d0d6b7c5
JB
7110
7111 DEFVAR_BOOL ("delete-exited-processes", &delete_exited_processes,
fdb82f93 7112 doc: /* *Non-nil means delete processes immediately when they exit.
d4e83d5c 7113A value of nil means don't delete them until `list-processes' is run. */);
d0d6b7c5
JB
7114
7115 delete_exited_processes = 1;
7116
7117 DEFVAR_LISP ("process-connection-type", &Vprocess_connection_type,
fdb82f93
PJ
7118 doc: /* Control type of device used to communicate with subprocesses.
7119Values are nil to use a pipe, or t or `pty' to use a pty.
7120The value has no effect if the system has no ptys or if all ptys are busy:
7121then a pipe is used in any case.
7122The value takes effect when `start-process' is called. */);
d0d6b7c5
JB
7123 Vprocess_connection_type = Qt;
7124
6b61353c
KH
7125#ifdef ADAPTIVE_READ_BUFFERING
7126 DEFVAR_LISP ("process-adaptive-read-buffering", &Vprocess_adaptive_read_buffering,
7127 doc: /* If non-nil, improve receive buffering by delaying after short reads.
f3d9532b 7128On some systems, when Emacs reads the output from a subprocess, the output data
6b61353c 7129is read in very small blocks, potentially resulting in very poor performance.
2de35a25 7130This behavior can be remedied to some extent by setting this variable to a
6b61353c 7131non-nil value, as it will automatically delay reading from such processes, to
635a3496 7132allow them to produce more output before Emacs tries to read it.
6b61353c
KH
7133If the value is t, the delay is reset after each write to the process; any other
7134non-nil value means that the delay is not reset on write.
7135The variable takes effect when `start-process' is called. */);
7136 Vprocess_adaptive_read_buffering = Qt;
7137#endif
7138
d0d6b7c5
JB
7139 defsubr (&Sprocessp);
7140 defsubr (&Sget_process);
7141 defsubr (&Sget_buffer_process);
7142 defsubr (&Sdelete_process);
7143 defsubr (&Sprocess_status);
7144 defsubr (&Sprocess_exit_status);
7145 defsubr (&Sprocess_id);
7146 defsubr (&Sprocess_name);
3b9a3dfa 7147 defsubr (&Sprocess_tty_name);
d0d6b7c5
JB
7148 defsubr (&Sprocess_command);
7149 defsubr (&Sset_process_buffer);
7150 defsubr (&Sprocess_buffer);
7151 defsubr (&Sprocess_mark);
7152 defsubr (&Sset_process_filter);
7153 defsubr (&Sprocess_filter);
7154 defsubr (&Sset_process_sentinel);
7155 defsubr (&Sprocess_sentinel);
de282a05 7156 defsubr (&Sset_process_window_size);
52a1b894
EZ
7157 defsubr (&Sset_process_inherit_coding_system_flag);
7158 defsubr (&Sprocess_inherit_coding_system_flag);
e690ca94
KS
7159 defsubr (&Sset_process_query_on_exit_flag);
7160 defsubr (&Sprocess_query_on_exit_flag);
de282a05 7161 defsubr (&Sprocess_contact);
faa7db08
KS
7162 defsubr (&Sprocess_plist);
7163 defsubr (&Sset_process_plist);
d0d6b7c5
JB
7164 defsubr (&Slist_processes);
7165 defsubr (&Sprocess_list);
7166 defsubr (&Sstart_process);
7167#ifdef HAVE_SOCKETS
6b61353c 7168 defsubr (&Sset_network_process_option);
e690ca94 7169 defsubr (&Smake_network_process);
991234f0 7170 defsubr (&Sformat_network_address);
d0d6b7c5 7171#endif /* HAVE_SOCKETS */
6b61353c
KH
7172#if defined(HAVE_SOCKETS) && defined(HAVE_NET_IF_H) && defined(HAVE_SYS_IOCTL_H)
7173#ifdef SIOCGIFCONF
7174 defsubr (&Snetwork_interface_list);
7175#endif
7176#if defined(SIOCGIFADDR) || defined(SIOCGIFHWADDR) || defined(SIOCGIFFLAGS)
7177 defsubr (&Snetwork_interface_info);
7178#endif
7179#endif /* HAVE_SOCKETS ... */
e690ca94
KS
7180#ifdef DATAGRAM_SOCKETS
7181 defsubr (&Sprocess_datagram_address);
7182 defsubr (&Sset_process_datagram_address);
7183#endif
d0d6b7c5
JB
7184 defsubr (&Saccept_process_output);
7185 defsubr (&Sprocess_send_region);
7186 defsubr (&Sprocess_send_string);
7187 defsubr (&Sinterrupt_process);
7188 defsubr (&Skill_process);
7189 defsubr (&Squit_process);
7190 defsubr (&Sstop_process);
7191 defsubr (&Scontinue_process);
b81ea5ef 7192 defsubr (&Sprocess_running_child_p);
d0d6b7c5
JB
7193 defsubr (&Sprocess_send_eof);
7194 defsubr (&Ssignal_process);
7195 defsubr (&Swaiting_for_user_input_p);
7196/* defsubr (&Sprocess_connection); */
0fa1789e
KH
7197 defsubr (&Sset_process_coding_system);
7198 defsubr (&Sprocess_coding_system);
03f04413
KH
7199 defsubr (&Sset_process_filter_multibyte);
7200 defsubr (&Sprocess_filter_multibyte_p);
d0d6b7c5
JB
7201}
7202
6720a7fb
JB
7203\f
7204#else /* not subprocesses */
7205
7206#include <sys/types.h>
7207#include <errno.h>
7208
7209#include "lisp.h"
7210#include "systime.h"
5bbf78c1 7211#include "character.h"
52a1b894 7212#include "coding.h"
6720a7fb 7213#include "termopts.h"
81afb6d1 7214#include "sysselect.h"
6720a7fb 7215
ff11dfa1 7216extern int frame_garbaged;
6720a7fb 7217
f694e5d2
KH
7218extern EMACS_TIME timer_check ();
7219extern int timers_run;
6720a7fb 7220
9057ff80
KS
7221Lisp_Object QCtype;
7222
6720a7fb
JB
7223/* As described above, except assuming that there are no subprocesses:
7224
7225 Wait for timeout to elapse and/or keyboard input to be available.
7226
7227 time_limit is:
7228 timeout in seconds, or
7229 zero for no limit, or
7230 -1 means gobble data immediately available but don't wait for any.
7231
f76475ad 7232 read_kbd is a Lisp_Object:
6720a7fb
JB
7233 0 to ignore keyboard input, or
7234 1 to return when input is available, or
7235 -1 means caller will actually read the input, so don't throw to
7236 the quit handler.
b89a415a
KS
7237
7238 see full version for other parameters. We know that wait_proc will
7239 always be NULL, since `subprocesses' isn't defined.
6720a7fb
JB
7240
7241 do_display != 0 means redisplay should be done to show subprocess
5164ee8e 7242 output that arrives.
6720a7fb 7243
e0f24100 7244 Return true if we received input from any process. */
6720a7fb
JB
7245
7246int
214d6069
KS
7247wait_reading_process_output (time_limit, microsecs, read_kbd, do_display,
7248 wait_for_cell, wait_proc, just_wait_proc)
b89a415a
KS
7249 int time_limit, microsecs, read_kbd, do_display;
7250 Lisp_Object wait_for_cell;
7251 struct Lisp_Process *wait_proc;
7252 int just_wait_proc;
6720a7fb 7253{
52fd88d3 7254 register int nfds;
f694e5d2 7255 EMACS_TIME end_time, timeout;
8db121c4 7256 SELECT_TYPE waitchannels;
f694e5d2 7257 int xerrno;
6720a7fb
JB
7258
7259 /* What does time_limit really mean? */
7260 if (time_limit || microsecs)
7261 {
6720a7fb 7262 EMACS_GET_TIME (end_time);
52fd88d3 7263 EMACS_SET_SECS_USECS (timeout, time_limit, microsecs);
6720a7fb
JB
7264 EMACS_ADD_TIME (end_time, end_time, timeout);
7265 }
6720a7fb
JB
7266
7267 /* Turn off periodic alarms (in case they are in use)
75eb23f1 7268 and then turn off any other atimers,
6720a7fb 7269 because the select emulator uses alarms. */
75eb23f1 7270 stop_polling ();
30904ab7 7271 turn_on_atimers (0);
6720a7fb 7272
52fd88d3 7273 while (1)
6720a7fb 7274 {
bae8d137 7275 int timeout_reduced_for_timers = 0;
6720a7fb 7276
6720a7fb
JB
7277 /* If calling from keyboard input, do not quit
7278 since we want to return C-g as an input character.
7279 Otherwise, do pending quit if requested. */
b89a415a 7280 if (read_kbd >= 0)
6720a7fb
JB
7281 QUIT;
7282
0a65b032 7283 /* Exit now if the cell we're waiting for became non-nil. */
f3fbd155 7284 if (! NILP (wait_for_cell) && ! NILP (XCAR (wait_for_cell)))
0a65b032
RS
7285 break;
7286
bae8d137
RS
7287 /* Compute time from now till when time limit is up */
7288 /* Exit if already run out */
52fd88d3
EZ
7289 if (time_limit == -1)
7290 {
7291 /* -1 specified for timeout means
7292 gobble output available now
7293 but don't wait at all. */
7294
7295 EMACS_SET_SECS_USECS (timeout, 0, 0);
7296 }
7297 else if (time_limit || microsecs)
6720a7fb 7298 {
f694e5d2
KH
7299 EMACS_GET_TIME (timeout);
7300 EMACS_SUB_TIME (timeout, end_time, timeout);
7301 if (EMACS_TIME_NEG_P (timeout))
6720a7fb
JB
7302 break;
7303 }
52fd88d3
EZ
7304 else
7305 {
7306 EMACS_SET_SECS_USECS (timeout, 100000, 0);
7307 }
6720a7fb 7308
bae8d137
RS
7309 /* If our caller will not immediately handle keyboard events,
7310 run timer events directly.
7311 (Callers that will immediately read keyboard events
7312 call timer_delay on their own.) */
f3fbd155 7313 if (NILP (wait_for_cell))
bae8d137
RS
7314 {
7315 EMACS_TIME timer_delay;
0a65b032 7316
9baacf76 7317 do
0a65b032 7318 {
9baacf76
GM
7319 int old_timers_run = timers_run;
7320 timer_delay = timer_check (1);
7321 if (timers_run != old_timers_run && do_display)
7322 /* We must retry, since a timer may have requeued itself
7323 and that could alter the time delay. */
3007ebfb 7324 redisplay_preserve_echo_area (14);
9baacf76
GM
7325 else
7326 break;
0a65b032 7327 }
9baacf76 7328 while (!detect_input_pending ());
0a65b032 7329
52fd88d3 7330 /* If there is unread keyboard input, also return. */
b89a415a 7331 if (read_kbd != 0
52fd88d3
EZ
7332 && requeued_events_pending_p ())
7333 break;
7334
f694e5d2 7335 if (! EMACS_TIME_NEG_P (timer_delay) && time_limit != -1)
bae8d137
RS
7336 {
7337 EMACS_TIME difference;
f694e5d2 7338 EMACS_SUB_TIME (difference, timer_delay, timeout);
bae8d137
RS
7339 if (EMACS_TIME_NEG_P (difference))
7340 {
f694e5d2 7341 timeout = timer_delay;
bae8d137
RS
7342 timeout_reduced_for_timers = 1;
7343 }
7344 }
7345 }
7346
6720a7fb
JB
7347 /* Cause C-g and alarm signals to take immediate action,
7348 and cause input available signals to zero out timeout. */
b89a415a 7349 if (read_kbd < 0)
6720a7fb
JB
7350 set_waiting_for_input (&timeout);
7351
0a65b032
RS
7352 /* Wait till there is something to do. */
7353
b89a415a 7354 if (! read_kbd && NILP (wait_for_cell))
0a65b032
RS
7355 FD_ZERO (&waitchannels);
7356 else
7357 FD_SET (0, &waitchannels);
7358
ff11dfa1 7359 /* If a frame has been newly mapped and needs updating,
6720a7fb 7360 reprocess its display stuff. */
5164ee8e 7361 if (frame_garbaged && do_display)
0a65b032
RS
7362 {
7363 clear_waiting_for_input ();
3007ebfb 7364 redisplay_preserve_echo_area (15);
b89a415a 7365 if (read_kbd < 0)
0a65b032
RS
7366 set_waiting_for_input (&timeout);
7367 }
6720a7fb 7368
b89a415a 7369 if (read_kbd && detect_input_pending ())
1861b214
RS
7370 {
7371 nfds = 0;
7372 FD_ZERO (&waitchannels);
7373 }
7374 else
7375 nfds = select (1, &waitchannels, (SELECT_TYPE *)0, (SELECT_TYPE *)0,
7376 &timeout);
f694e5d2
KH
7377
7378 xerrno = errno;
6720a7fb
JB
7379
7380 /* Make C-g and alarm signals set flags again */
7381 clear_waiting_for_input ();
7382
7383 /* If we woke up due to SIGWINCH, actually change size now. */
2b653806 7384 do_pending_window_change (0);
6720a7fb 7385
f694e5d2
KH
7386 if (time_limit && nfds == 0 && ! timeout_reduced_for_timers)
7387 /* We waited the full specified time, so return now. */
7388 break;
7389
6720a7fb
JB
7390 if (nfds == -1)
7391 {
7392 /* If the system call was interrupted, then go around the
7393 loop again. */
f694e5d2 7394 if (xerrno == EINTR)
8db121c4 7395 FD_ZERO (&waitchannels);
f694e5d2 7396 else
68c45bf0 7397 error ("select error: %s", emacs_strerror (xerrno));
6720a7fb
JB
7398 }
7399#ifdef sun
7400 else if (nfds > 0 && (waitchannels & 1) && interrupt_input)
7401 /* System sometimes fails to deliver SIGIO. */
7402 kill (getpid (), SIGIO);
7403#endif
7324d660 7404#ifdef SIGIO
b89a415a 7405 if (read_kbd && interrupt_input && (waitchannels & 1))
e643c5be 7406 kill (getpid (), SIGIO);
7324d660 7407#endif
6720a7fb 7408
f694e5d2
KH
7409 /* Check for keyboard input */
7410
b89a415a 7411 if (read_kbd
78c1afb6 7412 && detect_input_pending_run_timers (do_display))
f694e5d2 7413 {
78c1afb6 7414 swallow_events (do_display);
f694e5d2 7415 if (detect_input_pending_run_timers (do_display))
a2fab450 7416 break;
78c1afb6
EZ
7417 }
7418
52fd88d3 7419 /* If there is unread keyboard input, also return. */
b89a415a 7420 if (read_kbd
52fd88d3
EZ
7421 && requeued_events_pending_p ())
7422 break;
7423
f854a00b
RS
7424 /* If wait_for_cell. check for keyboard input
7425 but don't run any timers.
7426 ??? (It seems wrong to me to check for keyboard
7427 input at all when wait_for_cell, but the code
7428 has been this way since July 1994.
7429 Try changing this after version 19.31.) */
f3fbd155 7430 if (! NILP (wait_for_cell)
f854a00b
RS
7431 && detect_input_pending ())
7432 {
7433 swallow_events (do_display);
7434 if (detect_input_pending ())
7435 break;
7436 }
7437
0a65b032 7438 /* Exit now if the cell we're waiting for became non-nil. */
f3fbd155 7439 if (! NILP (wait_for_cell) && ! NILP (XCAR (wait_for_cell)))
0a65b032 7440 break;
6720a7fb
JB
7441 }
7442
a87b802f
JB
7443 start_polling ();
7444
6720a7fb
JB
7445 return 0;
7446}
7447
7448
e2ba787b
PJ
7449/* Don't confuse make-docfile by having two doc strings for this function.
7450 make-docfile does not pay attention to #if, for good reason! */
6720a7fb 7451DEFUN ("get-buffer-process", Fget_buffer_process, Sget_buffer_process, 1, 1, 0,
fdb82f93
PJ
7452 0)
7453 (name)
6720a7fb
JB
7454 register Lisp_Object name;
7455{
7456 return Qnil;
7457}
7458
e2ba787b
PJ
7459 /* Don't confuse make-docfile by having two doc strings for this function.
7460 make-docfile does not pay attention to #if, for good reason! */
52a1b894 7461DEFUN ("process-inherit-coding-system-flag",
fdb82f93
PJ
7462 Fprocess_inherit_coding_system_flag, Sprocess_inherit_coding_system_flag,
7463 1, 1, 0,
7464 0)
7465 (process)
52a1b894
EZ
7466 register Lisp_Object process;
7467{
7468 /* Ignore the argument and return the value of
7469 inherit-process-coding-system. */
7470 return inherit_process_coding_system ? Qt : Qnil;
7471}
7472
6720a7fb
JB
7473/* Kill all processes associated with `buffer'.
7474 If `buffer' is nil, kill all processes.
7475 Since we have no subprocesses, this does nothing. */
7476
d9bb0c32 7477void
6720a7fb
JB
7478kill_buffer_processes (buffer)
7479 Lisp_Object buffer;
7480{
7481}
7482
02b9b4fd 7483void
6720a7fb
JB
7484init_process ()
7485{
7486}
7487
02b9b4fd 7488void
6720a7fb
JB
7489syms_of_process ()
7490{
9057ff80
KS
7491 QCtype = intern (":type");
7492 staticpro (&QCtype);
7493
6720a7fb 7494 defsubr (&Sget_buffer_process);
52a1b894 7495 defsubr (&Sprocess_inherit_coding_system_flag);
6720a7fb
JB
7496}
7497
7498\f
7499#endif /* not subprocesses */
6b61353c
KH
7500
7501/* arch-tag: 3706c011-7b9a-4117-bd4f-59e7f701a4c4
7502 (do not change this comment) */