(conv_lisp_to_sockaddr): If FAMILY unknown, just return.
[emacs.git] / src / process.c
blob29c93052369c49fab11bc70ee1fddde974d2b327
1 /* Asynchronous subprocess control for GNU Emacs.
2 Copyright (C) 1985, 1986, 1987, 1988, 1993, 1994, 1995,
3 1996, 1998, 1999, 2001, 2002, 2003, 2004,
4 2005, 2006 Free Software Foundation, Inc.
6 This file is part of GNU Emacs.
8 GNU Emacs is free software; you can redistribute it and/or modify
9 it under the terms of the GNU General Public License as published by
10 the Free Software Foundation; either version 2, or (at your option)
11 any later version.
13 GNU Emacs is distributed in the hope that it will be useful,
14 but WITHOUT ANY WARRANTY; without even the implied warranty of
15 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
16 GNU General Public License for more details.
18 You should have received a copy of the GNU General Public License
19 along with GNU Emacs; see the file COPYING. If not, write to
20 the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
21 Boston, MA 02110-1301, USA. */
24 #include <config.h>
25 #include <signal.h>
27 /* This file is split into two parts by the following preprocessor
28 conditional. The 'then' clause contains all of the support for
29 asynchronous subprocesses. The 'else' clause contains stub
30 versions of some of the asynchronous subprocess routines that are
31 often called elsewhere in Emacs, so we don't have to #ifdef the
32 sections that call them. */
35 #ifdef subprocesses
37 #include <stdio.h>
38 #include <errno.h>
39 #include <setjmp.h>
40 #include <sys/types.h> /* some typedefs are used in sys/file.h */
41 #include <sys/file.h>
42 #include <sys/stat.h>
43 #ifdef HAVE_INTTYPES_H
44 #include <inttypes.h>
45 #endif
46 #ifdef HAVE_UNISTD_H
47 #include <unistd.h>
48 #endif
50 #if defined(WINDOWSNT) || defined(UNIX98_PTYS)
51 #include <stdlib.h>
52 #include <fcntl.h>
53 #endif /* not WINDOWSNT */
55 #ifdef HAVE_SOCKETS /* TCP connection support, if kernel can do it */
56 #include <sys/socket.h>
57 #include <netdb.h>
58 #include <netinet/in.h>
59 #include <arpa/inet.h>
60 #ifdef NEED_NET_ERRNO_H
61 #include <net/errno.h>
62 #endif /* NEED_NET_ERRNO_H */
64 /* Are local (unix) sockets supported? */
65 #if defined (HAVE_SYS_UN_H) && !defined (NO_SOCKETS_IN_FILE_SYSTEM)
66 #if !defined (AF_LOCAL) && defined (AF_UNIX)
67 #define AF_LOCAL AF_UNIX
68 #endif
69 #ifdef AF_LOCAL
70 #define HAVE_LOCAL_SOCKETS
71 #include <sys/un.h>
72 #endif
73 #endif
74 #endif /* HAVE_SOCKETS */
76 /* TERM is a poor-man's SLIP, used on GNU/Linux. */
77 #ifdef TERM
78 #include <client.h>
79 #endif
81 /* On some systems, e.g. DGUX, inet_addr returns a 'struct in_addr'. */
82 #ifdef HAVE_BROKEN_INET_ADDR
83 #define IN_ADDR struct in_addr
84 #define NUMERIC_ADDR_ERROR (numeric_addr.s_addr == -1)
85 #else
86 #define IN_ADDR unsigned long
87 #define NUMERIC_ADDR_ERROR (numeric_addr == -1)
88 #endif
90 #if defined(BSD_SYSTEM) || defined(STRIDE)
91 #include <sys/ioctl.h>
92 #if !defined (O_NDELAY) && defined (HAVE_PTYS) && !defined(USG5)
93 #include <fcntl.h>
94 #endif /* HAVE_PTYS and no O_NDELAY */
95 #endif /* BSD_SYSTEM || STRIDE */
97 #ifdef BROKEN_O_NONBLOCK
98 #undef O_NONBLOCK
99 #endif /* BROKEN_O_NONBLOCK */
101 #ifdef NEED_BSDTTY
102 #include <bsdtty.h>
103 #endif
105 /* Can we use SIOCGIFCONF and/or SIOCGIFADDR */
106 #ifdef HAVE_SOCKETS
107 #if defined(HAVE_SYS_IOCTL_H) && defined(HAVE_NET_IF_H)
108 /* sys/ioctl.h may have been included already */
109 #ifndef SIOCGIFADDR
110 #include <sys/ioctl.h>
111 #endif
112 #include <net/if.h>
113 #endif
114 #endif
116 #ifdef IRIS
117 #include <sys/sysmacros.h> /* for "minor" */
118 #endif /* not IRIS */
120 #ifdef HAVE_SYS_WAIT
121 #include <sys/wait.h>
122 #endif
124 /* Disable IPv6 support for w32 until someone figures out how to do it
125 properly. */
126 #ifdef WINDOWSNT
127 # ifdef AF_INET6
128 # undef AF_INET6
129 # endif
130 #endif
132 #include "lisp.h"
133 #include "systime.h"
134 #include "systty.h"
136 #include "window.h"
137 #include "buffer.h"
138 #include "charset.h"
139 #include "coding.h"
140 #include "process.h"
141 #include "termhooks.h"
142 #include "termopts.h"
143 #include "commands.h"
144 #include "keyboard.h"
145 #include "frame.h"
146 #include "blockinput.h"
147 #include "dispextern.h"
148 #include "composite.h"
149 #include "atimer.h"
151 Lisp_Object Qprocessp;
152 Lisp_Object Qrun, Qstop, Qsignal;
153 Lisp_Object Qopen, Qclosed, Qconnect, Qfailed, Qlisten;
154 Lisp_Object Qlocal, Qipv4, Qdatagram;
155 #ifdef AF_INET6
156 Lisp_Object Qipv6;
157 #endif
158 Lisp_Object QCname, QCbuffer, QChost, QCservice, QCtype;
159 Lisp_Object QClocal, QCremote, QCcoding;
160 Lisp_Object QCserver, QCnowait, QCnoquery, QCstop;
161 Lisp_Object QCsentinel, QClog, QCoptions, QCplist;
162 Lisp_Object QCfilter_multibyte;
163 Lisp_Object Qlast_nonmenu_event;
164 /* QCfamily is declared and initialized in xfaces.c,
165 QCfilter in keyboard.c. */
166 extern Lisp_Object QCfamily, QCfilter;
168 /* Qexit is declared and initialized in eval.c. */
170 /* QCfamily is defined in xfaces.c. */
171 extern Lisp_Object QCfamily;
172 /* QCfilter is defined in keyboard.c. */
173 extern Lisp_Object QCfilter;
175 /* a process object is a network connection when its childp field is neither
176 Qt nor Qnil but is instead a property list (KEY VAL ...). */
178 #ifdef HAVE_SOCKETS
179 #define NETCONN_P(p) (GC_CONSP (XPROCESS (p)->childp))
180 #define NETCONN1_P(p) (GC_CONSP ((p)->childp))
181 #else
182 #define NETCONN_P(p) 0
183 #define NETCONN1_P(p) 0
184 #endif /* HAVE_SOCKETS */
186 /* Define first descriptor number available for subprocesses. */
187 #ifdef VMS
188 #define FIRST_PROC_DESC 1
189 #else /* Not VMS */
190 #define FIRST_PROC_DESC 3
191 #endif
193 /* Define SIGCHLD as an alias for SIGCLD. There are many conditionals
194 testing SIGCHLD. */
196 #if !defined (SIGCHLD) && defined (SIGCLD)
197 #define SIGCHLD SIGCLD
198 #endif /* SIGCLD */
200 #include "syssignal.h"
202 #include "syswait.h"
204 extern char *get_operating_system_release ();
206 #ifndef USE_CRT_DLL
207 extern int errno;
208 #endif
209 #ifdef VMS
210 extern char *sys_errlist[];
211 #endif
213 #ifndef HAVE_H_ERRNO
214 extern int h_errno;
215 #endif
217 /* t means use pty, nil means use a pipe,
218 maybe other values to come. */
219 static Lisp_Object Vprocess_connection_type;
221 #ifdef SKTPAIR
222 #ifndef HAVE_SOCKETS
223 #include <sys/socket.h>
224 #endif
225 #endif /* SKTPAIR */
227 /* These next two vars are non-static since sysdep.c uses them in the
228 emulation of `select'. */
229 /* Number of events of change of status of a process. */
230 int process_tick;
231 /* Number of events for which the user or sentinel has been notified. */
232 int update_tick;
234 /* Define NON_BLOCKING_CONNECT if we can support non-blocking connects. */
236 #ifdef BROKEN_NON_BLOCKING_CONNECT
237 #undef NON_BLOCKING_CONNECT
238 #else
239 #ifndef NON_BLOCKING_CONNECT
240 #ifdef HAVE_SOCKETS
241 #ifdef HAVE_SELECT
242 #if defined (HAVE_GETPEERNAME) || defined (GNU_LINUX)
243 #if defined (O_NONBLOCK) || defined (O_NDELAY)
244 #if defined (EWOULDBLOCK) || defined (EINPROGRESS)
245 #define NON_BLOCKING_CONNECT
246 #endif /* EWOULDBLOCK || EINPROGRESS */
247 #endif /* O_NONBLOCK || O_NDELAY */
248 #endif /* HAVE_GETPEERNAME || GNU_LINUX */
249 #endif /* HAVE_SELECT */
250 #endif /* HAVE_SOCKETS */
251 #endif /* NON_BLOCKING_CONNECT */
252 #endif /* BROKEN_NON_BLOCKING_CONNECT */
254 /* Define DATAGRAM_SOCKETS if datagrams can be used safely on
255 this system. We need to read full packets, so we need a
256 "non-destructive" select. So we require either native select,
257 or emulation of select using FIONREAD. */
259 #ifdef BROKEN_DATAGRAM_SOCKETS
260 #undef DATAGRAM_SOCKETS
261 #else
262 #ifndef DATAGRAM_SOCKETS
263 #ifdef HAVE_SOCKETS
264 #if defined (HAVE_SELECT) || defined (FIONREAD)
265 #if defined (HAVE_SENDTO) && defined (HAVE_RECVFROM) && defined (EMSGSIZE)
266 #define DATAGRAM_SOCKETS
267 #endif /* HAVE_SENDTO && HAVE_RECVFROM && EMSGSIZE */
268 #endif /* HAVE_SELECT || FIONREAD */
269 #endif /* HAVE_SOCKETS */
270 #endif /* DATAGRAM_SOCKETS */
271 #endif /* BROKEN_DATAGRAM_SOCKETS */
273 #ifdef TERM
274 #undef NON_BLOCKING_CONNECT
275 #undef DATAGRAM_SOCKETS
276 #endif
278 #if !defined (ADAPTIVE_READ_BUFFERING) && !defined (NO_ADAPTIVE_READ_BUFFERING)
279 #ifdef EMACS_HAS_USECS
280 #define ADAPTIVE_READ_BUFFERING
281 #endif
282 #endif
284 #ifdef ADAPTIVE_READ_BUFFERING
285 #define READ_OUTPUT_DELAY_INCREMENT 10000
286 #define READ_OUTPUT_DELAY_MAX (READ_OUTPUT_DELAY_INCREMENT * 5)
287 #define READ_OUTPUT_DELAY_MAX_MAX (READ_OUTPUT_DELAY_INCREMENT * 7)
289 /* Number of processes which have a non-zero read_output_delay,
290 and therefore might be delayed for adaptive read buffering. */
292 static int process_output_delay_count;
294 /* Non-zero if any process has non-nil read_output_skip. */
296 static int process_output_skip;
298 /* Non-nil means to delay reading process output to improve buffering.
299 A value of t means that delay is reset after each send, any other
300 non-nil value does not reset the delay. A value of nil disables
301 adaptive read buffering completely. */
302 static Lisp_Object Vprocess_adaptive_read_buffering;
303 #else
304 #define process_output_delay_count 0
305 #endif
308 #include "sysselect.h"
310 static int keyboard_bit_set P_ ((SELECT_TYPE *));
311 static void deactivate_process P_ ((Lisp_Object));
312 static void status_notify P_ ((struct Lisp_Process *));
313 static int read_process_output P_ ((Lisp_Object, int));
315 /* If we support a window system, turn on the code to poll periodically
316 to detect C-g. It isn't actually used when doing interrupt input. */
317 #ifdef HAVE_WINDOW_SYSTEM
318 #define POLL_FOR_INPUT
319 #endif
321 /* Mask of bits indicating the descriptors that we wait for input on. */
323 static SELECT_TYPE input_wait_mask;
325 /* Mask that excludes keyboard input descriptor (s). */
327 static SELECT_TYPE non_keyboard_wait_mask;
329 /* Mask that excludes process input descriptor (s). */
331 static SELECT_TYPE non_process_wait_mask;
333 #ifdef NON_BLOCKING_CONNECT
334 /* Mask of bits indicating the descriptors that we wait for connect to
335 complete on. Once they complete, they are removed from this mask
336 and added to the input_wait_mask and non_keyboard_wait_mask. */
338 static SELECT_TYPE connect_wait_mask;
340 /* Number of bits set in connect_wait_mask. */
341 static int num_pending_connects;
343 #define IF_NON_BLOCKING_CONNECT(s) s
344 #else
345 #define IF_NON_BLOCKING_CONNECT(s)
346 #endif
348 /* The largest descriptor currently in use for a process object. */
349 static int max_process_desc;
351 /* The largest descriptor currently in use for keyboard input. */
352 static int max_keyboard_desc;
354 /* Nonzero means delete a process right away if it exits. */
355 static int delete_exited_processes;
357 /* Indexed by descriptor, gives the process (if any) for that descriptor */
358 Lisp_Object chan_process[MAXDESC];
360 /* Alist of elements (NAME . PROCESS) */
361 Lisp_Object Vprocess_alist;
363 /* Buffered-ahead input char from process, indexed by channel.
364 -1 means empty (no char is buffered).
365 Used on sys V where the only way to tell if there is any
366 output from the process is to read at least one char.
367 Always -1 on systems that support FIONREAD. */
369 /* Don't make static; need to access externally. */
370 int proc_buffered_char[MAXDESC];
372 /* Table of `struct coding-system' for each process. */
373 static struct coding_system *proc_decode_coding_system[MAXDESC];
374 static struct coding_system *proc_encode_coding_system[MAXDESC];
376 #ifdef DATAGRAM_SOCKETS
377 /* Table of `partner address' for datagram sockets. */
378 struct sockaddr_and_len {
379 struct sockaddr *sa;
380 int len;
381 } datagram_address[MAXDESC];
382 #define DATAGRAM_CHAN_P(chan) (datagram_address[chan].sa != 0)
383 #define DATAGRAM_CONN_P(proc) (PROCESSP (proc) && datagram_address[XINT (XPROCESS (proc)->infd)].sa != 0)
384 #else
385 #define DATAGRAM_CHAN_P(chan) (0)
386 #define DATAGRAM_CONN_P(proc) (0)
387 #endif
389 static Lisp_Object get_process ();
390 static void exec_sentinel ();
392 extern EMACS_TIME timer_check ();
393 extern int timers_run;
395 /* Maximum number of bytes to send to a pty without an eof. */
396 static int pty_max_bytes;
398 #ifdef HAVE_PTYS
399 #ifdef HAVE_PTY_H
400 #include <pty.h>
401 #endif
402 /* The file name of the pty opened by allocate_pty. */
404 static char pty_name[24];
405 #endif
407 /* Compute the Lisp form of the process status, p->status, from
408 the numeric status that was returned by `wait'. */
410 static Lisp_Object status_convert ();
412 static void
413 update_status (p)
414 struct Lisp_Process *p;
416 union { int i; WAITTYPE wt; } u;
417 eassert (p->raw_status_new);
418 u.i = p->raw_status;
419 p->status = status_convert (u.wt);
420 p->raw_status_new = 0;
423 /* Convert a process status word in Unix format to
424 the list that we use internally. */
426 static Lisp_Object
427 status_convert (w)
428 WAITTYPE w;
430 if (WIFSTOPPED (w))
431 return Fcons (Qstop, Fcons (make_number (WSTOPSIG (w)), Qnil));
432 else if (WIFEXITED (w))
433 return Fcons (Qexit, Fcons (make_number (WRETCODE (w)),
434 WCOREDUMP (w) ? Qt : Qnil));
435 else if (WIFSIGNALED (w))
436 return Fcons (Qsignal, Fcons (make_number (WTERMSIG (w)),
437 WCOREDUMP (w) ? Qt : Qnil));
438 else
439 return Qrun;
442 /* Given a status-list, extract the three pieces of information
443 and store them individually through the three pointers. */
445 static void
446 decode_status (l, symbol, code, coredump)
447 Lisp_Object l;
448 Lisp_Object *symbol;
449 int *code;
450 int *coredump;
452 Lisp_Object tem;
454 if (SYMBOLP (l))
456 *symbol = l;
457 *code = 0;
458 *coredump = 0;
460 else
462 *symbol = XCAR (l);
463 tem = XCDR (l);
464 *code = XFASTINT (XCAR (tem));
465 tem = XCDR (tem);
466 *coredump = !NILP (tem);
470 /* Return a string describing a process status list. */
472 static Lisp_Object
473 status_message (p)
474 struct Lisp_Process *p;
476 Lisp_Object status = p->status;
477 Lisp_Object symbol;
478 int code, coredump;
479 Lisp_Object string, string2;
481 decode_status (status, &symbol, &code, &coredump);
483 if (EQ (symbol, Qsignal) || EQ (symbol, Qstop))
485 char *signame;
486 synchronize_system_messages_locale ();
487 signame = strsignal (code);
488 if (signame == 0)
489 signame = "unknown";
490 string = build_string (signame);
491 string2 = build_string (coredump ? " (core dumped)\n" : "\n");
492 SSET (string, 0, DOWNCASE (SREF (string, 0)));
493 return concat2 (string, string2);
495 else if (EQ (symbol, Qexit))
497 if (NETCONN1_P (p))
498 return build_string (code == 0 ? "deleted\n" : "connection broken by remote peer\n");
499 if (code == 0)
500 return build_string ("finished\n");
501 string = Fnumber_to_string (make_number (code));
502 string2 = build_string (coredump ? " (core dumped)\n" : "\n");
503 return concat3 (build_string ("exited abnormally with code "),
504 string, string2);
506 else if (EQ (symbol, Qfailed))
508 string = Fnumber_to_string (make_number (code));
509 string2 = build_string ("\n");
510 return concat3 (build_string ("failed with code "),
511 string, string2);
513 else
514 return Fcopy_sequence (Fsymbol_name (symbol));
517 #ifdef HAVE_PTYS
519 /* Open an available pty, returning a file descriptor.
520 Return -1 on failure.
521 The file name of the terminal corresponding to the pty
522 is left in the variable pty_name. */
524 static int
525 allocate_pty ()
527 register int c, i;
528 int fd;
530 #ifdef PTY_ITERATION
531 PTY_ITERATION
532 #else
533 for (c = FIRST_PTY_LETTER; c <= 'z'; c++)
534 for (i = 0; i < 16; i++)
535 #endif
537 struct stat stb; /* Used in some PTY_OPEN. */
538 #ifdef PTY_NAME_SPRINTF
539 PTY_NAME_SPRINTF
540 #else
541 sprintf (pty_name, "/dev/pty%c%x", c, i);
542 #endif /* no PTY_NAME_SPRINTF */
544 #ifdef PTY_OPEN
545 PTY_OPEN;
546 #else /* no PTY_OPEN */
548 # ifdef IRIS
549 /* Unusual IRIS code */
550 *ptyv = emacs_open ("/dev/ptc", O_RDWR | O_NDELAY, 0);
551 if (fd < 0)
552 return -1;
553 if (fstat (fd, &stb) < 0)
554 return -1;
555 # else /* not IRIS */
556 { /* Some systems name their pseudoterminals so that there are gaps in
557 the usual sequence - for example, on HP9000/S700 systems, there
558 are no pseudoterminals with names ending in 'f'. So we wait for
559 three failures in a row before deciding that we've reached the
560 end of the ptys. */
561 int failed_count = 0;
563 if (stat (pty_name, &stb) < 0)
565 failed_count++;
566 if (failed_count >= 3)
567 return -1;
569 else
570 failed_count = 0;
572 # ifdef O_NONBLOCK
573 fd = emacs_open (pty_name, O_RDWR | O_NONBLOCK, 0);
574 # else
575 fd = emacs_open (pty_name, O_RDWR | O_NDELAY, 0);
576 # endif
577 # endif /* not IRIS */
579 #endif /* no PTY_OPEN */
581 if (fd >= 0)
583 /* check to make certain that both sides are available
584 this avoids a nasty yet stupid bug in rlogins */
585 #ifdef PTY_TTY_NAME_SPRINTF
586 PTY_TTY_NAME_SPRINTF
587 #else
588 sprintf (pty_name, "/dev/tty%c%x", c, i);
589 #endif /* no PTY_TTY_NAME_SPRINTF */
590 #ifndef UNIPLUS
591 if (access (pty_name, 6) != 0)
593 emacs_close (fd);
594 # if !defined(IRIS) && !defined(__sgi)
595 continue;
596 # else
597 return -1;
598 # endif /* IRIS */
600 #endif /* not UNIPLUS */
601 setup_pty (fd);
602 return fd;
605 return -1;
607 #endif /* HAVE_PTYS */
609 static Lisp_Object
610 make_process (name)
611 Lisp_Object name;
613 register Lisp_Object val, tem, name1;
614 register struct Lisp_Process *p;
615 char suffix[10];
616 register int i;
618 p = allocate_process ();
620 XSETINT (p->infd, -1);
621 XSETINT (p->outfd, -1);
622 XSETFASTINT (p->tick, 0);
623 XSETFASTINT (p->update_tick, 0);
624 p->pid = 0;
625 p->raw_status_new = 0;
626 p->status = Qrun;
627 p->mark = Fmake_marker ();
629 #ifdef ADAPTIVE_READ_BUFFERING
630 p->adaptive_read_buffering = Qnil;
631 XSETFASTINT (p->read_output_delay, 0);
632 p->read_output_skip = Qnil;
633 #endif
635 /* If name is already in use, modify it until it is unused. */
637 name1 = name;
638 for (i = 1; ; i++)
640 tem = Fget_process (name1);
641 if (NILP (tem)) break;
642 sprintf (suffix, "<%d>", i);
643 name1 = concat2 (name, build_string (suffix));
645 name = name1;
646 p->name = name;
647 XSETPROCESS (val, p);
648 Vprocess_alist = Fcons (Fcons (name, val), Vprocess_alist);
649 return val;
652 static void
653 remove_process (proc)
654 register Lisp_Object proc;
656 register Lisp_Object pair;
658 pair = Frassq (proc, Vprocess_alist);
659 Vprocess_alist = Fdelq (pair, Vprocess_alist);
661 deactivate_process (proc);
664 /* Setup coding systems of PROCESS. */
666 void
667 setup_process_coding_systems (process)
668 Lisp_Object process;
670 struct Lisp_Process *p = XPROCESS (process);
671 int inch = XINT (p->infd);
672 int outch = XINT (p->outfd);
674 if (inch < 0 || outch < 0)
675 return;
677 if (!proc_decode_coding_system[inch])
678 proc_decode_coding_system[inch]
679 = (struct coding_system *) xmalloc (sizeof (struct coding_system));
680 setup_coding_system (p->decode_coding_system,
681 proc_decode_coding_system[inch]);
682 if (! NILP (p->filter))
684 if (NILP (p->filter_multibyte))
685 setup_raw_text_coding_system (proc_decode_coding_system[inch]);
687 else if (BUFFERP (p->buffer))
689 if (NILP (XBUFFER (p->buffer)->enable_multibyte_characters))
690 setup_raw_text_coding_system (proc_decode_coding_system[inch]);
693 if (!proc_encode_coding_system[outch])
694 proc_encode_coding_system[outch]
695 = (struct coding_system *) xmalloc (sizeof (struct coding_system));
696 setup_coding_system (p->encode_coding_system,
697 proc_encode_coding_system[outch]);
700 DEFUN ("processp", Fprocessp, Sprocessp, 1, 1, 0,
701 doc: /* Return t if OBJECT is a process. */)
702 (object)
703 Lisp_Object object;
705 return PROCESSP (object) ? Qt : Qnil;
708 DEFUN ("get-process", Fget_process, Sget_process, 1, 1, 0,
709 doc: /* Return the process named NAME, or nil if there is none. */)
710 (name)
711 register Lisp_Object name;
713 if (PROCESSP (name))
714 return name;
715 CHECK_STRING (name);
716 return Fcdr (Fassoc (name, Vprocess_alist));
719 DEFUN ("get-buffer-process", Fget_buffer_process, Sget_buffer_process, 1, 1, 0,
720 doc: /* Return the (or a) process associated with BUFFER.
721 BUFFER may be a buffer or the name of one. */)
722 (buffer)
723 register Lisp_Object buffer;
725 register Lisp_Object buf, tail, proc;
727 if (NILP (buffer)) return Qnil;
728 buf = Fget_buffer (buffer);
729 if (NILP (buf)) return Qnil;
731 for (tail = Vprocess_alist; !NILP (tail); tail = Fcdr (tail))
733 proc = Fcdr (Fcar (tail));
734 if (PROCESSP (proc) && EQ (XPROCESS (proc)->buffer, buf))
735 return proc;
737 return Qnil;
740 /* This is how commands for the user decode process arguments. It
741 accepts a process, a process name, a buffer, a buffer name, or nil.
742 Buffers denote the first process in the buffer, and nil denotes the
743 current buffer. */
745 static Lisp_Object
746 get_process (name)
747 register Lisp_Object name;
749 register Lisp_Object proc, obj;
750 if (STRINGP (name))
752 obj = Fget_process (name);
753 if (NILP (obj))
754 obj = Fget_buffer (name);
755 if (NILP (obj))
756 error ("Process %s does not exist", SDATA (name));
758 else if (NILP (name))
759 obj = Fcurrent_buffer ();
760 else
761 obj = name;
763 /* Now obj should be either a buffer object or a process object.
765 if (BUFFERP (obj))
767 proc = Fget_buffer_process (obj);
768 if (NILP (proc))
769 error ("Buffer %s has no process", SDATA (XBUFFER (obj)->name));
771 else
773 CHECK_PROCESS (obj);
774 proc = obj;
776 return proc;
779 DEFUN ("delete-process", Fdelete_process, Sdelete_process, 1, 1, 0,
780 doc: /* Delete PROCESS: kill it and forget about it immediately.
781 PROCESS may be a process, a buffer, the name of a process or buffer, or
782 nil, indicating the current buffer's process. */)
783 (process)
784 register Lisp_Object process;
786 register struct Lisp_Process *p;
788 process = get_process (process);
789 p = XPROCESS (process);
791 p->raw_status_new = 0;
792 if (NETCONN1_P (p))
794 p->status = Fcons (Qexit, Fcons (make_number (0), Qnil));
795 XSETINT (p->tick, ++process_tick);
796 status_notify (p);
798 else if (XINT (p->infd) >= 0)
800 Fkill_process (process, Qnil);
801 /* Do this now, since remove_process will make sigchld_handler do nothing. */
802 p->status
803 = Fcons (Qsignal, Fcons (make_number (SIGKILL), Qnil));
804 XSETINT (p->tick, ++process_tick);
805 status_notify (p);
807 remove_process (process);
808 return Qnil;
811 DEFUN ("process-status", Fprocess_status, Sprocess_status, 1, 1, 0,
812 doc: /* Return the status of PROCESS.
813 The returned value is one of the following symbols:
814 run -- for a process that is running.
815 stop -- for a process stopped but continuable.
816 exit -- for a process that has exited.
817 signal -- for a process that has got a fatal signal.
818 open -- for a network stream connection that is open.
819 listen -- for a network stream server that is listening.
820 closed -- for a network stream connection that is closed.
821 connect -- when waiting for a non-blocking connection to complete.
822 failed -- when a non-blocking connection has failed.
823 nil -- if arg is a process name and no such process exists.
824 PROCESS may be a process, a buffer, the name of a process, or
825 nil, indicating the current buffer's process. */)
826 (process)
827 register Lisp_Object process;
829 register struct Lisp_Process *p;
830 register Lisp_Object status;
832 if (STRINGP (process))
833 process = Fget_process (process);
834 else
835 process = get_process (process);
837 if (NILP (process))
838 return process;
840 p = XPROCESS (process);
841 if (p->raw_status_new)
842 update_status (p);
843 status = p->status;
844 if (CONSP (status))
845 status = XCAR (status);
846 if (NETCONN1_P (p))
848 if (EQ (status, Qexit))
849 status = Qclosed;
850 else if (EQ (p->command, Qt))
851 status = Qstop;
852 else if (EQ (status, Qrun))
853 status = Qopen;
855 return status;
858 DEFUN ("process-exit-status", Fprocess_exit_status, Sprocess_exit_status,
859 1, 1, 0,
860 doc: /* Return the exit status of PROCESS or the signal number that killed it.
861 If PROCESS has not yet exited or died, return 0. */)
862 (process)
863 register Lisp_Object process;
865 CHECK_PROCESS (process);
866 if (XPROCESS (process)->raw_status_new)
867 update_status (XPROCESS (process));
868 if (CONSP (XPROCESS (process)->status))
869 return XCAR (XCDR (XPROCESS (process)->status));
870 return make_number (0);
873 DEFUN ("process-id", Fprocess_id, Sprocess_id, 1, 1, 0,
874 doc: /* Return the process id of PROCESS.
875 This is the pid of the external process which PROCESS uses or talks to.
876 For a network connection, this value is nil. */)
877 (process)
878 register Lisp_Object process;
880 CHECK_PROCESS (process);
881 return (XPROCESS (process)->pid
882 ? make_fixnum_or_float (XPROCESS (process)->pid)
883 : Qnil);
886 DEFUN ("process-name", Fprocess_name, Sprocess_name, 1, 1, 0,
887 doc: /* Return the name of PROCESS, as a string.
888 This is the name of the program invoked in PROCESS,
889 possibly modified to make it unique among process names. */)
890 (process)
891 register Lisp_Object process;
893 CHECK_PROCESS (process);
894 return XPROCESS (process)->name;
897 DEFUN ("process-command", Fprocess_command, Sprocess_command, 1, 1, 0,
898 doc: /* Return the command that was executed to start PROCESS.
899 This is a list of strings, the first string being the program executed
900 and the rest of the strings being the arguments given to it.
901 For a non-child channel, this is nil. */)
902 (process)
903 register Lisp_Object process;
905 CHECK_PROCESS (process);
906 return XPROCESS (process)->command;
909 DEFUN ("process-tty-name", Fprocess_tty_name, Sprocess_tty_name, 1, 1, 0,
910 doc: /* Return the name of the terminal PROCESS uses, or nil if none.
911 This is the terminal that the process itself reads and writes on,
912 not the name of the pty that Emacs uses to talk with that terminal. */)
913 (process)
914 register Lisp_Object process;
916 CHECK_PROCESS (process);
917 return XPROCESS (process)->tty_name;
920 DEFUN ("set-process-buffer", Fset_process_buffer, Sset_process_buffer,
921 2, 2, 0,
922 doc: /* Set buffer associated with PROCESS to BUFFER (a buffer, or nil). */)
923 (process, buffer)
924 register Lisp_Object process, buffer;
926 struct Lisp_Process *p;
928 CHECK_PROCESS (process);
929 if (!NILP (buffer))
930 CHECK_BUFFER (buffer);
931 p = XPROCESS (process);
932 p->buffer = buffer;
933 if (NETCONN1_P (p))
934 p->childp = Fplist_put (p->childp, QCbuffer, buffer);
935 setup_process_coding_systems (process);
936 return buffer;
939 DEFUN ("process-buffer", Fprocess_buffer, Sprocess_buffer,
940 1, 1, 0,
941 doc: /* Return the buffer PROCESS is associated with.
942 Output from PROCESS is inserted in this buffer unless PROCESS has a filter. */)
943 (process)
944 register Lisp_Object process;
946 CHECK_PROCESS (process);
947 return XPROCESS (process)->buffer;
950 DEFUN ("process-mark", Fprocess_mark, Sprocess_mark,
951 1, 1, 0,
952 doc: /* Return the marker for the end of the last output from PROCESS. */)
953 (process)
954 register Lisp_Object process;
956 CHECK_PROCESS (process);
957 return XPROCESS (process)->mark;
960 DEFUN ("set-process-filter", Fset_process_filter, Sset_process_filter,
961 2, 2, 0,
962 doc: /* Give PROCESS the filter function FILTER; nil means no filter.
963 t means stop accepting output from the process.
965 When a process has a filter, its buffer is not used for output.
966 Instead, each time it does output, the entire string of output is
967 passed to the filter.
969 The filter gets two arguments: the process and the string of output.
970 The string argument is normally a multibyte string, except:
971 - if the process' input coding system is no-conversion or raw-text,
972 it is a unibyte string (the non-converted input), or else
973 - if `default-enable-multibyte-characters' is nil, it is a unibyte
974 string (the result of converting the decoded input multibyte
975 string to unibyte with `string-make-unibyte'). */)
976 (process, filter)
977 register Lisp_Object process, filter;
979 struct Lisp_Process *p;
981 CHECK_PROCESS (process);
982 p = XPROCESS (process);
984 /* Don't signal an error if the process' input file descriptor
985 is closed. This could make debugging Lisp more difficult,
986 for example when doing something like
988 (setq process (start-process ...))
989 (debug)
990 (set-process-filter process ...) */
992 if (XINT (p->infd) >= 0)
994 if (EQ (filter, Qt) && !EQ (p->status, Qlisten))
996 FD_CLR (XINT (p->infd), &input_wait_mask);
997 FD_CLR (XINT (p->infd), &non_keyboard_wait_mask);
999 else if (EQ (p->filter, Qt)
1000 && !EQ (p->command, Qt)) /* Network process not stopped. */
1002 FD_SET (XINT (p->infd), &input_wait_mask);
1003 FD_SET (XINT (p->infd), &non_keyboard_wait_mask);
1007 p->filter = filter;
1008 if (NETCONN1_P (p))
1009 p->childp = Fplist_put (p->childp, QCfilter, filter);
1010 setup_process_coding_systems (process);
1011 return filter;
1014 DEFUN ("process-filter", Fprocess_filter, Sprocess_filter,
1015 1, 1, 0,
1016 doc: /* Returns the filter function of PROCESS; nil if none.
1017 See `set-process-filter' for more info on filter functions. */)
1018 (process)
1019 register Lisp_Object process;
1021 CHECK_PROCESS (process);
1022 return XPROCESS (process)->filter;
1025 DEFUN ("set-process-sentinel", Fset_process_sentinel, Sset_process_sentinel,
1026 2, 2, 0,
1027 doc: /* Give PROCESS the sentinel SENTINEL; nil for none.
1028 The sentinel is called as a function when the process changes state.
1029 It gets two arguments: the process, and a string describing the change. */)
1030 (process, sentinel)
1031 register Lisp_Object process, sentinel;
1033 struct Lisp_Process *p;
1035 CHECK_PROCESS (process);
1036 p = XPROCESS (process);
1038 p->sentinel = sentinel;
1039 if (NETCONN1_P (p))
1040 p->childp = Fplist_put (p->childp, QCsentinel, sentinel);
1041 return sentinel;
1044 DEFUN ("process-sentinel", Fprocess_sentinel, Sprocess_sentinel,
1045 1, 1, 0,
1046 doc: /* Return the sentinel of PROCESS; nil if none.
1047 See `set-process-sentinel' for more info on sentinels. */)
1048 (process)
1049 register Lisp_Object process;
1051 CHECK_PROCESS (process);
1052 return XPROCESS (process)->sentinel;
1055 DEFUN ("set-process-window-size", Fset_process_window_size,
1056 Sset_process_window_size, 3, 3, 0,
1057 doc: /* Tell PROCESS that it has logical window size HEIGHT and WIDTH. */)
1058 (process, height, width)
1059 register Lisp_Object process, height, width;
1061 CHECK_PROCESS (process);
1062 CHECK_NATNUM (height);
1063 CHECK_NATNUM (width);
1065 if (XINT (XPROCESS (process)->infd) < 0
1066 || set_window_size (XINT (XPROCESS (process)->infd),
1067 XINT (height), XINT (width)) <= 0)
1068 return Qnil;
1069 else
1070 return Qt;
1073 DEFUN ("set-process-inherit-coding-system-flag",
1074 Fset_process_inherit_coding_system_flag,
1075 Sset_process_inherit_coding_system_flag, 2, 2, 0,
1076 doc: /* Determine whether buffer of PROCESS will inherit coding-system.
1077 If the second argument FLAG is non-nil, then the variable
1078 `buffer-file-coding-system' of the buffer associated with PROCESS
1079 will be bound to the value of the coding system used to decode
1080 the process output.
1082 This is useful when the coding system specified for the process buffer
1083 leaves either the character code conversion or the end-of-line conversion
1084 unspecified, or if the coding system used to decode the process output
1085 is more appropriate for saving the process buffer.
1087 Binding the variable `inherit-process-coding-system' to non-nil before
1088 starting the process is an alternative way of setting the inherit flag
1089 for the process which will run. */)
1090 (process, flag)
1091 register Lisp_Object process, flag;
1093 CHECK_PROCESS (process);
1094 XPROCESS (process)->inherit_coding_system_flag = flag;
1095 return flag;
1098 DEFUN ("process-inherit-coding-system-flag",
1099 Fprocess_inherit_coding_system_flag, Sprocess_inherit_coding_system_flag,
1100 1, 1, 0,
1101 doc: /* Return the value of inherit-coding-system flag for PROCESS.
1102 If this flag is t, `buffer-file-coding-system' of the buffer
1103 associated with PROCESS will inherit the coding system used to decode
1104 the process output. */)
1105 (process)
1106 register Lisp_Object process;
1108 CHECK_PROCESS (process);
1109 return XPROCESS (process)->inherit_coding_system_flag;
1112 DEFUN ("set-process-query-on-exit-flag",
1113 Fset_process_query_on_exit_flag, Sset_process_query_on_exit_flag,
1114 2, 2, 0,
1115 doc: /* Specify if query is needed for PROCESS when Emacs is exited.
1116 If the second argument FLAG is non-nil, Emacs will query the user before
1117 exiting if PROCESS is running. */)
1118 (process, flag)
1119 register Lisp_Object process, flag;
1121 CHECK_PROCESS (process);
1122 XPROCESS (process)->kill_without_query = Fnull (flag);
1123 return flag;
1126 DEFUN ("process-query-on-exit-flag",
1127 Fprocess_query_on_exit_flag, Sprocess_query_on_exit_flag,
1128 1, 1, 0,
1129 doc: /* Return the current value of query-on-exit flag for PROCESS. */)
1130 (process)
1131 register Lisp_Object process;
1133 CHECK_PROCESS (process);
1134 return Fnull (XPROCESS (process)->kill_without_query);
1137 #ifdef DATAGRAM_SOCKETS
1138 Lisp_Object Fprocess_datagram_address ();
1139 #endif
1141 DEFUN ("process-contact", Fprocess_contact, Sprocess_contact,
1142 1, 2, 0,
1143 doc: /* Return the contact info of PROCESS; t for a real child.
1144 For a net connection, the value depends on the optional KEY arg.
1145 If KEY is nil, value is a cons cell of the form (HOST SERVICE),
1146 if KEY is t, the complete contact information for the connection is
1147 returned, else the specific value for the keyword KEY is returned.
1148 See `make-network-process' for a list of keywords. */)
1149 (process, key)
1150 register Lisp_Object process, key;
1152 Lisp_Object contact;
1154 CHECK_PROCESS (process);
1155 contact = XPROCESS (process)->childp;
1157 #ifdef DATAGRAM_SOCKETS
1158 if (DATAGRAM_CONN_P (process)
1159 && (EQ (key, Qt) || EQ (key, QCremote)))
1160 contact = Fplist_put (contact, QCremote,
1161 Fprocess_datagram_address (process));
1162 #endif
1164 if (!NETCONN_P (process) || EQ (key, Qt))
1165 return contact;
1166 if (NILP (key))
1167 return Fcons (Fplist_get (contact, QChost),
1168 Fcons (Fplist_get (contact, QCservice), Qnil));
1169 return Fplist_get (contact, key);
1172 DEFUN ("process-plist", Fprocess_plist, Sprocess_plist,
1173 1, 1, 0,
1174 doc: /* Return the plist of PROCESS. */)
1175 (process)
1176 register Lisp_Object process;
1178 CHECK_PROCESS (process);
1179 return XPROCESS (process)->plist;
1182 DEFUN ("set-process-plist", Fset_process_plist, Sset_process_plist,
1183 2, 2, 0,
1184 doc: /* Replace the plist of PROCESS with PLIST. Returns PLIST. */)
1185 (process, plist)
1186 register Lisp_Object process, plist;
1188 CHECK_PROCESS (process);
1189 CHECK_LIST (plist);
1191 XPROCESS (process)->plist = plist;
1192 return plist;
1195 #if 0 /* Turned off because we don't currently record this info
1196 in the process. Perhaps add it. */
1197 DEFUN ("process-connection", Fprocess_connection, Sprocess_connection, 1, 1, 0,
1198 doc: /* Return the connection type of PROCESS.
1199 The value is nil for a pipe, t or `pty' for a pty, or `stream' for
1200 a socket connection. */)
1201 (process)
1202 Lisp_Object process;
1204 return XPROCESS (process)->type;
1206 #endif
1208 #ifdef HAVE_SOCKETS
1209 DEFUN ("format-network-address", Fformat_network_address, Sformat_network_address,
1210 1, 2, 0,
1211 doc: /* Convert network ADDRESS from internal format to a string.
1212 A 4 or 5 element vector represents an IPv4 address (with port number).
1213 An 8 or 9 element vector represents an IPv6 address (with port number).
1214 If optional second argument OMIT-PORT is non-nil, don't include a port
1215 number in the string, even when present in ADDRESS.
1216 Returns nil if format of ADDRESS is invalid. */)
1217 (address, omit_port)
1218 Lisp_Object address, omit_port;
1220 if (NILP (address))
1221 return Qnil;
1223 if (STRINGP (address)) /* AF_LOCAL */
1224 return address;
1226 if (VECTORP (address)) /* AF_INET or AF_INET6 */
1228 register struct Lisp_Vector *p = XVECTOR (address);
1229 Lisp_Object args[6];
1230 int nargs, i;
1232 if (p->size == 4 || (p->size == 5 && !NILP (omit_port)))
1234 args[0] = build_string ("%d.%d.%d.%d");
1235 nargs = 4;
1237 else if (p->size == 5)
1239 args[0] = build_string ("%d.%d.%d.%d:%d");
1240 nargs = 5;
1242 else if (p->size == 8 || (p->size == 9 && !NILP (omit_port)))
1244 args[0] = build_string ("%x:%x:%x:%x:%x:%x:%x:%x");
1245 nargs = 8;
1247 else if (p->size == 9)
1249 args[0] = build_string ("[%x:%x:%x:%x:%x:%x:%x:%x]:%d");
1250 nargs = 9;
1252 else
1253 return Qnil;
1255 for (i = 0; i < nargs; i++)
1256 args[i+1] = p->contents[i];
1257 return Fformat (nargs+1, args);
1260 if (CONSP (address))
1262 Lisp_Object args[2];
1263 args[0] = build_string ("<Family %d>");
1264 args[1] = Fcar (address);
1265 return Fformat (2, args);
1269 return Qnil;
1271 #endif
1273 static Lisp_Object
1274 list_processes_1 (query_only)
1275 Lisp_Object query_only;
1277 register Lisp_Object tail, tem;
1278 Lisp_Object proc, minspace, tem1;
1279 register struct Lisp_Process *p;
1280 char tembuf[300];
1281 int w_proc, w_buffer, w_tty;
1282 Lisp_Object i_status, i_buffer, i_tty, i_command;
1284 w_proc = 4; /* Proc */
1285 w_buffer = 6; /* Buffer */
1286 w_tty = 0; /* Omit if no ttys */
1288 for (tail = Vprocess_alist; !NILP (tail); tail = Fcdr (tail))
1290 int i;
1292 proc = Fcdr (Fcar (tail));
1293 p = XPROCESS (proc);
1294 if (NILP (p->childp))
1295 continue;
1296 if (!NILP (query_only) && !NILP (p->kill_without_query))
1297 continue;
1298 if (STRINGP (p->name)
1299 && ( i = SCHARS (p->name), (i > w_proc)))
1300 w_proc = i;
1301 if (!NILP (p->buffer))
1303 if (NILP (XBUFFER (p->buffer)->name) && w_buffer < 8)
1304 w_buffer = 8; /* (Killed) */
1305 else if ((i = SCHARS (XBUFFER (p->buffer)->name), (i > w_buffer)))
1306 w_buffer = i;
1308 if (STRINGP (p->tty_name)
1309 && (i = SCHARS (p->tty_name), (i > w_tty)))
1310 w_tty = i;
1313 XSETFASTINT (i_status, w_proc + 1);
1314 XSETFASTINT (i_buffer, XFASTINT (i_status) + 9);
1315 if (w_tty)
1317 XSETFASTINT (i_tty, XFASTINT (i_buffer) + w_buffer + 1);
1318 XSETFASTINT (i_command, XFASTINT (i_buffer) + w_tty + 1);
1319 } else {
1320 i_tty = Qnil;
1321 XSETFASTINT (i_command, XFASTINT (i_buffer) + w_buffer + 1);
1324 XSETFASTINT (minspace, 1);
1326 set_buffer_internal (XBUFFER (Vstandard_output));
1327 current_buffer->undo_list = Qt;
1329 current_buffer->truncate_lines = Qt;
1331 write_string ("Proc", -1);
1332 Findent_to (i_status, minspace); write_string ("Status", -1);
1333 Findent_to (i_buffer, minspace); write_string ("Buffer", -1);
1334 if (!NILP (i_tty))
1336 Findent_to (i_tty, minspace); write_string ("Tty", -1);
1338 Findent_to (i_command, minspace); write_string ("Command", -1);
1339 write_string ("\n", -1);
1341 write_string ("----", -1);
1342 Findent_to (i_status, minspace); write_string ("------", -1);
1343 Findent_to (i_buffer, minspace); write_string ("------", -1);
1344 if (!NILP (i_tty))
1346 Findent_to (i_tty, minspace); write_string ("---", -1);
1348 Findent_to (i_command, minspace); write_string ("-------", -1);
1349 write_string ("\n", -1);
1351 for (tail = Vprocess_alist; !NILP (tail); tail = Fcdr (tail))
1353 Lisp_Object symbol;
1355 proc = Fcdr (Fcar (tail));
1356 p = XPROCESS (proc);
1357 if (NILP (p->childp))
1358 continue;
1359 if (!NILP (query_only) && !NILP (p->kill_without_query))
1360 continue;
1362 Finsert (1, &p->name);
1363 Findent_to (i_status, minspace);
1365 if (p->raw_status_new)
1366 update_status (p);
1367 symbol = p->status;
1368 if (CONSP (p->status))
1369 symbol = XCAR (p->status);
1372 if (EQ (symbol, Qsignal))
1374 Lisp_Object tem;
1375 tem = Fcar (Fcdr (p->status));
1376 #ifdef VMS
1377 if (XINT (tem) < NSIG)
1378 write_string (sys_errlist [XINT (tem)], -1);
1379 else
1380 #endif
1381 Fprinc (symbol, Qnil);
1383 else if (NETCONN1_P (p))
1385 if (EQ (symbol, Qexit))
1386 write_string ("closed", -1);
1387 else if (EQ (p->command, Qt))
1388 write_string ("stopped", -1);
1389 else if (EQ (symbol, Qrun))
1390 write_string ("open", -1);
1391 else
1392 Fprinc (symbol, Qnil);
1394 else
1395 Fprinc (symbol, Qnil);
1397 if (EQ (symbol, Qexit))
1399 Lisp_Object tem;
1400 tem = Fcar (Fcdr (p->status));
1401 if (XFASTINT (tem))
1403 sprintf (tembuf, " %d", (int) XFASTINT (tem));
1404 write_string (tembuf, -1);
1408 if (EQ (symbol, Qsignal) || EQ (symbol, Qexit))
1409 remove_process (proc);
1411 Findent_to (i_buffer, minspace);
1412 if (NILP (p->buffer))
1413 insert_string ("(none)");
1414 else if (NILP (XBUFFER (p->buffer)->name))
1415 insert_string ("(Killed)");
1416 else
1417 Finsert (1, &XBUFFER (p->buffer)->name);
1419 if (!NILP (i_tty))
1421 Findent_to (i_tty, minspace);
1422 if (STRINGP (p->tty_name))
1423 Finsert (1, &p->tty_name);
1426 Findent_to (i_command, minspace);
1428 if (EQ (p->status, Qlisten))
1430 Lisp_Object port = Fplist_get (p->childp, QCservice);
1431 if (INTEGERP (port))
1432 port = Fnumber_to_string (port);
1433 if (NILP (port))
1434 port = Fformat_network_address (Fplist_get (p->childp, QClocal), Qnil);
1435 sprintf (tembuf, "(network %s server on %s)\n",
1436 (DATAGRAM_CHAN_P (XINT (p->infd)) ? "datagram" : "stream"),
1437 (STRINGP (port) ? (char *)SDATA (port) : "?"));
1438 insert_string (tembuf);
1440 else if (NETCONN1_P (p))
1442 /* For a local socket, there is no host name,
1443 so display service instead. */
1444 Lisp_Object host = Fplist_get (p->childp, QChost);
1445 if (!STRINGP (host))
1447 host = Fplist_get (p->childp, QCservice);
1448 if (INTEGERP (host))
1449 host = Fnumber_to_string (host);
1451 if (NILP (host))
1452 host = Fformat_network_address (Fplist_get (p->childp, QCremote), Qnil);
1453 sprintf (tembuf, "(network %s connection to %s)\n",
1454 (DATAGRAM_CHAN_P (XINT (p->infd)) ? "datagram" : "stream"),
1455 (STRINGP (host) ? (char *)SDATA (host) : "?"));
1456 insert_string (tembuf);
1458 else
1460 tem = p->command;
1461 while (1)
1463 tem1 = Fcar (tem);
1464 Finsert (1, &tem1);
1465 tem = Fcdr (tem);
1466 if (NILP (tem))
1467 break;
1468 insert_string (" ");
1470 insert_string ("\n");
1473 return Qnil;
1476 DEFUN ("list-processes", Flist_processes, Slist_processes, 0, 1, "P",
1477 doc: /* Display a list of all processes.
1478 If optional argument QUERY-ONLY is non-nil, only processes with
1479 the query-on-exit flag set will be listed.
1480 Any process listed as exited or signaled is actually eliminated
1481 after the listing is made. */)
1482 (query_only)
1483 Lisp_Object query_only;
1485 internal_with_output_to_temp_buffer ("*Process List*",
1486 list_processes_1, query_only);
1487 return Qnil;
1490 DEFUN ("process-list", Fprocess_list, Sprocess_list, 0, 0, 0,
1491 doc: /* Return a list of all processes. */)
1494 return Fmapcar (Qcdr, Vprocess_alist);
1497 /* Starting asynchronous inferior processes. */
1499 static Lisp_Object start_process_unwind ();
1501 DEFUN ("start-process", Fstart_process, Sstart_process, 3, MANY, 0,
1502 doc: /* Start a program in a subprocess. Return the process object for it.
1503 NAME is name for process. It is modified if necessary to make it unique.
1504 BUFFER is the buffer (or buffer name) to associate with the process.
1505 Process output goes at end of that buffer, unless you specify
1506 an output stream or filter function to handle the output.
1507 BUFFER may be also nil, meaning that this process is not associated
1508 with any buffer.
1509 PROGRAM is the program file name. It is searched for in PATH.
1510 Remaining arguments are strings to give program as arguments.
1512 usage: (start-process NAME BUFFER PROGRAM &rest PROGRAM-ARGS) */)
1513 (nargs, args)
1514 int nargs;
1515 register Lisp_Object *args;
1517 Lisp_Object buffer, name, program, proc, current_dir, tem;
1518 #ifdef VMS
1519 register unsigned char *new_argv;
1520 int len;
1521 #else
1522 register unsigned char **new_argv;
1523 #endif
1524 register int i;
1525 int count = SPECPDL_INDEX ();
1527 buffer = args[1];
1528 if (!NILP (buffer))
1529 buffer = Fget_buffer_create (buffer);
1531 /* Make sure that the child will be able to chdir to the current
1532 buffer's current directory, or its unhandled equivalent. We
1533 can't just have the child check for an error when it does the
1534 chdir, since it's in a vfork.
1536 We have to GCPRO around this because Fexpand_file_name and
1537 Funhandled_file_name_directory might call a file name handling
1538 function. The argument list is protected by the caller, so all
1539 we really have to worry about is buffer. */
1541 struct gcpro gcpro1, gcpro2;
1543 current_dir = current_buffer->directory;
1545 GCPRO2 (buffer, current_dir);
1547 current_dir
1548 = expand_and_dir_to_file (Funhandled_file_name_directory (current_dir),
1549 Qnil);
1550 if (NILP (Ffile_accessible_directory_p (current_dir)))
1551 report_file_error ("Setting current directory",
1552 Fcons (current_buffer->directory, Qnil));
1554 UNGCPRO;
1557 name = args[0];
1558 CHECK_STRING (name);
1560 program = args[2];
1562 CHECK_STRING (program);
1564 proc = make_process (name);
1565 /* If an error occurs and we can't start the process, we want to
1566 remove it from the process list. This means that each error
1567 check in create_process doesn't need to call remove_process
1568 itself; it's all taken care of here. */
1569 record_unwind_protect (start_process_unwind, proc);
1571 XPROCESS (proc)->childp = Qt;
1572 XPROCESS (proc)->plist = Qnil;
1573 XPROCESS (proc)->buffer = buffer;
1574 XPROCESS (proc)->sentinel = Qnil;
1575 XPROCESS (proc)->filter = Qnil;
1576 XPROCESS (proc)->filter_multibyte
1577 = buffer_defaults.enable_multibyte_characters;
1578 XPROCESS (proc)->command = Flist (nargs - 2, args + 2);
1580 #ifdef ADAPTIVE_READ_BUFFERING
1581 XPROCESS (proc)->adaptive_read_buffering = Vprocess_adaptive_read_buffering;
1582 #endif
1584 /* Make the process marker point into the process buffer (if any). */
1585 if (BUFFERP (buffer))
1586 set_marker_both (XPROCESS (proc)->mark, buffer,
1587 BUF_ZV (XBUFFER (buffer)),
1588 BUF_ZV_BYTE (XBUFFER (buffer)));
1591 /* Decide coding systems for communicating with the process. Here
1592 we don't setup the structure coding_system nor pay attention to
1593 unibyte mode. They are done in create_process. */
1595 /* Qt denotes we have not yet called Ffind_operation_coding_system. */
1596 Lisp_Object coding_systems = Qt;
1597 Lisp_Object val, *args2;
1598 struct gcpro gcpro1, gcpro2;
1600 val = Vcoding_system_for_read;
1601 if (NILP (val))
1603 args2 = (Lisp_Object *) alloca ((nargs + 1) * sizeof *args2);
1604 args2[0] = Qstart_process;
1605 for (i = 0; i < nargs; i++) args2[i + 1] = args[i];
1606 GCPRO2 (proc, current_dir);
1607 coding_systems = Ffind_operation_coding_system (nargs + 1, args2);
1608 UNGCPRO;
1609 if (CONSP (coding_systems))
1610 val = XCAR (coding_systems);
1611 else if (CONSP (Vdefault_process_coding_system))
1612 val = XCAR (Vdefault_process_coding_system);
1614 XPROCESS (proc)->decode_coding_system = val;
1616 val = Vcoding_system_for_write;
1617 if (NILP (val))
1619 if (EQ (coding_systems, Qt))
1621 args2 = (Lisp_Object *) alloca ((nargs + 1) * sizeof args2);
1622 args2[0] = Qstart_process;
1623 for (i = 0; i < nargs; i++) args2[i + 1] = args[i];
1624 GCPRO2 (proc, current_dir);
1625 coding_systems = Ffind_operation_coding_system (nargs + 1, args2);
1626 UNGCPRO;
1628 if (CONSP (coding_systems))
1629 val = XCDR (coding_systems);
1630 else if (CONSP (Vdefault_process_coding_system))
1631 val = XCDR (Vdefault_process_coding_system);
1633 XPROCESS (proc)->encode_coding_system = val;
1636 #ifdef VMS
1637 /* Make a one member argv with all args concatenated
1638 together separated by a blank. */
1639 len = SBYTES (program) + 2;
1640 for (i = 3; i < nargs; i++)
1642 tem = args[i];
1643 CHECK_STRING (tem);
1644 len += SBYTES (tem) + 1; /* count the blank */
1646 new_argv = (unsigned char *) alloca (len);
1647 strcpy (new_argv, SDATA (program));
1648 for (i = 3; i < nargs; i++)
1650 tem = args[i];
1651 CHECK_STRING (tem);
1652 strcat (new_argv, " ");
1653 strcat (new_argv, SDATA (tem));
1655 /* Need to add code here to check for program existence on VMS */
1657 #else /* not VMS */
1658 new_argv = (unsigned char **) alloca ((nargs - 1) * sizeof (char *));
1660 /* If program file name is not absolute, search our path for it.
1661 Put the name we will really use in TEM. */
1662 if (!IS_DIRECTORY_SEP (SREF (program, 0))
1663 && !(SCHARS (program) > 1
1664 && IS_DEVICE_SEP (SREF (program, 1))))
1666 struct gcpro gcpro1, gcpro2, gcpro3, gcpro4;
1668 tem = Qnil;
1669 GCPRO4 (name, program, buffer, current_dir);
1670 openp (Vexec_path, program, Vexec_suffixes, &tem, make_number (X_OK));
1671 UNGCPRO;
1672 if (NILP (tem))
1673 report_file_error ("Searching for program", Fcons (program, Qnil));
1674 tem = Fexpand_file_name (tem, Qnil);
1676 else
1678 if (!NILP (Ffile_directory_p (program)))
1679 error ("Specified program for new process is a directory");
1680 tem = program;
1683 /* If program file name starts with /: for quoting a magic name,
1684 discard that. */
1685 if (SBYTES (tem) > 2 && SREF (tem, 0) == '/'
1686 && SREF (tem, 1) == ':')
1687 tem = Fsubstring (tem, make_number (2), Qnil);
1689 /* Encode the file name and put it in NEW_ARGV.
1690 That's where the child will use it to execute the program. */
1691 tem = ENCODE_FILE (tem);
1692 new_argv[0] = SDATA (tem);
1694 /* Here we encode arguments by the coding system used for sending
1695 data to the process. We don't support using different coding
1696 systems for encoding arguments and for encoding data sent to the
1697 process. */
1699 for (i = 3; i < nargs; i++)
1701 tem = args[i];
1702 CHECK_STRING (tem);
1703 if (STRING_MULTIBYTE (tem))
1704 tem = (code_convert_string_norecord
1705 (tem, XPROCESS (proc)->encode_coding_system, 1));
1706 new_argv[i - 2] = SDATA (tem);
1708 new_argv[i - 2] = 0;
1709 #endif /* not VMS */
1711 XPROCESS (proc)->decoding_buf = make_uninit_string (0);
1712 XPROCESS (proc)->decoding_carryover = make_number (0);
1713 XPROCESS (proc)->encoding_buf = make_uninit_string (0);
1714 XPROCESS (proc)->encoding_carryover = make_number (0);
1716 XPROCESS (proc)->inherit_coding_system_flag
1717 = (NILP (buffer) || !inherit_process_coding_system
1718 ? Qnil : Qt);
1720 create_process (proc, (char **) new_argv, current_dir);
1722 return unbind_to (count, proc);
1725 /* This function is the unwind_protect form for Fstart_process. If
1726 PROC doesn't have its pid set, then we know someone has signaled
1727 an error and the process wasn't started successfully, so we should
1728 remove it from the process list. */
1729 static Lisp_Object
1730 start_process_unwind (proc)
1731 Lisp_Object proc;
1733 if (!PROCESSP (proc))
1734 abort ();
1736 /* Was PROC started successfully? */
1737 if (XPROCESS (proc)->pid <= 0)
1738 remove_process (proc);
1740 return Qnil;
1743 static void
1744 create_process_1 (timer)
1745 struct atimer *timer;
1747 /* Nothing to do. */
1751 #if 0 /* This doesn't work; see the note before sigchld_handler. */
1752 #ifdef USG
1753 #ifdef SIGCHLD
1754 /* Mimic blocking of signals on system V, which doesn't really have it. */
1756 /* Nonzero means we got a SIGCHLD when it was supposed to be blocked. */
1757 int sigchld_deferred;
1759 SIGTYPE
1760 create_process_sigchld ()
1762 signal (SIGCHLD, create_process_sigchld);
1764 sigchld_deferred = 1;
1766 #endif
1767 #endif
1768 #endif
1770 #ifndef VMS /* VMS version of this function is in vmsproc.c. */
1771 void
1772 create_process (process, new_argv, current_dir)
1773 Lisp_Object process;
1774 char **new_argv;
1775 Lisp_Object current_dir;
1777 int pid, inchannel, outchannel;
1778 int sv[2];
1779 #ifdef POSIX_SIGNALS
1780 sigset_t procmask;
1781 sigset_t blocked;
1782 struct sigaction sigint_action;
1783 struct sigaction sigquit_action;
1784 #ifdef AIX
1785 struct sigaction sighup_action;
1786 #endif
1787 #else /* !POSIX_SIGNALS */
1788 #if 0
1789 #ifdef SIGCHLD
1790 SIGTYPE (*sigchld)();
1791 #endif
1792 #endif /* 0 */
1793 #endif /* !POSIX_SIGNALS */
1794 /* Use volatile to protect variables from being clobbered by longjmp. */
1795 volatile int forkin, forkout;
1796 volatile int pty_flag = 0;
1797 #ifndef USE_CRT_DLL
1798 extern char **environ;
1799 #endif
1801 inchannel = outchannel = -1;
1803 #ifdef HAVE_PTYS
1804 if (!NILP (Vprocess_connection_type))
1805 outchannel = inchannel = allocate_pty ();
1807 if (inchannel >= 0)
1809 #if ! defined (USG) || defined (USG_SUBTTY_WORKS)
1810 /* On most USG systems it does not work to open the pty's tty here,
1811 then close it and reopen it in the child. */
1812 #ifdef O_NOCTTY
1813 /* Don't let this terminal become our controlling terminal
1814 (in case we don't have one). */
1815 forkout = forkin = emacs_open (pty_name, O_RDWR | O_NOCTTY, 0);
1816 #else
1817 forkout = forkin = emacs_open (pty_name, O_RDWR, 0);
1818 #endif
1819 if (forkin < 0)
1820 report_file_error ("Opening pty", Qnil);
1821 #if defined (RTU) || defined (UNIPLUS) || defined (DONT_REOPEN_PTY)
1822 /* In the case that vfork is defined as fork, the parent process
1823 (Emacs) may send some data before the child process completes
1824 tty options setup. So we setup tty before forking. */
1825 child_setup_tty (forkout);
1826 #endif /* RTU or UNIPLUS or DONT_REOPEN_PTY */
1827 #else
1828 forkin = forkout = -1;
1829 #endif /* not USG, or USG_SUBTTY_WORKS */
1830 pty_flag = 1;
1832 else
1833 #endif /* HAVE_PTYS */
1834 #ifdef SKTPAIR
1836 if (socketpair (AF_UNIX, SOCK_STREAM, 0, sv) < 0)
1837 report_file_error ("Opening socketpair", Qnil);
1838 outchannel = inchannel = sv[0];
1839 forkout = forkin = sv[1];
1841 #else /* not SKTPAIR */
1843 int tem;
1844 tem = pipe (sv);
1845 if (tem < 0)
1846 report_file_error ("Creating pipe", Qnil);
1847 inchannel = sv[0];
1848 forkout = sv[1];
1849 tem = pipe (sv);
1850 if (tem < 0)
1852 emacs_close (inchannel);
1853 emacs_close (forkout);
1854 report_file_error ("Creating pipe", Qnil);
1856 outchannel = sv[1];
1857 forkin = sv[0];
1859 #endif /* not SKTPAIR */
1861 #if 0
1862 /* Replaced by close_process_descs */
1863 set_exclusive_use (inchannel);
1864 set_exclusive_use (outchannel);
1865 #endif
1867 /* Stride people say it's a mystery why this is needed
1868 as well as the O_NDELAY, but that it fails without this. */
1869 #if defined (STRIDE) || (defined (pfa) && defined (HAVE_PTYS))
1871 int one = 1;
1872 ioctl (inchannel, FIONBIO, &one);
1874 #endif
1876 #ifdef O_NONBLOCK
1877 fcntl (inchannel, F_SETFL, O_NONBLOCK);
1878 fcntl (outchannel, F_SETFL, O_NONBLOCK);
1879 #else
1880 #ifdef O_NDELAY
1881 fcntl (inchannel, F_SETFL, O_NDELAY);
1882 fcntl (outchannel, F_SETFL, O_NDELAY);
1883 #endif
1884 #endif
1886 /* Record this as an active process, with its channels.
1887 As a result, child_setup will close Emacs's side of the pipes. */
1888 chan_process[inchannel] = process;
1889 XSETINT (XPROCESS (process)->infd, inchannel);
1890 XSETINT (XPROCESS (process)->outfd, outchannel);
1892 /* Previously we recorded the tty descriptor used in the subprocess.
1893 It was only used for getting the foreground tty process, so now
1894 we just reopen the device (see emacs_get_tty_pgrp) as this is
1895 more portable (see USG_SUBTTY_WORKS above). */
1897 XPROCESS (process)->pty_flag = (pty_flag ? Qt : Qnil);
1898 XPROCESS (process)->status = Qrun;
1899 setup_process_coding_systems (process);
1901 /* Delay interrupts until we have a chance to store
1902 the new fork's pid in its process structure */
1903 #ifdef POSIX_SIGNALS
1904 sigemptyset (&blocked);
1905 #ifdef SIGCHLD
1906 sigaddset (&blocked, SIGCHLD);
1907 #endif
1908 #ifdef HAVE_WORKING_VFORK
1909 /* On many hosts (e.g. Solaris 2.4), if a vforked child calls `signal',
1910 this sets the parent's signal handlers as well as the child's.
1911 So delay all interrupts whose handlers the child might munge,
1912 and record the current handlers so they can be restored later. */
1913 sigaddset (&blocked, SIGINT ); sigaction (SIGINT , 0, &sigint_action );
1914 sigaddset (&blocked, SIGQUIT); sigaction (SIGQUIT, 0, &sigquit_action);
1915 #ifdef AIX
1916 sigaddset (&blocked, SIGHUP ); sigaction (SIGHUP , 0, &sighup_action );
1917 #endif
1918 #endif /* HAVE_WORKING_VFORK */
1919 sigprocmask (SIG_BLOCK, &blocked, &procmask);
1920 #else /* !POSIX_SIGNALS */
1921 #ifdef SIGCHLD
1922 #ifdef BSD4_1
1923 sighold (SIGCHLD);
1924 #else /* not BSD4_1 */
1925 #if defined (BSD_SYSTEM) || defined (UNIPLUS) || defined (HPUX)
1926 sigsetmask (sigmask (SIGCHLD));
1927 #else /* ordinary USG */
1928 #if 0
1929 sigchld_deferred = 0;
1930 sigchld = signal (SIGCHLD, create_process_sigchld);
1931 #endif
1932 #endif /* ordinary USG */
1933 #endif /* not BSD4_1 */
1934 #endif /* SIGCHLD */
1935 #endif /* !POSIX_SIGNALS */
1937 FD_SET (inchannel, &input_wait_mask);
1938 FD_SET (inchannel, &non_keyboard_wait_mask);
1939 if (inchannel > max_process_desc)
1940 max_process_desc = inchannel;
1942 /* Until we store the proper pid, enable sigchld_handler
1943 to recognize an unknown pid as standing for this process.
1944 It is very important not to let this `marker' value stay
1945 in the table after this function has returned; if it does
1946 it might cause call-process to hang and subsequent asynchronous
1947 processes to get their return values scrambled. */
1948 XPROCESS (process)->pid = -1;
1950 BLOCK_INPUT;
1953 /* child_setup must clobber environ on systems with true vfork.
1954 Protect it from permanent change. */
1955 char **save_environ = environ;
1957 current_dir = ENCODE_FILE (current_dir);
1959 #ifndef WINDOWSNT
1960 pid = vfork ();
1961 if (pid == 0)
1962 #endif /* not WINDOWSNT */
1964 int xforkin = forkin;
1965 int xforkout = forkout;
1967 #if 0 /* This was probably a mistake--it duplicates code later on,
1968 but fails to handle all the cases. */
1969 /* Make sure SIGCHLD is not blocked in the child. */
1970 sigsetmask (SIGEMPTYMASK);
1971 #endif
1973 /* Make the pty be the controlling terminal of the process. */
1974 #ifdef HAVE_PTYS
1975 /* First, disconnect its current controlling terminal. */
1976 #ifdef HAVE_SETSID
1977 /* We tried doing setsid only if pty_flag, but it caused
1978 process_set_signal to fail on SGI when using a pipe. */
1979 setsid ();
1980 /* Make the pty's terminal the controlling terminal. */
1981 if (pty_flag)
1983 #ifdef TIOCSCTTY
1984 /* We ignore the return value
1985 because faith@cs.unc.edu says that is necessary on Linux. */
1986 ioctl (xforkin, TIOCSCTTY, 0);
1987 #endif
1989 #else /* not HAVE_SETSID */
1990 #ifdef USG
1991 /* It's very important to call setpgrp here and no time
1992 afterwards. Otherwise, we lose our controlling tty which
1993 is set when we open the pty. */
1994 setpgrp ();
1995 #endif /* USG */
1996 #endif /* not HAVE_SETSID */
1997 #if defined (HAVE_TERMIOS) && defined (LDISC1)
1998 if (pty_flag && xforkin >= 0)
2000 struct termios t;
2001 tcgetattr (xforkin, &t);
2002 t.c_lflag = LDISC1;
2003 if (tcsetattr (xforkin, TCSANOW, &t) < 0)
2004 emacs_write (1, "create_process/tcsetattr LDISC1 failed\n", 39);
2006 #else
2007 #if defined (NTTYDISC) && defined (TIOCSETD)
2008 if (pty_flag && xforkin >= 0)
2010 /* Use new line discipline. */
2011 int ldisc = NTTYDISC;
2012 ioctl (xforkin, TIOCSETD, &ldisc);
2014 #endif
2015 #endif
2016 #ifdef TIOCNOTTY
2017 /* In 4.3BSD, the TIOCSPGRP bug has been fixed, and now you
2018 can do TIOCSPGRP only to the process's controlling tty. */
2019 if (pty_flag)
2021 /* I wonder: would just ioctl (0, TIOCNOTTY, 0) work here?
2022 I can't test it since I don't have 4.3. */
2023 int j = emacs_open ("/dev/tty", O_RDWR, 0);
2024 ioctl (j, TIOCNOTTY, 0);
2025 emacs_close (j);
2026 #ifndef USG
2027 /* In order to get a controlling terminal on some versions
2028 of BSD, it is necessary to put the process in pgrp 0
2029 before it opens the terminal. */
2030 #ifdef HAVE_SETPGID
2031 setpgid (0, 0);
2032 #else
2033 setpgrp (0, 0);
2034 #endif
2035 #endif
2037 #endif /* TIOCNOTTY */
2039 #if !defined (RTU) && !defined (UNIPLUS) && !defined (DONT_REOPEN_PTY)
2040 /*** There is a suggestion that this ought to be a
2041 conditional on TIOCSPGRP,
2042 or !(defined (HAVE_SETSID) && defined (TIOCSCTTY)).
2043 Trying the latter gave the wrong results on Debian GNU/Linux 1.1;
2044 that system does seem to need this code, even though
2045 both HAVE_SETSID and TIOCSCTTY are defined. */
2046 /* Now close the pty (if we had it open) and reopen it.
2047 This makes the pty the controlling terminal of the subprocess. */
2048 if (pty_flag)
2050 #ifdef SET_CHILD_PTY_PGRP
2051 int pgrp = getpid ();
2052 #endif
2054 /* I wonder if emacs_close (emacs_open (pty_name, ...))
2055 would work? */
2056 if (xforkin >= 0)
2057 emacs_close (xforkin);
2058 xforkout = xforkin = emacs_open (pty_name, O_RDWR, 0);
2060 if (xforkin < 0)
2062 emacs_write (1, "Couldn't open the pty terminal ", 31);
2063 emacs_write (1, pty_name, strlen (pty_name));
2064 emacs_write (1, "\n", 1);
2065 _exit (1);
2068 #ifdef SET_CHILD_PTY_PGRP
2069 ioctl (xforkin, TIOCSPGRP, &pgrp);
2070 ioctl (xforkout, TIOCSPGRP, &pgrp);
2071 #endif
2073 #endif /* not UNIPLUS and not RTU and not DONT_REOPEN_PTY */
2075 #ifdef SETUP_SLAVE_PTY
2076 if (pty_flag)
2078 SETUP_SLAVE_PTY;
2080 #endif /* SETUP_SLAVE_PTY */
2081 #ifdef AIX
2082 /* On AIX, we've disabled SIGHUP above once we start a child on a pty.
2083 Now reenable it in the child, so it will die when we want it to. */
2084 if (pty_flag)
2085 signal (SIGHUP, SIG_DFL);
2086 #endif
2087 #endif /* HAVE_PTYS */
2089 signal (SIGINT, SIG_DFL);
2090 signal (SIGQUIT, SIG_DFL);
2092 /* Stop blocking signals in the child. */
2093 #ifdef POSIX_SIGNALS
2094 sigprocmask (SIG_SETMASK, &procmask, 0);
2095 #else /* !POSIX_SIGNALS */
2096 #ifdef SIGCHLD
2097 #ifdef BSD4_1
2098 sigrelse (SIGCHLD);
2099 #else /* not BSD4_1 */
2100 #if defined (BSD_SYSTEM) || defined (UNIPLUS) || defined (HPUX)
2101 sigsetmask (SIGEMPTYMASK);
2102 #else /* ordinary USG */
2103 #if 0
2104 signal (SIGCHLD, sigchld);
2105 #endif
2106 #endif /* ordinary USG */
2107 #endif /* not BSD4_1 */
2108 #endif /* SIGCHLD */
2109 #endif /* !POSIX_SIGNALS */
2111 #if !defined (RTU) && !defined (UNIPLUS) && !defined (DONT_REOPEN_PTY)
2112 if (pty_flag)
2113 child_setup_tty (xforkout);
2114 #endif /* not RTU and not UNIPLUS and not DONT_REOPEN_PTY */
2115 #ifdef WINDOWSNT
2116 pid = child_setup (xforkin, xforkout, xforkout,
2117 new_argv, 1, current_dir);
2118 #else /* not WINDOWSNT */
2119 child_setup (xforkin, xforkout, xforkout,
2120 new_argv, 1, current_dir);
2121 #endif /* not WINDOWSNT */
2123 environ = save_environ;
2126 UNBLOCK_INPUT;
2128 /* This runs in the Emacs process. */
2129 if (pid < 0)
2131 if (forkin >= 0)
2132 emacs_close (forkin);
2133 if (forkin != forkout && forkout >= 0)
2134 emacs_close (forkout);
2136 else
2138 /* vfork succeeded. */
2139 XPROCESS (process)->pid = pid;
2141 #ifdef WINDOWSNT
2142 register_child (pid, inchannel);
2143 #endif /* WINDOWSNT */
2145 /* If the subfork execv fails, and it exits,
2146 this close hangs. I don't know why.
2147 So have an interrupt jar it loose. */
2149 struct atimer *timer;
2150 EMACS_TIME offset;
2152 stop_polling ();
2153 EMACS_SET_SECS_USECS (offset, 1, 0);
2154 timer = start_atimer (ATIMER_RELATIVE, offset, create_process_1, 0);
2156 if (forkin >= 0)
2157 emacs_close (forkin);
2159 cancel_atimer (timer);
2160 start_polling ();
2163 if (forkin != forkout && forkout >= 0)
2164 emacs_close (forkout);
2166 #ifdef HAVE_PTYS
2167 if (pty_flag)
2168 XPROCESS (process)->tty_name = build_string (pty_name);
2169 else
2170 #endif
2171 XPROCESS (process)->tty_name = Qnil;
2174 /* Restore the signal state whether vfork succeeded or not.
2175 (We will signal an error, below, if it failed.) */
2176 #ifdef POSIX_SIGNALS
2177 #ifdef HAVE_WORKING_VFORK
2178 /* Restore the parent's signal handlers. */
2179 sigaction (SIGINT, &sigint_action, 0);
2180 sigaction (SIGQUIT, &sigquit_action, 0);
2181 #ifdef AIX
2182 sigaction (SIGHUP, &sighup_action, 0);
2183 #endif
2184 #endif /* HAVE_WORKING_VFORK */
2185 /* Stop blocking signals in the parent. */
2186 sigprocmask (SIG_SETMASK, &procmask, 0);
2187 #else /* !POSIX_SIGNALS */
2188 #ifdef SIGCHLD
2189 #ifdef BSD4_1
2190 sigrelse (SIGCHLD);
2191 #else /* not BSD4_1 */
2192 #if defined (BSD_SYSTEM) || defined (UNIPLUS) || defined (HPUX)
2193 sigsetmask (SIGEMPTYMASK);
2194 #else /* ordinary USG */
2195 #if 0
2196 signal (SIGCHLD, sigchld);
2197 /* Now really handle any of these signals
2198 that came in during this function. */
2199 if (sigchld_deferred)
2200 kill (getpid (), SIGCHLD);
2201 #endif
2202 #endif /* ordinary USG */
2203 #endif /* not BSD4_1 */
2204 #endif /* SIGCHLD */
2205 #endif /* !POSIX_SIGNALS */
2207 /* Now generate the error if vfork failed. */
2208 if (pid < 0)
2209 report_file_error ("Doing vfork", Qnil);
2211 #endif /* not VMS */
2214 #ifdef HAVE_SOCKETS
2216 /* Convert an internal struct sockaddr to a lisp object (vector or string).
2217 The address family of sa is not included in the result. */
2219 static Lisp_Object
2220 conv_sockaddr_to_lisp (sa, len)
2221 struct sockaddr *sa;
2222 int len;
2224 Lisp_Object address;
2225 int i;
2226 unsigned char *cp;
2227 register struct Lisp_Vector *p;
2229 switch (sa->sa_family)
2231 case AF_INET:
2233 struct sockaddr_in *sin = (struct sockaddr_in *) sa;
2234 len = sizeof (sin->sin_addr) + 1;
2235 address = Fmake_vector (make_number (len), Qnil);
2236 p = XVECTOR (address);
2237 p->contents[--len] = make_number (ntohs (sin->sin_port));
2238 cp = (unsigned char *)&sin->sin_addr;
2239 break;
2241 #ifdef AF_INET6
2242 case AF_INET6:
2244 struct sockaddr_in6 *sin6 = (struct sockaddr_in6 *) sa;
2245 uint16_t *ip6 = (uint16_t *)&sin6->sin6_addr;
2246 len = sizeof (sin6->sin6_addr)/2 + 1;
2247 address = Fmake_vector (make_number (len), Qnil);
2248 p = XVECTOR (address);
2249 p->contents[--len] = make_number (ntohs (sin6->sin6_port));
2250 for (i = 0; i < len; i++)
2251 p->contents[i] = make_number (ntohs (ip6[i]));
2252 return address;
2254 #endif
2255 #ifdef HAVE_LOCAL_SOCKETS
2256 case AF_LOCAL:
2258 struct sockaddr_un *sockun = (struct sockaddr_un *) sa;
2259 for (i = 0; i < sizeof (sockun->sun_path); i++)
2260 if (sockun->sun_path[i] == 0)
2261 break;
2262 return make_unibyte_string (sockun->sun_path, i);
2264 #endif
2265 default:
2266 len -= sizeof (sa->sa_family);
2267 address = Fcons (make_number (sa->sa_family),
2268 Fmake_vector (make_number (len), Qnil));
2269 p = XVECTOR (XCDR (address));
2270 cp = (unsigned char *) sa + sizeof (sa->sa_family);
2271 break;
2274 i = 0;
2275 while (i < len)
2276 p->contents[i++] = make_number (*cp++);
2278 return address;
2282 /* Get family and required size for sockaddr structure to hold ADDRESS. */
2284 static int
2285 get_lisp_to_sockaddr_size (address, familyp)
2286 Lisp_Object address;
2287 int *familyp;
2289 register struct Lisp_Vector *p;
2291 if (VECTORP (address))
2293 p = XVECTOR (address);
2294 if (p->size == 5)
2296 *familyp = AF_INET;
2297 return sizeof (struct sockaddr_in);
2299 #ifdef AF_INET6
2300 else if (p->size == 9)
2302 *familyp = AF_INET6;
2303 return sizeof (struct sockaddr_in6);
2305 #endif
2307 #ifdef HAVE_LOCAL_SOCKETS
2308 else if (STRINGP (address))
2310 *familyp = AF_LOCAL;
2311 return sizeof (struct sockaddr_un);
2313 #endif
2314 else if (CONSP (address) && INTEGERP (XCAR (address)) && VECTORP (XCDR (address)))
2316 struct sockaddr *sa;
2317 *familyp = XINT (XCAR (address));
2318 p = XVECTOR (XCDR (address));
2319 return p->size + sizeof (sa->sa_family);
2321 return 0;
2324 /* Convert an address object (vector or string) to an internal sockaddr.
2325 Address format has already been validated by get_lisp_to_sockaddr_size,
2326 but just to be nice, we return without doing anything
2327 if FAMILY is not valid. */
2329 static void
2330 conv_lisp_to_sockaddr (family, address, sa, len)
2331 int family;
2332 Lisp_Object address;
2333 struct sockaddr *sa;
2334 int len;
2336 register struct Lisp_Vector *p;
2337 register unsigned char *cp = NULL;
2338 register int i;
2340 bzero (sa, len);
2341 sa->sa_family = family;
2343 if (VECTORP (address))
2345 p = XVECTOR (address);
2346 if (family == AF_INET)
2348 struct sockaddr_in *sin = (struct sockaddr_in *) sa;
2349 len = sizeof (sin->sin_addr) + 1;
2350 i = XINT (p->contents[--len]);
2351 sin->sin_port = htons (i);
2352 cp = (unsigned char *)&sin->sin_addr;
2354 #ifdef AF_INET6
2355 else if (family == AF_INET6)
2357 struct sockaddr_in6 *sin6 = (struct sockaddr_in6 *) sa;
2358 uint16_t *ip6 = (uint16_t *)&sin6->sin6_addr;
2359 len = sizeof (sin6->sin6_addr) + 1;
2360 i = XINT (p->contents[--len]);
2361 sin6->sin6_port = htons (i);
2362 for (i = 0; i < len; i++)
2363 if (INTEGERP (p->contents[i]))
2365 int j = XFASTINT (p->contents[i]) & 0xffff;
2366 ip6[i] = ntohs (j);
2368 return;
2370 #endif
2371 return;
2373 else if (STRINGP (address))
2375 #ifdef HAVE_LOCAL_SOCKETS
2376 if (family == AF_LOCAL)
2378 struct sockaddr_un *sockun = (struct sockaddr_un *) sa;
2379 cp = SDATA (address);
2380 for (i = 0; i < sizeof (sockun->sun_path) && *cp; i++)
2381 sockun->sun_path[i] = *cp++;
2383 #endif
2384 return;
2386 else
2388 p = XVECTOR (XCDR (address));
2389 cp = (unsigned char *)sa + sizeof (sa->sa_family);
2392 for (i = 0; i < len; i++)
2393 if (INTEGERP (p->contents[i]))
2394 *cp++ = XFASTINT (p->contents[i]) & 0xff;
2397 #ifdef DATAGRAM_SOCKETS
2398 DEFUN ("process-datagram-address", Fprocess_datagram_address, Sprocess_datagram_address,
2399 1, 1, 0,
2400 doc: /* Get the current datagram address associated with PROCESS. */)
2401 (process)
2402 Lisp_Object process;
2404 int channel;
2406 CHECK_PROCESS (process);
2408 if (!DATAGRAM_CONN_P (process))
2409 return Qnil;
2411 channel = XINT (XPROCESS (process)->infd);
2412 return conv_sockaddr_to_lisp (datagram_address[channel].sa,
2413 datagram_address[channel].len);
2416 DEFUN ("set-process-datagram-address", Fset_process_datagram_address, Sset_process_datagram_address,
2417 2, 2, 0,
2418 doc: /* Set the datagram address for PROCESS to ADDRESS.
2419 Returns nil upon error setting address, ADDRESS otherwise. */)
2420 (process, address)
2421 Lisp_Object process, address;
2423 int channel;
2424 int family, len;
2426 CHECK_PROCESS (process);
2428 if (!DATAGRAM_CONN_P (process))
2429 return Qnil;
2431 channel = XINT (XPROCESS (process)->infd);
2433 len = get_lisp_to_sockaddr_size (address, &family);
2434 if (datagram_address[channel].len != len)
2435 return Qnil;
2436 conv_lisp_to_sockaddr (family, address, datagram_address[channel].sa, len);
2437 return address;
2439 #endif
2442 static struct socket_options {
2443 /* The name of this option. Should be lowercase version of option
2444 name without SO_ prefix. */
2445 char *name;
2446 /* Option level SOL_... */
2447 int optlevel;
2448 /* Option number SO_... */
2449 int optnum;
2450 enum { SOPT_UNKNOWN, SOPT_BOOL, SOPT_INT, SOPT_IFNAME, SOPT_LINGER } opttype;
2451 enum { OPIX_NONE=0, OPIX_MISC=1, OPIX_REUSEADDR=2 } optbit;
2452 } socket_options[] =
2454 #ifdef SO_BINDTODEVICE
2455 { ":bindtodevice", SOL_SOCKET, SO_BINDTODEVICE, SOPT_IFNAME, OPIX_MISC },
2456 #endif
2457 #ifdef SO_BROADCAST
2458 { ":broadcast", SOL_SOCKET, SO_BROADCAST, SOPT_BOOL, OPIX_MISC },
2459 #endif
2460 #ifdef SO_DONTROUTE
2461 { ":dontroute", SOL_SOCKET, SO_DONTROUTE, SOPT_BOOL, OPIX_MISC },
2462 #endif
2463 #ifdef SO_KEEPALIVE
2464 { ":keepalive", SOL_SOCKET, SO_KEEPALIVE, SOPT_BOOL, OPIX_MISC },
2465 #endif
2466 #ifdef SO_LINGER
2467 { ":linger", SOL_SOCKET, SO_LINGER, SOPT_LINGER, OPIX_MISC },
2468 #endif
2469 #ifdef SO_OOBINLINE
2470 { ":oobinline", SOL_SOCKET, SO_OOBINLINE, SOPT_BOOL, OPIX_MISC },
2471 #endif
2472 #ifdef SO_PRIORITY
2473 { ":priority", SOL_SOCKET, SO_PRIORITY, SOPT_INT, OPIX_MISC },
2474 #endif
2475 #ifdef SO_REUSEADDR
2476 { ":reuseaddr", SOL_SOCKET, SO_REUSEADDR, SOPT_BOOL, OPIX_REUSEADDR },
2477 #endif
2478 { 0, 0, 0, SOPT_UNKNOWN, OPIX_NONE }
2481 /* Set option OPT to value VAL on socket S.
2483 Returns (1<<socket_options[OPT].optbit) if option is known, 0 otherwise.
2484 Signals an error if setting a known option fails.
2487 static int
2488 set_socket_option (s, opt, val)
2489 int s;
2490 Lisp_Object opt, val;
2492 char *name;
2493 struct socket_options *sopt;
2494 int ret = 0;
2496 CHECK_SYMBOL (opt);
2498 name = (char *) SDATA (SYMBOL_NAME (opt));
2499 for (sopt = socket_options; sopt->name; sopt++)
2500 if (strcmp (name, sopt->name) == 0)
2501 break;
2503 switch (sopt->opttype)
2505 case SOPT_BOOL:
2507 int optval;
2508 optval = NILP (val) ? 0 : 1;
2509 ret = setsockopt (s, sopt->optlevel, sopt->optnum,
2510 &optval, sizeof (optval));
2511 break;
2514 case SOPT_INT:
2516 int optval;
2517 if (INTEGERP (val))
2518 optval = XINT (val);
2519 else
2520 error ("Bad option value for %s", name);
2521 ret = setsockopt (s, sopt->optlevel, sopt->optnum,
2522 &optval, sizeof (optval));
2523 break;
2526 #ifdef SO_BINDTODEVICE
2527 case SOPT_IFNAME:
2529 char devname[IFNAMSIZ+1];
2531 /* This is broken, at least in the Linux 2.4 kernel.
2532 To unbind, the arg must be a zero integer, not the empty string.
2533 This should work on all systems. KFS. 2003-09-23. */
2534 bzero (devname, sizeof devname);
2535 if (STRINGP (val))
2537 char *arg = (char *) SDATA (val);
2538 int len = min (strlen (arg), IFNAMSIZ);
2539 bcopy (arg, devname, len);
2541 else if (!NILP (val))
2542 error ("Bad option value for %s", name);
2543 ret = setsockopt (s, sopt->optlevel, sopt->optnum,
2544 devname, IFNAMSIZ);
2545 break;
2547 #endif
2549 #ifdef SO_LINGER
2550 case SOPT_LINGER:
2552 struct linger linger;
2554 linger.l_onoff = 1;
2555 linger.l_linger = 0;
2556 if (INTEGERP (val))
2557 linger.l_linger = XINT (val);
2558 else
2559 linger.l_onoff = NILP (val) ? 0 : 1;
2560 ret = setsockopt (s, sopt->optlevel, sopt->optnum,
2561 &linger, sizeof (linger));
2562 break;
2564 #endif
2566 default:
2567 return 0;
2570 if (ret < 0)
2571 report_file_error ("Cannot set network option",
2572 Fcons (opt, Fcons (val, Qnil)));
2573 return (1 << sopt->optbit);
2577 DEFUN ("set-network-process-option",
2578 Fset_network_process_option, Sset_network_process_option,
2579 3, 4, 0,
2580 doc: /* For network process PROCESS set option OPTION to value VALUE.
2581 See `make-network-process' for a list of options and values.
2582 If optional fourth arg NO-ERROR is non-nil, don't signal an error if
2583 OPTION is not a supported option, return nil instead; otherwise return t. */)
2584 (process, option, value, no_error)
2585 Lisp_Object process, option, value;
2586 Lisp_Object no_error;
2588 int s;
2589 struct Lisp_Process *p;
2591 CHECK_PROCESS (process);
2592 p = XPROCESS (process);
2593 if (!NETCONN1_P (p))
2594 error ("Process is not a network process");
2596 s = XINT (p->infd);
2597 if (s < 0)
2598 error ("Process is not running");
2600 if (set_socket_option (s, option, value))
2602 p->childp = Fplist_put (p->childp, option, value);
2603 return Qt;
2606 if (NILP (no_error))
2607 error ("Unknown or unsupported option");
2609 return Qnil;
2613 /* A version of request_sigio suitable for a record_unwind_protect. */
2615 static Lisp_Object
2616 unwind_request_sigio (dummy)
2617 Lisp_Object dummy;
2619 if (interrupt_input)
2620 request_sigio ();
2621 return Qnil;
2624 /* Create a network stream/datagram client/server process. Treated
2625 exactly like a normal process when reading and writing. Primary
2626 differences are in status display and process deletion. A network
2627 connection has no PID; you cannot signal it. All you can do is
2628 stop/continue it and deactivate/close it via delete-process */
2630 DEFUN ("make-network-process", Fmake_network_process, Smake_network_process,
2631 0, MANY, 0,
2632 doc: /* Create and return a network server or client process.
2634 In Emacs, network connections are represented by process objects, so
2635 input and output work as for subprocesses and `delete-process' closes
2636 a network connection. However, a network process has no process id,
2637 it cannot be signaled, and the status codes are different from normal
2638 processes.
2640 Arguments are specified as keyword/argument pairs. The following
2641 arguments are defined:
2643 :name NAME -- NAME is name for process. It is modified if necessary
2644 to make it unique.
2646 :buffer BUFFER -- BUFFER is the buffer (or buffer-name) to associate
2647 with the process. Process output goes at end of that buffer, unless
2648 you specify an output stream or filter function to handle the output.
2649 BUFFER may be also nil, meaning that this process is not associated
2650 with any buffer.
2652 :host HOST -- HOST is name of the host to connect to, or its IP
2653 address. The symbol `local' specifies the local host. If specified
2654 for a server process, it must be a valid name or address for the local
2655 host, and only clients connecting to that address will be accepted.
2657 :service SERVICE -- SERVICE is name of the service desired, or an
2658 integer specifying a port number to connect to. If SERVICE is t,
2659 a random port number is selected for the server.
2661 :type TYPE -- TYPE is the type of connection. The default (nil) is a
2662 stream type connection, `datagram' creates a datagram type connection.
2664 :family FAMILY -- FAMILY is the address (and protocol) family for the
2665 service specified by HOST and SERVICE. The default (nil) is to use
2666 whatever address family (IPv4 or IPv6) that is defined for the host
2667 and port number specified by HOST and SERVICE. Other address families
2668 supported are:
2669 local -- for a local (i.e. UNIX) address specified by SERVICE.
2670 ipv4 -- use IPv4 address family only.
2671 ipv6 -- use IPv6 address family only.
2673 :local ADDRESS -- ADDRESS is the local address used for the connection.
2674 This parameter is ignored when opening a client process. When specified
2675 for a server process, the FAMILY, HOST and SERVICE args are ignored.
2677 :remote ADDRESS -- ADDRESS is the remote partner's address for the
2678 connection. This parameter is ignored when opening a stream server
2679 process. For a datagram server process, it specifies the initial
2680 setting of the remote datagram address. When specified for a client
2681 process, the FAMILY, HOST, and SERVICE args are ignored.
2683 The format of ADDRESS depends on the address family:
2684 - An IPv4 address is represented as an vector of integers [A B C D P]
2685 corresponding to numeric IP address A.B.C.D and port number P.
2686 - A local address is represented as a string with the address in the
2687 local address space.
2688 - An "unsupported family" address is represented by a cons (F . AV)
2689 where F is the family number and AV is a vector containing the socket
2690 address data with one element per address data byte. Do not rely on
2691 this format in portable code, as it may depend on implementation
2692 defined constants, data sizes, and data structure alignment.
2694 :coding CODING -- If CODING is a symbol, it specifies the coding
2695 system used for both reading and writing for this process. If CODING
2696 is a cons (DECODING . ENCODING), DECODING is used for reading, and
2697 ENCODING is used for writing.
2699 :nowait BOOL -- If BOOL is non-nil for a stream type client process,
2700 return without waiting for the connection to complete; instead, the
2701 sentinel function will be called with second arg matching "open" (if
2702 successful) or "failed" when the connect completes. Default is to use
2703 a blocking connect (i.e. wait) for stream type connections.
2705 :noquery BOOL -- Query the user unless BOOL is non-nil, and process is
2706 running when Emacs is exited.
2708 :stop BOOL -- Start process in the `stopped' state if BOOL non-nil.
2709 In the stopped state, a server process does not accept new
2710 connections, and a client process does not handle incoming traffic.
2711 The stopped state is cleared by `continue-process' and set by
2712 `stop-process'.
2714 :filter FILTER -- Install FILTER as the process filter.
2716 :filter-multibyte BOOL -- If BOOL is non-nil, strings given to the
2717 process filter are multibyte, otherwise they are unibyte.
2718 If this keyword is not specified, the strings are multibyte iff
2719 `default-enable-multibyte-characters' is non-nil.
2721 :sentinel SENTINEL -- Install SENTINEL as the process sentinel.
2723 :log LOG -- Install LOG as the server process log function. This
2724 function is called when the server accepts a network connection from a
2725 client. The arguments are SERVER, CLIENT, and MESSAGE, where SERVER
2726 is the server process, CLIENT is the new process for the connection,
2727 and MESSAGE is a string.
2729 :plist PLIST -- Install PLIST as the new process' initial plist.
2731 :server QLEN -- if QLEN is non-nil, create a server process for the
2732 specified FAMILY, SERVICE, and connection type (stream or datagram).
2733 If QLEN is an integer, it is used as the max. length of the server's
2734 pending connection queue (also known as the backlog); the default
2735 queue length is 5. Default is to create a client process.
2737 The following network options can be specified for this connection:
2739 :broadcast BOOL -- Allow send and receive of datagram broadcasts.
2740 :dontroute BOOL -- Only send to directly connected hosts.
2741 :keepalive BOOL -- Send keep-alive messages on network stream.
2742 :linger BOOL or TIMEOUT -- Send queued messages before closing.
2743 :oobinline BOOL -- Place out-of-band data in receive data stream.
2744 :priority INT -- Set protocol defined priority for sent packets.
2745 :reuseaddr BOOL -- Allow reusing a recently used local address
2746 (this is allowed by default for a server process).
2747 :bindtodevice NAME -- bind to interface NAME. Using this may require
2748 special privileges on some systems.
2750 Consult the relevant system programmer's manual pages for more
2751 information on using these options.
2754 A server process will listen for and accept connections from clients.
2755 When a client connection is accepted, a new network process is created
2756 for the connection with the following parameters:
2758 - The client's process name is constructed by concatenating the server
2759 process' NAME and a client identification string.
2760 - If the FILTER argument is non-nil, the client process will not get a
2761 separate process buffer; otherwise, the client's process buffer is a newly
2762 created buffer named after the server process' BUFFER name or process
2763 NAME concatenated with the client identification string.
2764 - The connection type and the process filter and sentinel parameters are
2765 inherited from the server process' TYPE, FILTER and SENTINEL.
2766 - The client process' contact info is set according to the client's
2767 addressing information (typically an IP address and a port number).
2768 - The client process' plist is initialized from the server's plist.
2770 Notice that the FILTER and SENTINEL args are never used directly by
2771 the server process. Also, the BUFFER argument is not used directly by
2772 the server process, but via the optional :log function, accepted (and
2773 failed) connections may be logged in the server process' buffer.
2775 The original argument list, modified with the actual connection
2776 information, is available via the `process-contact' function.
2778 usage: (make-network-process &rest ARGS) */)
2779 (nargs, args)
2780 int nargs;
2781 Lisp_Object *args;
2783 Lisp_Object proc;
2784 Lisp_Object contact;
2785 struct Lisp_Process *p;
2786 #ifdef HAVE_GETADDRINFO
2787 struct addrinfo ai, *res, *lres;
2788 struct addrinfo hints;
2789 char *portstring, portbuf[128];
2790 #else /* HAVE_GETADDRINFO */
2791 struct _emacs_addrinfo
2793 int ai_family;
2794 int ai_socktype;
2795 int ai_protocol;
2796 int ai_addrlen;
2797 struct sockaddr *ai_addr;
2798 struct _emacs_addrinfo *ai_next;
2799 } ai, *res, *lres;
2800 #endif /* HAVE_GETADDRINFO */
2801 struct sockaddr_in address_in;
2802 #ifdef HAVE_LOCAL_SOCKETS
2803 struct sockaddr_un address_un;
2804 #endif
2805 int port;
2806 int ret = 0;
2807 int xerrno = 0;
2808 int s = -1, outch, inch;
2809 struct gcpro gcpro1;
2810 int count = SPECPDL_INDEX ();
2811 int count1;
2812 Lisp_Object QCaddress; /* one of QClocal or QCremote */
2813 Lisp_Object tem;
2814 Lisp_Object name, buffer, host, service, address;
2815 Lisp_Object filter, sentinel;
2816 int is_non_blocking_client = 0;
2817 int is_server = 0, backlog = 5;
2818 int socktype;
2819 int family = -1;
2821 if (nargs == 0)
2822 return Qnil;
2824 /* Save arguments for process-contact and clone-process. */
2825 contact = Flist (nargs, args);
2826 GCPRO1 (contact);
2828 #ifdef WINDOWSNT
2829 /* Ensure socket support is loaded if available. */
2830 init_winsock (TRUE);
2831 #endif
2833 /* :type TYPE (nil: stream, datagram */
2834 tem = Fplist_get (contact, QCtype);
2835 if (NILP (tem))
2836 socktype = SOCK_STREAM;
2837 #ifdef DATAGRAM_SOCKETS
2838 else if (EQ (tem, Qdatagram))
2839 socktype = SOCK_DGRAM;
2840 #endif
2841 else
2842 error ("Unsupported connection type");
2844 /* :server BOOL */
2845 tem = Fplist_get (contact, QCserver);
2846 if (!NILP (tem))
2848 /* Don't support network sockets when non-blocking mode is
2849 not available, since a blocked Emacs is not useful. */
2850 #if defined(TERM) || (!defined(O_NONBLOCK) && !defined(O_NDELAY))
2851 error ("Network servers not supported");
2852 #else
2853 is_server = 1;
2854 if (INTEGERP (tem))
2855 backlog = XINT (tem);
2856 #endif
2859 /* Make QCaddress an alias for :local (server) or :remote (client). */
2860 QCaddress = is_server ? QClocal : QCremote;
2862 /* :wait BOOL */
2863 if (!is_server && socktype == SOCK_STREAM
2864 && (tem = Fplist_get (contact, QCnowait), !NILP (tem)))
2866 #ifndef NON_BLOCKING_CONNECT
2867 error ("Non-blocking connect not supported");
2868 #else
2869 is_non_blocking_client = 1;
2870 #endif
2873 name = Fplist_get (contact, QCname);
2874 buffer = Fplist_get (contact, QCbuffer);
2875 filter = Fplist_get (contact, QCfilter);
2876 sentinel = Fplist_get (contact, QCsentinel);
2878 CHECK_STRING (name);
2880 #ifdef TERM
2881 /* Let's handle TERM before things get complicated ... */
2882 host = Fplist_get (contact, QChost);
2883 CHECK_STRING (host);
2885 service = Fplist_get (contact, QCservice);
2886 if (INTEGERP (service))
2887 port = htons ((unsigned short) XINT (service));
2888 else
2890 struct servent *svc_info;
2891 CHECK_STRING (service);
2892 svc_info = getservbyname (SDATA (service), "tcp");
2893 if (svc_info == 0)
2894 error ("Unknown service: %s", SDATA (service));
2895 port = svc_info->s_port;
2898 s = connect_server (0);
2899 if (s < 0)
2900 report_file_error ("error creating socket", Fcons (name, Qnil));
2901 send_command (s, C_PORT, 0, "%s:%d", SDATA (host), ntohs (port));
2902 send_command (s, C_DUMB, 1, 0);
2904 #else /* not TERM */
2906 /* Initialize addrinfo structure in case we don't use getaddrinfo. */
2907 ai.ai_socktype = socktype;
2908 ai.ai_protocol = 0;
2909 ai.ai_next = NULL;
2910 res = &ai;
2912 /* :local ADDRESS or :remote ADDRESS */
2913 address = Fplist_get (contact, QCaddress);
2914 if (!NILP (address))
2916 host = service = Qnil;
2918 if (!(ai.ai_addrlen = get_lisp_to_sockaddr_size (address, &family)))
2919 error ("Malformed :address");
2920 ai.ai_family = family;
2921 ai.ai_addr = alloca (ai.ai_addrlen);
2922 conv_lisp_to_sockaddr (family, address, ai.ai_addr, ai.ai_addrlen);
2923 goto open_socket;
2926 /* :family FAMILY -- nil (for Inet), local, or integer. */
2927 tem = Fplist_get (contact, QCfamily);
2928 if (NILP (tem))
2930 #if defined(HAVE_GETADDRINFO) && defined(AF_INET6)
2931 family = AF_UNSPEC;
2932 #else
2933 family = AF_INET;
2934 #endif
2936 #ifdef HAVE_LOCAL_SOCKETS
2937 else if (EQ (tem, Qlocal))
2938 family = AF_LOCAL;
2939 #endif
2940 #ifdef AF_INET6
2941 else if (EQ (tem, Qipv6))
2942 family = AF_INET6;
2943 #endif
2944 else if (EQ (tem, Qipv4))
2945 family = AF_INET;
2946 else if (INTEGERP (tem))
2947 family = XINT (tem);
2948 else
2949 error ("Unknown address family");
2951 ai.ai_family = family;
2953 /* :service SERVICE -- string, integer (port number), or t (random port). */
2954 service = Fplist_get (contact, QCservice);
2956 #ifdef HAVE_LOCAL_SOCKETS
2957 if (family == AF_LOCAL)
2959 /* Host is not used. */
2960 host = Qnil;
2961 CHECK_STRING (service);
2962 bzero (&address_un, sizeof address_un);
2963 address_un.sun_family = AF_LOCAL;
2964 strncpy (address_un.sun_path, SDATA (service), sizeof address_un.sun_path);
2965 ai.ai_addr = (struct sockaddr *) &address_un;
2966 ai.ai_addrlen = sizeof address_un;
2967 goto open_socket;
2969 #endif
2971 /* :host HOST -- hostname, ip address, or 'local for localhost. */
2972 host = Fplist_get (contact, QChost);
2973 if (!NILP (host))
2975 if (EQ (host, Qlocal))
2976 host = build_string ("localhost");
2977 CHECK_STRING (host);
2980 /* Slow down polling to every ten seconds.
2981 Some kernels have a bug which causes retrying connect to fail
2982 after a connect. Polling can interfere with gethostbyname too. */
2983 #ifdef POLL_FOR_INPUT
2984 if (socktype == SOCK_STREAM)
2986 record_unwind_protect (unwind_stop_other_atimers, Qnil);
2987 bind_polling_period (10);
2989 #endif
2991 #ifdef HAVE_GETADDRINFO
2992 /* If we have a host, use getaddrinfo to resolve both host and service.
2993 Otherwise, use getservbyname to lookup the service. */
2994 if (!NILP (host))
2997 /* SERVICE can either be a string or int.
2998 Convert to a C string for later use by getaddrinfo. */
2999 if (EQ (service, Qt))
3000 portstring = "0";
3001 else if (INTEGERP (service))
3003 sprintf (portbuf, "%ld", (long) XINT (service));
3004 portstring = portbuf;
3006 else
3008 CHECK_STRING (service);
3009 portstring = SDATA (service);
3012 immediate_quit = 1;
3013 QUIT;
3014 memset (&hints, 0, sizeof (hints));
3015 hints.ai_flags = 0;
3016 hints.ai_family = family;
3017 hints.ai_socktype = socktype;
3018 hints.ai_protocol = 0;
3019 ret = getaddrinfo (SDATA (host), portstring, &hints, &res);
3020 if (ret)
3021 #ifdef HAVE_GAI_STRERROR
3022 error ("%s/%s %s", SDATA (host), portstring, gai_strerror(ret));
3023 #else
3024 error ("%s/%s getaddrinfo error %d", SDATA (host), portstring, ret);
3025 #endif
3026 immediate_quit = 0;
3028 goto open_socket;
3030 #endif /* HAVE_GETADDRINFO */
3032 /* We end up here if getaddrinfo is not defined, or in case no hostname
3033 has been specified (e.g. for a local server process). */
3035 if (EQ (service, Qt))
3036 port = 0;
3037 else if (INTEGERP (service))
3038 port = htons ((unsigned short) XINT (service));
3039 else
3041 struct servent *svc_info;
3042 CHECK_STRING (service);
3043 svc_info = getservbyname (SDATA (service),
3044 (socktype == SOCK_DGRAM ? "udp" : "tcp"));
3045 if (svc_info == 0)
3046 error ("Unknown service: %s", SDATA (service));
3047 port = svc_info->s_port;
3050 bzero (&address_in, sizeof address_in);
3051 address_in.sin_family = family;
3052 address_in.sin_addr.s_addr = INADDR_ANY;
3053 address_in.sin_port = port;
3055 #ifndef HAVE_GETADDRINFO
3056 if (!NILP (host))
3058 struct hostent *host_info_ptr;
3060 /* gethostbyname may fail with TRY_AGAIN, but we don't honour that,
3061 as it may `hang' Emacs for a very long time. */
3062 immediate_quit = 1;
3063 QUIT;
3064 host_info_ptr = gethostbyname (SDATA (host));
3065 immediate_quit = 0;
3067 if (host_info_ptr)
3069 bcopy (host_info_ptr->h_addr, (char *) &address_in.sin_addr,
3070 host_info_ptr->h_length);
3071 family = host_info_ptr->h_addrtype;
3072 address_in.sin_family = family;
3074 else
3075 /* Attempt to interpret host as numeric inet address */
3077 IN_ADDR numeric_addr;
3078 numeric_addr = inet_addr ((char *) SDATA (host));
3079 if (NUMERIC_ADDR_ERROR)
3080 error ("Unknown host \"%s\"", SDATA (host));
3082 bcopy ((char *)&numeric_addr, (char *) &address_in.sin_addr,
3083 sizeof (address_in.sin_addr));
3087 #endif /* not HAVE_GETADDRINFO */
3089 ai.ai_family = family;
3090 ai.ai_addr = (struct sockaddr *) &address_in;
3091 ai.ai_addrlen = sizeof address_in;
3093 open_socket:
3095 /* Kernel bugs (on Ultrix at least) cause lossage (not just EINTR)
3096 when connect is interrupted. So let's not let it get interrupted.
3097 Note we do not turn off polling, because polling is only used
3098 when not interrupt_input, and thus not normally used on the systems
3099 which have this bug. On systems which use polling, there's no way
3100 to quit if polling is turned off. */
3101 if (interrupt_input
3102 && !is_server && socktype == SOCK_STREAM)
3104 /* Comment from KFS: The original open-network-stream code
3105 didn't unwind protect this, but it seems like the proper
3106 thing to do. In any case, I don't see how it could harm to
3107 do this -- and it makes cleanup (using unbind_to) easier. */
3108 record_unwind_protect (unwind_request_sigio, Qnil);
3109 unrequest_sigio ();
3112 /* Do this in case we never enter the for-loop below. */
3113 count1 = SPECPDL_INDEX ();
3114 s = -1;
3116 for (lres = res; lres; lres = lres->ai_next)
3118 int optn, optbits;
3120 retry_connect:
3122 s = socket (lres->ai_family, lres->ai_socktype, lres->ai_protocol);
3123 if (s < 0)
3125 xerrno = errno;
3126 continue;
3129 #ifdef DATAGRAM_SOCKETS
3130 if (!is_server && socktype == SOCK_DGRAM)
3131 break;
3132 #endif /* DATAGRAM_SOCKETS */
3134 #ifdef NON_BLOCKING_CONNECT
3135 if (is_non_blocking_client)
3137 #ifdef O_NONBLOCK
3138 ret = fcntl (s, F_SETFL, O_NONBLOCK);
3139 #else
3140 ret = fcntl (s, F_SETFL, O_NDELAY);
3141 #endif
3142 if (ret < 0)
3144 xerrno = errno;
3145 emacs_close (s);
3146 s = -1;
3147 continue;
3150 #endif
3152 /* Make us close S if quit. */
3153 record_unwind_protect (close_file_unwind, make_number (s));
3155 /* Parse network options in the arg list.
3156 We simply ignore anything which isn't a known option (including other keywords).
3157 An error is signalled if setting a known option fails. */
3158 for (optn = optbits = 0; optn < nargs-1; optn += 2)
3159 optbits |= set_socket_option (s, args[optn], args[optn+1]);
3161 if (is_server)
3163 /* Configure as a server socket. */
3165 /* SO_REUSEADDR = 1 is default for server sockets; must specify
3166 explicit :reuseaddr key to override this. */
3167 #ifdef HAVE_LOCAL_SOCKETS
3168 if (family != AF_LOCAL)
3169 #endif
3170 if (!(optbits & (1 << OPIX_REUSEADDR)))
3172 int optval = 1;
3173 if (setsockopt (s, SOL_SOCKET, SO_REUSEADDR, &optval, sizeof optval))
3174 report_file_error ("Cannot set reuse option on server socket", Qnil);
3177 if (bind (s, lres->ai_addr, lres->ai_addrlen))
3178 report_file_error ("Cannot bind server socket", Qnil);
3180 #ifdef HAVE_GETSOCKNAME
3181 if (EQ (service, Qt))
3183 struct sockaddr_in sa1;
3184 int len1 = sizeof (sa1);
3185 if (getsockname (s, (struct sockaddr *)&sa1, &len1) == 0)
3187 ((struct sockaddr_in *)(lres->ai_addr))->sin_port = sa1.sin_port;
3188 service = make_number (ntohs (sa1.sin_port));
3189 contact = Fplist_put (contact, QCservice, service);
3192 #endif
3194 if (socktype == SOCK_STREAM && listen (s, backlog))
3195 report_file_error ("Cannot listen on server socket", Qnil);
3197 break;
3200 immediate_quit = 1;
3201 QUIT;
3203 /* This turns off all alarm-based interrupts; the
3204 bind_polling_period call above doesn't always turn all the
3205 short-interval ones off, especially if interrupt_input is
3206 set.
3208 It'd be nice to be able to control the connect timeout
3209 though. Would non-blocking connect calls be portable?
3211 This used to be conditioned by HAVE_GETADDRINFO. Why? */
3213 turn_on_atimers (0);
3215 ret = connect (s, lres->ai_addr, lres->ai_addrlen);
3216 xerrno = errno;
3218 turn_on_atimers (1);
3220 if (ret == 0 || xerrno == EISCONN)
3222 /* The unwind-protect will be discarded afterwards.
3223 Likewise for immediate_quit. */
3224 break;
3227 #ifdef NON_BLOCKING_CONNECT
3228 #ifdef EINPROGRESS
3229 if (is_non_blocking_client && xerrno == EINPROGRESS)
3230 break;
3231 #else
3232 #ifdef EWOULDBLOCK
3233 if (is_non_blocking_client && xerrno == EWOULDBLOCK)
3234 break;
3235 #endif
3236 #endif
3237 #endif
3239 immediate_quit = 0;
3241 /* Discard the unwind protect closing S. */
3242 specpdl_ptr = specpdl + count1;
3243 emacs_close (s);
3244 s = -1;
3246 if (xerrno == EINTR)
3247 goto retry_connect;
3250 if (s >= 0)
3252 #ifdef DATAGRAM_SOCKETS
3253 if (socktype == SOCK_DGRAM)
3255 if (datagram_address[s].sa)
3256 abort ();
3257 datagram_address[s].sa = (struct sockaddr *) xmalloc (lres->ai_addrlen);
3258 datagram_address[s].len = lres->ai_addrlen;
3259 if (is_server)
3261 Lisp_Object remote;
3262 bzero (datagram_address[s].sa, lres->ai_addrlen);
3263 if (remote = Fplist_get (contact, QCremote), !NILP (remote))
3265 int rfamily, rlen;
3266 rlen = get_lisp_to_sockaddr_size (remote, &rfamily);
3267 if (rfamily == lres->ai_family && rlen == lres->ai_addrlen)
3268 conv_lisp_to_sockaddr (rfamily, remote,
3269 datagram_address[s].sa, rlen);
3272 else
3273 bcopy (lres->ai_addr, datagram_address[s].sa, lres->ai_addrlen);
3275 #endif
3276 contact = Fplist_put (contact, QCaddress,
3277 conv_sockaddr_to_lisp (lres->ai_addr, lres->ai_addrlen));
3278 #ifdef HAVE_GETSOCKNAME
3279 if (!is_server)
3281 struct sockaddr_in sa1;
3282 int len1 = sizeof (sa1);
3283 if (getsockname (s, (struct sockaddr *)&sa1, &len1) == 0)
3284 contact = Fplist_put (contact, QClocal,
3285 conv_sockaddr_to_lisp (&sa1, len1));
3287 #endif
3290 #ifdef HAVE_GETADDRINFO
3291 if (res != &ai)
3292 freeaddrinfo (res);
3293 #endif
3295 immediate_quit = 0;
3297 /* Discard the unwind protect for closing S, if any. */
3298 specpdl_ptr = specpdl + count1;
3300 /* Unwind bind_polling_period and request_sigio. */
3301 unbind_to (count, Qnil);
3303 if (s < 0)
3305 /* If non-blocking got this far - and failed - assume non-blocking is
3306 not supported after all. This is probably a wrong assumption, but
3307 the normal blocking calls to open-network-stream handles this error
3308 better. */
3309 if (is_non_blocking_client)
3310 return Qnil;
3312 errno = xerrno;
3313 if (is_server)
3314 report_file_error ("make server process failed", contact);
3315 else
3316 report_file_error ("make client process failed", contact);
3319 #endif /* not TERM */
3321 inch = s;
3322 outch = s;
3324 if (!NILP (buffer))
3325 buffer = Fget_buffer_create (buffer);
3326 proc = make_process (name);
3328 chan_process[inch] = proc;
3330 #ifdef O_NONBLOCK
3331 fcntl (inch, F_SETFL, O_NONBLOCK);
3332 #else
3333 #ifdef O_NDELAY
3334 fcntl (inch, F_SETFL, O_NDELAY);
3335 #endif
3336 #endif
3338 p = XPROCESS (proc);
3340 p->childp = contact;
3341 p->plist = Fcopy_sequence (Fplist_get (contact, QCplist));
3343 p->buffer = buffer;
3344 p->sentinel = sentinel;
3345 p->filter = filter;
3346 p->filter_multibyte = buffer_defaults.enable_multibyte_characters;
3347 /* Override the above only if :filter-multibyte is specified. */
3348 if (! NILP (Fplist_member (contact, QCfilter_multibyte)))
3349 p->filter_multibyte = Fplist_get (contact, QCfilter_multibyte);
3350 p->log = Fplist_get (contact, QClog);
3351 if (tem = Fplist_get (contact, QCnoquery), !NILP (tem))
3352 p->kill_without_query = Qt;
3353 if ((tem = Fplist_get (contact, QCstop), !NILP (tem)))
3354 p->command = Qt;
3355 p->pid = 0;
3356 XSETINT (p->infd, inch);
3357 XSETINT (p->outfd, outch);
3358 if (is_server && socktype == SOCK_STREAM)
3359 p->status = Qlisten;
3361 /* Make the process marker point into the process buffer (if any). */
3362 if (BUFFERP (buffer))
3363 set_marker_both (p->mark, buffer,
3364 BUF_ZV (XBUFFER (buffer)),
3365 BUF_ZV_BYTE (XBUFFER (buffer)));
3367 #ifdef NON_BLOCKING_CONNECT
3368 if (is_non_blocking_client)
3370 /* We may get here if connect did succeed immediately. However,
3371 in that case, we still need to signal this like a non-blocking
3372 connection. */
3373 p->status = Qconnect;
3374 if (!FD_ISSET (inch, &connect_wait_mask))
3376 FD_SET (inch, &connect_wait_mask);
3377 num_pending_connects++;
3380 else
3381 #endif
3382 /* A server may have a client filter setting of Qt, but it must
3383 still listen for incoming connects unless it is stopped. */
3384 if ((!EQ (p->filter, Qt) && !EQ (p->command, Qt))
3385 || (EQ (p->status, Qlisten) && NILP (p->command)))
3387 FD_SET (inch, &input_wait_mask);
3388 FD_SET (inch, &non_keyboard_wait_mask);
3391 if (inch > max_process_desc)
3392 max_process_desc = inch;
3394 tem = Fplist_member (contact, QCcoding);
3395 if (!NILP (tem) && (!CONSP (tem) || !CONSP (XCDR (tem))))
3396 tem = Qnil; /* No error message (too late!). */
3399 /* Setup coding systems for communicating with the network stream. */
3400 struct gcpro gcpro1;
3401 /* Qt denotes we have not yet called Ffind_operation_coding_system. */
3402 Lisp_Object coding_systems = Qt;
3403 Lisp_Object args[5], val;
3405 if (!NILP (tem))
3407 val = XCAR (XCDR (tem));
3408 if (CONSP (val))
3409 val = XCAR (val);
3411 else if (!NILP (Vcoding_system_for_read))
3412 val = Vcoding_system_for_read;
3413 else if ((!NILP (buffer) && NILP (XBUFFER (buffer)->enable_multibyte_characters))
3414 || (NILP (buffer) && NILP (buffer_defaults.enable_multibyte_characters)))
3415 /* We dare not decode end-of-line format by setting VAL to
3416 Qraw_text, because the existing Emacs Lisp libraries
3417 assume that they receive bare code including a sequene of
3418 CR LF. */
3419 val = Qnil;
3420 else
3422 if (NILP (host) || NILP (service))
3423 coding_systems = Qnil;
3424 else
3426 args[0] = Qopen_network_stream, args[1] = name,
3427 args[2] = buffer, args[3] = host, args[4] = service;
3428 GCPRO1 (proc);
3429 coding_systems = Ffind_operation_coding_system (5, args);
3430 UNGCPRO;
3432 if (CONSP (coding_systems))
3433 val = XCAR (coding_systems);
3434 else if (CONSP (Vdefault_process_coding_system))
3435 val = XCAR (Vdefault_process_coding_system);
3436 else
3437 val = Qnil;
3439 p->decode_coding_system = val;
3441 if (!NILP (tem))
3443 val = XCAR (XCDR (tem));
3444 if (CONSP (val))
3445 val = XCDR (val);
3447 else if (!NILP (Vcoding_system_for_write))
3448 val = Vcoding_system_for_write;
3449 else if (NILP (current_buffer->enable_multibyte_characters))
3450 val = Qnil;
3451 else
3453 if (EQ (coding_systems, Qt))
3455 if (NILP (host) || NILP (service))
3456 coding_systems = Qnil;
3457 else
3459 args[0] = Qopen_network_stream, args[1] = name,
3460 args[2] = buffer, args[3] = host, args[4] = service;
3461 GCPRO1 (proc);
3462 coding_systems = Ffind_operation_coding_system (5, args);
3463 UNGCPRO;
3466 if (CONSP (coding_systems))
3467 val = XCDR (coding_systems);
3468 else if (CONSP (Vdefault_process_coding_system))
3469 val = XCDR (Vdefault_process_coding_system);
3470 else
3471 val = Qnil;
3473 p->encode_coding_system = val;
3475 setup_process_coding_systems (proc);
3477 p->decoding_buf = make_uninit_string (0);
3478 p->decoding_carryover = make_number (0);
3479 p->encoding_buf = make_uninit_string (0);
3480 p->encoding_carryover = make_number (0);
3482 p->inherit_coding_system_flag
3483 = (!NILP (tem) || NILP (buffer) || !inherit_process_coding_system
3484 ? Qnil : Qt);
3486 UNGCPRO;
3487 return proc;
3489 #endif /* HAVE_SOCKETS */
3492 #if defined(HAVE_SOCKETS) && defined(HAVE_NET_IF_H) && defined(HAVE_SYS_IOCTL_H)
3494 #ifdef SIOCGIFCONF
3495 DEFUN ("network-interface-list", Fnetwork_interface_list, Snetwork_interface_list, 0, 0, 0,
3496 doc: /* Return an alist of all network interfaces and their network address.
3497 Each element is a cons, the car of which is a string containing the
3498 interface name, and the cdr is the network address in internal
3499 format; see the description of ADDRESS in `make-network-process'. */)
3502 struct ifconf ifconf;
3503 struct ifreq *ifreqs = NULL;
3504 int ifaces = 0;
3505 int buf_size, s;
3506 Lisp_Object res;
3508 s = socket (AF_INET, SOCK_STREAM, 0);
3509 if (s < 0)
3510 return Qnil;
3512 again:
3513 ifaces += 25;
3514 buf_size = ifaces * sizeof(ifreqs[0]);
3515 ifreqs = (struct ifreq *)xrealloc(ifreqs, buf_size);
3516 if (!ifreqs)
3518 close (s);
3519 return Qnil;
3522 ifconf.ifc_len = buf_size;
3523 ifconf.ifc_req = ifreqs;
3524 if (ioctl (s, SIOCGIFCONF, &ifconf))
3526 close (s);
3527 return Qnil;
3530 if (ifconf.ifc_len == buf_size)
3531 goto again;
3533 close (s);
3534 ifaces = ifconf.ifc_len / sizeof (ifreqs[0]);
3536 res = Qnil;
3537 while (--ifaces >= 0)
3539 struct ifreq *ifq = &ifreqs[ifaces];
3540 char namebuf[sizeof (ifq->ifr_name) + 1];
3541 if (ifq->ifr_addr.sa_family != AF_INET)
3542 continue;
3543 bcopy (ifq->ifr_name, namebuf, sizeof (ifq->ifr_name));
3544 namebuf[sizeof (ifq->ifr_name)] = 0;
3545 res = Fcons (Fcons (build_string (namebuf),
3546 conv_sockaddr_to_lisp (&ifq->ifr_addr,
3547 sizeof (struct sockaddr))),
3548 res);
3551 return res;
3553 #endif /* SIOCGIFCONF */
3555 #if defined(SIOCGIFADDR) || defined(SIOCGIFHWADDR) || defined(SIOCGIFFLAGS)
3557 struct ifflag_def {
3558 int flag_bit;
3559 char *flag_sym;
3562 static struct ifflag_def ifflag_table[] = {
3563 #ifdef IFF_UP
3564 { IFF_UP, "up" },
3565 #endif
3566 #ifdef IFF_BROADCAST
3567 { IFF_BROADCAST, "broadcast" },
3568 #endif
3569 #ifdef IFF_DEBUG
3570 { IFF_DEBUG, "debug" },
3571 #endif
3572 #ifdef IFF_LOOPBACK
3573 { IFF_LOOPBACK, "loopback" },
3574 #endif
3575 #ifdef IFF_POINTOPOINT
3576 { IFF_POINTOPOINT, "pointopoint" },
3577 #endif
3578 #ifdef IFF_RUNNING
3579 { IFF_RUNNING, "running" },
3580 #endif
3581 #ifdef IFF_NOARP
3582 { IFF_NOARP, "noarp" },
3583 #endif
3584 #ifdef IFF_PROMISC
3585 { IFF_PROMISC, "promisc" },
3586 #endif
3587 #ifdef IFF_NOTRAILERS
3588 { IFF_NOTRAILERS, "notrailers" },
3589 #endif
3590 #ifdef IFF_ALLMULTI
3591 { IFF_ALLMULTI, "allmulti" },
3592 #endif
3593 #ifdef IFF_MASTER
3594 { IFF_MASTER, "master" },
3595 #endif
3596 #ifdef IFF_SLAVE
3597 { IFF_SLAVE, "slave" },
3598 #endif
3599 #ifdef IFF_MULTICAST
3600 { IFF_MULTICAST, "multicast" },
3601 #endif
3602 #ifdef IFF_PORTSEL
3603 { IFF_PORTSEL, "portsel" },
3604 #endif
3605 #ifdef IFF_AUTOMEDIA
3606 { IFF_AUTOMEDIA, "automedia" },
3607 #endif
3608 #ifdef IFF_DYNAMIC
3609 { IFF_DYNAMIC, "dynamic" },
3610 #endif
3611 #ifdef IFF_OACTIVE
3612 { IFF_OACTIVE, "oactive" }, /* OpenBSD: transmission in progress */
3613 #endif
3614 #ifdef IFF_SIMPLEX
3615 { IFF_SIMPLEX, "simplex" }, /* OpenBSD: can't hear own transmissions */
3616 #endif
3617 #ifdef IFF_LINK0
3618 { IFF_LINK0, "link0" }, /* OpenBSD: per link layer defined bit */
3619 #endif
3620 #ifdef IFF_LINK1
3621 { IFF_LINK1, "link1" }, /* OpenBSD: per link layer defined bit */
3622 #endif
3623 #ifdef IFF_LINK2
3624 { IFF_LINK2, "link2" }, /* OpenBSD: per link layer defined bit */
3625 #endif
3626 { 0, 0 }
3629 DEFUN ("network-interface-info", Fnetwork_interface_info, Snetwork_interface_info, 1, 1, 0,
3630 doc: /* Return information about network interface named IFNAME.
3631 The return value is a list (ADDR BCAST NETMASK HWADDR FLAGS),
3632 where ADDR is the layer 3 address, BCAST is the layer 3 broadcast address,
3633 NETMASK is the layer 3 network mask, HWADDR is the layer 2 addres, and
3634 FLAGS is the current flags of the interface. */)
3635 (ifname)
3636 Lisp_Object ifname;
3638 struct ifreq rq;
3639 Lisp_Object res = Qnil;
3640 Lisp_Object elt;
3641 int s;
3642 int any = 0;
3644 CHECK_STRING (ifname);
3646 bzero (rq.ifr_name, sizeof rq.ifr_name);
3647 strncpy (rq.ifr_name, SDATA (ifname), sizeof (rq.ifr_name));
3649 s = socket (AF_INET, SOCK_STREAM, 0);
3650 if (s < 0)
3651 return Qnil;
3653 elt = Qnil;
3654 #if defined(SIOCGIFFLAGS) && defined(HAVE_STRUCT_IFREQ_IFR_FLAGS)
3655 if (ioctl (s, SIOCGIFFLAGS, &rq) == 0)
3657 int flags = rq.ifr_flags;
3658 struct ifflag_def *fp;
3659 int fnum;
3661 any++;
3662 for (fp = ifflag_table; flags != 0 && fp->flag_sym; fp++)
3664 if (flags & fp->flag_bit)
3666 elt = Fcons (intern (fp->flag_sym), elt);
3667 flags -= fp->flag_bit;
3670 for (fnum = 0; flags && fnum < 32; fnum++)
3672 if (flags & (1 << fnum))
3674 elt = Fcons (make_number (fnum), elt);
3678 #endif
3679 res = Fcons (elt, res);
3681 elt = Qnil;
3682 #if defined(SIOCGIFHWADDR) && defined(HAVE_STRUCT_IFREQ_IFR_HWADDR)
3683 if (ioctl (s, SIOCGIFHWADDR, &rq) == 0)
3685 Lisp_Object hwaddr = Fmake_vector (make_number (6), Qnil);
3686 register struct Lisp_Vector *p = XVECTOR (hwaddr);
3687 int n;
3689 any++;
3690 for (n = 0; n < 6; n++)
3691 p->contents[n] = make_number (((unsigned char *)&rq.ifr_hwaddr.sa_data[0])[n]);
3692 elt = Fcons (make_number (rq.ifr_hwaddr.sa_family), hwaddr);
3694 #endif
3695 res = Fcons (elt, res);
3697 elt = Qnil;
3698 #if defined(SIOCGIFNETMASK) && (defined(HAVE_STRUCT_IFREQ_IFR_NETMASK) || defined(HAVE_STRUCT_IFREQ_IFR_ADDR))
3699 if (ioctl (s, SIOCGIFNETMASK, &rq) == 0)
3701 any++;
3702 #ifdef HAVE_STRUCT_IFREQ_IFR_NETMASK
3703 elt = conv_sockaddr_to_lisp (&rq.ifr_netmask, sizeof (rq.ifr_netmask));
3704 #else
3705 elt = conv_sockaddr_to_lisp (&rq.ifr_addr, sizeof (rq.ifr_addr));
3706 #endif
3708 #endif
3709 res = Fcons (elt, res);
3711 elt = Qnil;
3712 #if defined(SIOCGIFBRDADDR) && defined(HAVE_STRUCT_IFREQ_IFR_BROADADDR)
3713 if (ioctl (s, SIOCGIFBRDADDR, &rq) == 0)
3715 any++;
3716 elt = conv_sockaddr_to_lisp (&rq.ifr_broadaddr, sizeof (rq.ifr_broadaddr));
3718 #endif
3719 res = Fcons (elt, res);
3721 elt = Qnil;
3722 #if defined(SIOCGIFADDR) && defined(HAVE_STRUCT_IFREQ_IFR_ADDR)
3723 if (ioctl (s, SIOCGIFADDR, &rq) == 0)
3725 any++;
3726 elt = conv_sockaddr_to_lisp (&rq.ifr_addr, sizeof (rq.ifr_addr));
3728 #endif
3729 res = Fcons (elt, res);
3731 close (s);
3733 return any ? res : Qnil;
3735 #endif
3736 #endif /* HAVE_SOCKETS */
3738 /* Turn off input and output for process PROC. */
3740 void
3741 deactivate_process (proc)
3742 Lisp_Object proc;
3744 register int inchannel, outchannel;
3745 register struct Lisp_Process *p = XPROCESS (proc);
3747 inchannel = XINT (p->infd);
3748 outchannel = XINT (p->outfd);
3750 #ifdef ADAPTIVE_READ_BUFFERING
3751 if (XINT (p->read_output_delay) > 0)
3753 if (--process_output_delay_count < 0)
3754 process_output_delay_count = 0;
3755 XSETINT (p->read_output_delay, 0);
3756 p->read_output_skip = Qnil;
3758 #endif
3760 if (inchannel >= 0)
3762 /* Beware SIGCHLD hereabouts. */
3763 flush_pending_output (inchannel);
3764 #ifdef VMS
3766 VMS_PROC_STUFF *get_vms_process_pointer (), *vs;
3767 sys$dassgn (outchannel);
3768 vs = get_vms_process_pointer (p->pid);
3769 if (vs)
3770 give_back_vms_process_stuff (vs);
3772 #else
3773 emacs_close (inchannel);
3774 if (outchannel >= 0 && outchannel != inchannel)
3775 emacs_close (outchannel);
3776 #endif
3778 XSETINT (p->infd, -1);
3779 XSETINT (p->outfd, -1);
3780 #ifdef DATAGRAM_SOCKETS
3781 if (DATAGRAM_CHAN_P (inchannel))
3783 xfree (datagram_address[inchannel].sa);
3784 datagram_address[inchannel].sa = 0;
3785 datagram_address[inchannel].len = 0;
3787 #endif
3788 chan_process[inchannel] = Qnil;
3789 FD_CLR (inchannel, &input_wait_mask);
3790 FD_CLR (inchannel, &non_keyboard_wait_mask);
3791 #ifdef NON_BLOCKING_CONNECT
3792 if (FD_ISSET (inchannel, &connect_wait_mask))
3794 FD_CLR (inchannel, &connect_wait_mask);
3795 if (--num_pending_connects < 0)
3796 abort ();
3798 #endif
3799 if (inchannel == max_process_desc)
3801 int i;
3802 /* We just closed the highest-numbered process input descriptor,
3803 so recompute the highest-numbered one now. */
3804 max_process_desc = 0;
3805 for (i = 0; i < MAXDESC; i++)
3806 if (!NILP (chan_process[i]))
3807 max_process_desc = i;
3812 /* Close all descriptors currently in use for communication
3813 with subprocess. This is used in a newly-forked subprocess
3814 to get rid of irrelevant descriptors. */
3816 void
3817 close_process_descs ()
3819 #ifndef WINDOWSNT
3820 int i;
3821 for (i = 0; i < MAXDESC; i++)
3823 Lisp_Object process;
3824 process = chan_process[i];
3825 if (!NILP (process))
3827 int in = XINT (XPROCESS (process)->infd);
3828 int out = XINT (XPROCESS (process)->outfd);
3829 if (in >= 0)
3830 emacs_close (in);
3831 if (out >= 0 && in != out)
3832 emacs_close (out);
3835 #endif
3838 DEFUN ("accept-process-output", Faccept_process_output, Saccept_process_output,
3839 0, 4, 0,
3840 doc: /* Allow any pending output from subprocesses to be read by Emacs.
3841 It is read into the process' buffers or given to their filter functions.
3842 Non-nil arg PROCESS means do not return until some output has been received
3843 from PROCESS.
3845 Non-nil second arg SECONDS and third arg MILLISEC are number of
3846 seconds and milliseconds to wait; return after that much time whether
3847 or not there is input. If SECONDS is a floating point number,
3848 it specifies a fractional number of seconds to wait.
3850 If optional fourth arg JUST-THIS-ONE is non-nil, only accept output
3851 from PROCESS, suspending reading output from other processes.
3852 If JUST-THIS-ONE is an integer, don't run any timers either.
3853 Return non-nil iff we received any output before the timeout expired. */)
3854 (process, seconds, millisec, just_this_one)
3855 register Lisp_Object process, seconds, millisec, just_this_one;
3857 int secs, usecs = 0;
3859 if (! NILP (process))
3860 CHECK_PROCESS (process);
3861 else
3862 just_this_one = Qnil;
3864 if (!NILP (seconds))
3866 if (INTEGERP (seconds))
3867 secs = XINT (seconds);
3868 else if (FLOATP (seconds))
3870 double timeout = XFLOAT_DATA (seconds);
3871 secs = (int) timeout;
3872 usecs = (int) ((timeout - (double) secs) * 1000000);
3874 else
3875 wrong_type_argument (Qnumberp, seconds);
3877 if (INTEGERP (millisec))
3879 int carry;
3880 usecs += XINT (millisec) * 1000;
3881 carry = usecs / 1000000;
3882 secs += carry;
3883 if ((usecs -= carry * 1000000) < 0)
3885 secs--;
3886 usecs += 1000000;
3890 if (secs < 0 || (secs == 0 && usecs == 0))
3891 secs = -1, usecs = 0;
3893 else
3894 secs = NILP (process) ? -1 : 0;
3896 return
3897 (wait_reading_process_output (secs, usecs, 0, 0,
3898 Qnil,
3899 !NILP (process) ? XPROCESS (process) : NULL,
3900 NILP (just_this_one) ? 0 :
3901 !INTEGERP (just_this_one) ? 1 : -1)
3902 ? Qt : Qnil);
3905 /* Accept a connection for server process SERVER on CHANNEL. */
3907 static int connect_counter = 0;
3909 static void
3910 server_accept_connection (server, channel)
3911 Lisp_Object server;
3912 int channel;
3914 Lisp_Object proc, caller, name, buffer;
3915 Lisp_Object contact, host, service;
3916 struct Lisp_Process *ps= XPROCESS (server);
3917 struct Lisp_Process *p;
3918 int s;
3919 union u_sockaddr {
3920 struct sockaddr sa;
3921 struct sockaddr_in in;
3922 #ifdef AF_INET6
3923 struct sockaddr_in6 in6;
3924 #endif
3925 #ifdef HAVE_LOCAL_SOCKETS
3926 struct sockaddr_un un;
3927 #endif
3928 } saddr;
3929 int len = sizeof saddr;
3931 s = accept (channel, &saddr.sa, &len);
3933 if (s < 0)
3935 int code = errno;
3937 if (code == EAGAIN)
3938 return;
3939 #ifdef EWOULDBLOCK
3940 if (code == EWOULDBLOCK)
3941 return;
3942 #endif
3944 if (!NILP (ps->log))
3945 call3 (ps->log, server, Qnil,
3946 concat3 (build_string ("accept failed with code"),
3947 Fnumber_to_string (make_number (code)),
3948 build_string ("\n")));
3949 return;
3952 connect_counter++;
3954 /* Setup a new process to handle the connection. */
3956 /* Generate a unique identification of the caller, and build contact
3957 information for this process. */
3958 host = Qt;
3959 service = Qnil;
3960 switch (saddr.sa.sa_family)
3962 case AF_INET:
3964 Lisp_Object args[5];
3965 unsigned char *ip = (unsigned char *)&saddr.in.sin_addr.s_addr;
3966 args[0] = build_string ("%d.%d.%d.%d");
3967 args[1] = make_number (*ip++);
3968 args[2] = make_number (*ip++);
3969 args[3] = make_number (*ip++);
3970 args[4] = make_number (*ip++);
3971 host = Fformat (5, args);
3972 service = make_number (ntohs (saddr.in.sin_port));
3974 args[0] = build_string (" <%s:%d>");
3975 args[1] = host;
3976 args[2] = service;
3977 caller = Fformat (3, args);
3979 break;
3981 #ifdef AF_INET6
3982 case AF_INET6:
3984 Lisp_Object args[9];
3985 uint16_t *ip6 = (uint16_t *)&saddr.in6.sin6_addr;
3986 int i;
3987 args[0] = build_string ("%x:%x:%x:%x:%x:%x:%x:%x");
3988 for (i = 0; i < 8; i++)
3989 args[i+1] = make_number (ntohs(ip6[i]));
3990 host = Fformat (9, args);
3991 service = make_number (ntohs (saddr.in.sin_port));
3993 args[0] = build_string (" <[%s]:%d>");
3994 args[1] = host;
3995 args[2] = service;
3996 caller = Fformat (3, args);
3998 break;
3999 #endif
4001 #ifdef HAVE_LOCAL_SOCKETS
4002 case AF_LOCAL:
4003 #endif
4004 default:
4005 caller = Fnumber_to_string (make_number (connect_counter));
4006 caller = concat3 (build_string (" <*"), caller, build_string ("*>"));
4007 break;
4010 /* Create a new buffer name for this process if it doesn't have a
4011 filter. The new buffer name is based on the buffer name or
4012 process name of the server process concatenated with the caller
4013 identification. */
4015 if (!NILP (ps->filter) && !EQ (ps->filter, Qt))
4016 buffer = Qnil;
4017 else
4019 buffer = ps->buffer;
4020 if (!NILP (buffer))
4021 buffer = Fbuffer_name (buffer);
4022 else
4023 buffer = ps->name;
4024 if (!NILP (buffer))
4026 buffer = concat2 (buffer, caller);
4027 buffer = Fget_buffer_create (buffer);
4031 /* Generate a unique name for the new server process. Combine the
4032 server process name with the caller identification. */
4034 name = concat2 (ps->name, caller);
4035 proc = make_process (name);
4037 chan_process[s] = proc;
4039 #ifdef O_NONBLOCK
4040 fcntl (s, F_SETFL, O_NONBLOCK);
4041 #else
4042 #ifdef O_NDELAY
4043 fcntl (s, F_SETFL, O_NDELAY);
4044 #endif
4045 #endif
4047 p = XPROCESS (proc);
4049 /* Build new contact information for this setup. */
4050 contact = Fcopy_sequence (ps->childp);
4051 contact = Fplist_put (contact, QCserver, Qnil);
4052 contact = Fplist_put (contact, QChost, host);
4053 if (!NILP (service))
4054 contact = Fplist_put (contact, QCservice, service);
4055 contact = Fplist_put (contact, QCremote,
4056 conv_sockaddr_to_lisp (&saddr.sa, len));
4057 #ifdef HAVE_GETSOCKNAME
4058 len = sizeof saddr;
4059 if (getsockname (s, &saddr.sa, &len) == 0)
4060 contact = Fplist_put (contact, QClocal,
4061 conv_sockaddr_to_lisp (&saddr.sa, len));
4062 #endif
4064 p->childp = contact;
4065 p->plist = Fcopy_sequence (ps->plist);
4067 p->buffer = buffer;
4068 p->sentinel = ps->sentinel;
4069 p->filter = ps->filter;
4070 p->command = Qnil;
4071 p->pid = 0;
4072 XSETINT (p->infd, s);
4073 XSETINT (p->outfd, s);
4074 p->status = Qrun;
4076 /* Client processes for accepted connections are not stopped initially. */
4077 if (!EQ (p->filter, Qt))
4079 FD_SET (s, &input_wait_mask);
4080 FD_SET (s, &non_keyboard_wait_mask);
4083 if (s > max_process_desc)
4084 max_process_desc = s;
4086 /* Setup coding system for new process based on server process.
4087 This seems to be the proper thing to do, as the coding system
4088 of the new process should reflect the settings at the time the
4089 server socket was opened; not the current settings. */
4091 p->decode_coding_system = ps->decode_coding_system;
4092 p->encode_coding_system = ps->encode_coding_system;
4093 setup_process_coding_systems (proc);
4095 p->decoding_buf = make_uninit_string (0);
4096 p->decoding_carryover = make_number (0);
4097 p->encoding_buf = make_uninit_string (0);
4098 p->encoding_carryover = make_number (0);
4100 p->inherit_coding_system_flag
4101 = (NILP (buffer) ? Qnil : ps->inherit_coding_system_flag);
4103 if (!NILP (ps->log))
4104 call3 (ps->log, server, proc,
4105 concat3 (build_string ("accept from "),
4106 (STRINGP (host) ? host : build_string ("-")),
4107 build_string ("\n")));
4109 if (!NILP (p->sentinel))
4110 exec_sentinel (proc,
4111 concat3 (build_string ("open from "),
4112 (STRINGP (host) ? host : build_string ("-")),
4113 build_string ("\n")));
4116 /* This variable is different from waiting_for_input in keyboard.c.
4117 It is used to communicate to a lisp process-filter/sentinel (via the
4118 function Fwaiting_for_user_input_p below) whether Emacs was waiting
4119 for user-input when that process-filter was called.
4120 waiting_for_input cannot be used as that is by definition 0 when
4121 lisp code is being evalled.
4122 This is also used in record_asynch_buffer_change.
4123 For that purpose, this must be 0
4124 when not inside wait_reading_process_output. */
4125 static int waiting_for_user_input_p;
4127 /* This is here so breakpoints can be put on it. */
4128 static void
4129 wait_reading_process_output_1 ()
4133 /* Read and dispose of subprocess output while waiting for timeout to
4134 elapse and/or keyboard input to be available.
4136 TIME_LIMIT is:
4137 timeout in seconds, or
4138 zero for no limit, or
4139 -1 means gobble data immediately available but don't wait for any.
4141 MICROSECS is:
4142 an additional duration to wait, measured in microseconds.
4143 If this is nonzero and time_limit is 0, then the timeout
4144 consists of MICROSECS only.
4146 READ_KBD is a lisp value:
4147 0 to ignore keyboard input, or
4148 1 to return when input is available, or
4149 -1 meaning caller will actually read the input, so don't throw to
4150 the quit handler, or
4152 DO_DISPLAY != 0 means redisplay should be done to show subprocess
4153 output that arrives.
4155 If WAIT_FOR_CELL is a cons cell, wait until its car is non-nil
4156 (and gobble terminal input into the buffer if any arrives).
4158 If WAIT_PROC is specified, wait until something arrives from that
4159 process. The return value is true iff we read some input from
4160 that process.
4162 If JUST_WAIT_PROC is non-nil, handle only output from WAIT_PROC
4163 (suspending output from other processes). A negative value
4164 means don't run any timers either.
4166 If WAIT_PROC is specified, then the function returns true iff we
4167 received input from that process before the timeout elapsed.
4168 Otherwise, return true iff we received input from any process. */
4171 wait_reading_process_output (time_limit, microsecs, read_kbd, do_display,
4172 wait_for_cell, wait_proc, just_wait_proc)
4173 int time_limit, microsecs, read_kbd, do_display;
4174 Lisp_Object wait_for_cell;
4175 struct Lisp_Process *wait_proc;
4176 int just_wait_proc;
4178 register int channel, nfds;
4179 SELECT_TYPE Available;
4180 #ifdef NON_BLOCKING_CONNECT
4181 SELECT_TYPE Connecting;
4182 int check_connect;
4183 #endif
4184 int check_delay, no_avail;
4185 int xerrno;
4186 Lisp_Object proc;
4187 EMACS_TIME timeout, end_time;
4188 int wait_channel = -1;
4189 int got_some_input = 0;
4190 /* Either nil or a cons cell, the car of which is of interest and
4191 may be changed outside of this routine. */
4192 int saved_waiting_for_user_input_p = waiting_for_user_input_p;
4194 FD_ZERO (&Available);
4195 #ifdef NON_BLOCKING_CONNECT
4196 FD_ZERO (&Connecting);
4197 #endif
4199 /* If wait_proc is a process to watch, set wait_channel accordingly. */
4200 if (wait_proc != NULL)
4201 wait_channel = XINT (wait_proc->infd);
4203 waiting_for_user_input_p = read_kbd;
4205 /* Since we may need to wait several times,
4206 compute the absolute time to return at. */
4207 if (time_limit || microsecs)
4209 EMACS_GET_TIME (end_time);
4210 EMACS_SET_SECS_USECS (timeout, time_limit, microsecs);
4211 EMACS_ADD_TIME (end_time, end_time, timeout);
4213 #ifdef POLL_INTERRUPTED_SYS_CALL
4214 /* AlainF 5-Jul-1996
4215 HP-UX 10.10 seem to have problems with signals coming in
4216 Causes "poll: interrupted system call" messages when Emacs is run
4217 in an X window
4218 Turn off periodic alarms (in case they are in use),
4219 and then turn off any other atimers. */
4220 stop_polling ();
4221 turn_on_atimers (0);
4222 #endif /* POLL_INTERRUPTED_SYS_CALL */
4224 while (1)
4226 int timeout_reduced_for_timers = 0;
4228 /* If calling from keyboard input, do not quit
4229 since we want to return C-g as an input character.
4230 Otherwise, do pending quit if requested. */
4231 if (read_kbd >= 0)
4232 QUIT;
4233 #ifdef SYNC_INPUT
4234 else if (interrupt_input_pending)
4235 handle_async_input ();
4236 #endif
4238 /* Exit now if the cell we're waiting for became non-nil. */
4239 if (! NILP (wait_for_cell) && ! NILP (XCAR (wait_for_cell)))
4240 break;
4242 /* Compute time from now till when time limit is up */
4243 /* Exit if already run out */
4244 if (time_limit == -1)
4246 /* -1 specified for timeout means
4247 gobble output available now
4248 but don't wait at all. */
4250 EMACS_SET_SECS_USECS (timeout, 0, 0);
4252 else if (time_limit || microsecs)
4254 EMACS_GET_TIME (timeout);
4255 EMACS_SUB_TIME (timeout, end_time, timeout);
4256 if (EMACS_TIME_NEG_P (timeout))
4257 break;
4259 else
4261 EMACS_SET_SECS_USECS (timeout, 100000, 0);
4264 /* Normally we run timers here.
4265 But not if wait_for_cell; in those cases,
4266 the wait is supposed to be short,
4267 and those callers cannot handle running arbitrary Lisp code here. */
4268 if (NILP (wait_for_cell)
4269 && just_wait_proc >= 0)
4271 EMACS_TIME timer_delay;
4275 int old_timers_run = timers_run;
4276 struct buffer *old_buffer = current_buffer;
4278 timer_delay = timer_check (1);
4280 /* If a timer has run, this might have changed buffers
4281 an alike. Make read_key_sequence aware of that. */
4282 if (timers_run != old_timers_run
4283 && old_buffer != current_buffer
4284 && waiting_for_user_input_p == -1)
4285 record_asynch_buffer_change ();
4287 if (timers_run != old_timers_run && do_display)
4288 /* We must retry, since a timer may have requeued itself
4289 and that could alter the time_delay. */
4290 redisplay_preserve_echo_area (9);
4291 else
4292 break;
4294 while (!detect_input_pending ());
4296 /* If there is unread keyboard input, also return. */
4297 if (read_kbd != 0
4298 && requeued_events_pending_p ())
4299 break;
4301 if (! EMACS_TIME_NEG_P (timer_delay) && time_limit != -1)
4303 EMACS_TIME difference;
4304 EMACS_SUB_TIME (difference, timer_delay, timeout);
4305 if (EMACS_TIME_NEG_P (difference))
4307 timeout = timer_delay;
4308 timeout_reduced_for_timers = 1;
4311 /* If time_limit is -1, we are not going to wait at all. */
4312 else if (time_limit != -1)
4314 /* This is so a breakpoint can be put here. */
4315 wait_reading_process_output_1 ();
4319 /* Cause C-g and alarm signals to take immediate action,
4320 and cause input available signals to zero out timeout.
4322 It is important that we do this before checking for process
4323 activity. If we get a SIGCHLD after the explicit checks for
4324 process activity, timeout is the only way we will know. */
4325 if (read_kbd < 0)
4326 set_waiting_for_input (&timeout);
4328 /* If status of something has changed, and no input is
4329 available, notify the user of the change right away. After
4330 this explicit check, we'll let the SIGCHLD handler zap
4331 timeout to get our attention. */
4332 if (update_tick != process_tick && do_display)
4334 SELECT_TYPE Atemp;
4335 #ifdef NON_BLOCKING_CONNECT
4336 SELECT_TYPE Ctemp;
4337 #endif
4339 Atemp = input_wait_mask;
4340 #if 0
4341 /* On Mac OS X 10.0, the SELECT system call always says input is
4342 present (for reading) at stdin, even when none is. This
4343 causes the call to SELECT below to return 1 and
4344 status_notify not to be called. As a result output of
4345 subprocesses are incorrectly discarded.
4347 FD_CLR (0, &Atemp);
4348 #endif
4349 IF_NON_BLOCKING_CONNECT (Ctemp = connect_wait_mask);
4351 EMACS_SET_SECS_USECS (timeout, 0, 0);
4352 if ((select (max (max_process_desc, max_keyboard_desc) + 1,
4353 &Atemp,
4354 #ifdef NON_BLOCKING_CONNECT
4355 (num_pending_connects > 0 ? &Ctemp : (SELECT_TYPE *)0),
4356 #else
4357 (SELECT_TYPE *)0,
4358 #endif
4359 (SELECT_TYPE *)0, &timeout)
4360 <= 0))
4362 /* It's okay for us to do this and then continue with
4363 the loop, since timeout has already been zeroed out. */
4364 clear_waiting_for_input ();
4365 status_notify (NULL);
4369 /* Don't wait for output from a non-running process. Just
4370 read whatever data has already been received. */
4371 if (wait_proc && wait_proc->raw_status_new)
4372 update_status (wait_proc);
4373 if (wait_proc
4374 && ! EQ (wait_proc->status, Qrun)
4375 && ! EQ (wait_proc->status, Qconnect))
4377 int nread, total_nread = 0;
4379 clear_waiting_for_input ();
4380 XSETPROCESS (proc, wait_proc);
4382 /* Read data from the process, until we exhaust it. */
4383 while (XINT (wait_proc->infd) >= 0)
4385 nread = read_process_output (proc, XINT (wait_proc->infd));
4387 if (nread == 0)
4388 break;
4390 if (0 < nread)
4391 total_nread += nread;
4392 #ifdef EIO
4393 else if (nread == -1 && EIO == errno)
4394 break;
4395 #endif
4396 #ifdef EAGAIN
4397 else if (nread == -1 && EAGAIN == errno)
4398 break;
4399 #endif
4400 #ifdef EWOULDBLOCK
4401 else if (nread == -1 && EWOULDBLOCK == errno)
4402 break;
4403 #endif
4405 if (total_nread > 0 && do_display)
4406 redisplay_preserve_echo_area (10);
4408 break;
4411 /* Wait till there is something to do */
4413 if (wait_proc && just_wait_proc)
4415 if (XINT (wait_proc->infd) < 0) /* Terminated */
4416 break;
4417 FD_SET (XINT (wait_proc->infd), &Available);
4418 check_delay = 0;
4419 IF_NON_BLOCKING_CONNECT (check_connect = 0);
4421 else if (!NILP (wait_for_cell))
4423 Available = non_process_wait_mask;
4424 check_delay = 0;
4425 IF_NON_BLOCKING_CONNECT (check_connect = 0);
4427 else
4429 if (! read_kbd)
4430 Available = non_keyboard_wait_mask;
4431 else
4432 Available = input_wait_mask;
4433 IF_NON_BLOCKING_CONNECT (check_connect = (num_pending_connects > 0));
4434 check_delay = wait_channel >= 0 ? 0 : process_output_delay_count;
4437 /* If frame size has changed or the window is newly mapped,
4438 redisplay now, before we start to wait. There is a race
4439 condition here; if a SIGIO arrives between now and the select
4440 and indicates that a frame is trashed, the select may block
4441 displaying a trashed screen. */
4442 if (frame_garbaged && do_display)
4444 clear_waiting_for_input ();
4445 redisplay_preserve_echo_area (11);
4446 if (read_kbd < 0)
4447 set_waiting_for_input (&timeout);
4450 no_avail = 0;
4451 if (read_kbd && detect_input_pending ())
4453 nfds = 0;
4454 no_avail = 1;
4456 else
4458 #ifdef NON_BLOCKING_CONNECT
4459 if (check_connect)
4460 Connecting = connect_wait_mask;
4461 #endif
4463 #ifdef ADAPTIVE_READ_BUFFERING
4464 /* Set the timeout for adaptive read buffering if any
4465 process has non-nil read_output_skip and non-zero
4466 read_output_delay, and we are not reading output for a
4467 specific wait_channel. It is not executed if
4468 Vprocess_adaptive_read_buffering is nil. */
4469 if (process_output_skip && check_delay > 0)
4471 int usecs = EMACS_USECS (timeout);
4472 if (EMACS_SECS (timeout) > 0 || usecs > READ_OUTPUT_DELAY_MAX)
4473 usecs = READ_OUTPUT_DELAY_MAX;
4474 for (channel = 0; check_delay > 0 && channel <= max_process_desc; channel++)
4476 proc = chan_process[channel];
4477 if (NILP (proc))
4478 continue;
4479 /* Find minimum non-zero read_output_delay among the
4480 processes with non-nil read_output_skip. */
4481 if (XINT (XPROCESS (proc)->read_output_delay) > 0)
4483 check_delay--;
4484 if (NILP (XPROCESS (proc)->read_output_skip))
4485 continue;
4486 FD_CLR (channel, &Available);
4487 XPROCESS (proc)->read_output_skip = Qnil;
4488 if (XINT (XPROCESS (proc)->read_output_delay) < usecs)
4489 usecs = XINT (XPROCESS (proc)->read_output_delay);
4492 EMACS_SET_SECS_USECS (timeout, 0, usecs);
4493 process_output_skip = 0;
4495 #endif
4497 nfds = select (max (max_process_desc, max_keyboard_desc) + 1,
4498 &Available,
4499 #ifdef NON_BLOCKING_CONNECT
4500 (check_connect ? &Connecting : (SELECT_TYPE *)0),
4501 #else
4502 (SELECT_TYPE *)0,
4503 #endif
4504 (SELECT_TYPE *)0, &timeout);
4507 xerrno = errno;
4509 /* Make C-g and alarm signals set flags again */
4510 clear_waiting_for_input ();
4512 /* If we woke up due to SIGWINCH, actually change size now. */
4513 do_pending_window_change (0);
4515 if (time_limit && nfds == 0 && ! timeout_reduced_for_timers)
4516 /* We wanted the full specified time, so return now. */
4517 break;
4518 if (nfds < 0)
4520 if (xerrno == EINTR)
4521 no_avail = 1;
4522 #ifdef ultrix
4523 /* Ultrix select seems to return ENOMEM when it is
4524 interrupted. Treat it just like EINTR. Bleah. Note
4525 that we want to test for the "ultrix" CPP symbol, not
4526 "__ultrix__"; the latter is only defined under GCC, but
4527 not by DEC's bundled CC. -JimB */
4528 else if (xerrno == ENOMEM)
4529 no_avail = 1;
4530 #endif
4531 #ifdef ALLIANT
4532 /* This happens for no known reason on ALLIANT.
4533 I am guessing that this is the right response. -- RMS. */
4534 else if (xerrno == EFAULT)
4535 no_avail = 1;
4536 #endif
4537 else if (xerrno == EBADF)
4539 #ifdef AIX
4540 /* AIX doesn't handle PTY closure the same way BSD does. On AIX,
4541 the child's closure of the pts gives the parent a SIGHUP, and
4542 the ptc file descriptor is automatically closed,
4543 yielding EBADF here or at select() call above.
4544 So, SIGHUP is ignored (see def of PTY_TTY_NAME_SPRINTF
4545 in m/ibmrt-aix.h), and here we just ignore the select error.
4546 Cleanup occurs c/o status_notify after SIGCLD. */
4547 no_avail = 1; /* Cannot depend on values returned */
4548 #else
4549 abort ();
4550 #endif
4552 else
4553 error ("select error: %s", emacs_strerror (xerrno));
4556 if (no_avail)
4558 FD_ZERO (&Available);
4559 IF_NON_BLOCKING_CONNECT (check_connect = 0);
4562 #if defined(sun) && !defined(USG5_4)
4563 if (nfds > 0 && keyboard_bit_set (&Available)
4564 && interrupt_input)
4565 /* System sometimes fails to deliver SIGIO.
4567 David J. Mackenzie says that Emacs doesn't compile under
4568 Solaris if this code is enabled, thus the USG5_4 in the CPP
4569 conditional. "I haven't noticed any ill effects so far.
4570 If you find a Solaris expert somewhere, they might know
4571 better." */
4572 kill (getpid (), SIGIO);
4573 #endif
4575 #if 0 /* When polling is used, interrupt_input is 0,
4576 so get_input_pending should read the input.
4577 So this should not be needed. */
4578 /* If we are using polling for input,
4579 and we see input available, make it get read now.
4580 Otherwise it might not actually get read for a second.
4581 And on hpux, since we turn off polling in wait_reading_process_output,
4582 it might never get read at all if we don't spend much time
4583 outside of wait_reading_process_output. */
4584 if (read_kbd && interrupt_input
4585 && keyboard_bit_set (&Available)
4586 && input_polling_used ())
4587 kill (getpid (), SIGALRM);
4588 #endif
4590 /* Check for keyboard input */
4591 /* If there is any, return immediately
4592 to give it higher priority than subprocesses */
4594 if (read_kbd != 0)
4596 int old_timers_run = timers_run;
4597 struct buffer *old_buffer = current_buffer;
4598 int leave = 0;
4600 if (detect_input_pending_run_timers (do_display))
4602 swallow_events (do_display);
4603 if (detect_input_pending_run_timers (do_display))
4604 leave = 1;
4607 /* If a timer has run, this might have changed buffers
4608 an alike. Make read_key_sequence aware of that. */
4609 if (timers_run != old_timers_run
4610 && waiting_for_user_input_p == -1
4611 && old_buffer != current_buffer)
4612 record_asynch_buffer_change ();
4614 if (leave)
4615 break;
4618 /* If there is unread keyboard input, also return. */
4619 if (read_kbd != 0
4620 && requeued_events_pending_p ())
4621 break;
4623 /* If we are not checking for keyboard input now,
4624 do process events (but don't run any timers).
4625 This is so that X events will be processed.
4626 Otherwise they may have to wait until polling takes place.
4627 That would causes delays in pasting selections, for example.
4629 (We used to do this only if wait_for_cell.) */
4630 if (read_kbd == 0 && detect_input_pending ())
4632 swallow_events (do_display);
4633 #if 0 /* Exiting when read_kbd doesn't request that seems wrong, though. */
4634 if (detect_input_pending ())
4635 break;
4636 #endif
4639 /* Exit now if the cell we're waiting for became non-nil. */
4640 if (! NILP (wait_for_cell) && ! NILP (XCAR (wait_for_cell)))
4641 break;
4643 #ifdef SIGIO
4644 /* If we think we have keyboard input waiting, but didn't get SIGIO,
4645 go read it. This can happen with X on BSD after logging out.
4646 In that case, there really is no input and no SIGIO,
4647 but select says there is input. */
4649 if (read_kbd && interrupt_input
4650 && keyboard_bit_set (&Available) && ! noninteractive)
4651 kill (getpid (), SIGIO);
4652 #endif
4654 if (! wait_proc)
4655 got_some_input |= nfds > 0;
4657 /* If checking input just got us a size-change event from X,
4658 obey it now if we should. */
4659 if (read_kbd || ! NILP (wait_for_cell))
4660 do_pending_window_change (0);
4662 /* Check for data from a process. */
4663 if (no_avail || nfds == 0)
4664 continue;
4666 /* Really FIRST_PROC_DESC should be 0 on Unix,
4667 but this is safer in the short run. */
4668 for (channel = 0; channel <= max_process_desc; channel++)
4670 if (FD_ISSET (channel, &Available)
4671 && FD_ISSET (channel, &non_keyboard_wait_mask))
4673 int nread;
4675 /* If waiting for this channel, arrange to return as
4676 soon as no more input to be processed. No more
4677 waiting. */
4678 if (wait_channel == channel)
4680 wait_channel = -1;
4681 time_limit = -1;
4682 got_some_input = 1;
4684 proc = chan_process[channel];
4685 if (NILP (proc))
4686 continue;
4688 /* If this is a server stream socket, accept connection. */
4689 if (EQ (XPROCESS (proc)->status, Qlisten))
4691 server_accept_connection (proc, channel);
4692 continue;
4695 /* Read data from the process, starting with our
4696 buffered-ahead character if we have one. */
4698 nread = read_process_output (proc, channel);
4699 if (nread > 0)
4701 /* Since read_process_output can run a filter,
4702 which can call accept-process-output,
4703 don't try to read from any other processes
4704 before doing the select again. */
4705 FD_ZERO (&Available);
4707 if (do_display)
4708 redisplay_preserve_echo_area (12);
4710 #ifdef EWOULDBLOCK
4711 else if (nread == -1 && errno == EWOULDBLOCK)
4713 #endif
4714 /* ISC 4.1 defines both EWOULDBLOCK and O_NONBLOCK,
4715 and Emacs uses O_NONBLOCK, so what we get is EAGAIN. */
4716 #ifdef O_NONBLOCK
4717 else if (nread == -1 && errno == EAGAIN)
4719 #else
4720 #ifdef O_NDELAY
4721 else if (nread == -1 && errno == EAGAIN)
4723 /* Note that we cannot distinguish between no input
4724 available now and a closed pipe.
4725 With luck, a closed pipe will be accompanied by
4726 subprocess termination and SIGCHLD. */
4727 else if (nread == 0 && !NETCONN_P (proc))
4729 #endif /* O_NDELAY */
4730 #endif /* O_NONBLOCK */
4731 #ifdef HAVE_PTYS
4732 /* On some OSs with ptys, when the process on one end of
4733 a pty exits, the other end gets an error reading with
4734 errno = EIO instead of getting an EOF (0 bytes read).
4735 Therefore, if we get an error reading and errno =
4736 EIO, just continue, because the child process has
4737 exited and should clean itself up soon (e.g. when we
4738 get a SIGCHLD).
4740 However, it has been known to happen that the SIGCHLD
4741 got lost. So raise the signl again just in case.
4742 It can't hurt. */
4743 else if (nread == -1 && errno == EIO)
4744 kill (getpid (), SIGCHLD);
4745 #endif /* HAVE_PTYS */
4746 /* If we can detect process termination, don't consider the process
4747 gone just because its pipe is closed. */
4748 #ifdef SIGCHLD
4749 else if (nread == 0 && !NETCONN_P (proc))
4751 #endif
4752 else
4754 /* Preserve status of processes already terminated. */
4755 XSETINT (XPROCESS (proc)->tick, ++process_tick);
4756 deactivate_process (proc);
4757 if (XPROCESS (proc)->raw_status_new)
4758 update_status (XPROCESS (proc));
4759 if (EQ (XPROCESS (proc)->status, Qrun))
4760 XPROCESS (proc)->status
4761 = Fcons (Qexit, Fcons (make_number (256), Qnil));
4764 #ifdef NON_BLOCKING_CONNECT
4765 if (check_connect && FD_ISSET (channel, &Connecting)
4766 && FD_ISSET (channel, &connect_wait_mask))
4768 struct Lisp_Process *p;
4770 FD_CLR (channel, &connect_wait_mask);
4771 if (--num_pending_connects < 0)
4772 abort ();
4774 proc = chan_process[channel];
4775 if (NILP (proc))
4776 continue;
4778 p = XPROCESS (proc);
4780 #ifdef GNU_LINUX
4781 /* getsockopt(,,SO_ERROR,,) is said to hang on some systems.
4782 So only use it on systems where it is known to work. */
4784 int xlen = sizeof(xerrno);
4785 if (getsockopt(channel, SOL_SOCKET, SO_ERROR, &xerrno, &xlen))
4786 xerrno = errno;
4788 #else
4790 struct sockaddr pname;
4791 int pnamelen = sizeof(pname);
4793 /* If connection failed, getpeername will fail. */
4794 xerrno = 0;
4795 if (getpeername(channel, &pname, &pnamelen) < 0)
4797 /* Obtain connect failure code through error slippage. */
4798 char dummy;
4799 xerrno = errno;
4800 if (errno == ENOTCONN && read(channel, &dummy, 1) < 0)
4801 xerrno = errno;
4804 #endif
4805 if (xerrno)
4807 XSETINT (p->tick, ++process_tick);
4808 p->status = Fcons (Qfailed, Fcons (make_number (xerrno), Qnil));
4809 deactivate_process (proc);
4811 else
4813 p->status = Qrun;
4814 /* Execute the sentinel here. If we had relied on
4815 status_notify to do it later, it will read input
4816 from the process before calling the sentinel. */
4817 exec_sentinel (proc, build_string ("open\n"));
4818 if (!EQ (p->filter, Qt) && !EQ (p->command, Qt))
4820 FD_SET (XINT (p->infd), &input_wait_mask);
4821 FD_SET (XINT (p->infd), &non_keyboard_wait_mask);
4825 #endif /* NON_BLOCKING_CONNECT */
4826 } /* end for each file descriptor */
4827 } /* end while exit conditions not met */
4829 waiting_for_user_input_p = saved_waiting_for_user_input_p;
4831 /* If calling from keyboard input, do not quit
4832 since we want to return C-g as an input character.
4833 Otherwise, do pending quit if requested. */
4834 if (read_kbd >= 0)
4836 /* Prevent input_pending from remaining set if we quit. */
4837 clear_input_pending ();
4838 QUIT;
4840 #ifdef POLL_INTERRUPTED_SYS_CALL
4841 /* AlainF 5-Jul-1996
4842 HP-UX 10.10 seems to have problems with signals coming in
4843 Causes "poll: interrupted system call" messages when Emacs is run
4844 in an X window
4845 Turn periodic alarms back on */
4846 start_polling ();
4847 #endif /* POLL_INTERRUPTED_SYS_CALL */
4849 return got_some_input;
4852 /* Given a list (FUNCTION ARGS...), apply FUNCTION to the ARGS. */
4854 static Lisp_Object
4855 read_process_output_call (fun_and_args)
4856 Lisp_Object fun_and_args;
4858 return apply1 (XCAR (fun_and_args), XCDR (fun_and_args));
4861 static Lisp_Object
4862 read_process_output_error_handler (error)
4863 Lisp_Object error;
4865 cmd_error_internal (error, "error in process filter: ");
4866 Vinhibit_quit = Qt;
4867 update_echo_area ();
4868 Fsleep_for (make_number (2), Qnil);
4869 return Qt;
4872 /* Read pending output from the process channel,
4873 starting with our buffered-ahead character if we have one.
4874 Yield number of decoded characters read.
4876 This function reads at most 4096 characters.
4877 If you want to read all available subprocess output,
4878 you must call it repeatedly until it returns zero.
4880 The characters read are decoded according to PROC's coding-system
4881 for decoding. */
4883 static int
4884 read_process_output (proc, channel)
4885 Lisp_Object proc;
4886 register int channel;
4888 register int nbytes;
4889 char *chars;
4890 register Lisp_Object outstream;
4891 register struct buffer *old = current_buffer;
4892 register struct Lisp_Process *p = XPROCESS (proc);
4893 register int opoint;
4894 struct coding_system *coding = proc_decode_coding_system[channel];
4895 int carryover = XINT (p->decoding_carryover);
4896 int readmax = 4096;
4898 #ifdef VMS
4899 VMS_PROC_STUFF *vs, *get_vms_process_pointer();
4901 vs = get_vms_process_pointer (p->pid);
4902 if (vs)
4904 if (!vs->iosb[0])
4905 return (0); /* Really weird if it does this */
4906 if (!(vs->iosb[0] & 1))
4907 return -1; /* I/O error */
4909 else
4910 error ("Could not get VMS process pointer");
4911 chars = vs->inputBuffer;
4912 nbytes = clean_vms_buffer (chars, vs->iosb[1]);
4913 if (nbytes <= 0)
4915 start_vms_process_read (vs); /* Crank up the next read on the process */
4916 return 1; /* Nothing worth printing, say we got 1 */
4918 if (carryover > 0)
4920 /* The data carried over in the previous decoding (which are at
4921 the tail of decoding buffer) should be prepended to the new
4922 data read to decode all together. */
4923 chars = (char *) alloca (nbytes + carryover);
4924 bcopy (SDATA (p->decoding_buf), buf, carryover);
4925 bcopy (vs->inputBuffer, chars + carryover, nbytes);
4927 #else /* not VMS */
4929 chars = (char *) alloca (carryover + readmax);
4930 if (carryover)
4931 /* See the comment above. */
4932 bcopy (SDATA (p->decoding_buf), chars, carryover);
4934 #ifdef DATAGRAM_SOCKETS
4935 /* We have a working select, so proc_buffered_char is always -1. */
4936 if (DATAGRAM_CHAN_P (channel))
4938 int len = datagram_address[channel].len;
4939 nbytes = recvfrom (channel, chars + carryover, readmax,
4940 0, datagram_address[channel].sa, &len);
4942 else
4943 #endif
4944 if (proc_buffered_char[channel] < 0)
4946 nbytes = emacs_read (channel, chars + carryover, readmax);
4947 #ifdef ADAPTIVE_READ_BUFFERING
4948 if (nbytes > 0 && !NILP (p->adaptive_read_buffering))
4950 int delay = XINT (p->read_output_delay);
4951 if (nbytes < 256)
4953 if (delay < READ_OUTPUT_DELAY_MAX_MAX)
4955 if (delay == 0)
4956 process_output_delay_count++;
4957 delay += READ_OUTPUT_DELAY_INCREMENT * 2;
4960 else if (delay > 0 && (nbytes == readmax))
4962 delay -= READ_OUTPUT_DELAY_INCREMENT;
4963 if (delay == 0)
4964 process_output_delay_count--;
4966 XSETINT (p->read_output_delay, delay);
4967 if (delay)
4969 p->read_output_skip = Qt;
4970 process_output_skip = 1;
4973 #endif
4975 else
4977 chars[carryover] = proc_buffered_char[channel];
4978 proc_buffered_char[channel] = -1;
4979 nbytes = emacs_read (channel, chars + carryover + 1, readmax - 1);
4980 if (nbytes < 0)
4981 nbytes = 1;
4982 else
4983 nbytes = nbytes + 1;
4985 #endif /* not VMS */
4987 XSETINT (p->decoding_carryover, 0);
4989 /* At this point, NBYTES holds number of bytes just received
4990 (including the one in proc_buffered_char[channel]). */
4991 if (nbytes <= 0)
4993 if (nbytes < 0 || coding->mode & CODING_MODE_LAST_BLOCK)
4994 return nbytes;
4995 coding->mode |= CODING_MODE_LAST_BLOCK;
4998 /* Now set NBYTES how many bytes we must decode. */
4999 nbytes += carryover;
5001 /* Read and dispose of the process output. */
5002 outstream = p->filter;
5003 if (!NILP (outstream))
5005 /* We inhibit quit here instead of just catching it so that
5006 hitting ^G when a filter happens to be running won't screw
5007 it up. */
5008 int count = SPECPDL_INDEX ();
5009 Lisp_Object odeactivate;
5010 Lisp_Object obuffer, okeymap;
5011 Lisp_Object text;
5012 int outer_running_asynch_code = running_asynch_code;
5013 int waiting = waiting_for_user_input_p;
5015 /* No need to gcpro these, because all we do with them later
5016 is test them for EQness, and none of them should be a string. */
5017 odeactivate = Vdeactivate_mark;
5018 XSETBUFFER (obuffer, current_buffer);
5019 okeymap = current_buffer->keymap;
5021 specbind (Qinhibit_quit, Qt);
5022 specbind (Qlast_nonmenu_event, Qt);
5024 /* In case we get recursively called,
5025 and we already saved the match data nonrecursively,
5026 save the same match data in safely recursive fashion. */
5027 if (outer_running_asynch_code)
5029 Lisp_Object tem;
5030 /* Don't clobber the CURRENT match data, either! */
5031 tem = Fmatch_data (Qnil, Qnil, Qnil);
5032 restore_search_regs ();
5033 record_unwind_save_match_data ();
5034 Fset_match_data (tem, Qt);
5037 /* For speed, if a search happens within this code,
5038 save the match data in a special nonrecursive fashion. */
5039 running_asynch_code = 1;
5041 text = decode_coding_string (make_unibyte_string (chars, nbytes),
5042 coding, 0);
5043 Vlast_coding_system_used = coding->symbol;
5044 /* A new coding system might be found. */
5045 if (!EQ (p->decode_coding_system, coding->symbol))
5047 p->decode_coding_system = coding->symbol;
5049 /* Don't call setup_coding_system for
5050 proc_decode_coding_system[channel] here. It is done in
5051 detect_coding called via decode_coding above. */
5053 /* If a coding system for encoding is not yet decided, we set
5054 it as the same as coding-system for decoding.
5056 But, before doing that we must check if
5057 proc_encode_coding_system[p->outfd] surely points to a
5058 valid memory because p->outfd will be changed once EOF is
5059 sent to the process. */
5060 if (NILP (p->encode_coding_system)
5061 && proc_encode_coding_system[XINT (p->outfd)])
5063 p->encode_coding_system = coding->symbol;
5064 setup_coding_system (coding->symbol,
5065 proc_encode_coding_system[XINT (p->outfd)]);
5069 carryover = nbytes - coding->consumed;
5070 if (SCHARS (p->decoding_buf) < carryover)
5071 p->decoding_buf = make_uninit_string (carryover);
5072 bcopy (chars + coding->consumed, SDATA (p->decoding_buf),
5073 carryover);
5074 XSETINT (p->decoding_carryover, carryover);
5075 /* Adjust the multibyteness of TEXT to that of the filter. */
5076 if (NILP (p->filter_multibyte) != ! STRING_MULTIBYTE (text))
5077 text = (STRING_MULTIBYTE (text)
5078 ? Fstring_as_unibyte (text)
5079 : Fstring_to_multibyte (text));
5080 if (SBYTES (text) > 0)
5081 internal_condition_case_1 (read_process_output_call,
5082 Fcons (outstream,
5083 Fcons (proc, Fcons (text, Qnil))),
5084 !NILP (Vdebug_on_error) ? Qnil : Qerror,
5085 read_process_output_error_handler);
5087 /* If we saved the match data nonrecursively, restore it now. */
5088 restore_search_regs ();
5089 running_asynch_code = outer_running_asynch_code;
5091 /* Handling the process output should not deactivate the mark. */
5092 Vdeactivate_mark = odeactivate;
5094 /* Restore waiting_for_user_input_p as it was
5095 when we were called, in case the filter clobbered it. */
5096 waiting_for_user_input_p = waiting;
5098 #if 0 /* Call record_asynch_buffer_change unconditionally,
5099 because we might have changed minor modes or other things
5100 that affect key bindings. */
5101 if (! EQ (Fcurrent_buffer (), obuffer)
5102 || ! EQ (current_buffer->keymap, okeymap))
5103 #endif
5104 /* But do it only if the caller is actually going to read events.
5105 Otherwise there's no need to make him wake up, and it could
5106 cause trouble (for example it would make Fsit_for return). */
5107 if (waiting_for_user_input_p == -1)
5108 record_asynch_buffer_change ();
5110 #ifdef VMS
5111 start_vms_process_read (vs);
5112 #endif
5113 unbind_to (count, Qnil);
5114 return nbytes;
5117 /* If no filter, write into buffer if it isn't dead. */
5118 if (!NILP (p->buffer) && !NILP (XBUFFER (p->buffer)->name))
5120 Lisp_Object old_read_only;
5121 int old_begv, old_zv;
5122 int old_begv_byte, old_zv_byte;
5123 Lisp_Object odeactivate;
5124 int before, before_byte;
5125 int opoint_byte;
5126 Lisp_Object text;
5127 struct buffer *b;
5129 odeactivate = Vdeactivate_mark;
5131 Fset_buffer (p->buffer);
5132 opoint = PT;
5133 opoint_byte = PT_BYTE;
5134 old_read_only = current_buffer->read_only;
5135 old_begv = BEGV;
5136 old_zv = ZV;
5137 old_begv_byte = BEGV_BYTE;
5138 old_zv_byte = ZV_BYTE;
5140 current_buffer->read_only = Qnil;
5142 /* Insert new output into buffer
5143 at the current end-of-output marker,
5144 thus preserving logical ordering of input and output. */
5145 if (XMARKER (p->mark)->buffer)
5146 SET_PT_BOTH (clip_to_bounds (BEGV, marker_position (p->mark), ZV),
5147 clip_to_bounds (BEGV_BYTE, marker_byte_position (p->mark),
5148 ZV_BYTE));
5149 else
5150 SET_PT_BOTH (ZV, ZV_BYTE);
5151 before = PT;
5152 before_byte = PT_BYTE;
5154 /* If the output marker is outside of the visible region, save
5155 the restriction and widen. */
5156 if (! (BEGV <= PT && PT <= ZV))
5157 Fwiden ();
5159 text = decode_coding_string (make_unibyte_string (chars, nbytes),
5160 coding, 0);
5161 Vlast_coding_system_used = coding->symbol;
5162 /* A new coding system might be found. See the comment in the
5163 similar code in the previous `if' block. */
5164 if (!EQ (p->decode_coding_system, coding->symbol))
5166 p->decode_coding_system = coding->symbol;
5167 if (NILP (p->encode_coding_system)
5168 && proc_encode_coding_system[XINT (p->outfd)])
5170 p->encode_coding_system = coding->symbol;
5171 setup_coding_system (coding->symbol,
5172 proc_encode_coding_system[XINT (p->outfd)]);
5175 carryover = nbytes - coding->consumed;
5176 if (SCHARS (p->decoding_buf) < carryover)
5177 p->decoding_buf = make_uninit_string (carryover);
5178 bcopy (chars + coding->consumed, SDATA (p->decoding_buf),
5179 carryover);
5180 XSETINT (p->decoding_carryover, carryover);
5181 /* Adjust the multibyteness of TEXT to that of the buffer. */
5182 if (NILP (current_buffer->enable_multibyte_characters)
5183 != ! STRING_MULTIBYTE (text))
5184 text = (STRING_MULTIBYTE (text)
5185 ? Fstring_as_unibyte (text)
5186 : Fstring_to_multibyte (text));
5187 /* Insert before markers in case we are inserting where
5188 the buffer's mark is, and the user's next command is Meta-y. */
5189 insert_from_string_before_markers (text, 0, 0,
5190 SCHARS (text), SBYTES (text), 0);
5192 /* Make sure the process marker's position is valid when the
5193 process buffer is changed in the signal_after_change above.
5194 W3 is known to do that. */
5195 if (BUFFERP (p->buffer)
5196 && (b = XBUFFER (p->buffer), b != current_buffer))
5197 set_marker_both (p->mark, p->buffer, BUF_PT (b), BUF_PT_BYTE (b));
5198 else
5199 set_marker_both (p->mark, p->buffer, PT, PT_BYTE);
5201 update_mode_lines++;
5203 /* Make sure opoint and the old restrictions
5204 float ahead of any new text just as point would. */
5205 if (opoint >= before)
5207 opoint += PT - before;
5208 opoint_byte += PT_BYTE - before_byte;
5210 if (old_begv > before)
5212 old_begv += PT - before;
5213 old_begv_byte += PT_BYTE - before_byte;
5215 if (old_zv >= before)
5217 old_zv += PT - before;
5218 old_zv_byte += PT_BYTE - before_byte;
5221 /* If the restriction isn't what it should be, set it. */
5222 if (old_begv != BEGV || old_zv != ZV)
5223 Fnarrow_to_region (make_number (old_begv), make_number (old_zv));
5225 /* Handling the process output should not deactivate the mark. */
5226 Vdeactivate_mark = odeactivate;
5228 current_buffer->read_only = old_read_only;
5229 SET_PT_BOTH (opoint, opoint_byte);
5230 set_buffer_internal (old);
5232 #ifdef VMS
5233 start_vms_process_read (vs);
5234 #endif
5235 return nbytes;
5238 DEFUN ("waiting-for-user-input-p", Fwaiting_for_user_input_p, Swaiting_for_user_input_p,
5239 0, 0, 0,
5240 doc: /* Returns non-nil if Emacs is waiting for input from the user.
5241 This is intended for use by asynchronous process output filters and sentinels. */)
5244 return (waiting_for_user_input_p ? Qt : Qnil);
5247 /* Sending data to subprocess */
5249 jmp_buf send_process_frame;
5250 Lisp_Object process_sent_to;
5252 SIGTYPE
5253 send_process_trap ()
5255 SIGNAL_THREAD_CHECK (SIGPIPE);
5256 #ifdef BSD4_1
5257 sigrelse (SIGPIPE);
5258 sigrelse (SIGALRM);
5259 #endif /* BSD4_1 */
5260 sigunblock (sigmask (SIGPIPE));
5261 longjmp (send_process_frame, 1);
5264 /* Send some data to process PROC.
5265 BUF is the beginning of the data; LEN is the number of characters.
5266 OBJECT is the Lisp object that the data comes from. If OBJECT is
5267 nil or t, it means that the data comes from C string.
5269 If OBJECT is not nil, the data is encoded by PROC's coding-system
5270 for encoding before it is sent.
5272 This function can evaluate Lisp code and can garbage collect. */
5274 static void
5275 send_process (proc, buf, len, object)
5276 volatile Lisp_Object proc;
5277 unsigned char *volatile buf;
5278 volatile int len;
5279 volatile Lisp_Object object;
5281 /* Use volatile to protect variables from being clobbered by longjmp. */
5282 struct Lisp_Process *p = XPROCESS (proc);
5283 int rv;
5284 struct coding_system *coding;
5285 struct gcpro gcpro1;
5286 SIGTYPE (*volatile old_sigpipe) ();
5288 GCPRO1 (object);
5290 #ifdef VMS
5291 VMS_PROC_STUFF *vs, *get_vms_process_pointer();
5292 #endif /* VMS */
5294 if (p->raw_status_new)
5295 update_status (p);
5296 if (! EQ (p->status, Qrun))
5297 error ("Process %s not running", SDATA (p->name));
5298 if (XINT (p->outfd) < 0)
5299 error ("Output file descriptor of %s is closed", SDATA (p->name));
5301 coding = proc_encode_coding_system[XINT (p->outfd)];
5302 Vlast_coding_system_used = coding->symbol;
5304 if ((STRINGP (object) && STRING_MULTIBYTE (object))
5305 || (BUFFERP (object)
5306 && !NILP (XBUFFER (object)->enable_multibyte_characters))
5307 || EQ (object, Qt))
5309 if (!EQ (coding->symbol, p->encode_coding_system))
5310 /* The coding system for encoding was changed to raw-text
5311 because we sent a unibyte text previously. Now we are
5312 sending a multibyte text, thus we must encode it by the
5313 original coding system specified for the current process. */
5314 setup_coding_system (p->encode_coding_system, coding);
5315 /* src_multibyte should be set to 1 _after_ a call to
5316 setup_coding_system, since it resets src_multibyte to
5317 zero. */
5318 coding->src_multibyte = 1;
5320 else
5322 /* For sending a unibyte text, character code conversion should
5323 not take place but EOL conversion should. So, setup raw-text
5324 or one of the subsidiary if we have not yet done it. */
5325 if (coding->type != coding_type_raw_text)
5327 if (CODING_REQUIRE_FLUSHING (coding))
5329 /* But, before changing the coding, we must flush out data. */
5330 coding->mode |= CODING_MODE_LAST_BLOCK;
5331 send_process (proc, "", 0, Qt);
5333 coding->src_multibyte = 0;
5334 setup_raw_text_coding_system (coding);
5337 coding->dst_multibyte = 0;
5339 if (CODING_REQUIRE_ENCODING (coding))
5341 int require = encoding_buffer_size (coding, len);
5342 int from_byte = -1, from = -1, to = -1;
5344 if (BUFFERP (object))
5346 from_byte = BUF_PTR_BYTE_POS (XBUFFER (object), buf);
5347 from = buf_bytepos_to_charpos (XBUFFER (object), from_byte);
5348 to = buf_bytepos_to_charpos (XBUFFER (object), from_byte + len);
5350 else if (STRINGP (object))
5352 from_byte = buf - SDATA (object);
5353 from = string_byte_to_char (object, from_byte);
5354 to = string_byte_to_char (object, from_byte + len);
5357 if (coding->composing != COMPOSITION_DISABLED)
5359 if (from_byte >= 0)
5360 coding_save_composition (coding, from, to, object);
5361 else
5362 coding->composing = COMPOSITION_DISABLED;
5365 if (SBYTES (p->encoding_buf) < require)
5366 p->encoding_buf = make_uninit_string (require);
5368 if (from_byte >= 0)
5369 buf = (BUFFERP (object)
5370 ? BUF_BYTE_ADDRESS (XBUFFER (object), from_byte)
5371 : SDATA (object) + from_byte);
5373 object = p->encoding_buf;
5374 encode_coding (coding, (char *) buf, SDATA (object),
5375 len, SBYTES (object));
5376 coding_free_composition_data (coding);
5377 len = coding->produced;
5378 buf = SDATA (object);
5381 #ifdef VMS
5382 vs = get_vms_process_pointer (p->pid);
5383 if (vs == 0)
5384 error ("Could not find this process: %x", p->pid);
5385 else if (write_to_vms_process (vs, buf, len))
5387 #else /* not VMS */
5389 if (pty_max_bytes == 0)
5391 #if defined (HAVE_FPATHCONF) && defined (_PC_MAX_CANON)
5392 pty_max_bytes = fpathconf (XFASTINT (p->outfd), _PC_MAX_CANON);
5393 if (pty_max_bytes < 0)
5394 pty_max_bytes = 250;
5395 #else
5396 pty_max_bytes = 250;
5397 #endif
5398 /* Deduct one, to leave space for the eof. */
5399 pty_max_bytes--;
5402 /* 2000-09-21: Emacs 20.7, sparc-sun-solaris-2.6, GCC 2.95.2,
5403 CFLAGS="-g -O": The value of the parameter `proc' is clobbered
5404 when returning with longjmp despite being declared volatile. */
5405 if (!setjmp (send_process_frame))
5407 process_sent_to = proc;
5408 while (len > 0)
5410 int this = len;
5412 /* Decide how much data we can send in one batch.
5413 Long lines need to be split into multiple batches. */
5414 if (!NILP (p->pty_flag))
5416 /* Starting this at zero is always correct when not the first
5417 iteration because the previous iteration ended by sending C-d.
5418 It may not be correct for the first iteration
5419 if a partial line was sent in a separate send_process call.
5420 If that proves worth handling, we need to save linepos
5421 in the process object. */
5422 int linepos = 0;
5423 unsigned char *ptr = (unsigned char *) buf;
5424 unsigned char *end = (unsigned char *) buf + len;
5426 /* Scan through this text for a line that is too long. */
5427 while (ptr != end && linepos < pty_max_bytes)
5429 if (*ptr == '\n')
5430 linepos = 0;
5431 else
5432 linepos++;
5433 ptr++;
5435 /* If we found one, break the line there
5436 and put in a C-d to force the buffer through. */
5437 this = ptr - buf;
5440 /* Send this batch, using one or more write calls. */
5441 while (this > 0)
5443 int outfd = XINT (p->outfd);
5444 old_sigpipe = (SIGTYPE (*) ()) signal (SIGPIPE, send_process_trap);
5445 #ifdef DATAGRAM_SOCKETS
5446 if (DATAGRAM_CHAN_P (outfd))
5448 rv = sendto (outfd, (char *) buf, this,
5449 0, datagram_address[outfd].sa,
5450 datagram_address[outfd].len);
5451 if (rv < 0 && errno == EMSGSIZE)
5453 signal (SIGPIPE, old_sigpipe);
5454 report_file_error ("sending datagram",
5455 Fcons (proc, Qnil));
5458 else
5459 #endif
5461 rv = emacs_write (outfd, (char *) buf, this);
5462 #ifdef ADAPTIVE_READ_BUFFERING
5463 if (XINT (p->read_output_delay) > 0
5464 && EQ (p->adaptive_read_buffering, Qt))
5466 XSETFASTINT (p->read_output_delay, 0);
5467 process_output_delay_count--;
5468 p->read_output_skip = Qnil;
5470 #endif
5472 signal (SIGPIPE, old_sigpipe);
5474 if (rv < 0)
5476 if (0
5477 #ifdef EWOULDBLOCK
5478 || errno == EWOULDBLOCK
5479 #endif
5480 #ifdef EAGAIN
5481 || errno == EAGAIN
5482 #endif
5484 /* Buffer is full. Wait, accepting input;
5485 that may allow the program
5486 to finish doing output and read more. */
5488 int offset = 0;
5490 #ifdef BROKEN_PTY_READ_AFTER_EAGAIN
5491 /* A gross hack to work around a bug in FreeBSD.
5492 In the following sequence, read(2) returns
5493 bogus data:
5495 write(2) 1022 bytes
5496 write(2) 954 bytes, get EAGAIN
5497 read(2) 1024 bytes in process_read_output
5498 read(2) 11 bytes in process_read_output
5500 That is, read(2) returns more bytes than have
5501 ever been written successfully. The 1033 bytes
5502 read are the 1022 bytes written successfully
5503 after processing (for example with CRs added if
5504 the terminal is set up that way which it is
5505 here). The same bytes will be seen again in a
5506 later read(2), without the CRs. */
5508 if (errno == EAGAIN)
5510 int flags = FWRITE;
5511 ioctl (XINT (p->outfd), TIOCFLUSH, &flags);
5513 #endif /* BROKEN_PTY_READ_AFTER_EAGAIN */
5515 /* Running filters might relocate buffers or strings.
5516 Arrange to relocate BUF. */
5517 if (BUFFERP (object))
5518 offset = BUF_PTR_BYTE_POS (XBUFFER (object), buf);
5519 else if (STRINGP (object))
5520 offset = buf - SDATA (object);
5522 #ifdef EMACS_HAS_USECS
5523 wait_reading_process_output (0, 20000, 0, 0, Qnil, NULL, 0);
5524 #else
5525 wait_reading_process_output (1, 0, 0, 0, Qnil, NULL, 0);
5526 #endif
5528 if (BUFFERP (object))
5529 buf = BUF_BYTE_ADDRESS (XBUFFER (object), offset);
5530 else if (STRINGP (object))
5531 buf = offset + SDATA (object);
5533 rv = 0;
5535 else
5536 /* This is a real error. */
5537 report_file_error ("writing to process", Fcons (proc, Qnil));
5539 buf += rv;
5540 len -= rv;
5541 this -= rv;
5544 /* If we sent just part of the string, put in an EOF
5545 to force it through, before we send the rest. */
5546 if (len > 0)
5547 Fprocess_send_eof (proc);
5550 #endif /* not VMS */
5551 else
5553 signal (SIGPIPE, old_sigpipe);
5554 #ifndef VMS
5555 proc = process_sent_to;
5556 p = XPROCESS (proc);
5557 #endif
5558 p->raw_status_new = 0;
5559 p->status = Fcons (Qexit, Fcons (make_number (256), Qnil));
5560 XSETINT (p->tick, ++process_tick);
5561 deactivate_process (proc);
5562 #ifdef VMS
5563 error ("Error writing to process %s; closed it", SDATA (p->name));
5564 #else
5565 error ("SIGPIPE raised on process %s; closed it", SDATA (p->name));
5566 #endif
5569 UNGCPRO;
5572 DEFUN ("process-send-region", Fprocess_send_region, Sprocess_send_region,
5573 3, 3, 0,
5574 doc: /* Send current contents of region as input to PROCESS.
5575 PROCESS may be a process, a buffer, the name of a process or buffer, or
5576 nil, indicating the current buffer's process.
5577 Called from program, takes three arguments, PROCESS, START and END.
5578 If the region is more than 500 characters long,
5579 it is sent in several bunches. This may happen even for shorter regions.
5580 Output from processes can arrive in between bunches. */)
5581 (process, start, end)
5582 Lisp_Object process, start, end;
5584 Lisp_Object proc;
5585 int start1, end1;
5587 proc = get_process (process);
5588 validate_region (&start, &end);
5590 if (XINT (start) < GPT && XINT (end) > GPT)
5591 move_gap (XINT (start));
5593 start1 = CHAR_TO_BYTE (XINT (start));
5594 end1 = CHAR_TO_BYTE (XINT (end));
5595 send_process (proc, BYTE_POS_ADDR (start1), end1 - start1,
5596 Fcurrent_buffer ());
5598 return Qnil;
5601 DEFUN ("process-send-string", Fprocess_send_string, Sprocess_send_string,
5602 2, 2, 0,
5603 doc: /* Send PROCESS the contents of STRING as input.
5604 PROCESS may be a process, a buffer, the name of a process or buffer, or
5605 nil, indicating the current buffer's process.
5606 If STRING is more than 500 characters long,
5607 it is sent in several bunches. This may happen even for shorter strings.
5608 Output from processes can arrive in between bunches. */)
5609 (process, string)
5610 Lisp_Object process, string;
5612 Lisp_Object proc;
5613 CHECK_STRING (string);
5614 proc = get_process (process);
5615 send_process (proc, SDATA (string),
5616 SBYTES (string), string);
5617 return Qnil;
5620 /* Return the foreground process group for the tty/pty that
5621 the process P uses. */
5622 static int
5623 emacs_get_tty_pgrp (p)
5624 struct Lisp_Process *p;
5626 int gid = -1;
5628 #ifdef TIOCGPGRP
5629 if (ioctl (XINT (p->infd), TIOCGPGRP, &gid) == -1 && ! NILP (p->tty_name))
5631 int fd;
5632 /* Some OS:es (Solaris 8/9) does not allow TIOCGPGRP from the
5633 master side. Try the slave side. */
5634 fd = emacs_open (XSTRING (p->tty_name)->data, O_RDONLY, 0);
5636 if (fd != -1)
5638 ioctl (fd, TIOCGPGRP, &gid);
5639 emacs_close (fd);
5642 #endif /* defined (TIOCGPGRP ) */
5644 return gid;
5647 DEFUN ("process-running-child-p", Fprocess_running_child_p,
5648 Sprocess_running_child_p, 0, 1, 0,
5649 doc: /* Return t if PROCESS has given the terminal to a child.
5650 If the operating system does not make it possible to find out,
5651 return t unconditionally. */)
5652 (process)
5653 Lisp_Object process;
5655 /* Initialize in case ioctl doesn't exist or gives an error,
5656 in a way that will cause returning t. */
5657 int gid;
5658 Lisp_Object proc;
5659 struct Lisp_Process *p;
5661 proc = get_process (process);
5662 p = XPROCESS (proc);
5664 if (!EQ (p->childp, Qt))
5665 error ("Process %s is not a subprocess",
5666 SDATA (p->name));
5667 if (XINT (p->infd) < 0)
5668 error ("Process %s is not active",
5669 SDATA (p->name));
5671 gid = emacs_get_tty_pgrp (p);
5673 if (gid == p->pid)
5674 return Qnil;
5675 return Qt;
5678 /* send a signal number SIGNO to PROCESS.
5679 If CURRENT_GROUP is t, that means send to the process group
5680 that currently owns the terminal being used to communicate with PROCESS.
5681 This is used for various commands in shell mode.
5682 If CURRENT_GROUP is lambda, that means send to the process group
5683 that currently owns the terminal, but only if it is NOT the shell itself.
5685 If NOMSG is zero, insert signal-announcements into process's buffers
5686 right away.
5688 If we can, we try to signal PROCESS by sending control characters
5689 down the pty. This allows us to signal inferiors who have changed
5690 their uid, for which killpg would return an EPERM error. */
5692 static void
5693 process_send_signal (process, signo, current_group, nomsg)
5694 Lisp_Object process;
5695 int signo;
5696 Lisp_Object current_group;
5697 int nomsg;
5699 Lisp_Object proc;
5700 register struct Lisp_Process *p;
5701 int gid;
5702 int no_pgrp = 0;
5704 proc = get_process (process);
5705 p = XPROCESS (proc);
5707 if (!EQ (p->childp, Qt))
5708 error ("Process %s is not a subprocess",
5709 SDATA (p->name));
5710 if (XINT (p->infd) < 0)
5711 error ("Process %s is not active",
5712 SDATA (p->name));
5714 if (NILP (p->pty_flag))
5715 current_group = Qnil;
5717 /* If we are using pgrps, get a pgrp number and make it negative. */
5718 if (NILP (current_group))
5719 /* Send the signal to the shell's process group. */
5720 gid = p->pid;
5721 else
5723 #ifdef SIGNALS_VIA_CHARACTERS
5724 /* If possible, send signals to the entire pgrp
5725 by sending an input character to it. */
5727 /* TERMIOS is the latest and bestest, and seems most likely to
5728 work. If the system has it, use it. */
5729 #ifdef HAVE_TERMIOS
5730 struct termios t;
5731 cc_t *sig_char = NULL;
5733 tcgetattr (XINT (p->infd), &t);
5735 switch (signo)
5737 case SIGINT:
5738 sig_char = &t.c_cc[VINTR];
5739 break;
5741 case SIGQUIT:
5742 sig_char = &t.c_cc[VQUIT];
5743 break;
5745 case SIGTSTP:
5746 #if defined (VSWTCH) && !defined (PREFER_VSUSP)
5747 sig_char = &t.c_cc[VSWTCH];
5748 #else
5749 sig_char = &t.c_cc[VSUSP];
5750 #endif
5751 break;
5754 if (sig_char && *sig_char != CDISABLE)
5756 send_process (proc, sig_char, 1, Qnil);
5757 return;
5759 /* If we can't send the signal with a character,
5760 fall through and send it another way. */
5761 #else /* ! HAVE_TERMIOS */
5763 /* On Berkeley descendants, the following IOCTL's retrieve the
5764 current control characters. */
5765 #if defined (TIOCGLTC) && defined (TIOCGETC)
5767 struct tchars c;
5768 struct ltchars lc;
5770 switch (signo)
5772 case SIGINT:
5773 ioctl (XINT (p->infd), TIOCGETC, &c);
5774 send_process (proc, &c.t_intrc, 1, Qnil);
5775 return;
5776 case SIGQUIT:
5777 ioctl (XINT (p->infd), TIOCGETC, &c);
5778 send_process (proc, &c.t_quitc, 1, Qnil);
5779 return;
5780 #ifdef SIGTSTP
5781 case SIGTSTP:
5782 ioctl (XINT (p->infd), TIOCGLTC, &lc);
5783 send_process (proc, &lc.t_suspc, 1, Qnil);
5784 return;
5785 #endif /* ! defined (SIGTSTP) */
5788 #else /* ! defined (TIOCGLTC) && defined (TIOCGETC) */
5790 /* On SYSV descendants, the TCGETA ioctl retrieves the current control
5791 characters. */
5792 #ifdef TCGETA
5793 struct termio t;
5794 switch (signo)
5796 case SIGINT:
5797 ioctl (XINT (p->infd), TCGETA, &t);
5798 send_process (proc, &t.c_cc[VINTR], 1, Qnil);
5799 return;
5800 case SIGQUIT:
5801 ioctl (XINT (p->infd), TCGETA, &t);
5802 send_process (proc, &t.c_cc[VQUIT], 1, Qnil);
5803 return;
5804 #ifdef SIGTSTP
5805 case SIGTSTP:
5806 ioctl (XINT (p->infd), TCGETA, &t);
5807 send_process (proc, &t.c_cc[VSWTCH], 1, Qnil);
5808 return;
5809 #endif /* ! defined (SIGTSTP) */
5811 #else /* ! defined (TCGETA) */
5812 Your configuration files are messed up.
5813 /* If your system configuration files define SIGNALS_VIA_CHARACTERS,
5814 you'd better be using one of the alternatives above! */
5815 #endif /* ! defined (TCGETA) */
5816 #endif /* ! defined (TIOCGLTC) && defined (TIOCGETC) */
5817 /* In this case, the code above should alway returns. */
5818 abort ();
5819 #endif /* ! defined HAVE_TERMIOS */
5821 /* The code above may fall through if it can't
5822 handle the signal. */
5823 #endif /* defined (SIGNALS_VIA_CHARACTERS) */
5825 #ifdef TIOCGPGRP
5826 /* Get the current pgrp using the tty itself, if we have that.
5827 Otherwise, use the pty to get the pgrp.
5828 On pfa systems, saka@pfu.fujitsu.co.JP writes:
5829 "TIOCGPGRP symbol defined in sys/ioctl.h at E50.
5830 But, TIOCGPGRP does not work on E50 ;-P works fine on E60"
5831 His patch indicates that if TIOCGPGRP returns an error, then
5832 we should just assume that p->pid is also the process group id. */
5834 gid = emacs_get_tty_pgrp (p);
5836 if (gid == -1)
5837 /* If we can't get the information, assume
5838 the shell owns the tty. */
5839 gid = p->pid;
5841 /* It is not clear whether anything really can set GID to -1.
5842 Perhaps on some system one of those ioctls can or could do so.
5843 Or perhaps this is vestigial. */
5844 if (gid == -1)
5845 no_pgrp = 1;
5846 #else /* ! defined (TIOCGPGRP ) */
5847 /* Can't select pgrps on this system, so we know that
5848 the child itself heads the pgrp. */
5849 gid = p->pid;
5850 #endif /* ! defined (TIOCGPGRP ) */
5852 /* If current_group is lambda, and the shell owns the terminal,
5853 don't send any signal. */
5854 if (EQ (current_group, Qlambda) && gid == p->pid)
5855 return;
5858 switch (signo)
5860 #ifdef SIGCONT
5861 case SIGCONT:
5862 p->raw_status_new = 0;
5863 p->status = Qrun;
5864 XSETINT (p->tick, ++process_tick);
5865 if (!nomsg)
5866 status_notify (NULL);
5867 break;
5868 #endif /* ! defined (SIGCONT) */
5869 case SIGINT:
5870 #ifdef VMS
5871 send_process (proc, "\003", 1, Qnil); /* ^C */
5872 goto whoosh;
5873 #endif
5874 case SIGQUIT:
5875 #ifdef VMS
5876 send_process (proc, "\031", 1, Qnil); /* ^Y */
5877 goto whoosh;
5878 #endif
5879 case SIGKILL:
5880 #ifdef VMS
5881 sys$forcex (&(p->pid), 0, 1);
5882 whoosh:
5883 #endif
5884 flush_pending_output (XINT (p->infd));
5885 break;
5888 /* If we don't have process groups, send the signal to the immediate
5889 subprocess. That isn't really right, but it's better than any
5890 obvious alternative. */
5891 if (no_pgrp)
5893 kill (p->pid, signo);
5894 return;
5897 /* gid may be a pid, or minus a pgrp's number */
5898 #ifdef TIOCSIGSEND
5899 if (!NILP (current_group))
5901 if (ioctl (XINT (p->infd), TIOCSIGSEND, signo) == -1)
5902 EMACS_KILLPG (gid, signo);
5904 else
5906 gid = - p->pid;
5907 kill (gid, signo);
5909 #else /* ! defined (TIOCSIGSEND) */
5910 EMACS_KILLPG (gid, signo);
5911 #endif /* ! defined (TIOCSIGSEND) */
5914 DEFUN ("interrupt-process", Finterrupt_process, Sinterrupt_process, 0, 2, 0,
5915 doc: /* Interrupt process PROCESS.
5916 PROCESS may be a process, a buffer, or the name of a process or buffer.
5917 No arg or nil means current buffer's process.
5918 Second arg CURRENT-GROUP non-nil means send signal to
5919 the current process-group of the process's controlling terminal
5920 rather than to the process's own process group.
5921 If the process is a shell, this means interrupt current subjob
5922 rather than the shell.
5924 If CURRENT-GROUP is `lambda', and if the shell owns the terminal,
5925 don't send the signal. */)
5926 (process, current_group)
5927 Lisp_Object process, current_group;
5929 process_send_signal (process, SIGINT, current_group, 0);
5930 return process;
5933 DEFUN ("kill-process", Fkill_process, Skill_process, 0, 2, 0,
5934 doc: /* Kill process PROCESS. May be process or name of one.
5935 See function `interrupt-process' for more details on usage. */)
5936 (process, current_group)
5937 Lisp_Object process, current_group;
5939 process_send_signal (process, SIGKILL, current_group, 0);
5940 return process;
5943 DEFUN ("quit-process", Fquit_process, Squit_process, 0, 2, 0,
5944 doc: /* Send QUIT signal to process PROCESS. May be process or name of one.
5945 See function `interrupt-process' for more details on usage. */)
5946 (process, current_group)
5947 Lisp_Object process, current_group;
5949 process_send_signal (process, SIGQUIT, current_group, 0);
5950 return process;
5953 DEFUN ("stop-process", Fstop_process, Sstop_process, 0, 2, 0,
5954 doc: /* Stop process PROCESS. May be process or name of one.
5955 See function `interrupt-process' for more details on usage.
5956 If PROCESS is a network process, inhibit handling of incoming traffic. */)
5957 (process, current_group)
5958 Lisp_Object process, current_group;
5960 #ifdef HAVE_SOCKETS
5961 if (PROCESSP (process) && NETCONN_P (process))
5963 struct Lisp_Process *p;
5965 p = XPROCESS (process);
5966 if (NILP (p->command)
5967 && XINT (p->infd) >= 0)
5969 FD_CLR (XINT (p->infd), &input_wait_mask);
5970 FD_CLR (XINT (p->infd), &non_keyboard_wait_mask);
5972 p->command = Qt;
5973 return process;
5975 #endif
5976 #ifndef SIGTSTP
5977 error ("No SIGTSTP support");
5978 #else
5979 process_send_signal (process, SIGTSTP, current_group, 0);
5980 #endif
5981 return process;
5984 DEFUN ("continue-process", Fcontinue_process, Scontinue_process, 0, 2, 0,
5985 doc: /* Continue process PROCESS. May be process or name of one.
5986 See function `interrupt-process' for more details on usage.
5987 If PROCESS is a network process, resume handling of incoming traffic. */)
5988 (process, current_group)
5989 Lisp_Object process, current_group;
5991 #ifdef HAVE_SOCKETS
5992 if (PROCESSP (process) && NETCONN_P (process))
5994 struct Lisp_Process *p;
5996 p = XPROCESS (process);
5997 if (EQ (p->command, Qt)
5998 && XINT (p->infd) >= 0
5999 && (!EQ (p->filter, Qt) || EQ (p->status, Qlisten)))
6001 FD_SET (XINT (p->infd), &input_wait_mask);
6002 FD_SET (XINT (p->infd), &non_keyboard_wait_mask);
6004 p->command = Qnil;
6005 return process;
6007 #endif
6008 #ifdef SIGCONT
6009 process_send_signal (process, SIGCONT, current_group, 0);
6010 #else
6011 error ("No SIGCONT support");
6012 #endif
6013 return process;
6016 DEFUN ("signal-process", Fsignal_process, Ssignal_process,
6017 2, 2, "sProcess (name or number): \nnSignal code: ",
6018 doc: /* Send PROCESS the signal with code SIGCODE.
6019 PROCESS may also be an integer specifying the process id of the
6020 process to signal; in this case, the process need not be a child of
6021 this Emacs.
6022 SIGCODE may be an integer, or a symbol whose name is a signal name. */)
6023 (process, sigcode)
6024 Lisp_Object process, sigcode;
6026 pid_t pid;
6028 if (INTEGERP (process))
6030 pid = XINT (process);
6031 goto got_it;
6034 if (FLOATP (process))
6036 pid = (pid_t) XFLOAT (process);
6037 goto got_it;
6040 if (STRINGP (process))
6042 Lisp_Object tem;
6043 if (tem = Fget_process (process), NILP (tem))
6045 pid = XINT (Fstring_to_number (process, make_number (10)));
6046 if (pid > 0)
6047 goto got_it;
6049 process = tem;
6051 else
6052 process = get_process (process);
6054 if (NILP (process))
6055 return process;
6057 CHECK_PROCESS (process);
6058 pid = XPROCESS (process)->pid;
6059 if (pid <= 0)
6060 error ("Cannot signal process %s", SDATA (XPROCESS (process)->name));
6062 got_it:
6064 #define handle_signal(NAME, VALUE) \
6065 else if (!strcmp (name, NAME)) \
6066 XSETINT (sigcode, VALUE)
6068 if (INTEGERP (sigcode))
6070 else
6072 unsigned char *name;
6074 CHECK_SYMBOL (sigcode);
6075 name = SDATA (SYMBOL_NAME (sigcode));
6077 if (!strncmp(name, "SIG", 3))
6078 name += 3;
6080 if (0)
6082 #ifdef SIGHUP
6083 handle_signal ("HUP", SIGHUP);
6084 #endif
6085 #ifdef SIGINT
6086 handle_signal ("INT", SIGINT);
6087 #endif
6088 #ifdef SIGQUIT
6089 handle_signal ("QUIT", SIGQUIT);
6090 #endif
6091 #ifdef SIGILL
6092 handle_signal ("ILL", SIGILL);
6093 #endif
6094 #ifdef SIGABRT
6095 handle_signal ("ABRT", SIGABRT);
6096 #endif
6097 #ifdef SIGEMT
6098 handle_signal ("EMT", SIGEMT);
6099 #endif
6100 #ifdef SIGKILL
6101 handle_signal ("KILL", SIGKILL);
6102 #endif
6103 #ifdef SIGFPE
6104 handle_signal ("FPE", SIGFPE);
6105 #endif
6106 #ifdef SIGBUS
6107 handle_signal ("BUS", SIGBUS);
6108 #endif
6109 #ifdef SIGSEGV
6110 handle_signal ("SEGV", SIGSEGV);
6111 #endif
6112 #ifdef SIGSYS
6113 handle_signal ("SYS", SIGSYS);
6114 #endif
6115 #ifdef SIGPIPE
6116 handle_signal ("PIPE", SIGPIPE);
6117 #endif
6118 #ifdef SIGALRM
6119 handle_signal ("ALRM", SIGALRM);
6120 #endif
6121 #ifdef SIGTERM
6122 handle_signal ("TERM", SIGTERM);
6123 #endif
6124 #ifdef SIGURG
6125 handle_signal ("URG", SIGURG);
6126 #endif
6127 #ifdef SIGSTOP
6128 handle_signal ("STOP", SIGSTOP);
6129 #endif
6130 #ifdef SIGTSTP
6131 handle_signal ("TSTP", SIGTSTP);
6132 #endif
6133 #ifdef SIGCONT
6134 handle_signal ("CONT", SIGCONT);
6135 #endif
6136 #ifdef SIGCHLD
6137 handle_signal ("CHLD", SIGCHLD);
6138 #endif
6139 #ifdef SIGTTIN
6140 handle_signal ("TTIN", SIGTTIN);
6141 #endif
6142 #ifdef SIGTTOU
6143 handle_signal ("TTOU", SIGTTOU);
6144 #endif
6145 #ifdef SIGIO
6146 handle_signal ("IO", SIGIO);
6147 #endif
6148 #ifdef SIGXCPU
6149 handle_signal ("XCPU", SIGXCPU);
6150 #endif
6151 #ifdef SIGXFSZ
6152 handle_signal ("XFSZ", SIGXFSZ);
6153 #endif
6154 #ifdef SIGVTALRM
6155 handle_signal ("VTALRM", SIGVTALRM);
6156 #endif
6157 #ifdef SIGPROF
6158 handle_signal ("PROF", SIGPROF);
6159 #endif
6160 #ifdef SIGWINCH
6161 handle_signal ("WINCH", SIGWINCH);
6162 #endif
6163 #ifdef SIGINFO
6164 handle_signal ("INFO", SIGINFO);
6165 #endif
6166 #ifdef SIGUSR1
6167 handle_signal ("USR1", SIGUSR1);
6168 #endif
6169 #ifdef SIGUSR2
6170 handle_signal ("USR2", SIGUSR2);
6171 #endif
6172 else
6173 error ("Undefined signal name %s", name);
6176 #undef handle_signal
6178 return make_number (kill (pid, XINT (sigcode)));
6181 DEFUN ("process-send-eof", Fprocess_send_eof, Sprocess_send_eof, 0, 1, 0,
6182 doc: /* Make PROCESS see end-of-file in its input.
6183 EOF comes after any text already sent to it.
6184 PROCESS may be a process, a buffer, the name of a process or buffer, or
6185 nil, indicating the current buffer's process.
6186 If PROCESS is a network connection, or is a process communicating
6187 through a pipe (as opposed to a pty), then you cannot send any more
6188 text to PROCESS after you call this function. */)
6189 (process)
6190 Lisp_Object process;
6192 Lisp_Object proc;
6193 struct coding_system *coding;
6195 if (DATAGRAM_CONN_P (process))
6196 return process;
6198 proc = get_process (process);
6199 coding = proc_encode_coding_system[XINT (XPROCESS (proc)->outfd)];
6201 /* Make sure the process is really alive. */
6202 if (XPROCESS (proc)->raw_status_new)
6203 update_status (XPROCESS (proc));
6204 if (! EQ (XPROCESS (proc)->status, Qrun))
6205 error ("Process %s not running", SDATA (XPROCESS (proc)->name));
6207 if (CODING_REQUIRE_FLUSHING (coding))
6209 coding->mode |= CODING_MODE_LAST_BLOCK;
6210 send_process (proc, "", 0, Qnil);
6213 #ifdef VMS
6214 send_process (proc, "\032", 1, Qnil); /* ^z */
6215 #else
6216 if (!NILP (XPROCESS (proc)->pty_flag))
6217 send_process (proc, "\004", 1, Qnil);
6218 else
6220 int old_outfd, new_outfd;
6222 #ifdef HAVE_SHUTDOWN
6223 /* If this is a network connection, or socketpair is used
6224 for communication with the subprocess, call shutdown to cause EOF.
6225 (In some old system, shutdown to socketpair doesn't work.
6226 Then we just can't win.) */
6227 if (XPROCESS (proc)->pid == 0
6228 || XINT (XPROCESS (proc)->outfd) == XINT (XPROCESS (proc)->infd))
6229 shutdown (XINT (XPROCESS (proc)->outfd), 1);
6230 /* In case of socketpair, outfd == infd, so don't close it. */
6231 if (XINT (XPROCESS (proc)->outfd) != XINT (XPROCESS (proc)->infd))
6232 emacs_close (XINT (XPROCESS (proc)->outfd));
6233 #else /* not HAVE_SHUTDOWN */
6234 emacs_close (XINT (XPROCESS (proc)->outfd));
6235 #endif /* not HAVE_SHUTDOWN */
6236 new_outfd = emacs_open (NULL_DEVICE, O_WRONLY, 0);
6237 old_outfd = XINT (XPROCESS (proc)->outfd);
6239 if (!proc_encode_coding_system[new_outfd])
6240 proc_encode_coding_system[new_outfd]
6241 = (struct coding_system *) xmalloc (sizeof (struct coding_system));
6242 bcopy (proc_encode_coding_system[old_outfd],
6243 proc_encode_coding_system[new_outfd],
6244 sizeof (struct coding_system));
6245 bzero (proc_encode_coding_system[old_outfd],
6246 sizeof (struct coding_system));
6248 XSETINT (XPROCESS (proc)->outfd, new_outfd);
6250 #endif /* VMS */
6251 return process;
6254 /* Kill all processes associated with `buffer'.
6255 If `buffer' is nil, kill all processes */
6257 void
6258 kill_buffer_processes (buffer)
6259 Lisp_Object buffer;
6261 Lisp_Object tail, proc;
6263 for (tail = Vprocess_alist; GC_CONSP (tail); tail = XCDR (tail))
6265 proc = XCDR (XCAR (tail));
6266 if (GC_PROCESSP (proc)
6267 && (NILP (buffer) || EQ (XPROCESS (proc)->buffer, buffer)))
6269 if (NETCONN_P (proc))
6270 Fdelete_process (proc);
6271 else if (XINT (XPROCESS (proc)->infd) >= 0)
6272 process_send_signal (proc, SIGHUP, Qnil, 1);
6277 /* On receipt of a signal that a child status has changed, loop asking
6278 about children with changed statuses until the system says there
6279 are no more.
6281 All we do is change the status; we do not run sentinels or print
6282 notifications. That is saved for the next time keyboard input is
6283 done, in order to avoid timing errors.
6285 ** WARNING: this can be called during garbage collection.
6286 Therefore, it must not be fooled by the presence of mark bits in
6287 Lisp objects.
6289 ** USG WARNING: Although it is not obvious from the documentation
6290 in signal(2), on a USG system the SIGCLD handler MUST NOT call
6291 signal() before executing at least one wait(), otherwise the
6292 handler will be called again, resulting in an infinite loop. The
6293 relevant portion of the documentation reads "SIGCLD signals will be
6294 queued and the signal-catching function will be continually
6295 reentered until the queue is empty". Invoking signal() causes the
6296 kernel to reexamine the SIGCLD queue. Fred Fish, UniSoft Systems
6297 Inc.
6299 ** Malloc WARNING: This should never call malloc either directly or
6300 indirectly; if it does, that is a bug */
6302 SIGTYPE
6303 sigchld_handler (signo)
6304 int signo;
6306 int old_errno = errno;
6307 Lisp_Object proc;
6308 register struct Lisp_Process *p;
6309 extern EMACS_TIME *input_available_clear_time;
6311 SIGNAL_THREAD_CHECK (signo);
6313 #ifdef BSD4_1
6314 extern int sigheld;
6315 sigheld |= sigbit (SIGCHLD);
6316 #endif
6318 while (1)
6320 register int pid;
6321 WAITTYPE w;
6322 Lisp_Object tail;
6324 #ifdef WNOHANG
6325 #ifndef WUNTRACED
6326 #define WUNTRACED 0
6327 #endif /* no WUNTRACED */
6328 /* Keep trying to get a status until we get a definitive result. */
6331 errno = 0;
6332 pid = wait3 (&w, WNOHANG | WUNTRACED, 0);
6334 while (pid < 0 && errno == EINTR);
6336 if (pid <= 0)
6338 /* PID == 0 means no processes found, PID == -1 means a real
6339 failure. We have done all our job, so return. */
6341 /* USG systems forget handlers when they are used;
6342 must reestablish each time */
6343 #if defined (USG) && !defined (POSIX_SIGNALS)
6344 signal (signo, sigchld_handler); /* WARNING - must come after wait3() */
6345 #endif
6346 #ifdef BSD4_1
6347 sigheld &= ~sigbit (SIGCHLD);
6348 sigrelse (SIGCHLD);
6349 #endif
6350 errno = old_errno;
6351 return;
6353 #else
6354 pid = wait (&w);
6355 #endif /* no WNOHANG */
6357 /* Find the process that signaled us, and record its status. */
6359 p = 0;
6360 for (tail = Vprocess_alist; GC_CONSP (tail); tail = XCDR (tail))
6362 proc = XCDR (XCAR (tail));
6363 p = XPROCESS (proc);
6364 if (GC_EQ (p->childp, Qt) && p->pid == pid)
6365 break;
6366 p = 0;
6369 /* Look for an asynchronous process whose pid hasn't been filled
6370 in yet. */
6371 if (p == 0)
6372 for (tail = Vprocess_alist; GC_CONSP (tail); tail = XCDR (tail))
6374 proc = XCDR (XCAR (tail));
6375 p = XPROCESS (proc);
6376 if (p->pid == -1)
6377 break;
6378 p = 0;
6381 /* Change the status of the process that was found. */
6382 if (p != 0)
6384 union { int i; WAITTYPE wt; } u;
6385 int clear_desc_flag = 0;
6387 XSETINT (p->tick, ++process_tick);
6388 u.wt = w;
6389 p->raw_status = u.i;
6390 p->raw_status_new = 1;
6392 /* If process has terminated, stop waiting for its output. */
6393 if ((WIFSIGNALED (w) || WIFEXITED (w))
6394 && XINT (p->infd) >= 0)
6395 clear_desc_flag = 1;
6397 /* We use clear_desc_flag to avoid a compiler bug in Microsoft C. */
6398 if (clear_desc_flag)
6400 FD_CLR (XINT (p->infd), &input_wait_mask);
6401 FD_CLR (XINT (p->infd), &non_keyboard_wait_mask);
6404 /* Tell wait_reading_process_output that it needs to wake up and
6405 look around. */
6406 if (input_available_clear_time)
6407 EMACS_SET_SECS_USECS (*input_available_clear_time, 0, 0);
6410 /* There was no asynchronous process found for that id. Check
6411 if we have a synchronous process. */
6412 else
6414 synch_process_alive = 0;
6416 /* Report the status of the synchronous process. */
6417 if (WIFEXITED (w))
6418 synch_process_retcode = WRETCODE (w);
6419 else if (WIFSIGNALED (w))
6420 synch_process_termsig = WTERMSIG (w);
6422 /* Tell wait_reading_process_output that it needs to wake up and
6423 look around. */
6424 if (input_available_clear_time)
6425 EMACS_SET_SECS_USECS (*input_available_clear_time, 0, 0);
6428 /* On some systems, we must return right away.
6429 If any more processes want to signal us, we will
6430 get another signal.
6431 Otherwise (on systems that have WNOHANG), loop around
6432 to use up all the processes that have something to tell us. */
6433 #if (defined WINDOWSNT \
6434 || (defined USG && !defined GNU_LINUX \
6435 && !(defined HPUX && defined WNOHANG)))
6436 #if defined (USG) && ! defined (POSIX_SIGNALS)
6437 signal (signo, sigchld_handler);
6438 #endif
6439 errno = old_errno;
6440 return;
6441 #endif /* USG, but not HPUX with WNOHANG */
6446 static Lisp_Object
6447 exec_sentinel_unwind (data)
6448 Lisp_Object data;
6450 XPROCESS (XCAR (data))->sentinel = XCDR (data);
6451 return Qnil;
6454 static Lisp_Object
6455 exec_sentinel_error_handler (error)
6456 Lisp_Object error;
6458 cmd_error_internal (error, "error in process sentinel: ");
6459 Vinhibit_quit = Qt;
6460 update_echo_area ();
6461 Fsleep_for (make_number (2), Qnil);
6462 return Qt;
6465 static void
6466 exec_sentinel (proc, reason)
6467 Lisp_Object proc, reason;
6469 Lisp_Object sentinel, obuffer, odeactivate, okeymap;
6470 register struct Lisp_Process *p = XPROCESS (proc);
6471 int count = SPECPDL_INDEX ();
6472 int outer_running_asynch_code = running_asynch_code;
6473 int waiting = waiting_for_user_input_p;
6475 /* No need to gcpro these, because all we do with them later
6476 is test them for EQness, and none of them should be a string. */
6477 odeactivate = Vdeactivate_mark;
6478 XSETBUFFER (obuffer, current_buffer);
6479 okeymap = current_buffer->keymap;
6481 sentinel = p->sentinel;
6482 if (NILP (sentinel))
6483 return;
6485 /* Zilch the sentinel while it's running, to avoid recursive invocations;
6486 assure that it gets restored no matter how the sentinel exits. */
6487 p->sentinel = Qnil;
6488 record_unwind_protect (exec_sentinel_unwind, Fcons (proc, sentinel));
6489 /* Inhibit quit so that random quits don't screw up a running filter. */
6490 specbind (Qinhibit_quit, Qt);
6491 specbind (Qlast_nonmenu_event, Qt);
6493 /* In case we get recursively called,
6494 and we already saved the match data nonrecursively,
6495 save the same match data in safely recursive fashion. */
6496 if (outer_running_asynch_code)
6498 Lisp_Object tem;
6499 tem = Fmatch_data (Qnil, Qnil, Qnil);
6500 restore_search_regs ();
6501 record_unwind_save_match_data ();
6502 Fset_match_data (tem, Qt);
6505 /* For speed, if a search happens within this code,
6506 save the match data in a special nonrecursive fashion. */
6507 running_asynch_code = 1;
6509 internal_condition_case_1 (read_process_output_call,
6510 Fcons (sentinel,
6511 Fcons (proc, Fcons (reason, Qnil))),
6512 !NILP (Vdebug_on_error) ? Qnil : Qerror,
6513 exec_sentinel_error_handler);
6515 /* If we saved the match data nonrecursively, restore it now. */
6516 restore_search_regs ();
6517 running_asynch_code = outer_running_asynch_code;
6519 Vdeactivate_mark = odeactivate;
6521 /* Restore waiting_for_user_input_p as it was
6522 when we were called, in case the filter clobbered it. */
6523 waiting_for_user_input_p = waiting;
6525 #if 0
6526 if (! EQ (Fcurrent_buffer (), obuffer)
6527 || ! EQ (current_buffer->keymap, okeymap))
6528 #endif
6529 /* But do it only if the caller is actually going to read events.
6530 Otherwise there's no need to make him wake up, and it could
6531 cause trouble (for example it would make Fsit_for return). */
6532 if (waiting_for_user_input_p == -1)
6533 record_asynch_buffer_change ();
6535 unbind_to (count, Qnil);
6538 /* Report all recent events of a change in process status
6539 (either run the sentinel or output a message).
6540 This is usually done while Emacs is waiting for keyboard input
6541 but can be done at other times. */
6543 static void
6544 status_notify (deleting_process)
6545 struct Lisp_Process *deleting_process;
6547 register Lisp_Object proc, buffer;
6548 Lisp_Object tail, msg;
6549 struct gcpro gcpro1, gcpro2;
6551 tail = Qnil;
6552 msg = Qnil;
6553 /* We need to gcpro tail; if read_process_output calls a filter
6554 which deletes a process and removes the cons to which tail points
6555 from Vprocess_alist, and then causes a GC, tail is an unprotected
6556 reference. */
6557 GCPRO2 (tail, msg);
6559 /* Set this now, so that if new processes are created by sentinels
6560 that we run, we get called again to handle their status changes. */
6561 update_tick = process_tick;
6563 for (tail = Vprocess_alist; !NILP (tail); tail = Fcdr (tail))
6565 Lisp_Object symbol;
6566 register struct Lisp_Process *p;
6568 proc = Fcdr (Fcar (tail));
6569 p = XPROCESS (proc);
6571 if (XINT (p->tick) != XINT (p->update_tick))
6573 XSETINT (p->update_tick, XINT (p->tick));
6575 /* If process is still active, read any output that remains. */
6576 while (! EQ (p->filter, Qt)
6577 && ! EQ (p->status, Qconnect)
6578 && ! EQ (p->status, Qlisten)
6579 && ! EQ (p->command, Qt) /* Network process not stopped. */
6580 && XINT (p->infd) >= 0
6581 && p != deleting_process
6582 && read_process_output (proc, XINT (p->infd)) > 0);
6584 buffer = p->buffer;
6586 /* Get the text to use for the message. */
6587 if (p->raw_status_new)
6588 update_status (p);
6589 msg = status_message (p);
6591 /* If process is terminated, deactivate it or delete it. */
6592 symbol = p->status;
6593 if (CONSP (p->status))
6594 symbol = XCAR (p->status);
6596 if (EQ (symbol, Qsignal) || EQ (symbol, Qexit)
6597 || EQ (symbol, Qclosed))
6599 if (delete_exited_processes)
6600 remove_process (proc);
6601 else
6602 deactivate_process (proc);
6605 /* The actions above may have further incremented p->tick.
6606 So set p->update_tick again
6607 so that an error in the sentinel will not cause
6608 this code to be run again. */
6609 XSETINT (p->update_tick, XINT (p->tick));
6610 /* Now output the message suitably. */
6611 if (!NILP (p->sentinel))
6612 exec_sentinel (proc, msg);
6613 /* Don't bother with a message in the buffer
6614 when a process becomes runnable. */
6615 else if (!EQ (symbol, Qrun) && !NILP (buffer))
6617 Lisp_Object ro, tem;
6618 struct buffer *old = current_buffer;
6619 int opoint, opoint_byte;
6620 int before, before_byte;
6622 ro = XBUFFER (buffer)->read_only;
6624 /* Avoid error if buffer is deleted
6625 (probably that's why the process is dead, too) */
6626 if (NILP (XBUFFER (buffer)->name))
6627 continue;
6628 Fset_buffer (buffer);
6630 opoint = PT;
6631 opoint_byte = PT_BYTE;
6632 /* Insert new output into buffer
6633 at the current end-of-output marker,
6634 thus preserving logical ordering of input and output. */
6635 if (XMARKER (p->mark)->buffer)
6636 Fgoto_char (p->mark);
6637 else
6638 SET_PT_BOTH (ZV, ZV_BYTE);
6640 before = PT;
6641 before_byte = PT_BYTE;
6643 tem = current_buffer->read_only;
6644 current_buffer->read_only = Qnil;
6645 insert_string ("\nProcess ");
6646 Finsert (1, &p->name);
6647 insert_string (" ");
6648 Finsert (1, &msg);
6649 current_buffer->read_only = tem;
6650 set_marker_both (p->mark, p->buffer, PT, PT_BYTE);
6652 if (opoint >= before)
6653 SET_PT_BOTH (opoint + (PT - before),
6654 opoint_byte + (PT_BYTE - before_byte));
6655 else
6656 SET_PT_BOTH (opoint, opoint_byte);
6658 set_buffer_internal (old);
6661 } /* end for */
6663 update_mode_lines++; /* in case buffers use %s in mode-line-format */
6664 redisplay_preserve_echo_area (13);
6666 UNGCPRO;
6670 DEFUN ("set-process-coding-system", Fset_process_coding_system,
6671 Sset_process_coding_system, 1, 3, 0,
6672 doc: /* Set coding systems of PROCESS to DECODING and ENCODING.
6673 DECODING will be used to decode subprocess output and ENCODING to
6674 encode subprocess input. */)
6675 (process, decoding, encoding)
6676 register Lisp_Object process, decoding, encoding;
6678 register struct Lisp_Process *p;
6680 CHECK_PROCESS (process);
6681 p = XPROCESS (process);
6682 if (XINT (p->infd) < 0)
6683 error ("Input file descriptor of %s closed", SDATA (p->name));
6684 if (XINT (p->outfd) < 0)
6685 error ("Output file descriptor of %s closed", SDATA (p->name));
6686 Fcheck_coding_system (decoding);
6687 Fcheck_coding_system (encoding);
6689 p->decode_coding_system = decoding;
6690 p->encode_coding_system = encoding;
6691 setup_process_coding_systems (process);
6693 return Qnil;
6696 DEFUN ("process-coding-system",
6697 Fprocess_coding_system, Sprocess_coding_system, 1, 1, 0,
6698 doc: /* Return a cons of coding systems for decoding and encoding of PROCESS. */)
6699 (process)
6700 register Lisp_Object process;
6702 CHECK_PROCESS (process);
6703 return Fcons (XPROCESS (process)->decode_coding_system,
6704 XPROCESS (process)->encode_coding_system);
6707 DEFUN ("set-process-filter-multibyte", Fset_process_filter_multibyte,
6708 Sset_process_filter_multibyte, 2, 2, 0,
6709 doc: /* Set multibyteness of the strings given to PROCESS's filter.
6710 If FLAG is non-nil, the filter is given multibyte strings.
6711 If FLAG is nil, the filter is given unibyte strings. In this case,
6712 all character code conversion except for end-of-line conversion is
6713 suppressed. */)
6714 (process, flag)
6715 Lisp_Object process, flag;
6717 register struct Lisp_Process *p;
6719 CHECK_PROCESS (process);
6720 p = XPROCESS (process);
6721 p->filter_multibyte = flag;
6722 setup_process_coding_systems (process);
6724 return Qnil;
6727 DEFUN ("process-filter-multibyte-p", Fprocess_filter_multibyte_p,
6728 Sprocess_filter_multibyte_p, 1, 1, 0,
6729 doc: /* Return t if a multibyte string is given to PROCESS's filter.*/)
6730 (process)
6731 Lisp_Object process;
6733 register struct Lisp_Process *p;
6735 CHECK_PROCESS (process);
6736 p = XPROCESS (process);
6738 return (NILP (p->filter_multibyte) ? Qnil : Qt);
6743 /* The first time this is called, assume keyboard input comes from DESC
6744 instead of from where we used to expect it.
6745 Subsequent calls mean assume input keyboard can come from DESC
6746 in addition to other places. */
6748 static int add_keyboard_wait_descriptor_called_flag;
6750 void
6751 add_keyboard_wait_descriptor (desc)
6752 int desc;
6754 if (! add_keyboard_wait_descriptor_called_flag)
6755 FD_CLR (0, &input_wait_mask);
6756 add_keyboard_wait_descriptor_called_flag = 1;
6757 FD_SET (desc, &input_wait_mask);
6758 FD_SET (desc, &non_process_wait_mask);
6759 if (desc > max_keyboard_desc)
6760 max_keyboard_desc = desc;
6763 /* From now on, do not expect DESC to give keyboard input. */
6765 void
6766 delete_keyboard_wait_descriptor (desc)
6767 int desc;
6769 int fd;
6770 int lim = max_keyboard_desc;
6772 FD_CLR (desc, &input_wait_mask);
6773 FD_CLR (desc, &non_process_wait_mask);
6775 if (desc == max_keyboard_desc)
6776 for (fd = 0; fd < lim; fd++)
6777 if (FD_ISSET (fd, &input_wait_mask)
6778 && !FD_ISSET (fd, &non_keyboard_wait_mask))
6779 max_keyboard_desc = fd;
6782 /* Return nonzero if *MASK has a bit set
6783 that corresponds to one of the keyboard input descriptors. */
6785 static int
6786 keyboard_bit_set (mask)
6787 SELECT_TYPE *mask;
6789 int fd;
6791 for (fd = 0; fd <= max_keyboard_desc; fd++)
6792 if (FD_ISSET (fd, mask) && FD_ISSET (fd, &input_wait_mask)
6793 && !FD_ISSET (fd, &non_keyboard_wait_mask))
6794 return 1;
6796 return 0;
6799 void
6800 init_process ()
6802 register int i;
6804 #ifdef SIGCHLD
6805 #ifndef CANNOT_DUMP
6806 if (! noninteractive || initialized)
6807 #endif
6808 signal (SIGCHLD, sigchld_handler);
6809 #endif
6811 FD_ZERO (&input_wait_mask);
6812 FD_ZERO (&non_keyboard_wait_mask);
6813 FD_ZERO (&non_process_wait_mask);
6814 max_process_desc = 0;
6816 #ifdef NON_BLOCKING_CONNECT
6817 FD_ZERO (&connect_wait_mask);
6818 num_pending_connects = 0;
6819 #endif
6821 #ifdef ADAPTIVE_READ_BUFFERING
6822 process_output_delay_count = 0;
6823 process_output_skip = 0;
6824 #endif
6826 FD_SET (0, &input_wait_mask);
6828 Vprocess_alist = Qnil;
6829 for (i = 0; i < MAXDESC; i++)
6831 chan_process[i] = Qnil;
6832 proc_buffered_char[i] = -1;
6834 bzero (proc_decode_coding_system, sizeof proc_decode_coding_system);
6835 bzero (proc_encode_coding_system, sizeof proc_encode_coding_system);
6836 #ifdef DATAGRAM_SOCKETS
6837 bzero (datagram_address, sizeof datagram_address);
6838 #endif
6840 #ifdef HAVE_SOCKETS
6842 Lisp_Object subfeatures = Qnil;
6843 struct socket_options *sopt;
6845 #define ADD_SUBFEATURE(key, val) \
6846 subfeatures = Fcons (Fcons (key, Fcons (val, Qnil)), subfeatures)
6848 #ifdef NON_BLOCKING_CONNECT
6849 ADD_SUBFEATURE (QCnowait, Qt);
6850 #endif
6851 #ifdef DATAGRAM_SOCKETS
6852 ADD_SUBFEATURE (QCtype, Qdatagram);
6853 #endif
6854 #ifdef HAVE_LOCAL_SOCKETS
6855 ADD_SUBFEATURE (QCfamily, Qlocal);
6856 #endif
6857 ADD_SUBFEATURE (QCfamily, Qipv4);
6858 #ifdef AF_INET6
6859 ADD_SUBFEATURE (QCfamily, Qipv6);
6860 #endif
6861 #ifdef HAVE_GETSOCKNAME
6862 ADD_SUBFEATURE (QCservice, Qt);
6863 #endif
6864 #if !defined(TERM) && (defined(O_NONBLOCK) || defined(O_NDELAY))
6865 ADD_SUBFEATURE (QCserver, Qt);
6866 #endif
6868 for (sopt = socket_options; sopt->name; sopt++)
6869 subfeatures = Fcons (intern (sopt->name), subfeatures);
6871 Fprovide (intern ("make-network-process"), subfeatures);
6873 #endif /* HAVE_SOCKETS */
6875 #if defined (DARWIN) || defined (MAC_OSX)
6876 /* PTYs are broken on Darwin < 6, but are sometimes useful for interactive
6877 processes. As such, we only change the default value. */
6878 if (initialized)
6880 char *release = get_operating_system_release();
6881 if (!release || !release[0] || (release[0] < MIN_PTY_KERNEL_VERSION
6882 && release[1] == '.')) {
6883 Vprocess_connection_type = Qnil;
6886 #endif
6889 void
6890 syms_of_process ()
6892 Qprocessp = intern ("processp");
6893 staticpro (&Qprocessp);
6894 Qrun = intern ("run");
6895 staticpro (&Qrun);
6896 Qstop = intern ("stop");
6897 staticpro (&Qstop);
6898 Qsignal = intern ("signal");
6899 staticpro (&Qsignal);
6901 /* Qexit is already staticpro'd by syms_of_eval; don't staticpro it
6902 here again.
6904 Qexit = intern ("exit");
6905 staticpro (&Qexit); */
6907 Qopen = intern ("open");
6908 staticpro (&Qopen);
6909 Qclosed = intern ("closed");
6910 staticpro (&Qclosed);
6911 Qconnect = intern ("connect");
6912 staticpro (&Qconnect);
6913 Qfailed = intern ("failed");
6914 staticpro (&Qfailed);
6915 Qlisten = intern ("listen");
6916 staticpro (&Qlisten);
6917 Qlocal = intern ("local");
6918 staticpro (&Qlocal);
6919 Qipv4 = intern ("ipv4");
6920 staticpro (&Qipv4);
6921 #ifdef AF_INET6
6922 Qipv6 = intern ("ipv6");
6923 staticpro (&Qipv6);
6924 #endif
6925 Qdatagram = intern ("datagram");
6926 staticpro (&Qdatagram);
6928 QCname = intern (":name");
6929 staticpro (&QCname);
6930 QCbuffer = intern (":buffer");
6931 staticpro (&QCbuffer);
6932 QChost = intern (":host");
6933 staticpro (&QChost);
6934 QCservice = intern (":service");
6935 staticpro (&QCservice);
6936 QCtype = intern (":type");
6937 staticpro (&QCtype);
6938 QClocal = intern (":local");
6939 staticpro (&QClocal);
6940 QCremote = intern (":remote");
6941 staticpro (&QCremote);
6942 QCcoding = intern (":coding");
6943 staticpro (&QCcoding);
6944 QCserver = intern (":server");
6945 staticpro (&QCserver);
6946 QCnowait = intern (":nowait");
6947 staticpro (&QCnowait);
6948 QCsentinel = intern (":sentinel");
6949 staticpro (&QCsentinel);
6950 QClog = intern (":log");
6951 staticpro (&QClog);
6952 QCnoquery = intern (":noquery");
6953 staticpro (&QCnoquery);
6954 QCstop = intern (":stop");
6955 staticpro (&QCstop);
6956 QCoptions = intern (":options");
6957 staticpro (&QCoptions);
6958 QCplist = intern (":plist");
6959 staticpro (&QCplist);
6960 QCfilter_multibyte = intern (":filter-multibyte");
6961 staticpro (&QCfilter_multibyte);
6963 Qlast_nonmenu_event = intern ("last-nonmenu-event");
6964 staticpro (&Qlast_nonmenu_event);
6966 staticpro (&Vprocess_alist);
6968 DEFVAR_BOOL ("delete-exited-processes", &delete_exited_processes,
6969 doc: /* *Non-nil means delete processes immediately when they exit.
6970 nil means don't delete them until `list-processes' is run. */);
6972 delete_exited_processes = 1;
6974 DEFVAR_LISP ("process-connection-type", &Vprocess_connection_type,
6975 doc: /* Control type of device used to communicate with subprocesses.
6976 Values are nil to use a pipe, or t or `pty' to use a pty.
6977 The value has no effect if the system has no ptys or if all ptys are busy:
6978 then a pipe is used in any case.
6979 The value takes effect when `start-process' is called. */);
6980 Vprocess_connection_type = Qt;
6982 #ifdef ADAPTIVE_READ_BUFFERING
6983 DEFVAR_LISP ("process-adaptive-read-buffering", &Vprocess_adaptive_read_buffering,
6984 doc: /* If non-nil, improve receive buffering by delaying after short reads.
6985 On some systems, when Emacs reads the output from a subprocess, the output data
6986 is read in very small blocks, potentially resulting in very poor performance.
6987 This behavior can be remedied to some extent by setting this variable to a
6988 non-nil value, as it will automatically delay reading from such processes, to
6989 allow them to produce more output before Emacs tries to read it.
6990 If the value is t, the delay is reset after each write to the process; any other
6991 non-nil value means that the delay is not reset on write.
6992 The variable takes effect when `start-process' is called. */);
6993 Vprocess_adaptive_read_buffering = Qt;
6994 #endif
6996 defsubr (&Sprocessp);
6997 defsubr (&Sget_process);
6998 defsubr (&Sget_buffer_process);
6999 defsubr (&Sdelete_process);
7000 defsubr (&Sprocess_status);
7001 defsubr (&Sprocess_exit_status);
7002 defsubr (&Sprocess_id);
7003 defsubr (&Sprocess_name);
7004 defsubr (&Sprocess_tty_name);
7005 defsubr (&Sprocess_command);
7006 defsubr (&Sset_process_buffer);
7007 defsubr (&Sprocess_buffer);
7008 defsubr (&Sprocess_mark);
7009 defsubr (&Sset_process_filter);
7010 defsubr (&Sprocess_filter);
7011 defsubr (&Sset_process_sentinel);
7012 defsubr (&Sprocess_sentinel);
7013 defsubr (&Sset_process_window_size);
7014 defsubr (&Sset_process_inherit_coding_system_flag);
7015 defsubr (&Sprocess_inherit_coding_system_flag);
7016 defsubr (&Sset_process_query_on_exit_flag);
7017 defsubr (&Sprocess_query_on_exit_flag);
7018 defsubr (&Sprocess_contact);
7019 defsubr (&Sprocess_plist);
7020 defsubr (&Sset_process_plist);
7021 defsubr (&Slist_processes);
7022 defsubr (&Sprocess_list);
7023 defsubr (&Sstart_process);
7024 #ifdef HAVE_SOCKETS
7025 defsubr (&Sset_network_process_option);
7026 defsubr (&Smake_network_process);
7027 defsubr (&Sformat_network_address);
7028 #endif /* HAVE_SOCKETS */
7029 #if defined(HAVE_SOCKETS) && defined(HAVE_NET_IF_H) && defined(HAVE_SYS_IOCTL_H)
7030 #ifdef SIOCGIFCONF
7031 defsubr (&Snetwork_interface_list);
7032 #endif
7033 #if defined(SIOCGIFADDR) || defined(SIOCGIFHWADDR) || defined(SIOCGIFFLAGS)
7034 defsubr (&Snetwork_interface_info);
7035 #endif
7036 #endif /* HAVE_SOCKETS ... */
7037 #ifdef DATAGRAM_SOCKETS
7038 defsubr (&Sprocess_datagram_address);
7039 defsubr (&Sset_process_datagram_address);
7040 #endif
7041 defsubr (&Saccept_process_output);
7042 defsubr (&Sprocess_send_region);
7043 defsubr (&Sprocess_send_string);
7044 defsubr (&Sinterrupt_process);
7045 defsubr (&Skill_process);
7046 defsubr (&Squit_process);
7047 defsubr (&Sstop_process);
7048 defsubr (&Scontinue_process);
7049 defsubr (&Sprocess_running_child_p);
7050 defsubr (&Sprocess_send_eof);
7051 defsubr (&Ssignal_process);
7052 defsubr (&Swaiting_for_user_input_p);
7053 /* defsubr (&Sprocess_connection); */
7054 defsubr (&Sset_process_coding_system);
7055 defsubr (&Sprocess_coding_system);
7056 defsubr (&Sset_process_filter_multibyte);
7057 defsubr (&Sprocess_filter_multibyte_p);
7061 #else /* not subprocesses */
7063 #include <sys/types.h>
7064 #include <errno.h>
7066 #include "lisp.h"
7067 #include "systime.h"
7068 #include "charset.h"
7069 #include "coding.h"
7070 #include "termopts.h"
7071 #include "sysselect.h"
7073 extern int frame_garbaged;
7075 extern EMACS_TIME timer_check ();
7076 extern int timers_run;
7078 Lisp_Object QCtype;
7080 /* As described above, except assuming that there are no subprocesses:
7082 Wait for timeout to elapse and/or keyboard input to be available.
7084 time_limit is:
7085 timeout in seconds, or
7086 zero for no limit, or
7087 -1 means gobble data immediately available but don't wait for any.
7089 read_kbd is a Lisp_Object:
7090 0 to ignore keyboard input, or
7091 1 to return when input is available, or
7092 -1 means caller will actually read the input, so don't throw to
7093 the quit handler.
7095 see full version for other parameters. We know that wait_proc will
7096 always be NULL, since `subprocesses' isn't defined.
7098 do_display != 0 means redisplay should be done to show subprocess
7099 output that arrives.
7101 Return true iff we received input from any process. */
7104 wait_reading_process_output (time_limit, microsecs, read_kbd, do_display,
7105 wait_for_cell, wait_proc, just_wait_proc)
7106 int time_limit, microsecs, read_kbd, do_display;
7107 Lisp_Object wait_for_cell;
7108 struct Lisp_Process *wait_proc;
7109 int just_wait_proc;
7111 register int nfds;
7112 EMACS_TIME end_time, timeout;
7113 SELECT_TYPE waitchannels;
7114 int xerrno;
7116 /* What does time_limit really mean? */
7117 if (time_limit || microsecs)
7119 EMACS_GET_TIME (end_time);
7120 EMACS_SET_SECS_USECS (timeout, time_limit, microsecs);
7121 EMACS_ADD_TIME (end_time, end_time, timeout);
7124 /* Turn off periodic alarms (in case they are in use)
7125 and then turn off any other atimers,
7126 because the select emulator uses alarms. */
7127 stop_polling ();
7128 turn_on_atimers (0);
7130 while (1)
7132 int timeout_reduced_for_timers = 0;
7134 /* If calling from keyboard input, do not quit
7135 since we want to return C-g as an input character.
7136 Otherwise, do pending quit if requested. */
7137 if (read_kbd >= 0)
7138 QUIT;
7140 /* Exit now if the cell we're waiting for became non-nil. */
7141 if (! NILP (wait_for_cell) && ! NILP (XCAR (wait_for_cell)))
7142 break;
7144 /* Compute time from now till when time limit is up */
7145 /* Exit if already run out */
7146 if (time_limit == -1)
7148 /* -1 specified for timeout means
7149 gobble output available now
7150 but don't wait at all. */
7152 EMACS_SET_SECS_USECS (timeout, 0, 0);
7154 else if (time_limit || microsecs)
7156 EMACS_GET_TIME (timeout);
7157 EMACS_SUB_TIME (timeout, end_time, timeout);
7158 if (EMACS_TIME_NEG_P (timeout))
7159 break;
7161 else
7163 EMACS_SET_SECS_USECS (timeout, 100000, 0);
7166 /* If our caller will not immediately handle keyboard events,
7167 run timer events directly.
7168 (Callers that will immediately read keyboard events
7169 call timer_delay on their own.) */
7170 if (NILP (wait_for_cell))
7172 EMACS_TIME timer_delay;
7176 int old_timers_run = timers_run;
7177 timer_delay = timer_check (1);
7178 if (timers_run != old_timers_run && do_display)
7179 /* We must retry, since a timer may have requeued itself
7180 and that could alter the time delay. */
7181 redisplay_preserve_echo_area (14);
7182 else
7183 break;
7185 while (!detect_input_pending ());
7187 /* If there is unread keyboard input, also return. */
7188 if (read_kbd != 0
7189 && requeued_events_pending_p ())
7190 break;
7192 if (! EMACS_TIME_NEG_P (timer_delay) && time_limit != -1)
7194 EMACS_TIME difference;
7195 EMACS_SUB_TIME (difference, timer_delay, timeout);
7196 if (EMACS_TIME_NEG_P (difference))
7198 timeout = timer_delay;
7199 timeout_reduced_for_timers = 1;
7204 /* Cause C-g and alarm signals to take immediate action,
7205 and cause input available signals to zero out timeout. */
7206 if (read_kbd < 0)
7207 set_waiting_for_input (&timeout);
7209 /* Wait till there is something to do. */
7211 if (! read_kbd && NILP (wait_for_cell))
7212 FD_ZERO (&waitchannels);
7213 else
7214 FD_SET (0, &waitchannels);
7216 /* If a frame has been newly mapped and needs updating,
7217 reprocess its display stuff. */
7218 if (frame_garbaged && do_display)
7220 clear_waiting_for_input ();
7221 redisplay_preserve_echo_area (15);
7222 if (read_kbd < 0)
7223 set_waiting_for_input (&timeout);
7226 if (read_kbd && detect_input_pending ())
7228 nfds = 0;
7229 FD_ZERO (&waitchannels);
7231 else
7232 nfds = select (1, &waitchannels, (SELECT_TYPE *)0, (SELECT_TYPE *)0,
7233 &timeout);
7235 xerrno = errno;
7237 /* Make C-g and alarm signals set flags again */
7238 clear_waiting_for_input ();
7240 /* If we woke up due to SIGWINCH, actually change size now. */
7241 do_pending_window_change (0);
7243 if (time_limit && nfds == 0 && ! timeout_reduced_for_timers)
7244 /* We waited the full specified time, so return now. */
7245 break;
7247 if (nfds == -1)
7249 /* If the system call was interrupted, then go around the
7250 loop again. */
7251 if (xerrno == EINTR)
7252 FD_ZERO (&waitchannels);
7253 else
7254 error ("select error: %s", emacs_strerror (xerrno));
7256 #ifdef sun
7257 else if (nfds > 0 && (waitchannels & 1) && interrupt_input)
7258 /* System sometimes fails to deliver SIGIO. */
7259 kill (getpid (), SIGIO);
7260 #endif
7261 #ifdef SIGIO
7262 if (read_kbd && interrupt_input && (waitchannels & 1))
7263 kill (getpid (), SIGIO);
7264 #endif
7266 /* Check for keyboard input */
7268 if (read_kbd
7269 && detect_input_pending_run_timers (do_display))
7271 swallow_events (do_display);
7272 if (detect_input_pending_run_timers (do_display))
7273 break;
7276 /* If there is unread keyboard input, also return. */
7277 if (read_kbd
7278 && requeued_events_pending_p ())
7279 break;
7281 /* If wait_for_cell. check for keyboard input
7282 but don't run any timers.
7283 ??? (It seems wrong to me to check for keyboard
7284 input at all when wait_for_cell, but the code
7285 has been this way since July 1994.
7286 Try changing this after version 19.31.) */
7287 if (! NILP (wait_for_cell)
7288 && detect_input_pending ())
7290 swallow_events (do_display);
7291 if (detect_input_pending ())
7292 break;
7295 /* Exit now if the cell we're waiting for became non-nil. */
7296 if (! NILP (wait_for_cell) && ! NILP (XCAR (wait_for_cell)))
7297 break;
7300 start_polling ();
7302 return 0;
7306 /* Don't confuse make-docfile by having two doc strings for this function.
7307 make-docfile does not pay attention to #if, for good reason! */
7308 DEFUN ("get-buffer-process", Fget_buffer_process, Sget_buffer_process, 1, 1, 0,
7310 (name)
7311 register Lisp_Object name;
7313 return Qnil;
7316 /* Don't confuse make-docfile by having two doc strings for this function.
7317 make-docfile does not pay attention to #if, for good reason! */
7318 DEFUN ("process-inherit-coding-system-flag",
7319 Fprocess_inherit_coding_system_flag, Sprocess_inherit_coding_system_flag,
7320 1, 1, 0,
7322 (process)
7323 register Lisp_Object process;
7325 /* Ignore the argument and return the value of
7326 inherit-process-coding-system. */
7327 return inherit_process_coding_system ? Qt : Qnil;
7330 /* Kill all processes associated with `buffer'.
7331 If `buffer' is nil, kill all processes.
7332 Since we have no subprocesses, this does nothing. */
7334 void
7335 kill_buffer_processes (buffer)
7336 Lisp_Object buffer;
7340 void
7341 init_process ()
7345 void
7346 syms_of_process ()
7348 QCtype = intern (":type");
7349 staticpro (&QCtype);
7351 defsubr (&Sget_buffer_process);
7352 defsubr (&Sprocess_inherit_coding_system_flag);
7356 #endif /* not subprocesses */
7358 /* arch-tag: 3706c011-7b9a-4117-bd4f-59e7f701a4c4
7359 (do not change this comment) */