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