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