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