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