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