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