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