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