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