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