(powerpc-apple-darwin*): Use ${CC-cc} instead of
[emacs.git] / src / process.c
blobed0d5fe765bd0f060590e0478d501239680ef4d4
1 /* Asynchronous subprocess control for GNU Emacs.
2 Copyright (C) 1985, 86, 87, 88, 93, 94, 95, 96, 98, 1999,
3 2001, 2002, 2003 Free Software Foundation, Inc.
5 This file is part of GNU Emacs.
7 GNU Emacs is free software; you can redistribute it and/or modify
8 it under the terms of the GNU General Public License as published by
9 the Free Software Foundation; either version 2, or (at your option)
10 any later version.
12 GNU Emacs is distributed in the hope that it will be useful,
13 but WITHOUT ANY WARRANTY; without even the implied warranty of
14 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
15 GNU General Public License for more details.
17 You should have received a copy of the GNU General Public License
18 along with GNU Emacs; see the file COPYING. If not, write to
19 the Free Software Foundation, Inc., 59 Temple Place - Suite 330,
20 Boston, MA 02111-1307, USA. */
23 #include <config.h>
24 #include <signal.h>
26 /* This file is split into two parts by the following preprocessor
27 conditional. The 'then' clause contains all of the support for
28 asynchronous subprocesses. The 'else' clause contains stub
29 versions of some of the asynchronous subprocess routines that are
30 often called elsewhere in Emacs, so we don't have to #ifdef the
31 sections that call them. */
34 #ifdef subprocesses
36 #include <stdio.h>
37 #include <errno.h>
38 #include <setjmp.h>
39 #include <sys/types.h> /* some typedefs are used in sys/file.h */
40 #include <sys/file.h>
41 #include <sys/stat.h>
42 #ifdef HAVE_UNISTD_H
43 #include <unistd.h>
44 #endif
46 #if defined(WINDOWSNT) || defined(UNIX98_PTYS)
47 #include <stdlib.h>
48 #include <fcntl.h>
49 #endif /* not WINDOWSNT */
51 #ifdef HAVE_SOCKETS /* TCP connection support, if kernel can do it */
52 #include <sys/socket.h>
53 #include <netdb.h>
54 #include <netinet/in.h>
55 #include <arpa/inet.h>
56 #ifdef NEED_NET_ERRNO_H
57 #include <net/errno.h>
58 #endif /* NEED_NET_ERRNO_H */
60 /* Are local (unix) sockets supported? */
61 #if defined (HAVE_SYS_UN_H) && !defined (NO_SOCKETS_IN_FILE_SYSTEM)
62 #if !defined (AF_LOCAL) && defined (AF_UNIX)
63 #define AF_LOCAL AF_UNIX
64 #endif
65 #ifdef AF_LOCAL
66 #define HAVE_LOCAL_SOCKETS
67 #include <sys/un.h>
68 #endif
69 #endif
70 #endif /* HAVE_SOCKETS */
72 /* TERM is a poor-man's SLIP, used on GNU/Linux. */
73 #ifdef TERM
74 #include <client.h>
75 #endif
77 /* On some systems, e.g. DGUX, inet_addr returns a 'struct in_addr'. */
78 #ifdef HAVE_BROKEN_INET_ADDR
79 #define IN_ADDR struct in_addr
80 #define NUMERIC_ADDR_ERROR (numeric_addr.s_addr == -1)
81 #else
82 #define IN_ADDR unsigned long
83 #define NUMERIC_ADDR_ERROR (numeric_addr == -1)
84 #endif
86 #if defined(BSD_SYSTEM) || defined(STRIDE)
87 #include <sys/ioctl.h>
88 #if !defined (O_NDELAY) && defined (HAVE_PTYS) && !defined(USG5)
89 #include <fcntl.h>
90 #endif /* HAVE_PTYS and no O_NDELAY */
91 #endif /* BSD_SYSTEM || STRIDE */
93 #ifdef BROKEN_O_NONBLOCK
94 #undef O_NONBLOCK
95 #endif /* BROKEN_O_NONBLOCK */
97 #ifdef NEED_BSDTTY
98 #include <bsdtty.h>
99 #endif
101 /* Can we use SIOCGIFCONF and/or SIOCGIFADDR */
102 #ifdef HAVE_SOCKETS
103 #if defined(HAVE_SYS_IOCTL_H) && defined(HAVE_NET_IF_H)
104 /* sys/ioctl.h may have been included already */
105 #ifndef SIOCGIFADDR
106 #include <sys/ioctl.h>
107 #endif
108 #include <net/if.h>
109 #endif
110 #endif
112 #ifdef IRIS
113 #include <sys/sysmacros.h> /* for "minor" */
114 #endif /* not IRIS */
116 #ifdef HAVE_SYS_WAIT
117 #include <sys/wait.h>
118 #endif
120 #include "systime.h"
121 #include "systty.h"
123 #include "lisp.h"
124 #include "window.h"
125 #include "buffer.h"
126 #include "charset.h"
127 #include "coding.h"
128 #include "process.h"
129 #include "termhooks.h"
130 #include "termopts.h"
131 #include "commands.h"
132 #include "keyboard.h"
133 #include "frame.h"
134 #include "blockinput.h"
135 #include "dispextern.h"
136 #include "composite.h"
137 #include "atimer.h"
139 Lisp_Object Qprocessp;
140 Lisp_Object Qrun, Qstop, Qsignal;
141 Lisp_Object Qopen, Qclosed, Qconnect, Qfailed, Qlisten;
142 Lisp_Object Qlocal, Qdatagram;
143 Lisp_Object QCname, QCbuffer, QChost, QCservice, QCtype;
144 Lisp_Object QClocal, QCremote, QCcoding;
145 Lisp_Object QCserver, QCnowait, QCnoquery, QCstop;
146 Lisp_Object QCsentinel, QClog, QCoptions, QCplist;
147 Lisp_Object QCfilter_multibyte;
148 Lisp_Object Qlast_nonmenu_event;
149 /* QCfamily is declared and initialized in xfaces.c,
150 QCfilter in keyboard.c. */
151 extern Lisp_Object QCfamily, QCfilter;
153 /* Qexit is declared and initialized in eval.c. */
155 /* QCfamily is defined in xfaces.c. */
156 extern Lisp_Object QCfamily;
157 /* QCfilter is defined in keyboard.c. */
158 extern Lisp_Object QCfilter;
160 /* a process object is a network connection when its childp field is neither
161 Qt nor Qnil but is instead a property list (KEY VAL ...). */
163 #ifdef HAVE_SOCKETS
164 #define NETCONN_P(p) (GC_CONSP (XPROCESS (p)->childp))
165 #define NETCONN1_P(p) (GC_CONSP ((p)->childp))
166 #else
167 #define NETCONN_P(p) 0
168 #define NETCONN1_P(p) 0
169 #endif /* HAVE_SOCKETS */
171 /* Define first descriptor number available for subprocesses. */
172 #ifdef VMS
173 #define FIRST_PROC_DESC 1
174 #else /* Not VMS */
175 #define FIRST_PROC_DESC 3
176 #endif
178 /* Define SIGCHLD as an alias for SIGCLD. There are many conditionals
179 testing SIGCHLD. */
181 #if !defined (SIGCHLD) && defined (SIGCLD)
182 #define SIGCHLD SIGCLD
183 #endif /* SIGCLD */
185 #include "syssignal.h"
187 #include "syswait.h"
189 extern void set_waiting_for_input P_ ((EMACS_TIME *));
191 #ifndef USE_CRT_DLL
192 extern int errno;
193 #endif
194 #ifdef VMS
195 extern char *sys_errlist[];
196 #endif
198 #ifndef HAVE_H_ERRNO
199 extern int h_errno;
200 #endif
202 /* t means use pty, nil means use a pipe,
203 maybe other values to come. */
204 static Lisp_Object Vprocess_connection_type;
206 #ifdef SKTPAIR
207 #ifndef HAVE_SOCKETS
208 #include <sys/socket.h>
209 #endif
210 #endif /* SKTPAIR */
212 /* These next two vars are non-static since sysdep.c uses them in the
213 emulation of `select'. */
214 /* Number of events of change of status of a process. */
215 int process_tick;
216 /* Number of events for which the user or sentinel has been notified. */
217 int update_tick;
219 /* Define NON_BLOCKING_CONNECT if we can support non-blocking connects. */
221 #ifdef BROKEN_NON_BLOCKING_CONNECT
222 #undef NON_BLOCKING_CONNECT
223 #else
224 #ifndef NON_BLOCKING_CONNECT
225 #ifdef HAVE_SOCKETS
226 #ifdef HAVE_SELECT
227 #if defined (HAVE_GETPEERNAME) || defined (GNU_LINUX)
228 #if defined (O_NONBLOCK) || defined (O_NDELAY)
229 #if defined (EWOULDBLOCK) || defined (EINPROGRESS)
230 #define NON_BLOCKING_CONNECT
231 #endif /* EWOULDBLOCK || EINPROGRESS */
232 #endif /* O_NONBLOCK || O_NDELAY */
233 #endif /* HAVE_GETPEERNAME || GNU_LINUX */
234 #endif /* HAVE_SELECT */
235 #endif /* HAVE_SOCKETS */
236 #endif /* NON_BLOCKING_CONNECT */
237 #endif /* BROKEN_NON_BLOCKING_CONNECT */
239 /* Define DATAGRAM_SOCKETS if datagrams can be used safely on
240 this system. We need to read full packets, so we need a
241 "non-destructive" select. So we require either native select,
242 or emulation of select using FIONREAD. */
244 #ifdef BROKEN_DATAGRAM_SOCKETS
245 #undef DATAGRAM_SOCKETS
246 #else
247 #ifndef DATAGRAM_SOCKETS
248 #ifdef HAVE_SOCKETS
249 #if defined (HAVE_SELECT) || defined (FIONREAD)
250 #if defined (HAVE_SENDTO) && defined (HAVE_RECVFROM) && defined (EMSGSIZE)
251 #define DATAGRAM_SOCKETS
252 #endif /* HAVE_SENDTO && HAVE_RECVFROM && EMSGSIZE */
253 #endif /* HAVE_SELECT || FIONREAD */
254 #endif /* HAVE_SOCKETS */
255 #endif /* DATAGRAM_SOCKETS */
256 #endif /* BROKEN_DATAGRAM_SOCKETS */
258 #ifdef TERM
259 #undef NON_BLOCKING_CONNECT
260 #undef DATAGRAM_SOCKETS
261 #endif
264 #include "sysselect.h"
266 extern int keyboard_bit_set P_ ((SELECT_TYPE *));
268 /* If we support a window system, turn on the code to poll periodically
269 to detect C-g. It isn't actually used when doing interrupt input. */
270 #ifdef HAVE_WINDOW_SYSTEM
271 #define POLL_FOR_INPUT
272 #endif
274 /* Mask of bits indicating the descriptors that we wait for input on. */
276 static SELECT_TYPE input_wait_mask;
278 /* Mask that excludes keyboard input descriptor (s). */
280 static SELECT_TYPE non_keyboard_wait_mask;
282 /* Mask that excludes process input descriptor (s). */
284 static SELECT_TYPE non_process_wait_mask;
286 /* Mask of bits indicating the descriptors that we wait for connect to
287 complete on. Once they complete, they are removed from this mask
288 and added to the input_wait_mask and non_keyboard_wait_mask. */
290 static SELECT_TYPE connect_wait_mask;
292 /* Number of bits set in connect_wait_mask. */
293 static int num_pending_connects;
295 /* The largest descriptor currently in use for a process object. */
296 static int max_process_desc;
298 /* The largest descriptor currently in use for keyboard input. */
299 static int max_keyboard_desc;
301 /* Nonzero means delete a process right away if it exits. */
302 static int delete_exited_processes;
304 /* Indexed by descriptor, gives the process (if any) for that descriptor */
305 Lisp_Object chan_process[MAXDESC];
307 /* Alist of elements (NAME . PROCESS) */
308 Lisp_Object Vprocess_alist;
310 /* Buffered-ahead input char from process, indexed by channel.
311 -1 means empty (no char is buffered).
312 Used on sys V where the only way to tell if there is any
313 output from the process is to read at least one char.
314 Always -1 on systems that support FIONREAD. */
316 /* Don't make static; need to access externally. */
317 int proc_buffered_char[MAXDESC];
319 /* Table of `struct coding-system' for each process. */
320 static struct coding_system *proc_decode_coding_system[MAXDESC];
321 static struct coding_system *proc_encode_coding_system[MAXDESC];
323 #ifdef DATAGRAM_SOCKETS
324 /* Table of `partner address' for datagram sockets. */
325 struct sockaddr_and_len {
326 struct sockaddr *sa;
327 int len;
328 } datagram_address[MAXDESC];
329 #define DATAGRAM_CHAN_P(chan) (datagram_address[chan].sa != 0)
330 #define DATAGRAM_CONN_P(proc) (PROCESSP (proc) && datagram_address[XINT (XPROCESS (proc)->infd)].sa != 0)
331 #else
332 #define DATAGRAM_CHAN_P(chan) (0)
333 #define DATAGRAM_CONN_P(proc) (0)
334 #endif
336 static Lisp_Object get_process ();
337 static void exec_sentinel ();
339 extern EMACS_TIME timer_check ();
340 extern int timers_run;
342 /* Maximum number of bytes to send to a pty without an eof. */
343 static int pty_max_bytes;
345 extern Lisp_Object Vfile_name_coding_system, Vdefault_file_name_coding_system;
347 #ifdef HAVE_PTYS
348 #ifdef HAVE_PTY_H
349 #include <pty.h>
350 #endif
351 /* The file name of the pty opened by allocate_pty. */
353 static char pty_name[24];
354 #endif
356 /* Compute the Lisp form of the process status, p->status, from
357 the numeric status that was returned by `wait'. */
359 Lisp_Object status_convert ();
361 void
362 update_status (p)
363 struct Lisp_Process *p;
365 union { int i; WAITTYPE wt; } u;
366 u.i = XFASTINT (p->raw_status_low) + (XFASTINT (p->raw_status_high) << 16);
367 p->status = status_convert (u.wt);
368 p->raw_status_low = Qnil;
369 p->raw_status_high = Qnil;
372 /* Convert a process status word in Unix format to
373 the list that we use internally. */
375 Lisp_Object
376 status_convert (w)
377 WAITTYPE w;
379 if (WIFSTOPPED (w))
380 return Fcons (Qstop, Fcons (make_number (WSTOPSIG (w)), Qnil));
381 else if (WIFEXITED (w))
382 return Fcons (Qexit, Fcons (make_number (WRETCODE (w)),
383 WCOREDUMP (w) ? Qt : Qnil));
384 else if (WIFSIGNALED (w))
385 return Fcons (Qsignal, Fcons (make_number (WTERMSIG (w)),
386 WCOREDUMP (w) ? Qt : Qnil));
387 else
388 return Qrun;
391 /* Given a status-list, extract the three pieces of information
392 and store them individually through the three pointers. */
394 void
395 decode_status (l, symbol, code, coredump)
396 Lisp_Object l;
397 Lisp_Object *symbol;
398 int *code;
399 int *coredump;
401 Lisp_Object tem;
403 if (SYMBOLP (l))
405 *symbol = l;
406 *code = 0;
407 *coredump = 0;
409 else
411 *symbol = XCAR (l);
412 tem = XCDR (l);
413 *code = XFASTINT (XCAR (tem));
414 tem = XCDR (tem);
415 *coredump = !NILP (tem);
419 /* Return a string describing a process status list. */
421 Lisp_Object
422 status_message (status)
423 Lisp_Object status;
425 Lisp_Object symbol;
426 int code, coredump;
427 Lisp_Object string, string2;
429 decode_status (status, &symbol, &code, &coredump);
431 if (EQ (symbol, Qsignal) || EQ (symbol, Qstop))
433 char *signame;
434 synchronize_system_messages_locale ();
435 signame = strsignal (code);
436 if (signame == 0)
437 signame = "unknown";
438 string = build_string (signame);
439 string2 = build_string (coredump ? " (core dumped)\n" : "\n");
440 SSET (string, 0, DOWNCASE (SREF (string, 0)));
441 return concat2 (string, string2);
443 else if (EQ (symbol, Qexit))
445 if (code == 0)
446 return build_string ("finished\n");
447 string = Fnumber_to_string (make_number (code));
448 string2 = build_string (coredump ? " (core dumped)\n" : "\n");
449 return concat3 (build_string ("exited abnormally with code "),
450 string, string2);
452 else if (EQ (symbol, Qfailed))
454 string = Fnumber_to_string (make_number (code));
455 string2 = build_string ("\n");
456 return concat3 (build_string ("failed with code "),
457 string, string2);
459 else
460 return Fcopy_sequence (Fsymbol_name (symbol));
463 #ifdef HAVE_PTYS
465 /* Open an available pty, returning a file descriptor.
466 Return -1 on failure.
467 The file name of the terminal corresponding to the pty
468 is left in the variable pty_name. */
471 allocate_pty ()
473 register int c, i;
474 int fd;
476 #ifdef PTY_ITERATION
477 PTY_ITERATION
478 #else
479 for (c = FIRST_PTY_LETTER; c <= 'z'; c++)
480 for (i = 0; i < 16; i++)
481 #endif
483 struct stat stb; /* Used in some PTY_OPEN. */
484 #ifdef PTY_NAME_SPRINTF
485 PTY_NAME_SPRINTF
486 #else
487 sprintf (pty_name, "/dev/pty%c%x", c, i);
488 #endif /* no PTY_NAME_SPRINTF */
490 #ifdef PTY_OPEN
491 PTY_OPEN;
492 #else /* no PTY_OPEN */
494 # ifdef IRIS
495 /* Unusual IRIS code */
496 *ptyv = emacs_open ("/dev/ptc", O_RDWR | O_NDELAY, 0);
497 if (fd < 0)
498 return -1;
499 if (fstat (fd, &stb) < 0)
500 return -1;
501 # else /* not IRIS */
502 { /* Some systems name their pseudoterminals so that there are gaps in
503 the usual sequence - for example, on HP9000/S700 systems, there
504 are no pseudoterminals with names ending in 'f'. So we wait for
505 three failures in a row before deciding that we've reached the
506 end of the ptys. */
507 int failed_count = 0;
509 if (stat (pty_name, &stb) < 0)
511 failed_count++;
512 if (failed_count >= 3)
513 return -1;
515 else
516 failed_count = 0;
518 # ifdef O_NONBLOCK
519 fd = emacs_open (pty_name, O_RDWR | O_NONBLOCK, 0);
520 # else
521 fd = emacs_open (pty_name, O_RDWR | O_NDELAY, 0);
522 # endif
523 # endif /* not IRIS */
525 #endif /* no PTY_OPEN */
527 if (fd >= 0)
529 /* check to make certain that both sides are available
530 this avoids a nasty yet stupid bug in rlogins */
531 #ifdef PTY_TTY_NAME_SPRINTF
532 PTY_TTY_NAME_SPRINTF
533 #else
534 sprintf (pty_name, "/dev/tty%c%x", c, i);
535 #endif /* no PTY_TTY_NAME_SPRINTF */
536 #ifndef UNIPLUS
537 if (access (pty_name, 6) != 0)
539 emacs_close (fd);
540 # if !defined(IRIS) && !defined(__sgi)
541 continue;
542 # else
543 return -1;
544 # endif /* IRIS */
546 #endif /* not UNIPLUS */
547 setup_pty (fd);
548 return fd;
551 return -1;
553 #endif /* HAVE_PTYS */
555 Lisp_Object
556 make_process (name)
557 Lisp_Object name;
559 register Lisp_Object val, tem, name1;
560 register struct Lisp_Process *p;
561 char suffix[10];
562 register int i;
564 p = allocate_process ();
566 XSETINT (p->infd, -1);
567 XSETINT (p->outfd, -1);
568 XSETFASTINT (p->pid, 0);
569 XSETFASTINT (p->tick, 0);
570 XSETFASTINT (p->update_tick, 0);
571 p->raw_status_low = Qnil;
572 p->raw_status_high = Qnil;
573 p->status = Qrun;
574 p->mark = Fmake_marker ();
576 /* If name is already in use, modify it until it is unused. */
578 name1 = name;
579 for (i = 1; ; i++)
581 tem = Fget_process (name1);
582 if (NILP (tem)) break;
583 sprintf (suffix, "<%d>", i);
584 name1 = concat2 (name, build_string (suffix));
586 name = name1;
587 p->name = name;
588 XSETPROCESS (val, p);
589 Vprocess_alist = Fcons (Fcons (name, val), Vprocess_alist);
590 return val;
593 void
594 remove_process (proc)
595 register Lisp_Object proc;
597 register Lisp_Object pair;
599 pair = Frassq (proc, Vprocess_alist);
600 Vprocess_alist = Fdelq (pair, Vprocess_alist);
602 deactivate_process (proc);
605 /* Setup coding systems of PROCESS. */
607 void
608 setup_process_coding_systems (process)
609 Lisp_Object process;
611 struct Lisp_Process *p = XPROCESS (process);
612 int inch = XINT (p->infd);
613 int outch = XINT (p->outfd);
615 if (inch < 0 || outch < 0)
616 return;
618 if (!proc_decode_coding_system[inch])
619 proc_decode_coding_system[inch]
620 = (struct coding_system *) xmalloc (sizeof (struct coding_system));
621 setup_coding_system (p->decode_coding_system,
622 proc_decode_coding_system[inch]);
623 if (! NILP (p->filter))
625 if (NILP (p->filter_multibyte))
626 setup_raw_text_coding_system (proc_decode_coding_system[inch]);
628 else if (BUFFERP (p->buffer))
630 if (NILP (XBUFFER (p->buffer)->enable_multibyte_characters))
631 setup_raw_text_coding_system (proc_decode_coding_system[inch]);
634 if (!proc_encode_coding_system[outch])
635 proc_encode_coding_system[outch]
636 = (struct coding_system *) xmalloc (sizeof (struct coding_system));
637 setup_coding_system (p->encode_coding_system,
638 proc_encode_coding_system[outch]);
641 DEFUN ("processp", Fprocessp, Sprocessp, 1, 1, 0,
642 doc: /* Return t if OBJECT is a process. */)
643 (object)
644 Lisp_Object object;
646 return PROCESSP (object) ? Qt : Qnil;
649 DEFUN ("get-process", Fget_process, Sget_process, 1, 1, 0,
650 doc: /* Return the process named NAME, or nil if there is none. */)
651 (name)
652 register Lisp_Object name;
654 if (PROCESSP (name))
655 return name;
656 CHECK_STRING (name);
657 return Fcdr (Fassoc (name, Vprocess_alist));
660 DEFUN ("get-buffer-process", Fget_buffer_process, Sget_buffer_process, 1, 1, 0,
661 doc: /* Return the (or a) process associated with BUFFER.
662 BUFFER may be a buffer or the name of one. */)
663 (buffer)
664 register Lisp_Object buffer;
666 register Lisp_Object buf, tail, proc;
668 if (NILP (buffer)) return Qnil;
669 buf = Fget_buffer (buffer);
670 if (NILP (buf)) return Qnil;
672 for (tail = Vprocess_alist; !NILP (tail); tail = Fcdr (tail))
674 proc = Fcdr (Fcar (tail));
675 if (PROCESSP (proc) && EQ (XPROCESS (proc)->buffer, buf))
676 return proc;
678 return Qnil;
681 /* This is how commands for the user decode process arguments. It
682 accepts a process, a process name, a buffer, a buffer name, or nil.
683 Buffers denote the first process in the buffer, and nil denotes the
684 current buffer. */
686 static Lisp_Object
687 get_process (name)
688 register Lisp_Object name;
690 register Lisp_Object proc, obj;
691 if (STRINGP (name))
693 obj = Fget_process (name);
694 if (NILP (obj))
695 obj = Fget_buffer (name);
696 if (NILP (obj))
697 error ("Process %s does not exist", SDATA (name));
699 else if (NILP (name))
700 obj = Fcurrent_buffer ();
701 else
702 obj = name;
704 /* Now obj should be either a buffer object or a process object.
706 if (BUFFERP (obj))
708 proc = Fget_buffer_process (obj);
709 if (NILP (proc))
710 error ("Buffer %s has no process", SDATA (XBUFFER (obj)->name));
712 else
714 CHECK_PROCESS (obj);
715 proc = obj;
717 return proc;
720 DEFUN ("delete-process", Fdelete_process, Sdelete_process, 1, 1, 0,
721 doc: /* Delete PROCESS: kill it and forget about it immediately.
722 PROCESS may be a process, a buffer, the name of a process or buffer, or
723 nil, indicating the current buffer's process. */)
724 (process)
725 register Lisp_Object process;
727 process = get_process (process);
728 XPROCESS (process)->raw_status_low = Qnil;
729 XPROCESS (process)->raw_status_high = Qnil;
730 if (NETCONN_P (process))
732 XPROCESS (process)->status = Fcons (Qexit, Fcons (make_number (0), Qnil));
733 XSETINT (XPROCESS (process)->tick, ++process_tick);
735 else if (XINT (XPROCESS (process)->infd) >= 0)
737 Fkill_process (process, Qnil);
738 /* Do this now, since remove_process will make sigchld_handler do nothing. */
739 XPROCESS (process)->status
740 = Fcons (Qsignal, Fcons (make_number (SIGKILL), Qnil));
741 XSETINT (XPROCESS (process)->tick, ++process_tick);
742 status_notify ();
744 remove_process (process);
745 return Qnil;
748 DEFUN ("process-status", Fprocess_status, Sprocess_status, 1, 1, 0,
749 doc: /* Return the status of PROCESS.
750 The returned value is one of the following symbols:
751 run -- for a process that is running.
752 stop -- for a process stopped but continuable.
753 exit -- for a process that has exited.
754 signal -- for a process that has got a fatal signal.
755 open -- for a network stream connection that is open.
756 listen -- for a network stream server that is listening.
757 closed -- for a network stream connection that is closed.
758 connect -- when waiting for a non-blocking connection to complete.
759 failed -- when a non-blocking connection has failed.
760 nil -- if arg is a process name and no such process exists.
761 PROCESS may be a process, a buffer, the name of a process, or
762 nil, indicating the current buffer's process. */)
763 (process)
764 register Lisp_Object process;
766 register struct Lisp_Process *p;
767 register Lisp_Object status;
769 if (STRINGP (process))
770 process = Fget_process (process);
771 else
772 process = get_process (process);
774 if (NILP (process))
775 return process;
777 p = XPROCESS (process);
778 if (!NILP (p->raw_status_low))
779 update_status (p);
780 status = p->status;
781 if (CONSP (status))
782 status = XCAR (status);
783 if (NETCONN1_P (p))
785 if (EQ (status, Qexit))
786 status = Qclosed;
787 else if (EQ (p->command, Qt))
788 status = Qstop;
789 else if (EQ (status, Qrun))
790 status = Qopen;
792 return status;
795 DEFUN ("process-exit-status", Fprocess_exit_status, Sprocess_exit_status,
796 1, 1, 0,
797 doc: /* Return the exit status of PROCESS or the signal number that killed it.
798 If PROCESS has not yet exited or died, return 0. */)
799 (process)
800 register Lisp_Object process;
802 CHECK_PROCESS (process);
803 if (!NILP (XPROCESS (process)->raw_status_low))
804 update_status (XPROCESS (process));
805 if (CONSP (XPROCESS (process)->status))
806 return XCAR (XCDR (XPROCESS (process)->status));
807 return make_number (0);
810 DEFUN ("process-id", Fprocess_id, Sprocess_id, 1, 1, 0,
811 doc: /* Return the process id of PROCESS.
812 This is the pid of the Unix process which PROCESS uses or talks to.
813 For a network connection, this value is nil. */)
814 (process)
815 register Lisp_Object process;
817 CHECK_PROCESS (process);
818 return XPROCESS (process)->pid;
821 DEFUN ("process-name", Fprocess_name, Sprocess_name, 1, 1, 0,
822 doc: /* Return the name of PROCESS, as a string.
823 This is the name of the program invoked in PROCESS,
824 possibly modified to make it unique among process names. */)
825 (process)
826 register Lisp_Object process;
828 CHECK_PROCESS (process);
829 return XPROCESS (process)->name;
832 DEFUN ("process-command", Fprocess_command, Sprocess_command, 1, 1, 0,
833 doc: /* Return the command that was executed to start PROCESS.
834 This is a list of strings, the first string being the program executed
835 and the rest of the strings being the arguments given to it.
836 For a non-child channel, this is nil. */)
837 (process)
838 register Lisp_Object process;
840 CHECK_PROCESS (process);
841 return XPROCESS (process)->command;
844 DEFUN ("process-tty-name", Fprocess_tty_name, Sprocess_tty_name, 1, 1, 0,
845 doc: /* Return the name of the terminal PROCESS uses, or nil if none.
846 This is the terminal that the process itself reads and writes on,
847 not the name of the pty that Emacs uses to talk with that terminal. */)
848 (process)
849 register Lisp_Object process;
851 CHECK_PROCESS (process);
852 return XPROCESS (process)->tty_name;
855 DEFUN ("set-process-buffer", Fset_process_buffer, Sset_process_buffer,
856 2, 2, 0,
857 doc: /* Set buffer associated with PROCESS to BUFFER (a buffer, or nil). */)
858 (process, buffer)
859 register Lisp_Object process, buffer;
861 struct Lisp_Process *p;
863 CHECK_PROCESS (process);
864 if (!NILP (buffer))
865 CHECK_BUFFER (buffer);
866 p = XPROCESS (process);
867 p->buffer = buffer;
868 if (NETCONN1_P (p))
869 p->childp = Fplist_put (p->childp, QCbuffer, buffer);
870 setup_process_coding_systems (process);
871 return buffer;
874 DEFUN ("process-buffer", Fprocess_buffer, Sprocess_buffer,
875 1, 1, 0,
876 doc: /* Return the buffer PROCESS is associated with.
877 Output from PROCESS is inserted in this buffer unless PROCESS has a filter. */)
878 (process)
879 register Lisp_Object process;
881 CHECK_PROCESS (process);
882 return XPROCESS (process)->buffer;
885 DEFUN ("process-mark", Fprocess_mark, Sprocess_mark,
886 1, 1, 0,
887 doc: /* Return the marker for the end of the last output from PROCESS. */)
888 (process)
889 register Lisp_Object process;
891 CHECK_PROCESS (process);
892 return XPROCESS (process)->mark;
895 DEFUN ("set-process-filter", Fset_process_filter, Sset_process_filter,
896 2, 2, 0,
897 doc: /* Give PROCESS the filter function FILTER; nil means no filter.
898 t means stop accepting output from the process.
900 When a process has a filter, its buffer is not used for output.
901 Instead, each time it does output, the entire string of output is
902 passed to the filter.
904 The filter gets two arguments: the process and the string of output.
905 The string argument is normally a multibyte string, except:
906 - if the process' input coding system is no-conversion or raw-text,
907 it is a unibyte string (the non-converted input), or else
908 - if `default-enable-multibyte-characters' is nil, it is a unibyte
909 string (the result of converting the decoded input multibyte
910 string to unibyte with `string-make-unibyte'). */)
911 (process, filter)
912 register Lisp_Object process, filter;
914 struct Lisp_Process *p;
916 CHECK_PROCESS (process);
917 p = XPROCESS (process);
919 /* Don't signal an error if the process' input file descriptor
920 is closed. This could make debugging Lisp more difficult,
921 for example when doing something like
923 (setq process (start-process ...))
924 (debug)
925 (set-process-filter process ...) */
927 if (XINT (p->infd) >= 0)
929 if (EQ (filter, Qt) && !EQ (p->status, Qlisten))
931 FD_CLR (XINT (p->infd), &input_wait_mask);
932 FD_CLR (XINT (p->infd), &non_keyboard_wait_mask);
934 else if (EQ (p->filter, Qt)
935 && !EQ (p->command, Qt)) /* Network process not stopped. */
937 FD_SET (XINT (p->infd), &input_wait_mask);
938 FD_SET (XINT (p->infd), &non_keyboard_wait_mask);
942 p->filter = filter;
943 if (NETCONN1_P (p))
944 p->childp = Fplist_put (p->childp, QCfilter, filter);
945 setup_process_coding_systems (process);
946 return filter;
949 DEFUN ("process-filter", Fprocess_filter, Sprocess_filter,
950 1, 1, 0,
951 doc: /* Returns the filter function of PROCESS; nil if none.
952 See `set-process-filter' for more info on filter functions. */)
953 (process)
954 register Lisp_Object process;
956 CHECK_PROCESS (process);
957 return XPROCESS (process)->filter;
960 DEFUN ("set-process-sentinel", Fset_process_sentinel, Sset_process_sentinel,
961 2, 2, 0,
962 doc: /* Give PROCESS the sentinel SENTINEL; nil for none.
963 The sentinel is called as a function when the process changes state.
964 It gets two arguments: the process, and a string describing the change. */)
965 (process, sentinel)
966 register Lisp_Object process, sentinel;
968 struct Lisp_Process *p;
970 CHECK_PROCESS (process);
971 p = XPROCESS (process);
973 p->sentinel = sentinel;
974 if (NETCONN1_P (p))
975 p->childp = Fplist_put (p->childp, QCsentinel, sentinel);
976 return sentinel;
979 DEFUN ("process-sentinel", Fprocess_sentinel, Sprocess_sentinel,
980 1, 1, 0,
981 doc: /* Return the sentinel of PROCESS; nil if none.
982 See `set-process-sentinel' for more info on sentinels. */)
983 (process)
984 register Lisp_Object process;
986 CHECK_PROCESS (process);
987 return XPROCESS (process)->sentinel;
990 DEFUN ("set-process-window-size", Fset_process_window_size,
991 Sset_process_window_size, 3, 3, 0,
992 doc: /* Tell PROCESS that it has logical window size HEIGHT and WIDTH. */)
993 (process, height, width)
994 register Lisp_Object process, height, width;
996 CHECK_PROCESS (process);
997 CHECK_NATNUM (height);
998 CHECK_NATNUM (width);
1000 if (XINT (XPROCESS (process)->infd) < 0
1001 || set_window_size (XINT (XPROCESS (process)->infd),
1002 XINT (height), XINT (width)) <= 0)
1003 return Qnil;
1004 else
1005 return Qt;
1008 DEFUN ("set-process-inherit-coding-system-flag",
1009 Fset_process_inherit_coding_system_flag,
1010 Sset_process_inherit_coding_system_flag, 2, 2, 0,
1011 doc: /* Determine whether buffer of PROCESS will inherit coding-system.
1012 If the second argument FLAG is non-nil, then the variable
1013 `buffer-file-coding-system' of the buffer associated with PROCESS
1014 will be bound to the value of the coding system used to decode
1015 the process output.
1017 This is useful when the coding system specified for the process buffer
1018 leaves either the character code conversion or the end-of-line conversion
1019 unspecified, or if the coding system used to decode the process output
1020 is more appropriate for saving the process buffer.
1022 Binding the variable `inherit-process-coding-system' to non-nil before
1023 starting the process is an alternative way of setting the inherit flag
1024 for the process which will run. */)
1025 (process, flag)
1026 register Lisp_Object process, flag;
1028 CHECK_PROCESS (process);
1029 XPROCESS (process)->inherit_coding_system_flag = flag;
1030 return flag;
1033 DEFUN ("process-inherit-coding-system-flag",
1034 Fprocess_inherit_coding_system_flag, Sprocess_inherit_coding_system_flag,
1035 1, 1, 0,
1036 doc: /* Return the value of inherit-coding-system flag for PROCESS.
1037 If this flag is t, `buffer-file-coding-system' of the buffer
1038 associated with PROCESS will inherit the coding system used to decode
1039 the process output. */)
1040 (process)
1041 register Lisp_Object process;
1043 CHECK_PROCESS (process);
1044 return XPROCESS (process)->inherit_coding_system_flag;
1047 DEFUN ("set-process-query-on-exit-flag",
1048 Fset_process_query_on_exit_flag, Sset_process_query_on_exit_flag,
1049 2, 2, 0,
1050 doc: /* Specify if query is needed for PROCESS when Emacs is exited.
1051 If the second argument FLAG is non-nil, emacs will query the user before
1052 exiting if PROCESS is running. */)
1053 (process, flag)
1054 register Lisp_Object process, flag;
1056 CHECK_PROCESS (process);
1057 XPROCESS (process)->kill_without_query = Fnull (flag);
1058 return flag;
1061 DEFUN ("process-query-on-exit-flag",
1062 Fprocess_query_on_exit_flag, Sprocess_query_on_exit_flag,
1063 1, 1, 0,
1064 doc: /* Return the current value of query on exit flag for PROCESS. */)
1065 (process)
1066 register Lisp_Object process;
1068 CHECK_PROCESS (process);
1069 return Fnull (XPROCESS (process)->kill_without_query);
1072 #ifdef DATAGRAM_SOCKETS
1073 Lisp_Object Fprocess_datagram_address ();
1074 #endif
1076 DEFUN ("process-contact", Fprocess_contact, Sprocess_contact,
1077 1, 2, 0,
1078 doc: /* Return the contact info of PROCESS; t for a real child.
1079 For a net connection, the value depends on the optional KEY arg.
1080 If KEY is nil, value is a cons cell of the form (HOST SERVICE),
1081 if KEY is t, the complete contact information for the connection is
1082 returned, else the specific value for the keyword KEY is returned.
1083 See `make-network-process' for a list of keywords. */)
1084 (process, key)
1085 register Lisp_Object process, key;
1087 Lisp_Object contact;
1089 CHECK_PROCESS (process);
1090 contact = XPROCESS (process)->childp;
1092 #ifdef DATAGRAM_SOCKETS
1093 if (DATAGRAM_CONN_P (process)
1094 && (EQ (key, Qt) || EQ (key, QCremote)))
1095 contact = Fplist_put (contact, QCremote,
1096 Fprocess_datagram_address (process));
1097 #endif
1099 if (!NETCONN_P (process) || EQ (key, Qt))
1100 return contact;
1101 if (NILP (key))
1102 return Fcons (Fplist_get (contact, QChost),
1103 Fcons (Fplist_get (contact, QCservice), Qnil));
1104 return Fplist_get (contact, key);
1107 DEFUN ("process-plist", Fprocess_plist, Sprocess_plist,
1108 1, 1, 0,
1109 doc: /* Return the plist of PROCESS. */)
1110 (process)
1111 register Lisp_Object process;
1113 CHECK_PROCESS (process);
1114 return XPROCESS (process)->plist;
1117 DEFUN ("set-process-plist", Fset_process_plist, Sset_process_plist,
1118 2, 2, 0,
1119 doc: /* Replace the plist of PROCESS with PLIST. Returns PLIST. */)
1120 (process, plist)
1121 register Lisp_Object process, plist;
1123 CHECK_PROCESS (process);
1124 CHECK_LIST (plist);
1126 XPROCESS (process)->plist = plist;
1127 return plist;
1130 #if 0 /* Turned off because we don't currently record this info
1131 in the process. Perhaps add it. */
1132 DEFUN ("process-connection", Fprocess_connection, Sprocess_connection, 1, 1, 0,
1133 doc: /* Return the connection type of PROCESS.
1134 The value is nil for a pipe, t or `pty' for a pty, or `stream' for
1135 a socket connection. */)
1136 (process)
1137 Lisp_Object process;
1139 return XPROCESS (process)->type;
1141 #endif
1143 #ifdef HAVE_SOCKETS
1144 DEFUN ("format-network-address", Fformat_network_address, Sformat_network_address,
1145 1, 2, 0,
1146 doc: /* Convert network ADDRESS from internal format to a string.
1147 If optional second argument OMIT-PORT is non-nil, don't include a port
1148 number in the string; in this case, interpret a 4 element vector as an
1149 IP address. Returns nil if format of ADDRESS is invalid. */)
1150 (address, omit_port)
1151 Lisp_Object address, omit_port;
1153 if (NILP (address))
1154 return Qnil;
1156 if (STRINGP (address)) /* AF_LOCAL */
1157 return address;
1159 if (VECTORP (address)) /* AF_INET */
1161 register struct Lisp_Vector *p = XVECTOR (address);
1162 Lisp_Object args[6];
1163 int nargs, i;
1165 if (!NILP (omit_port) && (p->size == 4 || p->size == 5))
1167 args[0] = build_string ("%d.%d.%d.%d");
1168 nargs = 4;
1170 else if (p->size == 5)
1172 args[0] = build_string ("%d.%d.%d.%d:%d");
1173 nargs = 5;
1175 else
1176 return Qnil;
1178 for (i = 0; i < nargs; i++)
1179 args[i+1] = p->contents[i];
1180 return Fformat (nargs+1, args);
1183 if (CONSP (address))
1185 Lisp_Object args[2];
1186 args[0] = build_string ("<Family %d>");
1187 args[1] = Fcar (address);
1188 return Fformat (2, args);
1192 return Qnil;
1194 #endif
1196 Lisp_Object
1197 list_processes_1 (query_only)
1198 Lisp_Object query_only;
1200 register Lisp_Object tail, tem;
1201 Lisp_Object proc, minspace, tem1;
1202 register struct Lisp_Process *p;
1203 char tembuf[300];
1204 int w_proc, w_buffer, w_tty;
1205 Lisp_Object i_status, i_buffer, i_tty, i_command;
1207 w_proc = 4; /* Proc */
1208 w_buffer = 6; /* Buffer */
1209 w_tty = 0; /* Omit if no ttys */
1211 for (tail = Vprocess_alist; !NILP (tail); tail = Fcdr (tail))
1213 int i;
1215 proc = Fcdr (Fcar (tail));
1216 p = XPROCESS (proc);
1217 if (NILP (p->childp))
1218 continue;
1219 if (!NILP (query_only) && !NILP (p->kill_without_query))
1220 continue;
1221 if (STRINGP (p->name)
1222 && ( i = SCHARS (p->name), (i > w_proc)))
1223 w_proc = i;
1224 if (!NILP (p->buffer))
1226 if (NILP (XBUFFER (p->buffer)->name) && w_buffer < 8)
1227 w_buffer = 8; /* (Killed) */
1228 else if ((i = SCHARS (XBUFFER (p->buffer)->name), (i > w_buffer)))
1229 w_buffer = i;
1231 if (STRINGP (p->tty_name)
1232 && (i = SCHARS (p->tty_name), (i > w_tty)))
1233 w_tty = i;
1236 XSETFASTINT (i_status, w_proc + 1);
1237 XSETFASTINT (i_buffer, XFASTINT (i_status) + 9);
1238 if (w_tty)
1240 XSETFASTINT (i_tty, XFASTINT (i_buffer) + w_buffer + 1);
1241 XSETFASTINT (i_command, XFASTINT (i_buffer) + w_tty + 1);
1242 } else {
1243 i_tty = Qnil;
1244 XSETFASTINT (i_command, XFASTINT (i_buffer) + w_buffer + 1);
1247 XSETFASTINT (minspace, 1);
1249 set_buffer_internal (XBUFFER (Vstandard_output));
1250 Fbuffer_disable_undo (Vstandard_output);
1252 current_buffer->truncate_lines = Qt;
1254 write_string ("Proc", -1);
1255 Findent_to (i_status, minspace); write_string ("Status", -1);
1256 Findent_to (i_buffer, minspace); write_string ("Buffer", -1);
1257 if (!NILP (i_tty))
1259 Findent_to (i_tty, minspace); write_string ("Tty", -1);
1261 Findent_to (i_command, minspace); write_string ("Command", -1);
1262 write_string ("\n", -1);
1264 write_string ("----", -1);
1265 Findent_to (i_status, minspace); write_string ("------", -1);
1266 Findent_to (i_buffer, minspace); write_string ("------", -1);
1267 if (!NILP (i_tty))
1269 Findent_to (i_tty, minspace); write_string ("---", -1);
1271 Findent_to (i_command, minspace); write_string ("-------", -1);
1272 write_string ("\n", -1);
1274 for (tail = Vprocess_alist; !NILP (tail); tail = Fcdr (tail))
1276 Lisp_Object symbol;
1278 proc = Fcdr (Fcar (tail));
1279 p = XPROCESS (proc);
1280 if (NILP (p->childp))
1281 continue;
1282 if (!NILP (query_only) && !NILP (p->kill_without_query))
1283 continue;
1285 Finsert (1, &p->name);
1286 Findent_to (i_status, minspace);
1288 if (!NILP (p->raw_status_low))
1289 update_status (p);
1290 symbol = p->status;
1291 if (CONSP (p->status))
1292 symbol = XCAR (p->status);
1295 if (EQ (symbol, Qsignal))
1297 Lisp_Object tem;
1298 tem = Fcar (Fcdr (p->status));
1299 #ifdef VMS
1300 if (XINT (tem) < NSIG)
1301 write_string (sys_errlist [XINT (tem)], -1);
1302 else
1303 #endif
1304 Fprinc (symbol, Qnil);
1306 else if (NETCONN1_P (p))
1308 if (EQ (symbol, Qexit))
1309 write_string ("closed", -1);
1310 else if (EQ (p->command, Qt))
1311 write_string ("stopped", -1);
1312 else if (EQ (symbol, Qrun))
1313 write_string ("open", -1);
1314 else
1315 Fprinc (symbol, Qnil);
1317 else
1318 Fprinc (symbol, Qnil);
1320 if (EQ (symbol, Qexit))
1322 Lisp_Object tem;
1323 tem = Fcar (Fcdr (p->status));
1324 if (XFASTINT (tem))
1326 sprintf (tembuf, " %d", (int) XFASTINT (tem));
1327 write_string (tembuf, -1);
1331 if (EQ (symbol, Qsignal) || EQ (symbol, Qexit))
1332 remove_process (proc);
1334 Findent_to (i_buffer, minspace);
1335 if (NILP (p->buffer))
1336 insert_string ("(none)");
1337 else if (NILP (XBUFFER (p->buffer)->name))
1338 insert_string ("(Killed)");
1339 else
1340 Finsert (1, &XBUFFER (p->buffer)->name);
1342 if (!NILP (i_tty))
1344 Findent_to (i_tty, minspace);
1345 if (STRINGP (p->tty_name))
1346 Finsert (1, &p->tty_name);
1349 Findent_to (i_command, minspace);
1351 if (EQ (p->status, Qlisten))
1353 Lisp_Object port = Fplist_get (p->childp, QCservice);
1354 if (INTEGERP (port))
1355 port = Fnumber_to_string (port);
1356 if (NILP (port))
1357 port = Fformat_network_address (Fplist_get (p->childp, QClocal), Qnil);
1358 sprintf (tembuf, "(network %s server on %s)\n",
1359 (DATAGRAM_CHAN_P (XINT (p->infd)) ? "datagram" : "stream"),
1360 (STRINGP (port) ? (char *)SDATA (port) : "?"));
1361 insert_string (tembuf);
1363 else if (NETCONN1_P (p))
1365 /* For a local socket, there is no host name,
1366 so display service instead. */
1367 Lisp_Object host = Fplist_get (p->childp, QChost);
1368 if (!STRINGP (host))
1370 host = Fplist_get (p->childp, QCservice);
1371 if (INTEGERP (host))
1372 host = Fnumber_to_string (host);
1374 if (NILP (host))
1375 host = Fformat_network_address (Fplist_get (p->childp, QCremote), Qnil);
1376 sprintf (tembuf, "(network %s connection to %s)\n",
1377 (DATAGRAM_CHAN_P (XINT (p->infd)) ? "datagram" : "stream"),
1378 (STRINGP (host) ? (char *)SDATA (host) : "?"));
1379 insert_string (tembuf);
1381 else
1383 tem = p->command;
1384 while (1)
1386 tem1 = Fcar (tem);
1387 Finsert (1, &tem1);
1388 tem = Fcdr (tem);
1389 if (NILP (tem))
1390 break;
1391 insert_string (" ");
1393 insert_string ("\n");
1396 return Qnil;
1399 DEFUN ("list-processes", Flist_processes, Slist_processes, 0, 1, "P",
1400 doc: /* Display a list of all processes.
1401 If optional argument QUERY-ONLY is non-nil, only processes with
1402 the query-on-exit flag set will be listed.
1403 Any process listed as exited or signaled is actually eliminated
1404 after the listing is made. */)
1405 (query_only)
1406 Lisp_Object query_only;
1408 internal_with_output_to_temp_buffer ("*Process List*",
1409 list_processes_1, query_only);
1410 return Qnil;
1413 DEFUN ("process-list", Fprocess_list, Sprocess_list, 0, 0, 0,
1414 doc: /* Return a list of all processes. */)
1417 return Fmapcar (Qcdr, Vprocess_alist);
1420 /* Starting asynchronous inferior processes. */
1422 static Lisp_Object start_process_unwind ();
1424 DEFUN ("start-process", Fstart_process, Sstart_process, 3, MANY, 0,
1425 doc: /* Start a program in a subprocess. Return the process object for it.
1426 NAME is name for process. It is modified if necessary to make it unique.
1427 BUFFER is the buffer or (buffer-name) to associate with the process.
1428 Process output goes at end of that buffer, unless you specify
1429 an output stream or filter function to handle the output.
1430 BUFFER may be also nil, meaning that this process is not associated
1431 with any buffer.
1432 Third arg is program file name. It is searched for in PATH.
1433 Remaining arguments are strings to give program as arguments.
1435 usage: (start-process NAME BUFFER PROGRAM &rest PROGRAM-ARGS) */)
1436 (nargs, args)
1437 int nargs;
1438 register Lisp_Object *args;
1440 Lisp_Object buffer, name, program, proc, current_dir, tem;
1441 #ifdef VMS
1442 register unsigned char *new_argv;
1443 int len;
1444 #else
1445 register unsigned char **new_argv;
1446 #endif
1447 register int i;
1448 int count = SPECPDL_INDEX ();
1450 buffer = args[1];
1451 if (!NILP (buffer))
1452 buffer = Fget_buffer_create (buffer);
1454 /* Make sure that the child will be able to chdir to the current
1455 buffer's current directory, or its unhandled equivalent. We
1456 can't just have the child check for an error when it does the
1457 chdir, since it's in a vfork.
1459 We have to GCPRO around this because Fexpand_file_name and
1460 Funhandled_file_name_directory might call a file name handling
1461 function. The argument list is protected by the caller, so all
1462 we really have to worry about is buffer. */
1464 struct gcpro gcpro1, gcpro2;
1466 current_dir = current_buffer->directory;
1468 GCPRO2 (buffer, current_dir);
1470 current_dir
1471 = expand_and_dir_to_file (Funhandled_file_name_directory (current_dir),
1472 Qnil);
1473 if (NILP (Ffile_accessible_directory_p (current_dir)))
1474 report_file_error ("Setting current directory",
1475 Fcons (current_buffer->directory, Qnil));
1477 UNGCPRO;
1480 name = args[0];
1481 CHECK_STRING (name);
1483 program = args[2];
1485 CHECK_STRING (program);
1487 proc = make_process (name);
1488 /* If an error occurs and we can't start the process, we want to
1489 remove it from the process list. This means that each error
1490 check in create_process doesn't need to call remove_process
1491 itself; it's all taken care of here. */
1492 record_unwind_protect (start_process_unwind, proc);
1494 XPROCESS (proc)->childp = Qt;
1495 XPROCESS (proc)->plist = Qnil;
1496 XPROCESS (proc)->command_channel_p = Qnil;
1497 XPROCESS (proc)->buffer = buffer;
1498 XPROCESS (proc)->sentinel = Qnil;
1499 XPROCESS (proc)->filter = Qnil;
1500 XPROCESS (proc)->filter_multibyte
1501 = buffer_defaults.enable_multibyte_characters;
1502 XPROCESS (proc)->command = Flist (nargs - 2, args + 2);
1504 /* Make the process marker point into the process buffer (if any). */
1505 if (!NILP (buffer))
1506 set_marker_both (XPROCESS (proc)->mark, buffer,
1507 BUF_ZV (XBUFFER (buffer)),
1508 BUF_ZV_BYTE (XBUFFER (buffer)));
1511 /* Decide coding systems for communicating with the process. Here
1512 we don't setup the structure coding_system nor pay attention to
1513 unibyte mode. They are done in create_process. */
1515 /* Qt denotes we have not yet called Ffind_operation_coding_system. */
1516 Lisp_Object coding_systems = Qt;
1517 Lisp_Object val, *args2;
1518 struct gcpro gcpro1, gcpro2;
1520 val = Vcoding_system_for_read;
1521 if (NILP (val))
1523 args2 = (Lisp_Object *) alloca ((nargs + 1) * sizeof *args2);
1524 args2[0] = Qstart_process;
1525 for (i = 0; i < nargs; i++) args2[i + 1] = args[i];
1526 GCPRO2 (proc, current_dir);
1527 coding_systems = Ffind_operation_coding_system (nargs + 1, args2);
1528 UNGCPRO;
1529 if (CONSP (coding_systems))
1530 val = XCAR (coding_systems);
1531 else if (CONSP (Vdefault_process_coding_system))
1532 val = XCAR (Vdefault_process_coding_system);
1534 XPROCESS (proc)->decode_coding_system = val;
1536 val = Vcoding_system_for_write;
1537 if (NILP (val))
1539 if (EQ (coding_systems, Qt))
1541 args2 = (Lisp_Object *) alloca ((nargs + 1) * sizeof args2);
1542 args2[0] = Qstart_process;
1543 for (i = 0; i < nargs; i++) args2[i + 1] = args[i];
1544 GCPRO2 (proc, current_dir);
1545 coding_systems = Ffind_operation_coding_system (nargs + 1, args2);
1546 UNGCPRO;
1548 if (CONSP (coding_systems))
1549 val = XCDR (coding_systems);
1550 else if (CONSP (Vdefault_process_coding_system))
1551 val = XCDR (Vdefault_process_coding_system);
1553 XPROCESS (proc)->encode_coding_system = val;
1556 #ifdef VMS
1557 /* Make a one member argv with all args concatenated
1558 together separated by a blank. */
1559 len = SBYTES (program) + 2;
1560 for (i = 3; i < nargs; i++)
1562 tem = args[i];
1563 CHECK_STRING (tem);
1564 len += SBYTES (tem) + 1; /* count the blank */
1566 new_argv = (unsigned char *) alloca (len);
1567 strcpy (new_argv, SDATA (program));
1568 for (i = 3; i < nargs; i++)
1570 tem = args[i];
1571 CHECK_STRING (tem);
1572 strcat (new_argv, " ");
1573 strcat (new_argv, SDATA (tem));
1575 /* Need to add code here to check for program existence on VMS */
1577 #else /* not VMS */
1578 new_argv = (unsigned char **) alloca ((nargs - 1) * sizeof (char *));
1580 /* If program file name is not absolute, search our path for it.
1581 Put the name we will really use in TEM. */
1582 if (!IS_DIRECTORY_SEP (SREF (program, 0))
1583 && !(SCHARS (program) > 1
1584 && IS_DEVICE_SEP (SREF (program, 1))))
1586 struct gcpro gcpro1, gcpro2, gcpro3, gcpro4;
1588 tem = Qnil;
1589 GCPRO4 (name, program, buffer, current_dir);
1590 openp (Vexec_path, program, Vexec_suffixes, &tem, make_number (X_OK));
1591 UNGCPRO;
1592 if (NILP (tem))
1593 report_file_error ("Searching for program", Fcons (program, Qnil));
1594 tem = Fexpand_file_name (tem, Qnil);
1596 else
1598 if (!NILP (Ffile_directory_p (program)))
1599 error ("Specified program for new process is a directory");
1600 tem = program;
1603 /* If program file name starts with /: for quoting a magic name,
1604 discard that. */
1605 if (SBYTES (tem) > 2 && SREF (tem, 0) == '/'
1606 && SREF (tem, 1) == ':')
1607 tem = Fsubstring (tem, make_number (2), Qnil);
1609 /* Encode the file name and put it in NEW_ARGV.
1610 That's where the child will use it to execute the program. */
1611 tem = ENCODE_FILE (tem);
1612 new_argv[0] = SDATA (tem);
1614 /* Here we encode arguments by the coding system used for sending
1615 data to the process. We don't support using different coding
1616 systems for encoding arguments and for encoding data sent to the
1617 process. */
1619 for (i = 3; i < nargs; i++)
1621 tem = args[i];
1622 CHECK_STRING (tem);
1623 if (STRING_MULTIBYTE (tem))
1624 tem = (code_convert_string_norecord
1625 (tem, XPROCESS (proc)->encode_coding_system, 1));
1626 new_argv[i - 2] = SDATA (tem);
1628 new_argv[i - 2] = 0;
1629 #endif /* not VMS */
1631 XPROCESS (proc)->decoding_buf = make_uninit_string (0);
1632 XPROCESS (proc)->decoding_carryover = make_number (0);
1633 XPROCESS (proc)->encoding_buf = make_uninit_string (0);
1634 XPROCESS (proc)->encoding_carryover = make_number (0);
1636 XPROCESS (proc)->inherit_coding_system_flag
1637 = (NILP (buffer) || !inherit_process_coding_system
1638 ? Qnil : Qt);
1640 create_process (proc, (char **) new_argv, current_dir);
1642 return unbind_to (count, proc);
1645 /* This function is the unwind_protect form for Fstart_process. If
1646 PROC doesn't have its pid set, then we know someone has signaled
1647 an error and the process wasn't started successfully, so we should
1648 remove it from the process list. */
1649 static Lisp_Object
1650 start_process_unwind (proc)
1651 Lisp_Object proc;
1653 if (!PROCESSP (proc))
1654 abort ();
1656 /* Was PROC started successfully? */
1657 if (XINT (XPROCESS (proc)->pid) <= 0)
1658 remove_process (proc);
1660 return Qnil;
1663 void
1664 create_process_1 (timer)
1665 struct atimer *timer;
1667 /* Nothing to do. */
1671 #if 0 /* This doesn't work; see the note before sigchld_handler. */
1672 #ifdef USG
1673 #ifdef SIGCHLD
1674 /* Mimic blocking of signals on system V, which doesn't really have it. */
1676 /* Nonzero means we got a SIGCHLD when it was supposed to be blocked. */
1677 int sigchld_deferred;
1679 SIGTYPE
1680 create_process_sigchld ()
1682 signal (SIGCHLD, create_process_sigchld);
1684 sigchld_deferred = 1;
1686 #endif
1687 #endif
1688 #endif
1690 #ifndef VMS /* VMS version of this function is in vmsproc.c. */
1691 void
1692 create_process (process, new_argv, current_dir)
1693 Lisp_Object process;
1694 char **new_argv;
1695 Lisp_Object current_dir;
1697 int pid, inchannel, outchannel;
1698 int sv[2];
1699 #ifdef POSIX_SIGNALS
1700 sigset_t procmask;
1701 sigset_t blocked;
1702 struct sigaction sigint_action;
1703 struct sigaction sigquit_action;
1704 #ifdef AIX
1705 struct sigaction sighup_action;
1706 #endif
1707 #else /* !POSIX_SIGNALS */
1708 #if 0
1709 #ifdef SIGCHLD
1710 SIGTYPE (*sigchld)();
1711 #endif
1712 #endif /* 0 */
1713 #endif /* !POSIX_SIGNALS */
1714 /* Use volatile to protect variables from being clobbered by longjmp. */
1715 volatile int forkin, forkout;
1716 volatile int pty_flag = 0;
1717 #ifndef USE_CRT_DLL
1718 extern char **environ;
1719 #endif
1721 inchannel = outchannel = -1;
1723 #ifdef HAVE_PTYS
1724 if (!NILP (Vprocess_connection_type))
1725 outchannel = inchannel = allocate_pty ();
1727 if (inchannel >= 0)
1729 #if ! defined (USG) || defined (USG_SUBTTY_WORKS)
1730 /* On most USG systems it does not work to open the pty's tty here,
1731 then close it and reopen it in the child. */
1732 #ifdef O_NOCTTY
1733 /* Don't let this terminal become our controlling terminal
1734 (in case we don't have one). */
1735 forkout = forkin = emacs_open (pty_name, O_RDWR | O_NOCTTY, 0);
1736 #else
1737 forkout = forkin = emacs_open (pty_name, O_RDWR, 0);
1738 #endif
1739 if (forkin < 0)
1740 report_file_error ("Opening pty", Qnil);
1741 #else
1742 forkin = forkout = -1;
1743 #endif /* not USG, or USG_SUBTTY_WORKS */
1744 pty_flag = 1;
1746 else
1747 #endif /* HAVE_PTYS */
1748 #ifdef SKTPAIR
1750 if (socketpair (AF_UNIX, SOCK_STREAM, 0, sv) < 0)
1751 report_file_error ("Opening socketpair", Qnil);
1752 outchannel = inchannel = sv[0];
1753 forkout = forkin = sv[1];
1755 #else /* not SKTPAIR */
1757 int tem;
1758 tem = pipe (sv);
1759 if (tem < 0)
1760 report_file_error ("Creating pipe", Qnil);
1761 inchannel = sv[0];
1762 forkout = sv[1];
1763 tem = pipe (sv);
1764 if (tem < 0)
1766 emacs_close (inchannel);
1767 emacs_close (forkout);
1768 report_file_error ("Creating pipe", Qnil);
1770 outchannel = sv[1];
1771 forkin = sv[0];
1773 #endif /* not SKTPAIR */
1775 #if 0
1776 /* Replaced by close_process_descs */
1777 set_exclusive_use (inchannel);
1778 set_exclusive_use (outchannel);
1779 #endif
1781 /* Stride people say it's a mystery why this is needed
1782 as well as the O_NDELAY, but that it fails without this. */
1783 #if defined (STRIDE) || (defined (pfa) && defined (HAVE_PTYS))
1785 int one = 1;
1786 ioctl (inchannel, FIONBIO, &one);
1788 #endif
1790 #ifdef O_NONBLOCK
1791 fcntl (inchannel, F_SETFL, O_NONBLOCK);
1792 fcntl (outchannel, F_SETFL, O_NONBLOCK);
1793 #else
1794 #ifdef O_NDELAY
1795 fcntl (inchannel, F_SETFL, O_NDELAY);
1796 fcntl (outchannel, F_SETFL, O_NDELAY);
1797 #endif
1798 #endif
1800 /* Record this as an active process, with its channels.
1801 As a result, child_setup will close Emacs's side of the pipes. */
1802 chan_process[inchannel] = process;
1803 XSETINT (XPROCESS (process)->infd, inchannel);
1804 XSETINT (XPROCESS (process)->outfd, outchannel);
1806 /* Previously we recorded the tty descriptor used in the subprocess.
1807 It was only used for getting the foreground tty process, so now
1808 we just reopen the device (see emacs_get_tty_pgrp) as this is
1809 more portable (see USG_SUBTTY_WORKS above). */
1811 XPROCESS (process)->pty_flag = (pty_flag ? Qt : Qnil);
1812 XPROCESS (process)->status = Qrun;
1813 setup_process_coding_systems (process);
1815 /* Delay interrupts until we have a chance to store
1816 the new fork's pid in its process structure */
1817 #ifdef POSIX_SIGNALS
1818 sigemptyset (&blocked);
1819 #ifdef SIGCHLD
1820 sigaddset (&blocked, SIGCHLD);
1821 #endif
1822 #ifdef HAVE_WORKING_VFORK
1823 /* On many hosts (e.g. Solaris 2.4), if a vforked child calls `signal',
1824 this sets the parent's signal handlers as well as the child's.
1825 So delay all interrupts whose handlers the child might munge,
1826 and record the current handlers so they can be restored later. */
1827 sigaddset (&blocked, SIGINT ); sigaction (SIGINT , 0, &sigint_action );
1828 sigaddset (&blocked, SIGQUIT); sigaction (SIGQUIT, 0, &sigquit_action);
1829 #ifdef AIX
1830 sigaddset (&blocked, SIGHUP ); sigaction (SIGHUP , 0, &sighup_action );
1831 #endif
1832 #endif /* HAVE_WORKING_VFORK */
1833 sigprocmask (SIG_BLOCK, &blocked, &procmask);
1834 #else /* !POSIX_SIGNALS */
1835 #ifdef SIGCHLD
1836 #ifdef BSD4_1
1837 sighold (SIGCHLD);
1838 #else /* not BSD4_1 */
1839 #if defined (BSD_SYSTEM) || defined (UNIPLUS) || defined (HPUX)
1840 sigsetmask (sigmask (SIGCHLD));
1841 #else /* ordinary USG */
1842 #if 0
1843 sigchld_deferred = 0;
1844 sigchld = signal (SIGCHLD, create_process_sigchld);
1845 #endif
1846 #endif /* ordinary USG */
1847 #endif /* not BSD4_1 */
1848 #endif /* SIGCHLD */
1849 #endif /* !POSIX_SIGNALS */
1851 FD_SET (inchannel, &input_wait_mask);
1852 FD_SET (inchannel, &non_keyboard_wait_mask);
1853 if (inchannel > max_process_desc)
1854 max_process_desc = inchannel;
1856 /* Until we store the proper pid, enable sigchld_handler
1857 to recognize an unknown pid as standing for this process.
1858 It is very important not to let this `marker' value stay
1859 in the table after this function has returned; if it does
1860 it might cause call-process to hang and subsequent asynchronous
1861 processes to get their return values scrambled. */
1862 XSETINT (XPROCESS (process)->pid, -1);
1864 BLOCK_INPUT;
1867 /* child_setup must clobber environ on systems with true vfork.
1868 Protect it from permanent change. */
1869 char **save_environ = environ;
1871 current_dir = ENCODE_FILE (current_dir);
1873 #ifndef WINDOWSNT
1874 pid = vfork ();
1875 if (pid == 0)
1876 #endif /* not WINDOWSNT */
1878 int xforkin = forkin;
1879 int xforkout = forkout;
1881 #if 0 /* This was probably a mistake--it duplicates code later on,
1882 but fails to handle all the cases. */
1883 /* Make sure SIGCHLD is not blocked in the child. */
1884 sigsetmask (SIGEMPTYMASK);
1885 #endif
1887 /* Make the pty be the controlling terminal of the process. */
1888 #ifdef HAVE_PTYS
1889 /* First, disconnect its current controlling terminal. */
1890 #ifdef HAVE_SETSID
1891 /* We tried doing setsid only if pty_flag, but it caused
1892 process_set_signal to fail on SGI when using a pipe. */
1893 setsid ();
1894 /* Make the pty's terminal the controlling terminal. */
1895 if (pty_flag)
1897 #ifdef TIOCSCTTY
1898 /* We ignore the return value
1899 because faith@cs.unc.edu says that is necessary on Linux. */
1900 ioctl (xforkin, TIOCSCTTY, 0);
1901 #endif
1903 #else /* not HAVE_SETSID */
1904 #ifdef USG
1905 /* It's very important to call setpgrp here and no time
1906 afterwards. Otherwise, we lose our controlling tty which
1907 is set when we open the pty. */
1908 setpgrp ();
1909 #endif /* USG */
1910 #endif /* not HAVE_SETSID */
1911 #if defined (HAVE_TERMIOS) && defined (LDISC1)
1912 if (pty_flag && xforkin >= 0)
1914 struct termios t;
1915 tcgetattr (xforkin, &t);
1916 t.c_lflag = LDISC1;
1917 if (tcsetattr (xforkin, TCSANOW, &t) < 0)
1918 emacs_write (1, "create_process/tcsetattr LDISC1 failed\n", 39);
1920 #else
1921 #if defined (NTTYDISC) && defined (TIOCSETD)
1922 if (pty_flag && xforkin >= 0)
1924 /* Use new line discipline. */
1925 int ldisc = NTTYDISC;
1926 ioctl (xforkin, TIOCSETD, &ldisc);
1928 #endif
1929 #endif
1930 #ifdef TIOCNOTTY
1931 /* In 4.3BSD, the TIOCSPGRP bug has been fixed, and now you
1932 can do TIOCSPGRP only to the process's controlling tty. */
1933 if (pty_flag)
1935 /* I wonder: would just ioctl (0, TIOCNOTTY, 0) work here?
1936 I can't test it since I don't have 4.3. */
1937 int j = emacs_open ("/dev/tty", O_RDWR, 0);
1938 ioctl (j, TIOCNOTTY, 0);
1939 emacs_close (j);
1940 #ifndef USG
1941 /* In order to get a controlling terminal on some versions
1942 of BSD, it is necessary to put the process in pgrp 0
1943 before it opens the terminal. */
1944 #ifdef HAVE_SETPGID
1945 setpgid (0, 0);
1946 #else
1947 setpgrp (0, 0);
1948 #endif
1949 #endif
1951 #endif /* TIOCNOTTY */
1953 #if !defined (RTU) && !defined (UNIPLUS) && !defined (DONT_REOPEN_PTY)
1954 /*** There is a suggestion that this ought to be a
1955 conditional on TIOCSPGRP,
1956 or !(defined (HAVE_SETSID) && defined (TIOCSCTTY)).
1957 Trying the latter gave the wrong results on Debian GNU/Linux 1.1;
1958 that system does seem to need this code, even though
1959 both HAVE_SETSID and TIOCSCTTY are defined. */
1960 /* Now close the pty (if we had it open) and reopen it.
1961 This makes the pty the controlling terminal of the subprocess. */
1962 if (pty_flag)
1964 #ifdef SET_CHILD_PTY_PGRP
1965 int pgrp = getpid ();
1966 #endif
1968 /* I wonder if emacs_close (emacs_open (pty_name, ...))
1969 would work? */
1970 if (xforkin >= 0)
1971 emacs_close (xforkin);
1972 xforkout = xforkin = emacs_open (pty_name, O_RDWR, 0);
1974 if (xforkin < 0)
1976 emacs_write (1, "Couldn't open the pty terminal ", 31);
1977 emacs_write (1, pty_name, strlen (pty_name));
1978 emacs_write (1, "\n", 1);
1979 _exit (1);
1982 #ifdef SET_CHILD_PTY_PGRP
1983 ioctl (xforkin, TIOCSPGRP, &pgrp);
1984 ioctl (xforkout, TIOCSPGRP, &pgrp);
1985 #endif
1987 #endif /* not UNIPLUS and not RTU and not DONT_REOPEN_PTY */
1989 #ifdef SETUP_SLAVE_PTY
1990 if (pty_flag)
1992 SETUP_SLAVE_PTY;
1994 #endif /* SETUP_SLAVE_PTY */
1995 #ifdef AIX
1996 /* On AIX, we've disabled SIGHUP above once we start a child on a pty.
1997 Now reenable it in the child, so it will die when we want it to. */
1998 if (pty_flag)
1999 signal (SIGHUP, SIG_DFL);
2000 #endif
2001 #endif /* HAVE_PTYS */
2003 signal (SIGINT, SIG_DFL);
2004 signal (SIGQUIT, SIG_DFL);
2006 /* Stop blocking signals in the child. */
2007 #ifdef POSIX_SIGNALS
2008 sigprocmask (SIG_SETMASK, &procmask, 0);
2009 #else /* !POSIX_SIGNALS */
2010 #ifdef SIGCHLD
2011 #ifdef BSD4_1
2012 sigrelse (SIGCHLD);
2013 #else /* not BSD4_1 */
2014 #if defined (BSD_SYSTEM) || defined (UNIPLUS) || defined (HPUX)
2015 sigsetmask (SIGEMPTYMASK);
2016 #else /* ordinary USG */
2017 #if 0
2018 signal (SIGCHLD, sigchld);
2019 #endif
2020 #endif /* ordinary USG */
2021 #endif /* not BSD4_1 */
2022 #endif /* SIGCHLD */
2023 #endif /* !POSIX_SIGNALS */
2025 if (pty_flag)
2026 child_setup_tty (xforkout);
2027 #ifdef WINDOWSNT
2028 pid = child_setup (xforkin, xforkout, xforkout,
2029 new_argv, 1, current_dir);
2030 #else /* not WINDOWSNT */
2031 child_setup (xforkin, xforkout, xforkout,
2032 new_argv, 1, current_dir);
2033 #endif /* not WINDOWSNT */
2035 environ = save_environ;
2038 UNBLOCK_INPUT;
2040 /* This runs in the Emacs process. */
2041 if (pid < 0)
2043 if (forkin >= 0)
2044 emacs_close (forkin);
2045 if (forkin != forkout && forkout >= 0)
2046 emacs_close (forkout);
2048 else
2050 /* vfork succeeded. */
2051 XSETFASTINT (XPROCESS (process)->pid, pid);
2053 #ifdef WINDOWSNT
2054 register_child (pid, inchannel);
2055 #endif /* WINDOWSNT */
2057 /* If the subfork execv fails, and it exits,
2058 this close hangs. I don't know why.
2059 So have an interrupt jar it loose. */
2061 struct atimer *timer;
2062 EMACS_TIME offset;
2064 stop_polling ();
2065 EMACS_SET_SECS_USECS (offset, 1, 0);
2066 timer = start_atimer (ATIMER_RELATIVE, offset, create_process_1, 0);
2068 if (forkin >= 0)
2069 emacs_close (forkin);
2071 cancel_atimer (timer);
2072 start_polling ();
2075 if (forkin != forkout && forkout >= 0)
2076 emacs_close (forkout);
2078 #ifdef HAVE_PTYS
2079 if (pty_flag)
2080 XPROCESS (process)->tty_name = build_string (pty_name);
2081 else
2082 #endif
2083 XPROCESS (process)->tty_name = Qnil;
2086 /* Restore the signal state whether vfork succeeded or not.
2087 (We will signal an error, below, if it failed.) */
2088 #ifdef POSIX_SIGNALS
2089 #ifdef HAVE_WORKING_VFORK
2090 /* Restore the parent's signal handlers. */
2091 sigaction (SIGINT, &sigint_action, 0);
2092 sigaction (SIGQUIT, &sigquit_action, 0);
2093 #ifdef AIX
2094 sigaction (SIGHUP, &sighup_action, 0);
2095 #endif
2096 #endif /* HAVE_WORKING_VFORK */
2097 /* Stop blocking signals in the parent. */
2098 sigprocmask (SIG_SETMASK, &procmask, 0);
2099 #else /* !POSIX_SIGNALS */
2100 #ifdef SIGCHLD
2101 #ifdef BSD4_1
2102 sigrelse (SIGCHLD);
2103 #else /* not BSD4_1 */
2104 #if defined (BSD_SYSTEM) || defined (UNIPLUS) || defined (HPUX)
2105 sigsetmask (SIGEMPTYMASK);
2106 #else /* ordinary USG */
2107 #if 0
2108 signal (SIGCHLD, sigchld);
2109 /* Now really handle any of these signals
2110 that came in during this function. */
2111 if (sigchld_deferred)
2112 kill (getpid (), SIGCHLD);
2113 #endif
2114 #endif /* ordinary USG */
2115 #endif /* not BSD4_1 */
2116 #endif /* SIGCHLD */
2117 #endif /* !POSIX_SIGNALS */
2119 /* Now generate the error if vfork failed. */
2120 if (pid < 0)
2121 report_file_error ("Doing vfork", Qnil);
2123 #endif /* not VMS */
2126 #ifdef HAVE_SOCKETS
2128 /* Convert an internal struct sockaddr to a lisp object (vector or string).
2129 The address family of sa is not included in the result. */
2131 static Lisp_Object
2132 conv_sockaddr_to_lisp (sa, len)
2133 struct sockaddr *sa;
2134 int len;
2136 Lisp_Object address;
2137 int i;
2138 unsigned char *cp;
2139 register struct Lisp_Vector *p;
2141 switch (sa->sa_family)
2143 case AF_INET:
2145 struct sockaddr_in *sin = (struct sockaddr_in *) sa;
2146 len = sizeof (sin->sin_addr) + 1;
2147 address = Fmake_vector (make_number (len), Qnil);
2148 p = XVECTOR (address);
2149 p->contents[--len] = make_number (ntohs (sin->sin_port));
2150 cp = (unsigned char *)&sin->sin_addr;
2151 break;
2153 #ifdef HAVE_LOCAL_SOCKETS
2154 case AF_LOCAL:
2156 struct sockaddr_un *sockun = (struct sockaddr_un *) sa;
2157 for (i = 0; i < sizeof (sockun->sun_path); i++)
2158 if (sockun->sun_path[i] == 0)
2159 break;
2160 return make_unibyte_string (sockun->sun_path, i);
2162 #endif
2163 default:
2164 len -= sizeof (sa->sa_family);
2165 address = Fcons (make_number (sa->sa_family),
2166 Fmake_vector (make_number (len), Qnil));
2167 p = XVECTOR (XCDR (address));
2168 cp = (unsigned char *) sa + sizeof (sa->sa_family);
2169 break;
2172 i = 0;
2173 while (i < len)
2174 p->contents[i++] = make_number (*cp++);
2176 return address;
2180 /* Get family and required size for sockaddr structure to hold ADDRESS. */
2182 static int
2183 get_lisp_to_sockaddr_size (address, familyp)
2184 Lisp_Object address;
2185 int *familyp;
2187 register struct Lisp_Vector *p;
2189 if (VECTORP (address))
2191 p = XVECTOR (address);
2192 if (p->size == 5)
2194 *familyp = AF_INET;
2195 return sizeof (struct sockaddr_in);
2198 #ifdef HAVE_LOCAL_SOCKETS
2199 else if (STRINGP (address))
2201 *familyp = AF_LOCAL;
2202 return sizeof (struct sockaddr_un);
2204 #endif
2205 else if (CONSP (address) && INTEGERP (XCAR (address)) && VECTORP (XCDR (address)))
2207 struct sockaddr *sa;
2208 *familyp = XINT (XCAR (address));
2209 p = XVECTOR (XCDR (address));
2210 return p->size + sizeof (sa->sa_family);
2212 return 0;
2215 /* Convert an address object (vector or string) to an internal sockaddr.
2216 Format of address has already been validated by size_lisp_to_sockaddr. */
2218 static void
2219 conv_lisp_to_sockaddr (family, address, sa, len)
2220 int family;
2221 Lisp_Object address;
2222 struct sockaddr *sa;
2223 int len;
2225 register struct Lisp_Vector *p;
2226 register unsigned char *cp = NULL;
2227 register int i;
2229 bzero (sa, len);
2230 sa->sa_family = family;
2232 if (VECTORP (address))
2234 p = XVECTOR (address);
2235 if (family == AF_INET)
2237 struct sockaddr_in *sin = (struct sockaddr_in *) sa;
2238 len = sizeof (sin->sin_addr) + 1;
2239 i = XINT (p->contents[--len]);
2240 sin->sin_port = htons (i);
2241 cp = (unsigned char *)&sin->sin_addr;
2244 else if (STRINGP (address))
2246 #ifdef HAVE_LOCAL_SOCKETS
2247 if (family == AF_LOCAL)
2249 struct sockaddr_un *sockun = (struct sockaddr_un *) sa;
2250 cp = SDATA (address);
2251 for (i = 0; i < sizeof (sockun->sun_path) && *cp; i++)
2252 sockun->sun_path[i] = *cp++;
2254 #endif
2255 return;
2257 else
2259 p = XVECTOR (XCDR (address));
2260 cp = (unsigned char *)sa + sizeof (sa->sa_family);
2263 for (i = 0; i < len; i++)
2264 if (INTEGERP (p->contents[i]))
2265 *cp++ = XFASTINT (p->contents[i]) & 0xff;
2268 #ifdef DATAGRAM_SOCKETS
2269 DEFUN ("process-datagram-address", Fprocess_datagram_address, Sprocess_datagram_address,
2270 1, 1, 0,
2271 doc: /* Get the current datagram address associated with PROCESS. */)
2272 (process)
2273 Lisp_Object process;
2275 int channel;
2277 CHECK_PROCESS (process);
2279 if (!DATAGRAM_CONN_P (process))
2280 return Qnil;
2282 channel = XINT (XPROCESS (process)->infd);
2283 return conv_sockaddr_to_lisp (datagram_address[channel].sa,
2284 datagram_address[channel].len);
2287 DEFUN ("set-process-datagram-address", Fset_process_datagram_address, Sset_process_datagram_address,
2288 2, 2, 0,
2289 doc: /* Set the datagram address for PROCESS to ADDRESS.
2290 Returns nil upon error setting address, ADDRESS otherwise. */)
2291 (process, address)
2292 Lisp_Object process, address;
2294 int channel;
2295 int family, len;
2297 CHECK_PROCESS (process);
2299 if (!DATAGRAM_CONN_P (process))
2300 return Qnil;
2302 channel = XINT (XPROCESS (process)->infd);
2304 len = get_lisp_to_sockaddr_size (address, &family);
2305 if (datagram_address[channel].len != len)
2306 return Qnil;
2307 conv_lisp_to_sockaddr (family, address, datagram_address[channel].sa, len);
2308 return address;
2310 #endif
2313 static struct socket_options {
2314 /* The name of this option. Should be lowercase version of option
2315 name without SO_ prefix. */
2316 char *name;
2317 /* Option level SOL_... */
2318 int optlevel;
2319 /* Option number SO_... */
2320 int optnum;
2321 enum { SOPT_UNKNOWN, SOPT_BOOL, SOPT_INT, SOPT_IFNAME, SOPT_LINGER } opttype;
2322 enum { OPIX_NONE=0, OPIX_MISC=1, OPIX_REUSEADDR=2 } optbit;
2323 } socket_options[] =
2325 #ifdef SO_BINDTODEVICE
2326 { ":bindtodevice", SOL_SOCKET, SO_BINDTODEVICE, SOPT_IFNAME, OPIX_MISC },
2327 #endif
2328 #ifdef SO_BROADCAST
2329 { ":broadcast", SOL_SOCKET, SO_BROADCAST, SOPT_BOOL, OPIX_MISC },
2330 #endif
2331 #ifdef SO_DONTROUTE
2332 { ":dontroute", SOL_SOCKET, SO_DONTROUTE, SOPT_BOOL, OPIX_MISC },
2333 #endif
2334 #ifdef SO_KEEPALIVE
2335 { ":keepalive", SOL_SOCKET, SO_KEEPALIVE, SOPT_BOOL, OPIX_MISC },
2336 #endif
2337 #ifdef SO_LINGER
2338 { ":linger", SOL_SOCKET, SO_LINGER, SOPT_LINGER, OPIX_MISC },
2339 #endif
2340 #ifdef SO_OOBINLINE
2341 { ":oobinline", SOL_SOCKET, SO_OOBINLINE, SOPT_BOOL, OPIX_MISC },
2342 #endif
2343 #ifdef SO_PRIORITY
2344 { ":priority", SOL_SOCKET, SO_PRIORITY, SOPT_INT, OPIX_MISC },
2345 #endif
2346 #ifdef SO_REUSEADDR
2347 { ":reuseaddr", SOL_SOCKET, SO_REUSEADDR, SOPT_BOOL, OPIX_REUSEADDR },
2348 #endif
2349 { 0, 0, 0, SOPT_UNKNOWN, OPIX_NONE }
2352 /* Set option OPT to value VAL on socket S.
2354 Returns (1<<socket_options[OPT].optbit) if option is known, 0 otherwise.
2355 Signals an error if setting a known option fails.
2358 static int
2359 set_socket_option (s, opt, val)
2360 int s;
2361 Lisp_Object opt, val;
2363 char *name;
2364 struct socket_options *sopt;
2365 int ret = 0;
2367 CHECK_SYMBOL (opt);
2369 name = (char *) SDATA (SYMBOL_NAME (opt));
2370 for (sopt = socket_options; sopt->name; sopt++)
2371 if (strcmp (name, sopt->name) == 0)
2372 break;
2374 switch (sopt->opttype)
2376 case SOPT_BOOL:
2378 int optval;
2379 optval = NILP (val) ? 0 : 1;
2380 ret = setsockopt (s, sopt->optlevel, sopt->optnum,
2381 &optval, sizeof (optval));
2382 break;
2385 case SOPT_INT:
2387 int optval;
2388 if (INTEGERP (val))
2389 optval = XINT (val);
2390 else
2391 error ("Bad option value for %s", name);
2392 ret = setsockopt (s, sopt->optlevel, sopt->optnum,
2393 &optval, sizeof (optval));
2394 break;
2397 #ifdef SO_BINDTODEVICE
2398 case SOPT_IFNAME:
2400 char devname[IFNAMSIZ+1];
2402 /* This is broken, at least in the Linux 2.4 kernel.
2403 To unbind, the arg must be a zero integer, not the empty string.
2404 This should work on all systems. KFS. 2003-09-23. */
2405 bzero (devname, sizeof devname);
2406 if (STRINGP (val))
2408 char *arg = (char *) SDATA (val);
2409 int len = min (strlen (arg), IFNAMSIZ);
2410 bcopy (arg, devname, len);
2412 else if (!NILP (val))
2413 error ("Bad option value for %s", name);
2414 ret = setsockopt (s, sopt->optlevel, sopt->optnum,
2415 devname, IFNAMSIZ);
2416 break;
2418 #endif
2420 #ifdef SO_LINGER
2421 case SOPT_LINGER:
2423 struct linger linger;
2425 linger.l_onoff = 1;
2426 linger.l_linger = 0;
2427 if (INTEGERP (val))
2428 linger.l_linger = XINT (val);
2429 else
2430 linger.l_onoff = NILP (val) ? 0 : 1;
2431 ret = setsockopt (s, sopt->optlevel, sopt->optnum,
2432 &linger, sizeof (linger));
2433 break;
2435 #endif
2437 default:
2438 return 0;
2441 if (ret < 0)
2442 report_file_error ("Cannot set network option",
2443 Fcons (opt, Fcons (val, Qnil)));
2444 return (1 << sopt->optbit);
2448 DEFUN ("set-network-process-option",
2449 Fset_network_process_option, Sset_network_process_option,
2450 3, 4, 0,
2451 doc: /* For network process PROCESS set option OPTION to value VALUE.
2452 See `make-network-process' for a list of options and values.
2453 If optional fourth arg NO-ERROR is non-nil, don't signal an error if
2454 OPTION is not a supported option, return nil instead; otherwise return t. */)
2455 (process, option, value, no_error)
2456 Lisp_Object process, option, value;
2457 Lisp_Object no_error;
2459 int s;
2460 struct Lisp_Process *p;
2462 CHECK_PROCESS (process);
2463 p = XPROCESS (process);
2464 if (!NETCONN1_P (p))
2465 error ("Process is not a network process");
2467 s = XINT (p->infd);
2468 if (s < 0)
2469 error ("Process is not running");
2471 if (set_socket_option (s, option, value))
2473 p->childp = Fplist_put (p->childp, option, value);
2474 return Qt;
2477 if (NILP (no_error))
2478 error ("Unknown or unsupported option");
2480 return Qnil;
2484 /* A version of request_sigio suitable for a record_unwind_protect. */
2486 Lisp_Object
2487 unwind_request_sigio (dummy)
2488 Lisp_Object dummy;
2490 if (interrupt_input)
2491 request_sigio ();
2492 return Qnil;
2495 /* Create a network stream/datagram client/server process. Treated
2496 exactly like a normal process when reading and writing. Primary
2497 differences are in status display and process deletion. A network
2498 connection has no PID; you cannot signal it. All you can do is
2499 stop/continue it and deactivate/close it via delete-process */
2501 DEFUN ("make-network-process", Fmake_network_process, Smake_network_process,
2502 0, MANY, 0,
2503 doc: /* Create and return a network server or client process.
2505 In Emacs, network connections are represented by process objects, so
2506 input and output work as for subprocesses and `delete-process' closes
2507 a network connection. However, a network process has no process id,
2508 it cannot be signalled, and the status codes are different from normal
2509 processes.
2511 Arguments are specified as keyword/argument pairs. The following
2512 arguments are defined:
2514 :name NAME -- NAME is name for process. It is modified if necessary
2515 to make it unique.
2517 :buffer BUFFER -- BUFFER is the buffer (or buffer-name) to associate
2518 with the process. Process output goes at end of that buffer, unless
2519 you specify an output stream or filter function to handle the output.
2520 BUFFER may be also nil, meaning that this process is not associated
2521 with any buffer.
2523 :host HOST -- HOST is name of the host to connect to, or its IP
2524 address. The symbol `local' specifies the local host. If specified
2525 for a server process, it must be a valid name or address for the local
2526 host, and only clients connecting to that address will be accepted.
2528 :service SERVICE -- SERVICE is name of the service desired, or an
2529 integer specifying a port number to connect to. If SERVICE is t,
2530 a random port number is selected for the server.
2532 :type TYPE -- TYPE is the type of connection. The default (nil) is a
2533 stream type connection, `datagram' creates a datagram type connection.
2535 :family FAMILY -- FAMILY is the address (and protocol) family for the
2536 service specified by HOST and SERVICE. The default address family is
2537 Inet (or IPv4) for the host and port number specified by HOST and
2538 SERVICE. Other address families supported are:
2539 local -- for a local (i.e. UNIX) address specified by SERVICE.
2541 :local ADDRESS -- ADDRESS is the local address used for the connection.
2542 This parameter is ignored when opening a client process. When specified
2543 for a server process, the FAMILY, HOST and SERVICE args are ignored.
2545 :remote ADDRESS -- ADDRESS is the remote partner's address for the
2546 connection. This parameter is ignored when opening a stream server
2547 process. For a datagram server process, it specifies the initial
2548 setting of the remote datagram address. When specified for a client
2549 process, the FAMILY, HOST, and SERVICE args are ignored.
2551 The format of ADDRESS depends on the address family:
2552 - An IPv4 address is represented as an vector of integers [A B C D P]
2553 corresponding to numeric IP address A.B.C.D and port number P.
2554 - A local address is represented as a string with the address in the
2555 local address space.
2556 - An "unsupported family" address is represented by a cons (F . AV)
2557 where F is the family number and AV is a vector containing the socket
2558 address data with one element per address data byte. Do not rely on
2559 this format in portable code, as it may depend on implementation
2560 defined constants, data sizes, and data structure alignment.
2562 :coding CODING -- If CODING is a symbol, it specifies the coding
2563 system used for both reading and writing for this process. If CODING
2564 is a cons (DECODING . ENCODING), DECODING is used for reading, and
2565 ENCODING is used for writing.
2567 :nowait BOOL -- If BOOL is non-nil for a stream type client process,
2568 return without waiting for the connection to complete; instead, the
2569 sentinel function will be called with second arg matching "open" (if
2570 successful) or "failed" when the connect completes. Default is to use
2571 a blocking connect (i.e. wait) for stream type connections.
2573 :noquery BOOL -- Query the user unless BOOL is non-nil, and process is
2574 running when emacs is exited.
2576 :stop BOOL -- Start process in the `stopped' state if BOOL non-nil.
2577 In the stopped state, a server process does not accept new
2578 connections, and a client process does not handle incoming traffic.
2579 The stopped state is cleared by `continue-process' and set by
2580 `stop-process'.
2582 :filter FILTER -- Install FILTER as the process filter.
2584 :filter-multibyte BOOL -- If BOOL is non-nil, strings given to the
2585 process filter are multibyte, otherwise they are unibyte.
2586 If this keyword is not specified, the strings are multibyte iff
2587 `default-enable-multibyte-characters' is non-nil.
2589 :sentinel SENTINEL -- Install SENTINEL as the process sentinel.
2591 :log LOG -- Install LOG as the server process log function. This
2592 function is called when the server accepts a network connection from a
2593 client. The arguments are SERVER, CLIENT, and MESSAGE, where SERVER
2594 is the server process, CLIENT is the new process for the connection,
2595 and MESSAGE is a string.
2597 :plist PLIST -- Install PLIST as the new process' initial plist.
2599 :server QLEN -- if QLEN is non-nil, create a server process for the
2600 specified FAMILY, SERVICE, and connection type (stream or datagram).
2601 If QLEN is an integer, it is used as the max. length of the server's
2602 pending connection queue (also known as the backlog); the default
2603 queue length is 5. Default is to create a client process.
2605 The following network options can be specified for this connection:
2607 :broadcast BOOL -- Allow send and receive of datagram broadcasts.
2608 :dontroute BOOL -- Only send to directly connected hosts.
2609 :keepalive BOOL -- Send keep-alive messages on network stream.
2610 :linger BOOL or TIMEOUT -- Send queued messages before closing.
2611 :oobinline BOOL -- Place out-of-band data in receive data stream.
2612 :priority INT -- Set protocol defined priority for sent packets.
2613 :reuseaddr BOOL -- Allow reusing a recently used local address
2614 (this is allowed by default for a server process).
2615 :bindtodevice NAME -- bind to interface NAME. Using this may require
2616 special privileges on some systems.
2618 Consult the relevant system programmer's manual pages for more
2619 information on using these options.
2622 A server process will listen for and accept connections from clients.
2623 When a client connection is accepted, a new network process is created
2624 for the connection with the following parameters:
2626 - The client's process name is constructed by concatenating the server
2627 process' NAME and a client identification string.
2628 - If the FILTER argument is non-nil, the client process will not get a
2629 separate process buffer; otherwise, the client's process buffer is a newly
2630 created buffer named after the server process' BUFFER name or process
2631 NAME concatenated with the client identification string.
2632 - The connection type and the process filter and sentinel parameters are
2633 inherited from the server process' TYPE, FILTER and SENTINEL.
2634 - The client process' contact info is set according to the client's
2635 addressing information (typically an IP address and a port number).
2636 - The client process' plist is initialized from the server's plist.
2638 Notice that the FILTER and SENTINEL args are never used directly by
2639 the server process. Also, the BUFFER argument is not used directly by
2640 the server process, but via the optional :log function, accepted (and
2641 failed) connections may be logged in the server process' buffer.
2643 The original argument list, modified with the actual connection
2644 information, is available via the `process-contact' function.
2646 usage: (make-network-process &rest ARGS) */)
2647 (nargs, args)
2648 int nargs;
2649 Lisp_Object *args;
2651 Lisp_Object proc;
2652 Lisp_Object contact;
2653 struct Lisp_Process *p;
2654 #ifdef HAVE_GETADDRINFO
2655 struct addrinfo ai, *res, *lres;
2656 struct addrinfo hints;
2657 char *portstring, portbuf[128];
2658 #else /* HAVE_GETADDRINFO */
2659 struct _emacs_addrinfo
2661 int ai_family;
2662 int ai_socktype;
2663 int ai_protocol;
2664 int ai_addrlen;
2665 struct sockaddr *ai_addr;
2666 struct _emacs_addrinfo *ai_next;
2667 } ai, *res, *lres;
2668 #endif /* HAVE_GETADDRINFO */
2669 struct sockaddr_in address_in;
2670 #ifdef HAVE_LOCAL_SOCKETS
2671 struct sockaddr_un address_un;
2672 #endif
2673 int port;
2674 int ret = 0;
2675 int xerrno = 0;
2676 int s = -1, outch, inch;
2677 struct gcpro gcpro1;
2678 int retry = 0;
2679 int count = SPECPDL_INDEX ();
2680 int count1;
2681 Lisp_Object QCaddress; /* one of QClocal or QCremote */
2682 Lisp_Object tem;
2683 Lisp_Object name, buffer, host, service, address;
2684 Lisp_Object filter, sentinel;
2685 int is_non_blocking_client = 0;
2686 int is_server = 0, backlog = 5;
2687 int socktype;
2688 int family = -1;
2690 if (nargs == 0)
2691 return Qnil;
2693 /* Save arguments for process-contact and clone-process. */
2694 contact = Flist (nargs, args);
2695 GCPRO1 (contact);
2697 #ifdef WINDOWSNT
2698 /* Ensure socket support is loaded if available. */
2699 init_winsock (TRUE);
2700 #endif
2702 /* :type TYPE (nil: stream, datagram */
2703 tem = Fplist_get (contact, QCtype);
2704 if (NILP (tem))
2705 socktype = SOCK_STREAM;
2706 #ifdef DATAGRAM_SOCKETS
2707 else if (EQ (tem, Qdatagram))
2708 socktype = SOCK_DGRAM;
2709 #endif
2710 else
2711 error ("Unsupported connection type");
2713 /* :server BOOL */
2714 tem = Fplist_get (contact, QCserver);
2715 if (!NILP (tem))
2717 /* Don't support network sockets when non-blocking mode is
2718 not available, since a blocked Emacs is not useful. */
2719 #if defined(TERM) || (!defined(O_NONBLOCK) && !defined(O_NDELAY))
2720 error ("Network servers not supported");
2721 #else
2722 is_server = 1;
2723 if (INTEGERP (tem))
2724 backlog = XINT (tem);
2725 #endif
2728 /* Make QCaddress an alias for :local (server) or :remote (client). */
2729 QCaddress = is_server ? QClocal : QCremote;
2731 /* :wait BOOL */
2732 if (!is_server && socktype == SOCK_STREAM
2733 && (tem = Fplist_get (contact, QCnowait), !NILP (tem)))
2735 #ifndef NON_BLOCKING_CONNECT
2736 error ("Non-blocking connect not supported");
2737 #else
2738 is_non_blocking_client = 1;
2739 #endif
2742 name = Fplist_get (contact, QCname);
2743 buffer = Fplist_get (contact, QCbuffer);
2744 filter = Fplist_get (contact, QCfilter);
2745 sentinel = Fplist_get (contact, QCsentinel);
2747 CHECK_STRING (name);
2749 #ifdef TERM
2750 /* Let's handle TERM before things get complicated ... */
2751 host = Fplist_get (contact, QChost);
2752 CHECK_STRING (host);
2754 service = Fplist_get (contact, QCservice);
2755 if (INTEGERP (service))
2756 port = htons ((unsigned short) XINT (service));
2757 else
2759 struct servent *svc_info;
2760 CHECK_STRING (service);
2761 svc_info = getservbyname (SDATA (service), "tcp");
2762 if (svc_info == 0)
2763 error ("Unknown service: %s", SDATA (service));
2764 port = svc_info->s_port;
2767 s = connect_server (0);
2768 if (s < 0)
2769 report_file_error ("error creating socket", Fcons (name, Qnil));
2770 send_command (s, C_PORT, 0, "%s:%d", SDATA (host), ntohs (port));
2771 send_command (s, C_DUMB, 1, 0);
2773 #else /* not TERM */
2775 /* Initialize addrinfo structure in case we don't use getaddrinfo. */
2776 ai.ai_socktype = socktype;
2777 ai.ai_protocol = 0;
2778 ai.ai_next = NULL;
2779 res = &ai;
2781 /* :local ADDRESS or :remote ADDRESS */
2782 address = Fplist_get (contact, QCaddress);
2783 if (!NILP (address))
2785 host = service = Qnil;
2787 if (!(ai.ai_addrlen = get_lisp_to_sockaddr_size (address, &family)))
2788 error ("Malformed :address");
2789 ai.ai_family = family;
2790 ai.ai_addr = alloca (ai.ai_addrlen);
2791 conv_lisp_to_sockaddr (family, address, ai.ai_addr, ai.ai_addrlen);
2792 goto open_socket;
2795 /* :family FAMILY -- nil (for Inet), local, or integer. */
2796 tem = Fplist_get (contact, QCfamily);
2797 if (INTEGERP (tem))
2798 family = XINT (tem);
2799 else
2801 if (NILP (tem))
2802 family = AF_INET;
2803 #ifdef HAVE_LOCAL_SOCKETS
2804 else if (EQ (tem, Qlocal))
2805 family = AF_LOCAL;
2806 #endif
2808 if (family < 0)
2809 error ("Unknown address family");
2810 ai.ai_family = family;
2812 /* :service SERVICE -- string, integer (port number), or t (random port). */
2813 service = Fplist_get (contact, QCservice);
2815 #ifdef HAVE_LOCAL_SOCKETS
2816 if (family == AF_LOCAL)
2818 /* Host is not used. */
2819 host = Qnil;
2820 CHECK_STRING (service);
2821 bzero (&address_un, sizeof address_un);
2822 address_un.sun_family = AF_LOCAL;
2823 strncpy (address_un.sun_path, SDATA (service), sizeof address_un.sun_path);
2824 ai.ai_addr = (struct sockaddr *) &address_un;
2825 ai.ai_addrlen = sizeof address_un;
2826 goto open_socket;
2828 #endif
2830 /* :host HOST -- hostname, ip address, or 'local for localhost. */
2831 host = Fplist_get (contact, QChost);
2832 if (!NILP (host))
2834 if (EQ (host, Qlocal))
2835 host = build_string ("localhost");
2836 CHECK_STRING (host);
2839 /* Slow down polling to every ten seconds.
2840 Some kernels have a bug which causes retrying connect to fail
2841 after a connect. Polling can interfere with gethostbyname too. */
2842 #ifdef POLL_FOR_INPUT
2843 if (socktype == SOCK_STREAM)
2845 record_unwind_protect (unwind_stop_other_atimers, Qnil);
2846 bind_polling_period (10);
2848 #endif
2850 #ifdef HAVE_GETADDRINFO
2851 /* If we have a host, use getaddrinfo to resolve both host and service.
2852 Otherwise, use getservbyname to lookup the service. */
2853 if (!NILP (host))
2856 /* SERVICE can either be a string or int.
2857 Convert to a C string for later use by getaddrinfo. */
2858 if (EQ (service, Qt))
2859 portstring = "0";
2860 else if (INTEGERP (service))
2862 sprintf (portbuf, "%ld", (long) XINT (service));
2863 portstring = portbuf;
2865 else
2867 CHECK_STRING (service);
2868 portstring = SDATA (service);
2871 immediate_quit = 1;
2872 QUIT;
2873 memset (&hints, 0, sizeof (hints));
2874 hints.ai_flags = 0;
2875 hints.ai_family = NILP (Fplist_member (contact, QCfamily)) ? AF_UNSPEC : family;
2876 hints.ai_socktype = socktype;
2877 hints.ai_protocol = 0;
2878 ret = getaddrinfo (SDATA (host), portstring, &hints, &res);
2879 if (ret)
2880 #ifdef HAVE_GAI_STRERROR
2881 error ("%s/%s %s", SDATA (host), portstring, gai_strerror(ret));
2882 #else
2883 error ("%s/%s getaddrinfo error %d", SDATA (host), portstring, ret);
2884 #endif
2885 immediate_quit = 0;
2887 goto open_socket;
2889 #endif /* HAVE_GETADDRINFO */
2891 /* We end up here if getaddrinfo is not defined, or in case no hostname
2892 has been specified (e.g. for a local server process). */
2894 if (EQ (service, Qt))
2895 port = 0;
2896 else if (INTEGERP (service))
2897 port = htons ((unsigned short) XINT (service));
2898 else
2900 struct servent *svc_info;
2901 CHECK_STRING (service);
2902 svc_info = getservbyname (SDATA (service),
2903 (socktype == SOCK_DGRAM ? "udp" : "tcp"));
2904 if (svc_info == 0)
2905 error ("Unknown service: %s", SDATA (service));
2906 port = svc_info->s_port;
2909 bzero (&address_in, sizeof address_in);
2910 address_in.sin_family = family;
2911 address_in.sin_addr.s_addr = INADDR_ANY;
2912 address_in.sin_port = port;
2914 #ifndef HAVE_GETADDRINFO
2915 if (!NILP (host))
2917 struct hostent *host_info_ptr;
2919 /* gethostbyname may fail with TRY_AGAIN, but we don't honour that,
2920 as it may `hang' emacs for a very long time. */
2921 immediate_quit = 1;
2922 QUIT;
2923 host_info_ptr = gethostbyname (SDATA (host));
2924 immediate_quit = 0;
2926 if (host_info_ptr)
2928 bcopy (host_info_ptr->h_addr, (char *) &address_in.sin_addr,
2929 host_info_ptr->h_length);
2930 family = host_info_ptr->h_addrtype;
2931 address_in.sin_family = family;
2933 else
2934 /* Attempt to interpret host as numeric inet address */
2936 IN_ADDR numeric_addr;
2937 numeric_addr = inet_addr ((char *) SDATA (host));
2938 if (NUMERIC_ADDR_ERROR)
2939 error ("Unknown host \"%s\"", SDATA (host));
2941 bcopy ((char *)&numeric_addr, (char *) &address_in.sin_addr,
2942 sizeof (address_in.sin_addr));
2946 #endif /* not HAVE_GETADDRINFO */
2948 ai.ai_family = family;
2949 ai.ai_addr = (struct sockaddr *) &address_in;
2950 ai.ai_addrlen = sizeof address_in;
2952 open_socket:
2954 /* Kernel bugs (on Ultrix at least) cause lossage (not just EINTR)
2955 when connect is interrupted. So let's not let it get interrupted.
2956 Note we do not turn off polling, because polling is only used
2957 when not interrupt_input, and thus not normally used on the systems
2958 which have this bug. On systems which use polling, there's no way
2959 to quit if polling is turned off. */
2960 if (interrupt_input
2961 && !is_server && socktype == SOCK_STREAM)
2963 /* Comment from KFS: The original open-network-stream code
2964 didn't unwind protect this, but it seems like the proper
2965 thing to do. In any case, I don't see how it could harm to
2966 do this -- and it makes cleanup (using unbind_to) easier. */
2967 record_unwind_protect (unwind_request_sigio, Qnil);
2968 unrequest_sigio ();
2971 /* Do this in case we never enter the for-loop below. */
2972 count1 = SPECPDL_INDEX ();
2973 s = -1;
2975 for (lres = res; lres; lres = lres->ai_next)
2977 int optn, optbits;
2979 s = socket (lres->ai_family, lres->ai_socktype, lres->ai_protocol);
2980 if (s < 0)
2982 xerrno = errno;
2983 continue;
2986 #ifdef DATAGRAM_SOCKETS
2987 if (!is_server && socktype == SOCK_DGRAM)
2988 break;
2989 #endif /* DATAGRAM_SOCKETS */
2991 #ifdef NON_BLOCKING_CONNECT
2992 if (is_non_blocking_client)
2994 #ifdef O_NONBLOCK
2995 ret = fcntl (s, F_SETFL, O_NONBLOCK);
2996 #else
2997 ret = fcntl (s, F_SETFL, O_NDELAY);
2998 #endif
2999 if (ret < 0)
3001 xerrno = errno;
3002 emacs_close (s);
3003 s = -1;
3004 continue;
3007 #endif
3009 /* Make us close S if quit. */
3010 record_unwind_protect (close_file_unwind, make_number (s));
3012 /* Parse network options in the arg list.
3013 We simply ignore anything which isn't a known option (including other keywords).
3014 An error is signalled if setting a known option fails. */
3015 for (optn = optbits = 0; optn < nargs-1; optn += 2)
3016 optbits |= set_socket_option (s, args[optn], args[optn+1]);
3018 if (is_server)
3020 /* Configure as a server socket. */
3022 /* SO_REUSEADDR = 1 is default for server sockets; must specify
3023 explicit :reuseaddr key to override this. */
3024 #ifdef HAVE_LOCAL_SOCKETS
3025 if (family != AF_LOCAL)
3026 #endif
3027 if (!(optbits & (1 << OPIX_REUSEADDR)))
3029 int optval = 1;
3030 if (setsockopt (s, SOL_SOCKET, SO_REUSEADDR, &optval, sizeof optval))
3031 report_file_error ("Cannot set reuse option on server socket", Qnil);
3034 if (bind (s, lres->ai_addr, lres->ai_addrlen))
3035 report_file_error ("Cannot bind server socket", Qnil);
3037 #ifdef HAVE_GETSOCKNAME
3038 if (EQ (service, Qt))
3040 struct sockaddr_in sa1;
3041 int len1 = sizeof (sa1);
3042 if (getsockname (s, (struct sockaddr *)&sa1, &len1) == 0)
3044 ((struct sockaddr_in *)(lres->ai_addr))->sin_port = sa1.sin_port;
3045 service = make_number (ntohs (sa1.sin_port));
3046 contact = Fplist_put (contact, QCservice, service);
3049 #endif
3051 if (socktype == SOCK_STREAM && listen (s, backlog))
3052 report_file_error ("Cannot listen on server socket", Qnil);
3054 break;
3057 retry_connect:
3059 immediate_quit = 1;
3060 QUIT;
3062 /* This turns off all alarm-based interrupts; the
3063 bind_polling_period call above doesn't always turn all the
3064 short-interval ones off, especially if interrupt_input is
3065 set.
3067 It'd be nice to be able to control the connect timeout
3068 though. Would non-blocking connect calls be portable?
3070 This used to be conditioned by HAVE_GETADDRINFO. Why? */
3072 turn_on_atimers (0);
3074 ret = connect (s, lres->ai_addr, lres->ai_addrlen);
3075 xerrno = errno;
3077 turn_on_atimers (1);
3079 if (ret == 0 || xerrno == EISCONN)
3081 /* The unwind-protect will be discarded afterwards.
3082 Likewise for immediate_quit. */
3083 break;
3086 #ifdef NON_BLOCKING_CONNECT
3087 #ifdef EINPROGRESS
3088 if (is_non_blocking_client && xerrno == EINPROGRESS)
3089 break;
3090 #else
3091 #ifdef EWOULDBLOCK
3092 if (is_non_blocking_client && xerrno == EWOULDBLOCK)
3093 break;
3094 #endif
3095 #endif
3096 #endif
3098 immediate_quit = 0;
3100 if (xerrno == EINTR)
3101 goto retry_connect;
3102 if (xerrno == EADDRINUSE && retry < 20)
3104 /* A delay here is needed on some FreeBSD systems,
3105 and it is harmless, since this retrying takes time anyway
3106 and should be infrequent. */
3107 Fsleep_for (make_number (1), Qnil);
3108 retry++;
3109 goto retry_connect;
3112 /* Discard the unwind protect closing S. */
3113 specpdl_ptr = specpdl + count1;
3114 emacs_close (s);
3115 s = -1;
3118 if (s >= 0)
3120 #ifdef DATAGRAM_SOCKETS
3121 if (socktype == SOCK_DGRAM)
3123 if (datagram_address[s].sa)
3124 abort ();
3125 datagram_address[s].sa = (struct sockaddr *) xmalloc (lres->ai_addrlen);
3126 datagram_address[s].len = lres->ai_addrlen;
3127 if (is_server)
3129 Lisp_Object remote;
3130 bzero (datagram_address[s].sa, lres->ai_addrlen);
3131 if (remote = Fplist_get (contact, QCremote), !NILP (remote))
3133 int rfamily, rlen;
3134 rlen = get_lisp_to_sockaddr_size (remote, &rfamily);
3135 if (rfamily == lres->ai_family && rlen == lres->ai_addrlen)
3136 conv_lisp_to_sockaddr (rfamily, remote,
3137 datagram_address[s].sa, rlen);
3140 else
3141 bcopy (lres->ai_addr, datagram_address[s].sa, lres->ai_addrlen);
3143 #endif
3144 contact = Fplist_put (contact, QCaddress,
3145 conv_sockaddr_to_lisp (lres->ai_addr, lres->ai_addrlen));
3146 #ifdef HAVE_GETSOCKNAME
3147 if (!is_server)
3149 struct sockaddr_in sa1;
3150 int len1 = sizeof (sa1);
3151 if (getsockname (s, (struct sockaddr *)&sa1, &len1) == 0)
3152 contact = Fplist_put (contact, QClocal,
3153 conv_sockaddr_to_lisp (&sa1, len1));
3155 #endif
3158 #ifdef HAVE_GETADDRINFO
3159 if (res != &ai)
3160 freeaddrinfo (res);
3161 #endif
3163 immediate_quit = 0;
3165 /* Discard the unwind protect for closing S, if any. */
3166 specpdl_ptr = specpdl + count1;
3168 /* Unwind bind_polling_period and request_sigio. */
3169 unbind_to (count, Qnil);
3171 if (s < 0)
3173 /* If non-blocking got this far - and failed - assume non-blocking is
3174 not supported after all. This is probably a wrong assumption, but
3175 the normal blocking calls to open-network-stream handles this error
3176 better. */
3177 if (is_non_blocking_client)
3178 return Qnil;
3180 errno = xerrno;
3181 if (is_server)
3182 report_file_error ("make server process failed", contact);
3183 else
3184 report_file_error ("make client process failed", contact);
3187 #endif /* not TERM */
3189 inch = s;
3190 outch = s;
3192 if (!NILP (buffer))
3193 buffer = Fget_buffer_create (buffer);
3194 proc = make_process (name);
3196 chan_process[inch] = proc;
3198 #ifdef O_NONBLOCK
3199 fcntl (inch, F_SETFL, O_NONBLOCK);
3200 #else
3201 #ifdef O_NDELAY
3202 fcntl (inch, F_SETFL, O_NDELAY);
3203 #endif
3204 #endif
3206 p = XPROCESS (proc);
3208 p->childp = contact;
3209 p->plist = Fcopy_sequence (Fplist_get (contact, QCplist));
3211 p->buffer = buffer;
3212 p->sentinel = sentinel;
3213 p->filter = filter;
3214 p->filter_multibyte = buffer_defaults.enable_multibyte_characters;
3215 /* Override the above only if :filter-multibyte is specified. */
3216 if (! NILP (Fplist_member (contact, QCfilter_multibyte)))
3217 p->filter_multibyte = Fplist_get (contact, QCfilter_multibyte);
3218 p->log = Fplist_get (contact, QClog);
3219 if (tem = Fplist_get (contact, QCnoquery), !NILP (tem))
3220 p->kill_without_query = Qt;
3221 if ((tem = Fplist_get (contact, QCstop), !NILP (tem)))
3222 p->command = Qt;
3223 p->pid = Qnil;
3224 XSETINT (p->infd, inch);
3225 XSETINT (p->outfd, outch);
3226 if (is_server && socktype == SOCK_STREAM)
3227 p->status = Qlisten;
3229 #ifdef NON_BLOCKING_CONNECT
3230 if (is_non_blocking_client)
3232 /* We may get here if connect did succeed immediately. However,
3233 in that case, we still need to signal this like a non-blocking
3234 connection. */
3235 p->status = Qconnect;
3236 if (!FD_ISSET (inch, &connect_wait_mask))
3238 FD_SET (inch, &connect_wait_mask);
3239 num_pending_connects++;
3242 else
3243 #endif
3244 /* A server may have a client filter setting of Qt, but it must
3245 still listen for incoming connects unless it is stopped. */
3246 if ((!EQ (p->filter, Qt) && !EQ (p->command, Qt))
3247 || (EQ (p->status, Qlisten) && NILP (p->command)))
3249 FD_SET (inch, &input_wait_mask);
3250 FD_SET (inch, &non_keyboard_wait_mask);
3253 if (inch > max_process_desc)
3254 max_process_desc = inch;
3256 tem = Fplist_member (contact, QCcoding);
3257 if (!NILP (tem) && (!CONSP (tem) || !CONSP (XCDR (tem))))
3258 tem = Qnil; /* No error message (too late!). */
3261 /* Setup coding systems for communicating with the network stream. */
3262 struct gcpro gcpro1;
3263 /* Qt denotes we have not yet called Ffind_operation_coding_system. */
3264 Lisp_Object coding_systems = Qt;
3265 Lisp_Object args[5], val;
3267 if (!NILP (tem))
3269 val = XCAR (XCDR (tem));
3270 if (CONSP (val))
3271 val = XCAR (val);
3273 else if (!NILP (Vcoding_system_for_read))
3274 val = Vcoding_system_for_read;
3275 else if ((!NILP (buffer) && NILP (XBUFFER (buffer)->enable_multibyte_characters))
3276 || (NILP (buffer) && NILP (buffer_defaults.enable_multibyte_characters)))
3277 /* We dare not decode end-of-line format by setting VAL to
3278 Qraw_text, because the existing Emacs Lisp libraries
3279 assume that they receive bare code including a sequene of
3280 CR LF. */
3281 val = Qnil;
3282 else
3284 if (NILP (host) || NILP (service))
3285 coding_systems = Qnil;
3286 else
3288 args[0] = Qopen_network_stream, args[1] = name,
3289 args[2] = buffer, args[3] = host, args[4] = service;
3290 GCPRO1 (proc);
3291 coding_systems = Ffind_operation_coding_system (5, args);
3292 UNGCPRO;
3294 if (CONSP (coding_systems))
3295 val = XCAR (coding_systems);
3296 else if (CONSP (Vdefault_process_coding_system))
3297 val = XCAR (Vdefault_process_coding_system);
3298 else
3299 val = Qnil;
3301 p->decode_coding_system = val;
3303 if (!NILP (tem))
3305 val = XCAR (XCDR (tem));
3306 if (CONSP (val))
3307 val = XCDR (val);
3309 else if (!NILP (Vcoding_system_for_write))
3310 val = Vcoding_system_for_write;
3311 else if (NILP (current_buffer->enable_multibyte_characters))
3312 val = Qnil;
3313 else
3315 if (EQ (coding_systems, Qt))
3317 if (NILP (host) || NILP (service))
3318 coding_systems = Qnil;
3319 else
3321 args[0] = Qopen_network_stream, args[1] = name,
3322 args[2] = buffer, args[3] = host, args[4] = service;
3323 GCPRO1 (proc);
3324 coding_systems = Ffind_operation_coding_system (5, args);
3325 UNGCPRO;
3328 if (CONSP (coding_systems))
3329 val = XCDR (coding_systems);
3330 else if (CONSP (Vdefault_process_coding_system))
3331 val = XCDR (Vdefault_process_coding_system);
3332 else
3333 val = Qnil;
3335 p->encode_coding_system = val;
3337 setup_process_coding_systems (proc);
3339 p->decoding_buf = make_uninit_string (0);
3340 p->decoding_carryover = make_number (0);
3341 p->encoding_buf = make_uninit_string (0);
3342 p->encoding_carryover = make_number (0);
3344 p->inherit_coding_system_flag
3345 = (!NILP (tem) || NILP (buffer) || !inherit_process_coding_system
3346 ? Qnil : Qt);
3348 UNGCPRO;
3349 return proc;
3351 #endif /* HAVE_SOCKETS */
3354 #if defined(HAVE_SOCKETS) && defined(HAVE_NET_IF_H) && defined(HAVE_SYS_IOCTL_H)
3356 #ifdef SIOCGIFCONF
3357 DEFUN ("network-interface-list", Fnetwork_interface_list, Snetwork_interface_list, 0, 0, 0,
3358 doc: /* Return an alist of all network interfaces and their network address.
3359 Each element is a cons, the car of which is a string containing the
3360 interface name, and the cdr is the network address in internal
3361 format; see the description of ADDRESS in `make-network-process'. */)
3364 struct ifconf ifconf;
3365 struct ifreq *ifreqs = NULL;
3366 int ifaces = 0;
3367 int buf_size, s;
3368 Lisp_Object res;
3370 s = socket (AF_INET, SOCK_STREAM, 0);
3371 if (s < 0)
3372 return Qnil;
3374 again:
3375 ifaces += 25;
3376 buf_size = ifaces * sizeof(ifreqs[0]);
3377 ifreqs = (struct ifreq *)xrealloc(ifreqs, buf_size);
3378 if (!ifreqs)
3380 close (s);
3381 return Qnil;
3384 ifconf.ifc_len = buf_size;
3385 ifconf.ifc_req = ifreqs;
3386 if (ioctl (s, SIOCGIFCONF, &ifconf))
3388 close (s);
3389 return Qnil;
3392 if (ifconf.ifc_len == buf_size)
3393 goto again;
3395 close (s);
3396 ifaces = ifconf.ifc_len / sizeof (ifreqs[0]);
3398 res = Qnil;
3399 while (--ifaces >= 0)
3401 struct ifreq *ifq = &ifreqs[ifaces];
3402 char namebuf[sizeof (ifq->ifr_name) + 1];
3403 if (ifq->ifr_addr.sa_family != AF_INET)
3404 continue;
3405 bcopy (ifq->ifr_name, namebuf, sizeof (ifq->ifr_name));
3406 namebuf[sizeof (ifq->ifr_name)] = 0;
3407 res = Fcons (Fcons (build_string (namebuf),
3408 conv_sockaddr_to_lisp (&ifq->ifr_addr,
3409 sizeof (struct sockaddr))),
3410 res);
3413 return res;
3415 #endif /* SIOCGIFCONF */
3417 #if defined(SIOCGIFADDR) || defined(SIOCGIFHWADDR) || defined(SIOCGIFFLAGS)
3419 struct ifflag_def {
3420 int flag_bit;
3421 char *flag_sym;
3424 static struct ifflag_def ifflag_table[] = {
3425 #ifdef IFF_UP
3426 { IFF_UP, "up" },
3427 #endif
3428 #ifdef IFF_BROADCAST
3429 { IFF_BROADCAST, "broadcast" },
3430 #endif
3431 #ifdef IFF_DEBUG
3432 { IFF_DEBUG, "debug" },
3433 #endif
3434 #ifdef IFF_LOOPBACK
3435 { IFF_LOOPBACK, "loopback" },
3436 #endif
3437 #ifdef IFF_POINTOPOINT
3438 { IFF_POINTOPOINT, "pointopoint" },
3439 #endif
3440 #ifdef IFF_RUNNING
3441 { IFF_RUNNING, "running" },
3442 #endif
3443 #ifdef IFF_NOARP
3444 { IFF_NOARP, "noarp" },
3445 #endif
3446 #ifdef IFF_PROMISC
3447 { IFF_PROMISC, "promisc" },
3448 #endif
3449 #ifdef IFF_NOTRAILERS
3450 { IFF_NOTRAILERS, "notrailers" },
3451 #endif
3452 #ifdef IFF_ALLMULTI
3453 { IFF_ALLMULTI, "allmulti" },
3454 #endif
3455 #ifdef IFF_MASTER
3456 { IFF_MASTER, "master" },
3457 #endif
3458 #ifdef IFF_SLAVE
3459 { IFF_SLAVE, "slave" },
3460 #endif
3461 #ifdef IFF_MULTICAST
3462 { IFF_MULTICAST, "multicast" },
3463 #endif
3464 #ifdef IFF_PORTSEL
3465 { IFF_PORTSEL, "portsel" },
3466 #endif
3467 #ifdef IFF_AUTOMEDIA
3468 { IFF_AUTOMEDIA, "automedia" },
3469 #endif
3470 #ifdef IFF_DYNAMIC
3471 { IFF_DYNAMIC, "dynamic" },
3472 #endif
3473 { 0, 0 }
3476 DEFUN ("network-interface-info", Fnetwork_interface_info, Snetwork_interface_info, 1, 1, 0,
3477 doc: /* Return information about network interface named IFNAME.
3478 The return value is a list (ADDR BCAST NETMASK HWADDR FLAGS),
3479 where ADDR is the layer 3 address, BCAST is the layer 3 broadcast address,
3480 NETMASK is the layer 3 network mask, HWADDR is the layer 2 addres, and
3481 FLAGS is the current flags of the interface. */)
3482 (ifname)
3483 Lisp_Object ifname;
3485 struct ifreq rq;
3486 Lisp_Object res = Qnil;
3487 Lisp_Object elt;
3488 int s;
3489 int any = 0;
3491 CHECK_STRING (ifname);
3493 bzero (rq.ifr_name, sizeof rq.ifr_name);
3494 strncpy (rq.ifr_name, SDATA (ifname), sizeof (rq.ifr_name));
3496 s = socket (AF_INET, SOCK_STREAM, 0);
3497 if (s < 0)
3498 return Qnil;
3500 elt = Qnil;
3501 #if defined(SIOCGIFFLAGS) && defined(HAVE_STRUCT_IFREQ_IFR_FLAGS)
3502 if (ioctl (s, SIOCGIFFLAGS, &rq) == 0)
3504 int flags = rq.ifr_flags;
3505 struct ifflag_def *fp;
3506 int fnum;
3508 any++;
3509 for (fp = ifflag_table; flags != 0 && fp; fp++)
3511 if (flags & fp->flag_bit)
3513 elt = Fcons (intern (fp->flag_sym), elt);
3514 flags -= fp->flag_bit;
3517 for (fnum = 0; flags && fnum < 32; fnum++)
3519 if (flags & (1 << fnum))
3521 elt = Fcons (make_number (fnum), elt);
3525 #endif
3526 res = Fcons (elt, res);
3528 elt = Qnil;
3529 #if defined(SIOCGIFHWADDR) && defined(HAVE_STRUCT_IFREQ_IFR_HWADDR)
3530 if (ioctl (s, SIOCGIFHWADDR, &rq) == 0)
3532 Lisp_Object hwaddr = Fmake_vector (make_number (6), Qnil);
3533 register struct Lisp_Vector *p = XVECTOR (hwaddr);
3534 int n;
3536 any++;
3537 for (n = 0; n < 6; n++)
3538 p->contents[n] = make_number (((unsigned char *)&rq.ifr_hwaddr.sa_data[0])[n]);
3539 elt = Fcons (make_number (rq.ifr_hwaddr.sa_family), hwaddr);
3541 #endif
3542 res = Fcons (elt, res);
3544 elt = Qnil;
3545 #if defined(SIOCGIFNETMASK) && defined(ifr_netmask)
3546 if (ioctl (s, SIOCGIFNETMASK, &rq) == 0)
3548 any++;
3549 elt = conv_sockaddr_to_lisp (&rq.ifr_netmask, sizeof (rq.ifr_netmask));
3551 #endif
3552 res = Fcons (elt, res);
3554 elt = Qnil;
3555 #if defined(SIOCGIFBRDADDR) && defined(HAVE_STRUCT_IFREQ_IFR_BROADADDR)
3556 if (ioctl (s, SIOCGIFBRDADDR, &rq) == 0)
3558 any++;
3559 elt = conv_sockaddr_to_lisp (&rq.ifr_broadaddr, sizeof (rq.ifr_broadaddr));
3561 #endif
3562 res = Fcons (elt, res);
3564 elt = Qnil;
3565 #if defined(SIOCGIFADDR) && defined(HAVE_STRUCT_IFREQ_IFR_ADDR)
3566 if (ioctl (s, SIOCGIFADDR, &rq) == 0)
3568 any++;
3569 elt = conv_sockaddr_to_lisp (&rq.ifr_addr, sizeof (rq.ifr_addr));
3571 #endif
3572 res = Fcons (elt, res);
3574 close (s);
3576 return any ? res : Qnil;
3578 #endif
3579 #endif /* HAVE_SOCKETS */
3581 void
3582 deactivate_process (proc)
3583 Lisp_Object proc;
3585 register int inchannel, outchannel;
3586 register struct Lisp_Process *p = XPROCESS (proc);
3588 inchannel = XINT (p->infd);
3589 outchannel = XINT (p->outfd);
3591 if (inchannel >= 0)
3593 /* Beware SIGCHLD hereabouts. */
3594 flush_pending_output (inchannel);
3595 #ifdef VMS
3597 VMS_PROC_STUFF *get_vms_process_pointer (), *vs;
3598 sys$dassgn (outchannel);
3599 vs = get_vms_process_pointer (p->pid);
3600 if (vs)
3601 give_back_vms_process_stuff (vs);
3603 #else
3604 emacs_close (inchannel);
3605 if (outchannel >= 0 && outchannel != inchannel)
3606 emacs_close (outchannel);
3607 #endif
3609 XSETINT (p->infd, -1);
3610 XSETINT (p->outfd, -1);
3611 #ifdef DATAGRAM_SOCKETS
3612 if (DATAGRAM_CHAN_P (inchannel))
3614 xfree (datagram_address[inchannel].sa);
3615 datagram_address[inchannel].sa = 0;
3616 datagram_address[inchannel].len = 0;
3618 #endif
3619 chan_process[inchannel] = Qnil;
3620 FD_CLR (inchannel, &input_wait_mask);
3621 FD_CLR (inchannel, &non_keyboard_wait_mask);
3622 if (FD_ISSET (inchannel, &connect_wait_mask))
3624 FD_CLR (inchannel, &connect_wait_mask);
3625 if (--num_pending_connects < 0)
3626 abort ();
3628 if (inchannel == max_process_desc)
3630 int i;
3631 /* We just closed the highest-numbered process input descriptor,
3632 so recompute the highest-numbered one now. */
3633 max_process_desc = 0;
3634 for (i = 0; i < MAXDESC; i++)
3635 if (!NILP (chan_process[i]))
3636 max_process_desc = i;
3641 /* Close all descriptors currently in use for communication
3642 with subprocess. This is used in a newly-forked subprocess
3643 to get rid of irrelevant descriptors. */
3645 void
3646 close_process_descs ()
3648 #ifndef WINDOWSNT
3649 int i;
3650 for (i = 0; i < MAXDESC; i++)
3652 Lisp_Object process;
3653 process = chan_process[i];
3654 if (!NILP (process))
3656 int in = XINT (XPROCESS (process)->infd);
3657 int out = XINT (XPROCESS (process)->outfd);
3658 if (in >= 0)
3659 emacs_close (in);
3660 if (out >= 0 && in != out)
3661 emacs_close (out);
3664 #endif
3667 DEFUN ("accept-process-output", Faccept_process_output, Saccept_process_output,
3668 0, 3, 0,
3669 doc: /* Allow any pending output from subprocesses to be read by Emacs.
3670 It is read into the process' buffers or given to their filter functions.
3671 Non-nil arg PROCESS means do not return until some output has been received
3672 from PROCESS.
3673 Non-nil second arg TIMEOUT and third arg TIMEOUT-MSECS are number of
3674 seconds and microseconds to wait; return after that much time whether
3675 or not there is input.
3676 Return non-nil iff we received any output before the timeout expired. */)
3677 (process, timeout, timeout_msecs)
3678 register Lisp_Object process, timeout, timeout_msecs;
3680 int seconds;
3681 int useconds;
3683 if (! NILP (process))
3684 CHECK_PROCESS (process);
3686 if (! NILP (timeout_msecs))
3688 CHECK_NUMBER (timeout_msecs);
3689 useconds = XINT (timeout_msecs);
3690 if (!INTEGERP (timeout))
3691 XSETINT (timeout, 0);
3694 int carry = useconds / 1000000;
3696 XSETINT (timeout, XINT (timeout) + carry);
3697 useconds -= carry * 1000000;
3699 /* I think this clause is necessary because C doesn't
3700 guarantee a particular rounding direction for negative
3701 integers. */
3702 if (useconds < 0)
3704 XSETINT (timeout, XINT (timeout) - 1);
3705 useconds += 1000000;
3709 else
3710 useconds = 0;
3712 if (! NILP (timeout))
3714 CHECK_NUMBER (timeout);
3715 seconds = XINT (timeout);
3716 if (seconds < 0 || (seconds == 0 && useconds == 0))
3717 seconds = -1;
3719 else
3720 seconds = NILP (process) ? -1 : 0;
3722 if (NILP (process))
3723 XSETFASTINT (process, 0);
3725 return
3726 (wait_reading_process_input (seconds, useconds, process, 0)
3727 ? Qt : Qnil);
3730 /* Accept a connection for server process SERVER on CHANNEL. */
3732 static int connect_counter = 0;
3734 static void
3735 server_accept_connection (server, channel)
3736 Lisp_Object server;
3737 int channel;
3739 Lisp_Object proc, caller, name, buffer;
3740 Lisp_Object contact, host, service;
3741 struct Lisp_Process *ps= XPROCESS (server);
3742 struct Lisp_Process *p;
3743 int s;
3744 union u_sockaddr {
3745 struct sockaddr sa;
3746 struct sockaddr_in in;
3747 #ifdef HAVE_LOCAL_SOCKETS
3748 struct sockaddr_un un;
3749 #endif
3750 } saddr;
3751 int len = sizeof saddr;
3753 s = accept (channel, &saddr.sa, &len);
3755 if (s < 0)
3757 int code = errno;
3759 if (code == EAGAIN)
3760 return;
3761 #ifdef EWOULDBLOCK
3762 if (code == EWOULDBLOCK)
3763 return;
3764 #endif
3766 if (!NILP (ps->log))
3767 call3 (ps->log, server, Qnil,
3768 concat3 (build_string ("accept failed with code"),
3769 Fnumber_to_string (make_number (code)),
3770 build_string ("\n")));
3771 return;
3774 connect_counter++;
3776 /* Setup a new process to handle the connection. */
3778 /* Generate a unique identification of the caller, and build contact
3779 information for this process. */
3780 host = Qt;
3781 service = Qnil;
3782 switch (saddr.sa.sa_family)
3784 case AF_INET:
3786 Lisp_Object args[5];
3787 unsigned char *ip = (unsigned char *)&saddr.in.sin_addr.s_addr;
3788 args[0] = build_string ("%d.%d.%d.%d");
3789 args[1] = make_number (*ip++);
3790 args[2] = make_number (*ip++);
3791 args[3] = make_number (*ip++);
3792 args[4] = make_number (*ip++);
3793 host = Fformat (5, args);
3794 service = make_number (ntohs (saddr.in.sin_port));
3796 args[0] = build_string (" <%s:%d>");
3797 args[1] = host;
3798 args[2] = service;
3799 caller = Fformat (3, args);
3801 break;
3803 #ifdef HAVE_LOCAL_SOCKETS
3804 case AF_LOCAL:
3805 #endif
3806 default:
3807 caller = Fnumber_to_string (make_number (connect_counter));
3808 caller = concat3 (build_string (" <*"), caller, build_string ("*>"));
3809 break;
3812 /* Create a new buffer name for this process if it doesn't have a
3813 filter. The new buffer name is based on the buffer name or
3814 process name of the server process concatenated with the caller
3815 identification. */
3817 if (!NILP (ps->filter) && !EQ (ps->filter, Qt))
3818 buffer = Qnil;
3819 else
3821 buffer = ps->buffer;
3822 if (!NILP (buffer))
3823 buffer = Fbuffer_name (buffer);
3824 else
3825 buffer = ps->name;
3826 if (!NILP (buffer))
3828 buffer = concat2 (buffer, caller);
3829 buffer = Fget_buffer_create (buffer);
3833 /* Generate a unique name for the new server process. Combine the
3834 server process name with the caller identification. */
3836 name = concat2 (ps->name, caller);
3837 proc = make_process (name);
3839 chan_process[s] = proc;
3841 #ifdef O_NONBLOCK
3842 fcntl (s, F_SETFL, O_NONBLOCK);
3843 #else
3844 #ifdef O_NDELAY
3845 fcntl (s, F_SETFL, O_NDELAY);
3846 #endif
3847 #endif
3849 p = XPROCESS (proc);
3851 /* Build new contact information for this setup. */
3852 contact = Fcopy_sequence (ps->childp);
3853 contact = Fplist_put (contact, QCserver, Qnil);
3854 contact = Fplist_put (contact, QChost, host);
3855 if (!NILP (service))
3856 contact = Fplist_put (contact, QCservice, service);
3857 contact = Fplist_put (contact, QCremote,
3858 conv_sockaddr_to_lisp (&saddr.sa, len));
3859 #ifdef HAVE_GETSOCKNAME
3860 len = sizeof saddr;
3861 if (getsockname (s, &saddr.sa, &len) == 0)
3862 contact = Fplist_put (contact, QClocal,
3863 conv_sockaddr_to_lisp (&saddr.sa, len));
3864 #endif
3866 p->childp = contact;
3867 p->plist = Fcopy_sequence (ps->plist);
3869 p->buffer = buffer;
3870 p->sentinel = ps->sentinel;
3871 p->filter = ps->filter;
3872 p->command = Qnil;
3873 p->pid = Qnil;
3874 XSETINT (p->infd, s);
3875 XSETINT (p->outfd, s);
3876 p->status = Qrun;
3878 /* Client processes for accepted connections are not stopped initially. */
3879 if (!EQ (p->filter, Qt))
3881 FD_SET (s, &input_wait_mask);
3882 FD_SET (s, &non_keyboard_wait_mask);
3885 if (s > max_process_desc)
3886 max_process_desc = s;
3888 /* Setup coding system for new process based on server process.
3889 This seems to be the proper thing to do, as the coding system
3890 of the new process should reflect the settings at the time the
3891 server socket was opened; not the current settings. */
3893 p->decode_coding_system = ps->decode_coding_system;
3894 p->encode_coding_system = ps->encode_coding_system;
3895 setup_process_coding_systems (proc);
3897 p->decoding_buf = make_uninit_string (0);
3898 p->decoding_carryover = make_number (0);
3899 p->encoding_buf = make_uninit_string (0);
3900 p->encoding_carryover = make_number (0);
3902 p->inherit_coding_system_flag
3903 = (NILP (buffer) ? Qnil : ps->inherit_coding_system_flag);
3905 if (!NILP (ps->log))
3906 call3 (ps->log, server, proc,
3907 concat3 (build_string ("accept from "),
3908 (STRINGP (host) ? host : build_string ("-")),
3909 build_string ("\n")));
3911 if (!NILP (p->sentinel))
3912 exec_sentinel (proc,
3913 concat3 (build_string ("open from "),
3914 (STRINGP (host) ? host : build_string ("-")),
3915 build_string ("\n")));
3918 /* This variable is different from waiting_for_input in keyboard.c.
3919 It is used to communicate to a lisp process-filter/sentinel (via the
3920 function Fwaiting_for_user_input_p below) whether emacs was waiting
3921 for user-input when that process-filter was called.
3922 waiting_for_input cannot be used as that is by definition 0 when
3923 lisp code is being evalled.
3924 This is also used in record_asynch_buffer_change.
3925 For that purpose, this must be 0
3926 when not inside wait_reading_process_input. */
3927 static int waiting_for_user_input_p;
3929 /* This is here so breakpoints can be put on it. */
3930 static void
3931 wait_reading_process_input_1 ()
3935 /* Read and dispose of subprocess output while waiting for timeout to
3936 elapse and/or keyboard input to be available.
3938 TIME_LIMIT is:
3939 timeout in seconds, or
3940 zero for no limit, or
3941 -1 means gobble data immediately available but don't wait for any.
3943 MICROSECS is:
3944 an additional duration to wait, measured in microseconds.
3945 If this is nonzero and time_limit is 0, then the timeout
3946 consists of MICROSECS only.
3948 READ_KBD is a lisp value:
3949 0 to ignore keyboard input, or
3950 1 to return when input is available, or
3951 -1 meaning caller will actually read the input, so don't throw to
3952 the quit handler, or
3953 a cons cell, meaning wait until its car is non-nil
3954 (and gobble terminal input into the buffer if any arrives), or
3955 a process object, meaning wait until something arrives from that
3956 process. The return value is true iff we read some input from
3957 that process.
3959 DO_DISPLAY != 0 means redisplay should be done to show subprocess
3960 output that arrives.
3962 If READ_KBD is a pointer to a struct Lisp_Process, then the
3963 function returns true iff we received input from that process
3964 before the timeout elapsed.
3965 Otherwise, return true iff we received input from any process. */
3968 wait_reading_process_input (time_limit, microsecs, read_kbd, do_display)
3969 int time_limit, microsecs;
3970 Lisp_Object read_kbd;
3971 int do_display;
3973 register int channel, nfds;
3974 static SELECT_TYPE Available;
3975 static SELECT_TYPE Connecting;
3976 int check_connect, no_avail;
3977 int xerrno;
3978 Lisp_Object proc;
3979 EMACS_TIME timeout, end_time;
3980 int wait_channel = -1;
3981 struct Lisp_Process *wait_proc = 0;
3982 int got_some_input = 0;
3983 /* Either nil or a cons cell, the car of which is of interest and
3984 may be changed outside of this routine. */
3985 Lisp_Object wait_for_cell = Qnil;
3987 FD_ZERO (&Available);
3988 FD_ZERO (&Connecting);
3990 /* If read_kbd is a process to watch, set wait_proc and wait_channel
3991 accordingly. */
3992 if (PROCESSP (read_kbd))
3994 wait_proc = XPROCESS (read_kbd);
3995 wait_channel = XINT (wait_proc->infd);
3996 XSETFASTINT (read_kbd, 0);
3999 /* If waiting for non-nil in a cell, record where. */
4000 if (CONSP (read_kbd))
4002 wait_for_cell = read_kbd;
4003 XSETFASTINT (read_kbd, 0);
4006 waiting_for_user_input_p = XINT (read_kbd);
4008 /* Since we may need to wait several times,
4009 compute the absolute time to return at. */
4010 if (time_limit || microsecs)
4012 EMACS_GET_TIME (end_time);
4013 EMACS_SET_SECS_USECS (timeout, time_limit, microsecs);
4014 EMACS_ADD_TIME (end_time, end_time, timeout);
4016 #ifdef POLL_INTERRUPTED_SYS_CALL
4017 /* AlainF 5-Jul-1996
4018 HP-UX 10.10 seem to have problems with signals coming in
4019 Causes "poll: interrupted system call" messages when Emacs is run
4020 in an X window
4021 Turn off periodic alarms (in case they are in use),
4022 and then turn off any other atimers. */
4023 stop_polling ();
4024 turn_on_atimers (0);
4025 #endif /* POLL_INTERRUPTED_SYS_CALL */
4027 while (1)
4029 int timeout_reduced_for_timers = 0;
4031 /* If calling from keyboard input, do not quit
4032 since we want to return C-g as an input character.
4033 Otherwise, do pending quit if requested. */
4034 if (XINT (read_kbd) >= 0)
4035 QUIT;
4037 /* Exit now if the cell we're waiting for became non-nil. */
4038 if (! NILP (wait_for_cell) && ! NILP (XCAR (wait_for_cell)))
4039 break;
4041 /* Compute time from now till when time limit is up */
4042 /* Exit if already run out */
4043 if (time_limit == -1)
4045 /* -1 specified for timeout means
4046 gobble output available now
4047 but don't wait at all. */
4049 EMACS_SET_SECS_USECS (timeout, 0, 0);
4051 else if (time_limit || microsecs)
4053 EMACS_GET_TIME (timeout);
4054 EMACS_SUB_TIME (timeout, end_time, timeout);
4055 if (EMACS_TIME_NEG_P (timeout))
4056 break;
4058 else
4060 EMACS_SET_SECS_USECS (timeout, 100000, 0);
4063 /* Normally we run timers here.
4064 But not if wait_for_cell; in those cases,
4065 the wait is supposed to be short,
4066 and those callers cannot handle running arbitrary Lisp code here. */
4067 if (NILP (wait_for_cell))
4069 EMACS_TIME timer_delay;
4073 int old_timers_run = timers_run;
4074 struct buffer *old_buffer = current_buffer;
4076 timer_delay = timer_check (1);
4078 /* If a timer has run, this might have changed buffers
4079 an alike. Make read_key_sequence aware of that. */
4080 if (timers_run != old_timers_run
4081 && old_buffer != current_buffer
4082 && waiting_for_user_input_p == -1)
4083 record_asynch_buffer_change ();
4085 if (timers_run != old_timers_run && do_display)
4086 /* We must retry, since a timer may have requeued itself
4087 and that could alter the time_delay. */
4088 redisplay_preserve_echo_area (9);
4089 else
4090 break;
4092 while (!detect_input_pending ());
4094 /* If there is unread keyboard input, also return. */
4095 if (XINT (read_kbd) != 0
4096 && requeued_events_pending_p ())
4097 break;
4099 if (! EMACS_TIME_NEG_P (timer_delay) && time_limit != -1)
4101 EMACS_TIME difference;
4102 EMACS_SUB_TIME (difference, timer_delay, timeout);
4103 if (EMACS_TIME_NEG_P (difference))
4105 timeout = timer_delay;
4106 timeout_reduced_for_timers = 1;
4109 /* If time_limit is -1, we are not going to wait at all. */
4110 else if (time_limit != -1)
4112 /* This is so a breakpoint can be put here. */
4113 wait_reading_process_input_1 ();
4117 /* Cause C-g and alarm signals to take immediate action,
4118 and cause input available signals to zero out timeout.
4120 It is important that we do this before checking for process
4121 activity. If we get a SIGCHLD after the explicit checks for
4122 process activity, timeout is the only way we will know. */
4123 if (XINT (read_kbd) < 0)
4124 set_waiting_for_input (&timeout);
4126 /* If status of something has changed, and no input is
4127 available, notify the user of the change right away. After
4128 this explicit check, we'll let the SIGCHLD handler zap
4129 timeout to get our attention. */
4130 if (update_tick != process_tick && do_display)
4132 SELECT_TYPE Atemp, Ctemp;
4134 Atemp = input_wait_mask;
4135 #ifdef MAC_OSX
4136 /* On Mac OS X, the SELECT system call always says input is
4137 present (for reading) at stdin, even when none is. This
4138 causes the call to SELECT below to return 1 and
4139 status_notify not to be called. As a result output of
4140 subprocesses are incorrectly discarded. */
4141 FD_CLR (0, &Atemp);
4142 #endif
4143 Ctemp = connect_wait_mask;
4144 EMACS_SET_SECS_USECS (timeout, 0, 0);
4145 if ((select (max (max_process_desc, max_keyboard_desc) + 1,
4146 &Atemp,
4147 (num_pending_connects > 0 ? &Ctemp : (SELECT_TYPE *)0),
4148 (SELECT_TYPE *)0, &timeout)
4149 <= 0))
4151 /* It's okay for us to do this and then continue with
4152 the loop, since timeout has already been zeroed out. */
4153 clear_waiting_for_input ();
4154 status_notify ();
4158 /* Don't wait for output from a non-running process. Just
4159 read whatever data has already been received. */
4160 if (wait_proc != 0 && !NILP (wait_proc->raw_status_low))
4161 update_status (wait_proc);
4162 if (wait_proc != 0
4163 && ! EQ (wait_proc->status, Qrun)
4164 && ! EQ (wait_proc->status, Qconnect))
4166 int nread, total_nread = 0;
4168 clear_waiting_for_input ();
4169 XSETPROCESS (proc, wait_proc);
4171 /* Read data from the process, until we exhaust it. */
4172 while (XINT (wait_proc->infd) >= 0)
4174 nread = read_process_output (proc, XINT (wait_proc->infd));
4176 if (nread == 0)
4177 break;
4179 if (0 < nread)
4180 total_nread += nread;
4181 #ifdef EIO
4182 else if (nread == -1 && EIO == errno)
4183 break;
4184 #endif
4185 #ifdef EAGAIN
4186 else if (nread == -1 && EAGAIN == errno)
4187 break;
4188 #endif
4189 #ifdef EWOULDBLOCK
4190 else if (nread == -1 && EWOULDBLOCK == errno)
4191 break;
4192 #endif
4194 if (total_nread > 0 && do_display)
4195 redisplay_preserve_echo_area (10);
4197 break;
4200 /* Wait till there is something to do */
4202 if (!NILP (wait_for_cell))
4204 Available = non_process_wait_mask;
4205 check_connect = 0;
4207 else
4209 if (! XINT (read_kbd))
4210 Available = non_keyboard_wait_mask;
4211 else
4212 Available = input_wait_mask;
4213 check_connect = (num_pending_connects > 0);
4216 /* If frame size has changed or the window is newly mapped,
4217 redisplay now, before we start to wait. There is a race
4218 condition here; if a SIGIO arrives between now and the select
4219 and indicates that a frame is trashed, the select may block
4220 displaying a trashed screen. */
4221 if (frame_garbaged && do_display)
4223 clear_waiting_for_input ();
4224 redisplay_preserve_echo_area (11);
4225 if (XINT (read_kbd) < 0)
4226 set_waiting_for_input (&timeout);
4229 no_avail = 0;
4230 if (XINT (read_kbd) && detect_input_pending ())
4232 nfds = 0;
4233 no_avail = 1;
4235 else
4237 if (check_connect)
4238 Connecting = connect_wait_mask;
4239 nfds = select (max (max_process_desc, max_keyboard_desc) + 1,
4240 &Available,
4241 (check_connect ? &Connecting : (SELECT_TYPE *)0),
4242 (SELECT_TYPE *)0, &timeout);
4245 xerrno = errno;
4247 /* Make C-g and alarm signals set flags again */
4248 clear_waiting_for_input ();
4250 /* If we woke up due to SIGWINCH, actually change size now. */
4251 do_pending_window_change (0);
4253 if (time_limit && nfds == 0 && ! timeout_reduced_for_timers)
4254 /* We wanted the full specified time, so return now. */
4255 break;
4256 if (nfds < 0)
4258 if (xerrno == EINTR)
4259 no_avail = 1;
4260 #ifdef ultrix
4261 /* Ultrix select seems to return ENOMEM when it is
4262 interrupted. Treat it just like EINTR. Bleah. Note
4263 that we want to test for the "ultrix" CPP symbol, not
4264 "__ultrix__"; the latter is only defined under GCC, but
4265 not by DEC's bundled CC. -JimB */
4266 else if (xerrno == ENOMEM)
4267 no_avail = 1;
4268 #endif
4269 #ifdef ALLIANT
4270 /* This happens for no known reason on ALLIANT.
4271 I am guessing that this is the right response. -- RMS. */
4272 else if (xerrno == EFAULT)
4273 no_avail = 1;
4274 #endif
4275 else if (xerrno == EBADF)
4277 #ifdef AIX
4278 /* AIX doesn't handle PTY closure the same way BSD does. On AIX,
4279 the child's closure of the pts gives the parent a SIGHUP, and
4280 the ptc file descriptor is automatically closed,
4281 yielding EBADF here or at select() call above.
4282 So, SIGHUP is ignored (see def of PTY_TTY_NAME_SPRINTF
4283 in m/ibmrt-aix.h), and here we just ignore the select error.
4284 Cleanup occurs c/o status_notify after SIGCLD. */
4285 no_avail = 1; /* Cannot depend on values returned */
4286 #else
4287 abort ();
4288 #endif
4290 else
4291 error ("select error: %s", emacs_strerror (xerrno));
4294 if (no_avail)
4296 FD_ZERO (&Available);
4297 check_connect = 0;
4300 #if defined(sun) && !defined(USG5_4)
4301 if (nfds > 0 && keyboard_bit_set (&Available)
4302 && interrupt_input)
4303 /* System sometimes fails to deliver SIGIO.
4305 David J. Mackenzie says that Emacs doesn't compile under
4306 Solaris if this code is enabled, thus the USG5_4 in the CPP
4307 conditional. "I haven't noticed any ill effects so far.
4308 If you find a Solaris expert somewhere, they might know
4309 better." */
4310 kill (getpid (), SIGIO);
4311 #endif
4313 #if 0 /* When polling is used, interrupt_input is 0,
4314 so get_input_pending should read the input.
4315 So this should not be needed. */
4316 /* If we are using polling for input,
4317 and we see input available, make it get read now.
4318 Otherwise it might not actually get read for a second.
4319 And on hpux, since we turn off polling in wait_reading_process_input,
4320 it might never get read at all if we don't spend much time
4321 outside of wait_reading_process_input. */
4322 if (XINT (read_kbd) && interrupt_input
4323 && keyboard_bit_set (&Available)
4324 && input_polling_used ())
4325 kill (getpid (), SIGALRM);
4326 #endif
4328 /* Check for keyboard input */
4329 /* If there is any, return immediately
4330 to give it higher priority than subprocesses */
4332 if (XINT (read_kbd) != 0)
4334 int old_timers_run = timers_run;
4335 struct buffer *old_buffer = current_buffer;
4336 int leave = 0;
4338 if (detect_input_pending_run_timers (do_display))
4340 swallow_events (do_display);
4341 if (detect_input_pending_run_timers (do_display))
4342 leave = 1;
4345 /* If a timer has run, this might have changed buffers
4346 an alike. Make read_key_sequence aware of that. */
4347 if (timers_run != old_timers_run
4348 && waiting_for_user_input_p == -1
4349 && old_buffer != current_buffer)
4350 record_asynch_buffer_change ();
4352 if (leave)
4353 break;
4356 /* If there is unread keyboard input, also return. */
4357 if (XINT (read_kbd) != 0
4358 && requeued_events_pending_p ())
4359 break;
4361 /* If we are not checking for keyboard input now,
4362 do process events (but don't run any timers).
4363 This is so that X events will be processed.
4364 Otherwise they may have to wait until polling takes place.
4365 That would causes delays in pasting selections, for example.
4367 (We used to do this only if wait_for_cell.) */
4368 if (XINT (read_kbd) == 0 && detect_input_pending ())
4370 swallow_events (do_display);
4371 #if 0 /* Exiting when read_kbd doesn't request that seems wrong, though. */
4372 if (detect_input_pending ())
4373 break;
4374 #endif
4377 /* Exit now if the cell we're waiting for became non-nil. */
4378 if (! NILP (wait_for_cell) && ! NILP (XCAR (wait_for_cell)))
4379 break;
4381 #ifdef SIGIO
4382 /* If we think we have keyboard input waiting, but didn't get SIGIO,
4383 go read it. This can happen with X on BSD after logging out.
4384 In that case, there really is no input and no SIGIO,
4385 but select says there is input. */
4387 if (XINT (read_kbd) && interrupt_input
4388 && keyboard_bit_set (&Available) && ! noninteractive)
4389 kill (getpid (), SIGIO);
4390 #endif
4392 if (! wait_proc)
4393 got_some_input |= nfds > 0;
4395 /* If checking input just got us a size-change event from X,
4396 obey it now if we should. */
4397 if (XINT (read_kbd) || ! NILP (wait_for_cell))
4398 do_pending_window_change (0);
4400 /* Check for data from a process. */
4401 if (no_avail || nfds == 0)
4402 continue;
4404 /* Really FIRST_PROC_DESC should be 0 on Unix,
4405 but this is safer in the short run. */
4406 for (channel = 0; channel <= max_process_desc; channel++)
4408 if (FD_ISSET (channel, &Available)
4409 && FD_ISSET (channel, &non_keyboard_wait_mask))
4411 int nread;
4413 /* If waiting for this channel, arrange to return as
4414 soon as no more input to be processed. No more
4415 waiting. */
4416 if (wait_channel == channel)
4418 wait_channel = -1;
4419 time_limit = -1;
4420 got_some_input = 1;
4422 proc = chan_process[channel];
4423 if (NILP (proc))
4424 continue;
4426 /* If this is a server stream socket, accept connection. */
4427 if (EQ (XPROCESS (proc)->status, Qlisten))
4429 server_accept_connection (proc, channel);
4430 continue;
4433 /* Read data from the process, starting with our
4434 buffered-ahead character if we have one. */
4436 nread = read_process_output (proc, channel);
4437 if (nread > 0)
4439 /* Since read_process_output can run a filter,
4440 which can call accept-process-output,
4441 don't try to read from any other processes
4442 before doing the select again. */
4443 FD_ZERO (&Available);
4445 if (do_display)
4446 redisplay_preserve_echo_area (12);
4448 #ifdef EWOULDBLOCK
4449 else if (nread == -1 && errno == EWOULDBLOCK)
4451 #endif
4452 /* ISC 4.1 defines both EWOULDBLOCK and O_NONBLOCK,
4453 and Emacs uses O_NONBLOCK, so what we get is EAGAIN. */
4454 #ifdef O_NONBLOCK
4455 else if (nread == -1 && errno == EAGAIN)
4457 #else
4458 #ifdef O_NDELAY
4459 else if (nread == -1 && errno == EAGAIN)
4461 /* Note that we cannot distinguish between no input
4462 available now and a closed pipe.
4463 With luck, a closed pipe will be accompanied by
4464 subprocess termination and SIGCHLD. */
4465 else if (nread == 0 && !NETCONN_P (proc))
4467 #endif /* O_NDELAY */
4468 #endif /* O_NONBLOCK */
4469 #ifdef HAVE_PTYS
4470 /* On some OSs with ptys, when the process on one end of
4471 a pty exits, the other end gets an error reading with
4472 errno = EIO instead of getting an EOF (0 bytes read).
4473 Therefore, if we get an error reading and errno =
4474 EIO, just continue, because the child process has
4475 exited and should clean itself up soon (e.g. when we
4476 get a SIGCHLD).
4478 However, it has been known to happen that the SIGCHLD
4479 got lost. So raise the signl again just in case.
4480 It can't hurt. */
4481 else if (nread == -1 && errno == EIO)
4482 kill (getpid (), SIGCHLD);
4483 #endif /* HAVE_PTYS */
4484 /* If we can detect process termination, don't consider the process
4485 gone just because its pipe is closed. */
4486 #ifdef SIGCHLD
4487 else if (nread == 0 && !NETCONN_P (proc))
4489 #endif
4490 else
4492 /* Preserve status of processes already terminated. */
4493 XSETINT (XPROCESS (proc)->tick, ++process_tick);
4494 deactivate_process (proc);
4495 if (!NILP (XPROCESS (proc)->raw_status_low))
4496 update_status (XPROCESS (proc));
4497 if (EQ (XPROCESS (proc)->status, Qrun))
4498 XPROCESS (proc)->status
4499 = Fcons (Qexit, Fcons (make_number (256), Qnil));
4502 #ifdef NON_BLOCKING_CONNECT
4503 if (check_connect && FD_ISSET (channel, &Connecting))
4505 struct Lisp_Process *p;
4507 FD_CLR (channel, &connect_wait_mask);
4508 if (--num_pending_connects < 0)
4509 abort ();
4511 proc = chan_process[channel];
4512 if (NILP (proc))
4513 continue;
4515 p = XPROCESS (proc);
4517 #ifdef GNU_LINUX
4518 /* getsockopt(,,SO_ERROR,,) is said to hang on some systems.
4519 So only use it on systems where it is known to work. */
4521 int xlen = sizeof(xerrno);
4522 if (getsockopt(channel, SOL_SOCKET, SO_ERROR, &xerrno, &xlen))
4523 xerrno = errno;
4525 #else
4527 struct sockaddr pname;
4528 int pnamelen = sizeof(pname);
4530 /* If connection failed, getpeername will fail. */
4531 xerrno = 0;
4532 if (getpeername(channel, &pname, &pnamelen) < 0)
4534 /* Obtain connect failure code through error slippage. */
4535 char dummy;
4536 xerrno = errno;
4537 if (errno == ENOTCONN && read(channel, &dummy, 1) < 0)
4538 xerrno = errno;
4541 #endif
4542 if (xerrno)
4544 XSETINT (p->tick, ++process_tick);
4545 p->status = Fcons (Qfailed, Fcons (make_number (xerrno), Qnil));
4546 deactivate_process (proc);
4548 else
4550 p->status = Qrun;
4551 /* Execute the sentinel here. If we had relied on
4552 status_notify to do it later, it will read input
4553 from the process before calling the sentinel. */
4554 exec_sentinel (proc, build_string ("open\n"));
4555 if (!EQ (p->filter, Qt) && !EQ (p->command, Qt))
4557 FD_SET (XINT (p->infd), &input_wait_mask);
4558 FD_SET (XINT (p->infd), &non_keyboard_wait_mask);
4562 #endif /* NON_BLOCKING_CONNECT */
4563 } /* end for each file descriptor */
4564 } /* end while exit conditions not met */
4566 waiting_for_user_input_p = 0;
4568 /* If calling from keyboard input, do not quit
4569 since we want to return C-g as an input character.
4570 Otherwise, do pending quit if requested. */
4571 if (XINT (read_kbd) >= 0)
4573 /* Prevent input_pending from remaining set if we quit. */
4574 clear_input_pending ();
4575 QUIT;
4577 #ifdef POLL_INTERRUPTED_SYS_CALL
4578 /* AlainF 5-Jul-1996
4579 HP-UX 10.10 seems to have problems with signals coming in
4580 Causes "poll: interrupted system call" messages when Emacs is run
4581 in an X window
4582 Turn periodic alarms back on */
4583 start_polling ();
4584 #endif /* POLL_INTERRUPTED_SYS_CALL */
4586 return got_some_input;
4589 /* Given a list (FUNCTION ARGS...), apply FUNCTION to the ARGS. */
4591 static Lisp_Object
4592 read_process_output_call (fun_and_args)
4593 Lisp_Object fun_and_args;
4595 return apply1 (XCAR (fun_and_args), XCDR (fun_and_args));
4598 static Lisp_Object
4599 read_process_output_error_handler (error)
4600 Lisp_Object error;
4602 cmd_error_internal (error, "error in process filter: ");
4603 Vinhibit_quit = Qt;
4604 update_echo_area ();
4605 Fsleep_for (make_number (2), Qnil);
4606 return Qt;
4609 /* Read pending output from the process channel,
4610 starting with our buffered-ahead character if we have one.
4611 Yield number of decoded characters read.
4613 This function reads at most 1024 characters.
4614 If you want to read all available subprocess output,
4615 you must call it repeatedly until it returns zero.
4617 The characters read are decoded according to PROC's coding-system
4618 for decoding. */
4621 read_process_output (proc, channel)
4622 Lisp_Object proc;
4623 register int channel;
4625 register int nbytes;
4626 char *chars;
4627 register Lisp_Object outstream;
4628 register struct buffer *old = current_buffer;
4629 register struct Lisp_Process *p = XPROCESS (proc);
4630 register int opoint;
4631 struct coding_system *coding = proc_decode_coding_system[channel];
4632 int carryover = XINT (p->decoding_carryover);
4633 int readmax = 1024;
4635 #ifdef VMS
4636 VMS_PROC_STUFF *vs, *get_vms_process_pointer();
4638 vs = get_vms_process_pointer (p->pid);
4639 if (vs)
4641 if (!vs->iosb[0])
4642 return (0); /* Really weird if it does this */
4643 if (!(vs->iosb[0] & 1))
4644 return -1; /* I/O error */
4646 else
4647 error ("Could not get VMS process pointer");
4648 chars = vs->inputBuffer;
4649 nbytes = clean_vms_buffer (chars, vs->iosb[1]);
4650 if (nbytes <= 0)
4652 start_vms_process_read (vs); /* Crank up the next read on the process */
4653 return 1; /* Nothing worth printing, say we got 1 */
4655 if (carryover > 0)
4657 /* The data carried over in the previous decoding (which are at
4658 the tail of decoding buffer) should be prepended to the new
4659 data read to decode all together. */
4660 chars = (char *) alloca (nbytes + carryover);
4661 bcopy (SDATA (p->decoding_buf), buf, carryover);
4662 bcopy (vs->inputBuffer, chars + carryover, nbytes);
4664 #else /* not VMS */
4666 #ifdef DATAGRAM_SOCKETS
4667 /* A datagram is one packet; allow at least 1500+ bytes of data
4668 corresponding to the typical Ethernet frame size. */
4669 if (DATAGRAM_CHAN_P (channel))
4671 /* carryover = 0; */ /* Does carryover make sense for datagrams? */
4672 readmax += 1024;
4674 #endif
4676 chars = (char *) alloca (carryover + readmax);
4677 if (carryover)
4678 /* See the comment above. */
4679 bcopy (SDATA (p->decoding_buf), chars, carryover);
4681 #ifdef DATAGRAM_SOCKETS
4682 /* We have a working select, so proc_buffered_char is always -1. */
4683 if (DATAGRAM_CHAN_P (channel))
4685 int len = datagram_address[channel].len;
4686 nbytes = recvfrom (channel, chars + carryover, readmax - carryover,
4687 0, datagram_address[channel].sa, &len);
4689 else
4690 #endif
4691 if (proc_buffered_char[channel] < 0)
4692 nbytes = emacs_read (channel, chars + carryover, readmax - carryover);
4693 else
4695 chars[carryover] = proc_buffered_char[channel];
4696 proc_buffered_char[channel] = -1;
4697 nbytes = emacs_read (channel, chars + carryover + 1, readmax - 1 - carryover);
4698 if (nbytes < 0)
4699 nbytes = 1;
4700 else
4701 nbytes = nbytes + 1;
4703 #endif /* not VMS */
4705 XSETINT (p->decoding_carryover, 0);
4707 /* At this point, NBYTES holds number of bytes just received
4708 (including the one in proc_buffered_char[channel]). */
4709 if (nbytes <= 0)
4711 if (nbytes < 0 || coding->mode & CODING_MODE_LAST_BLOCK)
4712 return nbytes;
4713 coding->mode |= CODING_MODE_LAST_BLOCK;
4716 /* Now set NBYTES how many bytes we must decode. */
4717 nbytes += carryover;
4719 /* Read and dispose of the process output. */
4720 outstream = p->filter;
4721 if (!NILP (outstream))
4723 /* We inhibit quit here instead of just catching it so that
4724 hitting ^G when a filter happens to be running won't screw
4725 it up. */
4726 int count = SPECPDL_INDEX ();
4727 Lisp_Object odeactivate;
4728 Lisp_Object obuffer, okeymap;
4729 Lisp_Object text;
4730 int outer_running_asynch_code = running_asynch_code;
4731 int waiting = waiting_for_user_input_p;
4733 /* No need to gcpro these, because all we do with them later
4734 is test them for EQness, and none of them should be a string. */
4735 odeactivate = Vdeactivate_mark;
4736 XSETBUFFER (obuffer, current_buffer);
4737 okeymap = current_buffer->keymap;
4739 specbind (Qinhibit_quit, Qt);
4740 specbind (Qlast_nonmenu_event, Qt);
4742 /* In case we get recursively called,
4743 and we already saved the match data nonrecursively,
4744 save the same match data in safely recursive fashion. */
4745 if (outer_running_asynch_code)
4747 Lisp_Object tem;
4748 /* Don't clobber the CURRENT match data, either! */
4749 tem = Fmatch_data (Qnil, Qnil);
4750 restore_match_data ();
4751 record_unwind_protect (Fset_match_data, Fmatch_data (Qnil, Qnil));
4752 Fset_match_data (tem);
4755 /* For speed, if a search happens within this code,
4756 save the match data in a special nonrecursive fashion. */
4757 running_asynch_code = 1;
4759 text = decode_coding_string (make_unibyte_string (chars, nbytes),
4760 coding, 0);
4761 Vlast_coding_system_used = coding->symbol;
4762 /* A new coding system might be found. */
4763 if (!EQ (p->decode_coding_system, coding->symbol))
4765 p->decode_coding_system = coding->symbol;
4767 /* Don't call setup_coding_system for
4768 proc_decode_coding_system[channel] here. It is done in
4769 detect_coding called via decode_coding above. */
4771 /* If a coding system for encoding is not yet decided, we set
4772 it as the same as coding-system for decoding.
4774 But, before doing that we must check if
4775 proc_encode_coding_system[p->outfd] surely points to a
4776 valid memory because p->outfd will be changed once EOF is
4777 sent to the process. */
4778 if (NILP (p->encode_coding_system)
4779 && proc_encode_coding_system[XINT (p->outfd)])
4781 p->encode_coding_system = coding->symbol;
4782 setup_coding_system (coding->symbol,
4783 proc_encode_coding_system[XINT (p->outfd)]);
4787 carryover = nbytes - coding->consumed;
4788 bcopy (chars + coding->consumed, SDATA (p->decoding_buf),
4789 carryover);
4790 XSETINT (p->decoding_carryover, carryover);
4791 /* Adjust the multibyteness of TEXT to that of the filter. */
4792 if (NILP (p->filter_multibyte) != ! STRING_MULTIBYTE (text))
4793 text = (STRING_MULTIBYTE (text)
4794 ? Fstring_as_unibyte (text)
4795 : Fstring_to_multibyte (text));
4796 if (SBYTES (text) > 0)
4797 internal_condition_case_1 (read_process_output_call,
4798 Fcons (outstream,
4799 Fcons (proc, Fcons (text, Qnil))),
4800 !NILP (Vdebug_on_error) ? Qnil : Qerror,
4801 read_process_output_error_handler);
4803 /* If we saved the match data nonrecursively, restore it now. */
4804 restore_match_data ();
4805 running_asynch_code = outer_running_asynch_code;
4807 /* Handling the process output should not deactivate the mark. */
4808 Vdeactivate_mark = odeactivate;
4810 /* Restore waiting_for_user_input_p as it was
4811 when we were called, in case the filter clobbered it. */
4812 waiting_for_user_input_p = waiting;
4814 #if 0 /* Call record_asynch_buffer_change unconditionally,
4815 because we might have changed minor modes or other things
4816 that affect key bindings. */
4817 if (! EQ (Fcurrent_buffer (), obuffer)
4818 || ! EQ (current_buffer->keymap, okeymap))
4819 #endif
4820 /* But do it only if the caller is actually going to read events.
4821 Otherwise there's no need to make him wake up, and it could
4822 cause trouble (for example it would make Fsit_for return). */
4823 if (waiting_for_user_input_p == -1)
4824 record_asynch_buffer_change ();
4826 #ifdef VMS
4827 start_vms_process_read (vs);
4828 #endif
4829 unbind_to (count, Qnil);
4830 return nbytes;
4833 /* If no filter, write into buffer if it isn't dead. */
4834 if (!NILP (p->buffer) && !NILP (XBUFFER (p->buffer)->name))
4836 Lisp_Object old_read_only;
4837 int old_begv, old_zv;
4838 int old_begv_byte, old_zv_byte;
4839 Lisp_Object odeactivate;
4840 int before, before_byte;
4841 int opoint_byte;
4842 Lisp_Object text;
4843 struct buffer *b;
4845 odeactivate = Vdeactivate_mark;
4847 Fset_buffer (p->buffer);
4848 opoint = PT;
4849 opoint_byte = PT_BYTE;
4850 old_read_only = current_buffer->read_only;
4851 old_begv = BEGV;
4852 old_zv = ZV;
4853 old_begv_byte = BEGV_BYTE;
4854 old_zv_byte = ZV_BYTE;
4856 current_buffer->read_only = Qnil;
4858 /* Insert new output into buffer
4859 at the current end-of-output marker,
4860 thus preserving logical ordering of input and output. */
4861 if (XMARKER (p->mark)->buffer)
4862 SET_PT_BOTH (clip_to_bounds (BEGV, marker_position (p->mark), ZV),
4863 clip_to_bounds (BEGV_BYTE, marker_byte_position (p->mark),
4864 ZV_BYTE));
4865 else
4866 SET_PT_BOTH (ZV, ZV_BYTE);
4867 before = PT;
4868 before_byte = PT_BYTE;
4870 /* If the output marker is outside of the visible region, save
4871 the restriction and widen. */
4872 if (! (BEGV <= PT && PT <= ZV))
4873 Fwiden ();
4875 text = decode_coding_string (make_unibyte_string (chars, nbytes),
4876 coding, 0);
4877 Vlast_coding_system_used = coding->symbol;
4878 /* A new coding system might be found. See the comment in the
4879 similar code in the previous `if' block. */
4880 if (!EQ (p->decode_coding_system, coding->symbol))
4882 p->decode_coding_system = coding->symbol;
4883 if (NILP (p->encode_coding_system)
4884 && proc_encode_coding_system[XINT (p->outfd)])
4886 p->encode_coding_system = coding->symbol;
4887 setup_coding_system (coding->symbol,
4888 proc_encode_coding_system[XINT (p->outfd)]);
4891 carryover = nbytes - coding->consumed;
4892 bcopy (chars + coding->consumed, SDATA (p->decoding_buf),
4893 carryover);
4894 XSETINT (p->decoding_carryover, carryover);
4895 /* Adjust the multibyteness of TEXT to that of the buffer. */
4896 if (NILP (current_buffer->enable_multibyte_characters)
4897 != ! STRING_MULTIBYTE (text))
4898 text = (STRING_MULTIBYTE (text)
4899 ? Fstring_as_unibyte (text)
4900 : Fstring_to_multibyte (text));
4901 /* Insert before markers in case we are inserting where
4902 the buffer's mark is, and the user's next command is Meta-y. */
4903 insert_from_string_before_markers (text, 0, 0,
4904 SCHARS (text), SBYTES (text), 0);
4906 /* Make sure the process marker's position is valid when the
4907 process buffer is changed in the signal_after_change above.
4908 W3 is known to do that. */
4909 if (BUFFERP (p->buffer)
4910 && (b = XBUFFER (p->buffer), b != current_buffer))
4911 set_marker_both (p->mark, p->buffer, BUF_PT (b), BUF_PT_BYTE (b));
4912 else
4913 set_marker_both (p->mark, p->buffer, PT, PT_BYTE);
4915 update_mode_lines++;
4917 /* Make sure opoint and the old restrictions
4918 float ahead of any new text just as point would. */
4919 if (opoint >= before)
4921 opoint += PT - before;
4922 opoint_byte += PT_BYTE - before_byte;
4924 if (old_begv > before)
4926 old_begv += PT - before;
4927 old_begv_byte += PT_BYTE - before_byte;
4929 if (old_zv >= before)
4931 old_zv += PT - before;
4932 old_zv_byte += PT_BYTE - before_byte;
4935 /* If the restriction isn't what it should be, set it. */
4936 if (old_begv != BEGV || old_zv != ZV)
4937 Fnarrow_to_region (make_number (old_begv), make_number (old_zv));
4939 /* Handling the process output should not deactivate the mark. */
4940 Vdeactivate_mark = odeactivate;
4942 current_buffer->read_only = old_read_only;
4943 SET_PT_BOTH (opoint, opoint_byte);
4944 set_buffer_internal (old);
4946 #ifdef VMS
4947 start_vms_process_read (vs);
4948 #endif
4949 return nbytes;
4952 DEFUN ("waiting-for-user-input-p", Fwaiting_for_user_input_p, Swaiting_for_user_input_p,
4953 0, 0, 0,
4954 doc: /* Returns non-nil if emacs is waiting for input from the user.
4955 This is intended for use by asynchronous process output filters and sentinels. */)
4958 return (waiting_for_user_input_p ? Qt : Qnil);
4961 /* Sending data to subprocess */
4963 jmp_buf send_process_frame;
4964 Lisp_Object process_sent_to;
4966 SIGTYPE
4967 send_process_trap ()
4969 #ifdef BSD4_1
4970 sigrelse (SIGPIPE);
4971 sigrelse (SIGALRM);
4972 #endif /* BSD4_1 */
4973 longjmp (send_process_frame, 1);
4976 /* Send some data to process PROC.
4977 BUF is the beginning of the data; LEN is the number of characters.
4978 OBJECT is the Lisp object that the data comes from. If OBJECT is
4979 nil or t, it means that the data comes from C string.
4981 If OBJECT is not nil, the data is encoded by PROC's coding-system
4982 for encoding before it is sent.
4984 This function can evaluate Lisp code and can garbage collect. */
4986 void
4987 send_process (proc, buf, len, object)
4988 volatile Lisp_Object proc;
4989 unsigned char *volatile buf;
4990 volatile int len;
4991 volatile Lisp_Object object;
4993 /* Use volatile to protect variables from being clobbered by longjmp. */
4994 int rv;
4995 struct coding_system *coding;
4996 struct gcpro gcpro1;
4998 GCPRO1 (object);
5000 #ifdef VMS
5001 struct Lisp_Process *p = XPROCESS (proc);
5002 VMS_PROC_STUFF *vs, *get_vms_process_pointer();
5003 #endif /* VMS */
5005 if (! NILP (XPROCESS (proc)->raw_status_low))
5006 update_status (XPROCESS (proc));
5007 if (! EQ (XPROCESS (proc)->status, Qrun))
5008 error ("Process %s not running",
5009 SDATA (XPROCESS (proc)->name));
5010 if (XINT (XPROCESS (proc)->outfd) < 0)
5011 error ("Output file descriptor of %s is closed",
5012 SDATA (XPROCESS (proc)->name));
5014 coding = proc_encode_coding_system[XINT (XPROCESS (proc)->outfd)];
5015 Vlast_coding_system_used = coding->symbol;
5017 if ((STRINGP (object) && STRING_MULTIBYTE (object))
5018 || (BUFFERP (object)
5019 && !NILP (XBUFFER (object)->enable_multibyte_characters))
5020 || EQ (object, Qt))
5022 if (!EQ (coding->symbol, XPROCESS (proc)->encode_coding_system))
5023 /* The coding system for encoding was changed to raw-text
5024 because we sent a unibyte text previously. Now we are
5025 sending a multibyte text, thus we must encode it by the
5026 original coding system specified for the current
5027 process. */
5028 setup_coding_system (XPROCESS (proc)->encode_coding_system, coding);
5029 /* src_multibyte should be set to 1 _after_ a call to
5030 setup_coding_system, since it resets src_multibyte to
5031 zero. */
5032 coding->src_multibyte = 1;
5034 else
5036 /* For sending a unibyte text, character code conversion should
5037 not take place but EOL conversion should. So, setup raw-text
5038 or one of the subsidiary if we have not yet done it. */
5039 if (coding->type != coding_type_raw_text)
5041 if (CODING_REQUIRE_FLUSHING (coding))
5043 /* But, before changing the coding, we must flush out data. */
5044 coding->mode |= CODING_MODE_LAST_BLOCK;
5045 send_process (proc, "", 0, Qt);
5047 coding->src_multibyte = 0;
5048 setup_raw_text_coding_system (coding);
5051 coding->dst_multibyte = 0;
5053 if (CODING_REQUIRE_ENCODING (coding))
5055 int require = encoding_buffer_size (coding, len);
5056 int from_byte = -1, from = -1, to = -1;
5058 if (BUFFERP (object))
5060 from_byte = BUF_PTR_BYTE_POS (XBUFFER (object), buf);
5061 from = buf_bytepos_to_charpos (XBUFFER (object), from_byte);
5062 to = buf_bytepos_to_charpos (XBUFFER (object), from_byte + len);
5064 else if (STRINGP (object))
5066 from_byte = buf - SDATA (object);
5067 from = string_byte_to_char (object, from_byte);
5068 to = string_byte_to_char (object, from_byte + len);
5071 if (coding->composing != COMPOSITION_DISABLED)
5073 if (from_byte >= 0)
5074 coding_save_composition (coding, from, to, object);
5075 else
5076 coding->composing = COMPOSITION_DISABLED;
5079 if (SBYTES (XPROCESS (proc)->encoding_buf) < require)
5080 XPROCESS (proc)->encoding_buf = make_uninit_string (require);
5082 if (from_byte >= 0)
5083 buf = (BUFFERP (object)
5084 ? BUF_BYTE_ADDRESS (XBUFFER (object), from_byte)
5085 : SDATA (object) + from_byte);
5087 object = XPROCESS (proc)->encoding_buf;
5088 encode_coding (coding, (char *) buf, SDATA (object),
5089 len, SBYTES (object));
5090 len = coding->produced;
5091 buf = SDATA (object);
5094 #ifdef VMS
5095 vs = get_vms_process_pointer (p->pid);
5096 if (vs == 0)
5097 error ("Could not find this process: %x", p->pid);
5098 else if (write_to_vms_process (vs, buf, len))
5100 #else /* not VMS */
5102 if (pty_max_bytes == 0)
5104 #if defined (HAVE_FPATHCONF) && defined (_PC_MAX_CANON)
5105 pty_max_bytes = fpathconf (XFASTINT (XPROCESS (proc)->outfd),
5106 _PC_MAX_CANON);
5107 if (pty_max_bytes < 0)
5108 pty_max_bytes = 250;
5109 #else
5110 pty_max_bytes = 250;
5111 #endif
5112 /* Deduct one, to leave space for the eof. */
5113 pty_max_bytes--;
5116 /* 2000-09-21: Emacs 20.7, sparc-sun-solaris-2.6, GCC 2.95.2,
5117 CFLAGS="-g -O": The value of the parameter `proc' is clobbered
5118 when returning with longjmp despite being declared volatile. */
5119 if (!setjmp (send_process_frame))
5121 process_sent_to = proc;
5122 while (len > 0)
5124 int this = len;
5125 SIGTYPE (*old_sigpipe)();
5127 /* Decide how much data we can send in one batch.
5128 Long lines need to be split into multiple batches. */
5129 if (!NILP (XPROCESS (proc)->pty_flag))
5131 /* Starting this at zero is always correct when not the first
5132 iteration because the previous iteration ended by sending C-d.
5133 It may not be correct for the first iteration
5134 if a partial line was sent in a separate send_process call.
5135 If that proves worth handling, we need to save linepos
5136 in the process object. */
5137 int linepos = 0;
5138 unsigned char *ptr = (unsigned char *) buf;
5139 unsigned char *end = (unsigned char *) buf + len;
5141 /* Scan through this text for a line that is too long. */
5142 while (ptr != end && linepos < pty_max_bytes)
5144 if (*ptr == '\n')
5145 linepos = 0;
5146 else
5147 linepos++;
5148 ptr++;
5150 /* If we found one, break the line there
5151 and put in a C-d to force the buffer through. */
5152 this = ptr - buf;
5155 /* Send this batch, using one or more write calls. */
5156 while (this > 0)
5158 int outfd = XINT (XPROCESS (proc)->outfd);
5159 old_sigpipe = (SIGTYPE (*) ()) signal (SIGPIPE, send_process_trap);
5160 #ifdef DATAGRAM_SOCKETS
5161 if (DATAGRAM_CHAN_P (outfd))
5163 rv = sendto (outfd, (char *) buf, this,
5164 0, datagram_address[outfd].sa,
5165 datagram_address[outfd].len);
5166 if (rv < 0 && errno == EMSGSIZE)
5167 report_file_error ("sending datagram", Fcons (proc, Qnil));
5169 else
5170 #endif
5171 rv = emacs_write (outfd, (char *) buf, this);
5172 signal (SIGPIPE, old_sigpipe);
5174 if (rv < 0)
5176 if (0
5177 #ifdef EWOULDBLOCK
5178 || errno == EWOULDBLOCK
5179 #endif
5180 #ifdef EAGAIN
5181 || errno == EAGAIN
5182 #endif
5184 /* Buffer is full. Wait, accepting input;
5185 that may allow the program
5186 to finish doing output and read more. */
5188 Lisp_Object zero;
5189 int offset = 0;
5191 #ifdef BROKEN_PTY_READ_AFTER_EAGAIN
5192 /* A gross hack to work around a bug in FreeBSD.
5193 In the following sequence, read(2) returns
5194 bogus data:
5196 write(2) 1022 bytes
5197 write(2) 954 bytes, get EAGAIN
5198 read(2) 1024 bytes in process_read_output
5199 read(2) 11 bytes in process_read_output
5201 That is, read(2) returns more bytes than have
5202 ever been written successfully. The 1033 bytes
5203 read are the 1022 bytes written successfully
5204 after processing (for example with CRs added if
5205 the terminal is set up that way which it is
5206 here). The same bytes will be seen again in a
5207 later read(2), without the CRs. */
5209 if (errno == EAGAIN)
5211 int flags = FWRITE;
5212 ioctl (XINT (XPROCESS (proc)->outfd), TIOCFLUSH,
5213 &flags);
5215 #endif /* BROKEN_PTY_READ_AFTER_EAGAIN */
5217 /* Running filters might relocate buffers or strings.
5218 Arrange to relocate BUF. */
5219 if (BUFFERP (object))
5220 offset = BUF_PTR_BYTE_POS (XBUFFER (object), buf);
5221 else if (STRINGP (object))
5222 offset = buf - SDATA (object);
5224 XSETFASTINT (zero, 0);
5225 #ifdef EMACS_HAS_USECS
5226 wait_reading_process_input (0, 20000, zero, 0);
5227 #else
5228 wait_reading_process_input (1, 0, zero, 0);
5229 #endif
5231 if (BUFFERP (object))
5232 buf = BUF_BYTE_ADDRESS (XBUFFER (object), offset);
5233 else if (STRINGP (object))
5234 buf = offset + SDATA (object);
5236 rv = 0;
5238 else
5239 /* This is a real error. */
5240 report_file_error ("writing to process", Fcons (proc, Qnil));
5242 buf += rv;
5243 len -= rv;
5244 this -= rv;
5247 /* If we sent just part of the string, put in an EOF
5248 to force it through, before we send the rest. */
5249 if (len > 0)
5250 Fprocess_send_eof (proc);
5253 #endif /* not VMS */
5254 else
5256 #ifndef VMS
5257 proc = process_sent_to;
5258 #endif
5259 XPROCESS (proc)->raw_status_low = Qnil;
5260 XPROCESS (proc)->raw_status_high = Qnil;
5261 XPROCESS (proc)->status = Fcons (Qexit, Fcons (make_number (256), Qnil));
5262 XSETINT (XPROCESS (proc)->tick, ++process_tick);
5263 deactivate_process (proc);
5264 #ifdef VMS
5265 error ("Error writing to process %s; closed it",
5266 SDATA (XPROCESS (proc)->name));
5267 #else
5268 error ("SIGPIPE raised on process %s; closed it",
5269 SDATA (XPROCESS (proc)->name));
5270 #endif
5273 UNGCPRO;
5276 DEFUN ("process-send-region", Fprocess_send_region, Sprocess_send_region,
5277 3, 3, 0,
5278 doc: /* Send current contents of region as input to PROCESS.
5279 PROCESS may be a process, a buffer, the name of a process or buffer, or
5280 nil, indicating the current buffer's process.
5281 Called from program, takes three arguments, PROCESS, START and END.
5282 If the region is more than 500 characters long,
5283 it is sent in several bunches. This may happen even for shorter regions.
5284 Output from processes can arrive in between bunches. */)
5285 (process, start, end)
5286 Lisp_Object process, start, end;
5288 Lisp_Object proc;
5289 int start1, end1;
5291 proc = get_process (process);
5292 validate_region (&start, &end);
5294 if (XINT (start) < GPT && XINT (end) > GPT)
5295 move_gap (XINT (start));
5297 start1 = CHAR_TO_BYTE (XINT (start));
5298 end1 = CHAR_TO_BYTE (XINT (end));
5299 send_process (proc, BYTE_POS_ADDR (start1), end1 - start1,
5300 Fcurrent_buffer ());
5302 return Qnil;
5305 DEFUN ("process-send-string", Fprocess_send_string, Sprocess_send_string,
5306 2, 2, 0,
5307 doc: /* Send PROCESS the contents of STRING as input.
5308 PROCESS may be a process, a buffer, the name of a process or buffer, or
5309 nil, indicating the current buffer's process.
5310 If STRING is more than 500 characters long,
5311 it is sent in several bunches. This may happen even for shorter strings.
5312 Output from processes can arrive in between bunches. */)
5313 (process, string)
5314 Lisp_Object process, string;
5316 Lisp_Object proc;
5317 CHECK_STRING (string);
5318 proc = get_process (process);
5319 send_process (proc, SDATA (string),
5320 SBYTES (string), string);
5321 return Qnil;
5324 /* Return the foreground process group for the tty/pty that
5325 the process P uses. */
5326 static int
5327 emacs_get_tty_pgrp (p)
5328 struct Lisp_Process *p;
5330 int gid = -1;
5332 #ifdef TIOCGPGRP
5333 if (ioctl (XINT (p->infd), TIOCGPGRP, &gid) == -1 && ! NILP (p->tty_name))
5335 int fd;
5336 /* Some OS:es (Solaris 8/9) does not allow TIOCGPGRP from the
5337 master side. Try the slave side. */
5338 fd = emacs_open (XSTRING (p->tty_name)->data, O_RDONLY, 0);
5340 if (fd != -1)
5342 ioctl (fd, TIOCGPGRP, &gid);
5343 emacs_close (fd);
5346 #endif /* defined (TIOCGPGRP ) */
5348 return gid;
5351 DEFUN ("process-running-child-p", Fprocess_running_child_p,
5352 Sprocess_running_child_p, 0, 1, 0,
5353 doc: /* Return t if PROCESS has given the terminal to a child.
5354 If the operating system does not make it possible to find out,
5355 return t unconditionally. */)
5356 (process)
5357 Lisp_Object process;
5359 /* Initialize in case ioctl doesn't exist or gives an error,
5360 in a way that will cause returning t. */
5361 int gid;
5362 Lisp_Object proc;
5363 struct Lisp_Process *p;
5365 proc = get_process (process);
5366 p = XPROCESS (proc);
5368 if (!EQ (p->childp, Qt))
5369 error ("Process %s is not a subprocess",
5370 SDATA (p->name));
5371 if (XINT (p->infd) < 0)
5372 error ("Process %s is not active",
5373 SDATA (p->name));
5375 gid = emacs_get_tty_pgrp (p);
5377 if (gid == XFASTINT (p->pid))
5378 return Qnil;
5379 return Qt;
5382 /* send a signal number SIGNO to PROCESS.
5383 If CURRENT_GROUP is t, that means send to the process group
5384 that currently owns the terminal being used to communicate with PROCESS.
5385 This is used for various commands in shell mode.
5386 If CURRENT_GROUP is lambda, that means send to the process group
5387 that currently owns the terminal, but only if it is NOT the shell itself.
5389 If NOMSG is zero, insert signal-announcements into process's buffers
5390 right away.
5392 If we can, we try to signal PROCESS by sending control characters
5393 down the pty. This allows us to signal inferiors who have changed
5394 their uid, for which killpg would return an EPERM error. */
5396 static void
5397 process_send_signal (process, signo, current_group, nomsg)
5398 Lisp_Object process;
5399 int signo;
5400 Lisp_Object current_group;
5401 int nomsg;
5403 Lisp_Object proc;
5404 register struct Lisp_Process *p;
5405 int gid;
5406 int no_pgrp = 0;
5408 proc = get_process (process);
5409 p = XPROCESS (proc);
5411 if (!EQ (p->childp, Qt))
5412 error ("Process %s is not a subprocess",
5413 SDATA (p->name));
5414 if (XINT (p->infd) < 0)
5415 error ("Process %s is not active",
5416 SDATA (p->name));
5418 if (NILP (p->pty_flag))
5419 current_group = Qnil;
5421 /* If we are using pgrps, get a pgrp number and make it negative. */
5422 if (NILP (current_group))
5423 /* Send the signal to the shell's process group. */
5424 gid = XFASTINT (p->pid);
5425 else
5427 #ifdef SIGNALS_VIA_CHARACTERS
5428 /* If possible, send signals to the entire pgrp
5429 by sending an input character to it. */
5431 /* TERMIOS is the latest and bestest, and seems most likely to
5432 work. If the system has it, use it. */
5433 #ifdef HAVE_TERMIOS
5434 struct termios t;
5436 switch (signo)
5438 case SIGINT:
5439 tcgetattr (XINT (p->infd), &t);
5440 send_process (proc, &t.c_cc[VINTR], 1, Qnil);
5441 return;
5443 case SIGQUIT:
5444 tcgetattr (XINT (p->infd), &t);
5445 send_process (proc, &t.c_cc[VQUIT], 1, Qnil);
5446 return;
5448 case SIGTSTP:
5449 tcgetattr (XINT (p->infd), &t);
5450 #if defined (VSWTCH) && !defined (PREFER_VSUSP)
5451 send_process (proc, &t.c_cc[VSWTCH], 1, Qnil);
5452 #else
5453 send_process (proc, &t.c_cc[VSUSP], 1, Qnil);
5454 #endif
5455 return;
5458 #else /* ! HAVE_TERMIOS */
5460 /* On Berkeley descendants, the following IOCTL's retrieve the
5461 current control characters. */
5462 #if defined (TIOCGLTC) && defined (TIOCGETC)
5464 struct tchars c;
5465 struct ltchars lc;
5467 switch (signo)
5469 case SIGINT:
5470 ioctl (XINT (p->infd), TIOCGETC, &c);
5471 send_process (proc, &c.t_intrc, 1, Qnil);
5472 return;
5473 case SIGQUIT:
5474 ioctl (XINT (p->infd), TIOCGETC, &c);
5475 send_process (proc, &c.t_quitc, 1, Qnil);
5476 return;
5477 #ifdef SIGTSTP
5478 case SIGTSTP:
5479 ioctl (XINT (p->infd), TIOCGLTC, &lc);
5480 send_process (proc, &lc.t_suspc, 1, Qnil);
5481 return;
5482 #endif /* ! defined (SIGTSTP) */
5485 #else /* ! defined (TIOCGLTC) && defined (TIOCGETC) */
5487 /* On SYSV descendants, the TCGETA ioctl retrieves the current control
5488 characters. */
5489 #ifdef TCGETA
5490 struct termio t;
5491 switch (signo)
5493 case SIGINT:
5494 ioctl (XINT (p->infd), TCGETA, &t);
5495 send_process (proc, &t.c_cc[VINTR], 1, Qnil);
5496 return;
5497 case SIGQUIT:
5498 ioctl (XINT (p->infd), TCGETA, &t);
5499 send_process (proc, &t.c_cc[VQUIT], 1, Qnil);
5500 return;
5501 #ifdef SIGTSTP
5502 case SIGTSTP:
5503 ioctl (XINT (p->infd), TCGETA, &t);
5504 send_process (proc, &t.c_cc[VSWTCH], 1, Qnil);
5505 return;
5506 #endif /* ! defined (SIGTSTP) */
5508 #else /* ! defined (TCGETA) */
5509 Your configuration files are messed up.
5510 /* If your system configuration files define SIGNALS_VIA_CHARACTERS,
5511 you'd better be using one of the alternatives above! */
5512 #endif /* ! defined (TCGETA) */
5513 #endif /* ! defined (TIOCGLTC) && defined (TIOCGETC) */
5514 #endif /* ! defined HAVE_TERMIOS */
5515 abort ();
5516 /* The code above always returns from the function. */
5517 #endif /* defined (SIGNALS_VIA_CHARACTERS) */
5519 #ifdef TIOCGPGRP
5520 /* Get the current pgrp using the tty itself, if we have that.
5521 Otherwise, use the pty to get the pgrp.
5522 On pfa systems, saka@pfu.fujitsu.co.JP writes:
5523 "TIOCGPGRP symbol defined in sys/ioctl.h at E50.
5524 But, TIOCGPGRP does not work on E50 ;-P works fine on E60"
5525 His patch indicates that if TIOCGPGRP returns an error, then
5526 we should just assume that p->pid is also the process group id. */
5528 gid = emacs_get_tty_pgrp (p);
5530 if (gid == -1)
5531 /* If we can't get the information, assume
5532 the shell owns the tty. */
5533 gid = XFASTINT (p->pid);
5535 /* It is not clear whether anything really can set GID to -1.
5536 Perhaps on some system one of those ioctls can or could do so.
5537 Or perhaps this is vestigial. */
5538 if (gid == -1)
5539 no_pgrp = 1;
5540 #else /* ! defined (TIOCGPGRP ) */
5541 /* Can't select pgrps on this system, so we know that
5542 the child itself heads the pgrp. */
5543 gid = XFASTINT (p->pid);
5544 #endif /* ! defined (TIOCGPGRP ) */
5546 /* If current_group is lambda, and the shell owns the terminal,
5547 don't send any signal. */
5548 if (EQ (current_group, Qlambda) && gid == XFASTINT (p->pid))
5549 return;
5552 switch (signo)
5554 #ifdef SIGCONT
5555 case SIGCONT:
5556 p->raw_status_low = Qnil;
5557 p->raw_status_high = Qnil;
5558 p->status = Qrun;
5559 XSETINT (p->tick, ++process_tick);
5560 if (!nomsg)
5561 status_notify ();
5562 break;
5563 #endif /* ! defined (SIGCONT) */
5564 case SIGINT:
5565 #ifdef VMS
5566 send_process (proc, "\003", 1, Qnil); /* ^C */
5567 goto whoosh;
5568 #endif
5569 case SIGQUIT:
5570 #ifdef VMS
5571 send_process (proc, "\031", 1, Qnil); /* ^Y */
5572 goto whoosh;
5573 #endif
5574 case SIGKILL:
5575 #ifdef VMS
5576 sys$forcex (&(XFASTINT (p->pid)), 0, 1);
5577 whoosh:
5578 #endif
5579 flush_pending_output (XINT (p->infd));
5580 break;
5583 /* If we don't have process groups, send the signal to the immediate
5584 subprocess. That isn't really right, but it's better than any
5585 obvious alternative. */
5586 if (no_pgrp)
5588 kill (XFASTINT (p->pid), signo);
5589 return;
5592 /* gid may be a pid, or minus a pgrp's number */
5593 #ifdef TIOCSIGSEND
5594 if (!NILP (current_group))
5596 if (ioctl (XINT (p->infd), TIOCSIGSEND, signo) == -1)
5597 EMACS_KILLPG (gid, signo);
5599 else
5601 gid = - XFASTINT (p->pid);
5602 kill (gid, signo);
5604 #else /* ! defined (TIOCSIGSEND) */
5605 EMACS_KILLPG (gid, signo);
5606 #endif /* ! defined (TIOCSIGSEND) */
5609 DEFUN ("interrupt-process", Finterrupt_process, Sinterrupt_process, 0, 2, 0,
5610 doc: /* Interrupt process PROCESS.
5611 PROCESS may be a process, a buffer, or the name of a process or buffer.
5612 nil or no arg means current buffer's process.
5613 Second arg CURRENT-GROUP non-nil means send signal to
5614 the current process-group of the process's controlling terminal
5615 rather than to the process's own process group.
5616 If the process is a shell, this means interrupt current subjob
5617 rather than the shell.
5619 If CURRENT-GROUP is `lambda', and if the shell owns the terminal,
5620 don't send the signal. */)
5621 (process, current_group)
5622 Lisp_Object process, current_group;
5624 process_send_signal (process, SIGINT, current_group, 0);
5625 return process;
5628 DEFUN ("kill-process", Fkill_process, Skill_process, 0, 2, 0,
5629 doc: /* Kill process PROCESS. May be process or name of one.
5630 See function `interrupt-process' for more details on usage. */)
5631 (process, current_group)
5632 Lisp_Object process, current_group;
5634 process_send_signal (process, SIGKILL, current_group, 0);
5635 return process;
5638 DEFUN ("quit-process", Fquit_process, Squit_process, 0, 2, 0,
5639 doc: /* Send QUIT signal to process PROCESS. May be process or name of one.
5640 See function `interrupt-process' for more details on usage. */)
5641 (process, current_group)
5642 Lisp_Object process, current_group;
5644 process_send_signal (process, SIGQUIT, current_group, 0);
5645 return process;
5648 DEFUN ("stop-process", Fstop_process, Sstop_process, 0, 2, 0,
5649 doc: /* Stop process PROCESS. May be process or name of one.
5650 See function `interrupt-process' for more details on usage.
5651 If PROCESS is a network process, inhibit handling of incoming traffic. */)
5652 (process, current_group)
5653 Lisp_Object process, current_group;
5655 #ifdef HAVE_SOCKETS
5656 if (PROCESSP (process) && NETCONN_P (process))
5658 struct Lisp_Process *p;
5660 p = XPROCESS (process);
5661 if (NILP (p->command)
5662 && XINT (p->infd) >= 0)
5664 FD_CLR (XINT (p->infd), &input_wait_mask);
5665 FD_CLR (XINT (p->infd), &non_keyboard_wait_mask);
5667 p->command = Qt;
5668 return process;
5670 #endif
5671 #ifndef SIGTSTP
5672 error ("no SIGTSTP support");
5673 #else
5674 process_send_signal (process, SIGTSTP, current_group, 0);
5675 #endif
5676 return process;
5679 DEFUN ("continue-process", Fcontinue_process, Scontinue_process, 0, 2, 0,
5680 doc: /* Continue process PROCESS. May be process or name of one.
5681 See function `interrupt-process' for more details on usage.
5682 If PROCESS is a network process, resume handling of incoming traffic. */)
5683 (process, current_group)
5684 Lisp_Object process, current_group;
5686 #ifdef HAVE_SOCKETS
5687 if (PROCESSP (process) && NETCONN_P (process))
5689 struct Lisp_Process *p;
5691 p = XPROCESS (process);
5692 if (EQ (p->command, Qt)
5693 && XINT (p->infd) >= 0
5694 && (!EQ (p->filter, Qt) || EQ (p->status, Qlisten)))
5696 FD_SET (XINT (p->infd), &input_wait_mask);
5697 FD_SET (XINT (p->infd), &non_keyboard_wait_mask);
5699 p->command = Qnil;
5700 return process;
5702 #endif
5703 #ifdef SIGCONT
5704 process_send_signal (process, SIGCONT, current_group, 0);
5705 #else
5706 error ("no SIGCONT support");
5707 #endif
5708 return process;
5711 DEFUN ("signal-process", Fsignal_process, Ssignal_process,
5712 2, 2, "sProcess (name or number): \nnSignal code: ",
5713 doc: /* Send PROCESS the signal with code SIGCODE.
5714 PROCESS may also be an integer specifying the process id of the
5715 process to signal; in this case, the process need not be a child of
5716 this Emacs.
5717 SIGCODE may be an integer, or a symbol whose name is a signal name. */)
5718 (process, sigcode)
5719 Lisp_Object process, sigcode;
5721 Lisp_Object pid;
5723 if (INTEGERP (process))
5725 pid = process;
5726 goto got_it;
5729 if (STRINGP (process))
5731 Lisp_Object tem;
5732 if (tem = Fget_process (process), NILP (tem))
5734 pid = Fstring_to_number (process, make_number (10));
5735 if (XINT (pid) != 0)
5736 goto got_it;
5738 process = tem;
5740 else
5741 process = get_process (process);
5743 if (NILP (process))
5744 return process;
5746 CHECK_PROCESS (process);
5747 pid = XPROCESS (process)->pid;
5748 if (!INTEGERP (pid) || XINT (pid) <= 0)
5749 error ("Cannot signal process %s", SDATA (XPROCESS (process)->name));
5751 got_it:
5753 #define handle_signal(NAME, VALUE) \
5754 else if (!strcmp (name, NAME)) \
5755 XSETINT (sigcode, VALUE)
5757 if (INTEGERP (sigcode))
5759 else
5761 unsigned char *name;
5763 CHECK_SYMBOL (sigcode);
5764 name = SDATA (SYMBOL_NAME (sigcode));
5766 if (0)
5768 #ifdef SIGHUP
5769 handle_signal ("SIGHUP", SIGHUP);
5770 #endif
5771 #ifdef SIGINT
5772 handle_signal ("SIGINT", SIGINT);
5773 #endif
5774 #ifdef SIGQUIT
5775 handle_signal ("SIGQUIT", SIGQUIT);
5776 #endif
5777 #ifdef SIGILL
5778 handle_signal ("SIGILL", SIGILL);
5779 #endif
5780 #ifdef SIGABRT
5781 handle_signal ("SIGABRT", SIGABRT);
5782 #endif
5783 #ifdef SIGEMT
5784 handle_signal ("SIGEMT", SIGEMT);
5785 #endif
5786 #ifdef SIGKILL
5787 handle_signal ("SIGKILL", SIGKILL);
5788 #endif
5789 #ifdef SIGFPE
5790 handle_signal ("SIGFPE", SIGFPE);
5791 #endif
5792 #ifdef SIGBUS
5793 handle_signal ("SIGBUS", SIGBUS);
5794 #endif
5795 #ifdef SIGSEGV
5796 handle_signal ("SIGSEGV", SIGSEGV);
5797 #endif
5798 #ifdef SIGSYS
5799 handle_signal ("SIGSYS", SIGSYS);
5800 #endif
5801 #ifdef SIGPIPE
5802 handle_signal ("SIGPIPE", SIGPIPE);
5803 #endif
5804 #ifdef SIGALRM
5805 handle_signal ("SIGALRM", SIGALRM);
5806 #endif
5807 #ifdef SIGTERM
5808 handle_signal ("SIGTERM", SIGTERM);
5809 #endif
5810 #ifdef SIGURG
5811 handle_signal ("SIGURG", SIGURG);
5812 #endif
5813 #ifdef SIGSTOP
5814 handle_signal ("SIGSTOP", SIGSTOP);
5815 #endif
5816 #ifdef SIGTSTP
5817 handle_signal ("SIGTSTP", SIGTSTP);
5818 #endif
5819 #ifdef SIGCONT
5820 handle_signal ("SIGCONT", SIGCONT);
5821 #endif
5822 #ifdef SIGCHLD
5823 handle_signal ("SIGCHLD", SIGCHLD);
5824 #endif
5825 #ifdef SIGTTIN
5826 handle_signal ("SIGTTIN", SIGTTIN);
5827 #endif
5828 #ifdef SIGTTOU
5829 handle_signal ("SIGTTOU", SIGTTOU);
5830 #endif
5831 #ifdef SIGIO
5832 handle_signal ("SIGIO", SIGIO);
5833 #endif
5834 #ifdef SIGXCPU
5835 handle_signal ("SIGXCPU", SIGXCPU);
5836 #endif
5837 #ifdef SIGXFSZ
5838 handle_signal ("SIGXFSZ", SIGXFSZ);
5839 #endif
5840 #ifdef SIGVTALRM
5841 handle_signal ("SIGVTALRM", SIGVTALRM);
5842 #endif
5843 #ifdef SIGPROF
5844 handle_signal ("SIGPROF", SIGPROF);
5845 #endif
5846 #ifdef SIGWINCH
5847 handle_signal ("SIGWINCH", SIGWINCH);
5848 #endif
5849 #ifdef SIGINFO
5850 handle_signal ("SIGINFO", SIGINFO);
5851 #endif
5852 #ifdef SIGUSR1
5853 handle_signal ("SIGUSR1", SIGUSR1);
5854 #endif
5855 #ifdef SIGUSR2
5856 handle_signal ("SIGUSR2", SIGUSR2);
5857 #endif
5858 else
5859 error ("Undefined signal name %s", name);
5862 #undef handle_signal
5864 return make_number (kill (XINT (pid), XINT (sigcode)));
5867 DEFUN ("process-send-eof", Fprocess_send_eof, Sprocess_send_eof, 0, 1, 0,
5868 doc: /* Make PROCESS see end-of-file in its input.
5869 EOF comes after any text already sent to it.
5870 PROCESS may be a process, a buffer, the name of a process or buffer, or
5871 nil, indicating the current buffer's process.
5872 If PROCESS is a network connection, or is a process communicating
5873 through a pipe (as opposed to a pty), then you cannot send any more
5874 text to PROCESS after you call this function. */)
5875 (process)
5876 Lisp_Object process;
5878 Lisp_Object proc;
5879 struct coding_system *coding;
5881 if (DATAGRAM_CONN_P (process))
5882 return process;
5884 proc = get_process (process);
5885 coding = proc_encode_coding_system[XINT (XPROCESS (proc)->outfd)];
5887 /* Make sure the process is really alive. */
5888 if (! NILP (XPROCESS (proc)->raw_status_low))
5889 update_status (XPROCESS (proc));
5890 if (! EQ (XPROCESS (proc)->status, Qrun))
5891 error ("Process %s not running", SDATA (XPROCESS (proc)->name));
5893 if (CODING_REQUIRE_FLUSHING (coding))
5895 coding->mode |= CODING_MODE_LAST_BLOCK;
5896 send_process (proc, "", 0, Qnil);
5899 #ifdef VMS
5900 send_process (proc, "\032", 1, Qnil); /* ^z */
5901 #else
5902 if (!NILP (XPROCESS (proc)->pty_flag))
5903 send_process (proc, "\004", 1, Qnil);
5904 else
5906 int old_outfd, new_outfd;
5908 #ifdef HAVE_SHUTDOWN
5909 /* If this is a network connection, or socketpair is used
5910 for communication with the subprocess, call shutdown to cause EOF.
5911 (In some old system, shutdown to socketpair doesn't work.
5912 Then we just can't win.) */
5913 if (NILP (XPROCESS (proc)->pid)
5914 || XINT (XPROCESS (proc)->outfd) == XINT (XPROCESS (proc)->infd))
5915 shutdown (XINT (XPROCESS (proc)->outfd), 1);
5916 /* In case of socketpair, outfd == infd, so don't close it. */
5917 if (XINT (XPROCESS (proc)->outfd) != XINT (XPROCESS (proc)->infd))
5918 emacs_close (XINT (XPROCESS (proc)->outfd));
5919 #else /* not HAVE_SHUTDOWN */
5920 emacs_close (XINT (XPROCESS (proc)->outfd));
5921 #endif /* not HAVE_SHUTDOWN */
5922 new_outfd = emacs_open (NULL_DEVICE, O_WRONLY, 0);
5923 old_outfd = XINT (XPROCESS (proc)->outfd);
5925 if (!proc_encode_coding_system[new_outfd])
5926 proc_encode_coding_system[new_outfd]
5927 = (struct coding_system *) xmalloc (sizeof (struct coding_system));
5928 bcopy (proc_encode_coding_system[old_outfd],
5929 proc_encode_coding_system[new_outfd],
5930 sizeof (struct coding_system));
5931 bzero (proc_encode_coding_system[old_outfd],
5932 sizeof (struct coding_system));
5934 XSETINT (XPROCESS (proc)->outfd, new_outfd);
5936 #endif /* VMS */
5937 return process;
5940 /* Kill all processes associated with `buffer'.
5941 If `buffer' is nil, kill all processes */
5943 void
5944 kill_buffer_processes (buffer)
5945 Lisp_Object buffer;
5947 Lisp_Object tail, proc;
5949 for (tail = Vprocess_alist; GC_CONSP (tail); tail = XCDR (tail))
5951 proc = XCDR (XCAR (tail));
5952 if (GC_PROCESSP (proc)
5953 && (NILP (buffer) || EQ (XPROCESS (proc)->buffer, buffer)))
5955 if (NETCONN_P (proc))
5956 Fdelete_process (proc);
5957 else if (XINT (XPROCESS (proc)->infd) >= 0)
5958 process_send_signal (proc, SIGHUP, Qnil, 1);
5963 /* On receipt of a signal that a child status has changed, loop asking
5964 about children with changed statuses until the system says there
5965 are no more.
5967 All we do is change the status; we do not run sentinels or print
5968 notifications. That is saved for the next time keyboard input is
5969 done, in order to avoid timing errors.
5971 ** WARNING: this can be called during garbage collection.
5972 Therefore, it must not be fooled by the presence of mark bits in
5973 Lisp objects.
5975 ** USG WARNING: Although it is not obvious from the documentation
5976 in signal(2), on a USG system the SIGCLD handler MUST NOT call
5977 signal() before executing at least one wait(), otherwise the
5978 handler will be called again, resulting in an infinite loop. The
5979 relevant portion of the documentation reads "SIGCLD signals will be
5980 queued and the signal-catching function will be continually
5981 reentered until the queue is empty". Invoking signal() causes the
5982 kernel to reexamine the SIGCLD queue. Fred Fish, UniSoft Systems
5983 Inc. */
5985 SIGTYPE
5986 sigchld_handler (signo)
5987 int signo;
5989 int old_errno = errno;
5990 Lisp_Object proc;
5991 register struct Lisp_Process *p;
5992 extern EMACS_TIME *input_available_clear_time;
5994 #ifdef BSD4_1
5995 extern int sigheld;
5996 sigheld |= sigbit (SIGCHLD);
5997 #endif
5999 while (1)
6001 register int pid;
6002 WAITTYPE w;
6003 Lisp_Object tail;
6005 #ifdef WNOHANG
6006 #ifndef WUNTRACED
6007 #define WUNTRACED 0
6008 #endif /* no WUNTRACED */
6009 /* Keep trying to get a status until we get a definitive result. */
6012 errno = 0;
6013 pid = wait3 (&w, WNOHANG | WUNTRACED, 0);
6015 while (pid < 0 && errno == EINTR);
6017 if (pid <= 0)
6019 /* PID == 0 means no processes found, PID == -1 means a real
6020 failure. We have done all our job, so return. */
6022 /* USG systems forget handlers when they are used;
6023 must reestablish each time */
6024 #if defined (USG) && !defined (POSIX_SIGNALS)
6025 signal (signo, sigchld_handler); /* WARNING - must come after wait3() */
6026 #endif
6027 #ifdef BSD4_1
6028 sigheld &= ~sigbit (SIGCHLD);
6029 sigrelse (SIGCHLD);
6030 #endif
6031 errno = old_errno;
6032 return;
6034 #else
6035 pid = wait (&w);
6036 #endif /* no WNOHANG */
6038 /* Find the process that signaled us, and record its status. */
6040 p = 0;
6041 for (tail = Vprocess_alist; GC_CONSP (tail); tail = XCDR (tail))
6043 proc = XCDR (XCAR (tail));
6044 p = XPROCESS (proc);
6045 if (GC_EQ (p->childp, Qt) && XINT (p->pid) == pid)
6046 break;
6047 p = 0;
6050 /* Look for an asynchronous process whose pid hasn't been filled
6051 in yet. */
6052 if (p == 0)
6053 for (tail = Vprocess_alist; GC_CONSP (tail); tail = XCDR (tail))
6055 proc = XCDR (XCAR (tail));
6056 p = XPROCESS (proc);
6057 if (GC_INTEGERP (p->pid) && XINT (p->pid) == -1)
6058 break;
6059 p = 0;
6062 /* Change the status of the process that was found. */
6063 if (p != 0)
6065 union { int i; WAITTYPE wt; } u;
6066 int clear_desc_flag = 0;
6068 XSETINT (p->tick, ++process_tick);
6069 u.wt = w;
6070 XSETINT (p->raw_status_low, u.i & 0xffff);
6071 XSETINT (p->raw_status_high, u.i >> 16);
6073 /* If process has terminated, stop waiting for its output. */
6074 if ((WIFSIGNALED (w) || WIFEXITED (w))
6075 && XINT (p->infd) >= 0)
6076 clear_desc_flag = 1;
6078 /* We use clear_desc_flag to avoid a compiler bug in Microsoft C. */
6079 if (clear_desc_flag)
6081 FD_CLR (XINT (p->infd), &input_wait_mask);
6082 FD_CLR (XINT (p->infd), &non_keyboard_wait_mask);
6085 /* Tell wait_reading_process_input that it needs to wake up and
6086 look around. */
6087 if (input_available_clear_time)
6088 EMACS_SET_SECS_USECS (*input_available_clear_time, 0, 0);
6091 /* There was no asynchronous process found for that id. Check
6092 if we have a synchronous process. */
6093 else
6095 synch_process_alive = 0;
6097 /* Report the status of the synchronous process. */
6098 if (WIFEXITED (w))
6099 synch_process_retcode = WRETCODE (w);
6100 else if (WIFSIGNALED (w))
6102 int code = WTERMSIG (w);
6103 char *signame;
6105 synchronize_system_messages_locale ();
6106 signame = strsignal (code);
6108 if (signame == 0)
6109 signame = "unknown";
6111 synch_process_death = signame;
6114 /* Tell wait_reading_process_input that it needs to wake up and
6115 look around. */
6116 if (input_available_clear_time)
6117 EMACS_SET_SECS_USECS (*input_available_clear_time, 0, 0);
6120 /* On some systems, we must return right away.
6121 If any more processes want to signal us, we will
6122 get another signal.
6123 Otherwise (on systems that have WNOHANG), loop around
6124 to use up all the processes that have something to tell us. */
6125 #if (defined WINDOWSNT \
6126 || (defined USG && !defined GNU_LINUX \
6127 && !(defined HPUX && defined WNOHANG)))
6128 #if defined (USG) && ! defined (POSIX_SIGNALS)
6129 signal (signo, sigchld_handler);
6130 #endif
6131 errno = old_errno;
6132 return;
6133 #endif /* USG, but not HPUX with WNOHANG */
6138 static Lisp_Object
6139 exec_sentinel_unwind (data)
6140 Lisp_Object data;
6142 XPROCESS (XCAR (data))->sentinel = XCDR (data);
6143 return Qnil;
6146 static Lisp_Object
6147 exec_sentinel_error_handler (error)
6148 Lisp_Object error;
6150 cmd_error_internal (error, "error in process sentinel: ");
6151 Vinhibit_quit = Qt;
6152 update_echo_area ();
6153 Fsleep_for (make_number (2), Qnil);
6154 return Qt;
6157 static void
6158 exec_sentinel (proc, reason)
6159 Lisp_Object proc, reason;
6161 Lisp_Object sentinel, obuffer, odeactivate, okeymap;
6162 register struct Lisp_Process *p = XPROCESS (proc);
6163 int count = SPECPDL_INDEX ();
6164 int outer_running_asynch_code = running_asynch_code;
6165 int waiting = waiting_for_user_input_p;
6167 /* No need to gcpro these, because all we do with them later
6168 is test them for EQness, and none of them should be a string. */
6169 odeactivate = Vdeactivate_mark;
6170 XSETBUFFER (obuffer, current_buffer);
6171 okeymap = current_buffer->keymap;
6173 sentinel = p->sentinel;
6174 if (NILP (sentinel))
6175 return;
6177 /* Zilch the sentinel while it's running, to avoid recursive invocations;
6178 assure that it gets restored no matter how the sentinel exits. */
6179 p->sentinel = Qnil;
6180 record_unwind_protect (exec_sentinel_unwind, Fcons (proc, sentinel));
6181 /* Inhibit quit so that random quits don't screw up a running filter. */
6182 specbind (Qinhibit_quit, Qt);
6183 specbind (Qlast_nonmenu_event, Qt);
6185 /* In case we get recursively called,
6186 and we already saved the match data nonrecursively,
6187 save the same match data in safely recursive fashion. */
6188 if (outer_running_asynch_code)
6190 Lisp_Object tem;
6191 tem = Fmatch_data (Qnil, Qnil);
6192 restore_match_data ();
6193 record_unwind_protect (Fset_match_data, Fmatch_data (Qnil, Qnil));
6194 Fset_match_data (tem);
6197 /* For speed, if a search happens within this code,
6198 save the match data in a special nonrecursive fashion. */
6199 running_asynch_code = 1;
6201 internal_condition_case_1 (read_process_output_call,
6202 Fcons (sentinel,
6203 Fcons (proc, Fcons (reason, Qnil))),
6204 !NILP (Vdebug_on_error) ? Qnil : Qerror,
6205 exec_sentinel_error_handler);
6207 /* If we saved the match data nonrecursively, restore it now. */
6208 restore_match_data ();
6209 running_asynch_code = outer_running_asynch_code;
6211 Vdeactivate_mark = odeactivate;
6213 /* Restore waiting_for_user_input_p as it was
6214 when we were called, in case the filter clobbered it. */
6215 waiting_for_user_input_p = waiting;
6217 #if 0
6218 if (! EQ (Fcurrent_buffer (), obuffer)
6219 || ! EQ (current_buffer->keymap, okeymap))
6220 #endif
6221 /* But do it only if the caller is actually going to read events.
6222 Otherwise there's no need to make him wake up, and it could
6223 cause trouble (for example it would make Fsit_for return). */
6224 if (waiting_for_user_input_p == -1)
6225 record_asynch_buffer_change ();
6227 unbind_to (count, Qnil);
6230 /* Report all recent events of a change in process status
6231 (either run the sentinel or output a message).
6232 This is usually done while Emacs is waiting for keyboard input
6233 but can be done at other times. */
6235 void
6236 status_notify ()
6238 register Lisp_Object proc, buffer;
6239 Lisp_Object tail, msg;
6240 struct gcpro gcpro1, gcpro2;
6242 tail = Qnil;
6243 msg = Qnil;
6244 /* We need to gcpro tail; if read_process_output calls a filter
6245 which deletes a process and removes the cons to which tail points
6246 from Vprocess_alist, and then causes a GC, tail is an unprotected
6247 reference. */
6248 GCPRO2 (tail, msg);
6250 /* Set this now, so that if new processes are created by sentinels
6251 that we run, we get called again to handle their status changes. */
6252 update_tick = process_tick;
6254 for (tail = Vprocess_alist; !NILP (tail); tail = Fcdr (tail))
6256 Lisp_Object symbol;
6257 register struct Lisp_Process *p;
6259 proc = Fcdr (Fcar (tail));
6260 p = XPROCESS (proc);
6262 if (XINT (p->tick) != XINT (p->update_tick))
6264 XSETINT (p->update_tick, XINT (p->tick));
6266 /* If process is still active, read any output that remains. */
6267 while (! EQ (p->filter, Qt)
6268 && ! EQ (p->status, Qconnect)
6269 && ! EQ (p->status, Qlisten)
6270 && ! EQ (p->command, Qt) /* Network process not stopped. */
6271 && XINT (p->infd) >= 0
6272 && read_process_output (proc, XINT (p->infd)) > 0);
6274 buffer = p->buffer;
6276 /* Get the text to use for the message. */
6277 if (!NILP (p->raw_status_low))
6278 update_status (p);
6279 msg = status_message (p->status);
6281 /* If process is terminated, deactivate it or delete it. */
6282 symbol = p->status;
6283 if (CONSP (p->status))
6284 symbol = XCAR (p->status);
6286 if (EQ (symbol, Qsignal) || EQ (symbol, Qexit)
6287 || EQ (symbol, Qclosed))
6289 if (delete_exited_processes)
6290 remove_process (proc);
6291 else
6292 deactivate_process (proc);
6295 /* The actions above may have further incremented p->tick.
6296 So set p->update_tick again
6297 so that an error in the sentinel will not cause
6298 this code to be run again. */
6299 XSETINT (p->update_tick, XINT (p->tick));
6300 /* Now output the message suitably. */
6301 if (!NILP (p->sentinel))
6302 exec_sentinel (proc, msg);
6303 /* Don't bother with a message in the buffer
6304 when a process becomes runnable. */
6305 else if (!EQ (symbol, Qrun) && !NILP (buffer))
6307 Lisp_Object ro, tem;
6308 struct buffer *old = current_buffer;
6309 int opoint, opoint_byte;
6310 int before, before_byte;
6312 ro = XBUFFER (buffer)->read_only;
6314 /* Avoid error if buffer is deleted
6315 (probably that's why the process is dead, too) */
6316 if (NILP (XBUFFER (buffer)->name))
6317 continue;
6318 Fset_buffer (buffer);
6320 opoint = PT;
6321 opoint_byte = PT_BYTE;
6322 /* Insert new output into buffer
6323 at the current end-of-output marker,
6324 thus preserving logical ordering of input and output. */
6325 if (XMARKER (p->mark)->buffer)
6326 Fgoto_char (p->mark);
6327 else
6328 SET_PT_BOTH (ZV, ZV_BYTE);
6330 before = PT;
6331 before_byte = PT_BYTE;
6333 tem = current_buffer->read_only;
6334 current_buffer->read_only = Qnil;
6335 insert_string ("\nProcess ");
6336 Finsert (1, &p->name);
6337 insert_string (" ");
6338 Finsert (1, &msg);
6339 current_buffer->read_only = tem;
6340 set_marker_both (p->mark, p->buffer, PT, PT_BYTE);
6342 if (opoint >= before)
6343 SET_PT_BOTH (opoint + (PT - before),
6344 opoint_byte + (PT_BYTE - before_byte));
6345 else
6346 SET_PT_BOTH (opoint, opoint_byte);
6348 set_buffer_internal (old);
6351 } /* end for */
6353 update_mode_lines++; /* in case buffers use %s in mode-line-format */
6354 redisplay_preserve_echo_area (13);
6356 UNGCPRO;
6360 DEFUN ("set-process-coding-system", Fset_process_coding_system,
6361 Sset_process_coding_system, 1, 3, 0,
6362 doc: /* Set coding systems of PROCESS to DECODING and ENCODING.
6363 DECODING will be used to decode subprocess output and ENCODING to
6364 encode subprocess input. */)
6365 (proc, decoding, encoding)
6366 register Lisp_Object proc, decoding, encoding;
6368 register struct Lisp_Process *p;
6370 CHECK_PROCESS (proc);
6371 p = XPROCESS (proc);
6372 if (XINT (p->infd) < 0)
6373 error ("Input file descriptor of %s closed", SDATA (p->name));
6374 if (XINT (p->outfd) < 0)
6375 error ("Output file descriptor of %s closed", SDATA (p->name));
6376 Fcheck_coding_system (decoding);
6377 Fcheck_coding_system (encoding);
6379 p->decode_coding_system = decoding;
6380 p->encode_coding_system = encoding;
6381 setup_process_coding_systems (proc);
6383 return Qnil;
6386 DEFUN ("process-coding-system",
6387 Fprocess_coding_system, Sprocess_coding_system, 1, 1, 0,
6388 doc: /* Return a cons of coding systems for decoding and encoding of PROCESS. */)
6389 (proc)
6390 register Lisp_Object proc;
6392 CHECK_PROCESS (proc);
6393 return Fcons (XPROCESS (proc)->decode_coding_system,
6394 XPROCESS (proc)->encode_coding_system);
6397 DEFUN ("set-process-filter-multibyte", Fset_process_filter_multibyte,
6398 Sset_process_filter_multibyte, 2, 2, 0,
6399 doc: /* Set multibyteness of the strings given to PROCESS's filter.
6400 If FLAG is non-nil, the filter is given multibyte strings.
6401 If FLAG is nil, the filter is given unibyte strings. In this case,
6402 all character code conversion except for end-of-line conversion is
6403 suppressed. */)
6404 (proc, flag)
6405 Lisp_Object proc, flag;
6407 register struct Lisp_Process *p;
6409 CHECK_PROCESS (proc);
6410 p = XPROCESS (proc);
6411 p->filter_multibyte = flag;
6412 setup_process_coding_systems (proc);
6414 return Qnil;
6417 DEFUN ("process-filter-multibyte-p", Fprocess_filter_multibyte_p,
6418 Sprocess_filter_multibyte_p, 1, 1, 0,
6419 doc: /* Return t if a multibyte string is given to PROCESS's filter.*/)
6420 (proc)
6421 Lisp_Object proc;
6423 register struct Lisp_Process *p;
6425 CHECK_PROCESS (proc);
6426 p = XPROCESS (proc);
6428 return (NILP (p->filter_multibyte) ? Qnil : Qt);
6433 /* The first time this is called, assume keyboard input comes from DESC
6434 instead of from where we used to expect it.
6435 Subsequent calls mean assume input keyboard can come from DESC
6436 in addition to other places. */
6438 static int add_keyboard_wait_descriptor_called_flag;
6440 void
6441 add_keyboard_wait_descriptor (desc)
6442 int desc;
6444 if (! add_keyboard_wait_descriptor_called_flag)
6445 FD_CLR (0, &input_wait_mask);
6446 add_keyboard_wait_descriptor_called_flag = 1;
6447 FD_SET (desc, &input_wait_mask);
6448 FD_SET (desc, &non_process_wait_mask);
6449 if (desc > max_keyboard_desc)
6450 max_keyboard_desc = desc;
6453 /* From now on, do not expect DESC to give keyboard input. */
6455 void
6456 delete_keyboard_wait_descriptor (desc)
6457 int desc;
6459 int fd;
6460 int lim = max_keyboard_desc;
6462 FD_CLR (desc, &input_wait_mask);
6463 FD_CLR (desc, &non_process_wait_mask);
6465 if (desc == max_keyboard_desc)
6466 for (fd = 0; fd < lim; fd++)
6467 if (FD_ISSET (fd, &input_wait_mask)
6468 && !FD_ISSET (fd, &non_keyboard_wait_mask))
6469 max_keyboard_desc = fd;
6472 /* Return nonzero if *MASK has a bit set
6473 that corresponds to one of the keyboard input descriptors. */
6476 keyboard_bit_set (mask)
6477 SELECT_TYPE *mask;
6479 int fd;
6481 for (fd = 0; fd <= max_keyboard_desc; fd++)
6482 if (FD_ISSET (fd, mask) && FD_ISSET (fd, &input_wait_mask)
6483 && !FD_ISSET (fd, &non_keyboard_wait_mask))
6484 return 1;
6486 return 0;
6489 void
6490 init_process ()
6492 register int i;
6494 #ifdef SIGCHLD
6495 #ifndef CANNOT_DUMP
6496 if (! noninteractive || initialized)
6497 #endif
6498 signal (SIGCHLD, sigchld_handler);
6499 #endif
6501 FD_ZERO (&input_wait_mask);
6502 FD_ZERO (&non_keyboard_wait_mask);
6503 FD_ZERO (&non_process_wait_mask);
6504 max_process_desc = 0;
6506 FD_SET (0, &input_wait_mask);
6508 Vprocess_alist = Qnil;
6509 for (i = 0; i < MAXDESC; i++)
6511 chan_process[i] = Qnil;
6512 proc_buffered_char[i] = -1;
6514 bzero (proc_decode_coding_system, sizeof proc_decode_coding_system);
6515 bzero (proc_encode_coding_system, sizeof proc_encode_coding_system);
6516 #ifdef DATAGRAM_SOCKETS
6517 bzero (datagram_address, sizeof datagram_address);
6518 #endif
6520 #ifdef HAVE_SOCKETS
6522 Lisp_Object subfeatures = Qnil;
6523 struct socket_options *sopt;
6525 #define ADD_SUBFEATURE(key, val) \
6526 subfeatures = Fcons (Fcons (key, Fcons (val, Qnil)), subfeatures)
6528 #ifdef NON_BLOCKING_CONNECT
6529 ADD_SUBFEATURE (QCnowait, Qt);
6530 #endif
6531 #ifdef DATAGRAM_SOCKETS
6532 ADD_SUBFEATURE (QCtype, Qdatagram);
6533 #endif
6534 #ifdef HAVE_LOCAL_SOCKETS
6535 ADD_SUBFEATURE (QCfamily, Qlocal);
6536 #endif
6537 #ifdef HAVE_GETSOCKNAME
6538 ADD_SUBFEATURE (QCservice, Qt);
6539 #endif
6540 #if !defined(TERM) && (defined(O_NONBLOCK) || defined(O_NDELAY))
6541 ADD_SUBFEATURE (QCserver, Qt);
6542 #endif
6544 for (sopt = socket_options; sopt->name; sopt++)
6545 subfeatures = Fcons (intern (sopt->name), subfeatures);
6547 Fprovide (intern ("make-network-process"), subfeatures);
6549 #endif /* HAVE_SOCKETS */
6552 void
6553 syms_of_process ()
6555 Qprocessp = intern ("processp");
6556 staticpro (&Qprocessp);
6557 Qrun = intern ("run");
6558 staticpro (&Qrun);
6559 Qstop = intern ("stop");
6560 staticpro (&Qstop);
6561 Qsignal = intern ("signal");
6562 staticpro (&Qsignal);
6564 /* Qexit is already staticpro'd by syms_of_eval; don't staticpro it
6565 here again.
6567 Qexit = intern ("exit");
6568 staticpro (&Qexit); */
6570 Qopen = intern ("open");
6571 staticpro (&Qopen);
6572 Qclosed = intern ("closed");
6573 staticpro (&Qclosed);
6574 Qconnect = intern ("connect");
6575 staticpro (&Qconnect);
6576 Qfailed = intern ("failed");
6577 staticpro (&Qfailed);
6578 Qlisten = intern ("listen");
6579 staticpro (&Qlisten);
6580 Qlocal = intern ("local");
6581 staticpro (&Qlocal);
6582 Qdatagram = intern ("datagram");
6583 staticpro (&Qdatagram);
6585 QCname = intern (":name");
6586 staticpro (&QCname);
6587 QCbuffer = intern (":buffer");
6588 staticpro (&QCbuffer);
6589 QChost = intern (":host");
6590 staticpro (&QChost);
6591 QCservice = intern (":service");
6592 staticpro (&QCservice);
6593 QCtype = intern (":type");
6594 staticpro (&QCtype);
6595 QClocal = intern (":local");
6596 staticpro (&QClocal);
6597 QCremote = intern (":remote");
6598 staticpro (&QCremote);
6599 QCcoding = intern (":coding");
6600 staticpro (&QCcoding);
6601 QCserver = intern (":server");
6602 staticpro (&QCserver);
6603 QCnowait = intern (":nowait");
6604 staticpro (&QCnowait);
6605 QCsentinel = intern (":sentinel");
6606 staticpro (&QCsentinel);
6607 QClog = intern (":log");
6608 staticpro (&QClog);
6609 QCnoquery = intern (":noquery");
6610 staticpro (&QCnoquery);
6611 QCstop = intern (":stop");
6612 staticpro (&QCstop);
6613 QCoptions = intern (":options");
6614 staticpro (&QCoptions);
6615 QCplist = intern (":plist");
6616 staticpro (&QCplist);
6617 QCfilter_multibyte = intern (":filter-multibyte");
6618 staticpro (&QCfilter_multibyte);
6620 Qlast_nonmenu_event = intern ("last-nonmenu-event");
6621 staticpro (&Qlast_nonmenu_event);
6623 staticpro (&Vprocess_alist);
6625 DEFVAR_BOOL ("delete-exited-processes", &delete_exited_processes,
6626 doc: /* *Non-nil means delete processes immediately when they exit.
6627 nil means don't delete them until `list-processes' is run. */);
6629 delete_exited_processes = 1;
6631 DEFVAR_LISP ("process-connection-type", &Vprocess_connection_type,
6632 doc: /* Control type of device used to communicate with subprocesses.
6633 Values are nil to use a pipe, or t or `pty' to use a pty.
6634 The value has no effect if the system has no ptys or if all ptys are busy:
6635 then a pipe is used in any case.
6636 The value takes effect when `start-process' is called. */);
6637 Vprocess_connection_type = Qt;
6639 defsubr (&Sprocessp);
6640 defsubr (&Sget_process);
6641 defsubr (&Sget_buffer_process);
6642 defsubr (&Sdelete_process);
6643 defsubr (&Sprocess_status);
6644 defsubr (&Sprocess_exit_status);
6645 defsubr (&Sprocess_id);
6646 defsubr (&Sprocess_name);
6647 defsubr (&Sprocess_tty_name);
6648 defsubr (&Sprocess_command);
6649 defsubr (&Sset_process_buffer);
6650 defsubr (&Sprocess_buffer);
6651 defsubr (&Sprocess_mark);
6652 defsubr (&Sset_process_filter);
6653 defsubr (&Sprocess_filter);
6654 defsubr (&Sset_process_sentinel);
6655 defsubr (&Sprocess_sentinel);
6656 defsubr (&Sset_process_window_size);
6657 defsubr (&Sset_process_inherit_coding_system_flag);
6658 defsubr (&Sprocess_inherit_coding_system_flag);
6659 defsubr (&Sset_process_query_on_exit_flag);
6660 defsubr (&Sprocess_query_on_exit_flag);
6661 defsubr (&Sprocess_contact);
6662 defsubr (&Sprocess_plist);
6663 defsubr (&Sset_process_plist);
6664 defsubr (&Slist_processes);
6665 defsubr (&Sprocess_list);
6666 defsubr (&Sstart_process);
6667 #ifdef HAVE_SOCKETS
6668 defsubr (&Sset_network_process_option);
6669 defsubr (&Smake_network_process);
6670 defsubr (&Sformat_network_address);
6671 #endif /* HAVE_SOCKETS */
6672 #if defined(HAVE_SOCKETS) && defined(HAVE_NET_IF_H) && defined(HAVE_SYS_IOCTL_H)
6673 #ifdef SIOCGIFCONF
6674 defsubr (&Snetwork_interface_list);
6675 #endif
6676 #if defined(SIOCGIFADDR) || defined(SIOCGIFHWADDR) || defined(SIOCGIFFLAGS)
6677 defsubr (&Snetwork_interface_info);
6678 #endif
6679 #endif /* HAVE_SOCKETS ... */
6680 #ifdef DATAGRAM_SOCKETS
6681 defsubr (&Sprocess_datagram_address);
6682 defsubr (&Sset_process_datagram_address);
6683 #endif
6684 defsubr (&Saccept_process_output);
6685 defsubr (&Sprocess_send_region);
6686 defsubr (&Sprocess_send_string);
6687 defsubr (&Sinterrupt_process);
6688 defsubr (&Skill_process);
6689 defsubr (&Squit_process);
6690 defsubr (&Sstop_process);
6691 defsubr (&Scontinue_process);
6692 defsubr (&Sprocess_running_child_p);
6693 defsubr (&Sprocess_send_eof);
6694 defsubr (&Ssignal_process);
6695 defsubr (&Swaiting_for_user_input_p);
6696 /* defsubr (&Sprocess_connection); */
6697 defsubr (&Sset_process_coding_system);
6698 defsubr (&Sprocess_coding_system);
6699 defsubr (&Sset_process_filter_multibyte);
6700 defsubr (&Sprocess_filter_multibyte_p);
6704 #else /* not subprocesses */
6706 #include <sys/types.h>
6707 #include <errno.h>
6709 #include "lisp.h"
6710 #include "systime.h"
6711 #include "charset.h"
6712 #include "coding.h"
6713 #include "termopts.h"
6714 #include "sysselect.h"
6716 extern int frame_garbaged;
6718 extern EMACS_TIME timer_check ();
6719 extern int timers_run;
6721 Lisp_Object QCtype;
6723 /* As described above, except assuming that there are no subprocesses:
6725 Wait for timeout to elapse and/or keyboard input to be available.
6727 time_limit is:
6728 timeout in seconds, or
6729 zero for no limit, or
6730 -1 means gobble data immediately available but don't wait for any.
6732 read_kbd is a Lisp_Object:
6733 0 to ignore keyboard input, or
6734 1 to return when input is available, or
6735 -1 means caller will actually read the input, so don't throw to
6736 the quit handler.
6737 a cons cell, meaning wait until its car is non-nil
6738 (and gobble terminal input into the buffer if any arrives), or
6739 We know that read_kbd will never be a Lisp_Process, since
6740 `subprocesses' isn't defined.
6742 do_display != 0 means redisplay should be done to show subprocess
6743 output that arrives.
6745 Return true iff we received input from any process. */
6748 wait_reading_process_input (time_limit, microsecs, read_kbd, do_display)
6749 int time_limit, microsecs;
6750 Lisp_Object read_kbd;
6751 int do_display;
6753 register int nfds;
6754 EMACS_TIME end_time, timeout;
6755 SELECT_TYPE waitchannels;
6756 int xerrno;
6757 /* Either nil or a cons cell, the car of which is of interest and
6758 may be changed outside of this routine. */
6759 Lisp_Object wait_for_cell;
6761 wait_for_cell = Qnil;
6763 /* If waiting for non-nil in a cell, record where. */
6764 if (CONSP (read_kbd))
6766 wait_for_cell = read_kbd;
6767 XSETFASTINT (read_kbd, 0);
6770 /* What does time_limit really mean? */
6771 if (time_limit || microsecs)
6773 EMACS_GET_TIME (end_time);
6774 EMACS_SET_SECS_USECS (timeout, time_limit, microsecs);
6775 EMACS_ADD_TIME (end_time, end_time, timeout);
6778 /* Turn off periodic alarms (in case they are in use)
6779 and then turn off any other atimers,
6780 because the select emulator uses alarms. */
6781 stop_polling ();
6782 turn_on_atimers (0);
6784 while (1)
6786 int timeout_reduced_for_timers = 0;
6788 /* If calling from keyboard input, do not quit
6789 since we want to return C-g as an input character.
6790 Otherwise, do pending quit if requested. */
6791 if (XINT (read_kbd) >= 0)
6792 QUIT;
6794 /* Exit now if the cell we're waiting for became non-nil. */
6795 if (! NILP (wait_for_cell) && ! NILP (XCAR (wait_for_cell)))
6796 break;
6798 /* Compute time from now till when time limit is up */
6799 /* Exit if already run out */
6800 if (time_limit == -1)
6802 /* -1 specified for timeout means
6803 gobble output available now
6804 but don't wait at all. */
6806 EMACS_SET_SECS_USECS (timeout, 0, 0);
6808 else if (time_limit || microsecs)
6810 EMACS_GET_TIME (timeout);
6811 EMACS_SUB_TIME (timeout, end_time, timeout);
6812 if (EMACS_TIME_NEG_P (timeout))
6813 break;
6815 else
6817 EMACS_SET_SECS_USECS (timeout, 100000, 0);
6820 /* If our caller will not immediately handle keyboard events,
6821 run timer events directly.
6822 (Callers that will immediately read keyboard events
6823 call timer_delay on their own.) */
6824 if (NILP (wait_for_cell))
6826 EMACS_TIME timer_delay;
6830 int old_timers_run = timers_run;
6831 timer_delay = timer_check (1);
6832 if (timers_run != old_timers_run && do_display)
6833 /* We must retry, since a timer may have requeued itself
6834 and that could alter the time delay. */
6835 redisplay_preserve_echo_area (14);
6836 else
6837 break;
6839 while (!detect_input_pending ());
6841 /* If there is unread keyboard input, also return. */
6842 if (XINT (read_kbd) != 0
6843 && requeued_events_pending_p ())
6844 break;
6846 if (! EMACS_TIME_NEG_P (timer_delay) && time_limit != -1)
6848 EMACS_TIME difference;
6849 EMACS_SUB_TIME (difference, timer_delay, timeout);
6850 if (EMACS_TIME_NEG_P (difference))
6852 timeout = timer_delay;
6853 timeout_reduced_for_timers = 1;
6858 /* Cause C-g and alarm signals to take immediate action,
6859 and cause input available signals to zero out timeout. */
6860 if (XINT (read_kbd) < 0)
6861 set_waiting_for_input (&timeout);
6863 /* Wait till there is something to do. */
6865 if (! XINT (read_kbd) && NILP (wait_for_cell))
6866 FD_ZERO (&waitchannels);
6867 else
6868 FD_SET (0, &waitchannels);
6870 /* If a frame has been newly mapped and needs updating,
6871 reprocess its display stuff. */
6872 if (frame_garbaged && do_display)
6874 clear_waiting_for_input ();
6875 redisplay_preserve_echo_area (15);
6876 if (XINT (read_kbd) < 0)
6877 set_waiting_for_input (&timeout);
6880 if (XINT (read_kbd) && detect_input_pending ())
6882 nfds = 0;
6883 FD_ZERO (&waitchannels);
6885 else
6886 nfds = select (1, &waitchannels, (SELECT_TYPE *)0, (SELECT_TYPE *)0,
6887 &timeout);
6889 xerrno = errno;
6891 /* Make C-g and alarm signals set flags again */
6892 clear_waiting_for_input ();
6894 /* If we woke up due to SIGWINCH, actually change size now. */
6895 do_pending_window_change (0);
6897 if (time_limit && nfds == 0 && ! timeout_reduced_for_timers)
6898 /* We waited the full specified time, so return now. */
6899 break;
6901 if (nfds == -1)
6903 /* If the system call was interrupted, then go around the
6904 loop again. */
6905 if (xerrno == EINTR)
6906 FD_ZERO (&waitchannels);
6907 else
6908 error ("select error: %s", emacs_strerror (xerrno));
6910 #ifdef sun
6911 else if (nfds > 0 && (waitchannels & 1) && interrupt_input)
6912 /* System sometimes fails to deliver SIGIO. */
6913 kill (getpid (), SIGIO);
6914 #endif
6915 #ifdef SIGIO
6916 if (XINT (read_kbd) && interrupt_input && (waitchannels & 1))
6917 kill (getpid (), SIGIO);
6918 #endif
6920 /* Check for keyboard input */
6922 if ((XINT (read_kbd) != 0)
6923 && detect_input_pending_run_timers (do_display))
6925 swallow_events (do_display);
6926 if (detect_input_pending_run_timers (do_display))
6927 break;
6930 /* If there is unread keyboard input, also return. */
6931 if (XINT (read_kbd) != 0
6932 && requeued_events_pending_p ())
6933 break;
6935 /* If wait_for_cell. check for keyboard input
6936 but don't run any timers.
6937 ??? (It seems wrong to me to check for keyboard
6938 input at all when wait_for_cell, but the code
6939 has been this way since July 1994.
6940 Try changing this after version 19.31.) */
6941 if (! NILP (wait_for_cell)
6942 && detect_input_pending ())
6944 swallow_events (do_display);
6945 if (detect_input_pending ())
6946 break;
6949 /* Exit now if the cell we're waiting for became non-nil. */
6950 if (! NILP (wait_for_cell) && ! NILP (XCAR (wait_for_cell)))
6951 break;
6954 start_polling ();
6956 return 0;
6960 /* Don't confuse make-docfile by having two doc strings for this function.
6961 make-docfile does not pay attention to #if, for good reason! */
6962 DEFUN ("get-buffer-process", Fget_buffer_process, Sget_buffer_process, 1, 1, 0,
6964 (name)
6965 register Lisp_Object name;
6967 return Qnil;
6970 /* Don't confuse make-docfile by having two doc strings for this function.
6971 make-docfile does not pay attention to #if, for good reason! */
6972 DEFUN ("process-inherit-coding-system-flag",
6973 Fprocess_inherit_coding_system_flag, Sprocess_inherit_coding_system_flag,
6974 1, 1, 0,
6976 (process)
6977 register Lisp_Object process;
6979 /* Ignore the argument and return the value of
6980 inherit-process-coding-system. */
6981 return inherit_process_coding_system ? Qt : Qnil;
6984 /* Kill all processes associated with `buffer'.
6985 If `buffer' is nil, kill all processes.
6986 Since we have no subprocesses, this does nothing. */
6988 void
6989 kill_buffer_processes (buffer)
6990 Lisp_Object buffer;
6994 void
6995 init_process ()
6999 void
7000 syms_of_process ()
7002 QCtype = intern (":type");
7003 staticpro (&QCtype);
7005 defsubr (&Sget_buffer_process);
7006 defsubr (&Sprocess_inherit_coding_system_flag);
7010 #endif /* not subprocesses */
7012 /* arch-tag: 3706c011-7b9a-4117-bd4f-59e7f701a4c4
7013 (do not change this comment) */