(NUM_RECENT_KEYS): Bump up to 300.
[emacs.git] / src / process.c
blob0c9a9527c39097f76b6bb6206076c7c368ec5f92
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, 2007 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 static Lisp_Object get_process ();
322 static void exec_sentinel ();
324 extern EMACS_TIME timer_check ();
325 extern int timers_run;
327 /* Mask of bits indicating the descriptors that we wait for input on. */
329 static SELECT_TYPE input_wait_mask;
331 /* Mask that excludes keyboard input descriptor (s). */
333 static SELECT_TYPE non_keyboard_wait_mask;
335 /* Mask that excludes process input descriptor (s). */
337 static SELECT_TYPE non_process_wait_mask;
339 #ifdef NON_BLOCKING_CONNECT
340 /* Mask of bits indicating the descriptors that we wait for connect to
341 complete on. Once they complete, they are removed from this mask
342 and added to the input_wait_mask and non_keyboard_wait_mask. */
344 static SELECT_TYPE connect_wait_mask;
346 /* Number of bits set in connect_wait_mask. */
347 static int num_pending_connects;
349 #define IF_NON_BLOCKING_CONNECT(s) s
350 #else
351 #define IF_NON_BLOCKING_CONNECT(s)
352 #endif
354 /* The largest descriptor currently in use for a process object. */
355 static int max_process_desc;
357 /* The largest descriptor currently in use for keyboard input. */
358 static int max_keyboard_desc;
360 /* Nonzero means delete a process right away if it exits. */
361 static int delete_exited_processes;
363 /* Indexed by descriptor, gives the process (if any) for that descriptor */
364 Lisp_Object chan_process[MAXDESC];
366 /* Alist of elements (NAME . PROCESS) */
367 Lisp_Object Vprocess_alist;
369 /* Buffered-ahead input char from process, indexed by channel.
370 -1 means empty (no char is buffered).
371 Used on sys V where the only way to tell if there is any
372 output from the process is to read at least one char.
373 Always -1 on systems that support FIONREAD. */
375 /* Don't make static; need to access externally. */
376 int proc_buffered_char[MAXDESC];
378 /* Table of `struct coding-system' for each process. */
379 static struct coding_system *proc_decode_coding_system[MAXDESC];
380 static struct coding_system *proc_encode_coding_system[MAXDESC];
382 #ifdef DATAGRAM_SOCKETS
383 /* Table of `partner address' for datagram sockets. */
384 struct sockaddr_and_len {
385 struct sockaddr *sa;
386 int len;
387 } datagram_address[MAXDESC];
388 #define DATAGRAM_CHAN_P(chan) (datagram_address[chan].sa != 0)
389 #define DATAGRAM_CONN_P(proc) (PROCESSP (proc) && datagram_address[XINT (XPROCESS (proc)->infd)].sa != 0)
390 #else
391 #define DATAGRAM_CHAN_P(chan) (0)
392 #define DATAGRAM_CONN_P(proc) (0)
393 #endif
395 /* Maximum number of bytes to send to a pty without an eof. */
396 static int pty_max_bytes;
398 /* Nonzero means don't run process sentinels. This is used
399 when exiting. */
400 int inhibit_sentinels;
402 #ifdef HAVE_PTYS
403 #ifdef HAVE_PTY_H
404 #include <pty.h>
405 #endif
406 /* The file name of the pty opened by allocate_pty. */
408 static char pty_name[24];
409 #endif
411 /* Compute the Lisp form of the process status, p->status, from
412 the numeric status that was returned by `wait'. */
414 static Lisp_Object status_convert ();
416 static void
417 update_status (p)
418 struct Lisp_Process *p;
420 union { int i; WAITTYPE wt; } u;
421 eassert (p->raw_status_new);
422 u.i = p->raw_status;
423 p->status = status_convert (u.wt);
424 p->raw_status_new = 0;
427 /* Convert a process status word in Unix format to
428 the list that we use internally. */
430 static Lisp_Object
431 status_convert (w)
432 WAITTYPE w;
434 if (WIFSTOPPED (w))
435 return Fcons (Qstop, Fcons (make_number (WSTOPSIG (w)), Qnil));
436 else if (WIFEXITED (w))
437 return Fcons (Qexit, Fcons (make_number (WRETCODE (w)),
438 WCOREDUMP (w) ? Qt : Qnil));
439 else if (WIFSIGNALED (w))
440 return Fcons (Qsignal, Fcons (make_number (WTERMSIG (w)),
441 WCOREDUMP (w) ? Qt : Qnil));
442 else
443 return Qrun;
446 /* Given a status-list, extract the three pieces of information
447 and store them individually through the three pointers. */
449 static void
450 decode_status (l, symbol, code, coredump)
451 Lisp_Object l;
452 Lisp_Object *symbol;
453 int *code;
454 int *coredump;
456 Lisp_Object tem;
458 if (SYMBOLP (l))
460 *symbol = l;
461 *code = 0;
462 *coredump = 0;
464 else
466 *symbol = XCAR (l);
467 tem = XCDR (l);
468 *code = XFASTINT (XCAR (tem));
469 tem = XCDR (tem);
470 *coredump = !NILP (tem);
474 /* Return a string describing a process status list. */
476 static Lisp_Object
477 status_message (p)
478 struct Lisp_Process *p;
480 Lisp_Object status = p->status;
481 Lisp_Object symbol;
482 int code, coredump;
483 Lisp_Object string, string2;
485 decode_status (status, &symbol, &code, &coredump);
487 if (EQ (symbol, Qsignal) || EQ (symbol, Qstop))
489 char *signame;
490 synchronize_system_messages_locale ();
491 signame = strsignal (code);
492 if (signame == 0)
493 signame = "unknown";
494 string = build_string (signame);
495 string2 = build_string (coredump ? " (core dumped)\n" : "\n");
496 SSET (string, 0, DOWNCASE (SREF (string, 0)));
497 return concat2 (string, string2);
499 else if (EQ (symbol, Qexit))
501 if (NETCONN1_P (p))
502 return build_string (code == 0 ? "deleted\n" : "connection broken by remote peer\n");
503 if (code == 0)
504 return build_string ("finished\n");
505 string = Fnumber_to_string (make_number (code));
506 string2 = build_string (coredump ? " (core dumped)\n" : "\n");
507 return concat3 (build_string ("exited abnormally with code "),
508 string, string2);
510 else if (EQ (symbol, Qfailed))
512 string = Fnumber_to_string (make_number (code));
513 string2 = build_string ("\n");
514 return concat3 (build_string ("failed with code "),
515 string, string2);
517 else
518 return Fcopy_sequence (Fsymbol_name (symbol));
521 #ifdef HAVE_PTYS
523 /* Open an available pty, returning a file descriptor.
524 Return -1 on failure.
525 The file name of the terminal corresponding to the pty
526 is left in the variable pty_name. */
528 static int
529 allocate_pty ()
531 register int c, i;
532 int fd;
534 #ifdef PTY_ITERATION
535 PTY_ITERATION
536 #else
537 for (c = FIRST_PTY_LETTER; c <= 'z'; c++)
538 for (i = 0; i < 16; i++)
539 #endif
541 struct stat stb; /* Used in some PTY_OPEN. */
542 #ifdef PTY_NAME_SPRINTF
543 PTY_NAME_SPRINTF
544 #else
545 sprintf (pty_name, "/dev/pty%c%x", c, i);
546 #endif /* no PTY_NAME_SPRINTF */
548 #ifdef PTY_OPEN
549 PTY_OPEN;
550 #else /* no PTY_OPEN */
552 # ifdef IRIS
553 /* Unusual IRIS code */
554 *ptyv = emacs_open ("/dev/ptc", O_RDWR | O_NDELAY, 0);
555 if (fd < 0)
556 return -1;
557 if (fstat (fd, &stb) < 0)
558 return -1;
559 # else /* not IRIS */
560 { /* Some systems name their pseudoterminals so that there are gaps in
561 the usual sequence - for example, on HP9000/S700 systems, there
562 are no pseudoterminals with names ending in 'f'. So we wait for
563 three failures in a row before deciding that we've reached the
564 end of the ptys. */
565 int failed_count = 0;
567 if (stat (pty_name, &stb) < 0)
569 failed_count++;
570 if (failed_count >= 3)
571 return -1;
573 else
574 failed_count = 0;
576 # ifdef O_NONBLOCK
577 fd = emacs_open (pty_name, O_RDWR | O_NONBLOCK, 0);
578 # else
579 fd = emacs_open (pty_name, O_RDWR | O_NDELAY, 0);
580 # endif
581 # endif /* not IRIS */
583 #endif /* no PTY_OPEN */
585 if (fd >= 0)
587 /* check to make certain that both sides are available
588 this avoids a nasty yet stupid bug in rlogins */
589 #ifdef PTY_TTY_NAME_SPRINTF
590 PTY_TTY_NAME_SPRINTF
591 #else
592 sprintf (pty_name, "/dev/tty%c%x", c, i);
593 #endif /* no PTY_TTY_NAME_SPRINTF */
594 #ifndef UNIPLUS
595 if (access (pty_name, 6) != 0)
597 emacs_close (fd);
598 # if !defined(IRIS) && !defined(__sgi)
599 continue;
600 # else
601 return -1;
602 # endif /* IRIS */
604 #endif /* not UNIPLUS */
605 setup_pty (fd);
606 return fd;
609 return -1;
611 #endif /* HAVE_PTYS */
613 static Lisp_Object
614 make_process (name)
615 Lisp_Object name;
617 register Lisp_Object val, tem, name1;
618 register struct Lisp_Process *p;
619 char suffix[10];
620 register int i;
622 p = allocate_process ();
624 XSETINT (p->infd, -1);
625 XSETINT (p->outfd, -1);
626 XSETFASTINT (p->tick, 0);
627 XSETFASTINT (p->update_tick, 0);
628 p->pid = 0;
629 p->raw_status_new = 0;
630 p->status = Qrun;
631 p->mark = Fmake_marker ();
633 #ifdef ADAPTIVE_READ_BUFFERING
634 p->adaptive_read_buffering = Qnil;
635 XSETFASTINT (p->read_output_delay, 0);
636 p->read_output_skip = Qnil;
637 #endif
639 /* If name is already in use, modify it until it is unused. */
641 name1 = name;
642 for (i = 1; ; i++)
644 tem = Fget_process (name1);
645 if (NILP (tem)) break;
646 sprintf (suffix, "<%d>", i);
647 name1 = concat2 (name, build_string (suffix));
649 name = name1;
650 p->name = name;
651 XSETPROCESS (val, p);
652 Vprocess_alist = Fcons (Fcons (name, val), Vprocess_alist);
653 return val;
656 static void
657 remove_process (proc)
658 register Lisp_Object proc;
660 register Lisp_Object pair;
662 pair = Frassq (proc, Vprocess_alist);
663 Vprocess_alist = Fdelq (pair, Vprocess_alist);
665 deactivate_process (proc);
668 /* Setup coding systems of PROCESS. */
670 void
671 setup_process_coding_systems (process)
672 Lisp_Object process;
674 struct Lisp_Process *p = XPROCESS (process);
675 int inch = XINT (p->infd);
676 int outch = XINT (p->outfd);
678 if (inch < 0 || outch < 0)
679 return;
681 if (!proc_decode_coding_system[inch])
682 proc_decode_coding_system[inch]
683 = (struct coding_system *) xmalloc (sizeof (struct coding_system));
684 setup_coding_system (p->decode_coding_system,
685 proc_decode_coding_system[inch]);
686 if (! NILP (p->filter))
688 if (NILP (p->filter_multibyte))
689 setup_raw_text_coding_system (proc_decode_coding_system[inch]);
691 else if (BUFFERP (p->buffer))
693 if (NILP (XBUFFER (p->buffer)->enable_multibyte_characters))
694 setup_raw_text_coding_system (proc_decode_coding_system[inch]);
697 if (!proc_encode_coding_system[outch])
698 proc_encode_coding_system[outch]
699 = (struct coding_system *) xmalloc (sizeof (struct coding_system));
700 setup_coding_system (p->encode_coding_system,
701 proc_encode_coding_system[outch]);
702 if (proc_encode_coding_system[outch]->eol_type == CODING_EOL_UNDECIDED)
703 proc_encode_coding_system[outch]->eol_type = system_eol_type;
706 DEFUN ("processp", Fprocessp, Sprocessp, 1, 1, 0,
707 doc: /* Return t if OBJECT is a process. */)
708 (object)
709 Lisp_Object object;
711 return PROCESSP (object) ? Qt : Qnil;
714 DEFUN ("get-process", Fget_process, Sget_process, 1, 1, 0,
715 doc: /* Return the process named NAME, or nil if there is none. */)
716 (name)
717 register Lisp_Object name;
719 if (PROCESSP (name))
720 return name;
721 CHECK_STRING (name);
722 return Fcdr (Fassoc (name, Vprocess_alist));
725 DEFUN ("get-buffer-process", Fget_buffer_process, Sget_buffer_process, 1, 1, 0,
726 doc: /* Return the (or a) process associated with BUFFER.
727 BUFFER may be a buffer or the name of one. */)
728 (buffer)
729 register Lisp_Object buffer;
731 register Lisp_Object buf, tail, proc;
733 if (NILP (buffer)) return Qnil;
734 buf = Fget_buffer (buffer);
735 if (NILP (buf)) return Qnil;
737 for (tail = Vprocess_alist; !NILP (tail); tail = Fcdr (tail))
739 proc = Fcdr (Fcar (tail));
740 if (PROCESSP (proc) && EQ (XPROCESS (proc)->buffer, buf))
741 return proc;
743 return Qnil;
746 /* This is how commands for the user decode process arguments. It
747 accepts a process, a process name, a buffer, a buffer name, or nil.
748 Buffers denote the first process in the buffer, and nil denotes the
749 current buffer. */
751 static Lisp_Object
752 get_process (name)
753 register Lisp_Object name;
755 register Lisp_Object proc, obj;
756 if (STRINGP (name))
758 obj = Fget_process (name);
759 if (NILP (obj))
760 obj = Fget_buffer (name);
761 if (NILP (obj))
762 error ("Process %s does not exist", SDATA (name));
764 else if (NILP (name))
765 obj = Fcurrent_buffer ();
766 else
767 obj = name;
769 /* Now obj should be either a buffer object or a process object.
771 if (BUFFERP (obj))
773 proc = Fget_buffer_process (obj);
774 if (NILP (proc))
775 error ("Buffer %s has no process", SDATA (XBUFFER (obj)->name));
777 else
779 CHECK_PROCESS (obj);
780 proc = obj;
782 return proc;
786 #ifdef SIGCHLD
787 /* Fdelete_process promises to immediately forget about the process, but in
788 reality, Emacs needs to remember those processes until they have been
789 treated by sigchld_handler; otherwise this handler would consider the
790 process as being synchronous and say that the synchronous process is
791 dead. */
792 static Lisp_Object deleted_pid_list;
793 #endif
795 DEFUN ("delete-process", Fdelete_process, Sdelete_process, 1, 1, 0,
796 doc: /* Delete PROCESS: kill it and forget about it immediately.
797 PROCESS may be a process, a buffer, the name of a process or buffer, or
798 nil, indicating the current buffer's process. */)
799 (process)
800 register Lisp_Object process;
802 register struct Lisp_Process *p;
804 process = get_process (process);
805 p = XPROCESS (process);
807 p->raw_status_new = 0;
808 if (NETCONN1_P (p))
810 p->status = Fcons (Qexit, Fcons (make_number (0), Qnil));
811 XSETINT (p->tick, ++process_tick);
812 status_notify (p);
814 else if (XINT (p->infd) >= 0)
816 #ifdef SIGCHLD
817 Lisp_Object symbol;
818 /* Assignment to EMACS_INT stops GCC whining about limited range
819 of data type. */
820 EMACS_INT pid = p->pid;
822 /* No problem storing the pid here, as it is still in Vprocess_alist. */
823 deleted_pid_list = Fcons (make_fixnum_or_float (pid),
824 /* GC treated elements set to nil. */
825 Fdelq (Qnil, deleted_pid_list));
826 /* If the process has already signaled, remove it from the list. */
827 if (p->raw_status_new)
828 update_status (p);
829 symbol = p->status;
830 if (CONSP (p->status))
831 symbol = XCAR (p->status);
832 if (EQ (symbol, Qsignal) || EQ (symbol, Qexit))
833 deleted_pid_list
834 = Fdelete (make_fixnum_or_float (pid), deleted_pid_list);
835 else
836 #endif
838 Fkill_process (process, Qnil);
839 /* Do this now, since remove_process will make sigchld_handler do nothing. */
840 p->status
841 = Fcons (Qsignal, Fcons (make_number (SIGKILL), Qnil));
842 XSETINT (p->tick, ++process_tick);
843 status_notify (p);
846 remove_process (process);
847 return Qnil;
850 DEFUN ("process-status", Fprocess_status, Sprocess_status, 1, 1, 0,
851 doc: /* Return the status of PROCESS.
852 The returned value is one of the following symbols:
853 run -- for a process that is running.
854 stop -- for a process stopped but continuable.
855 exit -- for a process that has exited.
856 signal -- for a process that has got a fatal signal.
857 open -- for a network stream connection that is open.
858 listen -- for a network stream server that is listening.
859 closed -- for a network stream connection that is closed.
860 connect -- when waiting for a non-blocking connection to complete.
861 failed -- when a non-blocking connection has failed.
862 nil -- if arg is a process name and no such process exists.
863 PROCESS may be a process, a buffer, the name of a process, or
864 nil, indicating the current buffer's process. */)
865 (process)
866 register Lisp_Object process;
868 register struct Lisp_Process *p;
869 register Lisp_Object status;
871 if (STRINGP (process))
872 process = Fget_process (process);
873 else
874 process = get_process (process);
876 if (NILP (process))
877 return process;
879 p = XPROCESS (process);
880 if (p->raw_status_new)
881 update_status (p);
882 status = p->status;
883 if (CONSP (status))
884 status = XCAR (status);
885 if (NETCONN1_P (p))
887 if (EQ (status, Qexit))
888 status = Qclosed;
889 else if (EQ (p->command, Qt))
890 status = Qstop;
891 else if (EQ (status, Qrun))
892 status = Qopen;
894 return status;
897 DEFUN ("process-exit-status", Fprocess_exit_status, Sprocess_exit_status,
898 1, 1, 0,
899 doc: /* Return the exit status of PROCESS or the signal number that killed it.
900 If PROCESS has not yet exited or died, return 0. */)
901 (process)
902 register Lisp_Object process;
904 CHECK_PROCESS (process);
905 if (XPROCESS (process)->raw_status_new)
906 update_status (XPROCESS (process));
907 if (CONSP (XPROCESS (process)->status))
908 return XCAR (XCDR (XPROCESS (process)->status));
909 return make_number (0);
912 DEFUN ("process-id", Fprocess_id, Sprocess_id, 1, 1, 0,
913 doc: /* Return the process id of PROCESS.
914 This is the pid of the external process which PROCESS uses or talks to.
915 For a network connection, this value is nil. */)
916 (process)
917 register Lisp_Object process;
919 /* Assignment to EMACS_INT stops GCC whining about limited range of
920 data type. */
921 EMACS_INT pid;
923 CHECK_PROCESS (process);
924 pid = XPROCESS (process)->pid;
925 return (pid ? make_fixnum_or_float (pid) : Qnil);
928 DEFUN ("process-name", Fprocess_name, Sprocess_name, 1, 1, 0,
929 doc: /* Return the name of PROCESS, as a string.
930 This is the name of the program invoked in PROCESS,
931 possibly modified to make it unique among process names. */)
932 (process)
933 register Lisp_Object process;
935 CHECK_PROCESS (process);
936 return XPROCESS (process)->name;
939 DEFUN ("process-command", Fprocess_command, Sprocess_command, 1, 1, 0,
940 doc: /* Return the command that was executed to start PROCESS.
941 This is a list of strings, the first string being the program executed
942 and the rest of the strings being the arguments given to it.
943 For a non-child channel, this is nil. */)
944 (process)
945 register Lisp_Object process;
947 CHECK_PROCESS (process);
948 return XPROCESS (process)->command;
951 DEFUN ("process-tty-name", Fprocess_tty_name, Sprocess_tty_name, 1, 1, 0,
952 doc: /* Return the name of the terminal PROCESS uses, or nil if none.
953 This is the terminal that the process itself reads and writes on,
954 not the name of the pty that Emacs uses to talk with that terminal. */)
955 (process)
956 register Lisp_Object process;
958 CHECK_PROCESS (process);
959 return XPROCESS (process)->tty_name;
962 DEFUN ("set-process-buffer", Fset_process_buffer, Sset_process_buffer,
963 2, 2, 0,
964 doc: /* Set buffer associated with PROCESS to BUFFER (a buffer, or nil). */)
965 (process, buffer)
966 register Lisp_Object process, buffer;
968 struct Lisp_Process *p;
970 CHECK_PROCESS (process);
971 if (!NILP (buffer))
972 CHECK_BUFFER (buffer);
973 p = XPROCESS (process);
974 p->buffer = buffer;
975 if (NETCONN1_P (p))
976 p->childp = Fplist_put (p->childp, QCbuffer, buffer);
977 setup_process_coding_systems (process);
978 return buffer;
981 DEFUN ("process-buffer", Fprocess_buffer, Sprocess_buffer,
982 1, 1, 0,
983 doc: /* Return the buffer PROCESS is associated with.
984 Output from PROCESS is inserted in this buffer unless PROCESS has a filter. */)
985 (process)
986 register Lisp_Object process;
988 CHECK_PROCESS (process);
989 return XPROCESS (process)->buffer;
992 DEFUN ("process-mark", Fprocess_mark, Sprocess_mark,
993 1, 1, 0,
994 doc: /* Return the marker for the end of the last output from PROCESS. */)
995 (process)
996 register Lisp_Object process;
998 CHECK_PROCESS (process);
999 return XPROCESS (process)->mark;
1002 DEFUN ("set-process-filter", Fset_process_filter, Sset_process_filter,
1003 2, 2, 0,
1004 doc: /* Give PROCESS the filter function FILTER; nil means no filter.
1005 t means stop accepting output from the process.
1007 When a process has a filter, its buffer is not used for output.
1008 Instead, each time it does output, the entire string of output is
1009 passed to the filter.
1011 The filter gets two arguments: the process and the string of output.
1012 The string argument is normally a multibyte string, except:
1013 - if the process' input coding system is no-conversion or raw-text,
1014 it is a unibyte string (the non-converted input), or else
1015 - if `default-enable-multibyte-characters' is nil, it is a unibyte
1016 string (the result of converting the decoded input multibyte
1017 string to unibyte with `string-make-unibyte'). */)
1018 (process, filter)
1019 register Lisp_Object process, filter;
1021 struct Lisp_Process *p;
1023 CHECK_PROCESS (process);
1024 p = XPROCESS (process);
1026 /* Don't signal an error if the process' input file descriptor
1027 is closed. This could make debugging Lisp more difficult,
1028 for example when doing something like
1030 (setq process (start-process ...))
1031 (debug)
1032 (set-process-filter process ...) */
1034 if (XINT (p->infd) >= 0)
1036 if (EQ (filter, Qt) && !EQ (p->status, Qlisten))
1038 FD_CLR (XINT (p->infd), &input_wait_mask);
1039 FD_CLR (XINT (p->infd), &non_keyboard_wait_mask);
1041 else if (EQ (p->filter, Qt)
1042 && !EQ (p->command, Qt)) /* Network process not stopped. */
1044 FD_SET (XINT (p->infd), &input_wait_mask);
1045 FD_SET (XINT (p->infd), &non_keyboard_wait_mask);
1049 p->filter = filter;
1050 if (NETCONN1_P (p))
1051 p->childp = Fplist_put (p->childp, QCfilter, filter);
1052 setup_process_coding_systems (process);
1053 return filter;
1056 DEFUN ("process-filter", Fprocess_filter, Sprocess_filter,
1057 1, 1, 0,
1058 doc: /* Returns the filter function of PROCESS; nil if none.
1059 See `set-process-filter' for more info on filter functions. */)
1060 (process)
1061 register Lisp_Object process;
1063 CHECK_PROCESS (process);
1064 return XPROCESS (process)->filter;
1067 DEFUN ("set-process-sentinel", Fset_process_sentinel, Sset_process_sentinel,
1068 2, 2, 0,
1069 doc: /* Give PROCESS the sentinel SENTINEL; nil for none.
1070 The sentinel is called as a function when the process changes state.
1071 It gets two arguments: the process, and a string describing the change. */)
1072 (process, sentinel)
1073 register Lisp_Object process, sentinel;
1075 struct Lisp_Process *p;
1077 CHECK_PROCESS (process);
1078 p = XPROCESS (process);
1080 p->sentinel = sentinel;
1081 if (NETCONN1_P (p))
1082 p->childp = Fplist_put (p->childp, QCsentinel, sentinel);
1083 return sentinel;
1086 DEFUN ("process-sentinel", Fprocess_sentinel, Sprocess_sentinel,
1087 1, 1, 0,
1088 doc: /* Return the sentinel of PROCESS; nil if none.
1089 See `set-process-sentinel' for more info on sentinels. */)
1090 (process)
1091 register Lisp_Object process;
1093 CHECK_PROCESS (process);
1094 return XPROCESS (process)->sentinel;
1097 DEFUN ("set-process-window-size", Fset_process_window_size,
1098 Sset_process_window_size, 3, 3, 0,
1099 doc: /* Tell PROCESS that it has logical window size HEIGHT and WIDTH. */)
1100 (process, height, width)
1101 register Lisp_Object process, height, width;
1103 CHECK_PROCESS (process);
1104 CHECK_NATNUM (height);
1105 CHECK_NATNUM (width);
1107 if (XINT (XPROCESS (process)->infd) < 0
1108 || set_window_size (XINT (XPROCESS (process)->infd),
1109 XINT (height), XINT (width)) <= 0)
1110 return Qnil;
1111 else
1112 return Qt;
1115 DEFUN ("set-process-inherit-coding-system-flag",
1116 Fset_process_inherit_coding_system_flag,
1117 Sset_process_inherit_coding_system_flag, 2, 2, 0,
1118 doc: /* Determine whether buffer of PROCESS will inherit coding-system.
1119 If the second argument FLAG is non-nil, then the variable
1120 `buffer-file-coding-system' of the buffer associated with PROCESS
1121 will be bound to the value of the coding system used to decode
1122 the process output.
1124 This is useful when the coding system specified for the process buffer
1125 leaves either the character code conversion or the end-of-line conversion
1126 unspecified, or if the coding system used to decode the process output
1127 is more appropriate for saving the process buffer.
1129 Binding the variable `inherit-process-coding-system' to non-nil before
1130 starting the process is an alternative way of setting the inherit flag
1131 for the process which will run. */)
1132 (process, flag)
1133 register Lisp_Object process, flag;
1135 CHECK_PROCESS (process);
1136 XPROCESS (process)->inherit_coding_system_flag = flag;
1137 return flag;
1140 DEFUN ("process-inherit-coding-system-flag",
1141 Fprocess_inherit_coding_system_flag, Sprocess_inherit_coding_system_flag,
1142 1, 1, 0,
1143 doc: /* Return the value of inherit-coding-system flag for PROCESS.
1144 If this flag is t, `buffer-file-coding-system' of the buffer
1145 associated with PROCESS will inherit the coding system used to decode
1146 the process output. */)
1147 (process)
1148 register Lisp_Object process;
1150 CHECK_PROCESS (process);
1151 return XPROCESS (process)->inherit_coding_system_flag;
1154 DEFUN ("set-process-query-on-exit-flag",
1155 Fset_process_query_on_exit_flag, Sset_process_query_on_exit_flag,
1156 2, 2, 0,
1157 doc: /* Specify if query is needed for PROCESS when Emacs is exited.
1158 If the second argument FLAG is non-nil, Emacs will query the user before
1159 exiting if PROCESS is running. */)
1160 (process, flag)
1161 register Lisp_Object process, flag;
1163 CHECK_PROCESS (process);
1164 XPROCESS (process)->kill_without_query = Fnull (flag);
1165 return flag;
1168 DEFUN ("process-query-on-exit-flag",
1169 Fprocess_query_on_exit_flag, Sprocess_query_on_exit_flag,
1170 1, 1, 0,
1171 doc: /* Return the current value of query-on-exit flag for PROCESS. */)
1172 (process)
1173 register Lisp_Object process;
1175 CHECK_PROCESS (process);
1176 return Fnull (XPROCESS (process)->kill_without_query);
1179 #ifdef DATAGRAM_SOCKETS
1180 Lisp_Object Fprocess_datagram_address ();
1181 #endif
1183 DEFUN ("process-contact", Fprocess_contact, Sprocess_contact,
1184 1, 2, 0,
1185 doc: /* Return the contact info of PROCESS; t for a real child.
1186 For a net connection, the value depends on the optional KEY arg.
1187 If KEY is nil, value is a cons cell of the form (HOST SERVICE),
1188 if KEY is t, the complete contact information for the connection is
1189 returned, else the specific value for the keyword KEY is returned.
1190 See `make-network-process' for a list of keywords. */)
1191 (process, key)
1192 register Lisp_Object process, key;
1194 Lisp_Object contact;
1196 CHECK_PROCESS (process);
1197 contact = XPROCESS (process)->childp;
1199 #ifdef DATAGRAM_SOCKETS
1200 if (DATAGRAM_CONN_P (process)
1201 && (EQ (key, Qt) || EQ (key, QCremote)))
1202 contact = Fplist_put (contact, QCremote,
1203 Fprocess_datagram_address (process));
1204 #endif
1206 if (!NETCONN_P (process) || EQ (key, Qt))
1207 return contact;
1208 if (NILP (key))
1209 return Fcons (Fplist_get (contact, QChost),
1210 Fcons (Fplist_get (contact, QCservice), Qnil));
1211 return Fplist_get (contact, key);
1214 DEFUN ("process-plist", Fprocess_plist, Sprocess_plist,
1215 1, 1, 0,
1216 doc: /* Return the plist of PROCESS. */)
1217 (process)
1218 register Lisp_Object process;
1220 CHECK_PROCESS (process);
1221 return XPROCESS (process)->plist;
1224 DEFUN ("set-process-plist", Fset_process_plist, Sset_process_plist,
1225 2, 2, 0,
1226 doc: /* Replace the plist of PROCESS with PLIST. Returns PLIST. */)
1227 (process, plist)
1228 register Lisp_Object process, plist;
1230 CHECK_PROCESS (process);
1231 CHECK_LIST (plist);
1233 XPROCESS (process)->plist = plist;
1234 return plist;
1237 #if 0 /* Turned off because we don't currently record this info
1238 in the process. Perhaps add it. */
1239 DEFUN ("process-connection", Fprocess_connection, Sprocess_connection, 1, 1, 0,
1240 doc: /* Return the connection type of PROCESS.
1241 The value is nil for a pipe, t or `pty' for a pty, or `stream' for
1242 a socket connection. */)
1243 (process)
1244 Lisp_Object process;
1246 return XPROCESS (process)->type;
1248 #endif
1250 #ifdef HAVE_SOCKETS
1251 DEFUN ("format-network-address", Fformat_network_address, Sformat_network_address,
1252 1, 2, 0,
1253 doc: /* Convert network ADDRESS from internal format to a string.
1254 A 4 or 5 element vector represents an IPv4 address (with port number).
1255 An 8 or 9 element vector represents an IPv6 address (with port number).
1256 If optional second argument OMIT-PORT is non-nil, don't include a port
1257 number in the string, even when present in ADDRESS.
1258 Returns nil if format of ADDRESS is invalid. */)
1259 (address, omit_port)
1260 Lisp_Object address, omit_port;
1262 if (NILP (address))
1263 return Qnil;
1265 if (STRINGP (address)) /* AF_LOCAL */
1266 return address;
1268 if (VECTORP (address)) /* AF_INET or AF_INET6 */
1270 register struct Lisp_Vector *p = XVECTOR (address);
1271 Lisp_Object args[6];
1272 int nargs, i;
1274 if (p->size == 4 || (p->size == 5 && !NILP (omit_port)))
1276 args[0] = build_string ("%d.%d.%d.%d");
1277 nargs = 4;
1279 else if (p->size == 5)
1281 args[0] = build_string ("%d.%d.%d.%d:%d");
1282 nargs = 5;
1284 else if (p->size == 8 || (p->size == 9 && !NILP (omit_port)))
1286 args[0] = build_string ("%x:%x:%x:%x:%x:%x:%x:%x");
1287 nargs = 8;
1289 else if (p->size == 9)
1291 args[0] = build_string ("[%x:%x:%x:%x:%x:%x:%x:%x]:%d");
1292 nargs = 9;
1294 else
1295 return Qnil;
1297 for (i = 0; i < nargs; i++)
1298 args[i+1] = p->contents[i];
1299 return Fformat (nargs+1, args);
1302 if (CONSP (address))
1304 Lisp_Object args[2];
1305 args[0] = build_string ("<Family %d>");
1306 args[1] = Fcar (address);
1307 return Fformat (2, args);
1311 return Qnil;
1313 #endif
1315 static Lisp_Object
1316 list_processes_1 (query_only)
1317 Lisp_Object query_only;
1319 register Lisp_Object tail, tem;
1320 Lisp_Object proc, minspace, tem1;
1321 register struct Lisp_Process *p;
1322 char tembuf[300];
1323 int w_proc, w_buffer, w_tty;
1324 int exited = 0;
1325 Lisp_Object i_status, i_buffer, i_tty, i_command;
1327 w_proc = 4; /* Proc */
1328 w_buffer = 6; /* Buffer */
1329 w_tty = 0; /* Omit if no ttys */
1331 for (tail = Vprocess_alist; !NILP (tail); tail = Fcdr (tail))
1333 int i;
1335 proc = Fcdr (Fcar (tail));
1336 p = XPROCESS (proc);
1337 if (NILP (p->childp))
1338 continue;
1339 if (!NILP (query_only) && !NILP (p->kill_without_query))
1340 continue;
1341 if (STRINGP (p->name)
1342 && ( i = SCHARS (p->name), (i > w_proc)))
1343 w_proc = i;
1344 if (!NILP (p->buffer))
1346 if (NILP (XBUFFER (p->buffer)->name) && w_buffer < 8)
1347 w_buffer = 8; /* (Killed) */
1348 else if ((i = SCHARS (XBUFFER (p->buffer)->name), (i > w_buffer)))
1349 w_buffer = i;
1351 if (STRINGP (p->tty_name)
1352 && (i = SCHARS (p->tty_name), (i > w_tty)))
1353 w_tty = i;
1356 XSETFASTINT (i_status, w_proc + 1);
1357 XSETFASTINT (i_buffer, XFASTINT (i_status) + 9);
1358 if (w_tty)
1360 XSETFASTINT (i_tty, XFASTINT (i_buffer) + w_buffer + 1);
1361 XSETFASTINT (i_command, XFASTINT (i_buffer) + w_tty + 1);
1362 } else {
1363 i_tty = Qnil;
1364 XSETFASTINT (i_command, XFASTINT (i_buffer) + w_buffer + 1);
1367 XSETFASTINT (minspace, 1);
1369 set_buffer_internal (XBUFFER (Vstandard_output));
1370 current_buffer->undo_list = Qt;
1372 current_buffer->truncate_lines = Qt;
1374 write_string ("Proc", -1);
1375 Findent_to (i_status, minspace); write_string ("Status", -1);
1376 Findent_to (i_buffer, minspace); write_string ("Buffer", -1);
1377 if (!NILP (i_tty))
1379 Findent_to (i_tty, minspace); write_string ("Tty", -1);
1381 Findent_to (i_command, minspace); write_string ("Command", -1);
1382 write_string ("\n", -1);
1384 write_string ("----", -1);
1385 Findent_to (i_status, minspace); write_string ("------", -1);
1386 Findent_to (i_buffer, minspace); write_string ("------", -1);
1387 if (!NILP (i_tty))
1389 Findent_to (i_tty, minspace); write_string ("---", -1);
1391 Findent_to (i_command, minspace); write_string ("-------", -1);
1392 write_string ("\n", -1);
1394 for (tail = Vprocess_alist; !NILP (tail); tail = Fcdr (tail))
1396 Lisp_Object symbol;
1398 proc = Fcdr (Fcar (tail));
1399 p = XPROCESS (proc);
1400 if (NILP (p->childp))
1401 continue;
1402 if (!NILP (query_only) && !NILP (p->kill_without_query))
1403 continue;
1405 Finsert (1, &p->name);
1406 Findent_to (i_status, minspace);
1408 if (p->raw_status_new)
1409 update_status (p);
1410 symbol = p->status;
1411 if (CONSP (p->status))
1412 symbol = XCAR (p->status);
1415 if (EQ (symbol, Qsignal))
1417 Lisp_Object tem;
1418 tem = Fcar (Fcdr (p->status));
1419 #ifdef VMS
1420 if (XINT (tem) < NSIG)
1421 write_string (sys_errlist [XINT (tem)], -1);
1422 else
1423 #endif
1424 Fprinc (symbol, Qnil);
1426 else if (NETCONN1_P (p))
1428 if (EQ (symbol, Qexit))
1429 write_string ("closed", -1);
1430 else if (EQ (p->command, Qt))
1431 write_string ("stopped", -1);
1432 else if (EQ (symbol, Qrun))
1433 write_string ("open", -1);
1434 else
1435 Fprinc (symbol, Qnil);
1437 else
1438 Fprinc (symbol, Qnil);
1440 if (EQ (symbol, Qexit))
1442 Lisp_Object tem;
1443 tem = Fcar (Fcdr (p->status));
1444 if (XFASTINT (tem))
1446 sprintf (tembuf, " %d", (int) XFASTINT (tem));
1447 write_string (tembuf, -1);
1451 if (EQ (symbol, Qsignal) || EQ (symbol, Qexit) || EQ (symbol, Qclosed))
1452 exited++;
1454 Findent_to (i_buffer, minspace);
1455 if (NILP (p->buffer))
1456 insert_string ("(none)");
1457 else if (NILP (XBUFFER (p->buffer)->name))
1458 insert_string ("(Killed)");
1459 else
1460 Finsert (1, &XBUFFER (p->buffer)->name);
1462 if (!NILP (i_tty))
1464 Findent_to (i_tty, minspace);
1465 if (STRINGP (p->tty_name))
1466 Finsert (1, &p->tty_name);
1469 Findent_to (i_command, minspace);
1471 if (EQ (p->status, Qlisten))
1473 Lisp_Object port = Fplist_get (p->childp, QCservice);
1474 if (INTEGERP (port))
1475 port = Fnumber_to_string (port);
1476 if (NILP (port))
1477 port = Fformat_network_address (Fplist_get (p->childp, QClocal), Qnil);
1478 sprintf (tembuf, "(network %s server on %s)\n",
1479 (DATAGRAM_CHAN_P (XINT (p->infd)) ? "datagram" : "stream"),
1480 (STRINGP (port) ? (char *)SDATA (port) : "?"));
1481 insert_string (tembuf);
1483 else if (NETCONN1_P (p))
1485 /* For a local socket, there is no host name,
1486 so display service instead. */
1487 Lisp_Object host = Fplist_get (p->childp, QChost);
1488 if (!STRINGP (host))
1490 host = Fplist_get (p->childp, QCservice);
1491 if (INTEGERP (host))
1492 host = Fnumber_to_string (host);
1494 if (NILP (host))
1495 host = Fformat_network_address (Fplist_get (p->childp, QCremote), Qnil);
1496 sprintf (tembuf, "(network %s connection to %s)\n",
1497 (DATAGRAM_CHAN_P (XINT (p->infd)) ? "datagram" : "stream"),
1498 (STRINGP (host) ? (char *)SDATA (host) : "?"));
1499 insert_string (tembuf);
1501 else
1503 tem = p->command;
1504 while (1)
1506 tem1 = Fcar (tem);
1507 Finsert (1, &tem1);
1508 tem = Fcdr (tem);
1509 if (NILP (tem))
1510 break;
1511 insert_string (" ");
1513 insert_string ("\n");
1516 if (exited)
1517 status_notify (NULL);
1518 return Qnil;
1521 DEFUN ("list-processes", Flist_processes, Slist_processes, 0, 1, "P",
1522 doc: /* Display a list of all processes.
1523 If optional argument QUERY-ONLY is non-nil, only processes with
1524 the query-on-exit flag set will be listed.
1525 Any process listed as exited or signaled is actually eliminated
1526 after the listing is made. */)
1527 (query_only)
1528 Lisp_Object query_only;
1530 internal_with_output_to_temp_buffer ("*Process List*",
1531 list_processes_1, query_only);
1532 return Qnil;
1535 DEFUN ("process-list", Fprocess_list, Sprocess_list, 0, 0, 0,
1536 doc: /* Return a list of all processes. */)
1539 return Fmapcar (Qcdr, Vprocess_alist);
1542 /* Starting asynchronous inferior processes. */
1544 static Lisp_Object start_process_unwind ();
1546 DEFUN ("start-process", Fstart_process, Sstart_process, 3, MANY, 0,
1547 doc: /* Start a program in a subprocess. Return the process object for it.
1548 NAME is name for process. It is modified if necessary to make it unique.
1549 BUFFER is the buffer (or buffer name) to associate with the process.
1550 Process output goes at end of that buffer, unless you specify
1551 an output stream or filter function to handle the output.
1552 BUFFER may be also nil, meaning that this process is not associated
1553 with any buffer.
1554 PROGRAM is the program file name. It is searched for in PATH.
1555 Remaining arguments are strings to give program as arguments.
1557 usage: (start-process NAME BUFFER PROGRAM &rest PROGRAM-ARGS) */)
1558 (nargs, args)
1559 int nargs;
1560 register Lisp_Object *args;
1562 Lisp_Object buffer, name, program, proc, current_dir, tem;
1563 #ifdef VMS
1564 register unsigned char *new_argv;
1565 int len;
1566 #else
1567 register unsigned char **new_argv;
1568 #endif
1569 register int i;
1570 int count = SPECPDL_INDEX ();
1572 buffer = args[1];
1573 if (!NILP (buffer))
1574 buffer = Fget_buffer_create (buffer);
1576 /* Make sure that the child will be able to chdir to the current
1577 buffer's current directory, or its unhandled equivalent. We
1578 can't just have the child check for an error when it does the
1579 chdir, since it's in a vfork.
1581 We have to GCPRO around this because Fexpand_file_name and
1582 Funhandled_file_name_directory might call a file name handling
1583 function. The argument list is protected by the caller, so all
1584 we really have to worry about is buffer. */
1586 struct gcpro gcpro1, gcpro2;
1588 current_dir = current_buffer->directory;
1590 GCPRO2 (buffer, current_dir);
1592 current_dir
1593 = expand_and_dir_to_file (Funhandled_file_name_directory (current_dir),
1594 Qnil);
1595 if (NILP (Ffile_accessible_directory_p (current_dir)))
1596 report_file_error ("Setting current directory",
1597 Fcons (current_buffer->directory, Qnil));
1599 UNGCPRO;
1602 name = args[0];
1603 CHECK_STRING (name);
1605 program = args[2];
1607 CHECK_STRING (program);
1609 proc = make_process (name);
1610 /* If an error occurs and we can't start the process, we want to
1611 remove it from the process list. This means that each error
1612 check in create_process doesn't need to call remove_process
1613 itself; it's all taken care of here. */
1614 record_unwind_protect (start_process_unwind, proc);
1616 XPROCESS (proc)->childp = Qt;
1617 XPROCESS (proc)->plist = Qnil;
1618 XPROCESS (proc)->buffer = buffer;
1619 XPROCESS (proc)->sentinel = Qnil;
1620 XPROCESS (proc)->filter = Qnil;
1621 XPROCESS (proc)->filter_multibyte
1622 = buffer_defaults.enable_multibyte_characters;
1623 XPROCESS (proc)->command = Flist (nargs - 2, args + 2);
1625 #ifdef ADAPTIVE_READ_BUFFERING
1626 XPROCESS (proc)->adaptive_read_buffering = Vprocess_adaptive_read_buffering;
1627 #endif
1629 /* Make the process marker point into the process buffer (if any). */
1630 if (BUFFERP (buffer))
1631 set_marker_both (XPROCESS (proc)->mark, buffer,
1632 BUF_ZV (XBUFFER (buffer)),
1633 BUF_ZV_BYTE (XBUFFER (buffer)));
1636 /* Decide coding systems for communicating with the process. Here
1637 we don't setup the structure coding_system nor pay attention to
1638 unibyte mode. They are done in create_process. */
1640 /* Qt denotes we have not yet called Ffind_operation_coding_system. */
1641 Lisp_Object coding_systems = Qt;
1642 Lisp_Object val, *args2;
1643 struct gcpro gcpro1, gcpro2;
1645 val = Vcoding_system_for_read;
1646 if (NILP (val))
1648 args2 = (Lisp_Object *) alloca ((nargs + 1) * sizeof *args2);
1649 args2[0] = Qstart_process;
1650 for (i = 0; i < nargs; i++) args2[i + 1] = args[i];
1651 GCPRO2 (proc, current_dir);
1652 coding_systems = Ffind_operation_coding_system (nargs + 1, args2);
1653 UNGCPRO;
1654 if (CONSP (coding_systems))
1655 val = XCAR (coding_systems);
1656 else if (CONSP (Vdefault_process_coding_system))
1657 val = XCAR (Vdefault_process_coding_system);
1659 XPROCESS (proc)->decode_coding_system = val;
1661 val = Vcoding_system_for_write;
1662 if (NILP (val))
1664 if (EQ (coding_systems, Qt))
1666 args2 = (Lisp_Object *) alloca ((nargs + 1) * sizeof args2);
1667 args2[0] = Qstart_process;
1668 for (i = 0; i < nargs; i++) args2[i + 1] = args[i];
1669 GCPRO2 (proc, current_dir);
1670 coding_systems = Ffind_operation_coding_system (nargs + 1, args2);
1671 UNGCPRO;
1673 if (CONSP (coding_systems))
1674 val = XCDR (coding_systems);
1675 else if (CONSP (Vdefault_process_coding_system))
1676 val = XCDR (Vdefault_process_coding_system);
1678 XPROCESS (proc)->encode_coding_system = val;
1681 #ifdef VMS
1682 /* Make a one member argv with all args concatenated
1683 together separated by a blank. */
1684 len = SBYTES (program) + 2;
1685 for (i = 3; i < nargs; i++)
1687 tem = args[i];
1688 CHECK_STRING (tem);
1689 len += SBYTES (tem) + 1; /* count the blank */
1691 new_argv = (unsigned char *) alloca (len);
1692 strcpy (new_argv, SDATA (program));
1693 for (i = 3; i < nargs; i++)
1695 tem = args[i];
1696 CHECK_STRING (tem);
1697 strcat (new_argv, " ");
1698 strcat (new_argv, SDATA (tem));
1700 /* Need to add code here to check for program existence on VMS */
1702 #else /* not VMS */
1703 new_argv = (unsigned char **) alloca ((nargs - 1) * sizeof (char *));
1705 /* If program file name is not absolute, search our path for it.
1706 Put the name we will really use in TEM. */
1707 if (!IS_DIRECTORY_SEP (SREF (program, 0))
1708 && !(SCHARS (program) > 1
1709 && IS_DEVICE_SEP (SREF (program, 1))))
1711 struct gcpro gcpro1, gcpro2, gcpro3, gcpro4;
1713 tem = Qnil;
1714 GCPRO4 (name, program, buffer, current_dir);
1715 openp (Vexec_path, program, Vexec_suffixes, &tem, make_number (X_OK));
1716 UNGCPRO;
1717 if (NILP (tem))
1718 report_file_error ("Searching for program", Fcons (program, Qnil));
1719 tem = Fexpand_file_name (tem, Qnil);
1721 else
1723 if (!NILP (Ffile_directory_p (program)))
1724 error ("Specified program for new process is a directory");
1725 tem = program;
1728 /* If program file name starts with /: for quoting a magic name,
1729 discard that. */
1730 if (SBYTES (tem) > 2 && SREF (tem, 0) == '/'
1731 && SREF (tem, 1) == ':')
1732 tem = Fsubstring (tem, make_number (2), Qnil);
1734 /* Encode the file name and put it in NEW_ARGV.
1735 That's where the child will use it to execute the program. */
1736 tem = ENCODE_FILE (tem);
1737 new_argv[0] = SDATA (tem);
1739 /* Here we encode arguments by the coding system used for sending
1740 data to the process. We don't support using different coding
1741 systems for encoding arguments and for encoding data sent to the
1742 process. */
1744 for (i = 3; i < nargs; i++)
1746 tem = args[i];
1747 CHECK_STRING (tem);
1748 if (STRING_MULTIBYTE (tem))
1749 tem = (code_convert_string_norecord
1750 (tem, XPROCESS (proc)->encode_coding_system, 1));
1751 new_argv[i - 2] = SDATA (tem);
1753 new_argv[i - 2] = 0;
1754 #endif /* not VMS */
1756 XPROCESS (proc)->decoding_buf = make_uninit_string (0);
1757 XPROCESS (proc)->decoding_carryover = make_number (0);
1758 XPROCESS (proc)->encoding_buf = make_uninit_string (0);
1759 XPROCESS (proc)->encoding_carryover = make_number (0);
1761 XPROCESS (proc)->inherit_coding_system_flag
1762 = (NILP (buffer) || !inherit_process_coding_system
1763 ? Qnil : Qt);
1765 create_process (proc, (char **) new_argv, current_dir);
1767 return unbind_to (count, proc);
1770 /* This function is the unwind_protect form for Fstart_process. If
1771 PROC doesn't have its pid set, then we know someone has signaled
1772 an error and the process wasn't started successfully, so we should
1773 remove it from the process list. */
1774 static Lisp_Object
1775 start_process_unwind (proc)
1776 Lisp_Object proc;
1778 if (!PROCESSP (proc))
1779 abort ();
1781 /* Was PROC started successfully? */
1782 if (XPROCESS (proc)->pid <= 0)
1783 remove_process (proc);
1785 return Qnil;
1788 static void
1789 create_process_1 (timer)
1790 struct atimer *timer;
1792 /* Nothing to do. */
1796 #if 0 /* This doesn't work; see the note before sigchld_handler. */
1797 #ifdef USG
1798 #ifdef SIGCHLD
1799 /* Mimic blocking of signals on system V, which doesn't really have it. */
1801 /* Nonzero means we got a SIGCHLD when it was supposed to be blocked. */
1802 int sigchld_deferred;
1804 SIGTYPE
1805 create_process_sigchld ()
1807 signal (SIGCHLD, create_process_sigchld);
1809 sigchld_deferred = 1;
1811 #endif
1812 #endif
1813 #endif
1815 #ifndef VMS /* VMS version of this function is in vmsproc.c. */
1816 void
1817 create_process (process, new_argv, current_dir)
1818 Lisp_Object process;
1819 char **new_argv;
1820 Lisp_Object current_dir;
1822 int inchannel, outchannel;
1823 pid_t pid;
1824 int sv[2];
1825 #ifdef POSIX_SIGNALS
1826 sigset_t procmask;
1827 sigset_t blocked;
1828 struct sigaction sigint_action;
1829 struct sigaction sigquit_action;
1830 #ifdef AIX
1831 struct sigaction sighup_action;
1832 #endif
1833 #else /* !POSIX_SIGNALS */
1834 #if 0
1835 #ifdef SIGCHLD
1836 SIGTYPE (*sigchld)();
1837 #endif
1838 #endif /* 0 */
1839 #endif /* !POSIX_SIGNALS */
1840 /* Use volatile to protect variables from being clobbered by longjmp. */
1841 volatile int forkin, forkout;
1842 volatile int pty_flag = 0;
1843 #ifndef USE_CRT_DLL
1844 extern char **environ;
1845 #endif
1847 inchannel = outchannel = -1;
1849 #ifdef HAVE_PTYS
1850 if (!NILP (Vprocess_connection_type))
1851 outchannel = inchannel = allocate_pty ();
1853 if (inchannel >= 0)
1855 #if ! defined (USG) || defined (USG_SUBTTY_WORKS)
1856 /* On most USG systems it does not work to open the pty's tty here,
1857 then close it and reopen it in the child. */
1858 #ifdef O_NOCTTY
1859 /* Don't let this terminal become our controlling terminal
1860 (in case we don't have one). */
1861 forkout = forkin = emacs_open (pty_name, O_RDWR | O_NOCTTY, 0);
1862 #else
1863 forkout = forkin = emacs_open (pty_name, O_RDWR, 0);
1864 #endif
1865 if (forkin < 0)
1866 report_file_error ("Opening pty", Qnil);
1867 #if defined (RTU) || defined (UNIPLUS) || defined (DONT_REOPEN_PTY)
1868 /* In the case that vfork is defined as fork, the parent process
1869 (Emacs) may send some data before the child process completes
1870 tty options setup. So we setup tty before forking. */
1871 child_setup_tty (forkout);
1872 #endif /* RTU or UNIPLUS or DONT_REOPEN_PTY */
1873 #else
1874 forkin = forkout = -1;
1875 #endif /* not USG, or USG_SUBTTY_WORKS */
1876 pty_flag = 1;
1878 else
1879 #endif /* HAVE_PTYS */
1880 #ifdef SKTPAIR
1882 if (socketpair (AF_UNIX, SOCK_STREAM, 0, sv) < 0)
1883 report_file_error ("Opening socketpair", Qnil);
1884 outchannel = inchannel = sv[0];
1885 forkout = forkin = sv[1];
1887 #else /* not SKTPAIR */
1889 int tem;
1890 tem = pipe (sv);
1891 if (tem < 0)
1892 report_file_error ("Creating pipe", Qnil);
1893 inchannel = sv[0];
1894 forkout = sv[1];
1895 tem = pipe (sv);
1896 if (tem < 0)
1898 emacs_close (inchannel);
1899 emacs_close (forkout);
1900 report_file_error ("Creating pipe", Qnil);
1902 outchannel = sv[1];
1903 forkin = sv[0];
1905 #endif /* not SKTPAIR */
1907 #if 0
1908 /* Replaced by close_process_descs */
1909 set_exclusive_use (inchannel);
1910 set_exclusive_use (outchannel);
1911 #endif
1913 /* Stride people say it's a mystery why this is needed
1914 as well as the O_NDELAY, but that it fails without this. */
1915 #if defined (STRIDE) || (defined (pfa) && defined (HAVE_PTYS))
1917 int one = 1;
1918 ioctl (inchannel, FIONBIO, &one);
1920 #endif
1922 #ifdef O_NONBLOCK
1923 fcntl (inchannel, F_SETFL, O_NONBLOCK);
1924 fcntl (outchannel, F_SETFL, O_NONBLOCK);
1925 #else
1926 #ifdef O_NDELAY
1927 fcntl (inchannel, F_SETFL, O_NDELAY);
1928 fcntl (outchannel, F_SETFL, O_NDELAY);
1929 #endif
1930 #endif
1932 /* Record this as an active process, with its channels.
1933 As a result, child_setup will close Emacs's side of the pipes. */
1934 chan_process[inchannel] = process;
1935 XSETINT (XPROCESS (process)->infd, inchannel);
1936 XSETINT (XPROCESS (process)->outfd, outchannel);
1938 /* Previously we recorded the tty descriptor used in the subprocess.
1939 It was only used for getting the foreground tty process, so now
1940 we just reopen the device (see emacs_get_tty_pgrp) as this is
1941 more portable (see USG_SUBTTY_WORKS above). */
1943 XPROCESS (process)->pty_flag = (pty_flag ? Qt : Qnil);
1944 XPROCESS (process)->status = Qrun;
1945 setup_process_coding_systems (process);
1947 /* Delay interrupts until we have a chance to store
1948 the new fork's pid in its process structure */
1949 #ifdef POSIX_SIGNALS
1950 sigemptyset (&blocked);
1951 #ifdef SIGCHLD
1952 sigaddset (&blocked, SIGCHLD);
1953 #endif
1954 #ifdef HAVE_WORKING_VFORK
1955 /* On many hosts (e.g. Solaris 2.4), if a vforked child calls `signal',
1956 this sets the parent's signal handlers as well as the child's.
1957 So delay all interrupts whose handlers the child might munge,
1958 and record the current handlers so they can be restored later. */
1959 sigaddset (&blocked, SIGINT ); sigaction (SIGINT , 0, &sigint_action );
1960 sigaddset (&blocked, SIGQUIT); sigaction (SIGQUIT, 0, &sigquit_action);
1961 #ifdef AIX
1962 sigaddset (&blocked, SIGHUP ); sigaction (SIGHUP , 0, &sighup_action );
1963 #endif
1964 #endif /* HAVE_WORKING_VFORK */
1965 sigprocmask (SIG_BLOCK, &blocked, &procmask);
1966 #else /* !POSIX_SIGNALS */
1967 #ifdef SIGCHLD
1968 #ifdef BSD4_1
1969 sighold (SIGCHLD);
1970 #else /* not BSD4_1 */
1971 #if defined (BSD_SYSTEM) || defined (UNIPLUS) || defined (HPUX)
1972 sigsetmask (sigmask (SIGCHLD));
1973 #else /* ordinary USG */
1974 #if 0
1975 sigchld_deferred = 0;
1976 sigchld = signal (SIGCHLD, create_process_sigchld);
1977 #endif
1978 #endif /* ordinary USG */
1979 #endif /* not BSD4_1 */
1980 #endif /* SIGCHLD */
1981 #endif /* !POSIX_SIGNALS */
1983 FD_SET (inchannel, &input_wait_mask);
1984 FD_SET (inchannel, &non_keyboard_wait_mask);
1985 if (inchannel > max_process_desc)
1986 max_process_desc = inchannel;
1988 /* Until we store the proper pid, enable sigchld_handler
1989 to recognize an unknown pid as standing for this process.
1990 It is very important not to let this `marker' value stay
1991 in the table after this function has returned; if it does
1992 it might cause call-process to hang and subsequent asynchronous
1993 processes to get their return values scrambled. */
1994 XPROCESS (process)->pid = -1;
1996 BLOCK_INPUT;
1999 /* child_setup must clobber environ on systems with true vfork.
2000 Protect it from permanent change. */
2001 char **save_environ = environ;
2003 current_dir = ENCODE_FILE (current_dir);
2005 #ifndef WINDOWSNT
2006 pid = vfork ();
2007 if (pid == 0)
2008 #endif /* not WINDOWSNT */
2010 int xforkin = forkin;
2011 int xforkout = forkout;
2013 #if 0 /* This was probably a mistake--it duplicates code later on,
2014 but fails to handle all the cases. */
2015 /* Make sure SIGCHLD is not blocked in the child. */
2016 sigsetmask (SIGEMPTYMASK);
2017 #endif
2019 /* Make the pty be the controlling terminal of the process. */
2020 #ifdef HAVE_PTYS
2021 /* First, disconnect its current controlling terminal. */
2022 #ifdef HAVE_SETSID
2023 /* We tried doing setsid only if pty_flag, but it caused
2024 process_set_signal to fail on SGI when using a pipe. */
2025 setsid ();
2026 /* Make the pty's terminal the controlling terminal. */
2027 if (pty_flag)
2029 #ifdef TIOCSCTTY
2030 /* We ignore the return value
2031 because faith@cs.unc.edu says that is necessary on Linux. */
2032 ioctl (xforkin, TIOCSCTTY, 0);
2033 #endif
2035 #else /* not HAVE_SETSID */
2036 #ifdef USG
2037 /* It's very important to call setpgrp here and no time
2038 afterwards. Otherwise, we lose our controlling tty which
2039 is set when we open the pty. */
2040 setpgrp ();
2041 #endif /* USG */
2042 #endif /* not HAVE_SETSID */
2043 #if defined (HAVE_TERMIOS) && defined (LDISC1)
2044 if (pty_flag && xforkin >= 0)
2046 struct termios t;
2047 tcgetattr (xforkin, &t);
2048 t.c_lflag = LDISC1;
2049 if (tcsetattr (xforkin, TCSANOW, &t) < 0)
2050 emacs_write (1, "create_process/tcsetattr LDISC1 failed\n", 39);
2052 #else
2053 #if defined (NTTYDISC) && defined (TIOCSETD)
2054 if (pty_flag && xforkin >= 0)
2056 /* Use new line discipline. */
2057 int ldisc = NTTYDISC;
2058 ioctl (xforkin, TIOCSETD, &ldisc);
2060 #endif
2061 #endif
2062 #ifdef TIOCNOTTY
2063 /* In 4.3BSD, the TIOCSPGRP bug has been fixed, and now you
2064 can do TIOCSPGRP only to the process's controlling tty. */
2065 if (pty_flag)
2067 /* I wonder: would just ioctl (0, TIOCNOTTY, 0) work here?
2068 I can't test it since I don't have 4.3. */
2069 int j = emacs_open ("/dev/tty", O_RDWR, 0);
2070 ioctl (j, TIOCNOTTY, 0);
2071 emacs_close (j);
2072 #ifndef USG
2073 /* In order to get a controlling terminal on some versions
2074 of BSD, it is necessary to put the process in pgrp 0
2075 before it opens the terminal. */
2076 #ifdef HAVE_SETPGID
2077 setpgid (0, 0);
2078 #else
2079 setpgrp (0, 0);
2080 #endif
2081 #endif
2083 #endif /* TIOCNOTTY */
2085 #if !defined (RTU) && !defined (UNIPLUS) && !defined (DONT_REOPEN_PTY)
2086 /*** There is a suggestion that this ought to be a
2087 conditional on TIOCSPGRP,
2088 or !(defined (HAVE_SETSID) && defined (TIOCSCTTY)).
2089 Trying the latter gave the wrong results on Debian GNU/Linux 1.1;
2090 that system does seem to need this code, even though
2091 both HAVE_SETSID and TIOCSCTTY are defined. */
2092 /* Now close the pty (if we had it open) and reopen it.
2093 This makes the pty the controlling terminal of the subprocess. */
2094 if (pty_flag)
2096 #ifdef SET_CHILD_PTY_PGRP
2097 int pgrp = getpid ();
2098 #endif
2100 /* I wonder if emacs_close (emacs_open (pty_name, ...))
2101 would work? */
2102 if (xforkin >= 0)
2103 emacs_close (xforkin);
2104 xforkout = xforkin = emacs_open (pty_name, O_RDWR, 0);
2106 if (xforkin < 0)
2108 emacs_write (1, "Couldn't open the pty terminal ", 31);
2109 emacs_write (1, pty_name, strlen (pty_name));
2110 emacs_write (1, "\n", 1);
2111 _exit (1);
2114 #ifdef SET_CHILD_PTY_PGRP
2115 ioctl (xforkin, TIOCSPGRP, &pgrp);
2116 ioctl (xforkout, TIOCSPGRP, &pgrp);
2117 #endif
2119 #endif /* not UNIPLUS and not RTU and not DONT_REOPEN_PTY */
2121 #ifdef SETUP_SLAVE_PTY
2122 if (pty_flag)
2124 SETUP_SLAVE_PTY;
2126 #endif /* SETUP_SLAVE_PTY */
2127 #ifdef AIX
2128 /* On AIX, we've disabled SIGHUP above once we start a child on a pty.
2129 Now reenable it in the child, so it will die when we want it to. */
2130 if (pty_flag)
2131 signal (SIGHUP, SIG_DFL);
2132 #endif
2133 #endif /* HAVE_PTYS */
2135 signal (SIGINT, SIG_DFL);
2136 signal (SIGQUIT, SIG_DFL);
2138 /* Stop blocking signals in the child. */
2139 #ifdef POSIX_SIGNALS
2140 sigprocmask (SIG_SETMASK, &procmask, 0);
2141 #else /* !POSIX_SIGNALS */
2142 #ifdef SIGCHLD
2143 #ifdef BSD4_1
2144 sigrelse (SIGCHLD);
2145 #else /* not BSD4_1 */
2146 #if defined (BSD_SYSTEM) || defined (UNIPLUS) || defined (HPUX)
2147 sigsetmask (SIGEMPTYMASK);
2148 #else /* ordinary USG */
2149 #if 0
2150 signal (SIGCHLD, sigchld);
2151 #endif
2152 #endif /* ordinary USG */
2153 #endif /* not BSD4_1 */
2154 #endif /* SIGCHLD */
2155 #endif /* !POSIX_SIGNALS */
2157 #if !defined (RTU) && !defined (UNIPLUS) && !defined (DONT_REOPEN_PTY)
2158 if (pty_flag)
2159 child_setup_tty (xforkout);
2160 #endif /* not RTU and not UNIPLUS and not DONT_REOPEN_PTY */
2161 #ifdef WINDOWSNT
2162 pid = child_setup (xforkin, xforkout, xforkout,
2163 new_argv, 1, current_dir);
2164 #else /* not WINDOWSNT */
2165 child_setup (xforkin, xforkout, xforkout,
2166 new_argv, 1, current_dir);
2167 #endif /* not WINDOWSNT */
2169 environ = save_environ;
2172 UNBLOCK_INPUT;
2174 /* This runs in the Emacs process. */
2175 if (pid < 0)
2177 if (forkin >= 0)
2178 emacs_close (forkin);
2179 if (forkin != forkout && forkout >= 0)
2180 emacs_close (forkout);
2182 else
2184 /* vfork succeeded. */
2185 XPROCESS (process)->pid = pid;
2187 #ifdef WINDOWSNT
2188 register_child (pid, inchannel);
2189 #endif /* WINDOWSNT */
2191 /* If the subfork execv fails, and it exits,
2192 this close hangs. I don't know why.
2193 So have an interrupt jar it loose. */
2195 struct atimer *timer;
2196 EMACS_TIME offset;
2198 stop_polling ();
2199 EMACS_SET_SECS_USECS (offset, 1, 0);
2200 timer = start_atimer (ATIMER_RELATIVE, offset, create_process_1, 0);
2202 if (forkin >= 0)
2203 emacs_close (forkin);
2205 cancel_atimer (timer);
2206 start_polling ();
2209 if (forkin != forkout && forkout >= 0)
2210 emacs_close (forkout);
2212 #ifdef HAVE_PTYS
2213 if (pty_flag)
2214 XPROCESS (process)->tty_name = build_string (pty_name);
2215 else
2216 #endif
2217 XPROCESS (process)->tty_name = Qnil;
2220 /* Restore the signal state whether vfork succeeded or not.
2221 (We will signal an error, below, if it failed.) */
2222 #ifdef POSIX_SIGNALS
2223 #ifdef HAVE_WORKING_VFORK
2224 /* Restore the parent's signal handlers. */
2225 sigaction (SIGINT, &sigint_action, 0);
2226 sigaction (SIGQUIT, &sigquit_action, 0);
2227 #ifdef AIX
2228 sigaction (SIGHUP, &sighup_action, 0);
2229 #endif
2230 #endif /* HAVE_WORKING_VFORK */
2231 /* Stop blocking signals in the parent. */
2232 sigprocmask (SIG_SETMASK, &procmask, 0);
2233 #else /* !POSIX_SIGNALS */
2234 #ifdef SIGCHLD
2235 #ifdef BSD4_1
2236 sigrelse (SIGCHLD);
2237 #else /* not BSD4_1 */
2238 #if defined (BSD_SYSTEM) || defined (UNIPLUS) || defined (HPUX)
2239 sigsetmask (SIGEMPTYMASK);
2240 #else /* ordinary USG */
2241 #if 0
2242 signal (SIGCHLD, sigchld);
2243 /* Now really handle any of these signals
2244 that came in during this function. */
2245 if (sigchld_deferred)
2246 kill (getpid (), SIGCHLD);
2247 #endif
2248 #endif /* ordinary USG */
2249 #endif /* not BSD4_1 */
2250 #endif /* SIGCHLD */
2251 #endif /* !POSIX_SIGNALS */
2253 /* Now generate the error if vfork failed. */
2254 if (pid < 0)
2255 report_file_error ("Doing vfork", Qnil);
2257 #endif /* not VMS */
2260 #ifdef HAVE_SOCKETS
2262 /* Convert an internal struct sockaddr to a lisp object (vector or string).
2263 The address family of sa is not included in the result. */
2265 static Lisp_Object
2266 conv_sockaddr_to_lisp (sa, len)
2267 struct sockaddr *sa;
2268 int len;
2270 Lisp_Object address;
2271 int i;
2272 unsigned char *cp;
2273 register struct Lisp_Vector *p;
2275 switch (sa->sa_family)
2277 case AF_INET:
2279 struct sockaddr_in *sin = (struct sockaddr_in *) sa;
2280 len = sizeof (sin->sin_addr) + 1;
2281 address = Fmake_vector (make_number (len), Qnil);
2282 p = XVECTOR (address);
2283 p->contents[--len] = make_number (ntohs (sin->sin_port));
2284 cp = (unsigned char *)&sin->sin_addr;
2285 break;
2287 #ifdef AF_INET6
2288 case AF_INET6:
2290 struct sockaddr_in6 *sin6 = (struct sockaddr_in6 *) sa;
2291 uint16_t *ip6 = (uint16_t *)&sin6->sin6_addr;
2292 len = sizeof (sin6->sin6_addr)/2 + 1;
2293 address = Fmake_vector (make_number (len), Qnil);
2294 p = XVECTOR (address);
2295 p->contents[--len] = make_number (ntohs (sin6->sin6_port));
2296 for (i = 0; i < len; i++)
2297 p->contents[i] = make_number (ntohs (ip6[i]));
2298 return address;
2300 #endif
2301 #ifdef HAVE_LOCAL_SOCKETS
2302 case AF_LOCAL:
2304 struct sockaddr_un *sockun = (struct sockaddr_un *) sa;
2305 for (i = 0; i < sizeof (sockun->sun_path); i++)
2306 if (sockun->sun_path[i] == 0)
2307 break;
2308 return make_unibyte_string (sockun->sun_path, i);
2310 #endif
2311 default:
2312 len -= sizeof (sa->sa_family);
2313 address = Fcons (make_number (sa->sa_family),
2314 Fmake_vector (make_number (len), Qnil));
2315 p = XVECTOR (XCDR (address));
2316 cp = (unsigned char *) sa + sizeof (sa->sa_family);
2317 break;
2320 i = 0;
2321 while (i < len)
2322 p->contents[i++] = make_number (*cp++);
2324 return address;
2328 /* Get family and required size for sockaddr structure to hold ADDRESS. */
2330 static int
2331 get_lisp_to_sockaddr_size (address, familyp)
2332 Lisp_Object address;
2333 int *familyp;
2335 register struct Lisp_Vector *p;
2337 if (VECTORP (address))
2339 p = XVECTOR (address);
2340 if (p->size == 5)
2342 *familyp = AF_INET;
2343 return sizeof (struct sockaddr_in);
2345 #ifdef AF_INET6
2346 else if (p->size == 9)
2348 *familyp = AF_INET6;
2349 return sizeof (struct sockaddr_in6);
2351 #endif
2353 #ifdef HAVE_LOCAL_SOCKETS
2354 else if (STRINGP (address))
2356 *familyp = AF_LOCAL;
2357 return sizeof (struct sockaddr_un);
2359 #endif
2360 else if (CONSP (address) && INTEGERP (XCAR (address)) && VECTORP (XCDR (address)))
2362 struct sockaddr *sa;
2363 *familyp = XINT (XCAR (address));
2364 p = XVECTOR (XCDR (address));
2365 return p->size + sizeof (sa->sa_family);
2367 return 0;
2370 /* Convert an address object (vector or string) to an internal sockaddr.
2372 The address format has been basically validated by
2373 get_lisp_to_sockaddr_size, but this does not mean FAMILY is valid;
2374 it could have come from user data. So if FAMILY is not valid,
2375 we return after zeroing *SA. */
2377 static void
2378 conv_lisp_to_sockaddr (family, address, sa, len)
2379 int family;
2380 Lisp_Object address;
2381 struct sockaddr *sa;
2382 int len;
2384 register struct Lisp_Vector *p;
2385 register unsigned char *cp = NULL;
2386 register int i;
2388 bzero (sa, len);
2390 if (VECTORP (address))
2392 p = XVECTOR (address);
2393 if (family == AF_INET)
2395 struct sockaddr_in *sin = (struct sockaddr_in *) sa;
2396 len = sizeof (sin->sin_addr) + 1;
2397 i = XINT (p->contents[--len]);
2398 sin->sin_port = htons (i);
2399 cp = (unsigned char *)&sin->sin_addr;
2400 sa->sa_family = family;
2402 #ifdef AF_INET6
2403 else if (family == AF_INET6)
2405 struct sockaddr_in6 *sin6 = (struct sockaddr_in6 *) sa;
2406 uint16_t *ip6 = (uint16_t *)&sin6->sin6_addr;
2407 len = sizeof (sin6->sin6_addr) + 1;
2408 i = XINT (p->contents[--len]);
2409 sin6->sin6_port = htons (i);
2410 for (i = 0; i < len; i++)
2411 if (INTEGERP (p->contents[i]))
2413 int j = XFASTINT (p->contents[i]) & 0xffff;
2414 ip6[i] = ntohs (j);
2416 sa->sa_family = family;
2418 #endif
2419 return;
2421 else if (STRINGP (address))
2423 #ifdef HAVE_LOCAL_SOCKETS
2424 if (family == AF_LOCAL)
2426 struct sockaddr_un *sockun = (struct sockaddr_un *) sa;
2427 cp = SDATA (address);
2428 for (i = 0; i < sizeof (sockun->sun_path) && *cp; i++)
2429 sockun->sun_path[i] = *cp++;
2430 sa->sa_family = family;
2432 #endif
2433 return;
2435 else
2437 p = XVECTOR (XCDR (address));
2438 cp = (unsigned char *)sa + sizeof (sa->sa_family);
2441 for (i = 0; i < len; i++)
2442 if (INTEGERP (p->contents[i]))
2443 *cp++ = XFASTINT (p->contents[i]) & 0xff;
2446 #ifdef DATAGRAM_SOCKETS
2447 DEFUN ("process-datagram-address", Fprocess_datagram_address, Sprocess_datagram_address,
2448 1, 1, 0,
2449 doc: /* Get the current datagram address associated with PROCESS. */)
2450 (process)
2451 Lisp_Object process;
2453 int channel;
2455 CHECK_PROCESS (process);
2457 if (!DATAGRAM_CONN_P (process))
2458 return Qnil;
2460 channel = XINT (XPROCESS (process)->infd);
2461 return conv_sockaddr_to_lisp (datagram_address[channel].sa,
2462 datagram_address[channel].len);
2465 DEFUN ("set-process-datagram-address", Fset_process_datagram_address, Sset_process_datagram_address,
2466 2, 2, 0,
2467 doc: /* Set the datagram address for PROCESS to ADDRESS.
2468 Returns nil upon error setting address, ADDRESS otherwise. */)
2469 (process, address)
2470 Lisp_Object process, address;
2472 int channel;
2473 int family, len;
2475 CHECK_PROCESS (process);
2477 if (!DATAGRAM_CONN_P (process))
2478 return Qnil;
2480 channel = XINT (XPROCESS (process)->infd);
2482 len = get_lisp_to_sockaddr_size (address, &family);
2483 if (datagram_address[channel].len != len)
2484 return Qnil;
2485 conv_lisp_to_sockaddr (family, address, datagram_address[channel].sa, len);
2486 return address;
2488 #endif
2491 static struct socket_options {
2492 /* The name of this option. Should be lowercase version of option
2493 name without SO_ prefix. */
2494 char *name;
2495 /* Option level SOL_... */
2496 int optlevel;
2497 /* Option number SO_... */
2498 int optnum;
2499 enum { SOPT_UNKNOWN, SOPT_BOOL, SOPT_INT, SOPT_IFNAME, SOPT_LINGER } opttype;
2500 enum { OPIX_NONE=0, OPIX_MISC=1, OPIX_REUSEADDR=2 } optbit;
2501 } socket_options[] =
2503 #ifdef SO_BINDTODEVICE
2504 { ":bindtodevice", SOL_SOCKET, SO_BINDTODEVICE, SOPT_IFNAME, OPIX_MISC },
2505 #endif
2506 #ifdef SO_BROADCAST
2507 { ":broadcast", SOL_SOCKET, SO_BROADCAST, SOPT_BOOL, OPIX_MISC },
2508 #endif
2509 #ifdef SO_DONTROUTE
2510 { ":dontroute", SOL_SOCKET, SO_DONTROUTE, SOPT_BOOL, OPIX_MISC },
2511 #endif
2512 #ifdef SO_KEEPALIVE
2513 { ":keepalive", SOL_SOCKET, SO_KEEPALIVE, SOPT_BOOL, OPIX_MISC },
2514 #endif
2515 #ifdef SO_LINGER
2516 { ":linger", SOL_SOCKET, SO_LINGER, SOPT_LINGER, OPIX_MISC },
2517 #endif
2518 #ifdef SO_OOBINLINE
2519 { ":oobinline", SOL_SOCKET, SO_OOBINLINE, SOPT_BOOL, OPIX_MISC },
2520 #endif
2521 #ifdef SO_PRIORITY
2522 { ":priority", SOL_SOCKET, SO_PRIORITY, SOPT_INT, OPIX_MISC },
2523 #endif
2524 #ifdef SO_REUSEADDR
2525 { ":reuseaddr", SOL_SOCKET, SO_REUSEADDR, SOPT_BOOL, OPIX_REUSEADDR },
2526 #endif
2527 { 0, 0, 0, SOPT_UNKNOWN, OPIX_NONE }
2530 /* Set option OPT to value VAL on socket S.
2532 Returns (1<<socket_options[OPT].optbit) if option is known, 0 otherwise.
2533 Signals an error if setting a known option fails.
2536 static int
2537 set_socket_option (s, opt, val)
2538 int s;
2539 Lisp_Object opt, val;
2541 char *name;
2542 struct socket_options *sopt;
2543 int ret = 0;
2545 CHECK_SYMBOL (opt);
2547 name = (char *) SDATA (SYMBOL_NAME (opt));
2548 for (sopt = socket_options; sopt->name; sopt++)
2549 if (strcmp (name, sopt->name) == 0)
2550 break;
2552 switch (sopt->opttype)
2554 case SOPT_BOOL:
2556 int optval;
2557 optval = NILP (val) ? 0 : 1;
2558 ret = setsockopt (s, sopt->optlevel, sopt->optnum,
2559 &optval, sizeof (optval));
2560 break;
2563 case SOPT_INT:
2565 int optval;
2566 if (INTEGERP (val))
2567 optval = XINT (val);
2568 else
2569 error ("Bad option value for %s", name);
2570 ret = setsockopt (s, sopt->optlevel, sopt->optnum,
2571 &optval, sizeof (optval));
2572 break;
2575 #ifdef SO_BINDTODEVICE
2576 case SOPT_IFNAME:
2578 char devname[IFNAMSIZ+1];
2580 /* This is broken, at least in the Linux 2.4 kernel.
2581 To unbind, the arg must be a zero integer, not the empty string.
2582 This should work on all systems. KFS. 2003-09-23. */
2583 bzero (devname, sizeof devname);
2584 if (STRINGP (val))
2586 char *arg = (char *) SDATA (val);
2587 int len = min (strlen (arg), IFNAMSIZ);
2588 bcopy (arg, devname, len);
2590 else if (!NILP (val))
2591 error ("Bad option value for %s", name);
2592 ret = setsockopt (s, sopt->optlevel, sopt->optnum,
2593 devname, IFNAMSIZ);
2594 break;
2596 #endif
2598 #ifdef SO_LINGER
2599 case SOPT_LINGER:
2601 struct linger linger;
2603 linger.l_onoff = 1;
2604 linger.l_linger = 0;
2605 if (INTEGERP (val))
2606 linger.l_linger = XINT (val);
2607 else
2608 linger.l_onoff = NILP (val) ? 0 : 1;
2609 ret = setsockopt (s, sopt->optlevel, sopt->optnum,
2610 &linger, sizeof (linger));
2611 break;
2613 #endif
2615 default:
2616 return 0;
2619 if (ret < 0)
2620 report_file_error ("Cannot set network option",
2621 Fcons (opt, Fcons (val, Qnil)));
2622 return (1 << sopt->optbit);
2626 DEFUN ("set-network-process-option",
2627 Fset_network_process_option, Sset_network_process_option,
2628 3, 4, 0,
2629 doc: /* For network process PROCESS set option OPTION to value VALUE.
2630 See `make-network-process' for a list of options and values.
2631 If optional fourth arg NO-ERROR is non-nil, don't signal an error if
2632 OPTION is not a supported option, return nil instead; otherwise return t. */)
2633 (process, option, value, no_error)
2634 Lisp_Object process, option, value;
2635 Lisp_Object no_error;
2637 int s;
2638 struct Lisp_Process *p;
2640 CHECK_PROCESS (process);
2641 p = XPROCESS (process);
2642 if (!NETCONN1_P (p))
2643 error ("Process is not a network process");
2645 s = XINT (p->infd);
2646 if (s < 0)
2647 error ("Process is not running");
2649 if (set_socket_option (s, option, value))
2651 p->childp = Fplist_put (p->childp, option, value);
2652 return Qt;
2655 if (NILP (no_error))
2656 error ("Unknown or unsupported option");
2658 return Qnil;
2662 /* A version of request_sigio suitable for a record_unwind_protect. */
2664 static Lisp_Object
2665 unwind_request_sigio (dummy)
2666 Lisp_Object dummy;
2668 if (interrupt_input)
2669 request_sigio ();
2670 return Qnil;
2673 /* Create a network stream/datagram client/server process. Treated
2674 exactly like a normal process when reading and writing. Primary
2675 differences are in status display and process deletion. A network
2676 connection has no PID; you cannot signal it. All you can do is
2677 stop/continue it and deactivate/close it via delete-process */
2679 DEFUN ("make-network-process", Fmake_network_process, Smake_network_process,
2680 0, MANY, 0,
2681 doc: /* Create and return a network server or client process.
2683 In Emacs, network connections are represented by process objects, so
2684 input and output work as for subprocesses and `delete-process' closes
2685 a network connection. However, a network process has no process id,
2686 it cannot be signaled, and the status codes are different from normal
2687 processes.
2689 Arguments are specified as keyword/argument pairs. The following
2690 arguments are defined:
2692 :name NAME -- NAME is name for process. It is modified if necessary
2693 to make it unique.
2695 :buffer BUFFER -- BUFFER is the buffer (or buffer-name) to associate
2696 with the process. Process output goes at end of that buffer, unless
2697 you specify an output stream or filter function to handle the output.
2698 BUFFER may be also nil, meaning that this process is not associated
2699 with any buffer.
2701 :host HOST -- HOST is name of the host to connect to, or its IP
2702 address. The symbol `local' specifies the local host. If specified
2703 for a server process, it must be a valid name or address for the local
2704 host, and only clients connecting to that address will be accepted.
2706 :service SERVICE -- SERVICE is name of the service desired, or an
2707 integer specifying a port number to connect to. If SERVICE is t,
2708 a random port number is selected for the server.
2710 :type TYPE -- TYPE is the type of connection. The default (nil) is a
2711 stream type connection, `datagram' creates a datagram type connection.
2713 :family FAMILY -- FAMILY is the address (and protocol) family for the
2714 service specified by HOST and SERVICE. The default (nil) is to use
2715 whatever address family (IPv4 or IPv6) that is defined for the host
2716 and port number specified by HOST and SERVICE. Other address families
2717 supported are:
2718 local -- for a local (i.e. UNIX) address specified by SERVICE.
2719 ipv4 -- use IPv4 address family only.
2720 ipv6 -- use IPv6 address family only.
2722 :local ADDRESS -- ADDRESS is the local address used for the connection.
2723 This parameter is ignored when opening a client process. When specified
2724 for a server process, the FAMILY, HOST and SERVICE args are ignored.
2726 :remote ADDRESS -- ADDRESS is the remote partner's address for the
2727 connection. This parameter is ignored when opening a stream server
2728 process. For a datagram server process, it specifies the initial
2729 setting of the remote datagram address. When specified for a client
2730 process, the FAMILY, HOST, and SERVICE args are ignored.
2732 The format of ADDRESS depends on the address family:
2733 - An IPv4 address is represented as an vector of integers [A B C D P]
2734 corresponding to numeric IP address A.B.C.D and port number P.
2735 - A local address is represented as a string with the address in the
2736 local address space.
2737 - An "unsupported family" address is represented by a cons (F . AV)
2738 where F is the family number and AV is a vector containing the socket
2739 address data with one element per address data byte. Do not rely on
2740 this format in portable code, as it may depend on implementation
2741 defined constants, data sizes, and data structure alignment.
2743 :coding CODING -- If CODING is a symbol, it specifies the coding
2744 system used for both reading and writing for this process. If CODING
2745 is a cons (DECODING . ENCODING), DECODING is used for reading, and
2746 ENCODING is used for writing.
2748 :nowait BOOL -- If BOOL is non-nil for a stream type client process,
2749 return without waiting for the connection to complete; instead, the
2750 sentinel function will be called with second arg matching "open" (if
2751 successful) or "failed" when the connect completes. Default is to use
2752 a blocking connect (i.e. wait) for stream type connections.
2754 :noquery BOOL -- Query the user unless BOOL is non-nil, and process is
2755 running when Emacs is exited.
2757 :stop BOOL -- Start process in the `stopped' state if BOOL non-nil.
2758 In the stopped state, a server process does not accept new
2759 connections, and a client process does not handle incoming traffic.
2760 The stopped state is cleared by `continue-process' and set by
2761 `stop-process'.
2763 :filter FILTER -- Install FILTER as the process filter.
2765 :filter-multibyte BOOL -- If BOOL is non-nil, strings given to the
2766 process filter are multibyte, otherwise they are unibyte.
2767 If this keyword is not specified, the strings are multibyte iff
2768 `default-enable-multibyte-characters' is non-nil.
2770 :sentinel SENTINEL -- Install SENTINEL as the process sentinel.
2772 :log LOG -- Install LOG as the server process log function. This
2773 function is called when the server accepts a network connection from a
2774 client. The arguments are SERVER, CLIENT, and MESSAGE, where SERVER
2775 is the server process, CLIENT is the new process for the connection,
2776 and MESSAGE is a string.
2778 :plist PLIST -- Install PLIST as the new process' initial plist.
2780 :server QLEN -- if QLEN is non-nil, create a server process for the
2781 specified FAMILY, SERVICE, and connection type (stream or datagram).
2782 If QLEN is an integer, it is used as the max. length of the server's
2783 pending connection queue (also known as the backlog); the default
2784 queue length is 5. Default is to create a client process.
2786 The following network options can be specified for this connection:
2788 :broadcast BOOL -- Allow send and receive of datagram broadcasts.
2789 :dontroute BOOL -- Only send to directly connected hosts.
2790 :keepalive BOOL -- Send keep-alive messages on network stream.
2791 :linger BOOL or TIMEOUT -- Send queued messages before closing.
2792 :oobinline BOOL -- Place out-of-band data in receive data stream.
2793 :priority INT -- Set protocol defined priority for sent packets.
2794 :reuseaddr BOOL -- Allow reusing a recently used local address
2795 (this is allowed by default for a server process).
2796 :bindtodevice NAME -- bind to interface NAME. Using this may require
2797 special privileges on some systems.
2799 Consult the relevant system programmer's manual pages for more
2800 information on using these options.
2803 A server process will listen for and accept connections from clients.
2804 When a client connection is accepted, a new network process is created
2805 for the connection with the following parameters:
2807 - The client's process name is constructed by concatenating the server
2808 process' NAME and a client identification string.
2809 - If the FILTER argument is non-nil, the client process will not get a
2810 separate process buffer; otherwise, the client's process buffer is a newly
2811 created buffer named after the server process' BUFFER name or process
2812 NAME concatenated with the client identification string.
2813 - The connection type and the process filter and sentinel parameters are
2814 inherited from the server process' TYPE, FILTER and SENTINEL.
2815 - The client process' contact info is set according to the client's
2816 addressing information (typically an IP address and a port number).
2817 - The client process' plist is initialized from the server's plist.
2819 Notice that the FILTER and SENTINEL args are never used directly by
2820 the server process. Also, the BUFFER argument is not used directly by
2821 the server process, but via the optional :log function, accepted (and
2822 failed) connections may be logged in the server process' buffer.
2824 The original argument list, modified with the actual connection
2825 information, is available via the `process-contact' function.
2827 usage: (make-network-process &rest ARGS) */)
2828 (nargs, args)
2829 int nargs;
2830 Lisp_Object *args;
2832 Lisp_Object proc;
2833 Lisp_Object contact;
2834 struct Lisp_Process *p;
2835 #ifdef HAVE_GETADDRINFO
2836 struct addrinfo ai, *res, *lres;
2837 struct addrinfo hints;
2838 char *portstring, portbuf[128];
2839 #else /* HAVE_GETADDRINFO */
2840 struct _emacs_addrinfo
2842 int ai_family;
2843 int ai_socktype;
2844 int ai_protocol;
2845 int ai_addrlen;
2846 struct sockaddr *ai_addr;
2847 struct _emacs_addrinfo *ai_next;
2848 } ai, *res, *lres;
2849 #endif /* HAVE_GETADDRINFO */
2850 struct sockaddr_in address_in;
2851 #ifdef HAVE_LOCAL_SOCKETS
2852 struct sockaddr_un address_un;
2853 #endif
2854 int port;
2855 int ret = 0;
2856 int xerrno = 0;
2857 int s = -1, outch, inch;
2858 struct gcpro gcpro1;
2859 int count = SPECPDL_INDEX ();
2860 int count1;
2861 Lisp_Object QCaddress; /* one of QClocal or QCremote */
2862 Lisp_Object tem;
2863 Lisp_Object name, buffer, host, service, address;
2864 Lisp_Object filter, sentinel;
2865 int is_non_blocking_client = 0;
2866 int is_server = 0, backlog = 5;
2867 int socktype;
2868 int family = -1;
2870 if (nargs == 0)
2871 return Qnil;
2873 /* Save arguments for process-contact and clone-process. */
2874 contact = Flist (nargs, args);
2875 GCPRO1 (contact);
2877 #ifdef WINDOWSNT
2878 /* Ensure socket support is loaded if available. */
2879 init_winsock (TRUE);
2880 #endif
2882 /* :type TYPE (nil: stream, datagram */
2883 tem = Fplist_get (contact, QCtype);
2884 if (NILP (tem))
2885 socktype = SOCK_STREAM;
2886 #ifdef DATAGRAM_SOCKETS
2887 else if (EQ (tem, Qdatagram))
2888 socktype = SOCK_DGRAM;
2889 #endif
2890 else
2891 error ("Unsupported connection type");
2893 /* :server BOOL */
2894 tem = Fplist_get (contact, QCserver);
2895 if (!NILP (tem))
2897 /* Don't support network sockets when non-blocking mode is
2898 not available, since a blocked Emacs is not useful. */
2899 #if defined(TERM) || (!defined(O_NONBLOCK) && !defined(O_NDELAY))
2900 error ("Network servers not supported");
2901 #else
2902 is_server = 1;
2903 if (INTEGERP (tem))
2904 backlog = XINT (tem);
2905 #endif
2908 /* Make QCaddress an alias for :local (server) or :remote (client). */
2909 QCaddress = is_server ? QClocal : QCremote;
2911 /* :nowait BOOL */
2912 if (!is_server && socktype == SOCK_STREAM
2913 && (tem = Fplist_get (contact, QCnowait), !NILP (tem)))
2915 #ifndef NON_BLOCKING_CONNECT
2916 error ("Non-blocking connect not supported");
2917 #else
2918 is_non_blocking_client = 1;
2919 #endif
2922 name = Fplist_get (contact, QCname);
2923 buffer = Fplist_get (contact, QCbuffer);
2924 filter = Fplist_get (contact, QCfilter);
2925 sentinel = Fplist_get (contact, QCsentinel);
2927 CHECK_STRING (name);
2929 #ifdef TERM
2930 /* Let's handle TERM before things get complicated ... */
2931 host = Fplist_get (contact, QChost);
2932 CHECK_STRING (host);
2934 service = Fplist_get (contact, QCservice);
2935 if (INTEGERP (service))
2936 port = htons ((unsigned short) XINT (service));
2937 else
2939 struct servent *svc_info;
2940 CHECK_STRING (service);
2941 svc_info = getservbyname (SDATA (service), "tcp");
2942 if (svc_info == 0)
2943 error ("Unknown service: %s", SDATA (service));
2944 port = svc_info->s_port;
2947 s = connect_server (0);
2948 if (s < 0)
2949 report_file_error ("error creating socket", Fcons (name, Qnil));
2950 send_command (s, C_PORT, 0, "%s:%d", SDATA (host), ntohs (port));
2951 send_command (s, C_DUMB, 1, 0);
2953 #else /* not TERM */
2955 /* Initialize addrinfo structure in case we don't use getaddrinfo. */
2956 ai.ai_socktype = socktype;
2957 ai.ai_protocol = 0;
2958 ai.ai_next = NULL;
2959 res = &ai;
2961 /* :local ADDRESS or :remote ADDRESS */
2962 address = Fplist_get (contact, QCaddress);
2963 if (!NILP (address))
2965 host = service = Qnil;
2967 if (!(ai.ai_addrlen = get_lisp_to_sockaddr_size (address, &family)))
2968 error ("Malformed :address");
2969 ai.ai_family = family;
2970 ai.ai_addr = alloca (ai.ai_addrlen);
2971 conv_lisp_to_sockaddr (family, address, ai.ai_addr, ai.ai_addrlen);
2972 goto open_socket;
2975 /* :family FAMILY -- nil (for Inet), local, or integer. */
2976 tem = Fplist_get (contact, QCfamily);
2977 if (NILP (tem))
2979 #if defined(HAVE_GETADDRINFO) && defined(AF_INET6)
2980 family = AF_UNSPEC;
2981 #else
2982 family = AF_INET;
2983 #endif
2985 #ifdef HAVE_LOCAL_SOCKETS
2986 else if (EQ (tem, Qlocal))
2987 family = AF_LOCAL;
2988 #endif
2989 #ifdef AF_INET6
2990 else if (EQ (tem, Qipv6))
2991 family = AF_INET6;
2992 #endif
2993 else if (EQ (tem, Qipv4))
2994 family = AF_INET;
2995 else if (INTEGERP (tem))
2996 family = XINT (tem);
2997 else
2998 error ("Unknown address family");
3000 ai.ai_family = family;
3002 /* :service SERVICE -- string, integer (port number), or t (random port). */
3003 service = Fplist_get (contact, QCservice);
3005 #ifdef HAVE_LOCAL_SOCKETS
3006 if (family == AF_LOCAL)
3008 /* Host is not used. */
3009 host = Qnil;
3010 CHECK_STRING (service);
3011 bzero (&address_un, sizeof address_un);
3012 address_un.sun_family = AF_LOCAL;
3013 strncpy (address_un.sun_path, SDATA (service), sizeof address_un.sun_path);
3014 ai.ai_addr = (struct sockaddr *) &address_un;
3015 ai.ai_addrlen = sizeof address_un;
3016 goto open_socket;
3018 #endif
3020 /* :host HOST -- hostname, ip address, or 'local for localhost. */
3021 host = Fplist_get (contact, QChost);
3022 if (!NILP (host))
3024 if (EQ (host, Qlocal))
3025 host = build_string ("localhost");
3026 CHECK_STRING (host);
3029 /* Slow down polling to every ten seconds.
3030 Some kernels have a bug which causes retrying connect to fail
3031 after a connect. Polling can interfere with gethostbyname too. */
3032 #ifdef POLL_FOR_INPUT
3033 if (socktype == SOCK_STREAM)
3035 record_unwind_protect (unwind_stop_other_atimers, Qnil);
3036 bind_polling_period (10);
3038 #endif
3040 #ifdef HAVE_GETADDRINFO
3041 /* If we have a host, use getaddrinfo to resolve both host and service.
3042 Otherwise, use getservbyname to lookup the service. */
3043 if (!NILP (host))
3046 /* SERVICE can either be a string or int.
3047 Convert to a C string for later use by getaddrinfo. */
3048 if (EQ (service, Qt))
3049 portstring = "0";
3050 else if (INTEGERP (service))
3052 sprintf (portbuf, "%ld", (long) XINT (service));
3053 portstring = portbuf;
3055 else
3057 CHECK_STRING (service);
3058 portstring = SDATA (service);
3061 immediate_quit = 1;
3062 QUIT;
3063 memset (&hints, 0, sizeof (hints));
3064 hints.ai_flags = 0;
3065 hints.ai_family = family;
3066 hints.ai_socktype = socktype;
3067 hints.ai_protocol = 0;
3068 ret = getaddrinfo (SDATA (host), portstring, &hints, &res);
3069 if (ret)
3070 #ifdef HAVE_GAI_STRERROR
3071 error ("%s/%s %s", SDATA (host), portstring, gai_strerror(ret));
3072 #else
3073 error ("%s/%s getaddrinfo error %d", SDATA (host), portstring, ret);
3074 #endif
3075 immediate_quit = 0;
3077 goto open_socket;
3079 #endif /* HAVE_GETADDRINFO */
3081 /* We end up here if getaddrinfo is not defined, or in case no hostname
3082 has been specified (e.g. for a local server process). */
3084 if (EQ (service, Qt))
3085 port = 0;
3086 else if (INTEGERP (service))
3087 port = htons ((unsigned short) XINT (service));
3088 else
3090 struct servent *svc_info;
3091 CHECK_STRING (service);
3092 svc_info = getservbyname (SDATA (service),
3093 (socktype == SOCK_DGRAM ? "udp" : "tcp"));
3094 if (svc_info == 0)
3095 error ("Unknown service: %s", SDATA (service));
3096 port = svc_info->s_port;
3099 bzero (&address_in, sizeof address_in);
3100 address_in.sin_family = family;
3101 address_in.sin_addr.s_addr = INADDR_ANY;
3102 address_in.sin_port = port;
3104 #ifndef HAVE_GETADDRINFO
3105 if (!NILP (host))
3107 struct hostent *host_info_ptr;
3109 /* gethostbyname may fail with TRY_AGAIN, but we don't honour that,
3110 as it may `hang' Emacs for a very long time. */
3111 immediate_quit = 1;
3112 QUIT;
3113 host_info_ptr = gethostbyname (SDATA (host));
3114 immediate_quit = 0;
3116 if (host_info_ptr)
3118 bcopy (host_info_ptr->h_addr, (char *) &address_in.sin_addr,
3119 host_info_ptr->h_length);
3120 family = host_info_ptr->h_addrtype;
3121 address_in.sin_family = family;
3123 else
3124 /* Attempt to interpret host as numeric inet address */
3126 IN_ADDR numeric_addr;
3127 numeric_addr = inet_addr ((char *) SDATA (host));
3128 if (NUMERIC_ADDR_ERROR)
3129 error ("Unknown host \"%s\"", SDATA (host));
3131 bcopy ((char *)&numeric_addr, (char *) &address_in.sin_addr,
3132 sizeof (address_in.sin_addr));
3136 #endif /* not HAVE_GETADDRINFO */
3138 ai.ai_family = family;
3139 ai.ai_addr = (struct sockaddr *) &address_in;
3140 ai.ai_addrlen = sizeof address_in;
3142 open_socket:
3144 /* Kernel bugs (on Ultrix at least) cause lossage (not just EINTR)
3145 when connect is interrupted. So let's not let it get interrupted.
3146 Note we do not turn off polling, because polling is only used
3147 when not interrupt_input, and thus not normally used on the systems
3148 which have this bug. On systems which use polling, there's no way
3149 to quit if polling is turned off. */
3150 if (interrupt_input
3151 && !is_server && socktype == SOCK_STREAM)
3153 /* Comment from KFS: The original open-network-stream code
3154 didn't unwind protect this, but it seems like the proper
3155 thing to do. In any case, I don't see how it could harm to
3156 do this -- and it makes cleanup (using unbind_to) easier. */
3157 record_unwind_protect (unwind_request_sigio, Qnil);
3158 unrequest_sigio ();
3161 /* Do this in case we never enter the for-loop below. */
3162 count1 = SPECPDL_INDEX ();
3163 s = -1;
3165 for (lres = res; lres; lres = lres->ai_next)
3167 int optn, optbits;
3169 retry_connect:
3171 s = socket (lres->ai_family, lres->ai_socktype, lres->ai_protocol);
3172 if (s < 0)
3174 xerrno = errno;
3175 continue;
3178 #ifdef DATAGRAM_SOCKETS
3179 if (!is_server && socktype == SOCK_DGRAM)
3180 break;
3181 #endif /* DATAGRAM_SOCKETS */
3183 #ifdef NON_BLOCKING_CONNECT
3184 if (is_non_blocking_client)
3186 #ifdef O_NONBLOCK
3187 ret = fcntl (s, F_SETFL, O_NONBLOCK);
3188 #else
3189 ret = fcntl (s, F_SETFL, O_NDELAY);
3190 #endif
3191 if (ret < 0)
3193 xerrno = errno;
3194 emacs_close (s);
3195 s = -1;
3196 continue;
3199 #endif
3201 /* Make us close S if quit. */
3202 record_unwind_protect (close_file_unwind, make_number (s));
3204 /* Parse network options in the arg list.
3205 We simply ignore anything which isn't a known option (including other keywords).
3206 An error is signalled if setting a known option fails. */
3207 for (optn = optbits = 0; optn < nargs-1; optn += 2)
3208 optbits |= set_socket_option (s, args[optn], args[optn+1]);
3210 if (is_server)
3212 /* Configure as a server socket. */
3214 /* SO_REUSEADDR = 1 is default for server sockets; must specify
3215 explicit :reuseaddr key to override this. */
3216 #ifdef HAVE_LOCAL_SOCKETS
3217 if (family != AF_LOCAL)
3218 #endif
3219 if (!(optbits & (1 << OPIX_REUSEADDR)))
3221 int optval = 1;
3222 if (setsockopt (s, SOL_SOCKET, SO_REUSEADDR, &optval, sizeof optval))
3223 report_file_error ("Cannot set reuse option on server socket", Qnil);
3226 if (bind (s, lres->ai_addr, lres->ai_addrlen))
3227 report_file_error ("Cannot bind server socket", Qnil);
3229 #ifdef HAVE_GETSOCKNAME
3230 if (EQ (service, Qt))
3232 struct sockaddr_in sa1;
3233 int len1 = sizeof (sa1);
3234 if (getsockname (s, (struct sockaddr *)&sa1, &len1) == 0)
3236 ((struct sockaddr_in *)(lres->ai_addr))->sin_port = sa1.sin_port;
3237 service = make_number (ntohs (sa1.sin_port));
3238 contact = Fplist_put (contact, QCservice, service);
3241 #endif
3243 if (socktype == SOCK_STREAM && listen (s, backlog))
3244 report_file_error ("Cannot listen on server socket", Qnil);
3246 break;
3249 immediate_quit = 1;
3250 QUIT;
3252 /* This turns off all alarm-based interrupts; the
3253 bind_polling_period call above doesn't always turn all the
3254 short-interval ones off, especially if interrupt_input is
3255 set.
3257 It'd be nice to be able to control the connect timeout
3258 though. Would non-blocking connect calls be portable?
3260 This used to be conditioned by HAVE_GETADDRINFO. Why? */
3262 turn_on_atimers (0);
3264 ret = connect (s, lres->ai_addr, lres->ai_addrlen);
3265 xerrno = errno;
3267 turn_on_atimers (1);
3269 if (ret == 0 || xerrno == EISCONN)
3271 /* The unwind-protect will be discarded afterwards.
3272 Likewise for immediate_quit. */
3273 break;
3276 #ifdef NON_BLOCKING_CONNECT
3277 #ifdef EINPROGRESS
3278 if (is_non_blocking_client && xerrno == EINPROGRESS)
3279 break;
3280 #else
3281 #ifdef EWOULDBLOCK
3282 if (is_non_blocking_client && xerrno == EWOULDBLOCK)
3283 break;
3284 #endif
3285 #endif
3286 #endif
3288 immediate_quit = 0;
3290 /* Discard the unwind protect closing S. */
3291 specpdl_ptr = specpdl + count1;
3292 emacs_close (s);
3293 s = -1;
3295 if (xerrno == EINTR)
3296 goto retry_connect;
3299 if (s >= 0)
3301 #ifdef DATAGRAM_SOCKETS
3302 if (socktype == SOCK_DGRAM)
3304 if (datagram_address[s].sa)
3305 abort ();
3306 datagram_address[s].sa = (struct sockaddr *) xmalloc (lres->ai_addrlen);
3307 datagram_address[s].len = lres->ai_addrlen;
3308 if (is_server)
3310 Lisp_Object remote;
3311 bzero (datagram_address[s].sa, lres->ai_addrlen);
3312 if (remote = Fplist_get (contact, QCremote), !NILP (remote))
3314 int rfamily, rlen;
3315 rlen = get_lisp_to_sockaddr_size (remote, &rfamily);
3316 if (rfamily == lres->ai_family && rlen == lres->ai_addrlen)
3317 conv_lisp_to_sockaddr (rfamily, remote,
3318 datagram_address[s].sa, rlen);
3321 else
3322 bcopy (lres->ai_addr, datagram_address[s].sa, lres->ai_addrlen);
3324 #endif
3325 contact = Fplist_put (contact, QCaddress,
3326 conv_sockaddr_to_lisp (lres->ai_addr, lres->ai_addrlen));
3327 #ifdef HAVE_GETSOCKNAME
3328 if (!is_server)
3330 struct sockaddr_in sa1;
3331 int len1 = sizeof (sa1);
3332 if (getsockname (s, (struct sockaddr *)&sa1, &len1) == 0)
3333 contact = Fplist_put (contact, QClocal,
3334 conv_sockaddr_to_lisp (&sa1, len1));
3336 #endif
3339 #ifdef HAVE_GETADDRINFO
3340 if (res != &ai)
3341 freeaddrinfo (res);
3342 #endif
3344 immediate_quit = 0;
3346 /* Discard the unwind protect for closing S, if any. */
3347 specpdl_ptr = specpdl + count1;
3349 /* Unwind bind_polling_period and request_sigio. */
3350 unbind_to (count, Qnil);
3352 if (s < 0)
3354 /* If non-blocking got this far - and failed - assume non-blocking is
3355 not supported after all. This is probably a wrong assumption, but
3356 the normal blocking calls to open-network-stream handles this error
3357 better. */
3358 if (is_non_blocking_client)
3359 return Qnil;
3361 errno = xerrno;
3362 if (is_server)
3363 report_file_error ("make server process failed", contact);
3364 else
3365 report_file_error ("make client process failed", contact);
3368 #endif /* not TERM */
3370 inch = s;
3371 outch = s;
3373 if (!NILP (buffer))
3374 buffer = Fget_buffer_create (buffer);
3375 proc = make_process (name);
3377 chan_process[inch] = proc;
3379 #ifdef O_NONBLOCK
3380 fcntl (inch, F_SETFL, O_NONBLOCK);
3381 #else
3382 #ifdef O_NDELAY
3383 fcntl (inch, F_SETFL, O_NDELAY);
3384 #endif
3385 #endif
3387 p = XPROCESS (proc);
3389 p->childp = contact;
3390 p->plist = Fcopy_sequence (Fplist_get (contact, QCplist));
3392 p->buffer = buffer;
3393 p->sentinel = sentinel;
3394 p->filter = filter;
3395 p->filter_multibyte = buffer_defaults.enable_multibyte_characters;
3396 /* Override the above only if :filter-multibyte is specified. */
3397 if (! NILP (Fplist_member (contact, QCfilter_multibyte)))
3398 p->filter_multibyte = Fplist_get (contact, QCfilter_multibyte);
3399 p->log = Fplist_get (contact, QClog);
3400 if (tem = Fplist_get (contact, QCnoquery), !NILP (tem))
3401 p->kill_without_query = Qt;
3402 if ((tem = Fplist_get (contact, QCstop), !NILP (tem)))
3403 p->command = Qt;
3404 p->pid = 0;
3405 XSETINT (p->infd, inch);
3406 XSETINT (p->outfd, outch);
3407 if (is_server && socktype == SOCK_STREAM)
3408 p->status = Qlisten;
3410 /* Make the process marker point into the process buffer (if any). */
3411 if (BUFFERP (buffer))
3412 set_marker_both (p->mark, buffer,
3413 BUF_ZV (XBUFFER (buffer)),
3414 BUF_ZV_BYTE (XBUFFER (buffer)));
3416 #ifdef NON_BLOCKING_CONNECT
3417 if (is_non_blocking_client)
3419 /* We may get here if connect did succeed immediately. However,
3420 in that case, we still need to signal this like a non-blocking
3421 connection. */
3422 p->status = Qconnect;
3423 if (!FD_ISSET (inch, &connect_wait_mask))
3425 FD_SET (inch, &connect_wait_mask);
3426 num_pending_connects++;
3429 else
3430 #endif
3431 /* A server may have a client filter setting of Qt, but it must
3432 still listen for incoming connects unless it is stopped. */
3433 if ((!EQ (p->filter, Qt) && !EQ (p->command, Qt))
3434 || (EQ (p->status, Qlisten) && NILP (p->command)))
3436 FD_SET (inch, &input_wait_mask);
3437 FD_SET (inch, &non_keyboard_wait_mask);
3440 if (inch > max_process_desc)
3441 max_process_desc = inch;
3443 tem = Fplist_member (contact, QCcoding);
3444 if (!NILP (tem) && (!CONSP (tem) || !CONSP (XCDR (tem))))
3445 tem = Qnil; /* No error message (too late!). */
3448 /* Setup coding systems for communicating with the network stream. */
3449 struct gcpro gcpro1;
3450 /* Qt denotes we have not yet called Ffind_operation_coding_system. */
3451 Lisp_Object coding_systems = Qt;
3452 Lisp_Object args[5], val;
3454 if (!NILP (tem))
3456 val = XCAR (XCDR (tem));
3457 if (CONSP (val))
3458 val = XCAR (val);
3460 else if (!NILP (Vcoding_system_for_read))
3461 val = Vcoding_system_for_read;
3462 else if ((!NILP (buffer) && NILP (XBUFFER (buffer)->enable_multibyte_characters))
3463 || (NILP (buffer) && NILP (buffer_defaults.enable_multibyte_characters)))
3464 /* We dare not decode end-of-line format by setting VAL to
3465 Qraw_text, because the existing Emacs Lisp libraries
3466 assume that they receive bare code including a sequene of
3467 CR LF. */
3468 val = Qnil;
3469 else
3471 if (NILP (host) || NILP (service))
3472 coding_systems = Qnil;
3473 else
3475 args[0] = Qopen_network_stream, args[1] = name,
3476 args[2] = buffer, args[3] = host, args[4] = service;
3477 GCPRO1 (proc);
3478 coding_systems = Ffind_operation_coding_system (5, args);
3479 UNGCPRO;
3481 if (CONSP (coding_systems))
3482 val = XCAR (coding_systems);
3483 else if (CONSP (Vdefault_process_coding_system))
3484 val = XCAR (Vdefault_process_coding_system);
3485 else
3486 val = Qnil;
3488 p->decode_coding_system = val;
3490 if (!NILP (tem))
3492 val = XCAR (XCDR (tem));
3493 if (CONSP (val))
3494 val = XCDR (val);
3496 else if (!NILP (Vcoding_system_for_write))
3497 val = Vcoding_system_for_write;
3498 else if (NILP (current_buffer->enable_multibyte_characters))
3499 val = Qnil;
3500 else
3502 if (EQ (coding_systems, Qt))
3504 if (NILP (host) || NILP (service))
3505 coding_systems = Qnil;
3506 else
3508 args[0] = Qopen_network_stream, args[1] = name,
3509 args[2] = buffer, args[3] = host, args[4] = service;
3510 GCPRO1 (proc);
3511 coding_systems = Ffind_operation_coding_system (5, args);
3512 UNGCPRO;
3515 if (CONSP (coding_systems))
3516 val = XCDR (coding_systems);
3517 else if (CONSP (Vdefault_process_coding_system))
3518 val = XCDR (Vdefault_process_coding_system);
3519 else
3520 val = Qnil;
3522 p->encode_coding_system = val;
3524 setup_process_coding_systems (proc);
3526 p->decoding_buf = make_uninit_string (0);
3527 p->decoding_carryover = make_number (0);
3528 p->encoding_buf = make_uninit_string (0);
3529 p->encoding_carryover = make_number (0);
3531 p->inherit_coding_system_flag
3532 = (!NILP (tem) || NILP (buffer) || !inherit_process_coding_system
3533 ? Qnil : Qt);
3535 UNGCPRO;
3536 return proc;
3538 #endif /* HAVE_SOCKETS */
3541 #if defined(HAVE_SOCKETS) && defined(HAVE_NET_IF_H) && defined(HAVE_SYS_IOCTL_H)
3543 #ifdef SIOCGIFCONF
3544 DEFUN ("network-interface-list", Fnetwork_interface_list, Snetwork_interface_list, 0, 0, 0,
3545 doc: /* Return an alist of all network interfaces and their network address.
3546 Each element is a cons, the car of which is a string containing the
3547 interface name, and the cdr is the network address in internal
3548 format; see the description of ADDRESS in `make-network-process'. */)
3551 struct ifconf ifconf;
3552 struct ifreq *ifreqs = NULL;
3553 int ifaces = 0;
3554 int buf_size, s;
3555 Lisp_Object res;
3557 s = socket (AF_INET, SOCK_STREAM, 0);
3558 if (s < 0)
3559 return Qnil;
3561 again:
3562 ifaces += 25;
3563 buf_size = ifaces * sizeof(ifreqs[0]);
3564 ifreqs = (struct ifreq *)xrealloc(ifreqs, buf_size);
3565 if (!ifreqs)
3567 close (s);
3568 return Qnil;
3571 ifconf.ifc_len = buf_size;
3572 ifconf.ifc_req = ifreqs;
3573 if (ioctl (s, SIOCGIFCONF, &ifconf))
3575 close (s);
3576 return Qnil;
3579 if (ifconf.ifc_len == buf_size)
3580 goto again;
3582 close (s);
3583 ifaces = ifconf.ifc_len / sizeof (ifreqs[0]);
3585 res = Qnil;
3586 while (--ifaces >= 0)
3588 struct ifreq *ifq = &ifreqs[ifaces];
3589 char namebuf[sizeof (ifq->ifr_name) + 1];
3590 if (ifq->ifr_addr.sa_family != AF_INET)
3591 continue;
3592 bcopy (ifq->ifr_name, namebuf, sizeof (ifq->ifr_name));
3593 namebuf[sizeof (ifq->ifr_name)] = 0;
3594 res = Fcons (Fcons (build_string (namebuf),
3595 conv_sockaddr_to_lisp (&ifq->ifr_addr,
3596 sizeof (struct sockaddr))),
3597 res);
3600 return res;
3602 #endif /* SIOCGIFCONF */
3604 #if defined(SIOCGIFADDR) || defined(SIOCGIFHWADDR) || defined(SIOCGIFFLAGS)
3606 struct ifflag_def {
3607 int flag_bit;
3608 char *flag_sym;
3611 static struct ifflag_def ifflag_table[] = {
3612 #ifdef IFF_UP
3613 { IFF_UP, "up" },
3614 #endif
3615 #ifdef IFF_BROADCAST
3616 { IFF_BROADCAST, "broadcast" },
3617 #endif
3618 #ifdef IFF_DEBUG
3619 { IFF_DEBUG, "debug" },
3620 #endif
3621 #ifdef IFF_LOOPBACK
3622 { IFF_LOOPBACK, "loopback" },
3623 #endif
3624 #ifdef IFF_POINTOPOINT
3625 { IFF_POINTOPOINT, "pointopoint" },
3626 #endif
3627 #ifdef IFF_RUNNING
3628 { IFF_RUNNING, "running" },
3629 #endif
3630 #ifdef IFF_NOARP
3631 { IFF_NOARP, "noarp" },
3632 #endif
3633 #ifdef IFF_PROMISC
3634 { IFF_PROMISC, "promisc" },
3635 #endif
3636 #ifdef IFF_NOTRAILERS
3637 { IFF_NOTRAILERS, "notrailers" },
3638 #endif
3639 #ifdef IFF_ALLMULTI
3640 { IFF_ALLMULTI, "allmulti" },
3641 #endif
3642 #ifdef IFF_MASTER
3643 { IFF_MASTER, "master" },
3644 #endif
3645 #ifdef IFF_SLAVE
3646 { IFF_SLAVE, "slave" },
3647 #endif
3648 #ifdef IFF_MULTICAST
3649 { IFF_MULTICAST, "multicast" },
3650 #endif
3651 #ifdef IFF_PORTSEL
3652 { IFF_PORTSEL, "portsel" },
3653 #endif
3654 #ifdef IFF_AUTOMEDIA
3655 { IFF_AUTOMEDIA, "automedia" },
3656 #endif
3657 #ifdef IFF_DYNAMIC
3658 { IFF_DYNAMIC, "dynamic" },
3659 #endif
3660 #ifdef IFF_OACTIVE
3661 { IFF_OACTIVE, "oactive" }, /* OpenBSD: transmission in progress */
3662 #endif
3663 #ifdef IFF_SIMPLEX
3664 { IFF_SIMPLEX, "simplex" }, /* OpenBSD: can't hear own transmissions */
3665 #endif
3666 #ifdef IFF_LINK0
3667 { IFF_LINK0, "link0" }, /* OpenBSD: per link layer defined bit */
3668 #endif
3669 #ifdef IFF_LINK1
3670 { IFF_LINK1, "link1" }, /* OpenBSD: per link layer defined bit */
3671 #endif
3672 #ifdef IFF_LINK2
3673 { IFF_LINK2, "link2" }, /* OpenBSD: per link layer defined bit */
3674 #endif
3675 { 0, 0 }
3678 DEFUN ("network-interface-info", Fnetwork_interface_info, Snetwork_interface_info, 1, 1, 0,
3679 doc: /* Return information about network interface named IFNAME.
3680 The return value is a list (ADDR BCAST NETMASK HWADDR FLAGS),
3681 where ADDR is the layer 3 address, BCAST is the layer 3 broadcast address,
3682 NETMASK is the layer 3 network mask, HWADDR is the layer 2 addres, and
3683 FLAGS is the current flags of the interface. */)
3684 (ifname)
3685 Lisp_Object ifname;
3687 struct ifreq rq;
3688 Lisp_Object res = Qnil;
3689 Lisp_Object elt;
3690 int s;
3691 int any = 0;
3693 CHECK_STRING (ifname);
3695 bzero (rq.ifr_name, sizeof rq.ifr_name);
3696 strncpy (rq.ifr_name, SDATA (ifname), sizeof (rq.ifr_name));
3698 s = socket (AF_INET, SOCK_STREAM, 0);
3699 if (s < 0)
3700 return Qnil;
3702 elt = Qnil;
3703 #if defined(SIOCGIFFLAGS) && defined(HAVE_STRUCT_IFREQ_IFR_FLAGS)
3704 if (ioctl (s, SIOCGIFFLAGS, &rq) == 0)
3706 int flags = rq.ifr_flags;
3707 struct ifflag_def *fp;
3708 int fnum;
3710 any++;
3711 for (fp = ifflag_table; flags != 0 && fp->flag_sym; fp++)
3713 if (flags & fp->flag_bit)
3715 elt = Fcons (intern (fp->flag_sym), elt);
3716 flags -= fp->flag_bit;
3719 for (fnum = 0; flags && fnum < 32; fnum++)
3721 if (flags & (1 << fnum))
3723 elt = Fcons (make_number (fnum), elt);
3727 #endif
3728 res = Fcons (elt, res);
3730 elt = Qnil;
3731 #if defined(SIOCGIFHWADDR) && defined(HAVE_STRUCT_IFREQ_IFR_HWADDR)
3732 if (ioctl (s, SIOCGIFHWADDR, &rq) == 0)
3734 Lisp_Object hwaddr = Fmake_vector (make_number (6), Qnil);
3735 register struct Lisp_Vector *p = XVECTOR (hwaddr);
3736 int n;
3738 any++;
3739 for (n = 0; n < 6; n++)
3740 p->contents[n] = make_number (((unsigned char *)&rq.ifr_hwaddr.sa_data[0])[n]);
3741 elt = Fcons (make_number (rq.ifr_hwaddr.sa_family), hwaddr);
3743 #endif
3744 res = Fcons (elt, res);
3746 elt = Qnil;
3747 #if defined(SIOCGIFNETMASK) && (defined(HAVE_STRUCT_IFREQ_IFR_NETMASK) || defined(HAVE_STRUCT_IFREQ_IFR_ADDR))
3748 if (ioctl (s, SIOCGIFNETMASK, &rq) == 0)
3750 any++;
3751 #ifdef HAVE_STRUCT_IFREQ_IFR_NETMASK
3752 elt = conv_sockaddr_to_lisp (&rq.ifr_netmask, sizeof (rq.ifr_netmask));
3753 #else
3754 elt = conv_sockaddr_to_lisp (&rq.ifr_addr, sizeof (rq.ifr_addr));
3755 #endif
3757 #endif
3758 res = Fcons (elt, res);
3760 elt = Qnil;
3761 #if defined(SIOCGIFBRDADDR) && defined(HAVE_STRUCT_IFREQ_IFR_BROADADDR)
3762 if (ioctl (s, SIOCGIFBRDADDR, &rq) == 0)
3764 any++;
3765 elt = conv_sockaddr_to_lisp (&rq.ifr_broadaddr, sizeof (rq.ifr_broadaddr));
3767 #endif
3768 res = Fcons (elt, res);
3770 elt = Qnil;
3771 #if defined(SIOCGIFADDR) && defined(HAVE_STRUCT_IFREQ_IFR_ADDR)
3772 if (ioctl (s, SIOCGIFADDR, &rq) == 0)
3774 any++;
3775 elt = conv_sockaddr_to_lisp (&rq.ifr_addr, sizeof (rq.ifr_addr));
3777 #endif
3778 res = Fcons (elt, res);
3780 close (s);
3782 return any ? res : Qnil;
3784 #endif
3785 #endif /* HAVE_SOCKETS */
3787 /* Turn off input and output for process PROC. */
3789 void
3790 deactivate_process (proc)
3791 Lisp_Object proc;
3793 register int inchannel, outchannel;
3794 register struct Lisp_Process *p = XPROCESS (proc);
3796 inchannel = XINT (p->infd);
3797 outchannel = XINT (p->outfd);
3799 #ifdef ADAPTIVE_READ_BUFFERING
3800 if (XINT (p->read_output_delay) > 0)
3802 if (--process_output_delay_count < 0)
3803 process_output_delay_count = 0;
3804 XSETINT (p->read_output_delay, 0);
3805 p->read_output_skip = Qnil;
3807 #endif
3809 if (inchannel >= 0)
3811 /* Beware SIGCHLD hereabouts. */
3812 flush_pending_output (inchannel);
3813 #ifdef VMS
3815 VMS_PROC_STUFF *get_vms_process_pointer (), *vs;
3816 sys$dassgn (outchannel);
3817 vs = get_vms_process_pointer (p->pid);
3818 if (vs)
3819 give_back_vms_process_stuff (vs);
3821 #else
3822 emacs_close (inchannel);
3823 if (outchannel >= 0 && outchannel != inchannel)
3824 emacs_close (outchannel);
3825 #endif
3827 XSETINT (p->infd, -1);
3828 XSETINT (p->outfd, -1);
3829 #ifdef DATAGRAM_SOCKETS
3830 if (DATAGRAM_CHAN_P (inchannel))
3832 xfree (datagram_address[inchannel].sa);
3833 datagram_address[inchannel].sa = 0;
3834 datagram_address[inchannel].len = 0;
3836 #endif
3837 chan_process[inchannel] = Qnil;
3838 FD_CLR (inchannel, &input_wait_mask);
3839 FD_CLR (inchannel, &non_keyboard_wait_mask);
3840 #ifdef NON_BLOCKING_CONNECT
3841 if (FD_ISSET (inchannel, &connect_wait_mask))
3843 FD_CLR (inchannel, &connect_wait_mask);
3844 if (--num_pending_connects < 0)
3845 abort ();
3847 #endif
3848 if (inchannel == max_process_desc)
3850 int i;
3851 /* We just closed the highest-numbered process input descriptor,
3852 so recompute the highest-numbered one now. */
3853 max_process_desc = 0;
3854 for (i = 0; i < MAXDESC; i++)
3855 if (!NILP (chan_process[i]))
3856 max_process_desc = i;
3861 /* Close all descriptors currently in use for communication
3862 with subprocess. This is used in a newly-forked subprocess
3863 to get rid of irrelevant descriptors. */
3865 void
3866 close_process_descs ()
3868 #ifndef WINDOWSNT
3869 int i;
3870 for (i = 0; i < MAXDESC; i++)
3872 Lisp_Object process;
3873 process = chan_process[i];
3874 if (!NILP (process))
3876 int in = XINT (XPROCESS (process)->infd);
3877 int out = XINT (XPROCESS (process)->outfd);
3878 if (in >= 0)
3879 emacs_close (in);
3880 if (out >= 0 && in != out)
3881 emacs_close (out);
3884 #endif
3887 DEFUN ("accept-process-output", Faccept_process_output, Saccept_process_output,
3888 0, 4, 0,
3889 doc: /* Allow any pending output from subprocesses to be read by Emacs.
3890 It is read into the process' buffers or given to their filter functions.
3891 Non-nil arg PROCESS means do not return until some output has been received
3892 from PROCESS.
3894 Non-nil second arg SECONDS and third arg MILLISEC are number of
3895 seconds and milliseconds to wait; return after that much time whether
3896 or not there is input. If SECONDS is a floating point number,
3897 it specifies a fractional number of seconds to wait.
3899 If optional fourth arg JUST-THIS-ONE is non-nil, only accept output
3900 from PROCESS, suspending reading output from other processes.
3901 If JUST-THIS-ONE is an integer, don't run any timers either.
3902 Return non-nil iff we received any output before the timeout expired. */)
3903 (process, seconds, millisec, just_this_one)
3904 register Lisp_Object process, seconds, millisec, just_this_one;
3906 int secs, usecs = 0;
3908 if (! NILP (process))
3909 CHECK_PROCESS (process);
3910 else
3911 just_this_one = Qnil;
3913 if (!NILP (seconds))
3915 if (INTEGERP (seconds))
3916 secs = XINT (seconds);
3917 else if (FLOATP (seconds))
3919 double timeout = XFLOAT_DATA (seconds);
3920 secs = (int) timeout;
3921 usecs = (int) ((timeout - (double) secs) * 1000000);
3923 else
3924 wrong_type_argument (Qnumberp, seconds);
3926 if (INTEGERP (millisec))
3928 int carry;
3929 usecs += XINT (millisec) * 1000;
3930 carry = usecs / 1000000;
3931 secs += carry;
3932 if ((usecs -= carry * 1000000) < 0)
3934 secs--;
3935 usecs += 1000000;
3939 if (secs < 0 || (secs == 0 && usecs == 0))
3940 secs = -1, usecs = 0;
3942 else
3943 secs = NILP (process) ? -1 : 0;
3945 return
3946 (wait_reading_process_output (secs, usecs, 0, 0,
3947 Qnil,
3948 !NILP (process) ? XPROCESS (process) : NULL,
3949 NILP (just_this_one) ? 0 :
3950 !INTEGERP (just_this_one) ? 1 : -1)
3951 ? Qt : Qnil);
3954 /* Accept a connection for server process SERVER on CHANNEL. */
3956 static int connect_counter = 0;
3958 static void
3959 server_accept_connection (server, channel)
3960 Lisp_Object server;
3961 int channel;
3963 Lisp_Object proc, caller, name, buffer;
3964 Lisp_Object contact, host, service;
3965 struct Lisp_Process *ps= XPROCESS (server);
3966 struct Lisp_Process *p;
3967 int s;
3968 union u_sockaddr {
3969 struct sockaddr sa;
3970 struct sockaddr_in in;
3971 #ifdef AF_INET6
3972 struct sockaddr_in6 in6;
3973 #endif
3974 #ifdef HAVE_LOCAL_SOCKETS
3975 struct sockaddr_un un;
3976 #endif
3977 } saddr;
3978 int len = sizeof saddr;
3980 s = accept (channel, &saddr.sa, &len);
3982 if (s < 0)
3984 int code = errno;
3986 if (code == EAGAIN)
3987 return;
3988 #ifdef EWOULDBLOCK
3989 if (code == EWOULDBLOCK)
3990 return;
3991 #endif
3993 if (!NILP (ps->log))
3994 call3 (ps->log, server, Qnil,
3995 concat3 (build_string ("accept failed with code"),
3996 Fnumber_to_string (make_number (code)),
3997 build_string ("\n")));
3998 return;
4001 connect_counter++;
4003 /* Setup a new process to handle the connection. */
4005 /* Generate a unique identification of the caller, and build contact
4006 information for this process. */
4007 host = Qt;
4008 service = Qnil;
4009 switch (saddr.sa.sa_family)
4011 case AF_INET:
4013 Lisp_Object args[5];
4014 unsigned char *ip = (unsigned char *)&saddr.in.sin_addr.s_addr;
4015 args[0] = build_string ("%d.%d.%d.%d");
4016 args[1] = make_number (*ip++);
4017 args[2] = make_number (*ip++);
4018 args[3] = make_number (*ip++);
4019 args[4] = make_number (*ip++);
4020 host = Fformat (5, args);
4021 service = make_number (ntohs (saddr.in.sin_port));
4023 args[0] = build_string (" <%s:%d>");
4024 args[1] = host;
4025 args[2] = service;
4026 caller = Fformat (3, args);
4028 break;
4030 #ifdef AF_INET6
4031 case AF_INET6:
4033 Lisp_Object args[9];
4034 uint16_t *ip6 = (uint16_t *)&saddr.in6.sin6_addr;
4035 int i;
4036 args[0] = build_string ("%x:%x:%x:%x:%x:%x:%x:%x");
4037 for (i = 0; i < 8; i++)
4038 args[i+1] = make_number (ntohs(ip6[i]));
4039 host = Fformat (9, args);
4040 service = make_number (ntohs (saddr.in.sin_port));
4042 args[0] = build_string (" <[%s]:%d>");
4043 args[1] = host;
4044 args[2] = service;
4045 caller = Fformat (3, args);
4047 break;
4048 #endif
4050 #ifdef HAVE_LOCAL_SOCKETS
4051 case AF_LOCAL:
4052 #endif
4053 default:
4054 caller = Fnumber_to_string (make_number (connect_counter));
4055 caller = concat3 (build_string (" <*"), caller, build_string ("*>"));
4056 break;
4059 /* Create a new buffer name for this process if it doesn't have a
4060 filter. The new buffer name is based on the buffer name or
4061 process name of the server process concatenated with the caller
4062 identification. */
4064 if (!NILP (ps->filter) && !EQ (ps->filter, Qt))
4065 buffer = Qnil;
4066 else
4068 buffer = ps->buffer;
4069 if (!NILP (buffer))
4070 buffer = Fbuffer_name (buffer);
4071 else
4072 buffer = ps->name;
4073 if (!NILP (buffer))
4075 buffer = concat2 (buffer, caller);
4076 buffer = Fget_buffer_create (buffer);
4080 /* Generate a unique name for the new server process. Combine the
4081 server process name with the caller identification. */
4083 name = concat2 (ps->name, caller);
4084 proc = make_process (name);
4086 chan_process[s] = proc;
4088 #ifdef O_NONBLOCK
4089 fcntl (s, F_SETFL, O_NONBLOCK);
4090 #else
4091 #ifdef O_NDELAY
4092 fcntl (s, F_SETFL, O_NDELAY);
4093 #endif
4094 #endif
4096 p = XPROCESS (proc);
4098 /* Build new contact information for this setup. */
4099 contact = Fcopy_sequence (ps->childp);
4100 contact = Fplist_put (contact, QCserver, Qnil);
4101 contact = Fplist_put (contact, QChost, host);
4102 if (!NILP (service))
4103 contact = Fplist_put (contact, QCservice, service);
4104 contact = Fplist_put (contact, QCremote,
4105 conv_sockaddr_to_lisp (&saddr.sa, len));
4106 #ifdef HAVE_GETSOCKNAME
4107 len = sizeof saddr;
4108 if (getsockname (s, &saddr.sa, &len) == 0)
4109 contact = Fplist_put (contact, QClocal,
4110 conv_sockaddr_to_lisp (&saddr.sa, len));
4111 #endif
4113 p->childp = contact;
4114 p->plist = Fcopy_sequence (ps->plist);
4116 p->buffer = buffer;
4117 p->sentinel = ps->sentinel;
4118 p->filter = ps->filter;
4119 p->command = Qnil;
4120 p->pid = 0;
4121 XSETINT (p->infd, s);
4122 XSETINT (p->outfd, s);
4123 p->status = Qrun;
4125 /* Client processes for accepted connections are not stopped initially. */
4126 if (!EQ (p->filter, Qt))
4128 FD_SET (s, &input_wait_mask);
4129 FD_SET (s, &non_keyboard_wait_mask);
4132 if (s > max_process_desc)
4133 max_process_desc = s;
4135 /* Setup coding system for new process based on server process.
4136 This seems to be the proper thing to do, as the coding system
4137 of the new process should reflect the settings at the time the
4138 server socket was opened; not the current settings. */
4140 p->decode_coding_system = ps->decode_coding_system;
4141 p->encode_coding_system = ps->encode_coding_system;
4142 setup_process_coding_systems (proc);
4144 p->decoding_buf = make_uninit_string (0);
4145 p->decoding_carryover = make_number (0);
4146 p->encoding_buf = make_uninit_string (0);
4147 p->encoding_carryover = make_number (0);
4149 p->inherit_coding_system_flag
4150 = (NILP (buffer) ? Qnil : ps->inherit_coding_system_flag);
4152 if (!NILP (ps->log))
4153 call3 (ps->log, server, proc,
4154 concat3 (build_string ("accept from "),
4155 (STRINGP (host) ? host : build_string ("-")),
4156 build_string ("\n")));
4158 if (!NILP (p->sentinel))
4159 exec_sentinel (proc,
4160 concat3 (build_string ("open from "),
4161 (STRINGP (host) ? host : build_string ("-")),
4162 build_string ("\n")));
4165 /* This variable is different from waiting_for_input in keyboard.c.
4166 It is used to communicate to a lisp process-filter/sentinel (via the
4167 function Fwaiting_for_user_input_p below) whether Emacs was waiting
4168 for user-input when that process-filter was called.
4169 waiting_for_input cannot be used as that is by definition 0 when
4170 lisp code is being evalled.
4171 This is also used in record_asynch_buffer_change.
4172 For that purpose, this must be 0
4173 when not inside wait_reading_process_output. */
4174 static int waiting_for_user_input_p;
4176 static Lisp_Object
4177 wait_reading_process_output_unwind (data)
4178 Lisp_Object data;
4180 waiting_for_user_input_p = XINT (data);
4181 return Qnil;
4184 /* This is here so breakpoints can be put on it. */
4185 static void
4186 wait_reading_process_output_1 ()
4190 /* Use a wrapper around select to work around a bug in gdb 5.3.
4191 Normally, the wrapper is optimzed away by inlining.
4193 If emacs is stopped inside select, the gdb backtrace doesn't
4194 show the function which called select, so it is practically
4195 impossible to step through wait_reading_process_output. */
4197 #ifndef select
4198 static INLINE int
4199 select_wrapper (n, rfd, wfd, xfd, tmo)
4200 int n;
4201 SELECT_TYPE *rfd, *wfd, *xfd;
4202 EMACS_TIME *tmo;
4204 return select (n, rfd, wfd, xfd, tmo);
4206 #define select select_wrapper
4207 #endif
4209 /* Read and dispose of subprocess output while waiting for timeout to
4210 elapse and/or keyboard input to be available.
4212 TIME_LIMIT is:
4213 timeout in seconds, or
4214 zero for no limit, or
4215 -1 means gobble data immediately available but don't wait for any.
4217 MICROSECS is:
4218 an additional duration to wait, measured in microseconds.
4219 If this is nonzero and time_limit is 0, then the timeout
4220 consists of MICROSECS only.
4222 READ_KBD is a lisp value:
4223 0 to ignore keyboard input, or
4224 1 to return when input is available, or
4225 -1 meaning caller will actually read the input, so don't throw to
4226 the quit handler, or
4228 DO_DISPLAY != 0 means redisplay should be done to show subprocess
4229 output that arrives.
4231 If WAIT_FOR_CELL is a cons cell, wait until its car is non-nil
4232 (and gobble terminal input into the buffer if any arrives).
4234 If WAIT_PROC is specified, wait until something arrives from that
4235 process. The return value is true iff we read some input from
4236 that process.
4238 If JUST_WAIT_PROC is non-nil, handle only output from WAIT_PROC
4239 (suspending output from other processes). A negative value
4240 means don't run any timers either.
4242 If WAIT_PROC is specified, then the function returns true iff we
4243 received input from that process before the timeout elapsed.
4244 Otherwise, return true iff we received input from any process. */
4247 wait_reading_process_output (time_limit, microsecs, read_kbd, do_display,
4248 wait_for_cell, wait_proc, just_wait_proc)
4249 int time_limit, microsecs, read_kbd, do_display;
4250 Lisp_Object wait_for_cell;
4251 struct Lisp_Process *wait_proc;
4252 int just_wait_proc;
4254 register int channel, nfds;
4255 SELECT_TYPE Available;
4256 #ifdef NON_BLOCKING_CONNECT
4257 SELECT_TYPE Connecting;
4258 int check_connect;
4259 #endif
4260 int check_delay, no_avail;
4261 int xerrno;
4262 Lisp_Object proc;
4263 EMACS_TIME timeout, end_time;
4264 int wait_channel = -1;
4265 int got_some_input = 0;
4266 int count = SPECPDL_INDEX ();
4268 FD_ZERO (&Available);
4269 #ifdef NON_BLOCKING_CONNECT
4270 FD_ZERO (&Connecting);
4271 #endif
4273 /* If wait_proc is a process to watch, set wait_channel accordingly. */
4274 if (wait_proc != NULL)
4275 wait_channel = XINT (wait_proc->infd);
4277 record_unwind_protect (wait_reading_process_output_unwind,
4278 make_number (waiting_for_user_input_p));
4279 waiting_for_user_input_p = read_kbd;
4281 /* Since we may need to wait several times,
4282 compute the absolute time to return at. */
4283 if (time_limit || microsecs)
4285 EMACS_GET_TIME (end_time);
4286 EMACS_SET_SECS_USECS (timeout, time_limit, microsecs);
4287 EMACS_ADD_TIME (end_time, end_time, timeout);
4289 #ifdef POLL_INTERRUPTED_SYS_CALL
4290 /* AlainF 5-Jul-1996
4291 HP-UX 10.10 seem to have problems with signals coming in
4292 Causes "poll: interrupted system call" messages when Emacs is run
4293 in an X window
4294 Turn off periodic alarms (in case they are in use),
4295 and then turn off any other atimers. */
4296 stop_polling ();
4297 turn_on_atimers (0);
4298 #endif /* POLL_INTERRUPTED_SYS_CALL */
4300 while (1)
4302 int timeout_reduced_for_timers = 0;
4304 /* If calling from keyboard input, do not quit
4305 since we want to return C-g as an input character.
4306 Otherwise, do pending quit if requested. */
4307 if (read_kbd >= 0)
4308 QUIT;
4309 #ifdef SYNC_INPUT
4310 else if (interrupt_input_pending)
4311 handle_async_input ();
4312 #endif
4314 /* Exit now if the cell we're waiting for became non-nil. */
4315 if (! NILP (wait_for_cell) && ! NILP (XCAR (wait_for_cell)))
4316 break;
4318 /* Compute time from now till when time limit is up */
4319 /* Exit if already run out */
4320 if (time_limit == -1)
4322 /* -1 specified for timeout means
4323 gobble output available now
4324 but don't wait at all. */
4326 EMACS_SET_SECS_USECS (timeout, 0, 0);
4328 else if (time_limit || microsecs)
4330 EMACS_GET_TIME (timeout);
4331 EMACS_SUB_TIME (timeout, end_time, timeout);
4332 if (EMACS_TIME_NEG_P (timeout))
4333 break;
4335 else
4337 EMACS_SET_SECS_USECS (timeout, 100000, 0);
4340 /* Normally we run timers here.
4341 But not if wait_for_cell; in those cases,
4342 the wait is supposed to be short,
4343 and those callers cannot handle running arbitrary Lisp code here. */
4344 if (NILP (wait_for_cell)
4345 && just_wait_proc >= 0)
4347 EMACS_TIME timer_delay;
4351 int old_timers_run = timers_run;
4352 struct buffer *old_buffer = current_buffer;
4354 timer_delay = timer_check (1);
4356 /* If a timer has run, this might have changed buffers
4357 an alike. Make read_key_sequence aware of that. */
4358 if (timers_run != old_timers_run
4359 && old_buffer != current_buffer
4360 && waiting_for_user_input_p == -1)
4361 record_asynch_buffer_change ();
4363 if (timers_run != old_timers_run && do_display)
4364 /* We must retry, since a timer may have requeued itself
4365 and that could alter the time_delay. */
4366 redisplay_preserve_echo_area (9);
4367 else
4368 break;
4370 while (!detect_input_pending ());
4372 /* If there is unread keyboard input, also return. */
4373 if (read_kbd != 0
4374 && requeued_events_pending_p ())
4375 break;
4377 if (! EMACS_TIME_NEG_P (timer_delay) && time_limit != -1)
4379 EMACS_TIME difference;
4380 EMACS_SUB_TIME (difference, timer_delay, timeout);
4381 if (EMACS_TIME_NEG_P (difference))
4383 timeout = timer_delay;
4384 timeout_reduced_for_timers = 1;
4387 /* If time_limit is -1, we are not going to wait at all. */
4388 else if (time_limit != -1)
4390 /* This is so a breakpoint can be put here. */
4391 wait_reading_process_output_1 ();
4395 /* Cause C-g and alarm signals to take immediate action,
4396 and cause input available signals to zero out timeout.
4398 It is important that we do this before checking for process
4399 activity. If we get a SIGCHLD after the explicit checks for
4400 process activity, timeout is the only way we will know. */
4401 if (read_kbd < 0)
4402 set_waiting_for_input (&timeout);
4404 /* If status of something has changed, and no input is
4405 available, notify the user of the change right away. After
4406 this explicit check, we'll let the SIGCHLD handler zap
4407 timeout to get our attention. */
4408 if (update_tick != process_tick && do_display)
4410 SELECT_TYPE Atemp;
4411 #ifdef NON_BLOCKING_CONNECT
4412 SELECT_TYPE Ctemp;
4413 #endif
4415 Atemp = input_wait_mask;
4416 #if 0
4417 /* On Mac OS X 10.0, the SELECT system call always says input is
4418 present (for reading) at stdin, even when none is. This
4419 causes the call to SELECT below to return 1 and
4420 status_notify not to be called. As a result output of
4421 subprocesses are incorrectly discarded.
4423 FD_CLR (0, &Atemp);
4424 #endif
4425 IF_NON_BLOCKING_CONNECT (Ctemp = connect_wait_mask);
4427 EMACS_SET_SECS_USECS (timeout, 0, 0);
4428 if ((select (max (max_process_desc, max_keyboard_desc) + 1,
4429 &Atemp,
4430 #ifdef NON_BLOCKING_CONNECT
4431 (num_pending_connects > 0 ? &Ctemp : (SELECT_TYPE *)0),
4432 #else
4433 (SELECT_TYPE *)0,
4434 #endif
4435 (SELECT_TYPE *)0, &timeout)
4436 <= 0))
4438 /* It's okay for us to do this and then continue with
4439 the loop, since timeout has already been zeroed out. */
4440 clear_waiting_for_input ();
4441 status_notify (NULL);
4445 /* Don't wait for output from a non-running process. Just
4446 read whatever data has already been received. */
4447 if (wait_proc && wait_proc->raw_status_new)
4448 update_status (wait_proc);
4449 if (wait_proc
4450 && ! EQ (wait_proc->status, Qrun)
4451 && ! EQ (wait_proc->status, Qconnect))
4453 int nread, total_nread = 0;
4455 clear_waiting_for_input ();
4456 XSETPROCESS (proc, wait_proc);
4458 /* Read data from the process, until we exhaust it. */
4459 while (XINT (wait_proc->infd) >= 0)
4461 nread = read_process_output (proc, XINT (wait_proc->infd));
4463 if (nread == 0)
4464 break;
4466 if (0 < nread)
4467 total_nread += nread;
4468 #ifdef EIO
4469 else if (nread == -1 && EIO == errno)
4470 break;
4471 #endif
4472 #ifdef EAGAIN
4473 else if (nread == -1 && EAGAIN == errno)
4474 break;
4475 #endif
4476 #ifdef EWOULDBLOCK
4477 else if (nread == -1 && EWOULDBLOCK == errno)
4478 break;
4479 #endif
4481 if (total_nread > 0 && do_display)
4482 redisplay_preserve_echo_area (10);
4484 break;
4487 /* Wait till there is something to do */
4489 if (wait_proc && just_wait_proc)
4491 if (XINT (wait_proc->infd) < 0) /* Terminated */
4492 break;
4493 FD_SET (XINT (wait_proc->infd), &Available);
4494 check_delay = 0;
4495 IF_NON_BLOCKING_CONNECT (check_connect = 0);
4497 else if (!NILP (wait_for_cell))
4499 Available = non_process_wait_mask;
4500 check_delay = 0;
4501 IF_NON_BLOCKING_CONNECT (check_connect = 0);
4503 else
4505 if (! read_kbd)
4506 Available = non_keyboard_wait_mask;
4507 else
4508 Available = input_wait_mask;
4509 IF_NON_BLOCKING_CONNECT (check_connect = (num_pending_connects > 0));
4510 check_delay = wait_channel >= 0 ? 0 : process_output_delay_count;
4513 /* If frame size has changed or the window is newly mapped,
4514 redisplay now, before we start to wait. There is a race
4515 condition here; if a SIGIO arrives between now and the select
4516 and indicates that a frame is trashed, the select may block
4517 displaying a trashed screen. */
4518 if (frame_garbaged && do_display)
4520 clear_waiting_for_input ();
4521 redisplay_preserve_echo_area (11);
4522 if (read_kbd < 0)
4523 set_waiting_for_input (&timeout);
4526 no_avail = 0;
4527 if (read_kbd && detect_input_pending ())
4529 nfds = 0;
4530 no_avail = 1;
4532 else
4534 #ifdef NON_BLOCKING_CONNECT
4535 if (check_connect)
4536 Connecting = connect_wait_mask;
4537 #endif
4539 #ifdef ADAPTIVE_READ_BUFFERING
4540 /* Set the timeout for adaptive read buffering if any
4541 process has non-nil read_output_skip and non-zero
4542 read_output_delay, and we are not reading output for a
4543 specific wait_channel. It is not executed if
4544 Vprocess_adaptive_read_buffering is nil. */
4545 if (process_output_skip && check_delay > 0)
4547 int usecs = EMACS_USECS (timeout);
4548 if (EMACS_SECS (timeout) > 0 || usecs > READ_OUTPUT_DELAY_MAX)
4549 usecs = READ_OUTPUT_DELAY_MAX;
4550 for (channel = 0; check_delay > 0 && channel <= max_process_desc; channel++)
4552 proc = chan_process[channel];
4553 if (NILP (proc))
4554 continue;
4555 /* Find minimum non-zero read_output_delay among the
4556 processes with non-nil read_output_skip. */
4557 if (XINT (XPROCESS (proc)->read_output_delay) > 0)
4559 check_delay--;
4560 if (NILP (XPROCESS (proc)->read_output_skip))
4561 continue;
4562 FD_CLR (channel, &Available);
4563 XPROCESS (proc)->read_output_skip = Qnil;
4564 if (XINT (XPROCESS (proc)->read_output_delay) < usecs)
4565 usecs = XINT (XPROCESS (proc)->read_output_delay);
4568 EMACS_SET_SECS_USECS (timeout, 0, usecs);
4569 process_output_skip = 0;
4571 #endif
4573 nfds = select (max (max_process_desc, max_keyboard_desc) + 1,
4574 &Available,
4575 #ifdef NON_BLOCKING_CONNECT
4576 (check_connect ? &Connecting : (SELECT_TYPE *)0),
4577 #else
4578 (SELECT_TYPE *)0,
4579 #endif
4580 (SELECT_TYPE *)0, &timeout);
4583 xerrno = errno;
4585 /* Make C-g and alarm signals set flags again */
4586 clear_waiting_for_input ();
4588 /* If we woke up due to SIGWINCH, actually change size now. */
4589 do_pending_window_change (0);
4591 if (time_limit && nfds == 0 && ! timeout_reduced_for_timers)
4592 /* We wanted the full specified time, so return now. */
4593 break;
4594 if (nfds < 0)
4596 if (xerrno == EINTR)
4597 no_avail = 1;
4598 #ifdef ultrix
4599 /* Ultrix select seems to return ENOMEM when it is
4600 interrupted. Treat it just like EINTR. Bleah. Note
4601 that we want to test for the "ultrix" CPP symbol, not
4602 "__ultrix__"; the latter is only defined under GCC, but
4603 not by DEC's bundled CC. -JimB */
4604 else if (xerrno == ENOMEM)
4605 no_avail = 1;
4606 #endif
4607 #ifdef ALLIANT
4608 /* This happens for no known reason on ALLIANT.
4609 I am guessing that this is the right response. -- RMS. */
4610 else if (xerrno == EFAULT)
4611 no_avail = 1;
4612 #endif
4613 else if (xerrno == EBADF)
4615 #ifdef AIX
4616 /* AIX doesn't handle PTY closure the same way BSD does. On AIX,
4617 the child's closure of the pts gives the parent a SIGHUP, and
4618 the ptc file descriptor is automatically closed,
4619 yielding EBADF here or at select() call above.
4620 So, SIGHUP is ignored (see def of PTY_TTY_NAME_SPRINTF
4621 in m/ibmrt-aix.h), and here we just ignore the select error.
4622 Cleanup occurs c/o status_notify after SIGCLD. */
4623 no_avail = 1; /* Cannot depend on values returned */
4624 #else
4625 abort ();
4626 #endif
4628 else
4629 error ("select error: %s", emacs_strerror (xerrno));
4632 if (no_avail)
4634 FD_ZERO (&Available);
4635 IF_NON_BLOCKING_CONNECT (check_connect = 0);
4638 #if defined(sun) && !defined(USG5_4)
4639 if (nfds > 0 && keyboard_bit_set (&Available)
4640 && interrupt_input)
4641 /* System sometimes fails to deliver SIGIO.
4643 David J. Mackenzie says that Emacs doesn't compile under
4644 Solaris if this code is enabled, thus the USG5_4 in the CPP
4645 conditional. "I haven't noticed any ill effects so far.
4646 If you find a Solaris expert somewhere, they might know
4647 better." */
4648 kill (getpid (), SIGIO);
4649 #endif
4651 #if 0 /* When polling is used, interrupt_input is 0,
4652 so get_input_pending should read the input.
4653 So this should not be needed. */
4654 /* If we are using polling for input,
4655 and we see input available, make it get read now.
4656 Otherwise it might not actually get read for a second.
4657 And on hpux, since we turn off polling in wait_reading_process_output,
4658 it might never get read at all if we don't spend much time
4659 outside of wait_reading_process_output. */
4660 if (read_kbd && interrupt_input
4661 && keyboard_bit_set (&Available)
4662 && input_polling_used ())
4663 kill (getpid (), SIGALRM);
4664 #endif
4666 /* Check for keyboard input */
4667 /* If there is any, return immediately
4668 to give it higher priority than subprocesses */
4670 if (read_kbd != 0)
4672 int old_timers_run = timers_run;
4673 struct buffer *old_buffer = current_buffer;
4674 int leave = 0;
4676 if (detect_input_pending_run_timers (do_display))
4678 swallow_events (do_display);
4679 if (detect_input_pending_run_timers (do_display))
4680 leave = 1;
4683 /* If a timer has run, this might have changed buffers
4684 an alike. Make read_key_sequence aware of that. */
4685 if (timers_run != old_timers_run
4686 && waiting_for_user_input_p == -1
4687 && old_buffer != current_buffer)
4688 record_asynch_buffer_change ();
4690 if (leave)
4691 break;
4694 /* If there is unread keyboard input, also return. */
4695 if (read_kbd != 0
4696 && requeued_events_pending_p ())
4697 break;
4699 /* If we are not checking for keyboard input now,
4700 do process events (but don't run any timers).
4701 This is so that X events will be processed.
4702 Otherwise they may have to wait until polling takes place.
4703 That would causes delays in pasting selections, for example.
4705 (We used to do this only if wait_for_cell.) */
4706 if (read_kbd == 0 && detect_input_pending ())
4708 swallow_events (do_display);
4709 #if 0 /* Exiting when read_kbd doesn't request that seems wrong, though. */
4710 if (detect_input_pending ())
4711 break;
4712 #endif
4715 /* Exit now if the cell we're waiting for became non-nil. */
4716 if (! NILP (wait_for_cell) && ! NILP (XCAR (wait_for_cell)))
4717 break;
4719 #ifdef SIGIO
4720 /* If we think we have keyboard input waiting, but didn't get SIGIO,
4721 go read it. This can happen with X on BSD after logging out.
4722 In that case, there really is no input and no SIGIO,
4723 but select says there is input. */
4725 if (read_kbd && interrupt_input
4726 && keyboard_bit_set (&Available) && ! noninteractive)
4727 kill (getpid (), SIGIO);
4728 #endif
4730 if (! wait_proc)
4731 got_some_input |= nfds > 0;
4733 /* If checking input just got us a size-change event from X,
4734 obey it now if we should. */
4735 if (read_kbd || ! NILP (wait_for_cell))
4736 do_pending_window_change (0);
4738 /* Check for data from a process. */
4739 if (no_avail || nfds == 0)
4740 continue;
4742 /* Really FIRST_PROC_DESC should be 0 on Unix,
4743 but this is safer in the short run. */
4744 for (channel = 0; channel <= max_process_desc; channel++)
4746 if (FD_ISSET (channel, &Available)
4747 && FD_ISSET (channel, &non_keyboard_wait_mask))
4749 int nread;
4751 /* If waiting for this channel, arrange to return as
4752 soon as no more input to be processed. No more
4753 waiting. */
4754 if (wait_channel == channel)
4756 wait_channel = -1;
4757 time_limit = -1;
4758 got_some_input = 1;
4760 proc = chan_process[channel];
4761 if (NILP (proc))
4762 continue;
4764 /* If this is a server stream socket, accept connection. */
4765 if (EQ (XPROCESS (proc)->status, Qlisten))
4767 server_accept_connection (proc, channel);
4768 continue;
4771 /* Read data from the process, starting with our
4772 buffered-ahead character if we have one. */
4774 nread = read_process_output (proc, channel);
4775 if (nread > 0)
4777 /* Since read_process_output can run a filter,
4778 which can call accept-process-output,
4779 don't try to read from any other processes
4780 before doing the select again. */
4781 FD_ZERO (&Available);
4783 if (do_display)
4784 redisplay_preserve_echo_area (12);
4786 #ifdef EWOULDBLOCK
4787 else if (nread == -1 && errno == EWOULDBLOCK)
4789 #endif
4790 /* ISC 4.1 defines both EWOULDBLOCK and O_NONBLOCK,
4791 and Emacs uses O_NONBLOCK, so what we get is EAGAIN. */
4792 #ifdef O_NONBLOCK
4793 else if (nread == -1 && errno == EAGAIN)
4795 #else
4796 #ifdef O_NDELAY
4797 else if (nread == -1 && errno == EAGAIN)
4799 /* Note that we cannot distinguish between no input
4800 available now and a closed pipe.
4801 With luck, a closed pipe will be accompanied by
4802 subprocess termination and SIGCHLD. */
4803 else if (nread == 0 && !NETCONN_P (proc))
4805 #endif /* O_NDELAY */
4806 #endif /* O_NONBLOCK */
4807 #ifdef HAVE_PTYS
4808 /* On some OSs with ptys, when the process on one end of
4809 a pty exits, the other end gets an error reading with
4810 errno = EIO instead of getting an EOF (0 bytes read).
4811 Therefore, if we get an error reading and errno =
4812 EIO, just continue, because the child process has
4813 exited and should clean itself up soon (e.g. when we
4814 get a SIGCHLD).
4816 However, it has been known to happen that the SIGCHLD
4817 got lost. So raise the signl again just in case.
4818 It can't hurt. */
4819 else if (nread == -1 && errno == EIO)
4820 kill (getpid (), SIGCHLD);
4821 #endif /* HAVE_PTYS */
4822 /* If we can detect process termination, don't consider the process
4823 gone just because its pipe is closed. */
4824 #ifdef SIGCHLD
4825 else if (nread == 0 && !NETCONN_P (proc))
4827 #endif
4828 else
4830 /* Preserve status of processes already terminated. */
4831 XSETINT (XPROCESS (proc)->tick, ++process_tick);
4832 deactivate_process (proc);
4833 if (XPROCESS (proc)->raw_status_new)
4834 update_status (XPROCESS (proc));
4835 if (EQ (XPROCESS (proc)->status, Qrun))
4836 XPROCESS (proc)->status
4837 = Fcons (Qexit, Fcons (make_number (256), Qnil));
4840 #ifdef NON_BLOCKING_CONNECT
4841 if (check_connect && FD_ISSET (channel, &Connecting)
4842 && FD_ISSET (channel, &connect_wait_mask))
4844 struct Lisp_Process *p;
4846 FD_CLR (channel, &connect_wait_mask);
4847 if (--num_pending_connects < 0)
4848 abort ();
4850 proc = chan_process[channel];
4851 if (NILP (proc))
4852 continue;
4854 p = XPROCESS (proc);
4856 #ifdef GNU_LINUX
4857 /* getsockopt(,,SO_ERROR,,) is said to hang on some systems.
4858 So only use it on systems where it is known to work. */
4860 int xlen = sizeof(xerrno);
4861 if (getsockopt(channel, SOL_SOCKET, SO_ERROR, &xerrno, &xlen))
4862 xerrno = errno;
4864 #else
4866 struct sockaddr pname;
4867 int pnamelen = sizeof(pname);
4869 /* If connection failed, getpeername will fail. */
4870 xerrno = 0;
4871 if (getpeername(channel, &pname, &pnamelen) < 0)
4873 /* Obtain connect failure code through error slippage. */
4874 char dummy;
4875 xerrno = errno;
4876 if (errno == ENOTCONN && read(channel, &dummy, 1) < 0)
4877 xerrno = errno;
4880 #endif
4881 if (xerrno)
4883 XSETINT (p->tick, ++process_tick);
4884 p->status = Fcons (Qfailed, Fcons (make_number (xerrno), Qnil));
4885 deactivate_process (proc);
4887 else
4889 p->status = Qrun;
4890 /* Execute the sentinel here. If we had relied on
4891 status_notify to do it later, it will read input
4892 from the process before calling the sentinel. */
4893 exec_sentinel (proc, build_string ("open\n"));
4894 if (!EQ (p->filter, Qt) && !EQ (p->command, Qt))
4896 FD_SET (XINT (p->infd), &input_wait_mask);
4897 FD_SET (XINT (p->infd), &non_keyboard_wait_mask);
4901 #endif /* NON_BLOCKING_CONNECT */
4902 } /* end for each file descriptor */
4903 } /* end while exit conditions not met */
4905 unbind_to (count, Qnil);
4907 /* If calling from keyboard input, do not quit
4908 since we want to return C-g as an input character.
4909 Otherwise, do pending quit if requested. */
4910 if (read_kbd >= 0)
4912 /* Prevent input_pending from remaining set if we quit. */
4913 clear_input_pending ();
4914 QUIT;
4916 #ifdef POLL_INTERRUPTED_SYS_CALL
4917 /* AlainF 5-Jul-1996
4918 HP-UX 10.10 seems to have problems with signals coming in
4919 Causes "poll: interrupted system call" messages when Emacs is run
4920 in an X window
4921 Turn periodic alarms back on */
4922 start_polling ();
4923 #endif /* POLL_INTERRUPTED_SYS_CALL */
4925 return got_some_input;
4928 /* Given a list (FUNCTION ARGS...), apply FUNCTION to the ARGS. */
4930 static Lisp_Object
4931 read_process_output_call (fun_and_args)
4932 Lisp_Object fun_and_args;
4934 return apply1 (XCAR (fun_and_args), XCDR (fun_and_args));
4937 static Lisp_Object
4938 read_process_output_error_handler (error)
4939 Lisp_Object error;
4941 cmd_error_internal (error, "error in process filter: ");
4942 Vinhibit_quit = Qt;
4943 update_echo_area ();
4944 Fsleep_for (make_number (2), Qnil);
4945 return Qt;
4948 /* Read pending output from the process channel,
4949 starting with our buffered-ahead character if we have one.
4950 Yield number of decoded characters read.
4952 This function reads at most 4096 characters.
4953 If you want to read all available subprocess output,
4954 you must call it repeatedly until it returns zero.
4956 The characters read are decoded according to PROC's coding-system
4957 for decoding. */
4959 static int
4960 read_process_output (proc, channel)
4961 Lisp_Object proc;
4962 register int channel;
4964 register int nbytes;
4965 char *chars;
4966 register Lisp_Object outstream;
4967 register struct buffer *old = current_buffer;
4968 register struct Lisp_Process *p = XPROCESS (proc);
4969 register int opoint;
4970 struct coding_system *coding = proc_decode_coding_system[channel];
4971 int carryover = XINT (p->decoding_carryover);
4972 int readmax = 4096;
4974 #ifdef VMS
4975 VMS_PROC_STUFF *vs, *get_vms_process_pointer();
4977 vs = get_vms_process_pointer (p->pid);
4978 if (vs)
4980 if (!vs->iosb[0])
4981 return (0); /* Really weird if it does this */
4982 if (!(vs->iosb[0] & 1))
4983 return -1; /* I/O error */
4985 else
4986 error ("Could not get VMS process pointer");
4987 chars = vs->inputBuffer;
4988 nbytes = clean_vms_buffer (chars, vs->iosb[1]);
4989 if (nbytes <= 0)
4991 start_vms_process_read (vs); /* Crank up the next read on the process */
4992 return 1; /* Nothing worth printing, say we got 1 */
4994 if (carryover > 0)
4996 /* The data carried over in the previous decoding (which are at
4997 the tail of decoding buffer) should be prepended to the new
4998 data read to decode all together. */
4999 chars = (char *) alloca (nbytes + carryover);
5000 bcopy (SDATA (p->decoding_buf), buf, carryover);
5001 bcopy (vs->inputBuffer, chars + carryover, nbytes);
5003 #else /* not VMS */
5005 chars = (char *) alloca (carryover + readmax);
5006 if (carryover)
5007 /* See the comment above. */
5008 bcopy (SDATA (p->decoding_buf), chars, carryover);
5010 #ifdef DATAGRAM_SOCKETS
5011 /* We have a working select, so proc_buffered_char is always -1. */
5012 if (DATAGRAM_CHAN_P (channel))
5014 int len = datagram_address[channel].len;
5015 nbytes = recvfrom (channel, chars + carryover, readmax,
5016 0, datagram_address[channel].sa, &len);
5018 else
5019 #endif
5020 if (proc_buffered_char[channel] < 0)
5022 nbytes = emacs_read (channel, chars + carryover, readmax);
5023 #ifdef ADAPTIVE_READ_BUFFERING
5024 if (nbytes > 0 && !NILP (p->adaptive_read_buffering))
5026 int delay = XINT (p->read_output_delay);
5027 if (nbytes < 256)
5029 if (delay < READ_OUTPUT_DELAY_MAX_MAX)
5031 if (delay == 0)
5032 process_output_delay_count++;
5033 delay += READ_OUTPUT_DELAY_INCREMENT * 2;
5036 else if (delay > 0 && (nbytes == readmax))
5038 delay -= READ_OUTPUT_DELAY_INCREMENT;
5039 if (delay == 0)
5040 process_output_delay_count--;
5042 XSETINT (p->read_output_delay, delay);
5043 if (delay)
5045 p->read_output_skip = Qt;
5046 process_output_skip = 1;
5049 #endif
5051 else
5053 chars[carryover] = proc_buffered_char[channel];
5054 proc_buffered_char[channel] = -1;
5055 nbytes = emacs_read (channel, chars + carryover + 1, readmax - 1);
5056 if (nbytes < 0)
5057 nbytes = 1;
5058 else
5059 nbytes = nbytes + 1;
5061 #endif /* not VMS */
5063 XSETINT (p->decoding_carryover, 0);
5065 /* At this point, NBYTES holds number of bytes just received
5066 (including the one in proc_buffered_char[channel]). */
5067 if (nbytes <= 0)
5069 if (nbytes < 0 || coding->mode & CODING_MODE_LAST_BLOCK)
5070 return nbytes;
5071 coding->mode |= CODING_MODE_LAST_BLOCK;
5074 /* Now set NBYTES how many bytes we must decode. */
5075 nbytes += carryover;
5077 /* Read and dispose of the process output. */
5078 outstream = p->filter;
5079 if (!NILP (outstream))
5081 /* We inhibit quit here instead of just catching it so that
5082 hitting ^G when a filter happens to be running won't screw
5083 it up. */
5084 int count = SPECPDL_INDEX ();
5085 Lisp_Object odeactivate;
5086 Lisp_Object obuffer, okeymap;
5087 Lisp_Object text;
5088 int outer_running_asynch_code = running_asynch_code;
5089 int waiting = waiting_for_user_input_p;
5091 /* No need to gcpro these, because all we do with them later
5092 is test them for EQness, and none of them should be a string. */
5093 odeactivate = Vdeactivate_mark;
5094 XSETBUFFER (obuffer, current_buffer);
5095 okeymap = current_buffer->keymap;
5097 specbind (Qinhibit_quit, Qt);
5098 specbind (Qlast_nonmenu_event, Qt);
5100 /* In case we get recursively called,
5101 and we already saved the match data nonrecursively,
5102 save the same match data in safely recursive fashion. */
5103 if (outer_running_asynch_code)
5105 Lisp_Object tem;
5106 /* Don't clobber the CURRENT match data, either! */
5107 tem = Fmatch_data (Qnil, Qnil, Qnil);
5108 restore_search_regs ();
5109 record_unwind_save_match_data ();
5110 Fset_match_data (tem, Qt);
5113 /* For speed, if a search happens within this code,
5114 save the match data in a special nonrecursive fashion. */
5115 running_asynch_code = 1;
5117 text = decode_coding_string (make_unibyte_string (chars, nbytes),
5118 coding, 0);
5119 Vlast_coding_system_used = coding->symbol;
5120 /* A new coding system might be found. */
5121 if (!EQ (p->decode_coding_system, coding->symbol))
5123 p->decode_coding_system = coding->symbol;
5125 /* Don't call setup_coding_system for
5126 proc_decode_coding_system[channel] here. It is done in
5127 detect_coding called via decode_coding above. */
5129 /* If a coding system for encoding is not yet decided, we set
5130 it as the same as coding-system for decoding.
5132 But, before doing that we must check if
5133 proc_encode_coding_system[p->outfd] surely points to a
5134 valid memory because p->outfd will be changed once EOF is
5135 sent to the process. */
5136 if (NILP (p->encode_coding_system)
5137 && proc_encode_coding_system[XINT (p->outfd)])
5139 p->encode_coding_system = coding->symbol;
5140 setup_coding_system (coding->symbol,
5141 proc_encode_coding_system[XINT (p->outfd)]);
5142 if (proc_encode_coding_system[XINT (p->outfd)]->eol_type
5143 == CODING_EOL_UNDECIDED)
5144 proc_encode_coding_system[XINT (p->outfd)]->eol_type
5145 = system_eol_type;
5149 carryover = nbytes - coding->consumed;
5150 if (carryover < 0)
5151 abort ();
5153 if (SCHARS (p->decoding_buf) < carryover)
5154 p->decoding_buf = make_uninit_string (carryover);
5155 bcopy (chars + coding->consumed, SDATA (p->decoding_buf),
5156 carryover);
5157 XSETINT (p->decoding_carryover, carryover);
5158 /* Adjust the multibyteness of TEXT to that of the filter. */
5159 if (NILP (p->filter_multibyte) != ! STRING_MULTIBYTE (text))
5160 text = (STRING_MULTIBYTE (text)
5161 ? Fstring_as_unibyte (text)
5162 : Fstring_to_multibyte (text));
5163 if (SBYTES (text) > 0)
5164 internal_condition_case_1 (read_process_output_call,
5165 Fcons (outstream,
5166 Fcons (proc, Fcons (text, Qnil))),
5167 !NILP (Vdebug_on_error) ? Qnil : Qerror,
5168 read_process_output_error_handler);
5170 /* If we saved the match data nonrecursively, restore it now. */
5171 restore_search_regs ();
5172 running_asynch_code = outer_running_asynch_code;
5174 /* Handling the process output should not deactivate the mark. */
5175 Vdeactivate_mark = odeactivate;
5177 /* Restore waiting_for_user_input_p as it was
5178 when we were called, in case the filter clobbered it. */
5179 waiting_for_user_input_p = waiting;
5181 #if 0 /* Call record_asynch_buffer_change unconditionally,
5182 because we might have changed minor modes or other things
5183 that affect key bindings. */
5184 if (! EQ (Fcurrent_buffer (), obuffer)
5185 || ! EQ (current_buffer->keymap, okeymap))
5186 #endif
5187 /* But do it only if the caller is actually going to read events.
5188 Otherwise there's no need to make him wake up, and it could
5189 cause trouble (for example it would make sit_for return). */
5190 if (waiting_for_user_input_p == -1)
5191 record_asynch_buffer_change ();
5193 #ifdef VMS
5194 start_vms_process_read (vs);
5195 #endif
5196 unbind_to (count, Qnil);
5197 return nbytes;
5200 /* If no filter, write into buffer if it isn't dead. */
5201 if (!NILP (p->buffer) && !NILP (XBUFFER (p->buffer)->name))
5203 Lisp_Object old_read_only;
5204 int old_begv, old_zv;
5205 int old_begv_byte, old_zv_byte;
5206 Lisp_Object odeactivate;
5207 int before, before_byte;
5208 int opoint_byte;
5209 Lisp_Object text;
5210 struct buffer *b;
5212 odeactivate = Vdeactivate_mark;
5214 Fset_buffer (p->buffer);
5215 opoint = PT;
5216 opoint_byte = PT_BYTE;
5217 old_read_only = current_buffer->read_only;
5218 old_begv = BEGV;
5219 old_zv = ZV;
5220 old_begv_byte = BEGV_BYTE;
5221 old_zv_byte = ZV_BYTE;
5223 current_buffer->read_only = Qnil;
5225 /* Insert new output into buffer
5226 at the current end-of-output marker,
5227 thus preserving logical ordering of input and output. */
5228 if (XMARKER (p->mark)->buffer)
5229 SET_PT_BOTH (clip_to_bounds (BEGV, marker_position (p->mark), ZV),
5230 clip_to_bounds (BEGV_BYTE, marker_byte_position (p->mark),
5231 ZV_BYTE));
5232 else
5233 SET_PT_BOTH (ZV, ZV_BYTE);
5234 before = PT;
5235 before_byte = PT_BYTE;
5237 /* If the output marker is outside of the visible region, save
5238 the restriction and widen. */
5239 if (! (BEGV <= PT && PT <= ZV))
5240 Fwiden ();
5242 text = decode_coding_string (make_unibyte_string (chars, nbytes),
5243 coding, 0);
5244 Vlast_coding_system_used = coding->symbol;
5245 /* A new coding system might be found. See the comment in the
5246 similar code in the previous `if' block. */
5247 if (!EQ (p->decode_coding_system, coding->symbol))
5249 p->decode_coding_system = coding->symbol;
5250 if (NILP (p->encode_coding_system)
5251 && proc_encode_coding_system[XINT (p->outfd)])
5253 p->encode_coding_system = coding->symbol;
5254 setup_coding_system (coding->symbol,
5255 proc_encode_coding_system[XINT (p->outfd)]);
5256 if (proc_encode_coding_system[XINT (p->outfd)]->eol_type
5257 == CODING_EOL_UNDECIDED)
5258 proc_encode_coding_system[XINT (p->outfd)]->eol_type
5259 = system_eol_type;
5262 carryover = nbytes - coding->consumed;
5263 if (carryover < 0)
5264 abort ();
5266 if (SCHARS (p->decoding_buf) < carryover)
5267 p->decoding_buf = make_uninit_string (carryover);
5268 bcopy (chars + coding->consumed, SDATA (p->decoding_buf),
5269 carryover);
5270 XSETINT (p->decoding_carryover, carryover);
5272 /* Adjust the multibyteness of TEXT to that of the buffer. */
5273 if (NILP (current_buffer->enable_multibyte_characters)
5274 != ! STRING_MULTIBYTE (text))
5275 text = (STRING_MULTIBYTE (text)
5276 ? Fstring_as_unibyte (text)
5277 : Fstring_to_multibyte (text));
5278 /* Insert before markers in case we are inserting where
5279 the buffer's mark is, and the user's next command is Meta-y. */
5280 insert_from_string_before_markers (text, 0, 0,
5281 SCHARS (text), SBYTES (text), 0);
5283 /* Make sure the process marker's position is valid when the
5284 process buffer is changed in the signal_after_change above.
5285 W3 is known to do that. */
5286 if (BUFFERP (p->buffer)
5287 && (b = XBUFFER (p->buffer), b != current_buffer))
5288 set_marker_both (p->mark, p->buffer, BUF_PT (b), BUF_PT_BYTE (b));
5289 else
5290 set_marker_both (p->mark, p->buffer, PT, PT_BYTE);
5292 update_mode_lines++;
5294 /* Make sure opoint and the old restrictions
5295 float ahead of any new text just as point would. */
5296 if (opoint >= before)
5298 opoint += PT - before;
5299 opoint_byte += PT_BYTE - before_byte;
5301 if (old_begv > before)
5303 old_begv += PT - before;
5304 old_begv_byte += PT_BYTE - before_byte;
5306 if (old_zv >= before)
5308 old_zv += PT - before;
5309 old_zv_byte += PT_BYTE - before_byte;
5312 /* If the restriction isn't what it should be, set it. */
5313 if (old_begv != BEGV || old_zv != ZV)
5314 Fnarrow_to_region (make_number (old_begv), make_number (old_zv));
5316 /* Handling the process output should not deactivate the mark. */
5317 Vdeactivate_mark = odeactivate;
5319 current_buffer->read_only = old_read_only;
5320 SET_PT_BOTH (opoint, opoint_byte);
5321 set_buffer_internal (old);
5323 #ifdef VMS
5324 start_vms_process_read (vs);
5325 #endif
5326 return nbytes;
5329 DEFUN ("waiting-for-user-input-p", Fwaiting_for_user_input_p, Swaiting_for_user_input_p,
5330 0, 0, 0,
5331 doc: /* Returns non-nil if Emacs is waiting for input from the user.
5332 This is intended for use by asynchronous process output filters and sentinels. */)
5335 return (waiting_for_user_input_p ? Qt : Qnil);
5338 /* Sending data to subprocess */
5340 jmp_buf send_process_frame;
5341 Lisp_Object process_sent_to;
5343 SIGTYPE
5344 send_process_trap ()
5346 SIGNAL_THREAD_CHECK (SIGPIPE);
5347 #ifdef BSD4_1
5348 sigrelse (SIGPIPE);
5349 sigrelse (SIGALRM);
5350 #endif /* BSD4_1 */
5351 sigunblock (sigmask (SIGPIPE));
5352 longjmp (send_process_frame, 1);
5355 /* Send some data to process PROC.
5356 BUF is the beginning of the data; LEN is the number of characters.
5357 OBJECT is the Lisp object that the data comes from. If OBJECT is
5358 nil or t, it means that the data comes from C string.
5360 If OBJECT is not nil, the data is encoded by PROC's coding-system
5361 for encoding before it is sent.
5363 This function can evaluate Lisp code and can garbage collect. */
5365 static void
5366 send_process (proc, buf, len, object)
5367 volatile Lisp_Object proc;
5368 unsigned char *volatile buf;
5369 volatile int len;
5370 volatile Lisp_Object object;
5372 /* Use volatile to protect variables from being clobbered by longjmp. */
5373 struct Lisp_Process *p = XPROCESS (proc);
5374 int rv;
5375 struct coding_system *coding;
5376 struct gcpro gcpro1;
5377 SIGTYPE (*volatile old_sigpipe) ();
5379 GCPRO1 (object);
5381 #ifdef VMS
5382 VMS_PROC_STUFF *vs, *get_vms_process_pointer();
5383 #endif /* VMS */
5385 if (p->raw_status_new)
5386 update_status (p);
5387 if (! EQ (p->status, Qrun))
5388 error ("Process %s not running", SDATA (p->name));
5389 if (XINT (p->outfd) < 0)
5390 error ("Output file descriptor of %s is closed", SDATA (p->name));
5392 coding = proc_encode_coding_system[XINT (p->outfd)];
5393 Vlast_coding_system_used = coding->symbol;
5395 if ((STRINGP (object) && STRING_MULTIBYTE (object))
5396 || (BUFFERP (object)
5397 && !NILP (XBUFFER (object)->enable_multibyte_characters))
5398 || EQ (object, Qt))
5400 if (!EQ (coding->symbol, p->encode_coding_system))
5401 /* The coding system for encoding was changed to raw-text
5402 because we sent a unibyte text previously. Now we are
5403 sending a multibyte text, thus we must encode it by the
5404 original coding system specified for the current process. */
5405 setup_coding_system (p->encode_coding_system, coding);
5406 if (coding->eol_type == CODING_EOL_UNDECIDED)
5407 coding->eol_type = system_eol_type;
5408 /* src_multibyte should be set to 1 _after_ a call to
5409 setup_coding_system, since it resets src_multibyte to
5410 zero. */
5411 coding->src_multibyte = 1;
5413 else
5415 /* For sending a unibyte text, character code conversion should
5416 not take place but EOL conversion should. So, setup raw-text
5417 or one of the subsidiary if we have not yet done it. */
5418 if (coding->type != coding_type_raw_text)
5420 if (CODING_REQUIRE_FLUSHING (coding))
5422 /* But, before changing the coding, we must flush out data. */
5423 coding->mode |= CODING_MODE_LAST_BLOCK;
5424 send_process (proc, "", 0, Qt);
5426 coding->src_multibyte = 0;
5427 setup_raw_text_coding_system (coding);
5430 coding->dst_multibyte = 0;
5432 if (CODING_REQUIRE_ENCODING (coding))
5434 int require = encoding_buffer_size (coding, len);
5435 int from_byte = -1, from = -1, to = -1;
5437 if (BUFFERP (object))
5439 from_byte = BUF_PTR_BYTE_POS (XBUFFER (object), buf);
5440 from = buf_bytepos_to_charpos (XBUFFER (object), from_byte);
5441 to = buf_bytepos_to_charpos (XBUFFER (object), from_byte + len);
5443 else if (STRINGP (object))
5445 from_byte = buf - SDATA (object);
5446 from = string_byte_to_char (object, from_byte);
5447 to = string_byte_to_char (object, from_byte + len);
5450 if (coding->composing != COMPOSITION_DISABLED)
5452 if (from_byte >= 0)
5453 coding_save_composition (coding, from, to, object);
5454 else
5455 coding->composing = COMPOSITION_DISABLED;
5458 if (SBYTES (p->encoding_buf) < require)
5459 p->encoding_buf = make_uninit_string (require);
5461 if (from_byte >= 0)
5462 buf = (BUFFERP (object)
5463 ? BUF_BYTE_ADDRESS (XBUFFER (object), from_byte)
5464 : SDATA (object) + from_byte);
5466 object = p->encoding_buf;
5467 encode_coding (coding, (char *) buf, SDATA (object),
5468 len, SBYTES (object));
5469 coding_free_composition_data (coding);
5470 len = coding->produced;
5471 buf = SDATA (object);
5474 #ifdef VMS
5475 vs = get_vms_process_pointer (p->pid);
5476 if (vs == 0)
5477 error ("Could not find this process: %x", p->pid);
5478 else if (write_to_vms_process (vs, buf, len))
5480 #else /* not VMS */
5482 if (pty_max_bytes == 0)
5484 #if defined (HAVE_FPATHCONF) && defined (_PC_MAX_CANON)
5485 pty_max_bytes = fpathconf (XFASTINT (p->outfd), _PC_MAX_CANON);
5486 if (pty_max_bytes < 0)
5487 pty_max_bytes = 250;
5488 #else
5489 pty_max_bytes = 250;
5490 #endif
5491 /* Deduct one, to leave space for the eof. */
5492 pty_max_bytes--;
5495 /* 2000-09-21: Emacs 20.7, sparc-sun-solaris-2.6, GCC 2.95.2,
5496 CFLAGS="-g -O": The value of the parameter `proc' is clobbered
5497 when returning with longjmp despite being declared volatile. */
5498 if (!setjmp (send_process_frame))
5500 process_sent_to = proc;
5501 while (len > 0)
5503 int this = len;
5505 /* Decide how much data we can send in one batch.
5506 Long lines need to be split into multiple batches. */
5507 if (!NILP (p->pty_flag))
5509 /* Starting this at zero is always correct when not the first
5510 iteration because the previous iteration ended by sending C-d.
5511 It may not be correct for the first iteration
5512 if a partial line was sent in a separate send_process call.
5513 If that proves worth handling, we need to save linepos
5514 in the process object. */
5515 int linepos = 0;
5516 unsigned char *ptr = (unsigned char *) buf;
5517 unsigned char *end = (unsigned char *) buf + len;
5519 /* Scan through this text for a line that is too long. */
5520 while (ptr != end && linepos < pty_max_bytes)
5522 if (*ptr == '\n')
5523 linepos = 0;
5524 else
5525 linepos++;
5526 ptr++;
5528 /* If we found one, break the line there
5529 and put in a C-d to force the buffer through. */
5530 this = ptr - buf;
5533 /* Send this batch, using one or more write calls. */
5534 while (this > 0)
5536 int outfd = XINT (p->outfd);
5537 old_sigpipe = (SIGTYPE (*) ()) signal (SIGPIPE, send_process_trap);
5538 #ifdef DATAGRAM_SOCKETS
5539 if (DATAGRAM_CHAN_P (outfd))
5541 rv = sendto (outfd, (char *) buf, this,
5542 0, datagram_address[outfd].sa,
5543 datagram_address[outfd].len);
5544 if (rv < 0 && errno == EMSGSIZE)
5546 signal (SIGPIPE, old_sigpipe);
5547 report_file_error ("sending datagram",
5548 Fcons (proc, Qnil));
5551 else
5552 #endif
5554 rv = emacs_write (outfd, (char *) buf, this);
5555 #ifdef ADAPTIVE_READ_BUFFERING
5556 if (XINT (p->read_output_delay) > 0
5557 && EQ (p->adaptive_read_buffering, Qt))
5559 XSETFASTINT (p->read_output_delay, 0);
5560 process_output_delay_count--;
5561 p->read_output_skip = Qnil;
5563 #endif
5565 signal (SIGPIPE, old_sigpipe);
5567 if (rv < 0)
5569 if (0
5570 #ifdef EWOULDBLOCK
5571 || errno == EWOULDBLOCK
5572 #endif
5573 #ifdef EAGAIN
5574 || errno == EAGAIN
5575 #endif
5577 /* Buffer is full. Wait, accepting input;
5578 that may allow the program
5579 to finish doing output and read more. */
5581 int offset = 0;
5583 #ifdef BROKEN_PTY_READ_AFTER_EAGAIN
5584 /* A gross hack to work around a bug in FreeBSD.
5585 In the following sequence, read(2) returns
5586 bogus data:
5588 write(2) 1022 bytes
5589 write(2) 954 bytes, get EAGAIN
5590 read(2) 1024 bytes in process_read_output
5591 read(2) 11 bytes in process_read_output
5593 That is, read(2) returns more bytes than have
5594 ever been written successfully. The 1033 bytes
5595 read are the 1022 bytes written successfully
5596 after processing (for example with CRs added if
5597 the terminal is set up that way which it is
5598 here). The same bytes will be seen again in a
5599 later read(2), without the CRs. */
5601 if (errno == EAGAIN)
5603 int flags = FWRITE;
5604 ioctl (XINT (p->outfd), TIOCFLUSH, &flags);
5606 #endif /* BROKEN_PTY_READ_AFTER_EAGAIN */
5608 /* Running filters might relocate buffers or strings.
5609 Arrange to relocate BUF. */
5610 if (BUFFERP (object))
5611 offset = BUF_PTR_BYTE_POS (XBUFFER (object), buf);
5612 else if (STRINGP (object))
5613 offset = buf - SDATA (object);
5615 #ifdef EMACS_HAS_USECS
5616 wait_reading_process_output (0, 20000, 0, 0, Qnil, NULL, 0);
5617 #else
5618 wait_reading_process_output (1, 0, 0, 0, Qnil, NULL, 0);
5619 #endif
5621 if (BUFFERP (object))
5622 buf = BUF_BYTE_ADDRESS (XBUFFER (object), offset);
5623 else if (STRINGP (object))
5624 buf = offset + SDATA (object);
5626 rv = 0;
5628 else
5629 /* This is a real error. */
5630 report_file_error ("writing to process", Fcons (proc, Qnil));
5632 buf += rv;
5633 len -= rv;
5634 this -= rv;
5637 /* If we sent just part of the string, put in an EOF
5638 to force it through, before we send the rest. */
5639 if (len > 0)
5640 Fprocess_send_eof (proc);
5643 #endif /* not VMS */
5644 else
5646 signal (SIGPIPE, old_sigpipe);
5647 #ifndef VMS
5648 proc = process_sent_to;
5649 p = XPROCESS (proc);
5650 #endif
5651 p->raw_status_new = 0;
5652 p->status = Fcons (Qexit, Fcons (make_number (256), Qnil));
5653 XSETINT (p->tick, ++process_tick);
5654 deactivate_process (proc);
5655 #ifdef VMS
5656 error ("Error writing to process %s; closed it", SDATA (p->name));
5657 #else
5658 error ("SIGPIPE raised on process %s; closed it", SDATA (p->name));
5659 #endif
5662 UNGCPRO;
5665 static Lisp_Object
5666 send_process_object_unwind (buf)
5667 Lisp_Object buf;
5669 Lisp_Object tembuf;
5671 if (XBUFFER (buf) == current_buffer)
5672 return Qnil;
5673 tembuf = Fcurrent_buffer ();
5674 Fset_buffer (buf);
5675 Fkill_buffer (tembuf);
5676 return Qnil;
5679 /* Send current contents of region between START and END to PROC.
5680 If START is a string, send it instead.
5681 This function can evaluate Lisp code and can garbage collect. */
5683 static void
5684 send_process_object (proc, start, end)
5685 Lisp_Object proc, start, end;
5687 int count = SPECPDL_INDEX ();
5688 Lisp_Object object = STRINGP (start) ? start : Fcurrent_buffer ();
5689 struct buffer *given_buffer = current_buffer;
5690 unsigned char *buf;
5691 int len;
5693 record_unwind_protect (send_process_object_unwind, Fcurrent_buffer ());
5695 if (STRINGP (object) ? STRING_MULTIBYTE (object)
5696 : ! NILP (XBUFFER (object)->enable_multibyte_characters))
5698 struct Lisp_Process *p = XPROCESS (proc);
5699 struct coding_system *coding;
5701 if (p->raw_status_new)
5702 update_status (p);
5703 if (! EQ (p->status, Qrun))
5704 error ("Process %s not running", SDATA (p->name));
5705 if (XINT (p->outfd) < 0)
5706 error ("Output file descriptor of %s is closed", SDATA (p->name));
5708 coding = proc_encode_coding_system[XINT (p->outfd)];
5709 if (! EQ (coding->symbol, p->encode_coding_system))
5710 /* The coding system for encoding was changed to raw-text
5711 because we sent a unibyte text previously. Now we are
5712 sending a multibyte text, thus we must encode it by the
5713 original coding system specified for the current process. */
5714 setup_coding_system (p->encode_coding_system, coding);
5715 if (! NILP (coding->pre_write_conversion))
5717 struct gcpro gcpro1, gcpro2;
5719 GCPRO2 (proc, object);
5720 call2 (coding->pre_write_conversion, start, end);
5721 UNGCPRO;
5722 if (given_buffer != current_buffer)
5724 start = make_number (BEGV), end = make_number (ZV);
5725 object = Fcurrent_buffer ();
5730 if (BUFFERP (object))
5732 EMACS_INT start_byte;
5734 if (XINT (start) < GPT && XINT (end) > GPT)
5735 move_gap (XINT (end));
5736 start_byte = CHAR_TO_BYTE (XINT (start));
5737 buf = BYTE_POS_ADDR (start_byte);
5738 len = CHAR_TO_BYTE (XINT (end)) - start_byte;
5740 else
5742 buf = SDATA (object);
5743 len = SBYTES (object);
5745 send_process (proc, buf, len, object);
5747 unbind_to (count, Qnil);
5750 DEFUN ("process-send-region", Fprocess_send_region, Sprocess_send_region,
5751 3, 3, 0,
5752 doc: /* Send current contents of region as input to PROCESS.
5753 PROCESS may be a process, a buffer, the name of a process or buffer, or
5754 nil, indicating the current buffer's process.
5755 Called from program, takes three arguments, PROCESS, START and END.
5756 If the region is more than 500 characters long,
5757 it is sent in several bunches. This may happen even for shorter regions.
5758 Output from processes can arrive in between bunches. */)
5759 (process, start, end)
5760 Lisp_Object process, start, end;
5762 Lisp_Object proc;
5764 proc = get_process (process);
5765 validate_region (&start, &end);
5766 send_process_object (proc, start, end);
5767 return Qnil;
5770 DEFUN ("process-send-string", Fprocess_send_string, Sprocess_send_string,
5771 2, 2, 0,
5772 doc: /* Send PROCESS the contents of STRING as input.
5773 PROCESS may be a process, a buffer, the name of a process or buffer, or
5774 nil, indicating the current buffer's process.
5775 If STRING is more than 500 characters long,
5776 it is sent in several bunches. This may happen even for shorter strings.
5777 Output from processes can arrive in between bunches. */)
5778 (process, string)
5779 Lisp_Object process, string;
5781 Lisp_Object proc;
5782 CHECK_STRING (string);
5783 proc = get_process (process);
5784 send_process_object (proc, string, Qnil);
5785 return Qnil;
5788 /* Return the foreground process group for the tty/pty that
5789 the process P uses. */
5790 static int
5791 emacs_get_tty_pgrp (p)
5792 struct Lisp_Process *p;
5794 int gid = -1;
5796 #ifdef TIOCGPGRP
5797 if (ioctl (XINT (p->infd), TIOCGPGRP, &gid) == -1 && ! NILP (p->tty_name))
5799 int fd;
5800 /* Some OS:es (Solaris 8/9) does not allow TIOCGPGRP from the
5801 master side. Try the slave side. */
5802 fd = emacs_open (XSTRING (p->tty_name)->data, O_RDONLY, 0);
5804 if (fd != -1)
5806 ioctl (fd, TIOCGPGRP, &gid);
5807 emacs_close (fd);
5810 #endif /* defined (TIOCGPGRP ) */
5812 return gid;
5815 DEFUN ("process-running-child-p", Fprocess_running_child_p,
5816 Sprocess_running_child_p, 0, 1, 0,
5817 doc: /* Return t if PROCESS has given the terminal to a child.
5818 If the operating system does not make it possible to find out,
5819 return t unconditionally. */)
5820 (process)
5821 Lisp_Object process;
5823 /* Initialize in case ioctl doesn't exist or gives an error,
5824 in a way that will cause returning t. */
5825 int gid;
5826 Lisp_Object proc;
5827 struct Lisp_Process *p;
5829 proc = get_process (process);
5830 p = XPROCESS (proc);
5832 if (!EQ (p->childp, Qt))
5833 error ("Process %s is not a subprocess",
5834 SDATA (p->name));
5835 if (XINT (p->infd) < 0)
5836 error ("Process %s is not active",
5837 SDATA (p->name));
5839 gid = emacs_get_tty_pgrp (p);
5841 if (gid == p->pid)
5842 return Qnil;
5843 return Qt;
5846 /* send a signal number SIGNO to PROCESS.
5847 If CURRENT_GROUP is t, that means send to the process group
5848 that currently owns the terminal being used to communicate with PROCESS.
5849 This is used for various commands in shell mode.
5850 If CURRENT_GROUP is lambda, that means send to the process group
5851 that currently owns the terminal, but only if it is NOT the shell itself.
5853 If NOMSG is zero, insert signal-announcements into process's buffers
5854 right away.
5856 If we can, we try to signal PROCESS by sending control characters
5857 down the pty. This allows us to signal inferiors who have changed
5858 their uid, for which killpg would return an EPERM error. */
5860 static void
5861 process_send_signal (process, signo, current_group, nomsg)
5862 Lisp_Object process;
5863 int signo;
5864 Lisp_Object current_group;
5865 int nomsg;
5867 Lisp_Object proc;
5868 register struct Lisp_Process *p;
5869 int gid;
5870 int no_pgrp = 0;
5872 proc = get_process (process);
5873 p = XPROCESS (proc);
5875 if (!EQ (p->childp, Qt))
5876 error ("Process %s is not a subprocess",
5877 SDATA (p->name));
5878 if (XINT (p->infd) < 0)
5879 error ("Process %s is not active",
5880 SDATA (p->name));
5882 if (NILP (p->pty_flag))
5883 current_group = Qnil;
5885 /* If we are using pgrps, get a pgrp number and make it negative. */
5886 if (NILP (current_group))
5887 /* Send the signal to the shell's process group. */
5888 gid = p->pid;
5889 else
5891 #ifdef SIGNALS_VIA_CHARACTERS
5892 /* If possible, send signals to the entire pgrp
5893 by sending an input character to it. */
5895 /* TERMIOS is the latest and bestest, and seems most likely to
5896 work. If the system has it, use it. */
5897 #ifdef HAVE_TERMIOS
5898 struct termios t;
5899 cc_t *sig_char = NULL;
5901 tcgetattr (XINT (p->infd), &t);
5903 switch (signo)
5905 case SIGINT:
5906 sig_char = &t.c_cc[VINTR];
5907 break;
5909 case SIGQUIT:
5910 sig_char = &t.c_cc[VQUIT];
5911 break;
5913 case SIGTSTP:
5914 #if defined (VSWTCH) && !defined (PREFER_VSUSP)
5915 sig_char = &t.c_cc[VSWTCH];
5916 #else
5917 sig_char = &t.c_cc[VSUSP];
5918 #endif
5919 break;
5922 if (sig_char && *sig_char != CDISABLE)
5924 send_process (proc, sig_char, 1, Qnil);
5925 return;
5927 /* If we can't send the signal with a character,
5928 fall through and send it another way. */
5929 #else /* ! HAVE_TERMIOS */
5931 /* On Berkeley descendants, the following IOCTL's retrieve the
5932 current control characters. */
5933 #if defined (TIOCGLTC) && defined (TIOCGETC)
5935 struct tchars c;
5936 struct ltchars lc;
5938 switch (signo)
5940 case SIGINT:
5941 ioctl (XINT (p->infd), TIOCGETC, &c);
5942 send_process (proc, &c.t_intrc, 1, Qnil);
5943 return;
5944 case SIGQUIT:
5945 ioctl (XINT (p->infd), TIOCGETC, &c);
5946 send_process (proc, &c.t_quitc, 1, Qnil);
5947 return;
5948 #ifdef SIGTSTP
5949 case SIGTSTP:
5950 ioctl (XINT (p->infd), TIOCGLTC, &lc);
5951 send_process (proc, &lc.t_suspc, 1, Qnil);
5952 return;
5953 #endif /* ! defined (SIGTSTP) */
5956 #else /* ! defined (TIOCGLTC) && defined (TIOCGETC) */
5958 /* On SYSV descendants, the TCGETA ioctl retrieves the current control
5959 characters. */
5960 #ifdef TCGETA
5961 struct termio t;
5962 switch (signo)
5964 case SIGINT:
5965 ioctl (XINT (p->infd), TCGETA, &t);
5966 send_process (proc, &t.c_cc[VINTR], 1, Qnil);
5967 return;
5968 case SIGQUIT:
5969 ioctl (XINT (p->infd), TCGETA, &t);
5970 send_process (proc, &t.c_cc[VQUIT], 1, Qnil);
5971 return;
5972 #ifdef SIGTSTP
5973 case SIGTSTP:
5974 ioctl (XINT (p->infd), TCGETA, &t);
5975 send_process (proc, &t.c_cc[VSWTCH], 1, Qnil);
5976 return;
5977 #endif /* ! defined (SIGTSTP) */
5979 #else /* ! defined (TCGETA) */
5980 Your configuration files are messed up.
5981 /* If your system configuration files define SIGNALS_VIA_CHARACTERS,
5982 you'd better be using one of the alternatives above! */
5983 #endif /* ! defined (TCGETA) */
5984 #endif /* ! defined (TIOCGLTC) && defined (TIOCGETC) */
5985 /* In this case, the code above should alway returns. */
5986 abort ();
5987 #endif /* ! defined HAVE_TERMIOS */
5989 /* The code above may fall through if it can't
5990 handle the signal. */
5991 #endif /* defined (SIGNALS_VIA_CHARACTERS) */
5993 #ifdef TIOCGPGRP
5994 /* Get the current pgrp using the tty itself, if we have that.
5995 Otherwise, use the pty to get the pgrp.
5996 On pfa systems, saka@pfu.fujitsu.co.JP writes:
5997 "TIOCGPGRP symbol defined in sys/ioctl.h at E50.
5998 But, TIOCGPGRP does not work on E50 ;-P works fine on E60"
5999 His patch indicates that if TIOCGPGRP returns an error, then
6000 we should just assume that p->pid is also the process group id. */
6002 gid = emacs_get_tty_pgrp (p);
6004 if (gid == -1)
6005 /* If we can't get the information, assume
6006 the shell owns the tty. */
6007 gid = p->pid;
6009 /* It is not clear whether anything really can set GID to -1.
6010 Perhaps on some system one of those ioctls can or could do so.
6011 Or perhaps this is vestigial. */
6012 if (gid == -1)
6013 no_pgrp = 1;
6014 #else /* ! defined (TIOCGPGRP ) */
6015 /* Can't select pgrps on this system, so we know that
6016 the child itself heads the pgrp. */
6017 gid = p->pid;
6018 #endif /* ! defined (TIOCGPGRP ) */
6020 /* If current_group is lambda, and the shell owns the terminal,
6021 don't send any signal. */
6022 if (EQ (current_group, Qlambda) && gid == p->pid)
6023 return;
6026 switch (signo)
6028 #ifdef SIGCONT
6029 case SIGCONT:
6030 p->raw_status_new = 0;
6031 p->status = Qrun;
6032 XSETINT (p->tick, ++process_tick);
6033 if (!nomsg)
6034 status_notify (NULL);
6035 break;
6036 #endif /* ! defined (SIGCONT) */
6037 case SIGINT:
6038 #ifdef VMS
6039 send_process (proc, "\003", 1, Qnil); /* ^C */
6040 goto whoosh;
6041 #endif
6042 case SIGQUIT:
6043 #ifdef VMS
6044 send_process (proc, "\031", 1, Qnil); /* ^Y */
6045 goto whoosh;
6046 #endif
6047 case SIGKILL:
6048 #ifdef VMS
6049 sys$forcex (&(p->pid), 0, 1);
6050 whoosh:
6051 #endif
6052 flush_pending_output (XINT (p->infd));
6053 break;
6056 /* If we don't have process groups, send the signal to the immediate
6057 subprocess. That isn't really right, but it's better than any
6058 obvious alternative. */
6059 if (no_pgrp)
6061 kill (p->pid, signo);
6062 return;
6065 /* gid may be a pid, or minus a pgrp's number */
6066 #ifdef TIOCSIGSEND
6067 if (!NILP (current_group))
6069 if (ioctl (XINT (p->infd), TIOCSIGSEND, signo) == -1)
6070 EMACS_KILLPG (gid, signo);
6072 else
6074 gid = - p->pid;
6075 kill (gid, signo);
6077 #else /* ! defined (TIOCSIGSEND) */
6078 EMACS_KILLPG (gid, signo);
6079 #endif /* ! defined (TIOCSIGSEND) */
6082 DEFUN ("interrupt-process", Finterrupt_process, Sinterrupt_process, 0, 2, 0,
6083 doc: /* Interrupt process PROCESS.
6084 PROCESS may be a process, a buffer, or the name of a process or buffer.
6085 No arg or nil means current buffer's process.
6086 Second arg CURRENT-GROUP non-nil means send signal to
6087 the current process-group of the process's controlling terminal
6088 rather than to the process's own process group.
6089 If the process is a shell, this means interrupt current subjob
6090 rather than the shell.
6092 If CURRENT-GROUP is `lambda', and if the shell owns the terminal,
6093 don't send the signal. */)
6094 (process, current_group)
6095 Lisp_Object process, current_group;
6097 process_send_signal (process, SIGINT, current_group, 0);
6098 return process;
6101 DEFUN ("kill-process", Fkill_process, Skill_process, 0, 2, 0,
6102 doc: /* Kill process PROCESS. May be process or name of one.
6103 See function `interrupt-process' for more details on usage. */)
6104 (process, current_group)
6105 Lisp_Object process, current_group;
6107 process_send_signal (process, SIGKILL, current_group, 0);
6108 return process;
6111 DEFUN ("quit-process", Fquit_process, Squit_process, 0, 2, 0,
6112 doc: /* Send QUIT signal to process PROCESS. May be process or name of one.
6113 See function `interrupt-process' for more details on usage. */)
6114 (process, current_group)
6115 Lisp_Object process, current_group;
6117 process_send_signal (process, SIGQUIT, current_group, 0);
6118 return process;
6121 DEFUN ("stop-process", Fstop_process, Sstop_process, 0, 2, 0,
6122 doc: /* Stop process PROCESS. May be process or name of one.
6123 See function `interrupt-process' for more details on usage.
6124 If PROCESS is a network process, inhibit handling of incoming traffic. */)
6125 (process, current_group)
6126 Lisp_Object process, current_group;
6128 #ifdef HAVE_SOCKETS
6129 if (PROCESSP (process) && NETCONN_P (process))
6131 struct Lisp_Process *p;
6133 p = XPROCESS (process);
6134 if (NILP (p->command)
6135 && XINT (p->infd) >= 0)
6137 FD_CLR (XINT (p->infd), &input_wait_mask);
6138 FD_CLR (XINT (p->infd), &non_keyboard_wait_mask);
6140 p->command = Qt;
6141 return process;
6143 #endif
6144 #ifndef SIGTSTP
6145 error ("No SIGTSTP support");
6146 #else
6147 process_send_signal (process, SIGTSTP, current_group, 0);
6148 #endif
6149 return process;
6152 DEFUN ("continue-process", Fcontinue_process, Scontinue_process, 0, 2, 0,
6153 doc: /* Continue process PROCESS. May be process or name of one.
6154 See function `interrupt-process' for more details on usage.
6155 If PROCESS is a network process, resume handling of incoming traffic. */)
6156 (process, current_group)
6157 Lisp_Object process, current_group;
6159 #ifdef HAVE_SOCKETS
6160 if (PROCESSP (process) && NETCONN_P (process))
6162 struct Lisp_Process *p;
6164 p = XPROCESS (process);
6165 if (EQ (p->command, Qt)
6166 && XINT (p->infd) >= 0
6167 && (!EQ (p->filter, Qt) || EQ (p->status, Qlisten)))
6169 FD_SET (XINT (p->infd), &input_wait_mask);
6170 FD_SET (XINT (p->infd), &non_keyboard_wait_mask);
6172 p->command = Qnil;
6173 return process;
6175 #endif
6176 #ifdef SIGCONT
6177 process_send_signal (process, SIGCONT, current_group, 0);
6178 #else
6179 error ("No SIGCONT support");
6180 #endif
6181 return process;
6184 DEFUN ("signal-process", Fsignal_process, Ssignal_process,
6185 2, 2, "sProcess (name or number): \nnSignal code: ",
6186 doc: /* Send PROCESS the signal with code SIGCODE.
6187 PROCESS may also be a number specifying the process id of the
6188 process to signal; in this case, the process need not be a child of
6189 this Emacs.
6190 SIGCODE may be an integer, or a symbol whose name is a signal name. */)
6191 (process, sigcode)
6192 Lisp_Object process, sigcode;
6194 pid_t pid;
6196 if (INTEGERP (process))
6198 pid = XINT (process);
6199 goto got_it;
6202 if (FLOATP (process))
6204 pid = (pid_t) XFLOAT_DATA (process);
6205 goto got_it;
6208 if (STRINGP (process))
6210 Lisp_Object tem;
6211 if (tem = Fget_process (process), NILP (tem))
6213 pid = XINT (Fstring_to_number (process, make_number (10)));
6214 if (pid > 0)
6215 goto got_it;
6217 process = tem;
6219 else
6220 process = get_process (process);
6222 if (NILP (process))
6223 return process;
6225 CHECK_PROCESS (process);
6226 pid = XPROCESS (process)->pid;
6227 if (pid <= 0)
6228 error ("Cannot signal process %s", SDATA (XPROCESS (process)->name));
6230 got_it:
6232 #define parse_signal(NAME, VALUE) \
6233 else if (!xstricmp (name, NAME)) \
6234 XSETINT (sigcode, VALUE)
6236 if (INTEGERP (sigcode))
6238 else
6240 unsigned char *name;
6242 CHECK_SYMBOL (sigcode);
6243 name = SDATA (SYMBOL_NAME (sigcode));
6245 if (!strncmp(name, "SIG", 3) || !strncmp(name, "sig", 3))
6246 name += 3;
6248 if (0)
6250 #ifdef SIGUSR1
6251 parse_signal ("usr1", SIGUSR1);
6252 #endif
6253 #ifdef SIGUSR2
6254 parse_signal ("usr2", SIGUSR2);
6255 #endif
6256 #ifdef SIGTERM
6257 parse_signal ("term", SIGTERM);
6258 #endif
6259 #ifdef SIGHUP
6260 parse_signal ("hup", SIGHUP);
6261 #endif
6262 #ifdef SIGINT
6263 parse_signal ("int", SIGINT);
6264 #endif
6265 #ifdef SIGQUIT
6266 parse_signal ("quit", SIGQUIT);
6267 #endif
6268 #ifdef SIGILL
6269 parse_signal ("ill", SIGILL);
6270 #endif
6271 #ifdef SIGABRT
6272 parse_signal ("abrt", SIGABRT);
6273 #endif
6274 #ifdef SIGEMT
6275 parse_signal ("emt", SIGEMT);
6276 #endif
6277 #ifdef SIGKILL
6278 parse_signal ("kill", SIGKILL);
6279 #endif
6280 #ifdef SIGFPE
6281 parse_signal ("fpe", SIGFPE);
6282 #endif
6283 #ifdef SIGBUS
6284 parse_signal ("bus", SIGBUS);
6285 #endif
6286 #ifdef SIGSEGV
6287 parse_signal ("segv", SIGSEGV);
6288 #endif
6289 #ifdef SIGSYS
6290 parse_signal ("sys", SIGSYS);
6291 #endif
6292 #ifdef SIGPIPE
6293 parse_signal ("pipe", SIGPIPE);
6294 #endif
6295 #ifdef SIGALRM
6296 parse_signal ("alrm", SIGALRM);
6297 #endif
6298 #ifdef SIGURG
6299 parse_signal ("urg", SIGURG);
6300 #endif
6301 #ifdef SIGSTOP
6302 parse_signal ("stop", SIGSTOP);
6303 #endif
6304 #ifdef SIGTSTP
6305 parse_signal ("tstp", SIGTSTP);
6306 #endif
6307 #ifdef SIGCONT
6308 parse_signal ("cont", SIGCONT);
6309 #endif
6310 #ifdef SIGCHLD
6311 parse_signal ("chld", SIGCHLD);
6312 #endif
6313 #ifdef SIGTTIN
6314 parse_signal ("ttin", SIGTTIN);
6315 #endif
6316 #ifdef SIGTTOU
6317 parse_signal ("ttou", SIGTTOU);
6318 #endif
6319 #ifdef SIGIO
6320 parse_signal ("io", SIGIO);
6321 #endif
6322 #ifdef SIGXCPU
6323 parse_signal ("xcpu", SIGXCPU);
6324 #endif
6325 #ifdef SIGXFSZ
6326 parse_signal ("xfsz", SIGXFSZ);
6327 #endif
6328 #ifdef SIGVTALRM
6329 parse_signal ("vtalrm", SIGVTALRM);
6330 #endif
6331 #ifdef SIGPROF
6332 parse_signal ("prof", SIGPROF);
6333 #endif
6334 #ifdef SIGWINCH
6335 parse_signal ("winch", SIGWINCH);
6336 #endif
6337 #ifdef SIGINFO
6338 parse_signal ("info", SIGINFO);
6339 #endif
6340 else
6341 error ("Undefined signal name %s", name);
6344 #undef parse_signal
6346 return make_number (kill (pid, XINT (sigcode)));
6349 DEFUN ("process-send-eof", Fprocess_send_eof, Sprocess_send_eof, 0, 1, 0,
6350 doc: /* Make PROCESS see end-of-file in its input.
6351 EOF comes after any text already sent to it.
6352 PROCESS may be a process, a buffer, the name of a process or buffer, or
6353 nil, indicating the current buffer's process.
6354 If PROCESS is a network connection, or is a process communicating
6355 through a pipe (as opposed to a pty), then you cannot send any more
6356 text to PROCESS after you call this function. */)
6357 (process)
6358 Lisp_Object process;
6360 Lisp_Object proc;
6361 struct coding_system *coding;
6363 if (DATAGRAM_CONN_P (process))
6364 return process;
6366 proc = get_process (process);
6367 coding = proc_encode_coding_system[XINT (XPROCESS (proc)->outfd)];
6369 /* Make sure the process is really alive. */
6370 if (XPROCESS (proc)->raw_status_new)
6371 update_status (XPROCESS (proc));
6372 if (! EQ (XPROCESS (proc)->status, Qrun))
6373 error ("Process %s not running", SDATA (XPROCESS (proc)->name));
6375 if (CODING_REQUIRE_FLUSHING (coding))
6377 coding->mode |= CODING_MODE_LAST_BLOCK;
6378 send_process (proc, "", 0, Qnil);
6381 #ifdef VMS
6382 send_process (proc, "\032", 1, Qnil); /* ^z */
6383 #else
6384 if (!NILP (XPROCESS (proc)->pty_flag))
6385 send_process (proc, "\004", 1, Qnil);
6386 else
6388 int old_outfd, new_outfd;
6390 #ifdef HAVE_SHUTDOWN
6391 /* If this is a network connection, or socketpair is used
6392 for communication with the subprocess, call shutdown to cause EOF.
6393 (In some old system, shutdown to socketpair doesn't work.
6394 Then we just can't win.) */
6395 if (XPROCESS (proc)->pid == 0
6396 || XINT (XPROCESS (proc)->outfd) == XINT (XPROCESS (proc)->infd))
6397 shutdown (XINT (XPROCESS (proc)->outfd), 1);
6398 /* In case of socketpair, outfd == infd, so don't close it. */
6399 if (XINT (XPROCESS (proc)->outfd) != XINT (XPROCESS (proc)->infd))
6400 emacs_close (XINT (XPROCESS (proc)->outfd));
6401 #else /* not HAVE_SHUTDOWN */
6402 emacs_close (XINT (XPROCESS (proc)->outfd));
6403 #endif /* not HAVE_SHUTDOWN */
6404 new_outfd = emacs_open (NULL_DEVICE, O_WRONLY, 0);
6405 if (new_outfd < 0)
6406 abort ();
6407 old_outfd = XINT (XPROCESS (proc)->outfd);
6409 if (!proc_encode_coding_system[new_outfd])
6410 proc_encode_coding_system[new_outfd]
6411 = (struct coding_system *) xmalloc (sizeof (struct coding_system));
6412 bcopy (proc_encode_coding_system[old_outfd],
6413 proc_encode_coding_system[new_outfd],
6414 sizeof (struct coding_system));
6415 bzero (proc_encode_coding_system[old_outfd],
6416 sizeof (struct coding_system));
6418 XSETINT (XPROCESS (proc)->outfd, new_outfd);
6420 #endif /* VMS */
6421 return process;
6424 /* Kill all processes associated with `buffer'.
6425 If `buffer' is nil, kill all processes */
6427 void
6428 kill_buffer_processes (buffer)
6429 Lisp_Object buffer;
6431 Lisp_Object tail, proc;
6433 for (tail = Vprocess_alist; GC_CONSP (tail); tail = XCDR (tail))
6435 proc = XCDR (XCAR (tail));
6436 if (GC_PROCESSP (proc)
6437 && (NILP (buffer) || EQ (XPROCESS (proc)->buffer, buffer)))
6439 if (NETCONN_P (proc))
6440 Fdelete_process (proc);
6441 else if (XINT (XPROCESS (proc)->infd) >= 0)
6442 process_send_signal (proc, SIGHUP, Qnil, 1);
6447 /* On receipt of a signal that a child status has changed, loop asking
6448 about children with changed statuses until the system says there
6449 are no more.
6451 All we do is change the status; we do not run sentinels or print
6452 notifications. That is saved for the next time keyboard input is
6453 done, in order to avoid timing errors.
6455 ** WARNING: this can be called during garbage collection.
6456 Therefore, it must not be fooled by the presence of mark bits in
6457 Lisp objects.
6459 ** USG WARNING: Although it is not obvious from the documentation
6460 in signal(2), on a USG system the SIGCLD handler MUST NOT call
6461 signal() before executing at least one wait(), otherwise the
6462 handler will be called again, resulting in an infinite loop. The
6463 relevant portion of the documentation reads "SIGCLD signals will be
6464 queued and the signal-catching function will be continually
6465 reentered until the queue is empty". Invoking signal() causes the
6466 kernel to reexamine the SIGCLD queue. Fred Fish, UniSoft Systems
6467 Inc.
6469 ** Malloc WARNING: This should never call malloc either directly or
6470 indirectly; if it does, that is a bug */
6472 #ifdef SIGCHLD
6473 SIGTYPE
6474 sigchld_handler (signo)
6475 int signo;
6477 int old_errno = errno;
6478 Lisp_Object proc;
6479 register struct Lisp_Process *p;
6480 extern EMACS_TIME *input_available_clear_time;
6482 SIGNAL_THREAD_CHECK (signo);
6484 #ifdef BSD4_1
6485 extern int sigheld;
6486 sigheld |= sigbit (SIGCHLD);
6487 #endif
6489 while (1)
6491 pid_t pid;
6492 WAITTYPE w;
6493 Lisp_Object tail;
6495 #ifdef WNOHANG
6496 #ifndef WUNTRACED
6497 #define WUNTRACED 0
6498 #endif /* no WUNTRACED */
6499 /* Keep trying to get a status until we get a definitive result. */
6500 while (1)
6502 errno = 0;
6503 pid = wait3 (&w, WNOHANG | WUNTRACED, 0);
6504 if (! (pid < 0 && errno == EINTR))
6505 break;
6506 /* Avoid a busyloop: wait3 is a system call, so we do not want
6507 to prevent the kernel from actually sending SIGCHLD to emacs
6508 by asking for it all the time. */
6509 sleep (1);
6512 if (pid <= 0)
6514 /* PID == 0 means no processes found, PID == -1 means a real
6515 failure. We have done all our job, so return. */
6517 /* USG systems forget handlers when they are used;
6518 must reestablish each time */
6519 #if defined (USG) && !defined (POSIX_SIGNALS)
6520 signal (signo, sigchld_handler); /* WARNING - must come after wait3() */
6521 #endif
6522 #ifdef BSD4_1
6523 sigheld &= ~sigbit (SIGCHLD);
6524 sigrelse (SIGCHLD);
6525 #endif
6526 errno = old_errno;
6527 return;
6529 #else
6530 pid = wait (&w);
6531 #endif /* no WNOHANG */
6533 /* Find the process that signaled us, and record its status. */
6535 /* The process can have been deleted by Fdelete_process. */
6536 for (tail = deleted_pid_list; GC_CONSP (tail); tail = XCDR (tail))
6538 Lisp_Object xpid = XCAR (tail);
6539 if ((GC_INTEGERP (xpid) && pid == (pid_t) XINT (xpid))
6540 || (GC_FLOATP (xpid) && pid == (pid_t) XFLOAT_DATA (xpid)))
6542 XSETCAR (tail, Qnil);
6543 goto sigchld_end_of_loop;
6547 /* Otherwise, if it is asynchronous, it is in Vprocess_alist. */
6548 p = 0;
6549 for (tail = Vprocess_alist; GC_CONSP (tail); tail = XCDR (tail))
6551 proc = XCDR (XCAR (tail));
6552 p = XPROCESS (proc);
6553 if (GC_EQ (p->childp, Qt) && p->pid == pid)
6554 break;
6555 p = 0;
6558 /* Look for an asynchronous process whose pid hasn't been filled
6559 in yet. */
6560 if (p == 0)
6561 for (tail = Vprocess_alist; GC_CONSP (tail); tail = XCDR (tail))
6563 proc = XCDR (XCAR (tail));
6564 p = XPROCESS (proc);
6565 if (p->pid == -1)
6566 break;
6567 p = 0;
6570 /* Change the status of the process that was found. */
6571 if (p != 0)
6573 union { int i; WAITTYPE wt; } u;
6574 int clear_desc_flag = 0;
6576 XSETINT (p->tick, ++process_tick);
6577 u.wt = w;
6578 p->raw_status = u.i;
6579 p->raw_status_new = 1;
6581 /* If process has terminated, stop waiting for its output. */
6582 if ((WIFSIGNALED (w) || WIFEXITED (w))
6583 && XINT (p->infd) >= 0)
6584 clear_desc_flag = 1;
6586 /* We use clear_desc_flag to avoid a compiler bug in Microsoft C. */
6587 if (clear_desc_flag)
6589 FD_CLR (XINT (p->infd), &input_wait_mask);
6590 FD_CLR (XINT (p->infd), &non_keyboard_wait_mask);
6593 /* Tell wait_reading_process_output that it needs to wake up and
6594 look around. */
6595 if (input_available_clear_time)
6596 EMACS_SET_SECS_USECS (*input_available_clear_time, 0, 0);
6599 /* There was no asynchronous process found for that pid: we have
6600 a synchronous process. */
6601 else
6603 synch_process_alive = 0;
6605 /* Report the status of the synchronous process. */
6606 if (WIFEXITED (w))
6607 synch_process_retcode = WRETCODE (w);
6608 else if (WIFSIGNALED (w))
6609 synch_process_termsig = WTERMSIG (w);
6611 /* Tell wait_reading_process_output that it needs to wake up and
6612 look around. */
6613 if (input_available_clear_time)
6614 EMACS_SET_SECS_USECS (*input_available_clear_time, 0, 0);
6617 sigchld_end_of_loop:
6620 /* On some systems, we must return right away.
6621 If any more processes want to signal us, we will
6622 get another signal.
6623 Otherwise (on systems that have WNOHANG), loop around
6624 to use up all the processes that have something to tell us. */
6625 #if (defined WINDOWSNT \
6626 || (defined USG && !defined GNU_LINUX \
6627 && !(defined HPUX && defined WNOHANG)))
6628 #if defined (USG) && ! defined (POSIX_SIGNALS)
6629 signal (signo, sigchld_handler);
6630 #endif
6631 errno = old_errno;
6632 return;
6633 #endif /* USG, but not HPUX with WNOHANG */
6636 #endif /* SIGCHLD */
6639 static Lisp_Object
6640 exec_sentinel_unwind (data)
6641 Lisp_Object data;
6643 XPROCESS (XCAR (data))->sentinel = XCDR (data);
6644 return Qnil;
6647 static Lisp_Object
6648 exec_sentinel_error_handler (error)
6649 Lisp_Object error;
6651 cmd_error_internal (error, "error in process sentinel: ");
6652 Vinhibit_quit = Qt;
6653 update_echo_area ();
6654 Fsleep_for (make_number (2), Qnil);
6655 return Qt;
6658 static void
6659 exec_sentinel (proc, reason)
6660 Lisp_Object proc, reason;
6662 Lisp_Object sentinel, obuffer, odeactivate, okeymap;
6663 register struct Lisp_Process *p = XPROCESS (proc);
6664 int count = SPECPDL_INDEX ();
6665 int outer_running_asynch_code = running_asynch_code;
6666 int waiting = waiting_for_user_input_p;
6668 if (inhibit_sentinels)
6669 return;
6671 /* No need to gcpro these, because all we do with them later
6672 is test them for EQness, and none of them should be a string. */
6673 odeactivate = Vdeactivate_mark;
6674 XSETBUFFER (obuffer, current_buffer);
6675 okeymap = current_buffer->keymap;
6677 sentinel = p->sentinel;
6678 if (NILP (sentinel))
6679 return;
6681 /* Zilch the sentinel while it's running, to avoid recursive invocations;
6682 assure that it gets restored no matter how the sentinel exits. */
6683 p->sentinel = Qnil;
6684 record_unwind_protect (exec_sentinel_unwind, Fcons (proc, sentinel));
6685 /* Inhibit quit so that random quits don't screw up a running filter. */
6686 specbind (Qinhibit_quit, Qt);
6687 specbind (Qlast_nonmenu_event, Qt);
6689 /* In case we get recursively called,
6690 and we already saved the match data nonrecursively,
6691 save the same match data in safely recursive fashion. */
6692 if (outer_running_asynch_code)
6694 Lisp_Object tem;
6695 tem = Fmatch_data (Qnil, Qnil, Qnil);
6696 restore_search_regs ();
6697 record_unwind_save_match_data ();
6698 Fset_match_data (tem, Qt);
6701 /* For speed, if a search happens within this code,
6702 save the match data in a special nonrecursive fashion. */
6703 running_asynch_code = 1;
6705 internal_condition_case_1 (read_process_output_call,
6706 Fcons (sentinel,
6707 Fcons (proc, Fcons (reason, Qnil))),
6708 !NILP (Vdebug_on_error) ? Qnil : Qerror,
6709 exec_sentinel_error_handler);
6711 /* If we saved the match data nonrecursively, restore it now. */
6712 restore_search_regs ();
6713 running_asynch_code = outer_running_asynch_code;
6715 Vdeactivate_mark = odeactivate;
6717 /* Restore waiting_for_user_input_p as it was
6718 when we were called, in case the filter clobbered it. */
6719 waiting_for_user_input_p = waiting;
6721 #if 0
6722 if (! EQ (Fcurrent_buffer (), obuffer)
6723 || ! EQ (current_buffer->keymap, okeymap))
6724 #endif
6725 /* But do it only if the caller is actually going to read events.
6726 Otherwise there's no need to make him wake up, and it could
6727 cause trouble (for example it would make sit_for return). */
6728 if (waiting_for_user_input_p == -1)
6729 record_asynch_buffer_change ();
6731 unbind_to (count, Qnil);
6734 /* Report all recent events of a change in process status
6735 (either run the sentinel or output a message).
6736 This is usually done while Emacs is waiting for keyboard input
6737 but can be done at other times. */
6739 static void
6740 status_notify (deleting_process)
6741 struct Lisp_Process *deleting_process;
6743 register Lisp_Object proc, buffer;
6744 Lisp_Object tail, msg;
6745 struct gcpro gcpro1, gcpro2;
6747 tail = Qnil;
6748 msg = Qnil;
6749 /* We need to gcpro tail; if read_process_output calls a filter
6750 which deletes a process and removes the cons to which tail points
6751 from Vprocess_alist, and then causes a GC, tail is an unprotected
6752 reference. */
6753 GCPRO2 (tail, msg);
6755 /* Set this now, so that if new processes are created by sentinels
6756 that we run, we get called again to handle their status changes. */
6757 update_tick = process_tick;
6759 for (tail = Vprocess_alist; !NILP (tail); tail = Fcdr (tail))
6761 Lisp_Object symbol;
6762 register struct Lisp_Process *p;
6764 proc = Fcdr (Fcar (tail));
6765 p = XPROCESS (proc);
6767 if (XINT (p->tick) != XINT (p->update_tick))
6769 XSETINT (p->update_tick, XINT (p->tick));
6771 /* If process is still active, read any output that remains. */
6772 while (! EQ (p->filter, Qt)
6773 && ! EQ (p->status, Qconnect)
6774 && ! EQ (p->status, Qlisten)
6775 && ! EQ (p->command, Qt) /* Network process not stopped. */
6776 && XINT (p->infd) >= 0
6777 && p != deleting_process
6778 && read_process_output (proc, XINT (p->infd)) > 0);
6780 buffer = p->buffer;
6782 /* Get the text to use for the message. */
6783 if (p->raw_status_new)
6784 update_status (p);
6785 msg = status_message (p);
6787 /* If process is terminated, deactivate it or delete it. */
6788 symbol = p->status;
6789 if (CONSP (p->status))
6790 symbol = XCAR (p->status);
6792 if (EQ (symbol, Qsignal) || EQ (symbol, Qexit)
6793 || EQ (symbol, Qclosed))
6795 if (delete_exited_processes)
6796 remove_process (proc);
6797 else
6798 deactivate_process (proc);
6801 /* The actions above may have further incremented p->tick.
6802 So set p->update_tick again
6803 so that an error in the sentinel will not cause
6804 this code to be run again. */
6805 XSETINT (p->update_tick, XINT (p->tick));
6806 /* Now output the message suitably. */
6807 if (!NILP (p->sentinel))
6808 exec_sentinel (proc, msg);
6809 /* Don't bother with a message in the buffer
6810 when a process becomes runnable. */
6811 else if (!EQ (symbol, Qrun) && !NILP (buffer))
6813 Lisp_Object ro, tem;
6814 struct buffer *old = current_buffer;
6815 int opoint, opoint_byte;
6816 int before, before_byte;
6818 ro = XBUFFER (buffer)->read_only;
6820 /* Avoid error if buffer is deleted
6821 (probably that's why the process is dead, too) */
6822 if (NILP (XBUFFER (buffer)->name))
6823 continue;
6824 Fset_buffer (buffer);
6826 opoint = PT;
6827 opoint_byte = PT_BYTE;
6828 /* Insert new output into buffer
6829 at the current end-of-output marker,
6830 thus preserving logical ordering of input and output. */
6831 if (XMARKER (p->mark)->buffer)
6832 Fgoto_char (p->mark);
6833 else
6834 SET_PT_BOTH (ZV, ZV_BYTE);
6836 before = PT;
6837 before_byte = PT_BYTE;
6839 tem = current_buffer->read_only;
6840 current_buffer->read_only = Qnil;
6841 insert_string ("\nProcess ");
6842 Finsert (1, &p->name);
6843 insert_string (" ");
6844 Finsert (1, &msg);
6845 current_buffer->read_only = tem;
6846 set_marker_both (p->mark, p->buffer, PT, PT_BYTE);
6848 if (opoint >= before)
6849 SET_PT_BOTH (opoint + (PT - before),
6850 opoint_byte + (PT_BYTE - before_byte));
6851 else
6852 SET_PT_BOTH (opoint, opoint_byte);
6854 set_buffer_internal (old);
6857 } /* end for */
6859 update_mode_lines++; /* in case buffers use %s in mode-line-format */
6860 redisplay_preserve_echo_area (13);
6862 UNGCPRO;
6866 DEFUN ("set-process-coding-system", Fset_process_coding_system,
6867 Sset_process_coding_system, 1, 3, 0,
6868 doc: /* Set coding systems of PROCESS to DECODING and ENCODING.
6869 DECODING will be used to decode subprocess output and ENCODING to
6870 encode subprocess input. */)
6871 (process, decoding, encoding)
6872 register Lisp_Object process, decoding, encoding;
6874 register struct Lisp_Process *p;
6876 CHECK_PROCESS (process);
6877 p = XPROCESS (process);
6878 if (XINT (p->infd) < 0)
6879 error ("Input file descriptor of %s closed", SDATA (p->name));
6880 if (XINT (p->outfd) < 0)
6881 error ("Output file descriptor of %s closed", SDATA (p->name));
6882 Fcheck_coding_system (decoding);
6883 Fcheck_coding_system (encoding);
6885 p->decode_coding_system = decoding;
6886 p->encode_coding_system = encoding;
6887 setup_process_coding_systems (process);
6889 return Qnil;
6892 DEFUN ("process-coding-system",
6893 Fprocess_coding_system, Sprocess_coding_system, 1, 1, 0,
6894 doc: /* Return a cons of coding systems for decoding and encoding of PROCESS. */)
6895 (process)
6896 register Lisp_Object process;
6898 CHECK_PROCESS (process);
6899 return Fcons (XPROCESS (process)->decode_coding_system,
6900 XPROCESS (process)->encode_coding_system);
6903 DEFUN ("set-process-filter-multibyte", Fset_process_filter_multibyte,
6904 Sset_process_filter_multibyte, 2, 2, 0,
6905 doc: /* Set multibyteness of the strings given to PROCESS's filter.
6906 If FLAG is non-nil, the filter is given multibyte strings.
6907 If FLAG is nil, the filter is given unibyte strings. In this case,
6908 all character code conversion except for end-of-line conversion is
6909 suppressed. */)
6910 (process, flag)
6911 Lisp_Object process, flag;
6913 register struct Lisp_Process *p;
6915 CHECK_PROCESS (process);
6916 p = XPROCESS (process);
6917 p->filter_multibyte = flag;
6918 setup_process_coding_systems (process);
6920 return Qnil;
6923 DEFUN ("process-filter-multibyte-p", Fprocess_filter_multibyte_p,
6924 Sprocess_filter_multibyte_p, 1, 1, 0,
6925 doc: /* Return t if a multibyte string is given to PROCESS's filter.*/)
6926 (process)
6927 Lisp_Object process;
6929 register struct Lisp_Process *p;
6931 CHECK_PROCESS (process);
6932 p = XPROCESS (process);
6934 return (NILP (p->filter_multibyte) ? Qnil : Qt);
6939 /* The first time this is called, assume keyboard input comes from DESC
6940 instead of from where we used to expect it.
6941 Subsequent calls mean assume input keyboard can come from DESC
6942 in addition to other places. */
6944 static int add_keyboard_wait_descriptor_called_flag;
6946 void
6947 add_keyboard_wait_descriptor (desc)
6948 int desc;
6950 if (! add_keyboard_wait_descriptor_called_flag)
6951 FD_CLR (0, &input_wait_mask);
6952 add_keyboard_wait_descriptor_called_flag = 1;
6953 FD_SET (desc, &input_wait_mask);
6954 FD_SET (desc, &non_process_wait_mask);
6955 if (desc > max_keyboard_desc)
6956 max_keyboard_desc = desc;
6959 /* From now on, do not expect DESC to give keyboard input. */
6961 void
6962 delete_keyboard_wait_descriptor (desc)
6963 int desc;
6965 int fd;
6966 int lim = max_keyboard_desc;
6968 FD_CLR (desc, &input_wait_mask);
6969 FD_CLR (desc, &non_process_wait_mask);
6971 if (desc == max_keyboard_desc)
6972 for (fd = 0; fd < lim; fd++)
6973 if (FD_ISSET (fd, &input_wait_mask)
6974 && !FD_ISSET (fd, &non_keyboard_wait_mask))
6975 max_keyboard_desc = fd;
6978 /* Return nonzero if *MASK has a bit set
6979 that corresponds to one of the keyboard input descriptors. */
6981 static int
6982 keyboard_bit_set (mask)
6983 SELECT_TYPE *mask;
6985 int fd;
6987 for (fd = 0; fd <= max_keyboard_desc; fd++)
6988 if (FD_ISSET (fd, mask) && FD_ISSET (fd, &input_wait_mask)
6989 && !FD_ISSET (fd, &non_keyboard_wait_mask))
6990 return 1;
6992 return 0;
6995 void
6996 init_process ()
6998 register int i;
7000 inhibit_sentinels = 0;
7002 #ifdef SIGCHLD
7003 #ifndef CANNOT_DUMP
7004 if (! noninteractive || initialized)
7005 #endif
7006 signal (SIGCHLD, sigchld_handler);
7007 #endif
7009 FD_ZERO (&input_wait_mask);
7010 FD_ZERO (&non_keyboard_wait_mask);
7011 FD_ZERO (&non_process_wait_mask);
7012 max_process_desc = 0;
7014 #ifdef NON_BLOCKING_CONNECT
7015 FD_ZERO (&connect_wait_mask);
7016 num_pending_connects = 0;
7017 #endif
7019 #ifdef ADAPTIVE_READ_BUFFERING
7020 process_output_delay_count = 0;
7021 process_output_skip = 0;
7022 #endif
7024 FD_SET (0, &input_wait_mask);
7026 Vprocess_alist = Qnil;
7027 #ifdef SIGCHLD
7028 deleted_pid_list = Qnil;
7029 #endif
7030 for (i = 0; i < MAXDESC; i++)
7032 chan_process[i] = Qnil;
7033 proc_buffered_char[i] = -1;
7035 bzero (proc_decode_coding_system, sizeof proc_decode_coding_system);
7036 bzero (proc_encode_coding_system, sizeof proc_encode_coding_system);
7037 #ifdef DATAGRAM_SOCKETS
7038 bzero (datagram_address, sizeof datagram_address);
7039 #endif
7041 #ifdef HAVE_SOCKETS
7043 Lisp_Object subfeatures = Qnil;
7044 struct socket_options *sopt;
7046 #define ADD_SUBFEATURE(key, val) \
7047 subfeatures = Fcons (Fcons (key, Fcons (val, Qnil)), subfeatures)
7049 #ifdef NON_BLOCKING_CONNECT
7050 ADD_SUBFEATURE (QCnowait, Qt);
7051 #endif
7052 #ifdef DATAGRAM_SOCKETS
7053 ADD_SUBFEATURE (QCtype, Qdatagram);
7054 #endif
7055 #ifdef HAVE_LOCAL_SOCKETS
7056 ADD_SUBFEATURE (QCfamily, Qlocal);
7057 #endif
7058 ADD_SUBFEATURE (QCfamily, Qipv4);
7059 #ifdef AF_INET6
7060 ADD_SUBFEATURE (QCfamily, Qipv6);
7061 #endif
7062 #ifdef HAVE_GETSOCKNAME
7063 ADD_SUBFEATURE (QCservice, Qt);
7064 #endif
7065 #if !defined(TERM) && (defined(O_NONBLOCK) || defined(O_NDELAY))
7066 ADD_SUBFEATURE (QCserver, Qt);
7067 #endif
7069 for (sopt = socket_options; sopt->name; sopt++)
7070 subfeatures = Fcons (intern (sopt->name), subfeatures);
7072 Fprovide (intern ("make-network-process"), subfeatures);
7074 #endif /* HAVE_SOCKETS */
7076 #if defined (DARWIN) || defined (MAC_OSX)
7077 /* PTYs are broken on Darwin < 6, but are sometimes useful for interactive
7078 processes. As such, we only change the default value. */
7079 if (initialized)
7081 char *release = get_operating_system_release();
7082 if (!release || !release[0] || (release[0] < MIN_PTY_KERNEL_VERSION
7083 && release[1] == '.')) {
7084 Vprocess_connection_type = Qnil;
7087 #endif
7090 void
7091 syms_of_process ()
7093 Qprocessp = intern ("processp");
7094 staticpro (&Qprocessp);
7095 Qrun = intern ("run");
7096 staticpro (&Qrun);
7097 Qstop = intern ("stop");
7098 staticpro (&Qstop);
7099 Qsignal = intern ("signal");
7100 staticpro (&Qsignal);
7102 /* Qexit is already staticpro'd by syms_of_eval; don't staticpro it
7103 here again.
7105 Qexit = intern ("exit");
7106 staticpro (&Qexit); */
7108 Qopen = intern ("open");
7109 staticpro (&Qopen);
7110 Qclosed = intern ("closed");
7111 staticpro (&Qclosed);
7112 Qconnect = intern ("connect");
7113 staticpro (&Qconnect);
7114 Qfailed = intern ("failed");
7115 staticpro (&Qfailed);
7116 Qlisten = intern ("listen");
7117 staticpro (&Qlisten);
7118 Qlocal = intern ("local");
7119 staticpro (&Qlocal);
7120 Qipv4 = intern ("ipv4");
7121 staticpro (&Qipv4);
7122 #ifdef AF_INET6
7123 Qipv6 = intern ("ipv6");
7124 staticpro (&Qipv6);
7125 #endif
7126 Qdatagram = intern ("datagram");
7127 staticpro (&Qdatagram);
7129 QCname = intern (":name");
7130 staticpro (&QCname);
7131 QCbuffer = intern (":buffer");
7132 staticpro (&QCbuffer);
7133 QChost = intern (":host");
7134 staticpro (&QChost);
7135 QCservice = intern (":service");
7136 staticpro (&QCservice);
7137 QCtype = intern (":type");
7138 staticpro (&QCtype);
7139 QClocal = intern (":local");
7140 staticpro (&QClocal);
7141 QCremote = intern (":remote");
7142 staticpro (&QCremote);
7143 QCcoding = intern (":coding");
7144 staticpro (&QCcoding);
7145 QCserver = intern (":server");
7146 staticpro (&QCserver);
7147 QCnowait = intern (":nowait");
7148 staticpro (&QCnowait);
7149 QCsentinel = intern (":sentinel");
7150 staticpro (&QCsentinel);
7151 QClog = intern (":log");
7152 staticpro (&QClog);
7153 QCnoquery = intern (":noquery");
7154 staticpro (&QCnoquery);
7155 QCstop = intern (":stop");
7156 staticpro (&QCstop);
7157 QCoptions = intern (":options");
7158 staticpro (&QCoptions);
7159 QCplist = intern (":plist");
7160 staticpro (&QCplist);
7161 QCfilter_multibyte = intern (":filter-multibyte");
7162 staticpro (&QCfilter_multibyte);
7164 Qlast_nonmenu_event = intern ("last-nonmenu-event");
7165 staticpro (&Qlast_nonmenu_event);
7167 staticpro (&Vprocess_alist);
7168 #ifdef SIGCHLD
7169 staticpro (&deleted_pid_list);
7170 #endif
7172 DEFVAR_BOOL ("delete-exited-processes", &delete_exited_processes,
7173 doc: /* *Non-nil means delete processes immediately when they exit.
7174 A value of nil means don't delete them until `list-processes' is run. */);
7176 delete_exited_processes = 1;
7178 DEFVAR_LISP ("process-connection-type", &Vprocess_connection_type,
7179 doc: /* Control type of device used to communicate with subprocesses.
7180 Values are nil to use a pipe, or t or `pty' to use a pty.
7181 The value has no effect if the system has no ptys or if all ptys are busy:
7182 then a pipe is used in any case.
7183 The value takes effect when `start-process' is called. */);
7184 Vprocess_connection_type = Qt;
7186 #ifdef ADAPTIVE_READ_BUFFERING
7187 DEFVAR_LISP ("process-adaptive-read-buffering", &Vprocess_adaptive_read_buffering,
7188 doc: /* If non-nil, improve receive buffering by delaying after short reads.
7189 On some systems, when Emacs reads the output from a subprocess, the output data
7190 is read in very small blocks, potentially resulting in very poor performance.
7191 This behavior can be remedied to some extent by setting this variable to a
7192 non-nil value, as it will automatically delay reading from such processes, to
7193 allow them to produce more output before Emacs tries to read it.
7194 If the value is t, the delay is reset after each write to the process; any other
7195 non-nil value means that the delay is not reset on write.
7196 The variable takes effect when `start-process' is called. */);
7197 Vprocess_adaptive_read_buffering = Qt;
7198 #endif
7200 defsubr (&Sprocessp);
7201 defsubr (&Sget_process);
7202 defsubr (&Sget_buffer_process);
7203 defsubr (&Sdelete_process);
7204 defsubr (&Sprocess_status);
7205 defsubr (&Sprocess_exit_status);
7206 defsubr (&Sprocess_id);
7207 defsubr (&Sprocess_name);
7208 defsubr (&Sprocess_tty_name);
7209 defsubr (&Sprocess_command);
7210 defsubr (&Sset_process_buffer);
7211 defsubr (&Sprocess_buffer);
7212 defsubr (&Sprocess_mark);
7213 defsubr (&Sset_process_filter);
7214 defsubr (&Sprocess_filter);
7215 defsubr (&Sset_process_sentinel);
7216 defsubr (&Sprocess_sentinel);
7217 defsubr (&Sset_process_window_size);
7218 defsubr (&Sset_process_inherit_coding_system_flag);
7219 defsubr (&Sprocess_inherit_coding_system_flag);
7220 defsubr (&Sset_process_query_on_exit_flag);
7221 defsubr (&Sprocess_query_on_exit_flag);
7222 defsubr (&Sprocess_contact);
7223 defsubr (&Sprocess_plist);
7224 defsubr (&Sset_process_plist);
7225 defsubr (&Slist_processes);
7226 defsubr (&Sprocess_list);
7227 defsubr (&Sstart_process);
7228 #ifdef HAVE_SOCKETS
7229 defsubr (&Sset_network_process_option);
7230 defsubr (&Smake_network_process);
7231 defsubr (&Sformat_network_address);
7232 #endif /* HAVE_SOCKETS */
7233 #if defined(HAVE_SOCKETS) && defined(HAVE_NET_IF_H) && defined(HAVE_SYS_IOCTL_H)
7234 #ifdef SIOCGIFCONF
7235 defsubr (&Snetwork_interface_list);
7236 #endif
7237 #if defined(SIOCGIFADDR) || defined(SIOCGIFHWADDR) || defined(SIOCGIFFLAGS)
7238 defsubr (&Snetwork_interface_info);
7239 #endif
7240 #endif /* HAVE_SOCKETS ... */
7241 #ifdef DATAGRAM_SOCKETS
7242 defsubr (&Sprocess_datagram_address);
7243 defsubr (&Sset_process_datagram_address);
7244 #endif
7245 defsubr (&Saccept_process_output);
7246 defsubr (&Sprocess_send_region);
7247 defsubr (&Sprocess_send_string);
7248 defsubr (&Sinterrupt_process);
7249 defsubr (&Skill_process);
7250 defsubr (&Squit_process);
7251 defsubr (&Sstop_process);
7252 defsubr (&Scontinue_process);
7253 defsubr (&Sprocess_running_child_p);
7254 defsubr (&Sprocess_send_eof);
7255 defsubr (&Ssignal_process);
7256 defsubr (&Swaiting_for_user_input_p);
7257 /* defsubr (&Sprocess_connection); */
7258 defsubr (&Sset_process_coding_system);
7259 defsubr (&Sprocess_coding_system);
7260 defsubr (&Sset_process_filter_multibyte);
7261 defsubr (&Sprocess_filter_multibyte_p);
7265 #else /* not subprocesses */
7267 #include <sys/types.h>
7268 #include <errno.h>
7270 #include "lisp.h"
7271 #include "systime.h"
7272 #include "charset.h"
7273 #include "coding.h"
7274 #include "termopts.h"
7275 #include "sysselect.h"
7277 extern int frame_garbaged;
7279 extern EMACS_TIME timer_check ();
7280 extern int timers_run;
7282 Lisp_Object QCtype;
7284 /* As described above, except assuming that there are no subprocesses:
7286 Wait for timeout to elapse and/or keyboard input to be available.
7288 time_limit is:
7289 timeout in seconds, or
7290 zero for no limit, or
7291 -1 means gobble data immediately available but don't wait for any.
7293 read_kbd is a Lisp_Object:
7294 0 to ignore keyboard input, or
7295 1 to return when input is available, or
7296 -1 means caller will actually read the input, so don't throw to
7297 the quit handler.
7299 see full version for other parameters. We know that wait_proc will
7300 always be NULL, since `subprocesses' isn't defined.
7302 do_display != 0 means redisplay should be done to show subprocess
7303 output that arrives.
7305 Return true iff we received input from any process. */
7308 wait_reading_process_output (time_limit, microsecs, read_kbd, do_display,
7309 wait_for_cell, wait_proc, just_wait_proc)
7310 int time_limit, microsecs, read_kbd, do_display;
7311 Lisp_Object wait_for_cell;
7312 struct Lisp_Process *wait_proc;
7313 int just_wait_proc;
7315 register int nfds;
7316 EMACS_TIME end_time, timeout;
7317 SELECT_TYPE waitchannels;
7318 int xerrno;
7320 /* What does time_limit really mean? */
7321 if (time_limit || microsecs)
7323 EMACS_GET_TIME (end_time);
7324 EMACS_SET_SECS_USECS (timeout, time_limit, microsecs);
7325 EMACS_ADD_TIME (end_time, end_time, timeout);
7328 /* Turn off periodic alarms (in case they are in use)
7329 and then turn off any other atimers,
7330 because the select emulator uses alarms. */
7331 stop_polling ();
7332 turn_on_atimers (0);
7334 while (1)
7336 int timeout_reduced_for_timers = 0;
7338 /* If calling from keyboard input, do not quit
7339 since we want to return C-g as an input character.
7340 Otherwise, do pending quit if requested. */
7341 if (read_kbd >= 0)
7342 QUIT;
7344 /* Exit now if the cell we're waiting for became non-nil. */
7345 if (! NILP (wait_for_cell) && ! NILP (XCAR (wait_for_cell)))
7346 break;
7348 /* Compute time from now till when time limit is up */
7349 /* Exit if already run out */
7350 if (time_limit == -1)
7352 /* -1 specified for timeout means
7353 gobble output available now
7354 but don't wait at all. */
7356 EMACS_SET_SECS_USECS (timeout, 0, 0);
7358 else if (time_limit || microsecs)
7360 EMACS_GET_TIME (timeout);
7361 EMACS_SUB_TIME (timeout, end_time, timeout);
7362 if (EMACS_TIME_NEG_P (timeout))
7363 break;
7365 else
7367 EMACS_SET_SECS_USECS (timeout, 100000, 0);
7370 /* If our caller will not immediately handle keyboard events,
7371 run timer events directly.
7372 (Callers that will immediately read keyboard events
7373 call timer_delay on their own.) */
7374 if (NILP (wait_for_cell))
7376 EMACS_TIME timer_delay;
7380 int old_timers_run = timers_run;
7381 timer_delay = timer_check (1);
7382 if (timers_run != old_timers_run && do_display)
7383 /* We must retry, since a timer may have requeued itself
7384 and that could alter the time delay. */
7385 redisplay_preserve_echo_area (14);
7386 else
7387 break;
7389 while (!detect_input_pending ());
7391 /* If there is unread keyboard input, also return. */
7392 if (read_kbd != 0
7393 && requeued_events_pending_p ())
7394 break;
7396 if (! EMACS_TIME_NEG_P (timer_delay) && time_limit != -1)
7398 EMACS_TIME difference;
7399 EMACS_SUB_TIME (difference, timer_delay, timeout);
7400 if (EMACS_TIME_NEG_P (difference))
7402 timeout = timer_delay;
7403 timeout_reduced_for_timers = 1;
7408 /* Cause C-g and alarm signals to take immediate action,
7409 and cause input available signals to zero out timeout. */
7410 if (read_kbd < 0)
7411 set_waiting_for_input (&timeout);
7413 /* Wait till there is something to do. */
7415 if (! read_kbd && NILP (wait_for_cell))
7416 FD_ZERO (&waitchannels);
7417 else
7418 FD_SET (0, &waitchannels);
7420 /* If a frame has been newly mapped and needs updating,
7421 reprocess its display stuff. */
7422 if (frame_garbaged && do_display)
7424 clear_waiting_for_input ();
7425 redisplay_preserve_echo_area (15);
7426 if (read_kbd < 0)
7427 set_waiting_for_input (&timeout);
7430 if (read_kbd && detect_input_pending ())
7432 nfds = 0;
7433 FD_ZERO (&waitchannels);
7435 else
7436 nfds = select (1, &waitchannels, (SELECT_TYPE *)0, (SELECT_TYPE *)0,
7437 &timeout);
7439 xerrno = errno;
7441 /* Make C-g and alarm signals set flags again */
7442 clear_waiting_for_input ();
7444 /* If we woke up due to SIGWINCH, actually change size now. */
7445 do_pending_window_change (0);
7447 if (time_limit && nfds == 0 && ! timeout_reduced_for_timers)
7448 /* We waited the full specified time, so return now. */
7449 break;
7451 if (nfds == -1)
7453 /* If the system call was interrupted, then go around the
7454 loop again. */
7455 if (xerrno == EINTR)
7456 FD_ZERO (&waitchannels);
7457 else
7458 error ("select error: %s", emacs_strerror (xerrno));
7460 #ifdef sun
7461 else if (nfds > 0 && (waitchannels & 1) && interrupt_input)
7462 /* System sometimes fails to deliver SIGIO. */
7463 kill (getpid (), SIGIO);
7464 #endif
7465 #ifdef SIGIO
7466 if (read_kbd && interrupt_input && (waitchannels & 1))
7467 kill (getpid (), SIGIO);
7468 #endif
7470 /* Check for keyboard input */
7472 if (read_kbd
7473 && detect_input_pending_run_timers (do_display))
7475 swallow_events (do_display);
7476 if (detect_input_pending_run_timers (do_display))
7477 break;
7480 /* If there is unread keyboard input, also return. */
7481 if (read_kbd
7482 && requeued_events_pending_p ())
7483 break;
7485 /* If wait_for_cell. check for keyboard input
7486 but don't run any timers.
7487 ??? (It seems wrong to me to check for keyboard
7488 input at all when wait_for_cell, but the code
7489 has been this way since July 1994.
7490 Try changing this after version 19.31.) */
7491 if (! NILP (wait_for_cell)
7492 && detect_input_pending ())
7494 swallow_events (do_display);
7495 if (detect_input_pending ())
7496 break;
7499 /* Exit now if the cell we're waiting for became non-nil. */
7500 if (! NILP (wait_for_cell) && ! NILP (XCAR (wait_for_cell)))
7501 break;
7504 start_polling ();
7506 return 0;
7510 /* Don't confuse make-docfile by having two doc strings for this function.
7511 make-docfile does not pay attention to #if, for good reason! */
7512 DEFUN ("get-buffer-process", Fget_buffer_process, Sget_buffer_process, 1, 1, 0,
7514 (name)
7515 register Lisp_Object name;
7517 return Qnil;
7520 /* Don't confuse make-docfile by having two doc strings for this function.
7521 make-docfile does not pay attention to #if, for good reason! */
7522 DEFUN ("process-inherit-coding-system-flag",
7523 Fprocess_inherit_coding_system_flag, Sprocess_inherit_coding_system_flag,
7524 1, 1, 0,
7526 (process)
7527 register Lisp_Object process;
7529 /* Ignore the argument and return the value of
7530 inherit-process-coding-system. */
7531 return inherit_process_coding_system ? Qt : Qnil;
7534 /* Kill all processes associated with `buffer'.
7535 If `buffer' is nil, kill all processes.
7536 Since we have no subprocesses, this does nothing. */
7538 void
7539 kill_buffer_processes (buffer)
7540 Lisp_Object buffer;
7544 void
7545 init_process ()
7549 void
7550 syms_of_process ()
7552 QCtype = intern (":type");
7553 staticpro (&QCtype);
7555 defsubr (&Sget_buffer_process);
7556 defsubr (&Sprocess_inherit_coding_system_flag);
7560 #endif /* not subprocesses */
7562 /* arch-tag: 3706c011-7b9a-4117-bd4f-59e7f701a4c4
7563 (do not change this comment) */