(set_socket_option): Fix :bindtodevice option.
[bpt/emacs.git] / src / process.c
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.
4
5 This file is part of GNU Emacs.
6
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.
11
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.
16
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. */
21
22
23 #include <config.h>
24 #include <signal.h>
25
26 /* This file is split into two parts by the following preprocessor
27 conditional. The 'then' clause contains all of the support for
28 asynchronous subprocesses. The 'else' clause contains stub
29 versions of some of the asynchronous subprocess routines that are
30 often called elsewhere in Emacs, so we don't have to #ifdef the
31 sections that call them. */
32
33 \f
34 #ifdef subprocesses
35
36 #include <stdio.h>
37 #include <errno.h>
38 #include <setjmp.h>
39 #include <sys/types.h> /* some typedefs are used in sys/file.h */
40 #include <sys/file.h>
41 #include <sys/stat.h>
42 #ifdef HAVE_UNISTD_H
43 #include <unistd.h>
44 #endif
45
46 #if defined(WINDOWSNT) || defined(UNIX98_PTYS)
47 #include <stdlib.h>
48 #include <fcntl.h>
49 #endif /* not WINDOWSNT */
50
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 */
59
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 */
71
72 /* TERM is a poor-man's SLIP, used on GNU/Linux. */
73 #ifdef TERM
74 #include <client.h>
75 #endif
76
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
85
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 */
92
93 #ifdef BROKEN_O_NONBLOCK
94 #undef O_NONBLOCK
95 #endif /* BROKEN_O_NONBLOCK */
96
97 #ifdef NEED_BSDTTY
98 #include <bsdtty.h>
99 #endif
100
101 /* Can we use SIOCGIFCONF and/or SIOCGIFADDR */
102 #ifdef HAVE_SOCKETS
103 #if defined(HAVE_SYS_IOCTL_H) && defined(HAVE_NET_IF_H)
104 /* sys/ioctl.h may have been included already */
105 #ifndef SIOCGIFADDR
106 #include <sys/ioctl.h>
107 #endif
108 #include <net/if.h>
109 #endif
110 #endif
111
112 #ifdef IRIS
113 #include <sys/sysmacros.h> /* for "minor" */
114 #endif /* not IRIS */
115
116 #ifdef HAVE_SYS_WAIT
117 #include <sys/wait.h>
118 #endif
119
120 #include "systime.h"
121 #include "systty.h"
122
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"
138
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;
152
153 /* Qexit is declared and initialized in eval.c. */
154
155 /* QCfamily is defined in xfaces.c. */
156 extern Lisp_Object QCfamily;
157 /* QCfilter is defined in keyboard.c. */
158 extern Lisp_Object QCfilter;
159
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 ...). */
162
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 */
170
171 /* Define first descriptor number available for subprocesses. */
172 #ifdef VMS
173 #define FIRST_PROC_DESC 1
174 #else /* Not VMS */
175 #define FIRST_PROC_DESC 3
176 #endif
177
178 /* Define SIGCHLD as an alias for SIGCLD. There are many conditionals
179 testing SIGCHLD. */
180
181 #if !defined (SIGCHLD) && defined (SIGCLD)
182 #define SIGCHLD SIGCLD
183 #endif /* SIGCLD */
184
185 #include "syssignal.h"
186
187 #include "syswait.h"
188
189 extern void set_waiting_for_input P_ ((EMACS_TIME *));
190
191 #ifndef USE_CRT_DLL
192 extern int errno;
193 #endif
194 #ifdef VMS
195 extern char *sys_errlist[];
196 #endif
197
198 #ifndef HAVE_H_ERRNO
199 extern int h_errno;
200 #endif
201
202 /* t means use pty, nil means use a pipe,
203 maybe other values to come. */
204 static Lisp_Object Vprocess_connection_type;
205
206 #ifdef SKTPAIR
207 #ifndef HAVE_SOCKETS
208 #include <sys/socket.h>
209 #endif
210 #endif /* SKTPAIR */
211
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;
218
219 /* Define NON_BLOCKING_CONNECT if we can support non-blocking connects. */
220
221 #ifdef BROKEN_NON_BLOCKING_CONNECT
222 #undef NON_BLOCKING_CONNECT
223 #else
224 #ifndef NON_BLOCKING_CONNECT
225 #ifdef HAVE_SOCKETS
226 #ifdef HAVE_SELECT
227 #if defined (HAVE_GETPEERNAME) || defined (GNU_LINUX)
228 #if defined (O_NONBLOCK) || defined (O_NDELAY)
229 #if defined (EWOULDBLOCK) || defined (EINPROGRESS)
230 #define NON_BLOCKING_CONNECT
231 #endif /* EWOULDBLOCK || EINPROGRESS */
232 #endif /* O_NONBLOCK || O_NDELAY */
233 #endif /* HAVE_GETPEERNAME || GNU_LINUX */
234 #endif /* HAVE_SELECT */
235 #endif /* HAVE_SOCKETS */
236 #endif /* NON_BLOCKING_CONNECT */
237 #endif /* BROKEN_NON_BLOCKING_CONNECT */
238
239 /* Define DATAGRAM_SOCKETS if datagrams can be used safely on
240 this system. We need to read full packets, so we need a
241 "non-destructive" select. So we require either native select,
242 or emulation of select using FIONREAD. */
243
244 #ifdef BROKEN_DATAGRAM_SOCKETS
245 #undef DATAGRAM_SOCKETS
246 #else
247 #ifndef DATAGRAM_SOCKETS
248 #ifdef HAVE_SOCKETS
249 #if defined (HAVE_SELECT) || defined (FIONREAD)
250 #if defined (HAVE_SENDTO) && defined (HAVE_RECVFROM) && defined (EMSGSIZE)
251 #define DATAGRAM_SOCKETS
252 #endif /* HAVE_SENDTO && HAVE_RECVFROM && EMSGSIZE */
253 #endif /* HAVE_SELECT || FIONREAD */
254 #endif /* HAVE_SOCKETS */
255 #endif /* DATAGRAM_SOCKETS */
256 #endif /* BROKEN_DATAGRAM_SOCKETS */
257
258 #ifdef TERM
259 #undef NON_BLOCKING_CONNECT
260 #undef DATAGRAM_SOCKETS
261 #endif
262
263
264 #include "sysselect.h"
265
266 extern int keyboard_bit_set P_ ((SELECT_TYPE *));
267
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
273
274 /* Mask of bits indicating the descriptors that we wait for input on. */
275
276 static SELECT_TYPE input_wait_mask;
277
278 /* Mask that excludes keyboard input descriptor (s). */
279
280 static SELECT_TYPE non_keyboard_wait_mask;
281
282 /* Mask that excludes process input descriptor (s). */
283
284 static SELECT_TYPE non_process_wait_mask;
285
286 /* Mask of bits indicating the descriptors that we wait for connect to
287 complete on. Once they complete, they are removed from this mask
288 and added to the input_wait_mask and non_keyboard_wait_mask. */
289
290 static SELECT_TYPE connect_wait_mask;
291
292 /* Number of bits set in connect_wait_mask. */
293 static int num_pending_connects;
294
295 /* The largest descriptor currently in use for a process object. */
296 static int max_process_desc;
297
298 /* The largest descriptor currently in use for keyboard input. */
299 static int max_keyboard_desc;
300
301 /* Nonzero means delete a process right away if it exits. */
302 static int delete_exited_processes;
303
304 /* Indexed by descriptor, gives the process (if any) for that descriptor */
305 Lisp_Object chan_process[MAXDESC];
306
307 /* Alist of elements (NAME . PROCESS) */
308 Lisp_Object Vprocess_alist;
309
310 /* Buffered-ahead input char from process, indexed by channel.
311 -1 means empty (no char is buffered).
312 Used on sys V where the only way to tell if there is any
313 output from the process is to read at least one char.
314 Always -1 on systems that support FIONREAD. */
315
316 /* Don't make static; need to access externally. */
317 int proc_buffered_char[MAXDESC];
318
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];
322
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
335
336 static Lisp_Object get_process ();
337 static void exec_sentinel ();
338
339 extern EMACS_TIME timer_check ();
340 extern int timers_run;
341
342 /* Maximum number of bytes to send to a pty without an eof. */
343 static int pty_max_bytes;
344
345 extern Lisp_Object Vfile_name_coding_system, Vdefault_file_name_coding_system;
346
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. */
352
353 static char pty_name[24];
354 #endif
355 \f
356 /* Compute the Lisp form of the process status, p->status, from
357 the numeric status that was returned by `wait'. */
358
359 Lisp_Object status_convert ();
360
361 void
362 update_status (p)
363 struct Lisp_Process *p;
364 {
365 union { int i; WAITTYPE wt; } u;
366 u.i = XFASTINT (p->raw_status_low) + (XFASTINT (p->raw_status_high) << 16);
367 p->status = status_convert (u.wt);
368 p->raw_status_low = Qnil;
369 p->raw_status_high = Qnil;
370 }
371
372 /* Convert a process status word in Unix format to
373 the list that we use internally. */
374
375 Lisp_Object
376 status_convert (w)
377 WAITTYPE w;
378 {
379 if (WIFSTOPPED (w))
380 return Fcons (Qstop, Fcons (make_number (WSTOPSIG (w)), Qnil));
381 else if (WIFEXITED (w))
382 return Fcons (Qexit, Fcons (make_number (WRETCODE (w)),
383 WCOREDUMP (w) ? Qt : Qnil));
384 else if (WIFSIGNALED (w))
385 return Fcons (Qsignal, Fcons (make_number (WTERMSIG (w)),
386 WCOREDUMP (w) ? Qt : Qnil));
387 else
388 return Qrun;
389 }
390
391 /* Given a status-list, extract the three pieces of information
392 and store them individually through the three pointers. */
393
394 void
395 decode_status (l, symbol, code, coredump)
396 Lisp_Object l;
397 Lisp_Object *symbol;
398 int *code;
399 int *coredump;
400 {
401 Lisp_Object tem;
402
403 if (SYMBOLP (l))
404 {
405 *symbol = l;
406 *code = 0;
407 *coredump = 0;
408 }
409 else
410 {
411 *symbol = XCAR (l);
412 tem = XCDR (l);
413 *code = XFASTINT (XCAR (tem));
414 tem = XCDR (tem);
415 *coredump = !NILP (tem);
416 }
417 }
418
419 /* Return a string describing a process status list. */
420
421 Lisp_Object
422 status_message (status)
423 Lisp_Object status;
424 {
425 Lisp_Object symbol;
426 int code, coredump;
427 Lisp_Object string, string2;
428
429 decode_status (status, &symbol, &code, &coredump);
430
431 if (EQ (symbol, Qsignal) || EQ (symbol, Qstop))
432 {
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);
442 }
443 else if (EQ (symbol, Qexit))
444 {
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);
451 }
452 else if (EQ (symbol, Qfailed))
453 {
454 string = Fnumber_to_string (make_number (code));
455 string2 = build_string ("\n");
456 return concat3 (build_string ("failed with code "),
457 string, string2);
458 }
459 else
460 return Fcopy_sequence (Fsymbol_name (symbol));
461 }
462 \f
463 #ifdef HAVE_PTYS
464
465 /* Open an available pty, returning a file descriptor.
466 Return -1 on failure.
467 The file name of the terminal corresponding to the pty
468 is left in the variable pty_name. */
469
470 int
471 allocate_pty ()
472 {
473 register int c, i;
474 int fd;
475
476 #ifdef PTY_ITERATION
477 PTY_ITERATION
478 #else
479 for (c = FIRST_PTY_LETTER; c <= 'z'; c++)
480 for (i = 0; i < 16; i++)
481 #endif
482 {
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 */
489
490 #ifdef PTY_OPEN
491 PTY_OPEN;
492 #else /* no PTY_OPEN */
493 {
494 # ifdef IRIS
495 /* Unusual IRIS code */
496 *ptyv = emacs_open ("/dev/ptc", O_RDWR | O_NDELAY, 0);
497 if (fd < 0)
498 return -1;
499 if (fstat (fd, &stb) < 0)
500 return -1;
501 # else /* not IRIS */
502 { /* Some systems name their pseudoterminals so that there are gaps in
503 the usual sequence - for example, on HP9000/S700 systems, there
504 are no pseudoterminals with names ending in 'f'. So we wait for
505 three failures in a row before deciding that we've reached the
506 end of the ptys. */
507 int failed_count = 0;
508
509 if (stat (pty_name, &stb) < 0)
510 {
511 failed_count++;
512 if (failed_count >= 3)
513 return -1;
514 }
515 else
516 failed_count = 0;
517 }
518 # ifdef O_NONBLOCK
519 fd = emacs_open (pty_name, O_RDWR | O_NONBLOCK, 0);
520 # else
521 fd = emacs_open (pty_name, O_RDWR | O_NDELAY, 0);
522 # endif
523 # endif /* not IRIS */
524 }
525 #endif /* no PTY_OPEN */
526
527 if (fd >= 0)
528 {
529 /* check to make certain that both sides are available
530 this avoids a nasty yet stupid bug in rlogins */
531 #ifdef PTY_TTY_NAME_SPRINTF
532 PTY_TTY_NAME_SPRINTF
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)
538 {
539 emacs_close (fd);
540 # if !defined(IRIS) && !defined(__sgi)
541 continue;
542 # else
543 return -1;
544 # endif /* IRIS */
545 }
546 #endif /* not UNIPLUS */
547 setup_pty (fd);
548 return fd;
549 }
550 }
551 return -1;
552 }
553 #endif /* HAVE_PTYS */
554 \f
555 Lisp_Object
556 make_process (name)
557 Lisp_Object name;
558 {
559 register Lisp_Object val, tem, name1;
560 register struct Lisp_Process *p;
561 char suffix[10];
562 register int i;
563
564 p = allocate_process ();
565
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 ();
575
576 /* If name is already in use, modify it until it is unused. */
577
578 name1 = name;
579 for (i = 1; ; i++)
580 {
581 tem = Fget_process (name1);
582 if (NILP (tem)) break;
583 sprintf (suffix, "<%d>", i);
584 name1 = concat2 (name, build_string (suffix));
585 }
586 name = name1;
587 p->name = name;
588 XSETPROCESS (val, p);
589 Vprocess_alist = Fcons (Fcons (name, val), Vprocess_alist);
590 return val;
591 }
592
593 void
594 remove_process (proc)
595 register Lisp_Object proc;
596 {
597 register Lisp_Object pair;
598
599 pair = Frassq (proc, Vprocess_alist);
600 Vprocess_alist = Fdelq (pair, Vprocess_alist);
601
602 deactivate_process (proc);
603 }
604
605 /* Setup coding systems of PROCESS. */
606
607 void
608 setup_process_coding_systems (process)
609 Lisp_Object process;
610 {
611 struct Lisp_Process *p = XPROCESS (process);
612 int inch = XINT (p->infd);
613 int outch = XINT (p->outfd);
614
615 if (inch < 0 || outch < 0)
616 return;
617
618 if (!proc_decode_coding_system[inch])
619 proc_decode_coding_system[inch]
620 = (struct coding_system *) xmalloc (sizeof (struct coding_system));
621 setup_coding_system (p->decode_coding_system,
622 proc_decode_coding_system[inch]);
623 if (! NILP (p->filter))
624 {
625 if (NILP (p->filter_multibyte))
626 setup_raw_text_coding_system (proc_decode_coding_system[inch]);
627 }
628 else if (BUFFERP (p->buffer))
629 {
630 if (NILP (XBUFFER (p->buffer)->enable_multibyte_characters))
631 setup_raw_text_coding_system (proc_decode_coding_system[inch]);
632 }
633
634 if (!proc_encode_coding_system[outch])
635 proc_encode_coding_system[outch]
636 = (struct coding_system *) xmalloc (sizeof (struct coding_system));
637 setup_coding_system (p->encode_coding_system,
638 proc_encode_coding_system[outch]);
639 }
640 \f
641 DEFUN ("processp", Fprocessp, Sprocessp, 1, 1, 0,
642 doc: /* Return t if OBJECT is a process. */)
643 (object)
644 Lisp_Object object;
645 {
646 return PROCESSP (object) ? Qt : Qnil;
647 }
648
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;
653 {
654 if (PROCESSP (name))
655 return name;
656 CHECK_STRING (name);
657 return Fcdr (Fassoc (name, Vprocess_alist));
658 }
659
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;
665 {
666 register Lisp_Object buf, tail, proc;
667
668 if (NILP (buffer)) return Qnil;
669 buf = Fget_buffer (buffer);
670 if (NILP (buf)) return Qnil;
671
672 for (tail = Vprocess_alist; !NILP (tail); tail = Fcdr (tail))
673 {
674 proc = Fcdr (Fcar (tail));
675 if (PROCESSP (proc) && EQ (XPROCESS (proc)->buffer, buf))
676 return proc;
677 }
678 return Qnil;
679 }
680
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. */
685
686 static Lisp_Object
687 get_process (name)
688 register Lisp_Object name;
689 {
690 register Lisp_Object proc, obj;
691 if (STRINGP (name))
692 {
693 obj = Fget_process (name);
694 if (NILP (obj))
695 obj = Fget_buffer (name);
696 if (NILP (obj))
697 error ("Process %s does not exist", SDATA (name));
698 }
699 else if (NILP (name))
700 obj = Fcurrent_buffer ();
701 else
702 obj = name;
703
704 /* Now obj should be either a buffer object or a process object.
705 */
706 if (BUFFERP (obj))
707 {
708 proc = Fget_buffer_process (obj);
709 if (NILP (proc))
710 error ("Buffer %s has no process", SDATA (XBUFFER (obj)->name));
711 }
712 else
713 {
714 CHECK_PROCESS (obj);
715 proc = obj;
716 }
717 return proc;
718 }
719
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;
726 {
727 process = get_process (process);
728 XPROCESS (process)->raw_status_low = Qnil;
729 XPROCESS (process)->raw_status_high = Qnil;
730 if (NETCONN_P (process))
731 {
732 XPROCESS (process)->status = Fcons (Qexit, Fcons (make_number (0), Qnil));
733 XSETINT (XPROCESS (process)->tick, ++process_tick);
734 }
735 else if (XINT (XPROCESS (process)->infd) >= 0)
736 {
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 ();
743 }
744 remove_process (process);
745 return Qnil;
746 }
747 \f
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;
765 {
766 register struct Lisp_Process *p;
767 register Lisp_Object status;
768
769 if (STRINGP (process))
770 process = Fget_process (process);
771 else
772 process = get_process (process);
773
774 if (NILP (process))
775 return process;
776
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))
784 {
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;
791 }
792 return status;
793 }
794
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;
801 {
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);
808 }
809
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;
816 {
817 CHECK_PROCESS (process);
818 return XPROCESS (process)->pid;
819 }
820
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;
827 {
828 CHECK_PROCESS (process);
829 return XPROCESS (process)->name;
830 }
831
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;
839 {
840 CHECK_PROCESS (process);
841 return XPROCESS (process)->command;
842 }
843
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;
850 {
851 CHECK_PROCESS (process);
852 return XPROCESS (process)->tty_name;
853 }
854
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;
860 {
861 struct Lisp_Process *p;
862
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;
872 }
873
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;
880 {
881 CHECK_PROCESS (process);
882 return XPROCESS (process)->buffer;
883 }
884
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;
890 {
891 CHECK_PROCESS (process);
892 return XPROCESS (process)->mark;
893 }
894
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.
899
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.
903
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;
913 {
914 struct Lisp_Process *p;
915
916 CHECK_PROCESS (process);
917 p = XPROCESS (process);
918
919 /* Don't signal an error if the process' input file descriptor
920 is closed. This could make debugging Lisp more difficult,
921 for example when doing something like
922
923 (setq process (start-process ...))
924 (debug)
925 (set-process-filter process ...) */
926
927 if (XINT (p->infd) >= 0)
928 {
929 if (EQ (filter, Qt) && !EQ (p->status, Qlisten))
930 {
931 FD_CLR (XINT (p->infd), &input_wait_mask);
932 FD_CLR (XINT (p->infd), &non_keyboard_wait_mask);
933 }
934 else if (EQ (p->filter, Qt)
935 && !EQ (p->command, Qt)) /* Network process not stopped. */
936 {
937 FD_SET (XINT (p->infd), &input_wait_mask);
938 FD_SET (XINT (p->infd), &non_keyboard_wait_mask);
939 }
940 }
941
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;
947 }
948
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;
955 {
956 CHECK_PROCESS (process);
957 return XPROCESS (process)->filter;
958 }
959
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;
967 {
968 struct Lisp_Process *p;
969
970 CHECK_PROCESS (process);
971 p = XPROCESS (process);
972
973 p->sentinel = sentinel;
974 if (NETCONN1_P (p))
975 p->childp = Fplist_put (p->childp, QCsentinel, sentinel);
976 return sentinel;
977 }
978
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;
985 {
986 CHECK_PROCESS (process);
987 return XPROCESS (process)->sentinel;
988 }
989
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;
995 {
996 CHECK_PROCESS (process);
997 CHECK_NATNUM (height);
998 CHECK_NATNUM (width);
999
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;
1006 }
1007
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.
1016
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.
1021
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;
1027 {
1028 CHECK_PROCESS (process);
1029 XPROCESS (process)->inherit_coding_system_flag = flag;
1030 return flag;
1031 }
1032
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;
1042 {
1043 CHECK_PROCESS (process);
1044 return XPROCESS (process)->inherit_coding_system_flag;
1045 }
1046
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;
1055 {
1056 CHECK_PROCESS (process);
1057 XPROCESS (process)->kill_without_query = Fnull (flag);
1058 return flag;
1059 }
1060
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;
1067 {
1068 CHECK_PROCESS (process);
1069 return Fnull (XPROCESS (process)->kill_without_query);
1070 }
1071
1072 #ifdef DATAGRAM_SOCKETS
1073 Lisp_Object Fprocess_datagram_address ();
1074 #endif
1075
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;
1086 {
1087 Lisp_Object contact;
1088
1089 CHECK_PROCESS (process);
1090 contact = XPROCESS (process)->childp;
1091
1092 #ifdef DATAGRAM_SOCKETS
1093 if (DATAGRAM_CONN_P (process)
1094 && (EQ (key, Qt) || EQ (key, QCremote)))
1095 contact = Fplist_put (contact, QCremote,
1096 Fprocess_datagram_address (process));
1097 #endif
1098
1099 if (!NETCONN_P (process) || EQ (key, Qt))
1100 return contact;
1101 if (NILP (key))
1102 return Fcons (Fplist_get (contact, QChost),
1103 Fcons (Fplist_get (contact, QCservice), Qnil));
1104 return Fplist_get (contact, key);
1105 }
1106
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;
1112 {
1113 CHECK_PROCESS (process);
1114 return XPROCESS (process)->plist;
1115 }
1116
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;
1122 {
1123 CHECK_PROCESS (process);
1124 CHECK_LIST (plist);
1125
1126 XPROCESS (process)->plist = plist;
1127 return plist;
1128 }
1129
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;
1138 {
1139 return XPROCESS (process)->type;
1140 }
1141 #endif
1142
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;
1152 {
1153 if (NILP (address))
1154 return Qnil;
1155
1156 if (STRINGP (address)) /* AF_LOCAL */
1157 return address;
1158
1159 if (VECTORP (address)) /* AF_INET */
1160 {
1161 register struct Lisp_Vector *p = XVECTOR (address);
1162 Lisp_Object args[6];
1163 int nargs, i;
1164
1165 if (!NILP (omit_port) && (p->size == 4 || p->size == 5))
1166 {
1167 args[0] = build_string ("%d.%d.%d.%d");
1168 nargs = 4;
1169 }
1170 else if (p->size == 5)
1171 {
1172 args[0] = build_string ("%d.%d.%d.%d:%d");
1173 nargs = 5;
1174 }
1175 else
1176 return Qnil;
1177
1178 for (i = 0; i < nargs; i++)
1179 args[i+1] = p->contents[i];
1180 return Fformat (nargs+1, args);
1181 }
1182
1183 if (CONSP (address))
1184 {
1185 Lisp_Object args[2];
1186 args[0] = build_string ("<Family %d>");
1187 args[1] = Fcar (address);
1188 return Fformat (2, args);
1189
1190 }
1191
1192 return Qnil;
1193 }
1194 #endif
1195 \f
1196 Lisp_Object
1197 list_processes_1 (query_only)
1198 Lisp_Object query_only;
1199 {
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;
1206
1207 w_proc = 4; /* Proc */
1208 w_buffer = 6; /* Buffer */
1209 w_tty = 0; /* Omit if no ttys */
1210
1211 for (tail = Vprocess_alist; !NILP (tail); tail = Fcdr (tail))
1212 {
1213 int i;
1214
1215 proc = Fcdr (Fcar (tail));
1216 p = XPROCESS (proc);
1217 if (NILP (p->childp))
1218 continue;
1219 if (!NILP (query_only) && !NILP (p->kill_without_query))
1220 continue;
1221 if (STRINGP (p->name)
1222 && ( i = SCHARS (p->name), (i > w_proc)))
1223 w_proc = i;
1224 if (!NILP (p->buffer))
1225 {
1226 if (NILP (XBUFFER (p->buffer)->name) && w_buffer < 8)
1227 w_buffer = 8; /* (Killed) */
1228 else if ((i = SCHARS (XBUFFER (p->buffer)->name), (i > w_buffer)))
1229 w_buffer = i;
1230 }
1231 if (STRINGP (p->tty_name)
1232 && (i = SCHARS (p->tty_name), (i > w_tty)))
1233 w_tty = i;
1234 }
1235
1236 XSETFASTINT (i_status, w_proc + 1);
1237 XSETFASTINT (i_buffer, XFASTINT (i_status) + 9);
1238 if (w_tty)
1239 {
1240 XSETFASTINT (i_tty, XFASTINT (i_buffer) + w_buffer + 1);
1241 XSETFASTINT (i_command, XFASTINT (i_buffer) + w_tty + 1);
1242 } else {
1243 i_tty = Qnil;
1244 XSETFASTINT (i_command, XFASTINT (i_buffer) + w_buffer + 1);
1245 }
1246
1247 XSETFASTINT (minspace, 1);
1248
1249 set_buffer_internal (XBUFFER (Vstandard_output));
1250 Fbuffer_disable_undo (Vstandard_output);
1251
1252 current_buffer->truncate_lines = Qt;
1253
1254 write_string ("Proc", -1);
1255 Findent_to (i_status, minspace); write_string ("Status", -1);
1256 Findent_to (i_buffer, minspace); write_string ("Buffer", -1);
1257 if (!NILP (i_tty))
1258 {
1259 Findent_to (i_tty, minspace); write_string ("Tty", -1);
1260 }
1261 Findent_to (i_command, minspace); write_string ("Command", -1);
1262 write_string ("\n", -1);
1263
1264 write_string ("----", -1);
1265 Findent_to (i_status, minspace); write_string ("------", -1);
1266 Findent_to (i_buffer, minspace); write_string ("------", -1);
1267 if (!NILP (i_tty))
1268 {
1269 Findent_to (i_tty, minspace); write_string ("---", -1);
1270 }
1271 Findent_to (i_command, minspace); write_string ("-------", -1);
1272 write_string ("\n", -1);
1273
1274 for (tail = Vprocess_alist; !NILP (tail); tail = Fcdr (tail))
1275 {
1276 Lisp_Object symbol;
1277
1278 proc = Fcdr (Fcar (tail));
1279 p = XPROCESS (proc);
1280 if (NILP (p->childp))
1281 continue;
1282 if (!NILP (query_only) && !NILP (p->kill_without_query))
1283 continue;
1284
1285 Finsert (1, &p->name);
1286 Findent_to (i_status, minspace);
1287
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);
1293
1294
1295 if (EQ (symbol, Qsignal))
1296 {
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);
1305 }
1306 else if (NETCONN1_P (p))
1307 {
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);
1316 }
1317 else
1318 Fprinc (symbol, Qnil);
1319
1320 if (EQ (symbol, Qexit))
1321 {
1322 Lisp_Object tem;
1323 tem = Fcar (Fcdr (p->status));
1324 if (XFASTINT (tem))
1325 {
1326 sprintf (tembuf, " %d", (int) XFASTINT (tem));
1327 write_string (tembuf, -1);
1328 }
1329 }
1330
1331 if (EQ (symbol, Qsignal) || EQ (symbol, Qexit))
1332 remove_process (proc);
1333
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);
1341
1342 if (!NILP (i_tty))
1343 {
1344 Findent_to (i_tty, minspace);
1345 if (STRINGP (p->tty_name))
1346 Finsert (1, &p->tty_name);
1347 }
1348
1349 Findent_to (i_command, minspace);
1350
1351 if (EQ (p->status, Qlisten))
1352 {
1353 Lisp_Object port = Fplist_get (p->childp, QCservice);
1354 if (INTEGERP (port))
1355 port = Fnumber_to_string (port);
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);
1362 }
1363 else if (NETCONN1_P (p))
1364 {
1365 /* For a local socket, there is no host name,
1366 so display service instead. */
1367 Lisp_Object host = Fplist_get (p->childp, QChost);
1368 if (!STRINGP (host))
1369 {
1370 host = Fplist_get (p->childp, QCservice);
1371 if (INTEGERP (host))
1372 host = Fnumber_to_string (host);
1373 }
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);
1380 }
1381 else
1382 {
1383 tem = p->command;
1384 while (1)
1385 {
1386 tem1 = Fcar (tem);
1387 Finsert (1, &tem1);
1388 tem = Fcdr (tem);
1389 if (NILP (tem))
1390 break;
1391 insert_string (" ");
1392 }
1393 insert_string ("\n");
1394 }
1395 }
1396 return Qnil;
1397 }
1398
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;
1407 {
1408 internal_with_output_to_temp_buffer ("*Process List*",
1409 list_processes_1, query_only);
1410 return Qnil;
1411 }
1412
1413 DEFUN ("process-list", Fprocess_list, Sprocess_list, 0, 0, 0,
1414 doc: /* Return a list of all processes. */)
1415 ()
1416 {
1417 return Fmapcar (Qcdr, Vprocess_alist);
1418 }
1419 \f
1420 /* Starting asynchronous inferior processes. */
1421
1422 static Lisp_Object start_process_unwind ();
1423
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.
1434
1435 usage: (start-process NAME BUFFER PROGRAM &rest PROGRAM-ARGS) */)
1436 (nargs, args)
1437 int nargs;
1438 register Lisp_Object *args;
1439 {
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 ();
1449
1450 buffer = args[1];
1451 if (!NILP (buffer))
1452 buffer = Fget_buffer_create (buffer);
1453
1454 /* Make sure that the child will be able to chdir to the current
1455 buffer's current directory, or its unhandled equivalent. We
1456 can't just have the child check for an error when it does the
1457 chdir, since it's in a vfork.
1458
1459 We have to GCPRO around this because Fexpand_file_name and
1460 Funhandled_file_name_directory might call a file name handling
1461 function. The argument list is protected by the caller, so all
1462 we really have to worry about is buffer. */
1463 {
1464 struct gcpro gcpro1, gcpro2;
1465
1466 current_dir = current_buffer->directory;
1467
1468 GCPRO2 (buffer, current_dir);
1469
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));
1476
1477 UNGCPRO;
1478 }
1479
1480 name = args[0];
1481 CHECK_STRING (name);
1482
1483 program = args[2];
1484
1485 CHECK_STRING (program);
1486
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);
1493
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);
1503
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)));
1509
1510 {
1511 /* Decide coding systems for communicating with the process. Here
1512 we don't setup the structure coding_system nor pay attention to
1513 unibyte mode. They are done in create_process. */
1514
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;
1519
1520 val = Vcoding_system_for_read;
1521 if (NILP (val))
1522 {
1523 args2 = (Lisp_Object *) alloca ((nargs + 1) * sizeof *args2);
1524 args2[0] = Qstart_process;
1525 for (i = 0; i < nargs; i++) args2[i + 1] = args[i];
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);
1533 }
1534 XPROCESS (proc)->decode_coding_system = val;
1535
1536 val = Vcoding_system_for_write;
1537 if (NILP (val))
1538 {
1539 if (EQ (coding_systems, Qt))
1540 {
1541 args2 = (Lisp_Object *) alloca ((nargs + 1) * sizeof args2);
1542 args2[0] = Qstart_process;
1543 for (i = 0; i < nargs; i++) args2[i + 1] = args[i];
1544 GCPRO2 (proc, current_dir);
1545 coding_systems = Ffind_operation_coding_system (nargs + 1, args2);
1546 UNGCPRO;
1547 }
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);
1552 }
1553 XPROCESS (proc)->encode_coding_system = val;
1554 }
1555
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++)
1561 {
1562 tem = args[i];
1563 CHECK_STRING (tem);
1564 len += SBYTES (tem) + 1; /* count the blank */
1565 }
1566 new_argv = (unsigned char *) alloca (len);
1567 strcpy (new_argv, SDATA (program));
1568 for (i = 3; i < nargs; i++)
1569 {
1570 tem = args[i];
1571 CHECK_STRING (tem);
1572 strcat (new_argv, " ");
1573 strcat (new_argv, SDATA (tem));
1574 }
1575 /* Need to add code here to check for program existence on VMS */
1576
1577 #else /* not VMS */
1578 new_argv = (unsigned char **) alloca ((nargs - 1) * sizeof (char *));
1579
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))))
1585 {
1586 struct gcpro gcpro1, gcpro2, gcpro3, gcpro4;
1587
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);
1595 }
1596 else
1597 {
1598 if (!NILP (Ffile_directory_p (program)))
1599 error ("Specified program for new process is a directory");
1600 tem = program;
1601 }
1602
1603 /* If program file name starts with /: for quoting a magic name,
1604 discard that. */
1605 if (SBYTES (tem) > 2 && SREF (tem, 0) == '/'
1606 && SREF (tem, 1) == ':')
1607 tem = Fsubstring (tem, make_number (2), Qnil);
1608
1609 /* Encode the file name and put it in NEW_ARGV.
1610 That's where the child will use it to execute the program. */
1611 tem = ENCODE_FILE (tem);
1612 new_argv[0] = SDATA (tem);
1613
1614 /* Here we encode arguments by the coding system used for sending
1615 data to the process. We don't support using different coding
1616 systems for encoding arguments and for encoding data sent to the
1617 process. */
1618
1619 for (i = 3; i < nargs; i++)
1620 {
1621 tem = args[i];
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);
1627 }
1628 new_argv[i - 2] = 0;
1629 #endif /* not VMS */
1630
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);
1635
1636 XPROCESS (proc)->inherit_coding_system_flag
1637 = (NILP (buffer) || !inherit_process_coding_system
1638 ? Qnil : Qt);
1639
1640 create_process (proc, (char **) new_argv, current_dir);
1641
1642 return unbind_to (count, proc);
1643 }
1644
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;
1652 {
1653 if (!PROCESSP (proc))
1654 abort ();
1655
1656 /* Was PROC started successfully? */
1657 if (XINT (XPROCESS (proc)->pid) <= 0)
1658 remove_process (proc);
1659
1660 return Qnil;
1661 }
1662
1663 void
1664 create_process_1 (timer)
1665 struct atimer *timer;
1666 {
1667 /* Nothing to do. */
1668 }
1669
1670
1671 #if 0 /* This doesn't work; see the note before sigchld_handler. */
1672 #ifdef USG
1673 #ifdef SIGCHLD
1674 /* Mimic blocking of signals on system V, which doesn't really have it. */
1675
1676 /* Nonzero means we got a SIGCHLD when it was supposed to be blocked. */
1677 int sigchld_deferred;
1678
1679 SIGTYPE
1680 create_process_sigchld ()
1681 {
1682 signal (SIGCHLD, create_process_sigchld);
1683
1684 sigchld_deferred = 1;
1685 }
1686 #endif
1687 #endif
1688 #endif
1689
1690 #ifndef VMS /* VMS version of this function is in vmsproc.c. */
1691 void
1692 create_process (process, new_argv, current_dir)
1693 Lisp_Object process;
1694 char **new_argv;
1695 Lisp_Object current_dir;
1696 {
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
1720
1721 inchannel = outchannel = -1;
1722
1723 #ifdef HAVE_PTYS
1724 if (!NILP (Vprocess_connection_type))
1725 outchannel = inchannel = allocate_pty ();
1726
1727 if (inchannel >= 0)
1728 {
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;
1745 }
1746 else
1747 #endif /* HAVE_PTYS */
1748 #ifdef SKTPAIR
1749 {
1750 if (socketpair (AF_UNIX, SOCK_STREAM, 0, sv) < 0)
1751 report_file_error ("Opening socketpair", Qnil);
1752 outchannel = inchannel = sv[0];
1753 forkout = forkin = sv[1];
1754 }
1755 #else /* not SKTPAIR */
1756 {
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)
1765 {
1766 emacs_close (inchannel);
1767 emacs_close (forkout);
1768 report_file_error ("Creating pipe", Qnil);
1769 }
1770 outchannel = sv[1];
1771 forkin = sv[0];
1772 }
1773 #endif /* not SKTPAIR */
1774
1775 #if 0
1776 /* Replaced by close_process_descs */
1777 set_exclusive_use (inchannel);
1778 set_exclusive_use (outchannel);
1779 #endif
1780
1781 /* Stride people say it's a mystery why this is needed
1782 as well as the O_NDELAY, but that it fails without this. */
1783 #if defined (STRIDE) || (defined (pfa) && defined (HAVE_PTYS))
1784 {
1785 int one = 1;
1786 ioctl (inchannel, FIONBIO, &one);
1787 }
1788 #endif
1789
1790 #ifdef O_NONBLOCK
1791 fcntl (inchannel, F_SETFL, O_NONBLOCK);
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
1799
1800 /* Record this as an active process, with its channels.
1801 As a result, child_setup will close Emacs's side of the pipes. */
1802 chan_process[inchannel] = process;
1803 XSETINT (XPROCESS (process)->infd, inchannel);
1804 XSETINT (XPROCESS (process)->outfd, outchannel);
1805
1806 /* Previously we recorded the tty descriptor used in the subprocess.
1807 It was only used for getting the foreground tty process, so now
1808 we just reopen the device (see emacs_get_tty_pgrp) as this is
1809 more portable (see USG_SUBTTY_WORKS above). */
1810
1811 XPROCESS (process)->pty_flag = (pty_flag ? Qt : Qnil);
1812 XPROCESS (process)->status = Qrun;
1813 setup_process_coding_systems (process);
1814
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 */
1850
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;
1855
1856 /* Until we store the proper pid, enable sigchld_handler
1857 to recognize an unknown pid as standing for this process.
1858 It is very important not to let this `marker' value stay
1859 in the table after this function has returned; if it does
1860 it might cause call-process to hang and subsequent asynchronous
1861 processes to get their return values scrambled. */
1862 XSETINT (XPROCESS (process)->pid, -1);
1863
1864 BLOCK_INPUT;
1865
1866 {
1867 /* child_setup must clobber environ on systems with true vfork.
1868 Protect it from permanent change. */
1869 char **save_environ = environ;
1870
1871 current_dir = ENCODE_FILE (current_dir);
1872
1873 #ifndef WINDOWSNT
1874 pid = vfork ();
1875 if (pid == 0)
1876 #endif /* not WINDOWSNT */
1877 {
1878 int xforkin = forkin;
1879 int xforkout = forkout;
1880
1881 #if 0 /* This was probably a mistake--it duplicates code later on,
1882 but fails to handle all the cases. */
1883 /* Make sure SIGCHLD is not blocked in the child. */
1884 sigsetmask (SIGEMPTYMASK);
1885 #endif
1886
1887 /* Make the pty be the controlling terminal of the process. */
1888 #ifdef HAVE_PTYS
1889 /* First, disconnect its current controlling terminal. */
1890 #ifdef HAVE_SETSID
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)
1896 {
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
1902 }
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)
1913 {
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);
1919 }
1920 #else
1921 #if defined (NTTYDISC) && defined (TIOCSETD)
1922 if (pty_flag && xforkin >= 0)
1923 {
1924 /* Use new line discipline. */
1925 int ldisc = NTTYDISC;
1926 ioctl (xforkin, TIOCSETD, &ldisc);
1927 }
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)
1934 {
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
1950 }
1951 #endif /* TIOCNOTTY */
1952
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)
1963 {
1964 #ifdef SET_CHILD_PTY_PGRP
1965 int pgrp = getpid ();
1966 #endif
1967
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);
1973
1974 if (xforkin < 0)
1975 {
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);
1980 }
1981
1982 #ifdef SET_CHILD_PTY_PGRP
1983 ioctl (xforkin, TIOCSPGRP, &pgrp);
1984 ioctl (xforkout, TIOCSPGRP, &pgrp);
1985 #endif
1986 }
1987 #endif /* not UNIPLUS and not RTU and not DONT_REOPEN_PTY */
1988
1989 #ifdef SETUP_SLAVE_PTY
1990 if (pty_flag)
1991 {
1992 SETUP_SLAVE_PTY;
1993 }
1994 #endif /* SETUP_SLAVE_PTY */
1995 #ifdef AIX
1996 /* On AIX, we've disabled SIGHUP above once we start a child on a pty.
1997 Now reenable it in the child, so it will die when we want it to. */
1998 if (pty_flag)
1999 signal (SIGHUP, SIG_DFL);
2000 #endif
2001 #endif /* HAVE_PTYS */
2002
2003 signal (SIGINT, SIG_DFL);
2004 signal (SIGQUIT, SIG_DFL);
2005
2006 /* Stop blocking signals in the child. */
2007 #ifdef POSIX_SIGNALS
2008 sigprocmask (SIG_SETMASK, &procmask, 0);
2009 #else /* !POSIX_SIGNALS */
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 */
2024
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 */
2034 }
2035 environ = save_environ;
2036 }
2037
2038 UNBLOCK_INPUT;
2039
2040 /* This runs in the Emacs process. */
2041 if (pid < 0)
2042 {
2043 if (forkin >= 0)
2044 emacs_close (forkin);
2045 if (forkin != forkout && forkout >= 0)
2046 emacs_close (forkout);
2047 }
2048 else
2049 {
2050 /* vfork succeeded. */
2051 XSETFASTINT (XPROCESS (process)->pid, pid);
2052
2053 #ifdef WINDOWSNT
2054 register_child (pid, inchannel);
2055 #endif /* WINDOWSNT */
2056
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. */
2060 {
2061 struct atimer *timer;
2062 EMACS_TIME offset;
2063
2064 stop_polling ();
2065 EMACS_SET_SECS_USECS (offset, 1, 0);
2066 timer = start_atimer (ATIMER_RELATIVE, offset, create_process_1, 0);
2067
2068 if (forkin >= 0)
2069 emacs_close (forkin);
2070
2071 cancel_atimer (timer);
2072 start_polling ();
2073 }
2074
2075 if (forkin != forkout && forkout >= 0)
2076 emacs_close (forkout);
2077
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;
2084 }
2085
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 */
2118
2119 /* Now generate the error if vfork failed. */
2120 if (pid < 0)
2121 report_file_error ("Doing vfork", Qnil);
2122 }
2123 #endif /* not VMS */
2124
2125 \f
2126 #ifdef HAVE_SOCKETS
2127
2128 /* Convert an internal struct sockaddr to a lisp object (vector or string).
2129 The address family of sa is not included in the result. */
2130
2131 static Lisp_Object
2132 conv_sockaddr_to_lisp (sa, len)
2133 struct sockaddr *sa;
2134 int len;
2135 {
2136 Lisp_Object address;
2137 int i;
2138 unsigned char *cp;
2139 register struct Lisp_Vector *p;
2140
2141 switch (sa->sa_family)
2142 {
2143 case AF_INET:
2144 {
2145 struct sockaddr_in *sin = (struct sockaddr_in *) sa;
2146 len = sizeof (sin->sin_addr) + 1;
2147 address = Fmake_vector (make_number (len), Qnil);
2148 p = XVECTOR (address);
2149 p->contents[--len] = make_number (ntohs (sin->sin_port));
2150 cp = (unsigned char *)&sin->sin_addr;
2151 break;
2152 }
2153 #ifdef HAVE_LOCAL_SOCKETS
2154 case AF_LOCAL:
2155 {
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);
2161 }
2162 #endif
2163 default:
2164 len -= sizeof (sa->sa_family);
2165 address = Fcons (make_number (sa->sa_family),
2166 Fmake_vector (make_number (len), Qnil));
2167 p = XVECTOR (XCDR (address));
2168 cp = (unsigned char *) sa + sizeof (sa->sa_family);
2169 break;
2170 }
2171
2172 i = 0;
2173 while (i < len)
2174 p->contents[i++] = make_number (*cp++);
2175
2176 return address;
2177 }
2178
2179
2180 /* Get family and required size for sockaddr structure to hold ADDRESS. */
2181
2182 static int
2183 get_lisp_to_sockaddr_size (address, familyp)
2184 Lisp_Object address;
2185 int *familyp;
2186 {
2187 register struct Lisp_Vector *p;
2188
2189 if (VECTORP (address))
2190 {
2191 p = XVECTOR (address);
2192 if (p->size == 5)
2193 {
2194 *familyp = AF_INET;
2195 return sizeof (struct sockaddr_in);
2196 }
2197 }
2198 #ifdef HAVE_LOCAL_SOCKETS
2199 else if (STRINGP (address))
2200 {
2201 *familyp = AF_LOCAL;
2202 return sizeof (struct sockaddr_un);
2203 }
2204 #endif
2205 else if (CONSP (address) && INTEGERP (XCAR (address)) && VECTORP (XCDR (address)))
2206 {
2207 struct sockaddr *sa;
2208 *familyp = XINT (XCAR (address));
2209 p = XVECTOR (XCDR (address));
2210 return p->size + sizeof (sa->sa_family);
2211 }
2212 return 0;
2213 }
2214
2215 /* Convert an address object (vector or string) to an internal sockaddr.
2216 Format of address has already been validated by size_lisp_to_sockaddr. */
2217
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;
2224 {
2225 register struct Lisp_Vector *p;
2226 register unsigned char *cp = NULL;
2227 register int i;
2228
2229 bzero (sa, len);
2230 sa->sa_family = family;
2231
2232 if (VECTORP (address))
2233 {
2234 p = XVECTOR (address);
2235 if (family == AF_INET)
2236 {
2237 struct sockaddr_in *sin = (struct sockaddr_in *) sa;
2238 len = sizeof (sin->sin_addr) + 1;
2239 i = XINT (p->contents[--len]);
2240 sin->sin_port = htons (i);
2241 cp = (unsigned char *)&sin->sin_addr;
2242 }
2243 }
2244 else if (STRINGP (address))
2245 {
2246 #ifdef HAVE_LOCAL_SOCKETS
2247 if (family == AF_LOCAL)
2248 {
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++;
2253 }
2254 #endif
2255 return;
2256 }
2257 else
2258 {
2259 p = XVECTOR (XCDR (address));
2260 cp = (unsigned char *)sa + sizeof (sa->sa_family);
2261 }
2262
2263 for (i = 0; i < len; i++)
2264 if (INTEGERP (p->contents[i]))
2265 *cp++ = XFASTINT (p->contents[i]) & 0xff;
2266 }
2267
2268 #ifdef DATAGRAM_SOCKETS
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;
2274 {
2275 int channel;
2276
2277 CHECK_PROCESS (process);
2278
2279 if (!DATAGRAM_CONN_P (process))
2280 return Qnil;
2281
2282 channel = XINT (XPROCESS (process)->infd);
2283 return conv_sockaddr_to_lisp (datagram_address[channel].sa,
2284 datagram_address[channel].len);
2285 }
2286
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;
2293 {
2294 int channel;
2295 int family, len;
2296
2297 CHECK_PROCESS (process);
2298
2299 if (!DATAGRAM_CONN_P (process))
2300 return Qnil;
2301
2302 channel = XINT (XPROCESS (process)->infd);
2303
2304 len = get_lisp_to_sockaddr_size (address, &family);
2305 if (datagram_address[channel].len != len)
2306 return Qnil;
2307 conv_lisp_to_sockaddr (family, address, datagram_address[channel].sa, len);
2308 return address;
2309 }
2310 #endif
2311 \f
2312
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[] =
2324 {
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 }
2350 };
2351
2352 /* Set option OPT to value VAL on socket S.
2353
2354 Returns (1<<socket_options[OPT].optbit) if option is known, 0 otherwise.
2355 Signals an error if setting a known option fails.
2356 */
2357
2358 static int
2359 set_socket_option (s, opt, val)
2360 int s;
2361 Lisp_Object opt, val;
2362 {
2363 char *name;
2364 struct socket_options *sopt;
2365 int ret = 0;
2366
2367 CHECK_SYMBOL (opt);
2368
2369 name = (char *) SDATA (SYMBOL_NAME (opt));
2370 for (sopt = socket_options; sopt->name; sopt++)
2371 if (strcmp (name, sopt->name) == 0)
2372 break;
2373
2374 switch (sopt->opttype)
2375 {
2376 case SOPT_BOOL:
2377 {
2378 int optval;
2379 optval = NILP (val) ? 0 : 1;
2380 ret = setsockopt (s, sopt->optlevel, sopt->optnum,
2381 &optval, sizeof (optval));
2382 break;
2383 }
2384
2385 case SOPT_INT:
2386 {
2387 int optval;
2388 if (INTEGERP (val))
2389 optval = XINT (val);
2390 else
2391 error ("Bad option value for %s", name);
2392 ret = setsockopt (s, sopt->optlevel, sopt->optnum,
2393 &optval, sizeof (optval));
2394 break;
2395 }
2396
2397 #ifdef SO_BINDTODEVICE
2398 case SOPT_IFNAME:
2399 {
2400 char devname[IFNAMSIZ+1];
2401
2402 /* This is broken, at least in the Linux 2.4 kernel.
2403 To unbind, the arg must be a zero integer, not the empty string.
2404 This should work on all systems. KFS. 2003-09-23. */
2405 bzero (devname, sizeof devname);
2406 if (STRINGP (val))
2407 {
2408 char *arg = (char *) SDATA (val);
2409 int len = min (strlen (arg), IFNAMSIZ);
2410 bcopy (arg, devname, len);
2411 }
2412 else if (!NILP (val))
2413 error ("Bad option value for %s", name);
2414 ret = setsockopt (s, sopt->optlevel, sopt->optnum,
2415 devname, IFNAMSIZ);
2416 break;
2417 }
2418 #endif
2419
2420 #ifdef SO_LINGER
2421 case SOPT_LINGER:
2422 {
2423 struct linger linger;
2424
2425 linger.l_onoff = 1;
2426 linger.l_linger = 0;
2427 if (INTEGERP (val))
2428 linger.l_linger = XINT (val);
2429 else
2430 linger.l_onoff = NILP (val) ? 0 : 1;
2431 ret = setsockopt (s, sopt->optlevel, sopt->optnum,
2432 &linger, sizeof (linger));
2433 break;
2434 }
2435 #endif
2436
2437 default:
2438 return 0;
2439 }
2440
2441 if (ret < 0)
2442 report_file_error ("Cannot set network option",
2443 Fcons (opt, Fcons (val, Qnil)));
2444 return (1 << sopt->optbit);
2445 }
2446
2447
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;
2458 {
2459 int s;
2460 struct Lisp_Process *p;
2461
2462 CHECK_PROCESS (process);
2463 p = XPROCESS (process);
2464 if (!NETCONN1_P (p))
2465 error ("Process is not a network process");
2466
2467 s = XINT (p->infd);
2468 if (s < 0)
2469 error ("Process is not running");
2470
2471 if (set_socket_option (s, option, value))
2472 {
2473 p->childp = Fplist_put (p->childp, option, value);
2474 return Qt;
2475 }
2476
2477 if (NILP (no_error))
2478 error ("Unknown or unsupported option");
2479
2480 return Qnil;
2481 }
2482
2483 \f
2484 /* A version of request_sigio suitable for a record_unwind_protect. */
2485
2486 Lisp_Object
2487 unwind_request_sigio (dummy)
2488 Lisp_Object dummy;
2489 {
2490 if (interrupt_input)
2491 request_sigio ();
2492 return Qnil;
2493 }
2494
2495 /* Create a network stream/datagram client/server process. Treated
2496 exactly like a normal process when reading and writing. Primary
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 */
2500
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.
2504
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.
2510
2511 Arguments are specified as keyword/argument pairs. The following
2512 arguments are defined:
2513
2514 :name NAME -- NAME is name for process. It is modified if necessary
2515 to make it unique.
2516
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.
2522
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.
2527
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.
2531
2532 :type TYPE -- TYPE is the type of connection. The default (nil) is a
2533 stream type connection, `datagram' creates a datagram type connection.
2534
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.
2540
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.
2544
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.
2550
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.
2561
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.
2566
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.
2572
2573 :noquery BOOL -- Query the user unless BOOL is non-nil, and process is
2574 running when emacs is exited.
2575
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'.
2581
2582 :filter FILTER -- Install FILTER as the process filter.
2583
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.
2588
2589 :sentinel SENTINEL -- Install SENTINEL as the process sentinel.
2590
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.
2596
2597 :plist PLIST -- Install PLIST as the new process' initial plist.
2598
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.
2604
2605 The following network options can be specified for this connection:
2606
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.
2617
2618 Consult the relevant system programmer's manual pages for more
2619 information on using these options.
2620
2621
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:
2625
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.
2637
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.
2642
2643 The original argument list, modified with the actual connection
2644 information, is available via the `process-contact' function.
2645
2646 usage: (make-network-process &rest ARGS) */)
2647 (nargs, args)
2648 int nargs;
2649 Lisp_Object *args;
2650 {
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
2660 {
2661 int ai_family;
2662 int ai_socktype;
2663 int ai_protocol;
2664 int ai_addrlen;
2665 struct sockaddr *ai_addr;
2666 struct _emacs_addrinfo *ai_next;
2667 } ai, *res, *lres;
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;
2689
2690 if (nargs == 0)
2691 return Qnil;
2692
2693 /* Save arguments for process-contact and clone-process. */
2694 contact = Flist (nargs, args);
2695 GCPRO1 (contact);
2696
2697 #ifdef WINDOWSNT
2698 /* Ensure socket support is loaded if available. */
2699 init_winsock (TRUE);
2700 #endif
2701
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");
2712
2713 /* :server BOOL */
2714 tem = Fplist_get (contact, QCserver);
2715 if (!NILP (tem))
2716 {
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
2726 }
2727
2728 /* Make QCaddress an alias for :local (server) or :remote (client). */
2729 QCaddress = is_server ? QClocal : QCremote;
2730
2731 /* :wait BOOL */
2732 if (!is_server && socktype == SOCK_STREAM
2733 && (tem = Fplist_get (contact, QCnowait), !NILP (tem)))
2734 {
2735 #ifndef NON_BLOCKING_CONNECT
2736 error ("Non-blocking connect not supported");
2737 #else
2738 is_non_blocking_client = 1;
2739 #endif
2740 }
2741
2742 name = Fplist_get (contact, QCname);
2743 buffer = Fplist_get (contact, QCbuffer);
2744 filter = Fplist_get (contact, QCfilter);
2745 sentinel = Fplist_get (contact, QCsentinel);
2746
2747 CHECK_STRING (name);
2748
2749 #ifdef TERM
2750 /* Let's handle TERM before things get complicated ... */
2751 host = Fplist_get (contact, QChost);
2752 CHECK_STRING (host);
2753
2754 service = Fplist_get (contact, QCservice);
2755 if (INTEGERP (service))
2756 port = htons ((unsigned short) XINT (service));
2757 else
2758 {
2759 struct servent *svc_info;
2760 CHECK_STRING (service);
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;
2765 }
2766
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);
2772
2773 #else /* not TERM */
2774
2775 /* Initialize addrinfo structure in case we don't use getaddrinfo. */
2776 ai.ai_socktype = socktype;
2777 ai.ai_protocol = 0;
2778 ai.ai_next = NULL;
2779 res = &ai;
2780
2781 /* :local ADDRESS or :remote ADDRESS */
2782 address = Fplist_get (contact, QCaddress);
2783 if (!NILP (address))
2784 {
2785 host = service = Qnil;
2786
2787 if (!(ai.ai_addrlen = get_lisp_to_sockaddr_size (address, &family)))
2788 error ("Malformed :address");
2789 ai.ai_family = family;
2790 ai.ai_addr = alloca (ai.ai_addrlen);
2791 conv_lisp_to_sockaddr (family, address, ai.ai_addr, ai.ai_addrlen);
2792 goto open_socket;
2793 }
2794
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
2800 {
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
2807 }
2808 if (family < 0)
2809 error ("Unknown address family");
2810 ai.ai_family = family;
2811
2812 /* :service SERVICE -- string, integer (port number), or t (random port). */
2813 service = Fplist_get (contact, QCservice);
2814
2815 #ifdef HAVE_LOCAL_SOCKETS
2816 if (family == AF_LOCAL)
2817 {
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;
2827 }
2828 #endif
2829
2830 /* :host HOST -- hostname, ip address, or 'local for localhost. */
2831 host = Fplist_get (contact, QChost);
2832 if (!NILP (host))
2833 {
2834 if (EQ (host, Qlocal))
2835 host = build_string ("localhost");
2836 CHECK_STRING (host);
2837 }
2838
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)
2844 {
2845 record_unwind_protect (unwind_stop_other_atimers, Qnil);
2846 bind_polling_period (10);
2847 }
2848 #endif
2849
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))
2854 {
2855
2856 /* SERVICE can either be a string or int.
2857 Convert to a C string for later use by getaddrinfo. */
2858 if (EQ (service, Qt))
2859 portstring = "0";
2860 else if (INTEGERP (service))
2861 {
2862 sprintf (portbuf, "%ld", (long) XINT (service));
2863 portstring = portbuf;
2864 }
2865 else
2866 {
2867 CHECK_STRING (service);
2868 portstring = SDATA (service);
2869 }
2870
2871 immediate_quit = 1;
2872 QUIT;
2873 memset (&hints, 0, sizeof (hints));
2874 hints.ai_flags = 0;
2875 hints.ai_family = NILP (Fplist_member (contact, QCfamily)) ? AF_UNSPEC : family;
2876 hints.ai_socktype = socktype;
2877 hints.ai_protocol = 0;
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;
2886
2887 goto open_socket;
2888 }
2889 #endif /* HAVE_GETADDRINFO */
2890
2891 /* We end up here if getaddrinfo is not defined, or in case no hostname
2892 has been specified (e.g. for a local server process). */
2893
2894 if (EQ (service, Qt))
2895 port = 0;
2896 else if (INTEGERP (service))
2897 port = htons ((unsigned short) XINT (service));
2898 else
2899 {
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;
2907 }
2908
2909 bzero (&address_in, sizeof address_in);
2910 address_in.sin_family = family;
2911 address_in.sin_addr.s_addr = INADDR_ANY;
2912 address_in.sin_port = port;
2913
2914 #ifndef HAVE_GETADDRINFO
2915 if (!NILP (host))
2916 {
2917 struct hostent *host_info_ptr;
2918
2919 /* gethostbyname may fail with TRY_AGAIN, but we don't honour that,
2920 as it may `hang' emacs for a very long time. */
2921 immediate_quit = 1;
2922 QUIT;
2923 host_info_ptr = gethostbyname (SDATA (host));
2924 immediate_quit = 0;
2925
2926 if (host_info_ptr)
2927 {
2928 bcopy (host_info_ptr->h_addr, (char *) &address_in.sin_addr,
2929 host_info_ptr->h_length);
2930 family = host_info_ptr->h_addrtype;
2931 address_in.sin_family = family;
2932 }
2933 else
2934 /* Attempt to interpret host as numeric inet address */
2935 {
2936 IN_ADDR numeric_addr;
2937 numeric_addr = inet_addr ((char *) SDATA (host));
2938 if (NUMERIC_ADDR_ERROR)
2939 error ("Unknown host \"%s\"", SDATA (host));
2940
2941 bcopy ((char *)&numeric_addr, (char *) &address_in.sin_addr,
2942 sizeof (address_in.sin_addr));
2943 }
2944
2945 }
2946 #endif /* not HAVE_GETADDRINFO */
2947
2948 ai.ai_family = family;
2949 ai.ai_addr = (struct sockaddr *) &address_in;
2950 ai.ai_addrlen = sizeof address_in;
2951
2952 open_socket:
2953
2954 /* Kernel bugs (on Ultrix at least) cause lossage (not just EINTR)
2955 when connect is interrupted. So let's not let it get interrupted.
2956 Note we do not turn off polling, because polling is only used
2957 when not interrupt_input, and thus not normally used on the systems
2958 which have this bug. On systems which use polling, there's no way
2959 to quit if polling is turned off. */
2960 if (interrupt_input
2961 && !is_server && socktype == SOCK_STREAM)
2962 {
2963 /* Comment from KFS: The original open-network-stream code
2964 didn't unwind protect this, but it seems like the proper
2965 thing to do. In any case, I don't see how it could harm to
2966 do this -- and it makes cleanup (using unbind_to) easier. */
2967 record_unwind_protect (unwind_request_sigio, Qnil);
2968 unrequest_sigio ();
2969 }
2970
2971 /* Do this in case we never enter the for-loop below. */
2972 count1 = SPECPDL_INDEX ();
2973 s = -1;
2974
2975 for (lres = res; lres; lres = lres->ai_next)
2976 {
2977 int optn, optbits;
2978
2979 s = socket (lres->ai_family, lres->ai_socktype, lres->ai_protocol);
2980 if (s < 0)
2981 {
2982 xerrno = errno;
2983 continue;
2984 }
2985
2986 #ifdef DATAGRAM_SOCKETS
2987 if (!is_server && socktype == SOCK_DGRAM)
2988 break;
2989 #endif /* DATAGRAM_SOCKETS */
2990
2991 #ifdef NON_BLOCKING_CONNECT
2992 if (is_non_blocking_client)
2993 {
2994 #ifdef O_NONBLOCK
2995 ret = fcntl (s, F_SETFL, O_NONBLOCK);
2996 #else
2997 ret = fcntl (s, F_SETFL, O_NDELAY);
2998 #endif
2999 if (ret < 0)
3000 {
3001 xerrno = errno;
3002 emacs_close (s);
3003 s = -1;
3004 continue;
3005 }
3006 }
3007 #endif
3008
3009 /* Make us close S if quit. */
3010 record_unwind_protect (close_file_unwind, make_number (s));
3011
3012 /* Parse network options in the arg list.
3013 We simply ignore anything which isn't a known option (including other keywords).
3014 An error is signalled if setting a known option fails. */
3015 for (optn = optbits = 0; optn < nargs-1; optn += 2)
3016 optbits |= set_socket_option (s, args[optn], args[optn+1]);
3017
3018 if (is_server)
3019 {
3020 /* Configure as a server socket. */
3021
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)))
3028 {
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);
3032 }
3033
3034 if (bind (s, lres->ai_addr, lres->ai_addrlen))
3035 report_file_error ("Cannot bind server socket", Qnil);
3036
3037 #ifdef HAVE_GETSOCKNAME
3038 if (EQ (service, Qt))
3039 {
3040 struct sockaddr_in sa1;
3041 int len1 = sizeof (sa1);
3042 if (getsockname (s, (struct sockaddr *)&sa1, &len1) == 0)
3043 {
3044 ((struct sockaddr_in *)(lres->ai_addr))->sin_port = sa1.sin_port;
3045 service = make_number (ntohs (sa1.sin_port));
3046 contact = Fplist_put (contact, QCservice, service);
3047 }
3048 }
3049 #endif
3050
3051 if (socktype == SOCK_STREAM && listen (s, backlog))
3052 report_file_error ("Cannot listen on server socket", Qnil);
3053
3054 break;
3055 }
3056
3057 retry_connect:
3058
3059 immediate_quit = 1;
3060 QUIT;
3061
3062 /* This turns off all alarm-based interrupts; the
3063 bind_polling_period call above doesn't always turn all the
3064 short-interval ones off, especially if interrupt_input is
3065 set.
3066
3067 It'd be nice to be able to control the connect timeout
3068 though. Would non-blocking connect calls be portable?
3069
3070 This used to be conditioned by HAVE_GETADDRINFO. Why? */
3071
3072 turn_on_atimers (0);
3073
3074 ret = connect (s, lres->ai_addr, lres->ai_addrlen);
3075 xerrno = errno;
3076
3077 turn_on_atimers (1);
3078
3079 if (ret == 0 || xerrno == EISCONN)
3080 {
3081 /* The unwind-protect will be discarded afterwards.
3082 Likewise for immediate_quit. */
3083 break;
3084 }
3085
3086 #ifdef NON_BLOCKING_CONNECT
3087 #ifdef EINPROGRESS
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
3097
3098 immediate_quit = 0;
3099
3100 if (xerrno == EINTR)
3101 goto retry_connect;
3102 if (xerrno == EADDRINUSE && retry < 20)
3103 {
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;
3110 }
3111
3112 /* Discard the unwind protect closing S. */
3113 specpdl_ptr = specpdl + count1;
3114 emacs_close (s);
3115 s = -1;
3116 }
3117
3118 if (s >= 0)
3119 {
3120 #ifdef DATAGRAM_SOCKETS
3121 if (socktype == SOCK_DGRAM)
3122 {
3123 if (datagram_address[s].sa)
3124 abort ();
3125 datagram_address[s].sa = (struct sockaddr *) xmalloc (lres->ai_addrlen);
3126 datagram_address[s].len = lres->ai_addrlen;
3127 if (is_server)
3128 {
3129 Lisp_Object remote;
3130 bzero (datagram_address[s].sa, lres->ai_addrlen);
3131 if (remote = Fplist_get (contact, QCremote), !NILP (remote))
3132 {
3133 int rfamily, rlen;
3134 rlen = get_lisp_to_sockaddr_size (remote, &rfamily);
3135 if (rfamily == lres->ai_family && rlen == lres->ai_addrlen)
3136 conv_lisp_to_sockaddr (rfamily, remote,
3137 datagram_address[s].sa, rlen);
3138 }
3139 }
3140 else
3141 bcopy (lres->ai_addr, datagram_address[s].sa, lres->ai_addrlen);
3142 }
3143 #endif
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)
3148 {
3149 struct sockaddr_in sa1;
3150 int len1 = sizeof (sa1);
3151 if (getsockname (s, (struct sockaddr *)&sa1, &len1) == 0)
3152 contact = Fplist_put (contact, QClocal,
3153 conv_sockaddr_to_lisp (&sa1, len1));
3154 }
3155 #endif
3156 }
3157
3158 #ifdef HAVE_GETADDRINFO
3159 if (res != &ai)
3160 freeaddrinfo (res);
3161 #endif
3162
3163 immediate_quit = 0;
3164
3165 /* Discard the unwind protect for closing S, if any. */
3166 specpdl_ptr = specpdl + count1;
3167
3168 /* Unwind bind_polling_period and request_sigio. */
3169 unbind_to (count, Qnil);
3170
3171 if (s < 0)
3172 {
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;
3179
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);
3185 }
3186
3187 #endif /* not TERM */
3188
3189 inch = s;
3190 outch = s;
3191
3192 if (!NILP (buffer))
3193 buffer = Fget_buffer_create (buffer);
3194 proc = make_process (name);
3195
3196 chan_process[inch] = proc;
3197
3198 #ifdef O_NONBLOCK
3199 fcntl (inch, F_SETFL, O_NONBLOCK);
3200 #else
3201 #ifdef O_NDELAY
3202 fcntl (inch, F_SETFL, O_NDELAY);
3203 #endif
3204 #endif
3205
3206 p = XPROCESS (proc);
3207
3208 p->childp = contact;
3209 p->plist = Fcopy_sequence (Fplist_get (contact, QCplist));
3210
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;
3228
3229 #ifdef NON_BLOCKING_CONNECT
3230 if (is_non_blocking_client)
3231 {
3232 /* We may get here if connect did succeed immediately. However,
3233 in that case, we still need to signal this like a non-blocking
3234 connection. */
3235 p->status = Qconnect;
3236 if (!FD_ISSET (inch, &connect_wait_mask))
3237 {
3238 FD_SET (inch, &connect_wait_mask);
3239 num_pending_connects++;
3240 }
3241 }
3242 else
3243 #endif
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)))
3248 {
3249 FD_SET (inch, &input_wait_mask);
3250 FD_SET (inch, &non_keyboard_wait_mask);
3251 }
3252
3253 if (inch > max_process_desc)
3254 max_process_desc = inch;
3255
3256 tem = Fplist_member (contact, QCcoding);
3257 if (!NILP (tem) && (!CONSP (tem) || !CONSP (XCDR (tem))))
3258 tem = Qnil; /* No error message (too late!). */
3259
3260 {
3261 /* Setup coding systems for communicating with the network stream. */
3262 struct gcpro gcpro1;
3263 /* Qt denotes we have not yet called Ffind_operation_coding_system. */
3264 Lisp_Object coding_systems = Qt;
3265 Lisp_Object args[5], val;
3266
3267 if (!NILP (tem))
3268 {
3269 val = XCAR (XCDR (tem));
3270 if (CONSP (val))
3271 val = XCAR (val);
3272 }
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
3283 {
3284 if (NILP (host) || NILP (service))
3285 coding_systems = Qnil;
3286 else
3287 {
3288 args[0] = Qopen_network_stream, args[1] = name,
3289 args[2] = buffer, args[3] = host, args[4] = service;
3290 GCPRO1 (proc);
3291 coding_systems = Ffind_operation_coding_system (5, args);
3292 UNGCPRO;
3293 }
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;
3300 }
3301 p->decode_coding_system = val;
3302
3303 if (!NILP (tem))
3304 {
3305 val = XCAR (XCDR (tem));
3306 if (CONSP (val))
3307 val = XCDR (val);
3308 }
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
3314 {
3315 if (EQ (coding_systems, Qt))
3316 {
3317 if (NILP (host) || NILP (service))
3318 coding_systems = Qnil;
3319 else
3320 {
3321 args[0] = Qopen_network_stream, args[1] = name,
3322 args[2] = buffer, args[3] = host, args[4] = service;
3323 GCPRO1 (proc);
3324 coding_systems = Ffind_operation_coding_system (5, args);
3325 UNGCPRO;
3326 }
3327 }
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;
3334 }
3335 p->encode_coding_system = val;
3336 }
3337 setup_process_coding_systems (proc);
3338
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);
3343
3344 p->inherit_coding_system_flag
3345 = (!NILP (tem) || NILP (buffer) || !inherit_process_coding_system
3346 ? Qnil : Qt);
3347
3348 UNGCPRO;
3349 return proc;
3350 }
3351 #endif /* HAVE_SOCKETS */
3352
3353 \f
3354 #if defined(HAVE_SOCKETS) && defined(HAVE_NET_IF_H) && defined(HAVE_SYS_IOCTL_H)
3355
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'. */)
3362 ()
3363 {
3364 struct ifconf ifconf;
3365 struct ifreq *ifreqs = NULL;
3366 int ifaces = 0;
3367 int buf_size, s;
3368 Lisp_Object res;
3369
3370 s = socket (AF_INET, SOCK_STREAM, 0);
3371 if (s < 0)
3372 return Qnil;
3373
3374 again:
3375 ifaces += 25;
3376 buf_size = ifaces * sizeof(ifreqs[0]);
3377 ifreqs = (struct ifreq *)xrealloc(ifreqs, buf_size);
3378 if (!ifreqs)
3379 {
3380 close (s);
3381 return Qnil;
3382 }
3383
3384 ifconf.ifc_len = buf_size;
3385 ifconf.ifc_req = ifreqs;
3386 if (ioctl (s, SIOCGIFCONF, &ifconf))
3387 {
3388 close (s);
3389 return Qnil;
3390 }
3391
3392 if (ifconf.ifc_len == buf_size)
3393 goto again;
3394
3395 close (s);
3396 ifaces = ifconf.ifc_len / sizeof (ifreqs[0]);
3397
3398 res = Qnil;
3399 while (--ifaces >= 0)
3400 {
3401 struct ifreq *ifq = &ifreqs[ifaces];
3402 char namebuf[sizeof (ifq->ifr_name) + 1];
3403 if (ifq->ifr_addr.sa_family != AF_INET)
3404 continue;
3405 bcopy (ifq->ifr_name, namebuf, sizeof (ifq->ifr_name));
3406 namebuf[sizeof (ifq->ifr_name)] = 0;
3407 res = Fcons (Fcons (build_string (namebuf),
3408 conv_sockaddr_to_lisp (&ifq->ifr_addr,
3409 sizeof (struct sockaddr))),
3410 res);
3411 }
3412
3413 return res;
3414 }
3415 #endif /* SIOCGIFCONF */
3416
3417 #if defined(SIOCGIFADDR) || defined(SIOCGIFHWADDR) || defined(SIOCGIFFLAGS)
3418
3419 struct ifflag_def {
3420 int flag_bit;
3421 char *flag_sym;
3422 };
3423
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 }
3474 };
3475
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;
3484 {
3485 struct ifreq rq;
3486 Lisp_Object res = Qnil;
3487 Lisp_Object elt;
3488 int s;
3489 int any = 0;
3490
3491 CHECK_STRING (ifname);
3492
3493 bzero (rq.ifr_name, sizeof rq.ifr_name);
3494 strncpy (rq.ifr_name, SDATA (ifname), sizeof (rq.ifr_name));
3495
3496 s = socket (AF_INET, SOCK_STREAM, 0);
3497 if (s < 0)
3498 return Qnil;
3499
3500 elt = Qnil;
3501 #if defined(SIOCGIFFLAGS) && defined(HAVE_STRUCT_IFREQ_IFR_FLAGS)
3502 if (ioctl (s, SIOCGIFFLAGS, &rq) == 0)
3503 {
3504 int flags = rq.ifr_flags;
3505 struct ifflag_def *fp;
3506 int fnum;
3507
3508 any++;
3509 for (fp = ifflag_table; flags != 0 && fp; fp++)
3510 {
3511 if (flags & fp->flag_bit)
3512 {
3513 elt = Fcons (intern (fp->flag_sym), elt);
3514 flags -= fp->flag_bit;
3515 }
3516 }
3517 for (fnum = 0; flags && fnum < 32; fnum++)
3518 {
3519 if (flags & (1 << fnum))
3520 {
3521 elt = Fcons (make_number (fnum), elt);
3522 }
3523 }
3524 }
3525 #endif
3526 res = Fcons (elt, res);
3527
3528 elt = Qnil;
3529 #if defined(SIOCGIFHWADDR) && defined(HAVE_STRUCT_IFREQ_IFR_HWADDR)
3530 if (ioctl (s, SIOCGIFHWADDR, &rq) == 0)
3531 {
3532 Lisp_Object hwaddr = Fmake_vector (make_number (6), Qnil);
3533 register struct Lisp_Vector *p = XVECTOR (hwaddr);
3534 int n;
3535
3536 any++;
3537 for (n = 0; n < 6; n++)
3538 p->contents[n] = make_number (((unsigned char *)&rq.ifr_hwaddr.sa_data[0])[n]);
3539 elt = Fcons (make_number (rq.ifr_hwaddr.sa_family), hwaddr);
3540 }
3541 #endif
3542 res = Fcons (elt, res);
3543
3544 elt = Qnil;
3545 #if defined(SIOCGIFNETMASK) && defined(ifr_netmask)
3546 if (ioctl (s, SIOCGIFNETMASK, &rq) == 0)
3547 {
3548 any++;
3549 elt = conv_sockaddr_to_lisp (&rq.ifr_netmask, sizeof (rq.ifr_netmask));
3550 }
3551 #endif
3552 res = Fcons (elt, res);
3553
3554 elt = Qnil;
3555 #if defined(SIOCGIFBRDADDR) && defined(HAVE_STRUCT_IFREQ_IFR_BROADADDR)
3556 if (ioctl (s, SIOCGIFBRDADDR, &rq) == 0)
3557 {
3558 any++;
3559 elt = conv_sockaddr_to_lisp (&rq.ifr_broadaddr, sizeof (rq.ifr_broadaddr));
3560 }
3561 #endif
3562 res = Fcons (elt, res);
3563
3564 elt = Qnil;
3565 #if defined(SIOCGIFADDR) && defined(HAVE_STRUCT_IFREQ_IFR_ADDR)
3566 if (ioctl (s, SIOCGIFADDR, &rq) == 0)
3567 {
3568 any++;
3569 elt = conv_sockaddr_to_lisp (&rq.ifr_addr, sizeof (rq.ifr_addr));
3570 }
3571 #endif
3572 res = Fcons (elt, res);
3573
3574 close (s);
3575
3576 return any ? res : Qnil;
3577 }
3578 #endif
3579 #endif /* HAVE_SOCKETS */
3580
3581 void
3582 deactivate_process (proc)
3583 Lisp_Object proc;
3584 {
3585 register int inchannel, outchannel;
3586 register struct Lisp_Process *p = XPROCESS (proc);
3587
3588 inchannel = XINT (p->infd);
3589 outchannel = XINT (p->outfd);
3590
3591 if (inchannel >= 0)
3592 {
3593 /* Beware SIGCHLD hereabouts. */
3594 flush_pending_output (inchannel);
3595 #ifdef VMS
3596 {
3597 VMS_PROC_STUFF *get_vms_process_pointer (), *vs;
3598 sys$dassgn (outchannel);
3599 vs = get_vms_process_pointer (p->pid);
3600 if (vs)
3601 give_back_vms_process_stuff (vs);
3602 }
3603 #else
3604 emacs_close (inchannel);
3605 if (outchannel >= 0 && outchannel != inchannel)
3606 emacs_close (outchannel);
3607 #endif
3608
3609 XSETINT (p->infd, -1);
3610 XSETINT (p->outfd, -1);
3611 #ifdef DATAGRAM_SOCKETS
3612 if (DATAGRAM_CHAN_P (inchannel))
3613 {
3614 xfree (datagram_address[inchannel].sa);
3615 datagram_address[inchannel].sa = 0;
3616 datagram_address[inchannel].len = 0;
3617 }
3618 #endif
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))
3623 {
3624 FD_CLR (inchannel, &connect_wait_mask);
3625 if (--num_pending_connects < 0)
3626 abort ();
3627 }
3628 if (inchannel == max_process_desc)
3629 {
3630 int i;
3631 /* We just closed the highest-numbered process input descriptor,
3632 so recompute the highest-numbered one now. */
3633 max_process_desc = 0;
3634 for (i = 0; i < MAXDESC; i++)
3635 if (!NILP (chan_process[i]))
3636 max_process_desc = i;
3637 }
3638 }
3639 }
3640
3641 /* Close all descriptors currently in use for communication
3642 with subprocess. This is used in a newly-forked subprocess
3643 to get rid of irrelevant descriptors. */
3644
3645 void
3646 close_process_descs ()
3647 {
3648 #ifndef WINDOWSNT
3649 int i;
3650 for (i = 0; i < MAXDESC; i++)
3651 {
3652 Lisp_Object process;
3653 process = chan_process[i];
3654 if (!NILP (process))
3655 {
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);
3662 }
3663 }
3664 #endif
3665 }
3666 \f
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;
3679 {
3680 int seconds;
3681 int useconds;
3682
3683 if (! NILP (process))
3684 CHECK_PROCESS (process);
3685
3686 if (! NILP (timeout_msecs))
3687 {
3688 CHECK_NUMBER (timeout_msecs);
3689 useconds = XINT (timeout_msecs);
3690 if (!INTEGERP (timeout))
3691 XSETINT (timeout, 0);
3692
3693 {
3694 int carry = useconds / 1000000;
3695
3696 XSETINT (timeout, XINT (timeout) + carry);
3697 useconds -= carry * 1000000;
3698
3699 /* I think this clause is necessary because C doesn't
3700 guarantee a particular rounding direction for negative
3701 integers. */
3702 if (useconds < 0)
3703 {
3704 XSETINT (timeout, XINT (timeout) - 1);
3705 useconds += 1000000;
3706 }
3707 }
3708 }
3709 else
3710 useconds = 0;
3711
3712 if (! NILP (timeout))
3713 {
3714 CHECK_NUMBER (timeout);
3715 seconds = XINT (timeout);
3716 if (seconds < 0 || (seconds == 0 && useconds == 0))
3717 seconds = -1;
3718 }
3719 else
3720 seconds = NILP (process) ? -1 : 0;
3721
3722 if (NILP (process))
3723 XSETFASTINT (process, 0);
3724
3725 return
3726 (wait_reading_process_input (seconds, useconds, process, 0)
3727 ? Qt : Qnil);
3728 }
3729
3730 /* Accept a connection for server process SERVER on CHANNEL. */
3731
3732 static int connect_counter = 0;
3733
3734 static void
3735 server_accept_connection (server, channel)
3736 Lisp_Object server;
3737 int channel;
3738 {
3739 Lisp_Object proc, caller, name, buffer;
3740 Lisp_Object contact, host, service;
3741 struct Lisp_Process *ps= XPROCESS (server);
3742 struct Lisp_Process *p;
3743 int s;
3744 union u_sockaddr {
3745 struct sockaddr sa;
3746 struct sockaddr_in in;
3747 #ifdef HAVE_LOCAL_SOCKETS
3748 struct sockaddr_un un;
3749 #endif
3750 } saddr;
3751 int len = sizeof saddr;
3752
3753 s = accept (channel, &saddr.sa, &len);
3754
3755 if (s < 0)
3756 {
3757 int code = errno;
3758
3759 if (code == EAGAIN)
3760 return;
3761 #ifdef EWOULDBLOCK
3762 if (code == EWOULDBLOCK)
3763 return;
3764 #endif
3765
3766 if (!NILP (ps->log))
3767 call3 (ps->log, server, Qnil,
3768 concat3 (build_string ("accept failed with code"),
3769 Fnumber_to_string (make_number (code)),
3770 build_string ("\n")));
3771 return;
3772 }
3773
3774 connect_counter++;
3775
3776 /* Setup a new process to handle the connection. */
3777
3778 /* Generate a unique identification of the caller, and build contact
3779 information for this process. */
3780 host = Qt;
3781 service = Qnil;
3782 switch (saddr.sa.sa_family)
3783 {
3784 case AF_INET:
3785 {
3786 Lisp_Object args[5];
3787 unsigned char *ip = (unsigned char *)&saddr.in.sin_addr.s_addr;
3788 args[0] = build_string ("%d.%d.%d.%d");
3789 args[1] = make_number (*ip++);
3790 args[2] = make_number (*ip++);
3791 args[3] = make_number (*ip++);
3792 args[4] = make_number (*ip++);
3793 host = Fformat (5, args);
3794 service = make_number (ntohs (saddr.in.sin_port));
3795
3796 args[0] = build_string (" <%s:%d>");
3797 args[1] = host;
3798 args[2] = service;
3799 caller = Fformat (3, args);
3800 }
3801 break;
3802
3803 #ifdef HAVE_LOCAL_SOCKETS
3804 case AF_LOCAL:
3805 #endif
3806 default:
3807 caller = Fnumber_to_string (make_number (connect_counter));
3808 caller = concat3 (build_string (" <*"), caller, build_string ("*>"));
3809 break;
3810 }
3811
3812 /* Create a new buffer name for this process if it doesn't have a
3813 filter. The new buffer name is based on the buffer name or
3814 process name of the server process concatenated with the caller
3815 identification. */
3816
3817 if (!NILP (ps->filter) && !EQ (ps->filter, Qt))
3818 buffer = Qnil;
3819 else
3820 {
3821 buffer = ps->buffer;
3822 if (!NILP (buffer))
3823 buffer = Fbuffer_name (buffer);
3824 else
3825 buffer = ps->name;
3826 if (!NILP (buffer))
3827 {
3828 buffer = concat2 (buffer, caller);
3829 buffer = Fget_buffer_create (buffer);
3830 }
3831 }
3832
3833 /* Generate a unique name for the new server process. Combine the
3834 server process name with the caller identification. */
3835
3836 name = concat2 (ps->name, caller);
3837 proc = make_process (name);
3838
3839 chan_process[s] = proc;
3840
3841 #ifdef O_NONBLOCK
3842 fcntl (s, F_SETFL, O_NONBLOCK);
3843 #else
3844 #ifdef O_NDELAY
3845 fcntl (s, F_SETFL, O_NDELAY);
3846 #endif
3847 #endif
3848
3849 p = XPROCESS (proc);
3850
3851 /* Build new contact information for this setup. */
3852 contact = Fcopy_sequence (ps->childp);
3853 contact = Fplist_put (contact, QCserver, Qnil);
3854 contact = Fplist_put (contact, QChost, host);
3855 if (!NILP (service))
3856 contact = Fplist_put (contact, QCservice, service);
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
3865
3866 p->childp = contact;
3867 p->plist = Fcopy_sequence (ps->plist);
3868
3869 p->buffer = buffer;
3870 p->sentinel = ps->sentinel;
3871 p->filter = ps->filter;
3872 p->command = Qnil;
3873 p->pid = Qnil;
3874 XSETINT (p->infd, s);
3875 XSETINT (p->outfd, s);
3876 p->status = Qrun;
3877
3878 /* Client processes for accepted connections are not stopped initially. */
3879 if (!EQ (p->filter, Qt))
3880 {
3881 FD_SET (s, &input_wait_mask);
3882 FD_SET (s, &non_keyboard_wait_mask);
3883 }
3884
3885 if (s > max_process_desc)
3886 max_process_desc = s;
3887
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. */
3892
3893 p->decode_coding_system = ps->decode_coding_system;
3894 p->encode_coding_system = ps->encode_coding_system;
3895 setup_process_coding_systems (proc);
3896
3897 p->decoding_buf = make_uninit_string (0);
3898 p->decoding_carryover = make_number (0);
3899 p->encoding_buf = make_uninit_string (0);
3900 p->encoding_carryover = make_number (0);
3901
3902 p->inherit_coding_system_flag
3903 = (NILP (buffer) ? Qnil : ps->inherit_coding_system_flag);
3904
3905 if (!NILP (ps->log))
3906 call3 (ps->log, server, proc,
3907 concat3 (build_string ("accept from "),
3908 (STRINGP (host) ? host : build_string ("-")),
3909 build_string ("\n")));
3910
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")));
3916 }
3917
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;
3928
3929 /* This is here so breakpoints can be put on it. */
3930 static void
3931 wait_reading_process_input_1 ()
3932 {
3933 }
3934
3935 /* Read and dispose of subprocess output while waiting for timeout to
3936 elapse and/or keyboard input to be available.
3937
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.
3942
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.
3947
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.
3958
3959 DO_DISPLAY != 0 means redisplay should be done to show subprocess
3960 output that arrives.
3961
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. */
3966
3967 int
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;
3972 {
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;
3986
3987 FD_ZERO (&Available);
3988 FD_ZERO (&Connecting);
3989
3990 /* If read_kbd is a process to watch, set wait_proc and wait_channel
3991 accordingly. */
3992 if (PROCESSP (read_kbd))
3993 {
3994 wait_proc = XPROCESS (read_kbd);
3995 wait_channel = XINT (wait_proc->infd);
3996 XSETFASTINT (read_kbd, 0);
3997 }
3998
3999 /* If waiting for non-nil in a cell, record where. */
4000 if (CONSP (read_kbd))
4001 {
4002 wait_for_cell = read_kbd;
4003 XSETFASTINT (read_kbd, 0);
4004 }
4005
4006 waiting_for_user_input_p = XINT (read_kbd);
4007
4008 /* Since we may need to wait several times,
4009 compute the absolute time to return at. */
4010 if (time_limit || microsecs)
4011 {
4012 EMACS_GET_TIME (end_time);
4013 EMACS_SET_SECS_USECS (timeout, time_limit, microsecs);
4014 EMACS_ADD_TIME (end_time, end_time, timeout);
4015 }
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 */
4026
4027 while (1)
4028 {
4029 int timeout_reduced_for_timers = 0;
4030
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;
4036
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;
4040
4041 /* Compute time from now till when time limit is up */
4042 /* Exit if already run out */
4043 if (time_limit == -1)
4044 {
4045 /* -1 specified for timeout means
4046 gobble output available now
4047 but don't wait at all. */
4048
4049 EMACS_SET_SECS_USECS (timeout, 0, 0);
4050 }
4051 else if (time_limit || microsecs)
4052 {
4053 EMACS_GET_TIME (timeout);
4054 EMACS_SUB_TIME (timeout, end_time, timeout);
4055 if (EMACS_TIME_NEG_P (timeout))
4056 break;
4057 }
4058 else
4059 {
4060 EMACS_SET_SECS_USECS (timeout, 100000, 0);
4061 }
4062
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))
4068 {
4069 EMACS_TIME timer_delay;
4070
4071 do
4072 {
4073 int old_timers_run = timers_run;
4074 struct buffer *old_buffer = current_buffer;
4075
4076 timer_delay = timer_check (1);
4077
4078 /* If a timer has run, this might have changed buffers
4079 an alike. Make read_key_sequence aware of that. */
4080 if (timers_run != old_timers_run
4081 && old_buffer != current_buffer
4082 && waiting_for_user_input_p == -1)
4083 record_asynch_buffer_change ();
4084
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;
4091 }
4092 while (!detect_input_pending ());
4093
4094 /* If there is unread keyboard input, also return. */
4095 if (XINT (read_kbd) != 0
4096 && requeued_events_pending_p ())
4097 break;
4098
4099 if (! EMACS_TIME_NEG_P (timer_delay) && time_limit != -1)
4100 {
4101 EMACS_TIME difference;
4102 EMACS_SUB_TIME (difference, timer_delay, timeout);
4103 if (EMACS_TIME_NEG_P (difference))
4104 {
4105 timeout = timer_delay;
4106 timeout_reduced_for_timers = 1;
4107 }
4108 }
4109 /* If time_limit is -1, we are not going to wait at all. */
4110 else if (time_limit != -1)
4111 {
4112 /* This is so a breakpoint can be put here. */
4113 wait_reading_process_input_1 ();
4114 }
4115 }
4116
4117 /* Cause C-g and alarm signals to take immediate action,
4118 and cause input available signals to zero out timeout.
4119
4120 It is important that we do this before checking for process
4121 activity. If we get a SIGCHLD after the explicit checks for
4122 process activity, timeout is the only way we will know. */
4123 if (XINT (read_kbd) < 0)
4124 set_waiting_for_input (&timeout);
4125
4126 /* If status of something has changed, and no input is
4127 available, notify the user of the change right away. After
4128 this explicit check, we'll let the SIGCHLD handler zap
4129 timeout to get our attention. */
4130 if (update_tick != process_tick && do_display)
4131 {
4132 SELECT_TYPE Atemp, Ctemp;
4133
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))
4150 {
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 ();
4155 }
4156 }
4157
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))
4165 {
4166 int nread, total_nread = 0;
4167
4168 clear_waiting_for_input ();
4169 XSETPROCESS (proc, wait_proc);
4170
4171 /* Read data from the process, until we exhaust it. */
4172 while (XINT (wait_proc->infd) >= 0)
4173 {
4174 nread = read_process_output (proc, XINT (wait_proc->infd));
4175
4176 if (nread == 0)
4177 break;
4178
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
4193 }
4194 if (total_nread > 0 && do_display)
4195 redisplay_preserve_echo_area (10);
4196
4197 break;
4198 }
4199
4200 /* Wait till there is something to do */
4201
4202 if (!NILP (wait_for_cell))
4203 {
4204 Available = non_process_wait_mask;
4205 check_connect = 0;
4206 }
4207 else
4208 {
4209 if (! XINT (read_kbd))
4210 Available = non_keyboard_wait_mask;
4211 else
4212 Available = input_wait_mask;
4213 check_connect = (num_pending_connects > 0);
4214 }
4215
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)
4222 {
4223 clear_waiting_for_input ();
4224 redisplay_preserve_echo_area (11);
4225 if (XINT (read_kbd) < 0)
4226 set_waiting_for_input (&timeout);
4227 }
4228
4229 no_avail = 0;
4230 if (XINT (read_kbd) && detect_input_pending ())
4231 {
4232 nfds = 0;
4233 no_avail = 1;
4234 }
4235 else
4236 {
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);
4243 }
4244
4245 xerrno = errno;
4246
4247 /* Make C-g and alarm signals set flags again */
4248 clear_waiting_for_input ();
4249
4250 /* If we woke up due to SIGWINCH, actually change size now. */
4251 do_pending_window_change (0);
4252
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)
4257 {
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)
4276 {
4277 #ifdef AIX
4278 /* AIX doesn't handle PTY closure the same way BSD does. On AIX,
4279 the child's closure of the pts gives the parent a SIGHUP, and
4280 the ptc file descriptor is automatically closed,
4281 yielding EBADF here or at select() call above.
4282 So, SIGHUP is ignored (see def of PTY_TTY_NAME_SPRINTF
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
4289 }
4290 else
4291 error ("select error: %s", emacs_strerror (xerrno));
4292 }
4293
4294 if (no_avail)
4295 {
4296 FD_ZERO (&Available);
4297 check_connect = 0;
4298 }
4299
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.
4304
4305 David J. Mackenzie says that Emacs doesn't compile under
4306 Solaris if this code is enabled, thus the USG5_4 in the CPP
4307 conditional. "I haven't noticed any ill effects so far.
4308 If you find a Solaris expert somewhere, they might know
4309 better." */
4310 kill (getpid (), SIGIO);
4311 #endif
4312
4313 #if 0 /* When polling is used, interrupt_input is 0,
4314 so get_input_pending should read the input.
4315 So this should not be needed. */
4316 /* If we are using polling for input,
4317 and we see input available, make it get read now.
4318 Otherwise it might not actually get read for a second.
4319 And on hpux, since we turn off polling in wait_reading_process_input,
4320 it might never get read at all if we don't spend much time
4321 outside of wait_reading_process_input. */
4322 if (XINT (read_kbd) && interrupt_input
4323 && keyboard_bit_set (&Available)
4324 && input_polling_used ())
4325 kill (getpid (), SIGALRM);
4326 #endif
4327
4328 /* Check for keyboard input */
4329 /* If there is any, return immediately
4330 to give it higher priority than subprocesses */
4331
4332 if (XINT (read_kbd) != 0)
4333 {
4334 int old_timers_run = timers_run;
4335 struct buffer *old_buffer = current_buffer;
4336 int leave = 0;
4337
4338 if (detect_input_pending_run_timers (do_display))
4339 {
4340 swallow_events (do_display);
4341 if (detect_input_pending_run_timers (do_display))
4342 leave = 1;
4343 }
4344
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 ();
4351
4352 if (leave)
4353 break;
4354 }
4355
4356 /* If there is unread keyboard input, also return. */
4357 if (XINT (read_kbd) != 0
4358 && requeued_events_pending_p ())
4359 break;
4360
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.
4366
4367 (We used to do this only if wait_for_cell.) */
4368 if (XINT (read_kbd) == 0 && detect_input_pending ())
4369 {
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
4375 }
4376
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;
4380
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. */
4386
4387 if (XINT (read_kbd) && interrupt_input
4388 && keyboard_bit_set (&Available) && ! noninteractive)
4389 kill (getpid (), SIGIO);
4390 #endif
4391
4392 if (! wait_proc)
4393 got_some_input |= nfds > 0;
4394
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);
4399
4400 /* Check for data from a process. */
4401 if (no_avail || nfds == 0)
4402 continue;
4403
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++)
4407 {
4408 if (FD_ISSET (channel, &Available)
4409 && FD_ISSET (channel, &non_keyboard_wait_mask))
4410 {
4411 int nread;
4412
4413 /* If waiting for this channel, arrange to return as
4414 soon as no more input to be processed. No more
4415 waiting. */
4416 if (wait_channel == channel)
4417 {
4418 wait_channel = -1;
4419 time_limit = -1;
4420 got_some_input = 1;
4421 }
4422 proc = chan_process[channel];
4423 if (NILP (proc))
4424 continue;
4425
4426 /* If this is a server stream socket, accept connection. */
4427 if (EQ (XPROCESS (proc)->status, Qlisten))
4428 {
4429 server_accept_connection (proc, channel);
4430 continue;
4431 }
4432
4433 /* Read data from the process, starting with our
4434 buffered-ahead character if we have one. */
4435
4436 nread = read_process_output (proc, channel);
4437 if (nread > 0)
4438 {
4439 /* Since read_process_output can run a filter,
4440 which can call accept-process-output,
4441 don't try to read from any other processes
4442 before doing the select again. */
4443 FD_ZERO (&Available);
4444
4445 if (do_display)
4446 redisplay_preserve_echo_area (12);
4447 }
4448 #ifdef EWOULDBLOCK
4449 else if (nread == -1 && errno == EWOULDBLOCK)
4450 ;
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)
4456 ;
4457 #else
4458 #ifdef O_NDELAY
4459 else if (nread == -1 && errno == EAGAIN)
4460 ;
4461 /* Note that we cannot distinguish between no input
4462 available now and a closed pipe.
4463 With luck, a closed pipe will be accompanied by
4464 subprocess termination and SIGCHLD. */
4465 else if (nread == 0 && !NETCONN_P (proc))
4466 ;
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).
4477
4478 However, it has been known to happen that the SIGCHLD
4479 got lost. So raise the signl again just in case.
4480 It can't hurt. */
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))
4488 ;
4489 #endif
4490 else
4491 {
4492 /* Preserve status of processes already terminated. */
4493 XSETINT (XPROCESS (proc)->tick, ++process_tick);
4494 deactivate_process (proc);
4495 if (!NILP (XPROCESS (proc)->raw_status_low))
4496 update_status (XPROCESS (proc));
4497 if (EQ (XPROCESS (proc)->status, Qrun))
4498 XPROCESS (proc)->status
4499 = Fcons (Qexit, Fcons (make_number (256), Qnil));
4500 }
4501 }
4502 #ifdef NON_BLOCKING_CONNECT
4503 if (check_connect && FD_ISSET (channel, &Connecting))
4504 {
4505 struct Lisp_Process *p;
4506
4507 FD_CLR (channel, &connect_wait_mask);
4508 if (--num_pending_connects < 0)
4509 abort ();
4510
4511 proc = chan_process[channel];
4512 if (NILP (proc))
4513 continue;
4514
4515 p = XPROCESS (proc);
4516
4517 #ifdef GNU_LINUX
4518 /* getsockopt(,,SO_ERROR,,) is said to hang on some systems.
4519 So only use it on systems where it is known to work. */
4520 {
4521 int xlen = sizeof(xerrno);
4522 if (getsockopt(channel, SOL_SOCKET, SO_ERROR, &xerrno, &xlen))
4523 xerrno = errno;
4524 }
4525 #else
4526 {
4527 struct sockaddr pname;
4528 int pnamelen = sizeof(pname);
4529
4530 /* If connection failed, getpeername will fail. */
4531 xerrno = 0;
4532 if (getpeername(channel, &pname, &pnamelen) < 0)
4533 {
4534 /* Obtain connect failure code through error slippage. */
4535 char dummy;
4536 xerrno = errno;
4537 if (errno == ENOTCONN && read(channel, &dummy, 1) < 0)
4538 xerrno = errno;
4539 }
4540 }
4541 #endif
4542 if (xerrno)
4543 {
4544 XSETINT (p->tick, ++process_tick);
4545 p->status = Fcons (Qfailed, Fcons (make_number (xerrno), Qnil));
4546 deactivate_process (proc);
4547 }
4548 else
4549 {
4550 p->status = Qrun;
4551 /* Execute the sentinel here. If we had relied on
4552 status_notify to do it later, it will read input
4553 from the process before calling the sentinel. */
4554 exec_sentinel (proc, build_string ("open\n"));
4555 if (!EQ (p->filter, Qt) && !EQ (p->command, Qt))
4556 {
4557 FD_SET (XINT (p->infd), &input_wait_mask);
4558 FD_SET (XINT (p->infd), &non_keyboard_wait_mask);
4559 }
4560 }
4561 }
4562 #endif /* NON_BLOCKING_CONNECT */
4563 } /* end for each file descriptor */
4564 } /* end while exit conditions not met */
4565
4566 waiting_for_user_input_p = 0;
4567
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)
4572 {
4573 /* Prevent input_pending from remaining set if we quit. */
4574 clear_input_pending ();
4575 QUIT;
4576 }
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 */
4585
4586 return got_some_input;
4587 }
4588 \f
4589 /* Given a list (FUNCTION ARGS...), apply FUNCTION to the ARGS. */
4590
4591 static Lisp_Object
4592 read_process_output_call (fun_and_args)
4593 Lisp_Object fun_and_args;
4594 {
4595 return apply1 (XCAR (fun_and_args), XCDR (fun_and_args));
4596 }
4597
4598 static Lisp_Object
4599 read_process_output_error_handler (error)
4600 Lisp_Object error;
4601 {
4602 cmd_error_internal (error, "error in process filter: ");
4603 Vinhibit_quit = Qt;
4604 update_echo_area ();
4605 Fsleep_for (make_number (2), Qnil);
4606 return Qt;
4607 }
4608
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.
4612
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.
4616
4617 The characters read are decoded according to PROC's coding-system
4618 for decoding. */
4619
4620 int
4621 read_process_output (proc, channel)
4622 Lisp_Object proc;
4623 register int channel;
4624 {
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;
4634
4635 #ifdef VMS
4636 VMS_PROC_STUFF *vs, *get_vms_process_pointer();
4637
4638 vs = get_vms_process_pointer (p->pid);
4639 if (vs)
4640 {
4641 if (!vs->iosb[0])
4642 return (0); /* Really weird if it does this */
4643 if (!(vs->iosb[0] & 1))
4644 return -1; /* I/O error */
4645 }
4646 else
4647 error ("Could not get VMS process pointer");
4648 chars = vs->inputBuffer;
4649 nbytes = clean_vms_buffer (chars, vs->iosb[1]);
4650 if (nbytes <= 0)
4651 {
4652 start_vms_process_read (vs); /* Crank up the next read on the process */
4653 return 1; /* Nothing worth printing, say we got 1 */
4654 }
4655 if (carryover > 0)
4656 {
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);
4663 }
4664 #else /* not VMS */
4665
4666 #ifdef DATAGRAM_SOCKETS
4667 /* A datagram is one packet; allow at least 1500+ bytes of data
4668 corresponding to the typical Ethernet frame size. */
4669 if (DATAGRAM_CHAN_P (channel))
4670 {
4671 /* carryover = 0; */ /* Does carryover make sense for datagrams? */
4672 readmax += 1024;
4673 }
4674 #endif
4675
4676 chars = (char *) alloca (carryover + readmax);
4677 if (carryover)
4678 /* See the comment above. */
4679 bcopy (SDATA (p->decoding_buf), chars, carryover);
4680
4681 #ifdef DATAGRAM_SOCKETS
4682 /* We have a working select, so proc_buffered_char is always -1. */
4683 if (DATAGRAM_CHAN_P (channel))
4684 {
4685 int len = datagram_address[channel].len;
4686 nbytes = recvfrom (channel, chars + carryover, readmax - carryover,
4687 0, datagram_address[channel].sa, &len);
4688 }
4689 else
4690 #endif
4691 if (proc_buffered_char[channel] < 0)
4692 nbytes = emacs_read (channel, chars + carryover, readmax - carryover);
4693 else
4694 {
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;
4702 }
4703 #endif /* not VMS */
4704
4705 XSETINT (p->decoding_carryover, 0);
4706
4707 /* At this point, NBYTES holds number of bytes just received
4708 (including the one in proc_buffered_char[channel]). */
4709 if (nbytes <= 0)
4710 {
4711 if (nbytes < 0 || coding->mode & CODING_MODE_LAST_BLOCK)
4712 return nbytes;
4713 coding->mode |= CODING_MODE_LAST_BLOCK;
4714 }
4715
4716 /* Now set NBYTES how many bytes we must decode. */
4717 nbytes += carryover;
4718
4719 /* Read and dispose of the process output. */
4720 outstream = p->filter;
4721 if (!NILP (outstream))
4722 {
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;
4732
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;
4738
4739 specbind (Qinhibit_quit, Qt);
4740 specbind (Qlast_nonmenu_event, Qt);
4741
4742 /* In case we get recursively called,
4743 and we already saved the match data nonrecursively,
4744 save the same match data in safely recursive fashion. */
4745 if (outer_running_asynch_code)
4746 {
4747 Lisp_Object tem;
4748 /* Don't clobber the CURRENT match data, either! */
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);
4753 }
4754
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;
4758
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))
4764 {
4765 p->decode_coding_system = coding->symbol;
4766
4767 /* Don't call setup_coding_system for
4768 proc_decode_coding_system[channel] here. It is done in
4769 detect_coding called via decode_coding above. */
4770
4771 /* If a coding system for encoding is not yet decided, we set
4772 it as the same as coding-system for decoding.
4773
4774 But, before doing that we must check if
4775 proc_encode_coding_system[p->outfd] surely points to a
4776 valid memory because p->outfd will be changed once EOF is
4777 sent to the process. */
4778 if (NILP (p->encode_coding_system)
4779 && proc_encode_coding_system[XINT (p->outfd)])
4780 {
4781 p->encode_coding_system = coding->symbol;
4782 setup_coding_system (coding->symbol,
4783 proc_encode_coding_system[XINT (p->outfd)]);
4784 }
4785 }
4786
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);
4802
4803 /* If we saved the match data nonrecursively, restore it now. */
4804 restore_match_data ();
4805 running_asynch_code = outer_running_asynch_code;
4806
4807 /* Handling the process output should not deactivate the mark. */
4808 Vdeactivate_mark = odeactivate;
4809
4810 /* Restore waiting_for_user_input_p as it was
4811 when we were called, in case the filter clobbered it. */
4812 waiting_for_user_input_p = waiting;
4813
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 ();
4825
4826 #ifdef VMS
4827 start_vms_process_read (vs);
4828 #endif
4829 unbind_to (count, Qnil);
4830 return nbytes;
4831 }
4832
4833 /* If no filter, write into buffer if it isn't dead. */
4834 if (!NILP (p->buffer) && !NILP (XBUFFER (p->buffer)->name))
4835 {
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;
4844
4845 odeactivate = Vdeactivate_mark;
4846
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;
4855
4856 current_buffer->read_only = Qnil;
4857
4858 /* Insert new output into buffer
4859 at the current end-of-output marker,
4860 thus preserving logical ordering of input and output. */
4861 if (XMARKER (p->mark)->buffer)
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;
4869
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 ();
4874
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))
4881 {
4882 p->decode_coding_system = coding->symbol;
4883 if (NILP (p->encode_coding_system)
4884 && proc_encode_coding_system[XINT (p->outfd)])
4885 {
4886 p->encode_coding_system = coding->symbol;
4887 setup_coding_system (coding->symbol,
4888 proc_encode_coding_system[XINT (p->outfd)]);
4889 }
4890 }
4891 carryover = nbytes - coding->consumed;
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);
4905
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);
4914
4915 update_mode_lines++;
4916
4917 /* Make sure opoint and the old restrictions
4918 float ahead of any new text just as point would. */
4919 if (opoint >= before)
4920 {
4921 opoint += PT - before;
4922 opoint_byte += PT_BYTE - before_byte;
4923 }
4924 if (old_begv > before)
4925 {
4926 old_begv += PT - before;
4927 old_begv_byte += PT_BYTE - before_byte;
4928 }
4929 if (old_zv >= before)
4930 {
4931 old_zv += PT - before;
4932 old_zv_byte += PT_BYTE - before_byte;
4933 }
4934
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));
4938
4939 /* Handling the process output should not deactivate the mark. */
4940 Vdeactivate_mark = odeactivate;
4941
4942 current_buffer->read_only = old_read_only;
4943 SET_PT_BOTH (opoint, opoint_byte);
4944 set_buffer_internal (old);
4945 }
4946 #ifdef VMS
4947 start_vms_process_read (vs);
4948 #endif
4949 return nbytes;
4950 }
4951
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. */)
4956 ()
4957 {
4958 return (waiting_for_user_input_p ? Qt : Qnil);
4959 }
4960 \f
4961 /* Sending data to subprocess */
4962
4963 jmp_buf send_process_frame;
4964 Lisp_Object process_sent_to;
4965
4966 SIGTYPE
4967 send_process_trap ()
4968 {
4969 #ifdef BSD4_1
4970 sigrelse (SIGPIPE);
4971 sigrelse (SIGALRM);
4972 #endif /* BSD4_1 */
4973 longjmp (send_process_frame, 1);
4974 }
4975
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.
4980
4981 If OBJECT is not nil, the data is encoded by PROC's coding-system
4982 for encoding before it is sent.
4983
4984 This function can evaluate Lisp code and can garbage collect. */
4985
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;
4992 {
4993 /* Use volatile to protect variables from being clobbered by longjmp. */
4994 int rv;
4995 struct coding_system *coding;
4996 struct gcpro gcpro1;
4997
4998 GCPRO1 (object);
4999
5000 #ifdef VMS
5001 struct Lisp_Process *p = XPROCESS (proc);
5002 VMS_PROC_STUFF *vs, *get_vms_process_pointer();
5003 #endif /* VMS */
5004
5005 if (! NILP (XPROCESS (proc)->raw_status_low))
5006 update_status (XPROCESS (proc));
5007 if (! EQ (XPROCESS (proc)->status, Qrun))
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));
5013
5014 coding = proc_encode_coding_system[XINT (XPROCESS (proc)->outfd)];
5015 Vlast_coding_system_used = coding->symbol;
5016
5017 if ((STRINGP (object) && STRING_MULTIBYTE (object))
5018 || (BUFFERP (object)
5019 && !NILP (XBUFFER (object)->enable_multibyte_characters))
5020 || EQ (object, Qt))
5021 {
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;
5033 }
5034 else
5035 {
5036 /* For sending a unibyte text, character code conversion should
5037 not take place but EOL conversion should. So, setup raw-text
5038 or one of the subsidiary if we have not yet done it. */
5039 if (coding->type != coding_type_raw_text)
5040 {
5041 if (CODING_REQUIRE_FLUSHING (coding))
5042 {
5043 /* But, before changing the coding, we must flush out data. */
5044 coding->mode |= CODING_MODE_LAST_BLOCK;
5045 send_process (proc, "", 0, Qt);
5046 }
5047 coding->src_multibyte = 0;
5048 setup_raw_text_coding_system (coding);
5049 }
5050 }
5051 coding->dst_multibyte = 0;
5052
5053 if (CODING_REQUIRE_ENCODING (coding))
5054 {
5055 int require = encoding_buffer_size (coding, len);
5056 int from_byte = -1, from = -1, to = -1;
5057 unsigned char *temp_buf = NULL;
5058
5059 if (BUFFERP (object))
5060 {
5061 from_byte = BUF_PTR_BYTE_POS (XBUFFER (object), buf);
5062 from = buf_bytepos_to_charpos (XBUFFER (object), from_byte);
5063 to = buf_bytepos_to_charpos (XBUFFER (object), from_byte + len);
5064 }
5065 else if (STRINGP (object))
5066 {
5067 from_byte = buf - SDATA (object);
5068 from = string_byte_to_char (object, from_byte);
5069 to = string_byte_to_char (object, from_byte + len);
5070 }
5071
5072 if (coding->composing != COMPOSITION_DISABLED)
5073 {
5074 if (from_byte >= 0)
5075 coding_save_composition (coding, from, to, object);
5076 else
5077 coding->composing = COMPOSITION_DISABLED;
5078 }
5079
5080 if (SBYTES (XPROCESS (proc)->encoding_buf) < require)
5081 XPROCESS (proc)->encoding_buf = make_uninit_string (require);
5082
5083 if (from_byte >= 0)
5084 buf = (BUFFERP (object)
5085 ? BUF_BYTE_ADDRESS (XBUFFER (object), from_byte)
5086 : SDATA (object) + from_byte);
5087
5088 object = XPROCESS (proc)->encoding_buf;
5089 encode_coding (coding, (char *) buf, SDATA (object),
5090 len, SBYTES (object));
5091 len = coding->produced;
5092 buf = SDATA (object);
5093 if (temp_buf)
5094 xfree (temp_buf);
5095 }
5096
5097 #ifdef VMS
5098 vs = get_vms_process_pointer (p->pid);
5099 if (vs == 0)
5100 error ("Could not find this process: %x", p->pid);
5101 else if (write_to_vms_process (vs, buf, len))
5102 ;
5103 #else /* not VMS */
5104
5105 if (pty_max_bytes == 0)
5106 {
5107 #if defined (HAVE_FPATHCONF) && defined (_PC_MAX_CANON)
5108 pty_max_bytes = fpathconf (XFASTINT (XPROCESS (proc)->outfd),
5109 _PC_MAX_CANON);
5110 if (pty_max_bytes < 0)
5111 pty_max_bytes = 250;
5112 #else
5113 pty_max_bytes = 250;
5114 #endif
5115 /* Deduct one, to leave space for the eof. */
5116 pty_max_bytes--;
5117 }
5118
5119 /* 2000-09-21: Emacs 20.7, sparc-sun-solaris-2.6, GCC 2.95.2,
5120 CFLAGS="-g -O": The value of the parameter `proc' is clobbered
5121 when returning with longjmp despite being declared volatile. */
5122 if (!setjmp (send_process_frame))
5123 {
5124 process_sent_to = proc;
5125 while (len > 0)
5126 {
5127 int this = len;
5128 SIGTYPE (*old_sigpipe)();
5129
5130 /* Decide how much data we can send in one batch.
5131 Long lines need to be split into multiple batches. */
5132 if (!NILP (XPROCESS (proc)->pty_flag))
5133 {
5134 /* Starting this at zero is always correct when not the first
5135 iteration because the previous iteration ended by sending C-d.
5136 It may not be correct for the first iteration
5137 if a partial line was sent in a separate send_process call.
5138 If that proves worth handling, we need to save linepos
5139 in the process object. */
5140 int linepos = 0;
5141 unsigned char *ptr = (unsigned char *) buf;
5142 unsigned char *end = (unsigned char *) buf + len;
5143
5144 /* Scan through this text for a line that is too long. */
5145 while (ptr != end && linepos < pty_max_bytes)
5146 {
5147 if (*ptr == '\n')
5148 linepos = 0;
5149 else
5150 linepos++;
5151 ptr++;
5152 }
5153 /* If we found one, break the line there
5154 and put in a C-d to force the buffer through. */
5155 this = ptr - buf;
5156 }
5157
5158 /* Send this batch, using one or more write calls. */
5159 while (this > 0)
5160 {
5161 int outfd = XINT (XPROCESS (proc)->outfd);
5162 old_sigpipe = (SIGTYPE (*) ()) signal (SIGPIPE, send_process_trap);
5163 #ifdef DATAGRAM_SOCKETS
5164 if (DATAGRAM_CHAN_P (outfd))
5165 {
5166 rv = sendto (outfd, (char *) buf, this,
5167 0, datagram_address[outfd].sa,
5168 datagram_address[outfd].len);
5169 if (rv < 0 && errno == EMSGSIZE)
5170 report_file_error ("sending datagram", Fcons (proc, Qnil));
5171 }
5172 else
5173 #endif
5174 rv = emacs_write (outfd, (char *) buf, this);
5175 signal (SIGPIPE, old_sigpipe);
5176
5177 if (rv < 0)
5178 {
5179 if (0
5180 #ifdef EWOULDBLOCK
5181 || errno == EWOULDBLOCK
5182 #endif
5183 #ifdef EAGAIN
5184 || errno == EAGAIN
5185 #endif
5186 )
5187 /* Buffer is full. Wait, accepting input;
5188 that may allow the program
5189 to finish doing output and read more. */
5190 {
5191 Lisp_Object zero;
5192 int offset = 0;
5193
5194 #ifdef BROKEN_PTY_READ_AFTER_EAGAIN
5195 /* A gross hack to work around a bug in FreeBSD.
5196 In the following sequence, read(2) returns
5197 bogus data:
5198
5199 write(2) 1022 bytes
5200 write(2) 954 bytes, get EAGAIN
5201 read(2) 1024 bytes in process_read_output
5202 read(2) 11 bytes in process_read_output
5203
5204 That is, read(2) returns more bytes than have
5205 ever been written successfully. The 1033 bytes
5206 read are the 1022 bytes written successfully
5207 after processing (for example with CRs added if
5208 the terminal is set up that way which it is
5209 here). The same bytes will be seen again in a
5210 later read(2), without the CRs. */
5211
5212 if (errno == EAGAIN)
5213 {
5214 int flags = FWRITE;
5215 ioctl (XINT (XPROCESS (proc)->outfd), TIOCFLUSH,
5216 &flags);
5217 }
5218 #endif /* BROKEN_PTY_READ_AFTER_EAGAIN */
5219
5220 /* Running filters might relocate buffers or strings.
5221 Arrange to relocate BUF. */
5222 if (BUFFERP (object))
5223 offset = BUF_PTR_BYTE_POS (XBUFFER (object), buf);
5224 else if (STRINGP (object))
5225 offset = buf - SDATA (object);
5226
5227 XSETFASTINT (zero, 0);
5228 #ifdef EMACS_HAS_USECS
5229 wait_reading_process_input (0, 20000, zero, 0);
5230 #else
5231 wait_reading_process_input (1, 0, zero, 0);
5232 #endif
5233
5234 if (BUFFERP (object))
5235 buf = BUF_BYTE_ADDRESS (XBUFFER (object), offset);
5236 else if (STRINGP (object))
5237 buf = offset + SDATA (object);
5238
5239 rv = 0;
5240 }
5241 else
5242 /* This is a real error. */
5243 report_file_error ("writing to process", Fcons (proc, Qnil));
5244 }
5245 buf += rv;
5246 len -= rv;
5247 this -= rv;
5248 }
5249
5250 /* If we sent just part of the string, put in an EOF
5251 to force it through, before we send the rest. */
5252 if (len > 0)
5253 Fprocess_send_eof (proc);
5254 }
5255 }
5256 #endif /* not VMS */
5257 else
5258 {
5259 #ifndef VMS
5260 proc = process_sent_to;
5261 #endif
5262 XPROCESS (proc)->raw_status_low = Qnil;
5263 XPROCESS (proc)->raw_status_high = Qnil;
5264 XPROCESS (proc)->status = Fcons (Qexit, Fcons (make_number (256), Qnil));
5265 XSETINT (XPROCESS (proc)->tick, ++process_tick);
5266 deactivate_process (proc);
5267 #ifdef VMS
5268 error ("Error writing to process %s; closed it",
5269 SDATA (XPROCESS (proc)->name));
5270 #else
5271 error ("SIGPIPE raised on process %s; closed it",
5272 SDATA (XPROCESS (proc)->name));
5273 #endif
5274 }
5275
5276 UNGCPRO;
5277 }
5278
5279 DEFUN ("process-send-region", Fprocess_send_region, Sprocess_send_region,
5280 3, 3, 0,
5281 doc: /* Send current contents of region as input to PROCESS.
5282 PROCESS may be a process, a buffer, the name of a process or buffer, or
5283 nil, indicating the current buffer's process.
5284 Called from program, takes three arguments, PROCESS, START and END.
5285 If the region is more than 500 characters long,
5286 it is sent in several bunches. This may happen even for shorter regions.
5287 Output from processes can arrive in between bunches. */)
5288 (process, start, end)
5289 Lisp_Object process, start, end;
5290 {
5291 Lisp_Object proc;
5292 int start1, end1;
5293
5294 proc = get_process (process);
5295 validate_region (&start, &end);
5296
5297 if (XINT (start) < GPT && XINT (end) > GPT)
5298 move_gap (XINT (start));
5299
5300 start1 = CHAR_TO_BYTE (XINT (start));
5301 end1 = CHAR_TO_BYTE (XINT (end));
5302 send_process (proc, BYTE_POS_ADDR (start1), end1 - start1,
5303 Fcurrent_buffer ());
5304
5305 return Qnil;
5306 }
5307
5308 DEFUN ("process-send-string", Fprocess_send_string, Sprocess_send_string,
5309 2, 2, 0,
5310 doc: /* Send PROCESS the contents of STRING as input.
5311 PROCESS may be a process, a buffer, the name of a process or buffer, or
5312 nil, indicating the current buffer's process.
5313 If STRING is more than 500 characters long,
5314 it is sent in several bunches. This may happen even for shorter strings.
5315 Output from processes can arrive in between bunches. */)
5316 (process, string)
5317 Lisp_Object process, string;
5318 {
5319 Lisp_Object proc;
5320 CHECK_STRING (string);
5321 proc = get_process (process);
5322 send_process (proc, SDATA (string),
5323 SBYTES (string), string);
5324 return Qnil;
5325 }
5326 \f
5327 /* Return the foreground process group for the tty/pty that
5328 the process P uses. */
5329 static int
5330 emacs_get_tty_pgrp (p)
5331 struct Lisp_Process *p;
5332 {
5333 int gid = -1;
5334
5335 #ifdef TIOCGPGRP
5336 if (ioctl (XINT (p->infd), TIOCGPGRP, &gid) == -1 && ! NILP (p->tty_name))
5337 {
5338 int fd;
5339 /* Some OS:es (Solaris 8/9) does not allow TIOCGPGRP from the
5340 master side. Try the slave side. */
5341 fd = emacs_open (XSTRING (p->tty_name)->data, O_RDONLY, 0);
5342
5343 if (fd != -1)
5344 {
5345 ioctl (fd, TIOCGPGRP, &gid);
5346 emacs_close (fd);
5347 }
5348 }
5349 #endif /* defined (TIOCGPGRP ) */
5350
5351 return gid;
5352 }
5353
5354 DEFUN ("process-running-child-p", Fprocess_running_child_p,
5355 Sprocess_running_child_p, 0, 1, 0,
5356 doc: /* Return t if PROCESS has given the terminal to a child.
5357 If the operating system does not make it possible to find out,
5358 return t unconditionally. */)
5359 (process)
5360 Lisp_Object process;
5361 {
5362 /* Initialize in case ioctl doesn't exist or gives an error,
5363 in a way that will cause returning t. */
5364 int gid;
5365 Lisp_Object proc;
5366 struct Lisp_Process *p;
5367
5368 proc = get_process (process);
5369 p = XPROCESS (proc);
5370
5371 if (!EQ (p->childp, Qt))
5372 error ("Process %s is not a subprocess",
5373 SDATA (p->name));
5374 if (XINT (p->infd) < 0)
5375 error ("Process %s is not active",
5376 SDATA (p->name));
5377
5378 gid = emacs_get_tty_pgrp (p);
5379
5380 if (gid == XFASTINT (p->pid))
5381 return Qnil;
5382 return Qt;
5383 }
5384 \f
5385 /* send a signal number SIGNO to PROCESS.
5386 If CURRENT_GROUP is t, that means send to the process group
5387 that currently owns the terminal being used to communicate with PROCESS.
5388 This is used for various commands in shell mode.
5389 If CURRENT_GROUP is lambda, that means send to the process group
5390 that currently owns the terminal, but only if it is NOT the shell itself.
5391
5392 If NOMSG is zero, insert signal-announcements into process's buffers
5393 right away.
5394
5395 If we can, we try to signal PROCESS by sending control characters
5396 down the pty. This allows us to signal inferiors who have changed
5397 their uid, for which killpg would return an EPERM error. */
5398
5399 static void
5400 process_send_signal (process, signo, current_group, nomsg)
5401 Lisp_Object process;
5402 int signo;
5403 Lisp_Object current_group;
5404 int nomsg;
5405 {
5406 Lisp_Object proc;
5407 register struct Lisp_Process *p;
5408 int gid;
5409 int no_pgrp = 0;
5410
5411 proc = get_process (process);
5412 p = XPROCESS (proc);
5413
5414 if (!EQ (p->childp, Qt))
5415 error ("Process %s is not a subprocess",
5416 SDATA (p->name));
5417 if (XINT (p->infd) < 0)
5418 error ("Process %s is not active",
5419 SDATA (p->name));
5420
5421 if (NILP (p->pty_flag))
5422 current_group = Qnil;
5423
5424 /* If we are using pgrps, get a pgrp number and make it negative. */
5425 if (NILP (current_group))
5426 /* Send the signal to the shell's process group. */
5427 gid = XFASTINT (p->pid);
5428 else
5429 {
5430 #ifdef SIGNALS_VIA_CHARACTERS
5431 /* If possible, send signals to the entire pgrp
5432 by sending an input character to it. */
5433
5434 /* TERMIOS is the latest and bestest, and seems most likely to
5435 work. If the system has it, use it. */
5436 #ifdef HAVE_TERMIOS
5437 struct termios t;
5438
5439 switch (signo)
5440 {
5441 case SIGINT:
5442 tcgetattr (XINT (p->infd), &t);
5443 send_process (proc, &t.c_cc[VINTR], 1, Qnil);
5444 return;
5445
5446 case SIGQUIT:
5447 tcgetattr (XINT (p->infd), &t);
5448 send_process (proc, &t.c_cc[VQUIT], 1, Qnil);
5449 return;
5450
5451 case SIGTSTP:
5452 tcgetattr (XINT (p->infd), &t);
5453 #if defined (VSWTCH) && !defined (PREFER_VSUSP)
5454 send_process (proc, &t.c_cc[VSWTCH], 1, Qnil);
5455 #else
5456 send_process (proc, &t.c_cc[VSUSP], 1, Qnil);
5457 #endif
5458 return;
5459 }
5460
5461 #else /* ! HAVE_TERMIOS */
5462
5463 /* On Berkeley descendants, the following IOCTL's retrieve the
5464 current control characters. */
5465 #if defined (TIOCGLTC) && defined (TIOCGETC)
5466
5467 struct tchars c;
5468 struct ltchars lc;
5469
5470 switch (signo)
5471 {
5472 case SIGINT:
5473 ioctl (XINT (p->infd), TIOCGETC, &c);
5474 send_process (proc, &c.t_intrc, 1, Qnil);
5475 return;
5476 case SIGQUIT:
5477 ioctl (XINT (p->infd), TIOCGETC, &c);
5478 send_process (proc, &c.t_quitc, 1, Qnil);
5479 return;
5480 #ifdef SIGTSTP
5481 case SIGTSTP:
5482 ioctl (XINT (p->infd), TIOCGLTC, &lc);
5483 send_process (proc, &lc.t_suspc, 1, Qnil);
5484 return;
5485 #endif /* ! defined (SIGTSTP) */
5486 }
5487
5488 #else /* ! defined (TIOCGLTC) && defined (TIOCGETC) */
5489
5490 /* On SYSV descendants, the TCGETA ioctl retrieves the current control
5491 characters. */
5492 #ifdef TCGETA
5493 struct termio t;
5494 switch (signo)
5495 {
5496 case SIGINT:
5497 ioctl (XINT (p->infd), TCGETA, &t);
5498 send_process (proc, &t.c_cc[VINTR], 1, Qnil);
5499 return;
5500 case SIGQUIT:
5501 ioctl (XINT (p->infd), TCGETA, &t);
5502 send_process (proc, &t.c_cc[VQUIT], 1, Qnil);
5503 return;
5504 #ifdef SIGTSTP
5505 case SIGTSTP:
5506 ioctl (XINT (p->infd), TCGETA, &t);
5507 send_process (proc, &t.c_cc[VSWTCH], 1, Qnil);
5508 return;
5509 #endif /* ! defined (SIGTSTP) */
5510 }
5511 #else /* ! defined (TCGETA) */
5512 Your configuration files are messed up.
5513 /* If your system configuration files define SIGNALS_VIA_CHARACTERS,
5514 you'd better be using one of the alternatives above! */
5515 #endif /* ! defined (TCGETA) */
5516 #endif /* ! defined (TIOCGLTC) && defined (TIOCGETC) */
5517 #endif /* ! defined HAVE_TERMIOS */
5518 abort ();
5519 /* The code above always returns from the function. */
5520 #endif /* defined (SIGNALS_VIA_CHARACTERS) */
5521
5522 #ifdef TIOCGPGRP
5523 /* Get the current pgrp using the tty itself, if we have that.
5524 Otherwise, use the pty to get the pgrp.
5525 On pfa systems, saka@pfu.fujitsu.co.JP writes:
5526 "TIOCGPGRP symbol defined in sys/ioctl.h at E50.
5527 But, TIOCGPGRP does not work on E50 ;-P works fine on E60"
5528 His patch indicates that if TIOCGPGRP returns an error, then
5529 we should just assume that p->pid is also the process group id. */
5530
5531 gid = emacs_get_tty_pgrp (p);
5532
5533 if (gid == -1)
5534 /* If we can't get the information, assume
5535 the shell owns the tty. */
5536 gid = XFASTINT (p->pid);
5537
5538 /* It is not clear whether anything really can set GID to -1.
5539 Perhaps on some system one of those ioctls can or could do so.
5540 Or perhaps this is vestigial. */
5541 if (gid == -1)
5542 no_pgrp = 1;
5543 #else /* ! defined (TIOCGPGRP ) */
5544 /* Can't select pgrps on this system, so we know that
5545 the child itself heads the pgrp. */
5546 gid = XFASTINT (p->pid);
5547 #endif /* ! defined (TIOCGPGRP ) */
5548
5549 /* If current_group is lambda, and the shell owns the terminal,
5550 don't send any signal. */
5551 if (EQ (current_group, Qlambda) && gid == XFASTINT (p->pid))
5552 return;
5553 }
5554
5555 switch (signo)
5556 {
5557 #ifdef SIGCONT
5558 case SIGCONT:
5559 p->raw_status_low = Qnil;
5560 p->raw_status_high = Qnil;
5561 p->status = Qrun;
5562 XSETINT (p->tick, ++process_tick);
5563 if (!nomsg)
5564 status_notify ();
5565 break;
5566 #endif /* ! defined (SIGCONT) */
5567 case SIGINT:
5568 #ifdef VMS
5569 send_process (proc, "\003", 1, Qnil); /* ^C */
5570 goto whoosh;
5571 #endif
5572 case SIGQUIT:
5573 #ifdef VMS
5574 send_process (proc, "\031", 1, Qnil); /* ^Y */
5575 goto whoosh;
5576 #endif
5577 case SIGKILL:
5578 #ifdef VMS
5579 sys$forcex (&(XFASTINT (p->pid)), 0, 1);
5580 whoosh:
5581 #endif
5582 flush_pending_output (XINT (p->infd));
5583 break;
5584 }
5585
5586 /* If we don't have process groups, send the signal to the immediate
5587 subprocess. That isn't really right, but it's better than any
5588 obvious alternative. */
5589 if (no_pgrp)
5590 {
5591 kill (XFASTINT (p->pid), signo);
5592 return;
5593 }
5594
5595 /* gid may be a pid, or minus a pgrp's number */
5596 #ifdef TIOCSIGSEND
5597 if (!NILP (current_group))
5598 {
5599 if (ioctl (XINT (p->infd), TIOCSIGSEND, signo) == -1)
5600 EMACS_KILLPG (gid, signo);
5601 }
5602 else
5603 {
5604 gid = - XFASTINT (p->pid);
5605 kill (gid, signo);
5606 }
5607 #else /* ! defined (TIOCSIGSEND) */
5608 EMACS_KILLPG (gid, signo);
5609 #endif /* ! defined (TIOCSIGSEND) */
5610 }
5611
5612 DEFUN ("interrupt-process", Finterrupt_process, Sinterrupt_process, 0, 2, 0,
5613 doc: /* Interrupt process PROCESS.
5614 PROCESS may be a process, a buffer, or the name of a process or buffer.
5615 nil or no arg means current buffer's process.
5616 Second arg CURRENT-GROUP non-nil means send signal to
5617 the current process-group of the process's controlling terminal
5618 rather than to the process's own process group.
5619 If the process is a shell, this means interrupt current subjob
5620 rather than the shell.
5621
5622 If CURRENT-GROUP is `lambda', and if the shell owns the terminal,
5623 don't send the signal. */)
5624 (process, current_group)
5625 Lisp_Object process, current_group;
5626 {
5627 process_send_signal (process, SIGINT, current_group, 0);
5628 return process;
5629 }
5630
5631 DEFUN ("kill-process", Fkill_process, Skill_process, 0, 2, 0,
5632 doc: /* Kill process PROCESS. May be process or name of one.
5633 See function `interrupt-process' for more details on usage. */)
5634 (process, current_group)
5635 Lisp_Object process, current_group;
5636 {
5637 process_send_signal (process, SIGKILL, current_group, 0);
5638 return process;
5639 }
5640
5641 DEFUN ("quit-process", Fquit_process, Squit_process, 0, 2, 0,
5642 doc: /* Send QUIT signal to process PROCESS. May be process or name of one.
5643 See function `interrupt-process' for more details on usage. */)
5644 (process, current_group)
5645 Lisp_Object process, current_group;
5646 {
5647 process_send_signal (process, SIGQUIT, current_group, 0);
5648 return process;
5649 }
5650
5651 DEFUN ("stop-process", Fstop_process, Sstop_process, 0, 2, 0,
5652 doc: /* Stop process PROCESS. May be process or name of one.
5653 See function `interrupt-process' for more details on usage.
5654 If PROCESS is a network process, inhibit handling of incoming traffic. */)
5655 (process, current_group)
5656 Lisp_Object process, current_group;
5657 {
5658 #ifdef HAVE_SOCKETS
5659 if (PROCESSP (process) && NETCONN_P (process))
5660 {
5661 struct Lisp_Process *p;
5662
5663 p = XPROCESS (process);
5664 if (NILP (p->command)
5665 && XINT (p->infd) >= 0)
5666 {
5667 FD_CLR (XINT (p->infd), &input_wait_mask);
5668 FD_CLR (XINT (p->infd), &non_keyboard_wait_mask);
5669 }
5670 p->command = Qt;
5671 return process;
5672 }
5673 #endif
5674 #ifndef SIGTSTP
5675 error ("no SIGTSTP support");
5676 #else
5677 process_send_signal (process, SIGTSTP, current_group, 0);
5678 #endif
5679 return process;
5680 }
5681
5682 DEFUN ("continue-process", Fcontinue_process, Scontinue_process, 0, 2, 0,
5683 doc: /* Continue process PROCESS. May be process or name of one.
5684 See function `interrupt-process' for more details on usage.
5685 If PROCESS is a network process, resume handling of incoming traffic. */)
5686 (process, current_group)
5687 Lisp_Object process, current_group;
5688 {
5689 #ifdef HAVE_SOCKETS
5690 if (PROCESSP (process) && NETCONN_P (process))
5691 {
5692 struct Lisp_Process *p;
5693
5694 p = XPROCESS (process);
5695 if (EQ (p->command, Qt)
5696 && XINT (p->infd) >= 0
5697 && (!EQ (p->filter, Qt) || EQ (p->status, Qlisten)))
5698 {
5699 FD_SET (XINT (p->infd), &input_wait_mask);
5700 FD_SET (XINT (p->infd), &non_keyboard_wait_mask);
5701 }
5702 p->command = Qnil;
5703 return process;
5704 }
5705 #endif
5706 #ifdef SIGCONT
5707 process_send_signal (process, SIGCONT, current_group, 0);
5708 #else
5709 error ("no SIGCONT support");
5710 #endif
5711 return process;
5712 }
5713
5714 DEFUN ("signal-process", Fsignal_process, Ssignal_process,
5715 2, 2, "sProcess (name or number): \nnSignal code: ",
5716 doc: /* Send PROCESS the signal with code SIGCODE.
5717 PROCESS may also be an integer specifying the process id of the
5718 process to signal; in this case, the process need not be a child of
5719 this Emacs.
5720 SIGCODE may be an integer, or a symbol whose name is a signal name. */)
5721 (process, sigcode)
5722 Lisp_Object process, sigcode;
5723 {
5724 Lisp_Object pid;
5725
5726 if (INTEGERP (process))
5727 {
5728 pid = process;
5729 goto got_it;
5730 }
5731
5732 if (STRINGP (process))
5733 {
5734 Lisp_Object tem;
5735 if (tem = Fget_process (process), NILP (tem))
5736 {
5737 pid = Fstring_to_number (process, make_number (10));
5738 if (XINT (pid) != 0)
5739 goto got_it;
5740 }
5741 process = tem;
5742 }
5743 else
5744 process = get_process (process);
5745
5746 if (NILP (process))
5747 return process;
5748
5749 CHECK_PROCESS (process);
5750 pid = XPROCESS (process)->pid;
5751 if (!INTEGERP (pid) || XINT (pid) <= 0)
5752 error ("Cannot signal process %s", SDATA (XPROCESS (process)->name));
5753
5754 got_it:
5755
5756 #define handle_signal(NAME, VALUE) \
5757 else if (!strcmp (name, NAME)) \
5758 XSETINT (sigcode, VALUE)
5759
5760 if (INTEGERP (sigcode))
5761 ;
5762 else
5763 {
5764 unsigned char *name;
5765
5766 CHECK_SYMBOL (sigcode);
5767 name = SDATA (SYMBOL_NAME (sigcode));
5768
5769 if (0)
5770 ;
5771 #ifdef SIGHUP
5772 handle_signal ("SIGHUP", SIGHUP);
5773 #endif
5774 #ifdef SIGINT
5775 handle_signal ("SIGINT", SIGINT);
5776 #endif
5777 #ifdef SIGQUIT
5778 handle_signal ("SIGQUIT", SIGQUIT);
5779 #endif
5780 #ifdef SIGILL
5781 handle_signal ("SIGILL", SIGILL);
5782 #endif
5783 #ifdef SIGABRT
5784 handle_signal ("SIGABRT", SIGABRT);
5785 #endif
5786 #ifdef SIGEMT
5787 handle_signal ("SIGEMT", SIGEMT);
5788 #endif
5789 #ifdef SIGKILL
5790 handle_signal ("SIGKILL", SIGKILL);
5791 #endif
5792 #ifdef SIGFPE
5793 handle_signal ("SIGFPE", SIGFPE);
5794 #endif
5795 #ifdef SIGBUS
5796 handle_signal ("SIGBUS", SIGBUS);
5797 #endif
5798 #ifdef SIGSEGV
5799 handle_signal ("SIGSEGV", SIGSEGV);
5800 #endif
5801 #ifdef SIGSYS
5802 handle_signal ("SIGSYS", SIGSYS);
5803 #endif
5804 #ifdef SIGPIPE
5805 handle_signal ("SIGPIPE", SIGPIPE);
5806 #endif
5807 #ifdef SIGALRM
5808 handle_signal ("SIGALRM", SIGALRM);
5809 #endif
5810 #ifdef SIGTERM
5811 handle_signal ("SIGTERM", SIGTERM);
5812 #endif
5813 #ifdef SIGURG
5814 handle_signal ("SIGURG", SIGURG);
5815 #endif
5816 #ifdef SIGSTOP
5817 handle_signal ("SIGSTOP", SIGSTOP);
5818 #endif
5819 #ifdef SIGTSTP
5820 handle_signal ("SIGTSTP", SIGTSTP);
5821 #endif
5822 #ifdef SIGCONT
5823 handle_signal ("SIGCONT", SIGCONT);
5824 #endif
5825 #ifdef SIGCHLD
5826 handle_signal ("SIGCHLD", SIGCHLD);
5827 #endif
5828 #ifdef SIGTTIN
5829 handle_signal ("SIGTTIN", SIGTTIN);
5830 #endif
5831 #ifdef SIGTTOU
5832 handle_signal ("SIGTTOU", SIGTTOU);
5833 #endif
5834 #ifdef SIGIO
5835 handle_signal ("SIGIO", SIGIO);
5836 #endif
5837 #ifdef SIGXCPU
5838 handle_signal ("SIGXCPU", SIGXCPU);
5839 #endif
5840 #ifdef SIGXFSZ
5841 handle_signal ("SIGXFSZ", SIGXFSZ);
5842 #endif
5843 #ifdef SIGVTALRM
5844 handle_signal ("SIGVTALRM", SIGVTALRM);
5845 #endif
5846 #ifdef SIGPROF
5847 handle_signal ("SIGPROF", SIGPROF);
5848 #endif
5849 #ifdef SIGWINCH
5850 handle_signal ("SIGWINCH", SIGWINCH);
5851 #endif
5852 #ifdef SIGINFO
5853 handle_signal ("SIGINFO", SIGINFO);
5854 #endif
5855 #ifdef SIGUSR1
5856 handle_signal ("SIGUSR1", SIGUSR1);
5857 #endif
5858 #ifdef SIGUSR2
5859 handle_signal ("SIGUSR2", SIGUSR2);
5860 #endif
5861 else
5862 error ("Undefined signal name %s", name);
5863 }
5864
5865 #undef handle_signal
5866
5867 return make_number (kill (XINT (pid), XINT (sigcode)));
5868 }
5869
5870 DEFUN ("process-send-eof", Fprocess_send_eof, Sprocess_send_eof, 0, 1, 0,
5871 doc: /* Make PROCESS see end-of-file in its input.
5872 EOF comes after any text already sent to it.
5873 PROCESS may be a process, a buffer, the name of a process or buffer, or
5874 nil, indicating the current buffer's process.
5875 If PROCESS is a network connection, or is a process communicating
5876 through a pipe (as opposed to a pty), then you cannot send any more
5877 text to PROCESS after you call this function. */)
5878 (process)
5879 Lisp_Object process;
5880 {
5881 Lisp_Object proc;
5882 struct coding_system *coding;
5883
5884 if (DATAGRAM_CONN_P (process))
5885 return process;
5886
5887 proc = get_process (process);
5888 coding = proc_encode_coding_system[XINT (XPROCESS (proc)->outfd)];
5889
5890 /* Make sure the process is really alive. */
5891 if (! NILP (XPROCESS (proc)->raw_status_low))
5892 update_status (XPROCESS (proc));
5893 if (! EQ (XPROCESS (proc)->status, Qrun))
5894 error ("Process %s not running", SDATA (XPROCESS (proc)->name));
5895
5896 if (CODING_REQUIRE_FLUSHING (coding))
5897 {
5898 coding->mode |= CODING_MODE_LAST_BLOCK;
5899 send_process (proc, "", 0, Qnil);
5900 }
5901
5902 #ifdef VMS
5903 send_process (proc, "\032", 1, Qnil); /* ^z */
5904 #else
5905 if (!NILP (XPROCESS (proc)->pty_flag))
5906 send_process (proc, "\004", 1, Qnil);
5907 else
5908 {
5909 int old_outfd, new_outfd;
5910
5911 #ifdef HAVE_SHUTDOWN
5912 /* If this is a network connection, or socketpair is used
5913 for communication with the subprocess, call shutdown to cause EOF.
5914 (In some old system, shutdown to socketpair doesn't work.
5915 Then we just can't win.) */
5916 if (NILP (XPROCESS (proc)->pid)
5917 || XINT (XPROCESS (proc)->outfd) == XINT (XPROCESS (proc)->infd))
5918 shutdown (XINT (XPROCESS (proc)->outfd), 1);
5919 /* In case of socketpair, outfd == infd, so don't close it. */
5920 if (XINT (XPROCESS (proc)->outfd) != XINT (XPROCESS (proc)->infd))
5921 emacs_close (XINT (XPROCESS (proc)->outfd));
5922 #else /* not HAVE_SHUTDOWN */
5923 emacs_close (XINT (XPROCESS (proc)->outfd));
5924 #endif /* not HAVE_SHUTDOWN */
5925 new_outfd = emacs_open (NULL_DEVICE, O_WRONLY, 0);
5926 old_outfd = XINT (XPROCESS (proc)->outfd);
5927
5928 if (!proc_encode_coding_system[new_outfd])
5929 proc_encode_coding_system[new_outfd]
5930 = (struct coding_system *) xmalloc (sizeof (struct coding_system));
5931 bcopy (proc_encode_coding_system[old_outfd],
5932 proc_encode_coding_system[new_outfd],
5933 sizeof (struct coding_system));
5934 bzero (proc_encode_coding_system[old_outfd],
5935 sizeof (struct coding_system));
5936
5937 XSETINT (XPROCESS (proc)->outfd, new_outfd);
5938 }
5939 #endif /* VMS */
5940 return process;
5941 }
5942
5943 /* Kill all processes associated with `buffer'.
5944 If `buffer' is nil, kill all processes */
5945
5946 void
5947 kill_buffer_processes (buffer)
5948 Lisp_Object buffer;
5949 {
5950 Lisp_Object tail, proc;
5951
5952 for (tail = Vprocess_alist; GC_CONSP (tail); tail = XCDR (tail))
5953 {
5954 proc = XCDR (XCAR (tail));
5955 if (GC_PROCESSP (proc)
5956 && (NILP (buffer) || EQ (XPROCESS (proc)->buffer, buffer)))
5957 {
5958 if (NETCONN_P (proc))
5959 Fdelete_process (proc);
5960 else if (XINT (XPROCESS (proc)->infd) >= 0)
5961 process_send_signal (proc, SIGHUP, Qnil, 1);
5962 }
5963 }
5964 }
5965 \f
5966 /* On receipt of a signal that a child status has changed, loop asking
5967 about children with changed statuses until the system says there
5968 are no more.
5969
5970 All we do is change the status; we do not run sentinels or print
5971 notifications. That is saved for the next time keyboard input is
5972 done, in order to avoid timing errors.
5973
5974 ** WARNING: this can be called during garbage collection.
5975 Therefore, it must not be fooled by the presence of mark bits in
5976 Lisp objects.
5977
5978 ** USG WARNING: Although it is not obvious from the documentation
5979 in signal(2), on a USG system the SIGCLD handler MUST NOT call
5980 signal() before executing at least one wait(), otherwise the
5981 handler will be called again, resulting in an infinite loop. The
5982 relevant portion of the documentation reads "SIGCLD signals will be
5983 queued and the signal-catching function will be continually
5984 reentered until the queue is empty". Invoking signal() causes the
5985 kernel to reexamine the SIGCLD queue. Fred Fish, UniSoft Systems
5986 Inc. */
5987
5988 SIGTYPE
5989 sigchld_handler (signo)
5990 int signo;
5991 {
5992 int old_errno = errno;
5993 Lisp_Object proc;
5994 register struct Lisp_Process *p;
5995 extern EMACS_TIME *input_available_clear_time;
5996
5997 #ifdef BSD4_1
5998 extern int sigheld;
5999 sigheld |= sigbit (SIGCHLD);
6000 #endif
6001
6002 while (1)
6003 {
6004 register int pid;
6005 WAITTYPE w;
6006 Lisp_Object tail;
6007
6008 #ifdef WNOHANG
6009 #ifndef WUNTRACED
6010 #define WUNTRACED 0
6011 #endif /* no WUNTRACED */
6012 /* Keep trying to get a status until we get a definitive result. */
6013 do
6014 {
6015 errno = 0;
6016 pid = wait3 (&w, WNOHANG | WUNTRACED, 0);
6017 }
6018 while (pid < 0 && errno == EINTR);
6019
6020 if (pid <= 0)
6021 {
6022 /* PID == 0 means no processes found, PID == -1 means a real
6023 failure. We have done all our job, so return. */
6024
6025 /* USG systems forget handlers when they are used;
6026 must reestablish each time */
6027 #if defined (USG) && !defined (POSIX_SIGNALS)
6028 signal (signo, sigchld_handler); /* WARNING - must come after wait3() */
6029 #endif
6030 #ifdef BSD4_1
6031 sigheld &= ~sigbit (SIGCHLD);
6032 sigrelse (SIGCHLD);
6033 #endif
6034 errno = old_errno;
6035 return;
6036 }
6037 #else
6038 pid = wait (&w);
6039 #endif /* no WNOHANG */
6040
6041 /* Find the process that signaled us, and record its status. */
6042
6043 p = 0;
6044 for (tail = Vprocess_alist; GC_CONSP (tail); tail = XCDR (tail))
6045 {
6046 proc = XCDR (XCAR (tail));
6047 p = XPROCESS (proc);
6048 if (GC_EQ (p->childp, Qt) && XINT (p->pid) == pid)
6049 break;
6050 p = 0;
6051 }
6052
6053 /* Look for an asynchronous process whose pid hasn't been filled
6054 in yet. */
6055 if (p == 0)
6056 for (tail = Vprocess_alist; GC_CONSP (tail); tail = XCDR (tail))
6057 {
6058 proc = XCDR (XCAR (tail));
6059 p = XPROCESS (proc);
6060 if (GC_INTEGERP (p->pid) && XINT (p->pid) == -1)
6061 break;
6062 p = 0;
6063 }
6064
6065 /* Change the status of the process that was found. */
6066 if (p != 0)
6067 {
6068 union { int i; WAITTYPE wt; } u;
6069 int clear_desc_flag = 0;
6070
6071 XSETINT (p->tick, ++process_tick);
6072 u.wt = w;
6073 XSETINT (p->raw_status_low, u.i & 0xffff);
6074 XSETINT (p->raw_status_high, u.i >> 16);
6075
6076 /* If process has terminated, stop waiting for its output. */
6077 if ((WIFSIGNALED (w) || WIFEXITED (w))
6078 && XINT (p->infd) >= 0)
6079 clear_desc_flag = 1;
6080
6081 /* We use clear_desc_flag to avoid a compiler bug in Microsoft C. */
6082 if (clear_desc_flag)
6083 {
6084 FD_CLR (XINT (p->infd), &input_wait_mask);
6085 FD_CLR (XINT (p->infd), &non_keyboard_wait_mask);
6086 }
6087
6088 /* Tell wait_reading_process_input that it needs to wake up and
6089 look around. */
6090 if (input_available_clear_time)
6091 EMACS_SET_SECS_USECS (*input_available_clear_time, 0, 0);
6092 }
6093
6094 /* There was no asynchronous process found for that id. Check
6095 if we have a synchronous process. */
6096 else
6097 {
6098 synch_process_alive = 0;
6099
6100 /* Report the status of the synchronous process. */
6101 if (WIFEXITED (w))
6102 synch_process_retcode = WRETCODE (w);
6103 else if (WIFSIGNALED (w))
6104 {
6105 int code = WTERMSIG (w);
6106 char *signame;
6107
6108 synchronize_system_messages_locale ();
6109 signame = strsignal (code);
6110
6111 if (signame == 0)
6112 signame = "unknown";
6113
6114 synch_process_death = signame;
6115 }
6116
6117 /* Tell wait_reading_process_input that it needs to wake up and
6118 look around. */
6119 if (input_available_clear_time)
6120 EMACS_SET_SECS_USECS (*input_available_clear_time, 0, 0);
6121 }
6122
6123 /* On some systems, we must return right away.
6124 If any more processes want to signal us, we will
6125 get another signal.
6126 Otherwise (on systems that have WNOHANG), loop around
6127 to use up all the processes that have something to tell us. */
6128 #if (defined WINDOWSNT \
6129 || (defined USG && !defined GNU_LINUX \
6130 && !(defined HPUX && defined WNOHANG)))
6131 #if defined (USG) && ! defined (POSIX_SIGNALS)
6132 signal (signo, sigchld_handler);
6133 #endif
6134 errno = old_errno;
6135 return;
6136 #endif /* USG, but not HPUX with WNOHANG */
6137 }
6138 }
6139 \f
6140
6141 static Lisp_Object
6142 exec_sentinel_unwind (data)
6143 Lisp_Object data;
6144 {
6145 XPROCESS (XCAR (data))->sentinel = XCDR (data);
6146 return Qnil;
6147 }
6148
6149 static Lisp_Object
6150 exec_sentinel_error_handler (error)
6151 Lisp_Object error;
6152 {
6153 cmd_error_internal (error, "error in process sentinel: ");
6154 Vinhibit_quit = Qt;
6155 update_echo_area ();
6156 Fsleep_for (make_number (2), Qnil);
6157 return Qt;
6158 }
6159
6160 static void
6161 exec_sentinel (proc, reason)
6162 Lisp_Object proc, reason;
6163 {
6164 Lisp_Object sentinel, obuffer, odeactivate, okeymap;
6165 register struct Lisp_Process *p = XPROCESS (proc);
6166 int count = SPECPDL_INDEX ();
6167 int outer_running_asynch_code = running_asynch_code;
6168 int waiting = waiting_for_user_input_p;
6169
6170 /* No need to gcpro these, because all we do with them later
6171 is test them for EQness, and none of them should be a string. */
6172 odeactivate = Vdeactivate_mark;
6173 XSETBUFFER (obuffer, current_buffer);
6174 okeymap = current_buffer->keymap;
6175
6176 sentinel = p->sentinel;
6177 if (NILP (sentinel))
6178 return;
6179
6180 /* Zilch the sentinel while it's running, to avoid recursive invocations;
6181 assure that it gets restored no matter how the sentinel exits. */
6182 p->sentinel = Qnil;
6183 record_unwind_protect (exec_sentinel_unwind, Fcons (proc, sentinel));
6184 /* Inhibit quit so that random quits don't screw up a running filter. */
6185 specbind (Qinhibit_quit, Qt);
6186 specbind (Qlast_nonmenu_event, Qt);
6187
6188 /* In case we get recursively called,
6189 and we already saved the match data nonrecursively,
6190 save the same match data in safely recursive fashion. */
6191 if (outer_running_asynch_code)
6192 {
6193 Lisp_Object tem;
6194 tem = Fmatch_data (Qnil, Qnil);
6195 restore_match_data ();
6196 record_unwind_protect (Fset_match_data, Fmatch_data (Qnil, Qnil));
6197 Fset_match_data (tem);
6198 }
6199
6200 /* For speed, if a search happens within this code,
6201 save the match data in a special nonrecursive fashion. */
6202 running_asynch_code = 1;
6203
6204 internal_condition_case_1 (read_process_output_call,
6205 Fcons (sentinel,
6206 Fcons (proc, Fcons (reason, Qnil))),
6207 !NILP (Vdebug_on_error) ? Qnil : Qerror,
6208 exec_sentinel_error_handler);
6209
6210 /* If we saved the match data nonrecursively, restore it now. */
6211 restore_match_data ();
6212 running_asynch_code = outer_running_asynch_code;
6213
6214 Vdeactivate_mark = odeactivate;
6215
6216 /* Restore waiting_for_user_input_p as it was
6217 when we were called, in case the filter clobbered it. */
6218 waiting_for_user_input_p = waiting;
6219
6220 #if 0
6221 if (! EQ (Fcurrent_buffer (), obuffer)
6222 || ! EQ (current_buffer->keymap, okeymap))
6223 #endif
6224 /* But do it only if the caller is actually going to read events.
6225 Otherwise there's no need to make him wake up, and it could
6226 cause trouble (for example it would make Fsit_for return). */
6227 if (waiting_for_user_input_p == -1)
6228 record_asynch_buffer_change ();
6229
6230 unbind_to (count, Qnil);
6231 }
6232
6233 /* Report all recent events of a change in process status
6234 (either run the sentinel or output a message).
6235 This is usually done while Emacs is waiting for keyboard input
6236 but can be done at other times. */
6237
6238 void
6239 status_notify ()
6240 {
6241 register Lisp_Object proc, buffer;
6242 Lisp_Object tail, msg;
6243 struct gcpro gcpro1, gcpro2;
6244
6245 tail = Qnil;
6246 msg = Qnil;
6247 /* We need to gcpro tail; if read_process_output calls a filter
6248 which deletes a process and removes the cons to which tail points
6249 from Vprocess_alist, and then causes a GC, tail is an unprotected
6250 reference. */
6251 GCPRO2 (tail, msg);
6252
6253 /* Set this now, so that if new processes are created by sentinels
6254 that we run, we get called again to handle their status changes. */
6255 update_tick = process_tick;
6256
6257 for (tail = Vprocess_alist; !NILP (tail); tail = Fcdr (tail))
6258 {
6259 Lisp_Object symbol;
6260 register struct Lisp_Process *p;
6261
6262 proc = Fcdr (Fcar (tail));
6263 p = XPROCESS (proc);
6264
6265 if (XINT (p->tick) != XINT (p->update_tick))
6266 {
6267 XSETINT (p->update_tick, XINT (p->tick));
6268
6269 /* If process is still active, read any output that remains. */
6270 while (! EQ (p->filter, Qt)
6271 && ! EQ (p->status, Qconnect)
6272 && ! EQ (p->status, Qlisten)
6273 && ! EQ (p->command, Qt) /* Network process not stopped. */
6274 && XINT (p->infd) >= 0
6275 && read_process_output (proc, XINT (p->infd)) > 0);
6276
6277 buffer = p->buffer;
6278
6279 /* Get the text to use for the message. */
6280 if (!NILP (p->raw_status_low))
6281 update_status (p);
6282 msg = status_message (p->status);
6283
6284 /* If process is terminated, deactivate it or delete it. */
6285 symbol = p->status;
6286 if (CONSP (p->status))
6287 symbol = XCAR (p->status);
6288
6289 if (EQ (symbol, Qsignal) || EQ (symbol, Qexit)
6290 || EQ (symbol, Qclosed))
6291 {
6292 if (delete_exited_processes)
6293 remove_process (proc);
6294 else
6295 deactivate_process (proc);
6296 }
6297
6298 /* The actions above may have further incremented p->tick.
6299 So set p->update_tick again
6300 so that an error in the sentinel will not cause
6301 this code to be run again. */
6302 XSETINT (p->update_tick, XINT (p->tick));
6303 /* Now output the message suitably. */
6304 if (!NILP (p->sentinel))
6305 exec_sentinel (proc, msg);
6306 /* Don't bother with a message in the buffer
6307 when a process becomes runnable. */
6308 else if (!EQ (symbol, Qrun) && !NILP (buffer))
6309 {
6310 Lisp_Object ro, tem;
6311 struct buffer *old = current_buffer;
6312 int opoint, opoint_byte;
6313 int before, before_byte;
6314
6315 ro = XBUFFER (buffer)->read_only;
6316
6317 /* Avoid error if buffer is deleted
6318 (probably that's why the process is dead, too) */
6319 if (NILP (XBUFFER (buffer)->name))
6320 continue;
6321 Fset_buffer (buffer);
6322
6323 opoint = PT;
6324 opoint_byte = PT_BYTE;
6325 /* Insert new output into buffer
6326 at the current end-of-output marker,
6327 thus preserving logical ordering of input and output. */
6328 if (XMARKER (p->mark)->buffer)
6329 Fgoto_char (p->mark);
6330 else
6331 SET_PT_BOTH (ZV, ZV_BYTE);
6332
6333 before = PT;
6334 before_byte = PT_BYTE;
6335
6336 tem = current_buffer->read_only;
6337 current_buffer->read_only = Qnil;
6338 insert_string ("\nProcess ");
6339 Finsert (1, &p->name);
6340 insert_string (" ");
6341 Finsert (1, &msg);
6342 current_buffer->read_only = tem;
6343 set_marker_both (p->mark, p->buffer, PT, PT_BYTE);
6344
6345 if (opoint >= before)
6346 SET_PT_BOTH (opoint + (PT - before),
6347 opoint_byte + (PT_BYTE - before_byte));
6348 else
6349 SET_PT_BOTH (opoint, opoint_byte);
6350
6351 set_buffer_internal (old);
6352 }
6353 }
6354 } /* end for */
6355
6356 update_mode_lines++; /* in case buffers use %s in mode-line-format */
6357 redisplay_preserve_echo_area (13);
6358
6359 UNGCPRO;
6360 }
6361
6362 \f
6363 DEFUN ("set-process-coding-system", Fset_process_coding_system,
6364 Sset_process_coding_system, 1, 3, 0,
6365 doc: /* Set coding systems of PROCESS to DECODING and ENCODING.
6366 DECODING will be used to decode subprocess output and ENCODING to
6367 encode subprocess input. */)
6368 (proc, decoding, encoding)
6369 register Lisp_Object proc, decoding, encoding;
6370 {
6371 register struct Lisp_Process *p;
6372
6373 CHECK_PROCESS (proc);
6374 p = XPROCESS (proc);
6375 if (XINT (p->infd) < 0)
6376 error ("Input file descriptor of %s closed", SDATA (p->name));
6377 if (XINT (p->outfd) < 0)
6378 error ("Output file descriptor of %s closed", SDATA (p->name));
6379 Fcheck_coding_system (decoding);
6380 Fcheck_coding_system (encoding);
6381
6382 p->decode_coding_system = decoding;
6383 p->encode_coding_system = encoding;
6384 setup_process_coding_systems (proc);
6385
6386 return Qnil;
6387 }
6388
6389 DEFUN ("process-coding-system",
6390 Fprocess_coding_system, Sprocess_coding_system, 1, 1, 0,
6391 doc: /* Return a cons of coding systems for decoding and encoding of PROCESS. */)
6392 (proc)
6393 register Lisp_Object proc;
6394 {
6395 CHECK_PROCESS (proc);
6396 return Fcons (XPROCESS (proc)->decode_coding_system,
6397 XPROCESS (proc)->encode_coding_system);
6398 }
6399
6400 DEFUN ("set-process-filter-multibyte", Fset_process_filter_multibyte,
6401 Sset_process_filter_multibyte, 2, 2, 0,
6402 doc: /* Set multibyteness of the strings given to PROCESS's filter.
6403 If FLAG is non-nil, the filter is given multibyte strings.
6404 If FLAG is nil, the filter is given unibyte strings. In this case,
6405 all character code conversion except for end-of-line conversion is
6406 suppressed. */)
6407 (proc, flag)
6408 Lisp_Object proc, flag;
6409 {
6410 register struct Lisp_Process *p;
6411
6412 CHECK_PROCESS (proc);
6413 p = XPROCESS (proc);
6414 p->filter_multibyte = flag;
6415 setup_process_coding_systems (proc);
6416
6417 return Qnil;
6418 }
6419
6420 DEFUN ("process-filter-multibyte-p", Fprocess_filter_multibyte_p,
6421 Sprocess_filter_multibyte_p, 1, 1, 0,
6422 doc: /* Return t if a multibyte string is given to PROCESS's filter.*/)
6423 (proc)
6424 Lisp_Object proc;
6425 {
6426 register struct Lisp_Process *p;
6427
6428 CHECK_PROCESS (proc);
6429 p = XPROCESS (proc);
6430
6431 return (NILP (p->filter_multibyte) ? Qnil : Qt);
6432 }
6433
6434
6435 \f
6436 /* The first time this is called, assume keyboard input comes from DESC
6437 instead of from where we used to expect it.
6438 Subsequent calls mean assume input keyboard can come from DESC
6439 in addition to other places. */
6440
6441 static int add_keyboard_wait_descriptor_called_flag;
6442
6443 void
6444 add_keyboard_wait_descriptor (desc)
6445 int desc;
6446 {
6447 if (! add_keyboard_wait_descriptor_called_flag)
6448 FD_CLR (0, &input_wait_mask);
6449 add_keyboard_wait_descriptor_called_flag = 1;
6450 FD_SET (desc, &input_wait_mask);
6451 FD_SET (desc, &non_process_wait_mask);
6452 if (desc > max_keyboard_desc)
6453 max_keyboard_desc = desc;
6454 }
6455
6456 /* From now on, do not expect DESC to give keyboard input. */
6457
6458 void
6459 delete_keyboard_wait_descriptor (desc)
6460 int desc;
6461 {
6462 int fd;
6463 int lim = max_keyboard_desc;
6464
6465 FD_CLR (desc, &input_wait_mask);
6466 FD_CLR (desc, &non_process_wait_mask);
6467
6468 if (desc == max_keyboard_desc)
6469 for (fd = 0; fd < lim; fd++)
6470 if (FD_ISSET (fd, &input_wait_mask)
6471 && !FD_ISSET (fd, &non_keyboard_wait_mask))
6472 max_keyboard_desc = fd;
6473 }
6474
6475 /* Return nonzero if *MASK has a bit set
6476 that corresponds to one of the keyboard input descriptors. */
6477
6478 int
6479 keyboard_bit_set (mask)
6480 SELECT_TYPE *mask;
6481 {
6482 int fd;
6483
6484 for (fd = 0; fd <= max_keyboard_desc; fd++)
6485 if (FD_ISSET (fd, mask) && FD_ISSET (fd, &input_wait_mask)
6486 && !FD_ISSET (fd, &non_keyboard_wait_mask))
6487 return 1;
6488
6489 return 0;
6490 }
6491 \f
6492 void
6493 init_process ()
6494 {
6495 register int i;
6496
6497 #ifdef SIGCHLD
6498 #ifndef CANNOT_DUMP
6499 if (! noninteractive || initialized)
6500 #endif
6501 signal (SIGCHLD, sigchld_handler);
6502 #endif
6503
6504 FD_ZERO (&input_wait_mask);
6505 FD_ZERO (&non_keyboard_wait_mask);
6506 FD_ZERO (&non_process_wait_mask);
6507 max_process_desc = 0;
6508
6509 FD_SET (0, &input_wait_mask);
6510
6511 Vprocess_alist = Qnil;
6512 for (i = 0; i < MAXDESC; i++)
6513 {
6514 chan_process[i] = Qnil;
6515 proc_buffered_char[i] = -1;
6516 }
6517 bzero (proc_decode_coding_system, sizeof proc_decode_coding_system);
6518 bzero (proc_encode_coding_system, sizeof proc_encode_coding_system);
6519 #ifdef DATAGRAM_SOCKETS
6520 bzero (datagram_address, sizeof datagram_address);
6521 #endif
6522
6523 #ifdef HAVE_SOCKETS
6524 {
6525 Lisp_Object subfeatures = Qnil;
6526 struct socket_options *sopt;
6527
6528 #define ADD_SUBFEATURE(key, val) \
6529 subfeatures = Fcons (Fcons (key, Fcons (val, Qnil)), subfeatures)
6530
6531 #ifdef NON_BLOCKING_CONNECT
6532 ADD_SUBFEATURE (QCnowait, Qt);
6533 #endif
6534 #ifdef DATAGRAM_SOCKETS
6535 ADD_SUBFEATURE (QCtype, Qdatagram);
6536 #endif
6537 #ifdef HAVE_LOCAL_SOCKETS
6538 ADD_SUBFEATURE (QCfamily, Qlocal);
6539 #endif
6540 #ifdef HAVE_GETSOCKNAME
6541 ADD_SUBFEATURE (QCservice, Qt);
6542 #endif
6543 #if !defined(TERM) && (defined(O_NONBLOCK) || defined(O_NDELAY))
6544 ADD_SUBFEATURE (QCserver, Qt);
6545 #endif
6546
6547 for (sopt = socket_options; sopt->name; sopt++)
6548 subfeatures = Fcons (intern (sopt->name), subfeatures);
6549
6550 Fprovide (intern ("make-network-process"), subfeatures);
6551 }
6552 #endif /* HAVE_SOCKETS */
6553 }
6554
6555 void
6556 syms_of_process ()
6557 {
6558 Qprocessp = intern ("processp");
6559 staticpro (&Qprocessp);
6560 Qrun = intern ("run");
6561 staticpro (&Qrun);
6562 Qstop = intern ("stop");
6563 staticpro (&Qstop);
6564 Qsignal = intern ("signal");
6565 staticpro (&Qsignal);
6566
6567 /* Qexit is already staticpro'd by syms_of_eval; don't staticpro it
6568 here again.
6569
6570 Qexit = intern ("exit");
6571 staticpro (&Qexit); */
6572
6573 Qopen = intern ("open");
6574 staticpro (&Qopen);
6575 Qclosed = intern ("closed");
6576 staticpro (&Qclosed);
6577 Qconnect = intern ("connect");
6578 staticpro (&Qconnect);
6579 Qfailed = intern ("failed");
6580 staticpro (&Qfailed);
6581 Qlisten = intern ("listen");
6582 staticpro (&Qlisten);
6583 Qlocal = intern ("local");
6584 staticpro (&Qlocal);
6585 Qdatagram = intern ("datagram");
6586 staticpro (&Qdatagram);
6587
6588 QCname = intern (":name");
6589 staticpro (&QCname);
6590 QCbuffer = intern (":buffer");
6591 staticpro (&QCbuffer);
6592 QChost = intern (":host");
6593 staticpro (&QChost);
6594 QCservice = intern (":service");
6595 staticpro (&QCservice);
6596 QCtype = intern (":type");
6597 staticpro (&QCtype);
6598 QClocal = intern (":local");
6599 staticpro (&QClocal);
6600 QCremote = intern (":remote");
6601 staticpro (&QCremote);
6602 QCcoding = intern (":coding");
6603 staticpro (&QCcoding);
6604 QCserver = intern (":server");
6605 staticpro (&QCserver);
6606 QCnowait = intern (":nowait");
6607 staticpro (&QCnowait);
6608 QCsentinel = intern (":sentinel");
6609 staticpro (&QCsentinel);
6610 QClog = intern (":log");
6611 staticpro (&QClog);
6612 QCnoquery = intern (":noquery");
6613 staticpro (&QCnoquery);
6614 QCstop = intern (":stop");
6615 staticpro (&QCstop);
6616 QCoptions = intern (":options");
6617 staticpro (&QCoptions);
6618 QCplist = intern (":plist");
6619 staticpro (&QCplist);
6620 QCfilter_multibyte = intern (":filter-multibyte");
6621 staticpro (&QCfilter_multibyte);
6622
6623 Qlast_nonmenu_event = intern ("last-nonmenu-event");
6624 staticpro (&Qlast_nonmenu_event);
6625
6626 staticpro (&Vprocess_alist);
6627
6628 DEFVAR_BOOL ("delete-exited-processes", &delete_exited_processes,
6629 doc: /* *Non-nil means delete processes immediately when they exit.
6630 nil means don't delete them until `list-processes' is run. */);
6631
6632 delete_exited_processes = 1;
6633
6634 DEFVAR_LISP ("process-connection-type", &Vprocess_connection_type,
6635 doc: /* Control type of device used to communicate with subprocesses.
6636 Values are nil to use a pipe, or t or `pty' to use a pty.
6637 The value has no effect if the system has no ptys or if all ptys are busy:
6638 then a pipe is used in any case.
6639 The value takes effect when `start-process' is called. */);
6640 Vprocess_connection_type = Qt;
6641
6642 defsubr (&Sprocessp);
6643 defsubr (&Sget_process);
6644 defsubr (&Sget_buffer_process);
6645 defsubr (&Sdelete_process);
6646 defsubr (&Sprocess_status);
6647 defsubr (&Sprocess_exit_status);
6648 defsubr (&Sprocess_id);
6649 defsubr (&Sprocess_name);
6650 defsubr (&Sprocess_tty_name);
6651 defsubr (&Sprocess_command);
6652 defsubr (&Sset_process_buffer);
6653 defsubr (&Sprocess_buffer);
6654 defsubr (&Sprocess_mark);
6655 defsubr (&Sset_process_filter);
6656 defsubr (&Sprocess_filter);
6657 defsubr (&Sset_process_sentinel);
6658 defsubr (&Sprocess_sentinel);
6659 defsubr (&Sset_process_window_size);
6660 defsubr (&Sset_process_inherit_coding_system_flag);
6661 defsubr (&Sprocess_inherit_coding_system_flag);
6662 defsubr (&Sset_process_query_on_exit_flag);
6663 defsubr (&Sprocess_query_on_exit_flag);
6664 defsubr (&Sprocess_contact);
6665 defsubr (&Sprocess_plist);
6666 defsubr (&Sset_process_plist);
6667 defsubr (&Slist_processes);
6668 defsubr (&Sprocess_list);
6669 defsubr (&Sstart_process);
6670 #ifdef HAVE_SOCKETS
6671 defsubr (&Sset_network_process_option);
6672 defsubr (&Smake_network_process);
6673 defsubr (&Sformat_network_address);
6674 #endif /* HAVE_SOCKETS */
6675 #if defined(HAVE_SOCKETS) && defined(HAVE_NET_IF_H) && defined(HAVE_SYS_IOCTL_H)
6676 #ifdef SIOCGIFCONF
6677 defsubr (&Snetwork_interface_list);
6678 #endif
6679 #if defined(SIOCGIFADDR) || defined(SIOCGIFHWADDR) || defined(SIOCGIFFLAGS)
6680 defsubr (&Snetwork_interface_info);
6681 #endif
6682 #endif /* HAVE_SOCKETS ... */
6683 #ifdef DATAGRAM_SOCKETS
6684 defsubr (&Sprocess_datagram_address);
6685 defsubr (&Sset_process_datagram_address);
6686 #endif
6687 defsubr (&Saccept_process_output);
6688 defsubr (&Sprocess_send_region);
6689 defsubr (&Sprocess_send_string);
6690 defsubr (&Sinterrupt_process);
6691 defsubr (&Skill_process);
6692 defsubr (&Squit_process);
6693 defsubr (&Sstop_process);
6694 defsubr (&Scontinue_process);
6695 defsubr (&Sprocess_running_child_p);
6696 defsubr (&Sprocess_send_eof);
6697 defsubr (&Ssignal_process);
6698 defsubr (&Swaiting_for_user_input_p);
6699 /* defsubr (&Sprocess_connection); */
6700 defsubr (&Sset_process_coding_system);
6701 defsubr (&Sprocess_coding_system);
6702 defsubr (&Sset_process_filter_multibyte);
6703 defsubr (&Sprocess_filter_multibyte_p);
6704 }
6705
6706 \f
6707 #else /* not subprocesses */
6708
6709 #include <sys/types.h>
6710 #include <errno.h>
6711
6712 #include "lisp.h"
6713 #include "systime.h"
6714 #include "charset.h"
6715 #include "coding.h"
6716 #include "termopts.h"
6717 #include "sysselect.h"
6718
6719 extern int frame_garbaged;
6720
6721 extern EMACS_TIME timer_check ();
6722 extern int timers_run;
6723
6724 Lisp_Object QCtype;
6725
6726 /* As described above, except assuming that there are no subprocesses:
6727
6728 Wait for timeout to elapse and/or keyboard input to be available.
6729
6730 time_limit is:
6731 timeout in seconds, or
6732 zero for no limit, or
6733 -1 means gobble data immediately available but don't wait for any.
6734
6735 read_kbd is a Lisp_Object:
6736 0 to ignore keyboard input, or
6737 1 to return when input is available, or
6738 -1 means caller will actually read the input, so don't throw to
6739 the quit handler.
6740 a cons cell, meaning wait until its car is non-nil
6741 (and gobble terminal input into the buffer if any arrives), or
6742 We know that read_kbd will never be a Lisp_Process, since
6743 `subprocesses' isn't defined.
6744
6745 do_display != 0 means redisplay should be done to show subprocess
6746 output that arrives.
6747
6748 Return true iff we received input from any process. */
6749
6750 int
6751 wait_reading_process_input (time_limit, microsecs, read_kbd, do_display)
6752 int time_limit, microsecs;
6753 Lisp_Object read_kbd;
6754 int do_display;
6755 {
6756 register int nfds;
6757 EMACS_TIME end_time, timeout;
6758 SELECT_TYPE waitchannels;
6759 int xerrno;
6760 /* Either nil or a cons cell, the car of which is of interest and
6761 may be changed outside of this routine. */
6762 Lisp_Object wait_for_cell;
6763
6764 wait_for_cell = Qnil;
6765
6766 /* If waiting for non-nil in a cell, record where. */
6767 if (CONSP (read_kbd))
6768 {
6769 wait_for_cell = read_kbd;
6770 XSETFASTINT (read_kbd, 0);
6771 }
6772
6773 /* What does time_limit really mean? */
6774 if (time_limit || microsecs)
6775 {
6776 EMACS_GET_TIME (end_time);
6777 EMACS_SET_SECS_USECS (timeout, time_limit, microsecs);
6778 EMACS_ADD_TIME (end_time, end_time, timeout);
6779 }
6780
6781 /* Turn off periodic alarms (in case they are in use)
6782 and then turn off any other atimers,
6783 because the select emulator uses alarms. */
6784 stop_polling ();
6785 turn_on_atimers (0);
6786
6787 while (1)
6788 {
6789 int timeout_reduced_for_timers = 0;
6790
6791 /* If calling from keyboard input, do not quit
6792 since we want to return C-g as an input character.
6793 Otherwise, do pending quit if requested. */
6794 if (XINT (read_kbd) >= 0)
6795 QUIT;
6796
6797 /* Exit now if the cell we're waiting for became non-nil. */
6798 if (! NILP (wait_for_cell) && ! NILP (XCAR (wait_for_cell)))
6799 break;
6800
6801 /* Compute time from now till when time limit is up */
6802 /* Exit if already run out */
6803 if (time_limit == -1)
6804 {
6805 /* -1 specified for timeout means
6806 gobble output available now
6807 but don't wait at all. */
6808
6809 EMACS_SET_SECS_USECS (timeout, 0, 0);
6810 }
6811 else if (time_limit || microsecs)
6812 {
6813 EMACS_GET_TIME (timeout);
6814 EMACS_SUB_TIME (timeout, end_time, timeout);
6815 if (EMACS_TIME_NEG_P (timeout))
6816 break;
6817 }
6818 else
6819 {
6820 EMACS_SET_SECS_USECS (timeout, 100000, 0);
6821 }
6822
6823 /* If our caller will not immediately handle keyboard events,
6824 run timer events directly.
6825 (Callers that will immediately read keyboard events
6826 call timer_delay on their own.) */
6827 if (NILP (wait_for_cell))
6828 {
6829 EMACS_TIME timer_delay;
6830
6831 do
6832 {
6833 int old_timers_run = timers_run;
6834 timer_delay = timer_check (1);
6835 if (timers_run != old_timers_run && do_display)
6836 /* We must retry, since a timer may have requeued itself
6837 and that could alter the time delay. */
6838 redisplay_preserve_echo_area (14);
6839 else
6840 break;
6841 }
6842 while (!detect_input_pending ());
6843
6844 /* If there is unread keyboard input, also return. */
6845 if (XINT (read_kbd) != 0
6846 && requeued_events_pending_p ())
6847 break;
6848
6849 if (! EMACS_TIME_NEG_P (timer_delay) && time_limit != -1)
6850 {
6851 EMACS_TIME difference;
6852 EMACS_SUB_TIME (difference, timer_delay, timeout);
6853 if (EMACS_TIME_NEG_P (difference))
6854 {
6855 timeout = timer_delay;
6856 timeout_reduced_for_timers = 1;
6857 }
6858 }
6859 }
6860
6861 /* Cause C-g and alarm signals to take immediate action,
6862 and cause input available signals to zero out timeout. */
6863 if (XINT (read_kbd) < 0)
6864 set_waiting_for_input (&timeout);
6865
6866 /* Wait till there is something to do. */
6867
6868 if (! XINT (read_kbd) && NILP (wait_for_cell))
6869 FD_ZERO (&waitchannels);
6870 else
6871 FD_SET (0, &waitchannels);
6872
6873 /* If a frame has been newly mapped and needs updating,
6874 reprocess its display stuff. */
6875 if (frame_garbaged && do_display)
6876 {
6877 clear_waiting_for_input ();
6878 redisplay_preserve_echo_area (15);
6879 if (XINT (read_kbd) < 0)
6880 set_waiting_for_input (&timeout);
6881 }
6882
6883 if (XINT (read_kbd) && detect_input_pending ())
6884 {
6885 nfds = 0;
6886 FD_ZERO (&waitchannels);
6887 }
6888 else
6889 nfds = select (1, &waitchannels, (SELECT_TYPE *)0, (SELECT_TYPE *)0,
6890 &timeout);
6891
6892 xerrno = errno;
6893
6894 /* Make C-g and alarm signals set flags again */
6895 clear_waiting_for_input ();
6896
6897 /* If we woke up due to SIGWINCH, actually change size now. */
6898 do_pending_window_change (0);
6899
6900 if (time_limit && nfds == 0 && ! timeout_reduced_for_timers)
6901 /* We waited the full specified time, so return now. */
6902 break;
6903
6904 if (nfds == -1)
6905 {
6906 /* If the system call was interrupted, then go around the
6907 loop again. */
6908 if (xerrno == EINTR)
6909 FD_ZERO (&waitchannels);
6910 else
6911 error ("select error: %s", emacs_strerror (xerrno));
6912 }
6913 #ifdef sun
6914 else if (nfds > 0 && (waitchannels & 1) && interrupt_input)
6915 /* System sometimes fails to deliver SIGIO. */
6916 kill (getpid (), SIGIO);
6917 #endif
6918 #ifdef SIGIO
6919 if (XINT (read_kbd) && interrupt_input && (waitchannels & 1))
6920 kill (getpid (), SIGIO);
6921 #endif
6922
6923 /* Check for keyboard input */
6924
6925 if ((XINT (read_kbd) != 0)
6926 && detect_input_pending_run_timers (do_display))
6927 {
6928 swallow_events (do_display);
6929 if (detect_input_pending_run_timers (do_display))
6930 break;
6931 }
6932
6933 /* If there is unread keyboard input, also return. */
6934 if (XINT (read_kbd) != 0
6935 && requeued_events_pending_p ())
6936 break;
6937
6938 /* If wait_for_cell. check for keyboard input
6939 but don't run any timers.
6940 ??? (It seems wrong to me to check for keyboard
6941 input at all when wait_for_cell, but the code
6942 has been this way since July 1994.
6943 Try changing this after version 19.31.) */
6944 if (! NILP (wait_for_cell)
6945 && detect_input_pending ())
6946 {
6947 swallow_events (do_display);
6948 if (detect_input_pending ())
6949 break;
6950 }
6951
6952 /* Exit now if the cell we're waiting for became non-nil. */
6953 if (! NILP (wait_for_cell) && ! NILP (XCAR (wait_for_cell)))
6954 break;
6955 }
6956
6957 start_polling ();
6958
6959 return 0;
6960 }
6961
6962
6963 /* Don't confuse make-docfile by having two doc strings for this function.
6964 make-docfile does not pay attention to #if, for good reason! */
6965 DEFUN ("get-buffer-process", Fget_buffer_process, Sget_buffer_process, 1, 1, 0,
6966 0)
6967 (name)
6968 register Lisp_Object name;
6969 {
6970 return Qnil;
6971 }
6972
6973 /* Don't confuse make-docfile by having two doc strings for this function.
6974 make-docfile does not pay attention to #if, for good reason! */
6975 DEFUN ("process-inherit-coding-system-flag",
6976 Fprocess_inherit_coding_system_flag, Sprocess_inherit_coding_system_flag,
6977 1, 1, 0,
6978 0)
6979 (process)
6980 register Lisp_Object process;
6981 {
6982 /* Ignore the argument and return the value of
6983 inherit-process-coding-system. */
6984 return inherit_process_coding_system ? Qt : Qnil;
6985 }
6986
6987 /* Kill all processes associated with `buffer'.
6988 If `buffer' is nil, kill all processes.
6989 Since we have no subprocesses, this does nothing. */
6990
6991 void
6992 kill_buffer_processes (buffer)
6993 Lisp_Object buffer;
6994 {
6995 }
6996
6997 void
6998 init_process ()
6999 {
7000 }
7001
7002 void
7003 syms_of_process ()
7004 {
7005 QCtype = intern (":type");
7006 staticpro (&QCtype);
7007
7008 defsubr (&Sget_buffer_process);
7009 defsubr (&Sprocess_inherit_coding_system_flag);
7010 }
7011
7012 \f
7013 #endif /* not subprocesses */
7014
7015 /* arch-tag: 3706c011-7b9a-4117-bd4f-59e7f701a4c4
7016 (do not change this comment) */