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