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