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