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