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