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