Declare close_file_unwind.
[bpt/emacs.git] / src / process.c
... / ...
CommitLineData
1/* Asynchronous subprocess control for GNU Emacs.
2 Copyright (C) 1985, 86, 87, 88, 93, 94, 95, 96, 1998
3 Free Software Foundation, Inc.
4
5This file is part of GNU Emacs.
6
7GNU Emacs is free software; you can redistribute it and/or modify
8it under the terms of the GNU General Public License as published by
9the Free Software Foundation; either version 2, or (at your option)
10any later version.
11
12GNU Emacs is distributed in the hope that it will be useful,
13but WITHOUT ANY WARRANTY; without even the implied warranty of
14MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
15GNU General Public License for more details.
16
17You should have received a copy of the GNU General Public License
18along with GNU Emacs; see the file COPYING. If not, write to
19the Free Software Foundation, Inc., 59 Temple Place - Suite 330,
20Boston, MA 02111-1307, USA. */
21
22
23#include <signal.h>
24
25#include <config.h>
26
27/* This file is split into two parts by the following preprocessor
28 conditional. The 'then' clause contains all of the support for
29 asynchronous subprocesses. The 'else' clause contains stub
30 versions of some of the asynchronous subprocess routines that are
31 often called elsewhere in Emacs, so we don't have to #ifdef the
32 sections that call them. */
33
34\f
35#ifdef subprocesses
36
37#include <stdio.h>
38#include <errno.h>
39#include <setjmp.h>
40#include <sys/types.h> /* some typedefs are used in sys/file.h */
41#include <sys/file.h>
42#include <sys/stat.h>
43#ifdef HAVE_UNISTD_H
44#include <unistd.h>
45#endif
46
47#ifdef WINDOWSNT
48#include <stdlib.h>
49#include <fcntl.h>
50#endif /* not WINDOWSNT */
51
52#ifdef HAVE_SOCKETS /* TCP connection support, if kernel can do it */
53#include <sys/socket.h>
54#include <netdb.h>
55#include <netinet/in.h>
56#include <arpa/inet.h>
57#ifdef NEED_NET_ERRNO_H
58#include <net/errno.h>
59#endif /* NEED_NET_ERRNO_H */
60#endif /* HAVE_SOCKETS */
61
62/* TERM is a poor-man's SLIP, used on Linux. */
63#ifdef TERM
64#include <client.h>
65#endif
66
67/* On some systems, e.g. DGUX, inet_addr returns a 'struct in_addr'. */
68#ifdef HAVE_BROKEN_INET_ADDR
69#define IN_ADDR struct in_addr
70#define NUMERIC_ADDR_ERROR (numeric_addr.s_addr == -1)
71#else
72#define IN_ADDR unsigned long
73#define NUMERIC_ADDR_ERROR (numeric_addr == -1)
74#endif
75
76#if defined(BSD_SYSTEM) || defined(STRIDE)
77#include <sys/ioctl.h>
78#if !defined (O_NDELAY) && defined (HAVE_PTYS) && !defined(USG5)
79#include <fcntl.h>
80#endif /* HAVE_PTYS and no O_NDELAY */
81#endif /* BSD_SYSTEM || STRIDE */
82
83#ifdef BROKEN_O_NONBLOCK
84#undef O_NONBLOCK
85#endif /* BROKEN_O_NONBLOCK */
86
87#ifdef NEED_BSDTTY
88#include <bsdtty.h>
89#endif
90
91#ifdef IRIS
92#include <sys/sysmacros.h> /* for "minor" */
93#endif /* not IRIS */
94
95#include "systime.h"
96#include "systty.h"
97
98#include "lisp.h"
99#include "window.h"
100#include "buffer.h"
101#include "charset.h"
102#include "coding.h"
103#include "process.h"
104#include "termhooks.h"
105#include "termopts.h"
106#include "commands.h"
107#include "frame.h"
108#include "blockinput.h"
109#include "keyboard.h"
110#include "dispextern.h"
111
112#define max(a, b) ((a) > (b) ? (a) : (b))
113
114Lisp_Object Qprocessp;
115Lisp_Object Qrun, Qstop, Qsignal, Qopen, Qclosed;
116Lisp_Object Qlast_nonmenu_event;
117/* Qexit is declared and initialized in eval.c. */
118
119/* a process object is a network connection when its childp field is neither
120 Qt nor Qnil but is instead a cons cell (HOSTNAME PORTNUM). */
121
122#ifdef HAVE_SOCKETS
123#define NETCONN_P(p) (GC_CONSP (XPROCESS (p)->childp))
124#else
125#define NETCONN_P(p) 0
126#endif /* HAVE_SOCKETS */
127
128/* Define first descriptor number available for subprocesses. */
129#ifdef VMS
130#define FIRST_PROC_DESC 1
131#else /* Not VMS */
132#define FIRST_PROC_DESC 3
133#endif
134
135/* Define SIGCHLD as an alias for SIGCLD. There are many conditionals
136 testing SIGCHLD. */
137
138#if !defined (SIGCHLD) && defined (SIGCLD)
139#define SIGCHLD SIGCLD
140#endif /* SIGCLD */
141
142#include "syssignal.h"
143
144#include "syswait.h"
145
146extern int errno;
147extern char *strerror ();
148#ifdef VMS
149extern char *sys_errlist[];
150#endif
151
152#ifndef HAVE_H_ERRNO
153extern int h_errno;
154#endif
155
156#ifndef SYS_SIGLIST_DECLARED
157#ifndef VMS
158#ifndef BSD4_1
159#ifndef WINDOWSNT
160#ifndef LINUX
161extern char *sys_siglist[];
162#endif /* not LINUX */
163#else /* BSD4_1 */
164char *sys_siglist[] =
165 {
166 "bum signal!!",
167 "hangup",
168 "interrupt",
169 "quit",
170 "illegal instruction",
171 "trace trap",
172 "iot instruction",
173 "emt instruction",
174 "floating point exception",
175 "kill",
176 "bus error",
177 "segmentation violation",
178 "bad argument to system call",
179 "write on a pipe with no one to read it",
180 "alarm clock",
181 "software termination signal from kill",
182 "status signal",
183 "sendable stop signal not from tty",
184 "stop signal from tty",
185 "continue a stopped process",
186 "child status has changed",
187 "background read attempted from control tty",
188 "background write attempted from control tty",
189 "input record available at control tty",
190 "exceeded CPU time limit",
191 "exceeded file size limit"
192 };
193#endif /* not WINDOWSNT */
194#endif
195#endif /* VMS */
196#endif /* ! SYS_SIGLIST_DECLARED */
197
198/* t means use pty, nil means use a pipe,
199 maybe other values to come. */
200static Lisp_Object Vprocess_connection_type;
201
202#ifdef SKTPAIR
203#ifndef HAVE_SOCKETS
204#include <sys/socket.h>
205#endif
206#endif /* SKTPAIR */
207
208/* These next two vars are non-static since sysdep.c uses them in the
209 emulation of `select'. */
210/* Number of events of change of status of a process. */
211int process_tick;
212/* Number of events for which the user or sentinel has been notified. */
213int update_tick;
214
215#include "sysselect.h"
216
217/* If we support a window system, turn on the code to poll periodically
218 to detect C-g. It isn't actually used when doing interrupt input. */
219#ifdef HAVE_WINDOW_SYSTEM
220#define POLL_FOR_INPUT
221#endif
222
223/* Mask of bits indicating the descriptors that we wait for input on. */
224
225static SELECT_TYPE input_wait_mask;
226
227/* Mask that excludes keyboard input descriptor (s). */
228
229static SELECT_TYPE non_keyboard_wait_mask;
230
231/* Mask that excludes process input descriptor (s). */
232
233static SELECT_TYPE non_process_wait_mask;
234
235/* The largest descriptor currently in use for a process object. */
236static int max_process_desc;
237
238/* The largest descriptor currently in use for keyboard input. */
239static int max_keyboard_desc;
240
241/* Nonzero means delete a process right away if it exits. */
242static int delete_exited_processes;
243
244/* Indexed by descriptor, gives the process (if any) for that descriptor */
245Lisp_Object chan_process[MAXDESC];
246
247/* Alist of elements (NAME . PROCESS) */
248Lisp_Object Vprocess_alist;
249
250/* Buffered-ahead input char from process, indexed by channel.
251 -1 means empty (no char is buffered).
252 Used on sys V where the only way to tell if there is any
253 output from the process is to read at least one char.
254 Always -1 on systems that support FIONREAD. */
255
256/* Don't make static; need to access externally. */
257int proc_buffered_char[MAXDESC];
258
259/* Table of `struct coding-system' for each process. */
260static struct coding_system *proc_decode_coding_system[MAXDESC];
261static struct coding_system *proc_encode_coding_system[MAXDESC];
262
263static Lisp_Object get_process ();
264
265extern EMACS_TIME timer_check ();
266extern int timers_run;
267
268/* Maximum number of bytes to send to a pty without an eof. */
269static int pty_max_bytes;
270
271extern Lisp_Object Vfile_name_coding_system, Vdefault_file_name_coding_system;
272
273#ifdef HAVE_PTYS
274/* The file name of the pty opened by allocate_pty. */
275
276static char pty_name[24];
277#endif
278\f
279/* Compute the Lisp form of the process status, p->status, from
280 the numeric status that was returned by `wait'. */
281
282Lisp_Object status_convert ();
283
284void
285update_status (p)
286 struct Lisp_Process *p;
287{
288 union { int i; WAITTYPE wt; } u;
289 u.i = XFASTINT (p->raw_status_low) + (XFASTINT (p->raw_status_high) << 16);
290 p->status = status_convert (u.wt);
291 p->raw_status_low = Qnil;
292 p->raw_status_high = Qnil;
293}
294
295/* Convert a process status word in Unix format to
296 the list that we use internally. */
297
298Lisp_Object
299status_convert (w)
300 WAITTYPE w;
301{
302 if (WIFSTOPPED (w))
303 return Fcons (Qstop, Fcons (make_number (WSTOPSIG (w)), Qnil));
304 else if (WIFEXITED (w))
305 return Fcons (Qexit, Fcons (make_number (WRETCODE (w)),
306 WCOREDUMP (w) ? Qt : Qnil));
307 else if (WIFSIGNALED (w))
308 return Fcons (Qsignal, Fcons (make_number (WTERMSIG (w)),
309 WCOREDUMP (w) ? Qt : Qnil));
310 else
311 return Qrun;
312}
313
314/* Given a status-list, extract the three pieces of information
315 and store them individually through the three pointers. */
316
317void
318decode_status (l, symbol, code, coredump)
319 Lisp_Object l;
320 Lisp_Object *symbol;
321 int *code;
322 int *coredump;
323{
324 Lisp_Object tem;
325
326 if (SYMBOLP (l))
327 {
328 *symbol = l;
329 *code = 0;
330 *coredump = 0;
331 }
332 else
333 {
334 *symbol = XCAR (l);
335 tem = XCDR (l);
336 *code = XFASTINT (XCAR (tem));
337 tem = XCDR (tem);
338 *coredump = !NILP (tem);
339 }
340}
341
342/* Return a string describing a process status list. */
343
344Lisp_Object
345status_message (status)
346 Lisp_Object status;
347{
348 Lisp_Object symbol;
349 int code, coredump;
350 Lisp_Object string, string2;
351
352 decode_status (status, &symbol, &code, &coredump);
353
354 if (EQ (symbol, Qsignal) || EQ (symbol, Qstop))
355 {
356 char *signame = 0;
357 if (code < NSIG)
358 {
359#ifndef VMS
360 /* Cast to suppress warning if the table has const char *. */
361 signame = (char *) sys_siglist[code];
362#else
363 signame = sys_errlist[code];
364#endif
365 }
366 if (signame == 0)
367 signame = "unknown";
368 string = build_string (signame);
369 string2 = build_string (coredump ? " (core dumped)\n" : "\n");
370 XSTRING (string)->data[0] = DOWNCASE (XSTRING (string)->data[0]);
371 return concat2 (string, string2);
372 }
373 else if (EQ (symbol, Qexit))
374 {
375 if (code == 0)
376 return build_string ("finished\n");
377 string = Fnumber_to_string (make_number (code));
378 string2 = build_string (coredump ? " (core dumped)\n" : "\n");
379 return concat2 (build_string ("exited abnormally with code "),
380 concat2 (string, string2));
381 }
382 else
383 return Fcopy_sequence (Fsymbol_name (symbol));
384}
385\f
386#ifdef HAVE_PTYS
387
388/* Open an available pty, returning a file descriptor.
389 Return -1 on failure.
390 The file name of the terminal corresponding to the pty
391 is left in the variable pty_name. */
392
393int
394allocate_pty ()
395{
396 struct stat stb;
397 register int c, i;
398 int fd;
399
400 /* Some systems name their pseudoterminals so that there are gaps in
401 the usual sequence - for example, on HP9000/S700 systems, there
402 are no pseudoterminals with names ending in 'f'. So we wait for
403 three failures in a row before deciding that we've reached the
404 end of the ptys. */
405 int failed_count = 0;
406
407#ifdef PTY_ITERATION
408 PTY_ITERATION
409#else
410 for (c = FIRST_PTY_LETTER; c <= 'z'; c++)
411 for (i = 0; i < 16; i++)
412#endif
413 {
414#ifdef PTY_NAME_SPRINTF
415 PTY_NAME_SPRINTF
416#else
417 sprintf (pty_name, "/dev/pty%c%x", c, i);
418#endif /* no PTY_NAME_SPRINTF */
419
420#ifdef PTY_OPEN
421 PTY_OPEN;
422#else /* no PTY_OPEN */
423#ifdef IRIS
424 /* Unusual IRIS code */
425 *ptyv = open ("/dev/ptc", O_RDWR | O_NDELAY, 0);
426 if (fd < 0)
427 return -1;
428 if (fstat (fd, &stb) < 0)
429 return -1;
430#else /* not IRIS */
431 if (stat (pty_name, &stb) < 0)
432 {
433 failed_count++;
434 if (failed_count >= 3)
435 return -1;
436 }
437 else
438 failed_count = 0;
439#ifdef O_NONBLOCK
440 fd = open (pty_name, O_RDWR | O_NONBLOCK, 0);
441#else
442 fd = open (pty_name, O_RDWR | O_NDELAY, 0);
443#endif
444#endif /* not IRIS */
445#endif /* no PTY_OPEN */
446
447 if (fd >= 0)
448 {
449 /* check to make certain that both sides are available
450 this avoids a nasty yet stupid bug in rlogins */
451#ifdef PTY_TTY_NAME_SPRINTF
452 PTY_TTY_NAME_SPRINTF
453#else
454 sprintf (pty_name, "/dev/tty%c%x", c, i);
455#endif /* no PTY_TTY_NAME_SPRINTF */
456#ifndef UNIPLUS
457 if (access (pty_name, 6) != 0)
458 {
459 close (fd);
460#if !defined(IRIS) && !defined(__sgi)
461 continue;
462#else
463 return -1;
464#endif /* IRIS */
465 }
466#endif /* not UNIPLUS */
467 setup_pty (fd);
468 return fd;
469 }
470 }
471 return -1;
472}
473#endif /* HAVE_PTYS */
474\f
475Lisp_Object
476make_process (name)
477 Lisp_Object name;
478{
479 struct Lisp_Vector *vec;
480 register Lisp_Object val, tem, name1;
481 register struct Lisp_Process *p;
482 char suffix[10];
483 register int i;
484
485 vec = allocate_vectorlike ((EMACS_INT) VECSIZE (struct Lisp_Process));
486 for (i = 0; i < VECSIZE (struct Lisp_Process); i++)
487 vec->contents[i] = Qnil;
488 vec->size = VECSIZE (struct Lisp_Process);
489 p = (struct Lisp_Process *)vec;
490
491 XSETINT (p->infd, -1);
492 XSETINT (p->outfd, -1);
493 XSETFASTINT (p->pid, 0);
494 XSETFASTINT (p->tick, 0);
495 XSETFASTINT (p->update_tick, 0);
496 p->raw_status_low = Qnil;
497 p->raw_status_high = Qnil;
498 p->status = Qrun;
499 p->mark = Fmake_marker ();
500
501 /* If name is already in use, modify it until it is unused. */
502
503 name1 = name;
504 for (i = 1; ; i++)
505 {
506 tem = Fget_process (name1);
507 if (NILP (tem)) break;
508 sprintf (suffix, "<%d>", i);
509 name1 = concat2 (name, build_string (suffix));
510 }
511 name = name1;
512 p->name = name;
513 XSETPROCESS (val, p);
514 Vprocess_alist = Fcons (Fcons (name, val), Vprocess_alist);
515 return val;
516}
517
518void
519remove_process (proc)
520 register Lisp_Object proc;
521{
522 register Lisp_Object pair;
523
524 pair = Frassq (proc, Vprocess_alist);
525 Vprocess_alist = Fdelq (pair, Vprocess_alist);
526
527 deactivate_process (proc);
528}
529\f
530DEFUN ("processp", Fprocessp, Sprocessp, 1, 1, 0,
531 "Return t if OBJECT is a process.")
532 (object)
533 Lisp_Object object;
534{
535 return PROCESSP (object) ? Qt : Qnil;
536}
537
538DEFUN ("get-process", Fget_process, Sget_process, 1, 1, 0,
539 "Return the process named NAME, or nil if there is none.")
540 (name)
541 register Lisp_Object name;
542{
543 if (PROCESSP (name))
544 return name;
545 CHECK_STRING (name, 0);
546 return Fcdr (Fassoc (name, Vprocess_alist));
547}
548
549DEFUN ("get-buffer-process", Fget_buffer_process, Sget_buffer_process, 1, 1, 0,
550 "Return the (or a) process associated with BUFFER.\n\
551BUFFER may be a buffer or the name of one.")
552 (buffer)
553 register Lisp_Object buffer;
554{
555 register Lisp_Object buf, tail, proc;
556
557 if (NILP (buffer)) return Qnil;
558 buf = Fget_buffer (buffer);
559 if (NILP (buf)) return Qnil;
560
561 for (tail = Vprocess_alist; !NILP (tail); tail = Fcdr (tail))
562 {
563 proc = Fcdr (Fcar (tail));
564 if (PROCESSP (proc) && EQ (XPROCESS (proc)->buffer, buf))
565 return proc;
566 }
567 return Qnil;
568}
569
570/* This is how commands for the user decode process arguments. It
571 accepts a process, a process name, a buffer, a buffer name, or nil.
572 Buffers denote the first process in the buffer, and nil denotes the
573 current buffer. */
574
575static Lisp_Object
576get_process (name)
577 register Lisp_Object name;
578{
579 register Lisp_Object proc, obj;
580 if (STRINGP (name))
581 {
582 obj = Fget_process (name);
583 if (NILP (obj))
584 obj = Fget_buffer (name);
585 if (NILP (obj))
586 error ("Process %s does not exist", XSTRING (name)->data);
587 }
588 else if (NILP (name))
589 obj = Fcurrent_buffer ();
590 else
591 obj = name;
592
593 /* Now obj should be either a buffer object or a process object.
594 */
595 if (BUFFERP (obj))
596 {
597 proc = Fget_buffer_process (obj);
598 if (NILP (proc))
599 error ("Buffer %s has no process", XSTRING (XBUFFER (obj)->name)->data);
600 }
601 else
602 {
603 CHECK_PROCESS (obj, 0);
604 proc = obj;
605 }
606 return proc;
607}
608
609DEFUN ("delete-process", Fdelete_process, Sdelete_process, 1, 1, 0,
610 "Delete PROCESS: kill it and forget about it immediately.\n\
611PROCESS may be a process, a buffer, the name of a process or buffer, or\n\
612nil, indicating the current buffer's process.")
613 (process)
614 register Lisp_Object process;
615{
616 process = get_process (process);
617 XPROCESS (process)->raw_status_low = Qnil;
618 XPROCESS (process)->raw_status_high = Qnil;
619 if (NETCONN_P (process))
620 {
621 XPROCESS (process)->status = Fcons (Qexit, Fcons (make_number (0), Qnil));
622 XSETINT (XPROCESS (process)->tick, ++process_tick);
623 }
624 else if (XINT (XPROCESS (process)->infd) >= 0)
625 {
626 Fkill_process (process, Qnil);
627 /* Do this now, since remove_process will make sigchld_handler do nothing. */
628 XPROCESS (process)->status
629 = Fcons (Qsignal, Fcons (make_number (SIGKILL), Qnil));
630 XSETINT (XPROCESS (process)->tick, ++process_tick);
631 status_notify ();
632 }
633 remove_process (process);
634 return Qnil;
635}
636\f
637DEFUN ("process-status", Fprocess_status, Sprocess_status, 1, 1, 0,
638 "Return the status of PROCESS.\n\
639The returned value is one of the following symbols:\n\
640run -- for a process that is running.\n\
641stop -- for a process stopped but continuable.\n\
642exit -- for a process that has exited.\n\
643signal -- for a process that has got a fatal signal.\n\
644open -- for a network stream connection that is open.\n\
645closed -- for a network stream connection that is closed.\n\
646nil -- if arg is a process name and no such process exists.\n\
647PROCESS may be a process, a buffer, the name of a process, or\n\
648nil, indicating the current buffer's process.")
649 (process)
650 register Lisp_Object process;
651{
652 register struct Lisp_Process *p;
653 register Lisp_Object status;
654
655 if (STRINGP (process))
656 process = Fget_process (process);
657 else
658 process = get_process (process);
659
660 if (NILP (process))
661 return process;
662
663 p = XPROCESS (process);
664 if (!NILP (p->raw_status_low))
665 update_status (p);
666 status = p->status;
667 if (CONSP (status))
668 status = XCAR (status);
669 if (NETCONN_P (process))
670 {
671 if (EQ (status, Qrun))
672 status = Qopen;
673 else if (EQ (status, Qexit))
674 status = Qclosed;
675 }
676 return status;
677}
678
679DEFUN ("process-exit-status", Fprocess_exit_status, Sprocess_exit_status,
680 1, 1, 0,
681 "Return the exit status of PROCESS or the signal number that killed it.\n\
682If PROCESS has not yet exited or died, return 0.")
683 (process)
684 register Lisp_Object process;
685{
686 CHECK_PROCESS (process, 0);
687 if (!NILP (XPROCESS (process)->raw_status_low))
688 update_status (XPROCESS (process));
689 if (CONSP (XPROCESS (process)->status))
690 return XCAR (XCDR (XPROCESS (process)->status));
691 return make_number (0);
692}
693
694DEFUN ("process-id", Fprocess_id, Sprocess_id, 1, 1, 0,
695 "Return the process id of PROCESS.\n\
696This is the pid of the Unix process which PROCESS uses or talks to.\n\
697For a network connection, this value is nil.")
698 (process)
699 register Lisp_Object process;
700{
701 CHECK_PROCESS (process, 0);
702 return XPROCESS (process)->pid;
703}
704
705DEFUN ("process-name", Fprocess_name, Sprocess_name, 1, 1, 0,
706 "Return the name of PROCESS, as a string.\n\
707This is the name of the program invoked in PROCESS,\n\
708possibly modified to make it unique among process names.")
709 (process)
710 register Lisp_Object process;
711{
712 CHECK_PROCESS (process, 0);
713 return XPROCESS (process)->name;
714}
715
716DEFUN ("process-command", Fprocess_command, Sprocess_command, 1, 1, 0,
717 "Return the command that was executed to start PROCESS.\n\
718This is a list of strings, the first string being the program executed\n\
719and the rest of the strings being the arguments given to it.\n\
720For a non-child channel, this is nil.")
721 (process)
722 register Lisp_Object process;
723{
724 CHECK_PROCESS (process, 0);
725 return XPROCESS (process)->command;
726}
727
728DEFUN ("process-tty-name", Fprocess_tty_name, Sprocess_tty_name, 1, 1, 0,
729 "Return the name of the terminal PROCESS uses, or nil if none.\n\
730This is the terminal that the process itself reads and writes on,\n\
731not the name of the pty that Emacs uses to talk with that terminal.")
732 (process)
733 register Lisp_Object process;
734{
735 CHECK_PROCESS (process, 0);
736 return XPROCESS (process)->tty_name;
737}
738
739DEFUN ("set-process-buffer", Fset_process_buffer, Sset_process_buffer,
740 2, 2, 0,
741 "Set buffer associated with PROCESS to BUFFER (a buffer, or nil).")
742 (process, buffer)
743 register Lisp_Object process, buffer;
744{
745 CHECK_PROCESS (process, 0);
746 if (!NILP (buffer))
747 CHECK_BUFFER (buffer, 1);
748 XPROCESS (process)->buffer = buffer;
749 return buffer;
750}
751
752DEFUN ("process-buffer", Fprocess_buffer, Sprocess_buffer,
753 1, 1, 0,
754 "Return the buffer PROCESS is associated with.\n\
755Output from PROCESS is inserted in this buffer unless PROCESS has a filter.")
756 (process)
757 register Lisp_Object process;
758{
759 CHECK_PROCESS (process, 0);
760 return XPROCESS (process)->buffer;
761}
762
763DEFUN ("process-mark", Fprocess_mark, Sprocess_mark,
764 1, 1, 0,
765 "Return the marker for the end of the last output from PROCESS.")
766 (process)
767 register Lisp_Object process;
768{
769 CHECK_PROCESS (process, 0);
770 return XPROCESS (process)->mark;
771}
772
773DEFUN ("set-process-filter", Fset_process_filter, Sset_process_filter,
774 2, 2, 0,
775 "Give PROCESS the filter function FILTER; nil means no filter.\n\
776t means stop accepting output from the process.\n\
777When a process has a filter, each time it does output\n\
778the entire string of output is passed to the filter.\n\
779The filter gets two arguments: the process and the string of output.\n\
780If the process has a filter, its buffer is not used for output.")
781 (process, filter)
782 register Lisp_Object process, filter;
783{
784 CHECK_PROCESS (process, 0);
785 if (EQ (filter, Qt))
786 {
787 FD_CLR (XINT (XPROCESS (process)->infd), &input_wait_mask);
788 FD_CLR (XINT (XPROCESS (process)->infd), &non_keyboard_wait_mask);
789 }
790 else if (EQ (XPROCESS (process)->filter, Qt))
791 {
792 FD_SET (XINT (XPROCESS (process)->infd), &input_wait_mask);
793 FD_SET (XINT (XPROCESS (process)->infd), &non_keyboard_wait_mask);
794 }
795 XPROCESS (process)->filter = filter;
796 return filter;
797}
798
799DEFUN ("process-filter", Fprocess_filter, Sprocess_filter,
800 1, 1, 0,
801 "Returns the filter function of PROCESS; nil if none.\n\
802See `set-process-filter' for more info on filter functions.")
803 (process)
804 register Lisp_Object process;
805{
806 CHECK_PROCESS (process, 0);
807 return XPROCESS (process)->filter;
808}
809
810DEFUN ("set-process-sentinel", Fset_process_sentinel, Sset_process_sentinel,
811 2, 2, 0,
812 "Give PROCESS the sentinel SENTINEL; nil for none.\n\
813The sentinel is called as a function when the process changes state.\n\
814It gets two arguments: the process, and a string describing the change.")
815 (process, sentinel)
816 register Lisp_Object process, sentinel;
817{
818 CHECK_PROCESS (process, 0);
819 XPROCESS (process)->sentinel = sentinel;
820 return sentinel;
821}
822
823DEFUN ("process-sentinel", Fprocess_sentinel, Sprocess_sentinel,
824 1, 1, 0,
825 "Return the sentinel of PROCESS; nil if none.\n\
826See `set-process-sentinel' for more info on sentinels.")
827 (process)
828 register Lisp_Object process;
829{
830 CHECK_PROCESS (process, 0);
831 return XPROCESS (process)->sentinel;
832}
833
834DEFUN ("set-process-window-size", Fset_process_window_size,
835 Sset_process_window_size, 3, 3, 0,
836 "Tell PROCESS that it has logical window size HEIGHT and WIDTH.")
837 (process, height, width)
838 register Lisp_Object process, height, width;
839{
840 CHECK_PROCESS (process, 0);
841 CHECK_NATNUM (height, 0);
842 CHECK_NATNUM (width, 0);
843 if (set_window_size (XINT (XPROCESS (process)->infd),
844 XINT (height), XINT (width)) <= 0)
845 return Qnil;
846 else
847 return Qt;
848}
849
850DEFUN ("set-process-inherit-coding-system-flag",
851 Fset_process_inherit_coding_system_flag,
852 Sset_process_inherit_coding_system_flag, 2, 2, 0,
853 "Determine whether buffer of PROCESS will inherit coding-system.\n\
854If the second argument FLAG is non-nil, then the variable\n\
855`buffer-file-coding-system' of the buffer associated with PROCESS\n\
856will be bound to the value of the coding system used to decode\n\
857the process output.\n\
858\n\
859This is useful when the coding system specified for the process buffer\n\
860leaves either the character code conversion or the end-of-line conversion\n\
861unspecified, or if the coding system used to decode the process output\n\
862is more appropriate for saving the process buffer.\n\
863\n\
864Binding the variable `inherit-process-coding-system' to non-nil before\n\
865starting the process is an alternative way of setting the inherit flag\n\
866for the process which will run.")
867 (process, flag)
868 register Lisp_Object process, flag;
869{
870 CHECK_PROCESS (process, 0);
871 XPROCESS (process)->inherit_coding_system_flag = flag;
872 return flag;
873}
874
875DEFUN ("process-inherit-coding-system-flag",
876 Fprocess_inherit_coding_system_flag, Sprocess_inherit_coding_system_flag,
877 1, 1, 0,
878 "Return the value of inherit-coding-system flag for PROCESS.\n\
879If this flag is t, `buffer-file-coding-system' of the buffer\n\
880associated with PROCESS will inherit the coding system used to decode\n\
881the process output.")
882 (process)
883 register Lisp_Object process;
884{
885 CHECK_PROCESS (process, 0);
886 return XPROCESS (process)->inherit_coding_system_flag;
887}
888
889DEFUN ("process-kill-without-query", Fprocess_kill_without_query,
890 Sprocess_kill_without_query, 1, 2, 0,
891 "Say no query needed if PROCESS is running when Emacs is exited.\n\
892Optional second argument if non-nil says to require a query.\n\
893Value is t if a query was formerly required.")
894 (process, value)
895 register Lisp_Object process, value;
896{
897 Lisp_Object tem;
898
899 CHECK_PROCESS (process, 0);
900 tem = XPROCESS (process)->kill_without_query;
901 XPROCESS (process)->kill_without_query = Fnull (value);
902
903 return Fnull (tem);
904}
905
906DEFUN ("process-contact", Fprocess_contact, Sprocess_contact,
907 1, 1, 0,
908 "Return the contact info of PROCESS; t for a real child.\n\
909For a net connection, the value is a cons cell of the form (HOST SERVICE).")
910 (process)
911 register Lisp_Object process;
912{
913 CHECK_PROCESS (process, 0);
914 return XPROCESS (process)->childp;
915}
916
917#if 0 /* Turned off because we don't currently record this info
918 in the process. Perhaps add it. */
919DEFUN ("process-connection", Fprocess_connection, Sprocess_connection, 1, 1, 0,
920 "Return the connection type of PROCESS.\n\
921The value is nil for a pipe, t or `pty' for a pty, or `stream' for\n\
922a socket connection.")
923 (process)
924 Lisp_Object process;
925{
926 return XPROCESS (process)->type;
927}
928#endif
929\f
930Lisp_Object
931list_processes_1 ()
932{
933 register Lisp_Object tail, tem;
934 Lisp_Object proc, minspace, tem1;
935 register struct buffer *old = current_buffer;
936 register struct Lisp_Process *p;
937 register int state;
938 char tembuf[80];
939
940 XSETFASTINT (minspace, 1);
941
942 set_buffer_internal (XBUFFER (Vstandard_output));
943 Fbuffer_disable_undo (Vstandard_output);
944
945 current_buffer->truncate_lines = Qt;
946
947 write_string ("\
948Proc Status Buffer Tty Command\n\
949---- ------ ------ --- -------\n", -1);
950
951 for (tail = Vprocess_alist; !NILP (tail); tail = Fcdr (tail))
952 {
953 Lisp_Object symbol;
954
955 proc = Fcdr (Fcar (tail));
956 p = XPROCESS (proc);
957 if (NILP (p->childp))
958 continue;
959
960 Finsert (1, &p->name);
961 Findent_to (make_number (13), minspace);
962
963 if (!NILP (p->raw_status_low))
964 update_status (p);
965 symbol = p->status;
966 if (CONSP (p->status))
967 symbol = XCAR (p->status);
968
969
970 if (EQ (symbol, Qsignal))
971 {
972 Lisp_Object tem;
973 tem = Fcar (Fcdr (p->status));
974#ifdef VMS
975 if (XINT (tem) < NSIG)
976 write_string (sys_errlist [XINT (tem)], -1);
977 else
978#endif
979 Fprinc (symbol, Qnil);
980 }
981 else if (NETCONN_P (proc))
982 {
983 if (EQ (symbol, Qrun))
984 write_string ("open", -1);
985 else if (EQ (symbol, Qexit))
986 write_string ("closed", -1);
987 else
988 Fprinc (symbol, Qnil);
989 }
990 else
991 Fprinc (symbol, Qnil);
992
993 if (EQ (symbol, Qexit))
994 {
995 Lisp_Object tem;
996 tem = Fcar (Fcdr (p->status));
997 if (XFASTINT (tem))
998 {
999 sprintf (tembuf, " %d", (int) XFASTINT (tem));
1000 write_string (tembuf, -1);
1001 }
1002 }
1003
1004 if (EQ (symbol, Qsignal) || EQ (symbol, Qexit))
1005 remove_process (proc);
1006
1007 Findent_to (make_number (22), minspace);
1008 if (NILP (p->buffer))
1009 insert_string ("(none)");
1010 else if (NILP (XBUFFER (p->buffer)->name))
1011 insert_string ("(Killed)");
1012 else
1013 Finsert (1, &XBUFFER (p->buffer)->name);
1014
1015 Findent_to (make_number (37), minspace);
1016
1017 if (STRINGP (p->tty_name))
1018 Finsert (1, &p->tty_name);
1019 else
1020 insert_string ("(none)");
1021
1022 Findent_to (make_number (49), minspace);
1023
1024 if (NETCONN_P (proc))
1025 {
1026 sprintf (tembuf, "(network stream connection to %s)\n",
1027 XSTRING (XCAR (p->childp))->data);
1028 insert_string (tembuf);
1029 }
1030 else
1031 {
1032 tem = p->command;
1033 while (1)
1034 {
1035 tem1 = Fcar (tem);
1036 Finsert (1, &tem1);
1037 tem = Fcdr (tem);
1038 if (NILP (tem))
1039 break;
1040 insert_string (" ");
1041 }
1042 insert_string ("\n");
1043 }
1044 }
1045 return Qnil;
1046}
1047
1048DEFUN ("list-processes", Flist_processes, Slist_processes, 0, 0, "",
1049 "Display a list of all processes.\n\
1050Any process listed as exited or signaled is actually eliminated\n\
1051after the listing is made.")
1052 ()
1053{
1054 internal_with_output_to_temp_buffer ("*Process List*",
1055 list_processes_1, Qnil);
1056 return Qnil;
1057}
1058
1059DEFUN ("process-list", Fprocess_list, Sprocess_list, 0, 0, 0,
1060 "Return a list of all processes.")
1061 ()
1062{
1063 return Fmapcar (Qcdr, Vprocess_alist);
1064}
1065\f
1066/* Starting asynchronous inferior processes. */
1067
1068static Lisp_Object start_process_unwind ();
1069
1070DEFUN ("start-process", Fstart_process, Sstart_process, 3, MANY, 0,
1071 "Start a program in a subprocess. Return the process object for it.\n\
1072Args are NAME BUFFER PROGRAM &rest PROGRAM-ARGS\n\
1073NAME is name for process. It is modified if necessary to make it unique.\n\
1074BUFFER is the buffer or (buffer-name) to associate with the process.\n\
1075 Process output goes at end of that buffer, unless you specify\n\
1076 an output stream or filter function to handle the output.\n\
1077 BUFFER may be also nil, meaning that this process is not associated\n\
1078 with any buffer.\n\
1079Third arg is program file name. It is searched for in PATH.\n\
1080Remaining arguments are strings to give program as arguments.")
1081 (nargs, args)
1082 int nargs;
1083 register Lisp_Object *args;
1084{
1085 Lisp_Object buffer, name, program, proc, current_dir, tem;
1086#ifdef VMS
1087 register unsigned char *new_argv;
1088 int len;
1089#else
1090 register unsigned char **new_argv;
1091#endif
1092 register int i;
1093 int count = specpdl_ptr - specpdl;
1094
1095 buffer = args[1];
1096 if (!NILP (buffer))
1097 buffer = Fget_buffer_create (buffer);
1098
1099 /* Make sure that the child will be able to chdir to the current
1100 buffer's current directory, or its unhandled equivalent. We
1101 can't just have the child check for an error when it does the
1102 chdir, since it's in a vfork.
1103
1104 We have to GCPRO around this because Fexpand_file_name and
1105 Funhandled_file_name_directory might call a file name handling
1106 function. The argument list is protected by the caller, so all
1107 we really have to worry about is buffer. */
1108 {
1109 struct gcpro gcpro1, gcpro2;
1110
1111 current_dir = current_buffer->directory;
1112
1113 GCPRO2 (buffer, current_dir);
1114
1115 current_dir
1116 = expand_and_dir_to_file (Funhandled_file_name_directory (current_dir),
1117 Qnil);
1118 if (NILP (Ffile_accessible_directory_p (current_dir)))
1119 report_file_error ("Setting current directory",
1120 Fcons (current_buffer->directory, Qnil));
1121
1122 UNGCPRO;
1123 }
1124
1125 name = args[0];
1126 CHECK_STRING (name, 0);
1127
1128 program = args[2];
1129
1130 CHECK_STRING (program, 2);
1131
1132#ifdef VMS
1133 /* Make a one member argv with all args concatenated
1134 together separated by a blank. */
1135 len = STRING_BYTES (XSTRING (program)) + 2;
1136 for (i = 3; i < nargs; i++)
1137 {
1138 tem = args[i];
1139 CHECK_STRING (tem, i);
1140 len += STRING_BYTES (XSTRING (tem)) + 1; /* count the blank */
1141 }
1142 new_argv = (unsigned char *) alloca (len);
1143 strcpy (new_argv, XSTRING (program)->data);
1144 for (i = 3; i < nargs; i++)
1145 {
1146 tem = args[i];
1147 CHECK_STRING (tem, i);
1148 strcat (new_argv, " ");
1149 strcat (new_argv, XSTRING (tem)->data);
1150 }
1151 /* Need to add code here to check for program existence on VMS */
1152
1153#else /* not VMS */
1154 new_argv = (unsigned char **) alloca ((nargs - 1) * sizeof (char *));
1155
1156 /* If program file name is not absolute, search our path for it */
1157 if (!IS_DIRECTORY_SEP (XSTRING (program)->data[0])
1158 && !(XSTRING (program)->size > 1
1159 && IS_DEVICE_SEP (XSTRING (program)->data[1])))
1160 {
1161 struct gcpro gcpro1, gcpro2, gcpro3, gcpro4;
1162
1163 tem = Qnil;
1164 GCPRO4 (name, program, buffer, current_dir);
1165 openp (Vexec_path, program, EXEC_SUFFIXES, &tem, 1);
1166 UNGCPRO;
1167 if (NILP (tem))
1168 report_file_error ("Searching for program", Fcons (program, Qnil));
1169 tem = Fexpand_file_name (tem, Qnil);
1170 new_argv[0] = XSTRING (tem)->data;
1171 }
1172 else
1173 {
1174 if (!NILP (Ffile_directory_p (program)))
1175 error ("Specified program for new process is a directory");
1176
1177 new_argv[0] = XSTRING (program)->data;
1178 }
1179
1180 for (i = 3; i < nargs; i++)
1181 {
1182 tem = args[i];
1183 CHECK_STRING (tem, i);
1184 new_argv[i - 2] = XSTRING (tem)->data;
1185 }
1186 new_argv[i - 2] = 0;
1187#endif /* not VMS */
1188
1189 proc = make_process (name);
1190 /* If an error occurs and we can't start the process, we want to
1191 remove it from the process list. This means that each error
1192 check in create_process doesn't need to call remove_process
1193 itself; it's all taken care of here. */
1194 record_unwind_protect (start_process_unwind, proc);
1195
1196 XPROCESS (proc)->childp = Qt;
1197 XPROCESS (proc)->command_channel_p = Qnil;
1198 XPROCESS (proc)->buffer = buffer;
1199 XPROCESS (proc)->sentinel = Qnil;
1200 XPROCESS (proc)->filter = Qnil;
1201 XPROCESS (proc)->command = Flist (nargs - 2, args + 2);
1202
1203 /* Make the process marker point into the process buffer (if any). */
1204 if (!NILP (buffer))
1205 set_marker_both (XPROCESS (proc)->mark, buffer,
1206 BUF_ZV (XBUFFER (buffer)),
1207 BUF_ZV_BYTE (XBUFFER (buffer)));
1208
1209 {
1210 /* Decide coding systems for communicating with the process. Here
1211 we don't setup the structure coding_system nor pay attention to
1212 unibyte mode. They are done in create_process. */
1213
1214 /* Qt denotes we have not yet called Ffind_operation_coding_system. */
1215 Lisp_Object coding_systems = Qt;
1216 Lisp_Object val, *args2;
1217 struct gcpro gcpro1;
1218
1219 val = Vcoding_system_for_read;
1220 if (NILP (val))
1221 {
1222 args2 = (Lisp_Object *) alloca ((nargs + 1) * sizeof *args2);
1223 args2[0] = Qstart_process;
1224 for (i = 0; i < nargs; i++) args2[i + 1] = args[i];
1225 GCPRO1 (proc);
1226 coding_systems = Ffind_operation_coding_system (nargs + 1, args2);
1227 UNGCPRO;
1228 if (CONSP (coding_systems))
1229 val = XCAR (coding_systems);
1230 else if (CONSP (Vdefault_process_coding_system))
1231 val = XCAR (Vdefault_process_coding_system);
1232 }
1233 XPROCESS (proc)->decode_coding_system = val;
1234
1235 val = Vcoding_system_for_write;
1236 if (NILP (val))
1237 {
1238 if (EQ (coding_systems, Qt))
1239 {
1240 args2 = (Lisp_Object *) alloca ((nargs + 1) * sizeof args2);
1241 args2[0] = Qstart_process;
1242 for (i = 0; i < nargs; i++) args2[i + 1] = args[i];
1243 GCPRO1 (proc);
1244 coding_systems = Ffind_operation_coding_system (nargs + 1, args2);
1245 UNGCPRO;
1246 }
1247 if (CONSP (coding_systems))
1248 val = XCDR (coding_systems);
1249 else if (CONSP (Vdefault_process_coding_system))
1250 val = XCDR (Vdefault_process_coding_system);
1251 }
1252 XPROCESS (proc)->encode_coding_system = val;
1253 }
1254
1255 XPROCESS (proc)->decoding_buf = make_uninit_string (0);
1256 XPROCESS (proc)->decoding_carryover = make_number (0);
1257 XPROCESS (proc)->encoding_buf = make_uninit_string (0);
1258 XPROCESS (proc)->encoding_carryover = make_number (0);
1259
1260 XPROCESS (proc)->inherit_coding_system_flag
1261 = (NILP (buffer) || !inherit_process_coding_system
1262 ? Qnil : Qt);
1263
1264 create_process (proc, (char **) new_argv, current_dir);
1265
1266 return unbind_to (count, proc);
1267}
1268
1269/* This function is the unwind_protect form for Fstart_process. If
1270 PROC doesn't have its pid set, then we know someone has signaled
1271 an error and the process wasn't started successfully, so we should
1272 remove it from the process list. */
1273static Lisp_Object
1274start_process_unwind (proc)
1275 Lisp_Object proc;
1276{
1277 if (!PROCESSP (proc))
1278 abort ();
1279
1280 /* Was PROC started successfully? */
1281 if (XINT (XPROCESS (proc)->pid) <= 0)
1282 remove_process (proc);
1283
1284 return Qnil;
1285}
1286
1287
1288SIGTYPE
1289create_process_1 (signo)
1290 int signo;
1291{
1292#if defined (USG) && !defined (POSIX_SIGNALS)
1293 /* USG systems forget handlers when they are used;
1294 must reestablish each time */
1295 signal (signo, create_process_1);
1296#endif /* USG */
1297}
1298
1299#if 0 /* This doesn't work; see the note before sigchld_handler. */
1300#ifdef USG
1301#ifdef SIGCHLD
1302/* Mimic blocking of signals on system V, which doesn't really have it. */
1303
1304/* Nonzero means we got a SIGCHLD when it was supposed to be blocked. */
1305int sigchld_deferred;
1306
1307SIGTYPE
1308create_process_sigchld ()
1309{
1310 signal (SIGCHLD, create_process_sigchld);
1311
1312 sigchld_deferred = 1;
1313}
1314#endif
1315#endif
1316#endif
1317
1318#ifndef VMS /* VMS version of this function is in vmsproc.c. */
1319void
1320create_process (process, new_argv, current_dir)
1321 Lisp_Object process;
1322 char **new_argv;
1323 Lisp_Object current_dir;
1324{
1325 int pid, inchannel, outchannel;
1326 int sv[2];
1327#ifdef POSIX_SIGNALS
1328 sigset_t procmask;
1329 sigset_t blocked;
1330 struct sigaction sigint_action;
1331 struct sigaction sigquit_action;
1332#ifdef AIX
1333 struct sigaction sighup_action;
1334#endif
1335#else /* !POSIX_SIGNALS */
1336#ifdef SIGCHLD
1337 SIGTYPE (*sigchld)();
1338#endif
1339#endif /* !POSIX_SIGNALS */
1340 /* Use volatile to protect variables from being clobbered by longjmp. */
1341 volatile int forkin, forkout;
1342 volatile int pty_flag = 0;
1343 extern char **environ;
1344 Lisp_Object buffer = XPROCESS (process)->buffer;
1345
1346 inchannel = outchannel = -1;
1347
1348#ifdef HAVE_PTYS
1349 if (!NILP (Vprocess_connection_type))
1350 outchannel = inchannel = allocate_pty ();
1351
1352 if (inchannel >= 0)
1353 {
1354#ifndef USG
1355 /* On USG systems it does not work to open the pty's tty here
1356 and then close and reopen it in the child. */
1357#ifdef O_NOCTTY
1358 /* Don't let this terminal become our controlling terminal
1359 (in case we don't have one). */
1360 forkout = forkin = open (pty_name, O_RDWR | O_NOCTTY, 0);
1361#else
1362 forkout = forkin = open (pty_name, O_RDWR, 0);
1363#endif
1364 if (forkin < 0)
1365 report_file_error ("Opening pty", Qnil);
1366#else
1367 forkin = forkout = -1;
1368#endif /* not USG */
1369 pty_flag = 1;
1370 }
1371 else
1372#endif /* HAVE_PTYS */
1373#ifdef SKTPAIR
1374 {
1375 if (socketpair (AF_UNIX, SOCK_STREAM, 0, sv) < 0)
1376 report_file_error ("Opening socketpair", Qnil);
1377 outchannel = inchannel = sv[0];
1378 forkout = forkin = sv[1];
1379 }
1380#else /* not SKTPAIR */
1381 {
1382 int tem;
1383 tem = pipe (sv);
1384 if (tem < 0)
1385 report_file_error ("Creating pipe", Qnil);
1386 inchannel = sv[0];
1387 forkout = sv[1];
1388 tem = pipe (sv);
1389 if (tem < 0)
1390 {
1391 close (inchannel);
1392 close (forkout);
1393 report_file_error ("Creating pipe", Qnil);
1394 }
1395 outchannel = sv[1];
1396 forkin = sv[0];
1397 }
1398#endif /* not SKTPAIR */
1399
1400#if 0
1401 /* Replaced by close_process_descs */
1402 set_exclusive_use (inchannel);
1403 set_exclusive_use (outchannel);
1404#endif
1405
1406/* Stride people say it's a mystery why this is needed
1407 as well as the O_NDELAY, but that it fails without this. */
1408#if defined (STRIDE) || (defined (pfa) && defined (HAVE_PTYS))
1409 {
1410 int one = 1;
1411 ioctl (inchannel, FIONBIO, &one);
1412 }
1413#endif
1414
1415#ifdef O_NONBLOCK
1416 fcntl (inchannel, F_SETFL, O_NONBLOCK);
1417 fcntl (outchannel, F_SETFL, O_NONBLOCK);
1418#else
1419#ifdef O_NDELAY
1420 fcntl (inchannel, F_SETFL, O_NDELAY);
1421 fcntl (outchannel, F_SETFL, O_NDELAY);
1422#endif
1423#endif
1424
1425 /* Record this as an active process, with its channels.
1426 As a result, child_setup will close Emacs's side of the pipes. */
1427 chan_process[inchannel] = process;
1428 XSETINT (XPROCESS (process)->infd, inchannel);
1429 XSETINT (XPROCESS (process)->outfd, outchannel);
1430 /* Record the tty descriptor used in the subprocess. */
1431 if (forkin < 0)
1432 XPROCESS (process)->subtty = Qnil;
1433 else
1434 XSETFASTINT (XPROCESS (process)->subtty, forkin);
1435 XPROCESS (process)->pty_flag = (pty_flag ? Qt : Qnil);
1436 XPROCESS (process)->status = Qrun;
1437 if (!proc_decode_coding_system[inchannel])
1438 proc_decode_coding_system[inchannel]
1439 = (struct coding_system *) xmalloc (sizeof (struct coding_system));
1440 setup_coding_system (XPROCESS (process)->decode_coding_system,
1441 proc_decode_coding_system[inchannel]);
1442 if (!proc_encode_coding_system[outchannel])
1443 proc_encode_coding_system[outchannel]
1444 = (struct coding_system *) xmalloc (sizeof (struct coding_system));
1445 setup_coding_system (XPROCESS (process)->encode_coding_system,
1446 proc_encode_coding_system[outchannel]);
1447
1448 if (!NILP (buffer) && NILP (XBUFFER (buffer)->enable_multibyte_characters)
1449 || (NILP (buffer) && NILP (buffer_defaults.enable_multibyte_characters)))
1450 {
1451 /* In unibyte mode, character code conversion should not take
1452 place but EOL conversion should. So, setup raw-text or one
1453 of the subsidiary according to the information just setup. */
1454 if (!NILP (XPROCESS (process)->decode_coding_system))
1455 setup_raw_text_coding_system (proc_decode_coding_system[inchannel]);
1456 if (!NILP (XPROCESS (process)->encode_coding_system))
1457 setup_raw_text_coding_system (proc_encode_coding_system[outchannel]);
1458 }
1459
1460 if (CODING_REQUIRE_ENCODING (proc_encode_coding_system[outchannel]))
1461 {
1462 /* Here we encode arguments by the coding system used for
1463 sending data to the process. We don't support using
1464 different coding systems for encoding arguments and for
1465 encoding data sent to the process. */
1466 struct gcpro gcpro1;
1467 int i = 1;
1468 struct coding_system *coding = proc_encode_coding_system[outchannel];
1469
1470 coding->mode |= CODING_MODE_LAST_BLOCK;
1471 GCPRO1 (process);
1472 while (new_argv[i] != 0)
1473 {
1474 int len = strlen (new_argv[i]);
1475 int size = encoding_buffer_size (coding, len);
1476 unsigned char *buf = (unsigned char *) alloca (size);
1477
1478 encode_coding (coding, (unsigned char *)new_argv[i], buf, len, size);
1479 buf[coding->produced] = 0;
1480 /* We don't have to free new_argv[i] because it points to a
1481 Lisp string given as an argument to `start-process'. */
1482 new_argv[i++] = (char *) buf;
1483 }
1484 UNGCPRO;
1485 coding->mode &= ~CODING_MODE_LAST_BLOCK;
1486 }
1487
1488 /* Delay interrupts until we have a chance to store
1489 the new fork's pid in its process structure */
1490#ifdef POSIX_SIGNALS
1491 sigemptyset (&blocked);
1492#ifdef SIGCHLD
1493 sigaddset (&blocked, SIGCHLD);
1494#endif
1495#ifdef HAVE_VFORK
1496 /* On many hosts (e.g. Solaris 2.4), if a vforked child calls `signal',
1497 this sets the parent's signal handlers as well as the child's.
1498 So delay all interrupts whose handlers the child might munge,
1499 and record the current handlers so they can be restored later. */
1500 sigaddset (&blocked, SIGINT ); sigaction (SIGINT , 0, &sigint_action );
1501 sigaddset (&blocked, SIGQUIT); sigaction (SIGQUIT, 0, &sigquit_action);
1502#ifdef AIX
1503 sigaddset (&blocked, SIGHUP ); sigaction (SIGHUP , 0, &sighup_action );
1504#endif
1505#endif /* HAVE_VFORK */
1506 sigprocmask (SIG_BLOCK, &blocked, &procmask);
1507#else /* !POSIX_SIGNALS */
1508#ifdef SIGCHLD
1509#ifdef BSD4_1
1510 sighold (SIGCHLD);
1511#else /* not BSD4_1 */
1512#if defined (BSD_SYSTEM) || defined (UNIPLUS) || defined (HPUX)
1513 sigsetmask (sigmask (SIGCHLD));
1514#else /* ordinary USG */
1515#if 0
1516 sigchld_deferred = 0;
1517 sigchld = signal (SIGCHLD, create_process_sigchld);
1518#endif
1519#endif /* ordinary USG */
1520#endif /* not BSD4_1 */
1521#endif /* SIGCHLD */
1522#endif /* !POSIX_SIGNALS */
1523
1524 FD_SET (inchannel, &input_wait_mask);
1525 FD_SET (inchannel, &non_keyboard_wait_mask);
1526 if (inchannel > max_process_desc)
1527 max_process_desc = inchannel;
1528
1529 /* Until we store the proper pid, enable sigchld_handler
1530 to recognize an unknown pid as standing for this process.
1531 It is very important not to let this `marker' value stay
1532 in the table after this function has returned; if it does
1533 it might cause call-process to hang and subsequent asynchronous
1534 processes to get their return values scrambled. */
1535 XSETINT (XPROCESS (process)->pid, -1);
1536
1537 BLOCK_INPUT;
1538
1539 {
1540 /* child_setup must clobber environ on systems with true vfork.
1541 Protect it from permanent change. */
1542 char **save_environ = environ;
1543
1544 current_dir = ENCODE_FILE (current_dir);
1545
1546#ifndef WINDOWSNT
1547 pid = vfork ();
1548 if (pid == 0)
1549#endif /* not WINDOWSNT */
1550 {
1551 int xforkin = forkin;
1552 int xforkout = forkout;
1553
1554#if 0 /* This was probably a mistake--it duplicates code later on,
1555 but fails to handle all the cases. */
1556 /* Make sure SIGCHLD is not blocked in the child. */
1557 sigsetmask (SIGEMPTYMASK);
1558#endif
1559
1560 /* Make the pty be the controlling terminal of the process. */
1561#ifdef HAVE_PTYS
1562 /* First, disconnect its current controlling terminal. */
1563#ifdef HAVE_SETSID
1564 /* We tried doing setsid only if pty_flag, but it caused
1565 process_set_signal to fail on SGI when using a pipe. */
1566 setsid ();
1567 /* Make the pty's terminal the controlling terminal. */
1568 if (pty_flag)
1569 {
1570#ifdef TIOCSCTTY
1571 /* We ignore the return value
1572 because faith@cs.unc.edu says that is necessary on Linux. */
1573 ioctl (xforkin, TIOCSCTTY, 0);
1574#endif
1575 }
1576#else /* not HAVE_SETSID */
1577#ifdef USG
1578 /* It's very important to call setpgrp here and no time
1579 afterwards. Otherwise, we lose our controlling tty which
1580 is set when we open the pty. */
1581 setpgrp ();
1582#endif /* USG */
1583#endif /* not HAVE_SETSID */
1584#if defined (HAVE_TERMIOS) && defined (LDISC1)
1585 if (pty_flag && xforkin >= 0)
1586 {
1587 struct termios t;
1588 tcgetattr (xforkin, &t);
1589 t.c_lflag = LDISC1;
1590 if (tcsetattr (xforkin, TCSANOW, &t) < 0)
1591 write (1, "create_process/tcsetattr LDISC1 failed\n", 39);
1592 }
1593#else
1594#if defined (NTTYDISC) && defined (TIOCSETD)
1595 if (pty_flag && xforkin >= 0)
1596 {
1597 /* Use new line discipline. */
1598 int ldisc = NTTYDISC;
1599 ioctl (xforkin, TIOCSETD, &ldisc);
1600 }
1601#endif
1602#endif
1603#ifdef TIOCNOTTY
1604 /* In 4.3BSD, the TIOCSPGRP bug has been fixed, and now you
1605 can do TIOCSPGRP only to the process's controlling tty. */
1606 if (pty_flag)
1607 {
1608 /* I wonder: would just ioctl (0, TIOCNOTTY, 0) work here?
1609 I can't test it since I don't have 4.3. */
1610 int j = open ("/dev/tty", O_RDWR, 0);
1611 ioctl (j, TIOCNOTTY, 0);
1612 close (j);
1613#ifndef USG
1614 /* In order to get a controlling terminal on some versions
1615 of BSD, it is necessary to put the process in pgrp 0
1616 before it opens the terminal. */
1617#ifdef HAVE_SETPGID
1618 setpgid (0, 0);
1619#else
1620 setpgrp (0, 0);
1621#endif
1622#endif
1623 }
1624#endif /* TIOCNOTTY */
1625
1626#if !defined (RTU) && !defined (UNIPLUS) && !defined (DONT_REOPEN_PTY)
1627/*** There is a suggestion that this ought to be a
1628 conditional on TIOCSPGRP,
1629 or !(defined (HAVE_SETSID) && defined (TIOCSCTTY)).
1630 Trying the latter gave the wrong results on Debian GNU/Linux 1.1;
1631 that system does seem to need this code, even though
1632 both HAVE_SETSID and TIOCSCTTY are defined. */
1633 /* Now close the pty (if we had it open) and reopen it.
1634 This makes the pty the controlling terminal of the subprocess. */
1635 if (pty_flag)
1636 {
1637#ifdef SET_CHILD_PTY_PGRP
1638 int pgrp = getpid ();
1639#endif
1640
1641 /* I wonder if close (open (pty_name, ...)) would work? */
1642 if (xforkin >= 0)
1643 close (xforkin);
1644 xforkout = xforkin = open (pty_name, O_RDWR, 0);
1645
1646 if (xforkin < 0)
1647 {
1648 write (1, "Couldn't open the pty terminal ", 31);
1649 write (1, pty_name, strlen (pty_name));
1650 write (1, "\n", 1);
1651 _exit (1);
1652 }
1653
1654#ifdef SET_CHILD_PTY_PGRP
1655 ioctl (xforkin, TIOCSPGRP, &pgrp);
1656 ioctl (xforkout, TIOCSPGRP, &pgrp);
1657#endif
1658 }
1659#endif /* not UNIPLUS and not RTU and not DONT_REOPEN_PTY */
1660
1661#ifdef SETUP_SLAVE_PTY
1662 if (pty_flag)
1663 {
1664 SETUP_SLAVE_PTY;
1665 }
1666#endif /* SETUP_SLAVE_PTY */
1667#ifdef AIX
1668 /* On AIX, we've disabled SIGHUP above once we start a child on a pty.
1669 Now reenable it in the child, so it will die when we want it to. */
1670 if (pty_flag)
1671 signal (SIGHUP, SIG_DFL);
1672#endif
1673#endif /* HAVE_PTYS */
1674
1675 signal (SIGINT, SIG_DFL);
1676 signal (SIGQUIT, SIG_DFL);
1677
1678 /* Stop blocking signals in the child. */
1679#ifdef POSIX_SIGNALS
1680 sigprocmask (SIG_SETMASK, &procmask, 0);
1681#else /* !POSIX_SIGNALS */
1682#ifdef SIGCHLD
1683#ifdef BSD4_1
1684 sigrelse (SIGCHLD);
1685#else /* not BSD4_1 */
1686#if defined (BSD_SYSTEM) || defined (UNIPLUS) || defined (HPUX)
1687 sigsetmask (SIGEMPTYMASK);
1688#else /* ordinary USG */
1689#if 0
1690 signal (SIGCHLD, sigchld);
1691#endif
1692#endif /* ordinary USG */
1693#endif /* not BSD4_1 */
1694#endif /* SIGCHLD */
1695#endif /* !POSIX_SIGNALS */
1696
1697 if (pty_flag)
1698 child_setup_tty (xforkout);
1699#ifdef WINDOWSNT
1700 pid = child_setup (xforkin, xforkout, xforkout,
1701 new_argv, 1, current_dir);
1702#else /* not WINDOWSNT */
1703 child_setup (xforkin, xforkout, xforkout,
1704 new_argv, 1, current_dir);
1705#endif /* not WINDOWSNT */
1706 }
1707 environ = save_environ;
1708 }
1709
1710 UNBLOCK_INPUT;
1711
1712 /* This runs in the Emacs process. */
1713 if (pid < 0)
1714 {
1715 if (forkin >= 0)
1716 close (forkin);
1717 if (forkin != forkout && forkout >= 0)
1718 close (forkout);
1719 }
1720 else
1721 {
1722 /* vfork succeeded. */
1723 XSETFASTINT (XPROCESS (process)->pid, pid);
1724
1725#ifdef WINDOWSNT
1726 register_child (pid, inchannel);
1727#endif /* WINDOWSNT */
1728
1729 /* If the subfork execv fails, and it exits,
1730 this close hangs. I don't know why.
1731 So have an interrupt jar it loose. */
1732 stop_polling ();
1733 signal (SIGALRM, create_process_1);
1734 alarm (1);
1735 XPROCESS (process)->subtty = Qnil;
1736 if (forkin >= 0)
1737 close (forkin);
1738 alarm (0);
1739 start_polling ();
1740 if (forkin != forkout && forkout >= 0)
1741 close (forkout);
1742
1743#ifdef HAVE_PTYS
1744 if (pty_flag)
1745 XPROCESS (process)->tty_name = build_string (pty_name);
1746 else
1747#endif
1748 XPROCESS (process)->tty_name = Qnil;
1749 }
1750
1751 /* Restore the signal state whether vfork succeeded or not.
1752 (We will signal an error, below, if it failed.) */
1753#ifdef POSIX_SIGNALS
1754#ifdef HAVE_VFORK
1755 /* Restore the parent's signal handlers. */
1756 sigaction (SIGINT, &sigint_action, 0);
1757 sigaction (SIGQUIT, &sigquit_action, 0);
1758#ifdef AIX
1759 sigaction (SIGHUP, &sighup_action, 0);
1760#endif
1761#endif /* HAVE_VFORK */
1762 /* Stop blocking signals in the parent. */
1763 sigprocmask (SIG_SETMASK, &procmask, 0);
1764#else /* !POSIX_SIGNALS */
1765#ifdef SIGCHLD
1766#ifdef BSD4_1
1767 sigrelse (SIGCHLD);
1768#else /* not BSD4_1 */
1769#if defined (BSD_SYSTEM) || defined (UNIPLUS) || defined (HPUX)
1770 sigsetmask (SIGEMPTYMASK);
1771#else /* ordinary USG */
1772#if 0
1773 signal (SIGCHLD, sigchld);
1774 /* Now really handle any of these signals
1775 that came in during this function. */
1776 if (sigchld_deferred)
1777 kill (getpid (), SIGCHLD);
1778#endif
1779#endif /* ordinary USG */
1780#endif /* not BSD4_1 */
1781#endif /* SIGCHLD */
1782#endif /* !POSIX_SIGNALS */
1783
1784 /* Now generate the error if vfork failed. */
1785 if (pid < 0)
1786 report_file_error ("Doing vfork", Qnil);
1787}
1788#endif /* not VMS */
1789
1790#ifdef HAVE_SOCKETS
1791
1792/* open a TCP network connection to a given HOST/SERVICE. Treated
1793 exactly like a normal process when reading and writing. Only
1794 differences are in status display and process deletion. A network
1795 connection has no PID; you cannot signal it. All you can do is
1796 deactivate and close it via delete-process */
1797
1798DEFUN ("open-network-stream", Fopen_network_stream, Sopen_network_stream,
1799 4, 4, 0,
1800 "Open a TCP connection for a service to a host.\n\
1801Returns a subprocess-object to represent the connection.\n\
1802Input and output work as for subprocesses; `delete-process' closes it.\n\
1803Args are NAME BUFFER HOST SERVICE.\n\
1804NAME is name for process. It is modified if necessary to make it unique.\n\
1805BUFFER is the buffer (or buffer-name) to associate with the process.\n\
1806 Process output goes at end of that buffer, unless you specify\n\
1807 an output stream or filter function to handle the output.\n\
1808 BUFFER may be also nil, meaning that this process is not associated\n\
1809 with any buffer\n\
1810Third arg is name of the host to connect to, or its IP address.\n\
1811Fourth arg SERVICE is name of the service desired, or an integer\n\
1812 specifying a port number to connect to.")
1813 (name, buffer, host, service)
1814 Lisp_Object name, buffer, host, service;
1815{
1816 Lisp_Object proc;
1817 register int i;
1818
1819#ifndef HAVE_GETADDRINFO
1820 struct sockaddr_in address;
1821 struct servent *svc_info;
1822 struct hostent *host_info_ptr, host_info;
1823 char *(addr_list[2]);
1824 IN_ADDR numeric_addr;
1825 struct hostent host_info_fixed;
1826 int port;
1827#else /* HAVE_GETADDRINFO */
1828 struct addrinfo hints, *res, *lres;
1829 int ret = 0;
1830 int xerrno = 0;
1831 char *portstring, portbuf[128];
1832#endif /* HAVE_GETADDRINFO */
1833 int s = -1, outch, inch;
1834 struct gcpro gcpro1, gcpro2, gcpro3, gcpro4;
1835 int retry = 0;
1836 int count = specpdl_ptr - specpdl;
1837
1838#ifdef WINDOWSNT
1839 /* Ensure socket support is loaded if available. */
1840 init_winsock (TRUE);
1841#endif
1842
1843 GCPRO4 (name, buffer, host, service);
1844 CHECK_STRING (name, 0);
1845 CHECK_STRING (host, 0);
1846
1847#ifdef HAVE_GETADDRINFO
1848 /*
1849 * SERVICE can either be a string or int.
1850 * Convert to a C string for later use by getaddrinfo.
1851 */
1852 if (INTEGERP (service))
1853 {
1854 sprintf (portbuf, "%d", XINT (service));
1855 portstring = portbuf;
1856 }
1857 else
1858 {
1859 CHECK_STRING (service, 0);
1860 portstring = XSTRING (service)->data;
1861 }
1862#else /* ! HAVE_GETADDRINFO */
1863 if (INTEGERP (service))
1864 port = htons ((unsigned short) XINT (service));
1865 else
1866 {
1867 CHECK_STRING (service, 0);
1868 svc_info = getservbyname (XSTRING (service)->data, "tcp");
1869 if (svc_info == 0)
1870 error ("Unknown service \"%s\"", XSTRING (service)->data);
1871 port = svc_info->s_port;
1872 }
1873#endif /* ! HAVE_GETADDRINFO */
1874
1875
1876 /* Slow down polling to every ten seconds.
1877 Some kernels have a bug which causes retrying connect to fail
1878 after a connect. Polling can interfere with gethostbyname too. */
1879#ifdef POLL_FOR_INPUT
1880 bind_polling_period (10);
1881#endif
1882
1883#ifndef TERM
1884#ifdef HAVE_GETADDRINFO
1885 {
1886 immediate_quit = 1;
1887 QUIT;
1888 memset (&hints, 0, sizeof (hints));
1889 hints.ai_flags = 0;
1890 hints.ai_family = AF_UNSPEC;
1891 hints.ai_socktype = SOCK_STREAM;
1892 hints.ai_protocol = 0;
1893 ret = getaddrinfo (XSTRING (host)->data, portstring, &hints, &res);
1894 if (ret)
1895 {
1896 error ("%s/%s %s", XSTRING (host)->data, portstring,
1897 gai_strerror (ret));
1898 }
1899 immediate_quit = 0;
1900 }
1901
1902 for (lres = res; lres; lres = lres->ai_next)
1903 {
1904 s = socket (lres->ai_family, lres->ai_socktype, lres->ai_protocol);
1905 if (s < 0)
1906 continue;
1907
1908 /* Kernel bugs (on Ultrix at least) cause lossage (not just EINTR)
1909 when connect is interrupted. So let's not let it get interrupted.
1910 Note we do not turn off polling, because polling is only used
1911 when not interrupt_input, and thus not normally used on the systems
1912 which have this bug. On systems which use polling, there's no way
1913 to quit if polling is turned off. */
1914 if (interrupt_input)
1915 unrequest_sigio ();
1916
1917 immediate_quit = 1;
1918 QUIT;
1919
1920 ret = connect (s, lres->ai_addr, lres->ai_addrlen);
1921 if (ret == 0)
1922 break;
1923 close (s);
1924 s = -1;
1925 }
1926
1927 freeaddrinfo (res);
1928 if (s < 0)
1929 {
1930 if (interrupt_input)
1931 request_sigio ();
1932
1933 errno = xerrno;
1934 report_file_error ("connection failed",
1935 Fcons (host, Fcons (name, Qnil)));
1936 }
1937#else /* ! HAVE_GETADDRINFO */
1938
1939 while (1)
1940 {
1941#ifdef TRY_AGAIN
1942 h_errno = 0;
1943#endif
1944 immediate_quit = 1;
1945 QUIT;
1946 host_info_ptr = gethostbyname (XSTRING (host)->data);
1947 immediate_quit = 0;
1948#ifdef TRY_AGAIN
1949 if (! (host_info_ptr == 0 && h_errno == TRY_AGAIN))
1950#endif
1951 break;
1952 Fsleep_for (make_number (1), Qnil);
1953 }
1954 if (host_info_ptr == 0)
1955 /* Attempt to interpret host as numeric inet address */
1956 {
1957 numeric_addr = inet_addr ((char *) XSTRING (host)->data);
1958 if (NUMERIC_ADDR_ERROR)
1959 error ("Unknown host \"%s\"", XSTRING (host)->data);
1960
1961 host_info_ptr = &host_info;
1962 host_info.h_name = 0;
1963 host_info.h_aliases = 0;
1964 host_info.h_addrtype = AF_INET;
1965#ifdef h_addr
1966 /* Older machines have only one address slot called h_addr.
1967 Newer machines have h_addr_list, but #define h_addr to
1968 be its first element. */
1969 host_info.h_addr_list = &(addr_list[0]);
1970#endif
1971 host_info.h_addr = (char*)(&numeric_addr);
1972 addr_list[1] = 0;
1973 /* numeric_addr isn't null-terminated; it has fixed length. */
1974 host_info.h_length = sizeof (numeric_addr);
1975 }
1976
1977 bzero (&address, sizeof address);
1978 bcopy (host_info_ptr->h_addr, (char *) &address.sin_addr,
1979 host_info_ptr->h_length);
1980 address.sin_family = host_info_ptr->h_addrtype;
1981 address.sin_port = port;
1982
1983 s = socket (host_info_ptr->h_addrtype, SOCK_STREAM, 0);
1984 if (s < 0)
1985 report_file_error ("error creating socket", Fcons (name, Qnil));
1986
1987 /* Kernel bugs (on Ultrix at least) cause lossage (not just EINTR)
1988 when connect is interrupted. So let's not let it get interrupted.
1989 Note we do not turn off polling, because polling is only used
1990 when not interrupt_input, and thus not normally used on the systems
1991 which have this bug. On systems which use polling, there's no way
1992 to quit if polling is turned off. */
1993 if (interrupt_input)
1994 unrequest_sigio ();
1995
1996 loop:
1997
1998 immediate_quit = 1;
1999 QUIT;
2000
2001 if (connect (s, (struct sockaddr *) &address, sizeof address) == -1
2002 && errno != EISCONN)
2003 {
2004 int xerrno = errno;
2005
2006 immediate_quit = 0;
2007
2008 if (errno == EINTR)
2009 goto loop;
2010 if (errno == EADDRINUSE && retry < 20)
2011 {
2012 /* A delay here is needed on some FreeBSD systems,
2013 and it is harmless, since this retrying takes time anyway
2014 and should be infrequent. */
2015 Fsleep_for (make_number (1), Qnil);
2016 retry++;
2017 goto loop;
2018 }
2019
2020 close (s);
2021
2022 if (interrupt_input)
2023 request_sigio ();
2024
2025 errno = xerrno;
2026 report_file_error ("connection failed",
2027 Fcons (host, Fcons (name, Qnil)));
2028 }
2029#endif /* ! HAVE_GETADDRINFO */
2030
2031 immediate_quit = 0;
2032
2033#ifdef POLL_FOR_INPUT
2034 unbind_to (count, Qnil);
2035#endif
2036
2037 if (interrupt_input)
2038 request_sigio ();
2039
2040#else /* TERM */
2041 s = connect_server (0);
2042 if (s < 0)
2043 report_file_error ("error creating socket", Fcons (name, Qnil));
2044 send_command (s, C_PORT, 0, "%s:%d", XSTRING (host)->data, ntohs (port));
2045 send_command (s, C_DUMB, 1, 0);
2046#endif /* TERM */
2047
2048 inch = s;
2049 outch = s;
2050
2051 if (!NILP (buffer))
2052 buffer = Fget_buffer_create (buffer);
2053 proc = make_process (name);
2054
2055 chan_process[inch] = proc;
2056
2057#ifdef O_NONBLOCK
2058 fcntl (inch, F_SETFL, O_NONBLOCK);
2059#else
2060#ifdef O_NDELAY
2061 fcntl (inch, F_SETFL, O_NDELAY);
2062#endif
2063#endif
2064
2065 XPROCESS (proc)->childp = Fcons (host, Fcons (service, Qnil));
2066 XPROCESS (proc)->command_channel_p = Qnil;
2067 XPROCESS (proc)->buffer = buffer;
2068 XPROCESS (proc)->sentinel = Qnil;
2069 XPROCESS (proc)->filter = Qnil;
2070 XPROCESS (proc)->command = Qnil;
2071 XPROCESS (proc)->pid = Qnil;
2072 XSETINT (XPROCESS (proc)->infd, inch);
2073 XSETINT (XPROCESS (proc)->outfd, outch);
2074 XPROCESS (proc)->status = Qrun;
2075 FD_SET (inch, &input_wait_mask);
2076 FD_SET (inch, &non_keyboard_wait_mask);
2077 if (inch > max_process_desc)
2078 max_process_desc = inch;
2079
2080 {
2081 /* Setup coding systems for communicating with the network stream. */
2082 struct gcpro gcpro1;
2083 /* Qt denotes we have not yet called Ffind_operation_coding_system. */
2084 Lisp_Object coding_systems = Qt;
2085 Lisp_Object args[5], val;
2086
2087 if (!NILP (Vcoding_system_for_read))
2088 val = Vcoding_system_for_read;
2089 else if (!NILP (buffer) && NILP (XBUFFER (buffer)->enable_multibyte_characters)
2090 || NILP (buffer) && NILP (buffer_defaults.enable_multibyte_characters))
2091 /* We dare not decode end-of-line format by setting VAL to
2092 Qraw_text, because the existing Emacs Lisp libraries
2093 assume that they receive bare code including a sequene of
2094 CR LF. */
2095 val = Qnil;
2096 else
2097 {
2098 args[0] = Qopen_network_stream, args[1] = name,
2099 args[2] = buffer, args[3] = host, args[4] = service;
2100 GCPRO1 (proc);
2101 coding_systems = Ffind_operation_coding_system (5, args);
2102 UNGCPRO;
2103 if (CONSP (coding_systems))
2104 val = XCAR (coding_systems);
2105 else if (CONSP (Vdefault_process_coding_system))
2106 val = XCAR (Vdefault_process_coding_system);
2107 else
2108 val = Qnil;
2109 }
2110 XPROCESS (proc)->decode_coding_system = val;
2111
2112 if (!NILP (Vcoding_system_for_write))
2113 val = Vcoding_system_for_write;
2114 else if (NILP (current_buffer->enable_multibyte_characters))
2115 val = Qnil;
2116 else
2117 {
2118 if (EQ (coding_systems, Qt))
2119 {
2120 args[0] = Qopen_network_stream, args[1] = name,
2121 args[2] = buffer, args[3] = host, args[4] = service;
2122 GCPRO1 (proc);
2123 coding_systems = Ffind_operation_coding_system (5, args);
2124 UNGCPRO;
2125 }
2126 if (CONSP (coding_systems))
2127 val = XCDR (coding_systems);
2128 else if (CONSP (Vdefault_process_coding_system))
2129 val = XCDR (Vdefault_process_coding_system);
2130 else
2131 val = Qnil;
2132 }
2133 XPROCESS (proc)->encode_coding_system = val;
2134 }
2135
2136 if (!proc_decode_coding_system[inch])
2137 proc_decode_coding_system[inch]
2138 = (struct coding_system *) xmalloc (sizeof (struct coding_system));
2139 setup_coding_system (XPROCESS (proc)->decode_coding_system,
2140 proc_decode_coding_system[inch]);
2141 if (!proc_encode_coding_system[outch])
2142 proc_encode_coding_system[outch]
2143 = (struct coding_system *) xmalloc (sizeof (struct coding_system));
2144 setup_coding_system (XPROCESS (proc)->encode_coding_system,
2145 proc_encode_coding_system[outch]);
2146
2147 XPROCESS (proc)->decoding_buf = make_uninit_string (0);
2148 XPROCESS (proc)->decoding_carryover = make_number (0);
2149 XPROCESS (proc)->encoding_buf = make_uninit_string (0);
2150 XPROCESS (proc)->encoding_carryover = make_number (0);
2151
2152 XPROCESS (proc)->inherit_coding_system_flag
2153 = (NILP (buffer) || !inherit_process_coding_system
2154 ? Qnil : Qt);
2155
2156 UNGCPRO;
2157 return proc;
2158}
2159#endif /* HAVE_SOCKETS */
2160
2161void
2162deactivate_process (proc)
2163 Lisp_Object proc;
2164{
2165 register int inchannel, outchannel;
2166 register struct Lisp_Process *p = XPROCESS (proc);
2167
2168 inchannel = XINT (p->infd);
2169 outchannel = XINT (p->outfd);
2170
2171 if (inchannel >= 0)
2172 {
2173 /* Beware SIGCHLD hereabouts. */
2174 flush_pending_output (inchannel);
2175#ifdef VMS
2176 {
2177 VMS_PROC_STUFF *get_vms_process_pointer (), *vs;
2178 sys$dassgn (outchannel);
2179 vs = get_vms_process_pointer (p->pid);
2180 if (vs)
2181 give_back_vms_process_stuff (vs);
2182 }
2183#else
2184 close (inchannel);
2185 if (outchannel >= 0 && outchannel != inchannel)
2186 close (outchannel);
2187#endif
2188
2189 XSETINT (p->infd, -1);
2190 XSETINT (p->outfd, -1);
2191 chan_process[inchannel] = Qnil;
2192 FD_CLR (inchannel, &input_wait_mask);
2193 FD_CLR (inchannel, &non_keyboard_wait_mask);
2194 if (inchannel == max_process_desc)
2195 {
2196 int i;
2197 /* We just closed the highest-numbered process input descriptor,
2198 so recompute the highest-numbered one now. */
2199 max_process_desc = 0;
2200 for (i = 0; i < MAXDESC; i++)
2201 if (!NILP (chan_process[i]))
2202 max_process_desc = i;
2203 }
2204 }
2205}
2206
2207/* Close all descriptors currently in use for communication
2208 with subprocess. This is used in a newly-forked subprocess
2209 to get rid of irrelevant descriptors. */
2210
2211void
2212close_process_descs ()
2213{
2214#ifndef WINDOWSNT
2215 int i;
2216 for (i = 0; i < MAXDESC; i++)
2217 {
2218 Lisp_Object process;
2219 process = chan_process[i];
2220 if (!NILP (process))
2221 {
2222 int in = XINT (XPROCESS (process)->infd);
2223 int out = XINT (XPROCESS (process)->outfd);
2224 if (in >= 0)
2225 close (in);
2226 if (out >= 0 && in != out)
2227 close (out);
2228 }
2229 }
2230#endif
2231}
2232\f
2233DEFUN ("accept-process-output", Faccept_process_output, Saccept_process_output,
2234 0, 3, 0,
2235 "Allow any pending output from subprocesses to be read by Emacs.\n\
2236It is read into the process' buffers or given to their filter functions.\n\
2237Non-nil arg PROCESS means do not return until some output has been received\n\
2238from PROCESS.\n\
2239Non-nil second arg TIMEOUT and third arg TIMEOUT-MSECS are number of\n\
2240seconds and microseconds to wait; return after that much time whether\n\
2241or not there is input.\n\
2242Return non-nil iff we received any output before the timeout expired.")
2243 (process, timeout, timeout_msecs)
2244 register Lisp_Object process, timeout, timeout_msecs;
2245{
2246 int seconds;
2247 int useconds;
2248
2249 if (! NILP (process))
2250 CHECK_PROCESS (process, 0);
2251
2252 if (! NILP (timeout_msecs))
2253 {
2254 CHECK_NUMBER (timeout_msecs, 2);
2255 useconds = XINT (timeout_msecs);
2256 if (!INTEGERP (timeout))
2257 XSETINT (timeout, 0);
2258
2259 {
2260 int carry = useconds / 1000000;
2261
2262 XSETINT (timeout, XINT (timeout) + carry);
2263 useconds -= carry * 1000000;
2264
2265 /* I think this clause is necessary because C doesn't
2266 guarantee a particular rounding direction for negative
2267 integers. */
2268 if (useconds < 0)
2269 {
2270 XSETINT (timeout, XINT (timeout) - 1);
2271 useconds += 1000000;
2272 }
2273 }
2274 }
2275 else
2276 useconds = 0;
2277
2278 if (! NILP (timeout))
2279 {
2280 CHECK_NUMBER (timeout, 1);
2281 seconds = XINT (timeout);
2282 if (seconds < 0 || (seconds == 0 && useconds == 0))
2283 seconds = -1;
2284 }
2285 else
2286 {
2287 if (NILP (process))
2288 seconds = -1;
2289 else
2290 seconds = 0;
2291 }
2292
2293 if (NILP (process))
2294 XSETFASTINT (process, 0);
2295
2296 return
2297 (wait_reading_process_input (seconds, useconds, process, 0)
2298 ? Qt : Qnil);
2299}
2300
2301/* This variable is different from waiting_for_input in keyboard.c.
2302 It is used to communicate to a lisp process-filter/sentinel (via the
2303 function Fwaiting_for_user_input_p below) whether emacs was waiting
2304 for user-input when that process-filter was called.
2305 waiting_for_input cannot be used as that is by definition 0 when
2306 lisp code is being evalled.
2307 This is also used in record_asynch_buffer_change.
2308 For that purpose, this must be 0
2309 when not inside wait_reading_process_input. */
2310static int waiting_for_user_input_p;
2311
2312/* This is here so breakpoints can be put on it. */
2313static void
2314wait_reading_process_input_1 ()
2315{
2316}
2317
2318/* Read and dispose of subprocess output while waiting for timeout to
2319 elapse and/or keyboard input to be available.
2320
2321 TIME_LIMIT is:
2322 timeout in seconds, or
2323 zero for no limit, or
2324 -1 means gobble data immediately available but don't wait for any.
2325
2326 MICROSECS is:
2327 an additional duration to wait, measured in microseconds.
2328 If this is nonzero and time_limit is 0, then the timeout
2329 consists of MICROSECS only.
2330
2331 READ_KBD is a lisp value:
2332 0 to ignore keyboard input, or
2333 1 to return when input is available, or
2334 -1 meaning caller will actually read the input, so don't throw to
2335 the quit handler, or
2336 a cons cell, meaning wait until its car is non-nil
2337 (and gobble terminal input into the buffer if any arrives), or
2338 a process object, meaning wait until something arrives from that
2339 process. The return value is true iff we read some input from
2340 that process.
2341
2342 DO_DISPLAY != 0 means redisplay should be done to show subprocess
2343 output that arrives.
2344
2345 If READ_KBD is a pointer to a struct Lisp_Process, then the
2346 function returns true iff we received input from that process
2347 before the timeout elapsed.
2348 Otherwise, return true iff we received input from any process. */
2349
2350int
2351wait_reading_process_input (time_limit, microsecs, read_kbd, do_display)
2352 int time_limit, microsecs;
2353 Lisp_Object read_kbd;
2354 int do_display;
2355{
2356 register int channel, nfds, m;
2357 static SELECT_TYPE Available;
2358 int xerrno;
2359 Lisp_Object proc;
2360 EMACS_TIME timeout, end_time, garbage;
2361 SELECT_TYPE Atemp;
2362 int wait_channel = -1;
2363 struct Lisp_Process *wait_proc = 0;
2364 int got_some_input = 0;
2365 Lisp_Object *wait_for_cell = 0;
2366
2367 FD_ZERO (&Available);
2368
2369 /* If read_kbd is a process to watch, set wait_proc and wait_channel
2370 accordingly. */
2371 if (PROCESSP (read_kbd))
2372 {
2373 wait_proc = XPROCESS (read_kbd);
2374 wait_channel = XINT (wait_proc->infd);
2375 XSETFASTINT (read_kbd, 0);
2376 }
2377
2378 /* If waiting for non-nil in a cell, record where. */
2379 if (CONSP (read_kbd))
2380 {
2381 wait_for_cell = &XCAR (read_kbd);
2382 XSETFASTINT (read_kbd, 0);
2383 }
2384
2385 waiting_for_user_input_p = XINT (read_kbd);
2386
2387 /* Since we may need to wait several times,
2388 compute the absolute time to return at. */
2389 if (time_limit || microsecs)
2390 {
2391 EMACS_GET_TIME (end_time);
2392 EMACS_SET_SECS_USECS (timeout, time_limit, microsecs);
2393 EMACS_ADD_TIME (end_time, end_time, timeout);
2394 }
2395#ifdef hpux
2396 /* AlainF 5-Jul-1996
2397 HP-UX 10.10 seem to have problems with signals coming in
2398 Causes "poll: interrupted system call" messages when Emacs is run
2399 in an X window
2400 Turn off periodic alarms (in case they are in use) */
2401 stop_polling ();
2402#endif
2403
2404 while (1)
2405 {
2406 int timeout_reduced_for_timers = 0;
2407
2408#ifdef HAVE_X_WINDOWS
2409 if (display_busy_cursor_p)
2410 Fx_hide_busy_cursor (Qnil);
2411#endif
2412
2413 /* If calling from keyboard input, do not quit
2414 since we want to return C-g as an input character.
2415 Otherwise, do pending quit if requested. */
2416 if (XINT (read_kbd) >= 0)
2417 QUIT;
2418
2419 /* Exit now if the cell we're waiting for became non-nil. */
2420 if (wait_for_cell && ! NILP (*wait_for_cell))
2421 break;
2422
2423 /* Compute time from now till when time limit is up */
2424 /* Exit if already run out */
2425 if (time_limit == -1)
2426 {
2427 /* -1 specified for timeout means
2428 gobble output available now
2429 but don't wait at all. */
2430
2431 EMACS_SET_SECS_USECS (timeout, 0, 0);
2432 }
2433 else if (time_limit || microsecs)
2434 {
2435 EMACS_GET_TIME (timeout);
2436 EMACS_SUB_TIME (timeout, end_time, timeout);
2437 if (EMACS_TIME_NEG_P (timeout))
2438 break;
2439 }
2440 else
2441 {
2442 EMACS_SET_SECS_USECS (timeout, 100000, 0);
2443 }
2444
2445 /* Normally we run timers here.
2446 But not if wait_for_cell; in those cases,
2447 the wait is supposed to be short,
2448 and those callers cannot handle running arbitrary Lisp code here. */
2449 if (! wait_for_cell)
2450 {
2451 EMACS_TIME timer_delay;
2452 int old_timers_run;
2453
2454 retry:
2455 old_timers_run = timers_run;
2456 timer_delay = timer_check (1);
2457 if (timers_run != old_timers_run && do_display)
2458 {
2459 redisplay_preserve_echo_area ();
2460 /* We must retry, since a timer may have requeued itself
2461 and that could alter the time_delay. */
2462 goto retry;
2463 }
2464
2465 /* If there is unread keyboard input, also return. */
2466 if (XINT (read_kbd) != 0
2467 && requeued_events_pending_p ())
2468 break;
2469
2470 if (! EMACS_TIME_NEG_P (timer_delay) && time_limit != -1)
2471 {
2472 EMACS_TIME difference;
2473 EMACS_SUB_TIME (difference, timer_delay, timeout);
2474 if (EMACS_TIME_NEG_P (difference))
2475 {
2476 timeout = timer_delay;
2477 timeout_reduced_for_timers = 1;
2478 }
2479 }
2480 /* If time_limit is -1, we are not going to wait at all. */
2481 else if (time_limit != -1)
2482 {
2483 /* This is so a breakpoint can be put here. */
2484 wait_reading_process_input_1 ();
2485 }
2486 }
2487
2488 /* Cause C-g and alarm signals to take immediate action,
2489 and cause input available signals to zero out timeout.
2490
2491 It is important that we do this before checking for process
2492 activity. If we get a SIGCHLD after the explicit checks for
2493 process activity, timeout is the only way we will know. */
2494 if (XINT (read_kbd) < 0)
2495 set_waiting_for_input (&timeout);
2496
2497 /* If status of something has changed, and no input is
2498 available, notify the user of the change right away. After
2499 this explicit check, we'll let the SIGCHLD handler zap
2500 timeout to get our attention. */
2501 if (update_tick != process_tick && do_display)
2502 {
2503 Atemp = input_wait_mask;
2504 EMACS_SET_SECS_USECS (timeout, 0, 0);
2505 if ((select (max (max_process_desc, max_keyboard_desc) + 1,
2506 &Atemp, (SELECT_TYPE *)0, (SELECT_TYPE *)0,
2507 &timeout)
2508 <= 0))
2509 {
2510 /* It's okay for us to do this and then continue with
2511 the loop, since timeout has already been zeroed out. */
2512 clear_waiting_for_input ();
2513 status_notify ();
2514 }
2515 }
2516
2517 /* Don't wait for output from a non-running process. */
2518 if (wait_proc != 0 && !NILP (wait_proc->raw_status_low))
2519 update_status (wait_proc);
2520 if (wait_proc != 0
2521 && ! EQ (wait_proc->status, Qrun))
2522 {
2523 int nread, total_nread = 0;
2524
2525 clear_waiting_for_input ();
2526 XSETPROCESS (proc, wait_proc);
2527
2528 /* Read data from the process, until we exhaust it. */
2529 while (XINT (wait_proc->infd) >= 0
2530 && (nread
2531 = read_process_output (proc, XINT (wait_proc->infd))))
2532 {
2533 if (0 < nread)
2534 total_nread += nread;
2535#ifdef EIO
2536 else if (nread == -1 && EIO == errno)
2537 break;
2538#endif
2539 }
2540 if (total_nread > 0 && do_display)
2541 redisplay_preserve_echo_area ();
2542
2543 break;
2544 }
2545
2546 /* Wait till there is something to do */
2547
2548 if (wait_for_cell)
2549 Available = non_process_wait_mask;
2550 else if (! XINT (read_kbd))
2551 Available = non_keyboard_wait_mask;
2552 else
2553 Available = input_wait_mask;
2554
2555 /* If frame size has changed or the window is newly mapped,
2556 redisplay now, before we start to wait. There is a race
2557 condition here; if a SIGIO arrives between now and the select
2558 and indicates that a frame is trashed, the select may block
2559 displaying a trashed screen. */
2560 if (frame_garbaged && do_display)
2561 {
2562 clear_waiting_for_input ();
2563 redisplay_preserve_echo_area ();
2564 if (XINT (read_kbd) < 0)
2565 set_waiting_for_input (&timeout);
2566 }
2567
2568 if (XINT (read_kbd) && detect_input_pending ())
2569 {
2570 nfds = 0;
2571 FD_ZERO (&Available);
2572 }
2573 else
2574 nfds = select (max (max_process_desc, max_keyboard_desc) + 1,
2575 &Available, (SELECT_TYPE *)0, (SELECT_TYPE *)0,
2576 &timeout);
2577
2578 xerrno = errno;
2579
2580 /* Make C-g and alarm signals set flags again */
2581 clear_waiting_for_input ();
2582
2583 /* If we woke up due to SIGWINCH, actually change size now. */
2584 do_pending_window_change (0);
2585
2586 if (time_limit && nfds == 0 && ! timeout_reduced_for_timers)
2587 /* We wanted the full specified time, so return now. */
2588 break;
2589 if (nfds < 0)
2590 {
2591 if (xerrno == EINTR)
2592 FD_ZERO (&Available);
2593#ifdef ultrix
2594 /* Ultrix select seems to return ENOMEM when it is
2595 interrupted. Treat it just like EINTR. Bleah. Note
2596 that we want to test for the "ultrix" CPP symbol, not
2597 "__ultrix__"; the latter is only defined under GCC, but
2598 not by DEC's bundled CC. -JimB */
2599 else if (xerrno == ENOMEM)
2600 FD_ZERO (&Available);
2601#endif
2602#ifdef ALLIANT
2603 /* This happens for no known reason on ALLIANT.
2604 I am guessing that this is the right response. -- RMS. */
2605 else if (xerrno == EFAULT)
2606 FD_ZERO (&Available);
2607#endif
2608 else if (xerrno == EBADF)
2609 {
2610#ifdef AIX
2611 /* AIX doesn't handle PTY closure the same way BSD does. On AIX,
2612 the child's closure of the pts gives the parent a SIGHUP, and
2613 the ptc file descriptor is automatically closed,
2614 yielding EBADF here or at select() call above.
2615 So, SIGHUP is ignored (see def of PTY_TTY_NAME_SPRINTF
2616 in m/ibmrt-aix.h), and here we just ignore the select error.
2617 Cleanup occurs c/o status_notify after SIGCLD. */
2618 FD_ZERO (&Available); /* Cannot depend on values returned */
2619#else
2620 abort ();
2621#endif
2622 }
2623 else
2624 error ("select error: %s", strerror (xerrno));
2625 }
2626#if defined(sun) && !defined(USG5_4)
2627 else if (nfds > 0 && keyboard_bit_set (&Available)
2628 && interrupt_input)
2629 /* System sometimes fails to deliver SIGIO.
2630
2631 David J. Mackenzie says that Emacs doesn't compile under
2632 Solaris if this code is enabled, thus the USG5_4 in the CPP
2633 conditional. "I haven't noticed any ill effects so far.
2634 If you find a Solaris expert somewhere, they might know
2635 better." */
2636 kill (getpid (), SIGIO);
2637#endif
2638
2639#if 0 /* When polling is used, interrupt_input is 0,
2640 so get_input_pending should read the input.
2641 So this should not be needed. */
2642 /* If we are using polling for input,
2643 and we see input available, make it get read now.
2644 Otherwise it might not actually get read for a second.
2645 And on hpux, since we turn off polling in wait_reading_process_input,
2646 it might never get read at all if we don't spend much time
2647 outside of wait_reading_process_input. */
2648 if (XINT (read_kbd) && interrupt_input
2649 && keyboard_bit_set (&Available)
2650 && input_polling_used ())
2651 kill (getpid (), SIGALRM);
2652#endif
2653
2654 /* Check for keyboard input */
2655 /* If there is any, return immediately
2656 to give it higher priority than subprocesses */
2657
2658 if (XINT (read_kbd) != 0
2659 && detect_input_pending_run_timers (do_display))
2660 {
2661 swallow_events (do_display);
2662 if (detect_input_pending_run_timers (do_display))
2663 break;
2664 }
2665
2666 /* If there is unread keyboard input, also return. */
2667 if (XINT (read_kbd) != 0
2668 && requeued_events_pending_p ())
2669 break;
2670
2671 /* If we are not checking for keyboard input now,
2672 do process events (but don't run any timers).
2673 This is so that X events will be processed.
2674 Otherwise they may have to wait until polling takes place.
2675 That would causes delays in pasting selections, for example.
2676
2677 (We used to do this only if wait_for_cell.) */
2678 if (XINT (read_kbd) == 0 && detect_input_pending ())
2679 {
2680 swallow_events (do_display);
2681#if 0 /* Exiting when read_kbd doesn't request that seems wrong, though. */
2682 if (detect_input_pending ())
2683 break;
2684#endif
2685 }
2686
2687 /* Exit now if the cell we're waiting for became non-nil. */
2688 if (wait_for_cell && ! NILP (*wait_for_cell))
2689 break;
2690
2691#ifdef SIGIO
2692 /* If we think we have keyboard input waiting, but didn't get SIGIO,
2693 go read it. This can happen with X on BSD after logging out.
2694 In that case, there really is no input and no SIGIO,
2695 but select says there is input. */
2696
2697 if (XINT (read_kbd) && interrupt_input
2698 && keyboard_bit_set (&Available))
2699 kill (getpid (), SIGIO);
2700#endif
2701
2702 if (! wait_proc)
2703 got_some_input |= nfds > 0;
2704
2705 /* If checking input just got us a size-change event from X,
2706 obey it now if we should. */
2707 if (XINT (read_kbd) || wait_for_cell)
2708 do_pending_window_change (0);
2709
2710 /* Check for data from a process. */
2711 /* Really FIRST_PROC_DESC should be 0 on Unix,
2712 but this is safer in the short run. */
2713 for (channel = 0; channel <= max_process_desc; channel++)
2714 {
2715 if (FD_ISSET (channel, &Available)
2716 && FD_ISSET (channel, &non_keyboard_wait_mask))
2717 {
2718 int nread;
2719
2720 /* If waiting for this channel, arrange to return as
2721 soon as no more input to be processed. No more
2722 waiting. */
2723 if (wait_channel == channel)
2724 {
2725 wait_channel = -1;
2726 time_limit = -1;
2727 got_some_input = 1;
2728 }
2729 proc = chan_process[channel];
2730 if (NILP (proc))
2731 continue;
2732
2733 /* Read data from the process, starting with our
2734 buffered-ahead character if we have one. */
2735
2736 nread = read_process_output (proc, channel);
2737 if (nread > 0)
2738 {
2739 /* Since read_process_output can run a filter,
2740 which can call accept-process-output,
2741 don't try to read from any other processes
2742 before doing the select again. */
2743 FD_ZERO (&Available);
2744
2745 if (do_display)
2746 redisplay_preserve_echo_area ();
2747 }
2748#ifdef EWOULDBLOCK
2749 else if (nread == -1 && errno == EWOULDBLOCK)
2750 ;
2751#endif
2752 /* ISC 4.1 defines both EWOULDBLOCK and O_NONBLOCK,
2753 and Emacs uses O_NONBLOCK, so what we get is EAGAIN. */
2754#ifdef O_NONBLOCK
2755 else if (nread == -1 && errno == EAGAIN)
2756 ;
2757#else
2758#ifdef O_NDELAY
2759 else if (nread == -1 && errno == EAGAIN)
2760 ;
2761 /* Note that we cannot distinguish between no input
2762 available now and a closed pipe.
2763 With luck, a closed pipe will be accompanied by
2764 subprocess termination and SIGCHLD. */
2765 else if (nread == 0 && !NETCONN_P (proc))
2766 ;
2767#endif /* O_NDELAY */
2768#endif /* O_NONBLOCK */
2769#ifdef HAVE_PTYS
2770 /* On some OSs with ptys, when the process on one end of
2771 a pty exits, the other end gets an error reading with
2772 errno = EIO instead of getting an EOF (0 bytes read).
2773 Therefore, if we get an error reading and errno =
2774 EIO, just continue, because the child process has
2775 exited and should clean itself up soon (e.g. when we
2776 get a SIGCHLD).
2777
2778 However, it has been known to happen that the SIGCHLD
2779 got lost. So raise the signl again just in case.
2780 It can't hurt. */
2781 else if (nread == -1 && errno == EIO)
2782 kill (getpid (), SIGCHLD);
2783#endif /* HAVE_PTYS */
2784 /* If we can detect process termination, don't consider the process
2785 gone just because its pipe is closed. */
2786#ifdef SIGCHLD
2787 else if (nread == 0 && !NETCONN_P (proc))
2788 ;
2789#endif
2790 else
2791 {
2792 /* Preserve status of processes already terminated. */
2793 XSETINT (XPROCESS (proc)->tick, ++process_tick);
2794 deactivate_process (proc);
2795 if (!NILP (XPROCESS (proc)->raw_status_low))
2796 update_status (XPROCESS (proc));
2797 if (EQ (XPROCESS (proc)->status, Qrun))
2798 XPROCESS (proc)->status
2799 = Fcons (Qexit, Fcons (make_number (256), Qnil));
2800 }
2801 }
2802 } /* end for each file descriptor */
2803 } /* end while exit conditions not met */
2804
2805 waiting_for_user_input_p = 0;
2806
2807 /* If calling from keyboard input, do not quit
2808 since we want to return C-g as an input character.
2809 Otherwise, do pending quit if requested. */
2810 if (XINT (read_kbd) >= 0)
2811 {
2812 /* Prevent input_pending from remaining set if we quit. */
2813 clear_input_pending ();
2814 QUIT;
2815 }
2816#ifdef hpux
2817 /* AlainF 5-Jul-1996
2818 HP-UX 10.10 seems to have problems with signals coming in
2819 Causes "poll: interrupted system call" messages when Emacs is run
2820 in an X window
2821 Turn periodic alarms back on */
2822 start_polling ();
2823#endif
2824
2825#ifdef HAVE_X_WINDOWS
2826 if (display_busy_cursor_p)
2827 if (!inhibit_busy_cursor)
2828 Fx_show_busy_cursor ();
2829#endif
2830
2831 return got_some_input;
2832}
2833\f
2834/* Given a list (FUNCTION ARGS...), apply FUNCTION to the ARGS. */
2835
2836static Lisp_Object
2837read_process_output_call (fun_and_args)
2838 Lisp_Object fun_and_args;
2839{
2840 return apply1 (XCAR (fun_and_args), XCDR (fun_and_args));
2841}
2842
2843static Lisp_Object
2844read_process_output_error_handler (error)
2845 Lisp_Object error;
2846{
2847 cmd_error_internal (error, "error in process filter: ");
2848 Vinhibit_quit = Qt;
2849 update_echo_area ();
2850 Fsleep_for (make_number (2), Qnil);
2851}
2852
2853/* Read pending output from the process channel,
2854 starting with our buffered-ahead character if we have one.
2855 Yield number of decoded characters read.
2856
2857 This function reads at most 1024 characters.
2858 If you want to read all available subprocess output,
2859 you must call it repeatedly until it returns zero.
2860
2861 The characters read are decoded according to PROC's coding-system
2862 for decoding. */
2863
2864int
2865read_process_output (proc, channel)
2866 Lisp_Object proc;
2867 register int channel;
2868{
2869 register int nchars, nbytes;
2870 char *chars;
2871#ifdef VMS
2872 int chars_allocated = 0; /* If 1, `chars' should be freed later. */
2873#else
2874 char buf[1024];
2875#endif
2876 register Lisp_Object outstream;
2877 register struct buffer *old = current_buffer;
2878 register struct Lisp_Process *p = XPROCESS (proc);
2879 register int opoint;
2880 struct coding_system *coding = proc_decode_coding_system[channel];
2881 int chars_in_decoding_buf = 0; /* If 1, `chars' points
2882 XSTRING (p->decoding_buf)->data. */
2883 int carryover = XINT (p->decoding_carryover);
2884
2885#ifdef VMS
2886 VMS_PROC_STUFF *vs, *get_vms_process_pointer();
2887
2888 vs = get_vms_process_pointer (p->pid);
2889 if (vs)
2890 {
2891 if (!vs->iosb[0])
2892 return (0); /* Really weird if it does this */
2893 if (!(vs->iosb[0] & 1))
2894 return -1; /* I/O error */
2895 }
2896 else
2897 error ("Could not get VMS process pointer");
2898 chars = vs->inputBuffer;
2899 nbytes = clean_vms_buffer (chars, vs->iosb[1]);
2900 if (nbytes <= 0)
2901 {
2902 start_vms_process_read (vs); /* Crank up the next read on the process */
2903 return 1; /* Nothing worth printing, say we got 1 */
2904 }
2905 if (carryover > 0)
2906 {
2907 /* The data carried over in the previous decoding (which are at
2908 the tail of decoding buffer) should be prepended to the new
2909 data read to decode all together. */
2910 char *buf = (char *) xmalloc (nbytes + carryover);
2911
2912 bcopy (XSTRING (p->decoding_buf)->data
2913 + STRING_BYTES (XSTRING (p->decoding_buf)) - carryover,
2914 buf, carryover);
2915 bcopy (chars, buf + carryover, nbytes);
2916 chars = buf;
2917 chars_allocated = 1;
2918 }
2919#else /* not VMS */
2920
2921 if (carryover)
2922 /* See the comment above. */
2923 bcopy (XSTRING (p->decoding_buf)->data
2924 + STRING_BYTES (XSTRING (p->decoding_buf)) - carryover,
2925 buf, carryover);
2926
2927 if (proc_buffered_char[channel] < 0)
2928 nbytes = read (channel, buf + carryover, (sizeof buf) - carryover);
2929 else
2930 {
2931 buf[carryover] = proc_buffered_char[channel];
2932 proc_buffered_char[channel] = -1;
2933 nbytes = read (channel, buf + carryover + 1,
2934 (sizeof buf) - carryover - 1);
2935 if (nbytes < 0)
2936 nbytes = 1;
2937 else
2938 nbytes = nbytes + 1;
2939 }
2940 chars = buf;
2941#endif /* not VMS */
2942
2943 XSETINT (p->decoding_carryover, 0);
2944
2945 /* At this point, NBYTES holds number of characters just received
2946 (including the one in proc_buffered_char[channel]). */
2947 if (nbytes <= 0)
2948 {
2949 if (nbytes < 0 || coding->mode & CODING_MODE_LAST_BLOCK)
2950 return nbytes;
2951 coding->mode |= CODING_MODE_LAST_BLOCK;
2952 }
2953
2954 /* Now set NBYTES how many bytes we must decode. */
2955 nbytes += carryover;
2956 nchars = nbytes;
2957
2958 if (CODING_MAY_REQUIRE_DECODING (coding))
2959 {
2960 int require = decoding_buffer_size (coding, nbytes);
2961 int result;
2962
2963 if (STRING_BYTES (XSTRING (p->decoding_buf)) < require)
2964 p->decoding_buf = make_uninit_string (require);
2965 result = decode_coding (coding, chars, XSTRING (p->decoding_buf)->data,
2966 nbytes, STRING_BYTES (XSTRING (p->decoding_buf)));
2967 carryover = nbytes - coding->consumed;
2968 if (carryover > 0)
2969 {
2970 /* Copy the carryover bytes to the end of p->decoding_buf, to
2971 be processed on the next read. Since decoding_buffer_size
2972 asks for an extra amount of space beyond the maximum
2973 expected for the output, there should always be sufficient
2974 space for the carryover (which is by definition a sequence
2975 of bytes that was not long enough to be decoded, and thus
2976 has a bounded length). */
2977 if (STRING_BYTES (XSTRING (p->decoding_buf))
2978 < coding->produced + carryover)
2979 abort ();
2980 bcopy (chars + coding->consumed,
2981 XSTRING (p->decoding_buf)->data
2982 + STRING_BYTES (XSTRING (p->decoding_buf)) - carryover,
2983 carryover);
2984 XSETINT (p->decoding_carryover, carryover);
2985 }
2986
2987 /* A new coding system might be found by `decode_coding'. */
2988 if (!EQ (p->decode_coding_system, coding->symbol))
2989 {
2990 p->decode_coding_system = coding->symbol;
2991
2992 /* Don't call setup_coding_system for
2993 proc_decode_coding_system[channel] here. It is done in
2994 detect_coding called via decode_coding above. */
2995
2996 /* If a coding system for encoding is not yet decided, we set
2997 it as the same as coding-system for decoding.
2998
2999 But, before doing that we must check if
3000 proc_encode_coding_system[p->outfd] surely points to a
3001 valid memory because p->outfd will be changed once EOF is
3002 sent to the process. */
3003 if (NILP (p->encode_coding_system)
3004 && proc_encode_coding_system[XINT (p->outfd)])
3005 {
3006 p->encode_coding_system = coding->symbol;
3007 setup_coding_system (coding->symbol,
3008 proc_encode_coding_system[XINT (p->outfd)]);
3009 }
3010 }
3011
3012#ifdef VMS
3013 /* Now we don't need the contents of `chars'. */
3014 if (chars_allocated)
3015 free (chars);
3016#endif
3017 if (coding->produced == 0)
3018 return 0;
3019 chars = (char *) XSTRING (p->decoding_buf)->data;
3020 nbytes = coding->produced;
3021 nchars = (coding->fake_multibyte
3022 ? multibyte_chars_in_text (chars, nbytes)
3023 : coding->produced_char);
3024 chars_in_decoding_buf = 1;
3025 }
3026 else
3027 {
3028#ifdef VMS
3029 if (chars_allocated)
3030 {
3031 /* Although we don't have to decode the received data, we
3032 must move it to an area which we don't have to free. */
3033 if (! STRINGP (p->decoding_buf)
3034 || STRING_BYTES (XSTRING (p->decoding_buf)) < nbytes)
3035 p->decoding_buf = make_uninit_string (nbytes);
3036 bcopy (chars, XSTRING (p->decoding_buf)->data, nbytes);
3037 free (chars);
3038 chars = XSTRING (p->decoding_buf)->data;
3039 chars_in_decoding_buf = 1;
3040 }
3041#endif
3042 nchars = multibyte_chars_in_text (chars, nbytes);
3043 }
3044
3045 Vlast_coding_system_used = coding->symbol;
3046
3047 /* If the caller required, let the process associated buffer
3048 inherit the coding-system used to decode the process output. */
3049 if (! NILP (p->inherit_coding_system_flag)
3050 && !NILP (p->buffer) && !NILP (XBUFFER (p->buffer)->name))
3051 {
3052 struct buffer *prev_buf = current_buffer;
3053
3054 Fset_buffer (p->buffer);
3055 call1 (intern ("after-insert-file-set-buffer-file-coding-system"),
3056 make_number (nbytes));
3057 set_buffer_internal (prev_buf);
3058 }
3059
3060 /* Read and dispose of the process output. */
3061 outstream = p->filter;
3062 if (!NILP (outstream))
3063 {
3064 /* We inhibit quit here instead of just catching it so that
3065 hitting ^G when a filter happens to be running won't screw
3066 it up. */
3067 int count = specpdl_ptr - specpdl;
3068 Lisp_Object odeactivate;
3069 Lisp_Object obuffer, okeymap;
3070 Lisp_Object text;
3071 int outer_running_asynch_code = running_asynch_code;
3072 int waiting = waiting_for_user_input_p;
3073
3074 /* No need to gcpro these, because all we do with them later
3075 is test them for EQness, and none of them should be a string. */
3076 odeactivate = Vdeactivate_mark;
3077 XSETBUFFER (obuffer, current_buffer);
3078 okeymap = current_buffer->keymap;
3079
3080 specbind (Qinhibit_quit, Qt);
3081 specbind (Qlast_nonmenu_event, Qt);
3082
3083 /* In case we get recursively called,
3084 and we already saved the match data nonrecursively,
3085 save the same match data in safely recursive fashion. */
3086 if (outer_running_asynch_code)
3087 {
3088 Lisp_Object tem;
3089 /* Don't clobber the CURRENT match data, either! */
3090 tem = Fmatch_data (Qnil, Qnil);
3091 restore_match_data ();
3092 record_unwind_protect (Fset_match_data, Fmatch_data (Qnil, Qnil));
3093 Fset_match_data (tem);
3094 }
3095
3096 /* For speed, if a search happens within this code,
3097 save the match data in a special nonrecursive fashion. */
3098 running_asynch_code = 1;
3099
3100 /* The multibyteness of a string given to the filter is decided
3101 by which coding system we used for decoding. */
3102 if (coding->type == coding_type_no_conversion
3103 || coding->type == coding_type_raw_text)
3104 text = make_unibyte_string (chars, nbytes);
3105 else
3106 text = make_multibyte_string (chars, nchars, nbytes);
3107
3108 internal_condition_case_1 (read_process_output_call,
3109 Fcons (outstream,
3110 Fcons (proc, Fcons (text, Qnil))),
3111 !NILP (Vdebug_on_error) ? Qnil : Qerror,
3112 read_process_output_error_handler);
3113
3114 /* If we saved the match data nonrecursively, restore it now. */
3115 restore_match_data ();
3116 running_asynch_code = outer_running_asynch_code;
3117
3118 /* Handling the process output should not deactivate the mark. */
3119 Vdeactivate_mark = odeactivate;
3120
3121 /* Restore waiting_for_user_input_p as it was
3122 when we were called, in case the filter clobbered it. */
3123 waiting_for_user_input_p = waiting;
3124
3125#if 0 /* Call record_asynch_buffer_change unconditionally,
3126 because we might have changed minor modes or other things
3127 that affect key bindings. */
3128 if (! EQ (Fcurrent_buffer (), obuffer)
3129 || ! EQ (current_buffer->keymap, okeymap))
3130#endif
3131 /* But do it only if the caller is actually going to read events.
3132 Otherwise there's no need to make him wake up, and it could
3133 cause trouble (for example it would make Fsit_for return). */
3134 if (waiting_for_user_input_p == -1)
3135 record_asynch_buffer_change ();
3136
3137#ifdef VMS
3138 start_vms_process_read (vs);
3139#endif
3140 unbind_to (count, Qnil);
3141 return nchars;
3142 }
3143
3144 /* If no filter, write into buffer if it isn't dead. */
3145 if (!NILP (p->buffer) && !NILP (XBUFFER (p->buffer)->name))
3146 {
3147 Lisp_Object old_read_only;
3148 int old_begv, old_zv;
3149 int old_begv_byte, old_zv_byte;
3150 Lisp_Object odeactivate;
3151 int before, before_byte;
3152 int opoint_byte;
3153
3154 odeactivate = Vdeactivate_mark;
3155
3156 Fset_buffer (p->buffer);
3157 opoint = PT;
3158 opoint_byte = PT_BYTE;
3159 old_read_only = current_buffer->read_only;
3160 old_begv = BEGV;
3161 old_zv = ZV;
3162 old_begv_byte = BEGV_BYTE;
3163 old_zv_byte = ZV_BYTE;
3164
3165 current_buffer->read_only = Qnil;
3166
3167 /* Insert new output into buffer
3168 at the current end-of-output marker,
3169 thus preserving logical ordering of input and output. */
3170 if (XMARKER (p->mark)->buffer)
3171 SET_PT_BOTH (clip_to_bounds (BEGV, marker_position (p->mark), ZV),
3172 clip_to_bounds (BEGV_BYTE, marker_byte_position (p->mark),
3173 ZV_BYTE));
3174 else
3175 SET_PT_BOTH (ZV, ZV_BYTE);
3176 before = PT;
3177 before_byte = PT_BYTE;
3178
3179 /* If the output marker is outside of the visible region, save
3180 the restriction and widen. */
3181 if (! (BEGV <= PT && PT <= ZV))
3182 Fwiden ();
3183
3184 if (NILP (current_buffer->enable_multibyte_characters))
3185 nchars = nbytes;
3186
3187 /* Insert before markers in case we are inserting where
3188 the buffer's mark is, and the user's next command is Meta-y. */
3189 if (chars_in_decoding_buf)
3190 {
3191 /* Since multibyteness of p->docoding_buf is corrupted, we
3192 can't use insert_from_string_before_markers. */
3193 char *temp_buf;
3194
3195 temp_buf = (char *) alloca (nbytes);
3196 bcopy (XSTRING (p->decoding_buf)->data, temp_buf, nbytes);
3197 insert_before_markers (temp_buf, nbytes);
3198 }
3199 else
3200 {
3201 insert_1_both (chars, nchars, nbytes, 0, 1, 1);
3202 signal_after_change (opoint, 0, PT - opoint);
3203 }
3204 set_marker_both (p->mark, p->buffer, PT, PT_BYTE);
3205
3206 update_mode_lines++;
3207
3208 /* Make sure opoint and the old restrictions
3209 float ahead of any new text just as point would. */
3210 if (opoint >= before)
3211 {
3212 opoint += PT - before;
3213 opoint_byte += PT_BYTE - before_byte;
3214 }
3215 if (old_begv > before)
3216 {
3217 old_begv += PT - before;
3218 old_begv_byte += PT_BYTE - before_byte;
3219 }
3220 if (old_zv >= before)
3221 {
3222 old_zv += PT - before;
3223 old_zv_byte += PT_BYTE - before_byte;
3224 }
3225
3226 /* If the restriction isn't what it should be, set it. */
3227 if (old_begv != BEGV || old_zv != ZV)
3228 Fnarrow_to_region (make_number (old_begv), make_number (old_zv));
3229
3230 /* Handling the process output should not deactivate the mark. */
3231 Vdeactivate_mark = odeactivate;
3232
3233 current_buffer->read_only = old_read_only;
3234 SET_PT_BOTH (opoint, opoint_byte);
3235 set_buffer_internal (old);
3236 }
3237#ifdef VMS
3238 start_vms_process_read (vs);
3239#endif
3240 return nbytes;
3241}
3242
3243DEFUN ("waiting-for-user-input-p", Fwaiting_for_user_input_p, Swaiting_for_user_input_p,
3244 0, 0, 0,
3245 "Returns non-nil if emacs is waiting for input from the user.\n\
3246This is intended for use by asynchronous process output filters and sentinels.")
3247 ()
3248{
3249 return (waiting_for_user_input_p ? Qt : Qnil);
3250}
3251\f
3252/* Sending data to subprocess */
3253
3254jmp_buf send_process_frame;
3255
3256SIGTYPE
3257send_process_trap ()
3258{
3259#ifdef BSD4_1
3260 sigrelse (SIGPIPE);
3261 sigrelse (SIGALRM);
3262#endif /* BSD4_1 */
3263 longjmp (send_process_frame, 1);
3264}
3265
3266/* Send some data to process PROC.
3267 BUF is the beginning of the data; LEN is the number of characters.
3268 OBJECT is the Lisp object that the data comes from.
3269
3270 The data is encoded by PROC's coding-system for encoding before it
3271 is sent. But if the data ends at the middle of multi-byte
3272 representation, that incomplete sequence of bytes are sent without
3273 being encoded. Should we store them in a buffer to prepend them to
3274 the data send later? */
3275
3276void
3277send_process (proc, buf, len, object)
3278 volatile Lisp_Object proc;
3279 unsigned char *buf;
3280 int len;
3281 Lisp_Object object;
3282{
3283 /* Use volatile to protect variables from being clobbered by longjmp. */
3284 int rv;
3285 volatile unsigned char *procname = XSTRING (XPROCESS (proc)->name)->data;
3286 struct coding_system *coding;
3287 struct gcpro gcpro1;
3288 int carryover = XINT (XPROCESS (proc)->encoding_carryover);
3289
3290 GCPRO1 (object);
3291
3292#ifdef VMS
3293 struct Lisp_Process *p = XPROCESS (proc);
3294 VMS_PROC_STUFF *vs, *get_vms_process_pointer();
3295#endif /* VMS */
3296
3297 if (! NILP (XPROCESS (proc)->raw_status_low))
3298 update_status (XPROCESS (proc));
3299 if (! EQ (XPROCESS (proc)->status, Qrun))
3300 error ("Process %s not running", procname);
3301 if (XINT (XPROCESS (proc)->outfd) < 0)
3302 error ("Output file descriptor of %s is closed", procname);
3303
3304 coding = proc_encode_coding_system[XINT (XPROCESS (proc)->outfd)];
3305 Vlast_coding_system_used = coding->symbol;
3306
3307 if (CODING_REQUIRE_ENCODING (coding))
3308 {
3309 int require = encoding_buffer_size (coding, len);
3310 int offset, dummy;
3311 unsigned char *temp_buf = NULL;
3312
3313 /* Remember the offset of data because a string or a buffer may
3314 be relocated. Setting OFFSET to -1 means we don't have to
3315 care about relocation. */
3316 offset = (BUFFERP (object)
3317 ? BUF_PTR_BYTE_POS (XBUFFER (object), buf)
3318 : (STRINGP (object)
3319 ? buf - XSTRING (object)->data
3320 : -1));
3321
3322 if (carryover > 0)
3323 {
3324 temp_buf = (unsigned char *) xmalloc (len + carryover);
3325
3326 if (offset >= 0)
3327 {
3328 if (BUFFERP (object))
3329 buf = BUF_BYTE_ADDRESS (XBUFFER (object), offset);
3330 else if (STRINGP (object))
3331 buf = offset + XSTRING (object)->data;
3332 /* Now we don't have to care about relocation. */
3333 offset = -1;
3334 }
3335 bcopy ((XSTRING (XPROCESS (proc)->encoding_buf)->data
3336 + STRING_BYTES (XSTRING (XPROCESS (proc)->encoding_buf))
3337 - carryover),
3338 temp_buf,
3339 carryover);
3340 bcopy (buf, temp_buf + carryover, len);
3341 buf = temp_buf;
3342 }
3343
3344 if (STRING_BYTES (XSTRING (XPROCESS (proc)->encoding_buf)) < require)
3345 {
3346 XPROCESS (proc)->encoding_buf = make_uninit_string (require);
3347
3348 if (offset >= 0)
3349 {
3350 if (BUFFERP (object))
3351 buf = BUF_BYTE_ADDRESS (XBUFFER (object), offset);
3352 else if (STRINGP (object))
3353 buf = offset + XSTRING (object)->data;
3354 }
3355 }
3356 object = XPROCESS (proc)->encoding_buf;
3357 encode_coding (coding, buf, XSTRING (object)->data,
3358 len, STRING_BYTES (XSTRING (object)));
3359 len = coding->produced;
3360 buf = XSTRING (object)->data;
3361 if (temp_buf)
3362 xfree (temp_buf);
3363 }
3364
3365#ifdef VMS
3366 vs = get_vms_process_pointer (p->pid);
3367 if (vs == 0)
3368 error ("Could not find this process: %x", p->pid);
3369 else if (write_to_vms_process (vs, buf, len))
3370 ;
3371#else
3372
3373 if (pty_max_bytes == 0)
3374 {
3375#if defined (HAVE_FPATHCONF) && defined (_PC_MAX_CANON)
3376 pty_max_bytes = fpathconf (XFASTINT (XPROCESS (proc)->outfd),
3377 _PC_MAX_CANON);
3378 if (pty_max_bytes < 0)
3379 pty_max_bytes = 250;
3380#else
3381 pty_max_bytes = 250;
3382#endif
3383 /* Deduct one, to leave space for the eof. */
3384 pty_max_bytes--;
3385 }
3386
3387 if (!setjmp (send_process_frame))
3388 while (len > 0)
3389 {
3390 int this = len;
3391 SIGTYPE (*old_sigpipe)();
3392 int flush_pty = 0;
3393
3394 /* Decide how much data we can send in one batch.
3395 Long lines need to be split into multiple batches. */
3396 if (!NILP (XPROCESS (proc)->pty_flag))
3397 {
3398 /* Starting this at zero is always correct when not the first iteration
3399 because the previous iteration ended by sending C-d.
3400 It may not be correct for the first iteration
3401 if a partial line was sent in a separate send_process call.
3402 If that proves worth handling, we need to save linepos
3403 in the process object. */
3404 int linepos = 0;
3405 unsigned char *ptr = buf;
3406 unsigned char *end = buf + len;
3407
3408 /* Scan through this text for a line that is too long. */
3409 while (ptr != end && linepos < pty_max_bytes)
3410 {
3411 if (*ptr == '\n')
3412 linepos = 0;
3413 else
3414 linepos++;
3415 ptr++;
3416 }
3417 /* If we found one, break the line there
3418 and put in a C-d to force the buffer through. */
3419 this = ptr - buf;
3420 }
3421
3422 /* Send this batch, using one or more write calls. */
3423 while (this > 0)
3424 {
3425 old_sigpipe = (SIGTYPE (*) ()) signal (SIGPIPE, send_process_trap);
3426 rv = write (XINT (XPROCESS (proc)->outfd), buf, this);
3427 signal (SIGPIPE, old_sigpipe);
3428
3429 if (rv < 0)
3430 {
3431 if (0
3432#ifdef EWOULDBLOCK
3433 || errno == EWOULDBLOCK
3434#endif
3435#ifdef EAGAIN
3436 || errno == EAGAIN
3437#endif
3438 )
3439 /* Buffer is full. Wait, accepting input;
3440 that may allow the program
3441 to finish doing output and read more. */
3442 {
3443 Lisp_Object zero;
3444 int offset;
3445
3446 /* Running filters might relocate buffers or strings.
3447 Arrange to relocate BUF. */
3448 if (BUFFERP (object))
3449 offset = BUF_PTR_BYTE_POS (XBUFFER (object), buf);
3450 else if (STRINGP (object))
3451 offset = buf - XSTRING (object)->data;
3452
3453 XSETFASTINT (zero, 0);
3454#ifdef EMACS_HAS_USECS
3455 wait_reading_process_input (0, 20000, zero, 0);
3456#else
3457 wait_reading_process_input (1, 0, zero, 0);
3458#endif
3459
3460 if (BUFFERP (object))
3461 buf = BUF_BYTE_ADDRESS (XBUFFER (object), offset);
3462 else if (STRINGP (object))
3463 buf = offset + XSTRING (object)->data;
3464
3465 rv = 0;
3466 }
3467 else
3468 /* This is a real error. */
3469 report_file_error ("writing to process", Fcons (proc, Qnil));
3470 }
3471 buf += rv;
3472 len -= rv;
3473 this -= rv;
3474 }
3475
3476 /* If we sent just part of the string, put in an EOF
3477 to force it through, before we send the rest. */
3478 if (len > 0)
3479 Fprocess_send_eof (proc);
3480 }
3481#endif
3482 else
3483 {
3484 XPROCESS (proc)->raw_status_low = Qnil;
3485 XPROCESS (proc)->raw_status_high = Qnil;
3486 XPROCESS (proc)->status = Fcons (Qexit, Fcons (make_number (256), Qnil));
3487 XSETINT (XPROCESS (proc)->tick, ++process_tick);
3488 deactivate_process (proc);
3489#ifdef VMS
3490 error ("Error writing to process %s; closed it", procname);
3491#else
3492 error ("SIGPIPE raised on process %s; closed it", procname);
3493#endif
3494 }
3495
3496 UNGCPRO;
3497}
3498
3499DEFUN ("process-send-region", Fprocess_send_region, Sprocess_send_region,
3500 3, 3, 0,
3501 "Send current contents of region as input to PROCESS.\n\
3502PROCESS may be a process, a buffer, the name of a process or buffer, or\n\
3503nil, indicating the current buffer's process.\n\
3504Called from program, takes three arguments, PROCESS, START and END.\n\
3505If the region is more than 500 characters long,\n\
3506it is sent in several bunches. This may happen even for shorter regions.\n\
3507Output from processes can arrive in between bunches.")
3508 (process, start, end)
3509 Lisp_Object process, start, end;
3510{
3511 Lisp_Object proc;
3512 int start1, end1;
3513
3514 proc = get_process (process);
3515 validate_region (&start, &end);
3516
3517 if (XINT (start) < GPT && XINT (end) > GPT)
3518 move_gap (XINT (start));
3519
3520 start1 = CHAR_TO_BYTE (XINT (start));
3521 end1 = CHAR_TO_BYTE (XINT (end));
3522 send_process (proc, BYTE_POS_ADDR (start1), end1 - start1,
3523 Fcurrent_buffer ());
3524
3525 return Qnil;
3526}
3527
3528DEFUN ("process-send-string", Fprocess_send_string, Sprocess_send_string,
3529 2, 2, 0,
3530 "Send PROCESS the contents of STRING as input.\n\
3531PROCESS may be a process, a buffer, the name of a process or buffer, or\n\
3532nil, indicating the current buffer's process.\n\
3533If STRING is more than 500 characters long,\n\
3534it is sent in several bunches. This may happen even for shorter strings.\n\
3535Output from processes can arrive in between bunches.")
3536 (process, string)
3537 Lisp_Object process, string;
3538{
3539 Lisp_Object proc;
3540 CHECK_STRING (string, 1);
3541 proc = get_process (process);
3542 send_process (proc, XSTRING (string)->data,
3543 STRING_BYTES (XSTRING (string)), string);
3544 return Qnil;
3545}
3546\f
3547DEFUN ("process-running-child-p", Fprocess_running_child_p,
3548 Sprocess_running_child_p, 0, 1, 0,
3549 "Return t if PROCESS has given the terminal to a child.\n\
3550If the operating system does not make it possible to find out,\n\
3551return t unconditionally.")
3552 (process)
3553 Lisp_Object process;
3554{
3555 /* Initialize in case ioctl doesn't exist or gives an error,
3556 in a way that will cause returning t. */
3557 int gid = 0;
3558 Lisp_Object proc;
3559 struct Lisp_Process *p;
3560
3561 proc = get_process (process);
3562 p = XPROCESS (proc);
3563
3564 if (!EQ (p->childp, Qt))
3565 error ("Process %s is not a subprocess",
3566 XSTRING (p->name)->data);
3567 if (XINT (p->infd) < 0)
3568 error ("Process %s is not active",
3569 XSTRING (p->name)->data);
3570
3571#ifdef TIOCGPGRP
3572 if (!NILP (p->subtty))
3573 ioctl (XFASTINT (p->subtty), TIOCGPGRP, &gid);
3574 else
3575 ioctl (XINT (p->infd), TIOCGPGRP, &gid);
3576#endif /* defined (TIOCGPGRP ) */
3577
3578 if (gid == XFASTINT (p->pid))
3579 return Qnil;
3580 return Qt;
3581}
3582\f
3583/* send a signal number SIGNO to PROCESS.
3584 If CURRENT_GROUP is t, that means send to the process group
3585 that currently owns the terminal being used to communicate with PROCESS.
3586 This is used for various commands in shell mode.
3587 If CURRENT_GROUP is lambda, that means send to the process group
3588 that currently owns the terminal, but only if it is NOT the shell itself.
3589
3590 If NOMSG is zero, insert signal-announcements into process's buffers
3591 right away.
3592
3593 If we can, we try to signal PROCESS by sending control characters
3594 down the pty. This allows us to signal inferiors who have changed
3595 their uid, for which killpg would return an EPERM error. */
3596
3597static void
3598process_send_signal (process, signo, current_group, nomsg)
3599 Lisp_Object process;
3600 int signo;
3601 Lisp_Object current_group;
3602 int nomsg;
3603{
3604 Lisp_Object proc;
3605 register struct Lisp_Process *p;
3606 int gid;
3607 int no_pgrp = 0;
3608
3609 proc = get_process (process);
3610 p = XPROCESS (proc);
3611
3612 if (!EQ (p->childp, Qt))
3613 error ("Process %s is not a subprocess",
3614 XSTRING (p->name)->data);
3615 if (XINT (p->infd) < 0)
3616 error ("Process %s is not active",
3617 XSTRING (p->name)->data);
3618
3619 if (NILP (p->pty_flag))
3620 current_group = Qnil;
3621
3622 /* If we are using pgrps, get a pgrp number and make it negative. */
3623 if (!NILP (current_group))
3624 {
3625#ifdef SIGNALS_VIA_CHARACTERS
3626 /* If possible, send signals to the entire pgrp
3627 by sending an input character to it. */
3628
3629 /* TERMIOS is the latest and bestest, and seems most likely to
3630 work. If the system has it, use it. */
3631#ifdef HAVE_TERMIOS
3632 struct termios t;
3633
3634 switch (signo)
3635 {
3636 case SIGINT:
3637 tcgetattr (XINT (p->infd), &t);
3638 send_process (proc, &t.c_cc[VINTR], 1, Qnil);
3639 return;
3640
3641 case SIGQUIT:
3642 tcgetattr (XINT (p->infd), &t);
3643 send_process (proc, &t.c_cc[VQUIT], 1, Qnil);
3644 return;
3645
3646 case SIGTSTP:
3647 tcgetattr (XINT (p->infd), &t);
3648#if defined (VSWTCH) && !defined (PREFER_VSUSP)
3649 send_process (proc, &t.c_cc[VSWTCH], 1, Qnil);
3650#else
3651 send_process (proc, &t.c_cc[VSUSP], 1, Qnil);
3652#endif
3653 return;
3654 }
3655
3656#else /* ! HAVE_TERMIOS */
3657
3658 /* On Berkeley descendants, the following IOCTL's retrieve the
3659 current control characters. */
3660#if defined (TIOCGLTC) && defined (TIOCGETC)
3661
3662 struct tchars c;
3663 struct ltchars lc;
3664
3665 switch (signo)
3666 {
3667 case SIGINT:
3668 ioctl (XINT (p->infd), TIOCGETC, &c);
3669 send_process (proc, &c.t_intrc, 1, Qnil);
3670 return;
3671 case SIGQUIT:
3672 ioctl (XINT (p->infd), TIOCGETC, &c);
3673 send_process (proc, &c.t_quitc, 1, Qnil);
3674 return;
3675#ifdef SIGTSTP
3676 case SIGTSTP:
3677 ioctl (XINT (p->infd), TIOCGLTC, &lc);
3678 send_process (proc, &lc.t_suspc, 1, Qnil);
3679 return;
3680#endif /* ! defined (SIGTSTP) */
3681 }
3682
3683#else /* ! defined (TIOCGLTC) && defined (TIOCGETC) */
3684
3685 /* On SYSV descendants, the TCGETA ioctl retrieves the current control
3686 characters. */
3687#ifdef TCGETA
3688 struct termio t;
3689 switch (signo)
3690 {
3691 case SIGINT:
3692 ioctl (XINT (p->infd), TCGETA, &t);
3693 send_process (proc, &t.c_cc[VINTR], 1, Qnil);
3694 return;
3695 case SIGQUIT:
3696 ioctl (XINT (p->infd), TCGETA, &t);
3697 send_process (proc, &t.c_cc[VQUIT], 1, Qnil);
3698 return;
3699#ifdef SIGTSTP
3700 case SIGTSTP:
3701 ioctl (XINT (p->infd), TCGETA, &t);
3702 send_process (proc, &t.c_cc[VSWTCH], 1, Qnil);
3703 return;
3704#endif /* ! defined (SIGTSTP) */
3705 }
3706#else /* ! defined (TCGETA) */
3707 Your configuration files are messed up.
3708 /* If your system configuration files define SIGNALS_VIA_CHARACTERS,
3709 you'd better be using one of the alternatives above! */
3710#endif /* ! defined (TCGETA) */
3711#endif /* ! defined (TIOCGLTC) && defined (TIOCGETC) */
3712#endif /* ! defined HAVE_TERMIOS */
3713#endif /* ! defined (SIGNALS_VIA_CHARACTERS) */
3714
3715#ifdef TIOCGPGRP
3716 /* Get the pgrp using the tty itself, if we have that.
3717 Otherwise, use the pty to get the pgrp.
3718 On pfa systems, saka@pfu.fujitsu.co.JP writes:
3719 "TIOCGPGRP symbol defined in sys/ioctl.h at E50.
3720 But, TIOCGPGRP does not work on E50 ;-P works fine on E60"
3721 His patch indicates that if TIOCGPGRP returns an error, then
3722 we should just assume that p->pid is also the process group id. */
3723 {
3724 int err;
3725
3726 if (!NILP (p->subtty))
3727 err = ioctl (XFASTINT (p->subtty), TIOCGPGRP, &gid);
3728 else
3729 err = ioctl (XINT (p->infd), TIOCGPGRP, &gid);
3730
3731#ifdef pfa
3732 if (err == -1)
3733 gid = - XFASTINT (p->pid);
3734#endif /* ! defined (pfa) */
3735 }
3736 if (gid == -1)
3737 no_pgrp = 1;
3738 else
3739 gid = - gid;
3740#else /* ! defined (TIOCGPGRP ) */
3741 /* Can't select pgrps on this system, so we know that
3742 the child itself heads the pgrp. */
3743 gid = - XFASTINT (p->pid);
3744#endif /* ! defined (TIOCGPGRP ) */
3745
3746 /* If current_group is lambda, and the shell owns the terminal,
3747 don't send any signal. */
3748 if (EQ (current_group, Qlambda) && gid == - XFASTINT (p->pid))
3749 return;
3750 }
3751 else
3752 gid = - XFASTINT (p->pid);
3753
3754 switch (signo)
3755 {
3756#ifdef SIGCONT
3757 case SIGCONT:
3758 p->raw_status_low = Qnil;
3759 p->raw_status_high = Qnil;
3760 p->status = Qrun;
3761 XSETINT (p->tick, ++process_tick);
3762 if (!nomsg)
3763 status_notify ();
3764 break;
3765#endif /* ! defined (SIGCONT) */
3766 case SIGINT:
3767#ifdef VMS
3768 send_process (proc, "\003", 1, Qnil); /* ^C */
3769 goto whoosh;
3770#endif
3771 case SIGQUIT:
3772#ifdef VMS
3773 send_process (proc, "\031", 1, Qnil); /* ^Y */
3774 goto whoosh;
3775#endif
3776 case SIGKILL:
3777#ifdef VMS
3778 sys$forcex (&(XFASTINT (p->pid)), 0, 1);
3779 whoosh:
3780#endif
3781 flush_pending_output (XINT (p->infd));
3782 break;
3783 }
3784
3785 /* If we don't have process groups, send the signal to the immediate
3786 subprocess. That isn't really right, but it's better than any
3787 obvious alternative. */
3788 if (no_pgrp)
3789 {
3790 kill (XFASTINT (p->pid), signo);
3791 return;
3792 }
3793
3794 /* gid may be a pid, or minus a pgrp's number */
3795#ifdef TIOCSIGSEND
3796 if (!NILP (current_group))
3797 ioctl (XINT (p->infd), TIOCSIGSEND, signo);
3798 else
3799 {
3800 gid = - XFASTINT (p->pid);
3801 kill (gid, signo);
3802 }
3803#else /* ! defined (TIOCSIGSEND) */
3804 EMACS_KILLPG (-gid, signo);
3805#endif /* ! defined (TIOCSIGSEND) */
3806}
3807
3808DEFUN ("interrupt-process", Finterrupt_process, Sinterrupt_process, 0, 2, 0,
3809 "Interrupt process PROCESS.\n\
3810PROCESS may be a process, a buffer, or the name of a process or buffer.\n\
3811nil or no arg means current buffer's process.\n\
3812Second arg CURRENT-GROUP non-nil means send signal to\n\
3813the current process-group of the process's controlling terminal\n\
3814rather than to the process's own process group.\n\
3815If the process is a shell, this means interrupt current subjob\n\
3816rather than the shell.\n\
3817\n\
3818If CURRENT-GROUP is `lambda', and if the shell owns the terminal,\n\
3819don't send the signal.")
3820 (process, current_group)
3821 Lisp_Object process, current_group;
3822{
3823 process_send_signal (process, SIGINT, current_group, 0);
3824 return process;
3825}
3826
3827DEFUN ("kill-process", Fkill_process, Skill_process, 0, 2, 0,
3828 "Kill process PROCESS. May be process or name of one.\n\
3829See function `interrupt-process' for more details on usage.")
3830 (process, current_group)
3831 Lisp_Object process, current_group;
3832{
3833 process_send_signal (process, SIGKILL, current_group, 0);
3834 return process;
3835}
3836
3837DEFUN ("quit-process", Fquit_process, Squit_process, 0, 2, 0,
3838 "Send QUIT signal to process PROCESS. May be process or name of one.\n\
3839See function `interrupt-process' for more details on usage.")
3840 (process, current_group)
3841 Lisp_Object process, current_group;
3842{
3843 process_send_signal (process, SIGQUIT, current_group, 0);
3844 return process;
3845}
3846
3847DEFUN ("stop-process", Fstop_process, Sstop_process, 0, 2, 0,
3848 "Stop process PROCESS. May be process or name of one.\n\
3849See function `interrupt-process' for more details on usage.")
3850 (process, current_group)
3851 Lisp_Object process, current_group;
3852{
3853#ifndef SIGTSTP
3854 error ("no SIGTSTP support");
3855#else
3856 process_send_signal (process, SIGTSTP, current_group, 0);
3857#endif
3858 return process;
3859}
3860
3861DEFUN ("continue-process", Fcontinue_process, Scontinue_process, 0, 2, 0,
3862 "Continue process PROCESS. May be process or name of one.\n\
3863See function `interrupt-process' for more details on usage.")
3864 (process, current_group)
3865 Lisp_Object process, current_group;
3866{
3867#ifdef SIGCONT
3868 process_send_signal (process, SIGCONT, current_group, 0);
3869#else
3870 error ("no SIGCONT support");
3871#endif
3872 return process;
3873}
3874
3875DEFUN ("signal-process", Fsignal_process, Ssignal_process,
3876 2, 2, "nProcess number: \nnSignal code: ",
3877 "Send the process with process id PID the signal with code SIGCODE.\n\
3878PID must be an integer. The process need not be a child of this Emacs.\n\
3879SIGCODE may be an integer, or a symbol whose name is a signal name.")
3880 (pid, sigcode)
3881 Lisp_Object pid, sigcode;
3882{
3883 CHECK_NUMBER (pid, 0);
3884
3885#define handle_signal(NAME, VALUE) \
3886 else if (!strcmp (name, NAME)) \
3887 XSETINT (sigcode, VALUE)
3888
3889 if (INTEGERP (sigcode))
3890 ;
3891 else
3892 {
3893 unsigned char *name;
3894
3895 CHECK_SYMBOL (sigcode, 1);
3896 name = XSYMBOL (sigcode)->name->data;
3897
3898 if (0)
3899 ;
3900#ifdef SIGHUP
3901 handle_signal ("SIGHUP", SIGHUP);
3902#endif
3903#ifdef SIGINT
3904 handle_signal ("SIGINT", SIGINT);
3905#endif
3906#ifdef SIGQUIT
3907 handle_signal ("SIGQUIT", SIGQUIT);
3908#endif
3909#ifdef SIGILL
3910 handle_signal ("SIGILL", SIGILL);
3911#endif
3912#ifdef SIGABRT
3913 handle_signal ("SIGABRT", SIGABRT);
3914#endif
3915#ifdef SIGEMT
3916 handle_signal ("SIGEMT", SIGEMT);
3917#endif
3918#ifdef SIGKILL
3919 handle_signal ("SIGKILL", SIGKILL);
3920#endif
3921#ifdef SIGFPE
3922 handle_signal ("SIGFPE", SIGFPE);
3923#endif
3924#ifdef SIGBUS
3925 handle_signal ("SIGBUS", SIGBUS);
3926#endif
3927#ifdef SIGSEGV
3928 handle_signal ("SIGSEGV", SIGSEGV);
3929#endif
3930#ifdef SIGSYS
3931 handle_signal ("SIGSYS", SIGSYS);
3932#endif
3933#ifdef SIGPIPE
3934 handle_signal ("SIGPIPE", SIGPIPE);
3935#endif
3936#ifdef SIGALRM
3937 handle_signal ("SIGALRM", SIGALRM);
3938#endif
3939#ifdef SIGTERM
3940 handle_signal ("SIGTERM", SIGTERM);
3941#endif
3942#ifdef SIGURG
3943 handle_signal ("SIGURG", SIGURG);
3944#endif
3945#ifdef SIGSTOP
3946 handle_signal ("SIGSTOP", SIGSTOP);
3947#endif
3948#ifdef SIGTSTP
3949 handle_signal ("SIGTSTP", SIGTSTP);
3950#endif
3951#ifdef SIGCONT
3952 handle_signal ("SIGCONT", SIGCONT);
3953#endif
3954#ifdef SIGCHLD
3955 handle_signal ("SIGCHLD", SIGCHLD);
3956#endif
3957#ifdef SIGTTIN
3958 handle_signal ("SIGTTIN", SIGTTIN);
3959#endif
3960#ifdef SIGTTOU
3961 handle_signal ("SIGTTOU", SIGTTOU);
3962#endif
3963#ifdef SIGIO
3964 handle_signal ("SIGIO", SIGIO);
3965#endif
3966#ifdef SIGXCPU
3967 handle_signal ("SIGXCPU", SIGXCPU);
3968#endif
3969#ifdef SIGXFSZ
3970 handle_signal ("SIGXFSZ", SIGXFSZ);
3971#endif
3972#ifdef SIGVTALRM
3973 handle_signal ("SIGVTALRM", SIGVTALRM);
3974#endif
3975#ifdef SIGPROF
3976 handle_signal ("SIGPROF", SIGPROF);
3977#endif
3978#ifdef SIGWINCH
3979 handle_signal ("SIGWINCH", SIGWINCH);
3980#endif
3981#ifdef SIGINFO
3982 handle_signal ("SIGINFO", SIGINFO);
3983#endif
3984#ifdef SIGUSR1
3985 handle_signal ("SIGUSR1", SIGUSR1);
3986#endif
3987#ifdef SIGUSR2
3988 handle_signal ("SIGUSR2", SIGUSR2);
3989#endif
3990 else
3991 error ("Undefined signal name %s", name);
3992 }
3993
3994#undef handle_signal
3995
3996 return make_number (kill (XINT (pid), XINT (sigcode)));
3997}
3998
3999DEFUN ("process-send-eof", Fprocess_send_eof, Sprocess_send_eof, 0, 1, 0,
4000 "Make PROCESS see end-of-file in its input.\n\
4001EOF comes after any text already sent to it.\n\
4002PROCESS may be a process, a buffer, the name of a process or buffer, or\n\
4003nil, indicating the current buffer's process.\n\
4004If PROCESS is a network connection, or is a process communicating\n\
4005through a pipe (as opposed to a pty), then you cannot send any more\n\
4006text to PROCESS after you call this function.")
4007 (process)
4008 Lisp_Object process;
4009{
4010 Lisp_Object proc;
4011 struct coding_system *coding;
4012
4013 proc = get_process (process);
4014 coding = proc_encode_coding_system[XINT (XPROCESS (proc)->outfd)];
4015
4016 /* Make sure the process is really alive. */
4017 if (! NILP (XPROCESS (proc)->raw_status_low))
4018 update_status (XPROCESS (proc));
4019 if (! EQ (XPROCESS (proc)->status, Qrun))
4020 error ("Process %s not running", XSTRING (XPROCESS (proc)->name)->data);
4021
4022 if (CODING_REQUIRE_FLUSHING (coding))
4023 {
4024 coding->mode |= CODING_MODE_LAST_BLOCK;
4025 send_process (proc, "", 0, Qnil);
4026 }
4027
4028#ifdef VMS
4029 send_process (proc, "\032", 1, Qnil); /* ^z */
4030#else
4031 if (!NILP (XPROCESS (proc)->pty_flag))
4032 send_process (proc, "\004", 1, Qnil);
4033 else
4034 {
4035 int old_outfd, new_outfd;
4036
4037#ifdef HAVE_SHUTDOWN
4038 /* If this is a network connection, or socketpair is used
4039 for communication with the subprocess, call shutdown to cause EOF.
4040 (In some old system, shutdown to socketpair doesn't work.
4041 Then we just can't win.) */
4042 if (NILP (XPROCESS (proc)->pid)
4043 || XINT (XPROCESS (proc)->outfd) == XINT (XPROCESS (proc)->infd))
4044 shutdown (XINT (XPROCESS (proc)->outfd), 1);
4045 /* In case of socketpair, outfd == infd, so don't close it. */
4046 if (XINT (XPROCESS (proc)->outfd) != XINT (XPROCESS (proc)->infd))
4047 close (XINT (XPROCESS (proc)->outfd));
4048#else /* not HAVE_SHUTDOWN */
4049 close (XINT (XPROCESS (proc)->outfd));
4050#endif /* not HAVE_SHUTDOWN */
4051 new_outfd = open (NULL_DEVICE, O_WRONLY);
4052 old_outfd = XINT (XPROCESS (proc)->outfd);
4053
4054 if (!proc_encode_coding_system[new_outfd])
4055 proc_encode_coding_system[new_outfd]
4056 = (struct coding_system *) xmalloc (sizeof (struct coding_system));
4057 bcopy (proc_encode_coding_system[old_outfd],
4058 proc_encode_coding_system[new_outfd],
4059 sizeof (struct coding_system));
4060 bzero (proc_encode_coding_system[old_outfd],
4061 sizeof (struct coding_system));
4062
4063 XSETINT (XPROCESS (proc)->outfd, new_outfd);
4064 }
4065#endif /* VMS */
4066 return process;
4067}
4068
4069/* Kill all processes associated with `buffer'.
4070 If `buffer' is nil, kill all processes */
4071
4072void
4073kill_buffer_processes (buffer)
4074 Lisp_Object buffer;
4075{
4076 Lisp_Object tail, proc;
4077
4078 for (tail = Vprocess_alist; GC_CONSP (tail); tail = XCDR (tail))
4079 {
4080 proc = XCDR (XCAR (tail));
4081 if (GC_PROCESSP (proc)
4082 && (NILP (buffer) || EQ (XPROCESS (proc)->buffer, buffer)))
4083 {
4084 if (NETCONN_P (proc))
4085 Fdelete_process (proc);
4086 else if (XINT (XPROCESS (proc)->infd) >= 0)
4087 process_send_signal (proc, SIGHUP, Qnil, 1);
4088 }
4089 }
4090}
4091\f
4092/* On receipt of a signal that a child status has changed,
4093 loop asking about children with changed statuses until
4094 the system says there are no more.
4095 All we do is change the status;
4096 we do not run sentinels or print notifications.
4097 That is saved for the next time keyboard input is done,
4098 in order to avoid timing errors. */
4099
4100/** WARNING: this can be called during garbage collection.
4101 Therefore, it must not be fooled by the presence of mark bits in
4102 Lisp objects. */
4103
4104/** USG WARNING: Although it is not obvious from the documentation
4105 in signal(2), on a USG system the SIGCLD handler MUST NOT call
4106 signal() before executing at least one wait(), otherwise the handler
4107 will be called again, resulting in an infinite loop. The relevant
4108 portion of the documentation reads "SIGCLD signals will be queued
4109 and the signal-catching function will be continually reentered until
4110 the queue is empty". Invoking signal() causes the kernel to reexamine
4111 the SIGCLD queue. Fred Fish, UniSoft Systems Inc. */
4112
4113SIGTYPE
4114sigchld_handler (signo)
4115 int signo;
4116{
4117 int old_errno = errno;
4118 Lisp_Object proc;
4119 register struct Lisp_Process *p;
4120 extern EMACS_TIME *input_available_clear_time;
4121
4122#ifdef BSD4_1
4123 extern int sigheld;
4124 sigheld |= sigbit (SIGCHLD);
4125#endif
4126
4127 while (1)
4128 {
4129 register int pid;
4130 WAITTYPE w;
4131 Lisp_Object tail;
4132
4133#ifdef WNOHANG
4134#ifndef WUNTRACED
4135#define WUNTRACED 0
4136#endif /* no WUNTRACED */
4137 /* Keep trying to get a status until we get a definitive result. */
4138 do
4139 {
4140 errno = 0;
4141 pid = wait3 (&w, WNOHANG | WUNTRACED, 0);
4142 }
4143 while (pid <= 0 && errno == EINTR);
4144
4145 if (pid <= 0)
4146 {
4147 /* A real failure. We have done all our job, so return. */
4148
4149 /* USG systems forget handlers when they are used;
4150 must reestablish each time */
4151#if defined (USG) && !defined (POSIX_SIGNALS)
4152 signal (signo, sigchld_handler); /* WARNING - must come after wait3() */
4153#endif
4154#ifdef BSD4_1
4155 sigheld &= ~sigbit (SIGCHLD);
4156 sigrelse (SIGCHLD);
4157#endif
4158 errno = old_errno;
4159 return;
4160 }
4161#else
4162 pid = wait (&w);
4163#endif /* no WNOHANG */
4164
4165 /* Find the process that signaled us, and record its status. */
4166
4167 p = 0;
4168 for (tail = Vprocess_alist; CONSP (tail); tail = XCDR (tail))
4169 {
4170 proc = XCDR (XCAR (tail));
4171 p = XPROCESS (proc);
4172 if (EQ (p->childp, Qt) && XFASTINT (p->pid) == pid)
4173 break;
4174 p = 0;
4175 }
4176
4177 /* Look for an asynchronous process whose pid hasn't been filled
4178 in yet. */
4179 if (p == 0)
4180 for (tail = Vprocess_alist; CONSP (tail); tail = XCDR (tail))
4181 {
4182 proc = XCDR (XCAR (tail));
4183 p = XPROCESS (proc);
4184 if (INTEGERP (p->pid) && XINT (p->pid) == -1)
4185 break;
4186 p = 0;
4187 }
4188
4189 /* Change the status of the process that was found. */
4190 if (p != 0)
4191 {
4192 union { int i; WAITTYPE wt; } u;
4193 int clear_desc_flag = 0;
4194
4195 XSETINT (p->tick, ++process_tick);
4196 u.wt = w;
4197 XSETINT (p->raw_status_low, u.i & 0xffff);
4198 XSETINT (p->raw_status_high, u.i >> 16);
4199
4200 /* If process has terminated, stop waiting for its output. */
4201 if ((WIFSIGNALED (w) || WIFEXITED (w))
4202 && XINT (p->infd) >= 0)
4203 clear_desc_flag = 1;
4204
4205 /* We use clear_desc_flag to avoid a compiler bug in Microsoft C. */
4206 if (clear_desc_flag)
4207 {
4208 FD_CLR (XINT (p->infd), &input_wait_mask);
4209 FD_CLR (XINT (p->infd), &non_keyboard_wait_mask);
4210 }
4211
4212 /* Tell wait_reading_process_input that it needs to wake up and
4213 look around. */
4214 if (input_available_clear_time)
4215 EMACS_SET_SECS_USECS (*input_available_clear_time, 0, 0);
4216 }
4217
4218 /* There was no asynchronous process found for that id. Check
4219 if we have a synchronous process. */
4220 else
4221 {
4222 synch_process_alive = 0;
4223
4224 /* Report the status of the synchronous process. */
4225 if (WIFEXITED (w))
4226 synch_process_retcode = WRETCODE (w);
4227 else if (WIFSIGNALED (w))
4228 {
4229 int code = WTERMSIG (w);
4230 char *signame = 0;
4231
4232 if (code < NSIG)
4233 {
4234#ifndef VMS
4235 /* Suppress warning if the table has const char *. */
4236 signame = (char *) sys_siglist[code];
4237#else
4238 signame = sys_errlist[code];
4239#endif
4240 }
4241 if (signame == 0)
4242 signame = "unknown";
4243
4244 synch_process_death = signame;
4245 }
4246
4247 /* Tell wait_reading_process_input that it needs to wake up and
4248 look around. */
4249 if (input_available_clear_time)
4250 EMACS_SET_SECS_USECS (*input_available_clear_time, 0, 0);
4251 }
4252
4253 /* On some systems, we must return right away.
4254 If any more processes want to signal us, we will
4255 get another signal.
4256 Otherwise (on systems that have WNOHANG), loop around
4257 to use up all the processes that have something to tell us. */
4258#if defined (USG) && ! (defined (HPUX) && defined (WNOHANG)) || defined (WINDOWSNT)
4259#if defined (USG) && ! defined (POSIX_SIGNALS)
4260 signal (signo, sigchld_handler);
4261#endif
4262 errno = old_errno;
4263 return;
4264#endif /* USG, but not HPUX with WNOHANG */
4265 }
4266}
4267\f
4268
4269static Lisp_Object
4270exec_sentinel_unwind (data)
4271 Lisp_Object data;
4272{
4273 XPROCESS (XCAR (data))->sentinel = XCDR (data);
4274 return Qnil;
4275}
4276
4277static Lisp_Object
4278exec_sentinel_error_handler (error)
4279 Lisp_Object error;
4280{
4281 cmd_error_internal (error, "error in process sentinel: ");
4282 Vinhibit_quit = Qt;
4283 update_echo_area ();
4284 Fsleep_for (make_number (2), Qnil);
4285}
4286
4287static void
4288exec_sentinel (proc, reason)
4289 Lisp_Object proc, reason;
4290{
4291 Lisp_Object sentinel, obuffer, odeactivate, okeymap;
4292 register struct Lisp_Process *p = XPROCESS (proc);
4293 int count = specpdl_ptr - specpdl;
4294 int outer_running_asynch_code = running_asynch_code;
4295 int waiting = waiting_for_user_input_p;
4296
4297 /* No need to gcpro these, because all we do with them later
4298 is test them for EQness, and none of them should be a string. */
4299 odeactivate = Vdeactivate_mark;
4300 XSETBUFFER (obuffer, current_buffer);
4301 okeymap = current_buffer->keymap;
4302
4303 sentinel = p->sentinel;
4304 if (NILP (sentinel))
4305 return;
4306
4307 /* Zilch the sentinel while it's running, to avoid recursive invocations;
4308 assure that it gets restored no matter how the sentinel exits. */
4309 p->sentinel = Qnil;
4310 record_unwind_protect (exec_sentinel_unwind, Fcons (proc, sentinel));
4311 /* Inhibit quit so that random quits don't screw up a running filter. */
4312 specbind (Qinhibit_quit, Qt);
4313 specbind (Qlast_nonmenu_event, Qt);
4314
4315 /* In case we get recursively called,
4316 and we already saved the match data nonrecursively,
4317 save the same match data in safely recursive fashion. */
4318 if (outer_running_asynch_code)
4319 {
4320 Lisp_Object tem;
4321 tem = Fmatch_data (Qnil, Qnil);
4322 restore_match_data ();
4323 record_unwind_protect (Fset_match_data, Fmatch_data (Qnil, Qnil));
4324 Fset_match_data (tem);
4325 }
4326
4327 /* For speed, if a search happens within this code,
4328 save the match data in a special nonrecursive fashion. */
4329 running_asynch_code = 1;
4330
4331 internal_condition_case_1 (read_process_output_call,
4332 Fcons (sentinel,
4333 Fcons (proc, Fcons (reason, Qnil))),
4334 !NILP (Vdebug_on_error) ? Qnil : Qerror,
4335 exec_sentinel_error_handler);
4336
4337 /* If we saved the match data nonrecursively, restore it now. */
4338 restore_match_data ();
4339 running_asynch_code = outer_running_asynch_code;
4340
4341 Vdeactivate_mark = odeactivate;
4342
4343 /* Restore waiting_for_user_input_p as it was
4344 when we were called, in case the filter clobbered it. */
4345 waiting_for_user_input_p = waiting;
4346
4347#if 0
4348 if (! EQ (Fcurrent_buffer (), obuffer)
4349 || ! EQ (current_buffer->keymap, okeymap))
4350#endif
4351 /* But do it only if the caller is actually going to read events.
4352 Otherwise there's no need to make him wake up, and it could
4353 cause trouble (for example it would make Fsit_for return). */
4354 if (waiting_for_user_input_p == -1)
4355 record_asynch_buffer_change ();
4356
4357 unbind_to (count, Qnil);
4358}
4359
4360/* Report all recent events of a change in process status
4361 (either run the sentinel or output a message).
4362 This is done while Emacs is waiting for keyboard input. */
4363
4364void
4365status_notify ()
4366{
4367 register Lisp_Object proc, buffer;
4368 Lisp_Object tail, msg;
4369 struct gcpro gcpro1, gcpro2;
4370
4371 tail = Qnil;
4372 msg = Qnil;
4373 /* We need to gcpro tail; if read_process_output calls a filter
4374 which deletes a process and removes the cons to which tail points
4375 from Vprocess_alist, and then causes a GC, tail is an unprotected
4376 reference. */
4377 GCPRO2 (tail, msg);
4378
4379 /* Set this now, so that if new processes are created by sentinels
4380 that we run, we get called again to handle their status changes. */
4381 update_tick = process_tick;
4382
4383 for (tail = Vprocess_alist; !NILP (tail); tail = Fcdr (tail))
4384 {
4385 Lisp_Object symbol;
4386 register struct Lisp_Process *p;
4387
4388 proc = Fcdr (Fcar (tail));
4389 p = XPROCESS (proc);
4390
4391 if (XINT (p->tick) != XINT (p->update_tick))
4392 {
4393 XSETINT (p->update_tick, XINT (p->tick));
4394
4395 /* If process is still active, read any output that remains. */
4396 while (! EQ (p->filter, Qt)
4397 && XINT (p->infd) >= 0
4398 && read_process_output (proc, XINT (p->infd)) > 0);
4399
4400 buffer = p->buffer;
4401
4402 /* Get the text to use for the message. */
4403 if (!NILP (p->raw_status_low))
4404 update_status (p);
4405 msg = status_message (p->status);
4406
4407 /* If process is terminated, deactivate it or delete it. */
4408 symbol = p->status;
4409 if (CONSP (p->status))
4410 symbol = XCAR (p->status);
4411
4412 if (EQ (symbol, Qsignal) || EQ (symbol, Qexit)
4413 || EQ (symbol, Qclosed))
4414 {
4415 if (delete_exited_processes)
4416 remove_process (proc);
4417 else
4418 deactivate_process (proc);
4419 }
4420
4421 /* The actions above may have further incremented p->tick.
4422 So set p->update_tick again
4423 so that an error in the sentinel will not cause
4424 this code to be run again. */
4425 XSETINT (p->update_tick, XINT (p->tick));
4426 /* Now output the message suitably. */
4427 if (!NILP (p->sentinel))
4428 exec_sentinel (proc, msg);
4429 /* Don't bother with a message in the buffer
4430 when a process becomes runnable. */
4431 else if (!EQ (symbol, Qrun) && !NILP (buffer))
4432 {
4433 Lisp_Object ro, tem;
4434 struct buffer *old = current_buffer;
4435 int opoint, opoint_byte;
4436 int before, before_byte;
4437
4438 ro = XBUFFER (buffer)->read_only;
4439
4440 /* Avoid error if buffer is deleted
4441 (probably that's why the process is dead, too) */
4442 if (NILP (XBUFFER (buffer)->name))
4443 continue;
4444 Fset_buffer (buffer);
4445
4446 opoint = PT;
4447 opoint_byte = PT_BYTE;
4448 /* Insert new output into buffer
4449 at the current end-of-output marker,
4450 thus preserving logical ordering of input and output. */
4451 if (XMARKER (p->mark)->buffer)
4452 Fgoto_char (p->mark);
4453 else
4454 SET_PT_BOTH (ZV, ZV_BYTE);
4455
4456 before = PT;
4457 before_byte = PT_BYTE;
4458
4459 tem = current_buffer->read_only;
4460 current_buffer->read_only = Qnil;
4461 insert_string ("\nProcess ");
4462 Finsert (1, &p->name);
4463 insert_string (" ");
4464 Finsert (1, &msg);
4465 current_buffer->read_only = tem;
4466 set_marker_both (p->mark, p->buffer, PT, PT_BYTE);
4467
4468 if (opoint >= before)
4469 SET_PT_BOTH (opoint + (PT - before),
4470 opoint_byte + (PT_BYTE - before_byte));
4471 else
4472 SET_PT_BOTH (opoint, opoint_byte);
4473
4474 set_buffer_internal (old);
4475 }
4476 }
4477 } /* end for */
4478
4479 update_mode_lines++; /* in case buffers use %s in mode-line-format */
4480 redisplay_preserve_echo_area ();
4481
4482 UNGCPRO;
4483}
4484
4485\f
4486DEFUN ("set-process-coding-system", Fset_process_coding_system,
4487 Sset_process_coding_system, 1, 3, 0,
4488 "Set coding systems of PROCESS to DECODING and ENCODING.\n\
4489DECODING will be used to decode subprocess output and ENCODING to\n\
4490encode subprocess input.")
4491 (proc, decoding, encoding)
4492 register Lisp_Object proc, decoding, encoding;
4493{
4494 register struct Lisp_Process *p;
4495
4496 CHECK_PROCESS (proc, 0);
4497 p = XPROCESS (proc);
4498 if (XINT (p->infd) < 0)
4499 error ("Input file descriptor of %s closed", XSTRING (p->name)->data);
4500 if (XINT (p->outfd) < 0)
4501 error ("Output file descriptor of %s closed", XSTRING (p->name)->data);
4502
4503 p->decode_coding_system = Fcheck_coding_system (decoding);
4504 p->encode_coding_system = Fcheck_coding_system (encoding);
4505 setup_coding_system (decoding,
4506 proc_decode_coding_system[XINT (p->infd)]);
4507 setup_coding_system (encoding,
4508 proc_encode_coding_system[XINT (p->outfd)]);
4509
4510 return Qnil;
4511}
4512
4513DEFUN ("process-coding-system",
4514 Fprocess_coding_system, Sprocess_coding_system, 1, 1, 0,
4515 "Return a cons of coding systems for decoding and encoding of PROCESS.")
4516 (proc)
4517 register Lisp_Object proc;
4518{
4519 CHECK_PROCESS (proc, 0);
4520 return Fcons (XPROCESS (proc)->decode_coding_system,
4521 XPROCESS (proc)->encode_coding_system);
4522}
4523\f
4524/* The first time this is called, assume keyboard input comes from DESC
4525 instead of from where we used to expect it.
4526 Subsequent calls mean assume input keyboard can come from DESC
4527 in addition to other places. */
4528
4529static int add_keyboard_wait_descriptor_called_flag;
4530
4531void
4532add_keyboard_wait_descriptor (desc)
4533 int desc;
4534{
4535 if (! add_keyboard_wait_descriptor_called_flag)
4536 FD_CLR (0, &input_wait_mask);
4537 add_keyboard_wait_descriptor_called_flag = 1;
4538 FD_SET (desc, &input_wait_mask);
4539 FD_SET (desc, &non_process_wait_mask);
4540 if (desc > max_keyboard_desc)
4541 max_keyboard_desc = desc;
4542}
4543
4544/* From now on, do not expect DESC to give keyboard input. */
4545
4546void
4547delete_keyboard_wait_descriptor (desc)
4548 int desc;
4549{
4550 int fd;
4551 int lim = max_keyboard_desc;
4552
4553 FD_CLR (desc, &input_wait_mask);
4554 FD_CLR (desc, &non_process_wait_mask);
4555
4556 if (desc == max_keyboard_desc)
4557 for (fd = 0; fd < lim; fd++)
4558 if (FD_ISSET (fd, &input_wait_mask)
4559 && !FD_ISSET (fd, &non_keyboard_wait_mask))
4560 max_keyboard_desc = fd;
4561}
4562
4563/* Return nonzero if *MASK has a bit set
4564 that corresponds to one of the keyboard input descriptors. */
4565
4566int
4567keyboard_bit_set (mask)
4568 SELECT_TYPE *mask;
4569{
4570 int fd;
4571
4572 for (fd = 0; fd <= max_keyboard_desc; fd++)
4573 if (FD_ISSET (fd, mask) && FD_ISSET (fd, &input_wait_mask)
4574 && !FD_ISSET (fd, &non_keyboard_wait_mask))
4575 return 1;
4576
4577 return 0;
4578}
4579\f
4580void
4581init_process ()
4582{
4583 register int i;
4584
4585#ifdef SIGCHLD
4586#ifndef CANNOT_DUMP
4587 if (! noninteractive || initialized)
4588#endif
4589 signal (SIGCHLD, sigchld_handler);
4590#endif
4591
4592 FD_ZERO (&input_wait_mask);
4593 FD_ZERO (&non_keyboard_wait_mask);
4594 FD_ZERO (&non_process_wait_mask);
4595 max_process_desc = 0;
4596
4597 FD_SET (0, &input_wait_mask);
4598
4599 Vprocess_alist = Qnil;
4600 for (i = 0; i < MAXDESC; i++)
4601 {
4602 chan_process[i] = Qnil;
4603 proc_buffered_char[i] = -1;
4604 }
4605 bzero (proc_decode_coding_system, sizeof proc_decode_coding_system);
4606 bzero (proc_encode_coding_system, sizeof proc_encode_coding_system);
4607
4608 Vdefault_process_coding_system
4609 = (NILP (buffer_defaults.enable_multibyte_characters)
4610 ? Fcons (Qraw_text, Qnil)
4611 : Fcons (Qemacs_mule, Qnil));
4612}
4613
4614void
4615syms_of_process ()
4616{
4617 Qprocessp = intern ("processp");
4618 staticpro (&Qprocessp);
4619 Qrun = intern ("run");
4620 staticpro (&Qrun);
4621 Qstop = intern ("stop");
4622 staticpro (&Qstop);
4623 Qsignal = intern ("signal");
4624 staticpro (&Qsignal);
4625
4626 /* Qexit is already staticpro'd by syms_of_eval; don't staticpro it
4627 here again.
4628
4629 Qexit = intern ("exit");
4630 staticpro (&Qexit); */
4631
4632 Qopen = intern ("open");
4633 staticpro (&Qopen);
4634 Qclosed = intern ("closed");
4635 staticpro (&Qclosed);
4636
4637 Qlast_nonmenu_event = intern ("last-nonmenu-event");
4638 staticpro (&Qlast_nonmenu_event);
4639
4640 staticpro (&Vprocess_alist);
4641
4642 DEFVAR_BOOL ("delete-exited-processes", &delete_exited_processes,
4643 "*Non-nil means delete processes immediately when they exit.\n\
4644nil means don't delete them until `list-processes' is run.");
4645
4646 delete_exited_processes = 1;
4647
4648 DEFVAR_LISP ("process-connection-type", &Vprocess_connection_type,
4649 "Control type of device used to communicate with subprocesses.\n\
4650Values are nil to use a pipe, or t or `pty' to use a pty.\n\
4651The value has no effect if the system has no ptys or if all ptys are busy:\n\
4652then a pipe is used in any case.\n\
4653The value takes effect when `start-process' is called.");
4654 Vprocess_connection_type = Qt;
4655
4656 defsubr (&Sprocessp);
4657 defsubr (&Sget_process);
4658 defsubr (&Sget_buffer_process);
4659 defsubr (&Sdelete_process);
4660 defsubr (&Sprocess_status);
4661 defsubr (&Sprocess_exit_status);
4662 defsubr (&Sprocess_id);
4663 defsubr (&Sprocess_name);
4664 defsubr (&Sprocess_tty_name);
4665 defsubr (&Sprocess_command);
4666 defsubr (&Sset_process_buffer);
4667 defsubr (&Sprocess_buffer);
4668 defsubr (&Sprocess_mark);
4669 defsubr (&Sset_process_filter);
4670 defsubr (&Sprocess_filter);
4671 defsubr (&Sset_process_sentinel);
4672 defsubr (&Sprocess_sentinel);
4673 defsubr (&Sset_process_window_size);
4674 defsubr (&Sset_process_inherit_coding_system_flag);
4675 defsubr (&Sprocess_inherit_coding_system_flag);
4676 defsubr (&Sprocess_kill_without_query);
4677 defsubr (&Sprocess_contact);
4678 defsubr (&Slist_processes);
4679 defsubr (&Sprocess_list);
4680 defsubr (&Sstart_process);
4681#ifdef HAVE_SOCKETS
4682 defsubr (&Sopen_network_stream);
4683#endif /* HAVE_SOCKETS */
4684 defsubr (&Saccept_process_output);
4685 defsubr (&Sprocess_send_region);
4686 defsubr (&Sprocess_send_string);
4687 defsubr (&Sinterrupt_process);
4688 defsubr (&Skill_process);
4689 defsubr (&Squit_process);
4690 defsubr (&Sstop_process);
4691 defsubr (&Scontinue_process);
4692 defsubr (&Sprocess_running_child_p);
4693 defsubr (&Sprocess_send_eof);
4694 defsubr (&Ssignal_process);
4695 defsubr (&Swaiting_for_user_input_p);
4696/* defsubr (&Sprocess_connection); */
4697 defsubr (&Sset_process_coding_system);
4698 defsubr (&Sprocess_coding_system);
4699}
4700
4701\f
4702#else /* not subprocesses */
4703
4704#include <sys/types.h>
4705#include <errno.h>
4706
4707#include "lisp.h"
4708#include "systime.h"
4709#include "charset.h"
4710#include "coding.h"
4711#include "termopts.h"
4712#include "sysselect.h"
4713
4714extern int frame_garbaged;
4715
4716extern EMACS_TIME timer_check ();
4717extern int timers_run;
4718
4719/* As described above, except assuming that there are no subprocesses:
4720
4721 Wait for timeout to elapse and/or keyboard input to be available.
4722
4723 time_limit is:
4724 timeout in seconds, or
4725 zero for no limit, or
4726 -1 means gobble data immediately available but don't wait for any.
4727
4728 read_kbd is a Lisp_Object:
4729 0 to ignore keyboard input, or
4730 1 to return when input is available, or
4731 -1 means caller will actually read the input, so don't throw to
4732 the quit handler.
4733 a cons cell, meaning wait until its car is non-nil
4734 (and gobble terminal input into the buffer if any arrives), or
4735 We know that read_kbd will never be a Lisp_Process, since
4736 `subprocesses' isn't defined.
4737
4738 do_display != 0 means redisplay should be done to show subprocess
4739 output that arrives.
4740
4741 Return true iff we received input from any process. */
4742
4743int
4744wait_reading_process_input (time_limit, microsecs, read_kbd, do_display)
4745 int time_limit, microsecs;
4746 Lisp_Object read_kbd;
4747 int do_display;
4748{
4749 register int nfds;
4750 EMACS_TIME end_time, timeout;
4751 SELECT_TYPE waitchannels;
4752 int xerrno;
4753 Lisp_Object *wait_for_cell = 0;
4754
4755 /* If waiting for non-nil in a cell, record where. */
4756 if (CONSP (read_kbd))
4757 {
4758 wait_for_cell = &XCAR (read_kbd);
4759 XSETFASTINT (read_kbd, 0);
4760 }
4761
4762 /* What does time_limit really mean? */
4763 if (time_limit || microsecs)
4764 {
4765 EMACS_GET_TIME (end_time);
4766 EMACS_SET_SECS_USECS (timeout, time_limit, microsecs);
4767 EMACS_ADD_TIME (end_time, end_time, timeout);
4768 }
4769
4770 /* Turn off periodic alarms (in case they are in use)
4771 because the select emulator uses alarms. */
4772 stop_polling ();
4773
4774 while (1)
4775 {
4776 int timeout_reduced_for_timers = 0;
4777
4778 /* If calling from keyboard input, do not quit
4779 since we want to return C-g as an input character.
4780 Otherwise, do pending quit if requested. */
4781 if (XINT (read_kbd) >= 0)
4782 QUIT;
4783
4784 /* Exit now if the cell we're waiting for became non-nil. */
4785 if (wait_for_cell && ! NILP (*wait_for_cell))
4786 break;
4787
4788 /* Compute time from now till when time limit is up */
4789 /* Exit if already run out */
4790 if (time_limit == -1)
4791 {
4792 /* -1 specified for timeout means
4793 gobble output available now
4794 but don't wait at all. */
4795
4796 EMACS_SET_SECS_USECS (timeout, 0, 0);
4797 }
4798 else if (time_limit || microsecs)
4799 {
4800 EMACS_GET_TIME (timeout);
4801 EMACS_SUB_TIME (timeout, end_time, timeout);
4802 if (EMACS_TIME_NEG_P (timeout))
4803 break;
4804 }
4805 else
4806 {
4807 EMACS_SET_SECS_USECS (timeout, 100000, 0);
4808 }
4809
4810 /* If our caller will not immediately handle keyboard events,
4811 run timer events directly.
4812 (Callers that will immediately read keyboard events
4813 call timer_delay on their own.) */
4814 if (! wait_for_cell)
4815 {
4816 EMACS_TIME timer_delay;
4817 int old_timers_run;
4818
4819 retry:
4820 old_timers_run = timers_run;
4821 timer_delay = timer_check (1);
4822 if (timers_run != old_timers_run && do_display)
4823 {
4824 redisplay_preserve_echo_area ();
4825 /* We must retry, since a timer may have requeued itself
4826 and that could alter the time delay. */
4827 goto retry;
4828 }
4829
4830 /* If there is unread keyboard input, also return. */
4831 if (XINT (read_kbd) != 0
4832 && requeued_events_pending_p ())
4833 break;
4834
4835 if (! EMACS_TIME_NEG_P (timer_delay) && time_limit != -1)
4836 {
4837 EMACS_TIME difference;
4838 EMACS_SUB_TIME (difference, timer_delay, timeout);
4839 if (EMACS_TIME_NEG_P (difference))
4840 {
4841 timeout = timer_delay;
4842 timeout_reduced_for_timers = 1;
4843 }
4844 }
4845 }
4846
4847 /* Cause C-g and alarm signals to take immediate action,
4848 and cause input available signals to zero out timeout. */
4849 if (XINT (read_kbd) < 0)
4850 set_waiting_for_input (&timeout);
4851
4852 /* Wait till there is something to do. */
4853
4854 if (! XINT (read_kbd) && wait_for_cell == 0)
4855 FD_ZERO (&waitchannels);
4856 else
4857 FD_SET (0, &waitchannels);
4858
4859 /* If a frame has been newly mapped and needs updating,
4860 reprocess its display stuff. */
4861 if (frame_garbaged && do_display)
4862 {
4863 clear_waiting_for_input ();
4864 redisplay_preserve_echo_area ();
4865 if (XINT (read_kbd) < 0)
4866 set_waiting_for_input (&timeout);
4867 }
4868
4869 if (XINT (read_kbd) && detect_input_pending ())
4870 {
4871 nfds = 0;
4872 FD_ZERO (&waitchannels);
4873 }
4874 else
4875 nfds = select (1, &waitchannels, (SELECT_TYPE *)0, (SELECT_TYPE *)0,
4876 &timeout);
4877
4878 xerrno = errno;
4879
4880 /* Make C-g and alarm signals set flags again */
4881 clear_waiting_for_input ();
4882
4883 /* If we woke up due to SIGWINCH, actually change size now. */
4884 do_pending_window_change (0);
4885
4886 if (time_limit && nfds == 0 && ! timeout_reduced_for_timers)
4887 /* We waited the full specified time, so return now. */
4888 break;
4889
4890 if (nfds == -1)
4891 {
4892 /* If the system call was interrupted, then go around the
4893 loop again. */
4894 if (xerrno == EINTR)
4895 FD_ZERO (&waitchannels);
4896 else
4897 error ("select error: %s", strerror (xerrno));
4898 }
4899#ifdef sun
4900 else if (nfds > 0 && (waitchannels & 1) && interrupt_input)
4901 /* System sometimes fails to deliver SIGIO. */
4902 kill (getpid (), SIGIO);
4903#endif
4904#ifdef SIGIO
4905 if (XINT (read_kbd) && interrupt_input && (waitchannels & 1))
4906 kill (getpid (), SIGIO);
4907#endif
4908
4909 /* Check for keyboard input */
4910
4911 if ((XINT (read_kbd) != 0)
4912 && detect_input_pending_run_timers (do_display))
4913 {
4914 swallow_events (do_display);
4915 if (detect_input_pending_run_timers (do_display))
4916 break;
4917 }
4918
4919 /* If there is unread keyboard input, also return. */
4920 if (XINT (read_kbd) != 0
4921 && requeued_events_pending_p ())
4922 break;
4923
4924 /* If wait_for_cell. check for keyboard input
4925 but don't run any timers.
4926 ??? (It seems wrong to me to check for keyboard
4927 input at all when wait_for_cell, but the code
4928 has been this way since July 1994.
4929 Try changing this after version 19.31.) */
4930 if (wait_for_cell
4931 && detect_input_pending ())
4932 {
4933 swallow_events (do_display);
4934 if (detect_input_pending ())
4935 break;
4936 }
4937
4938 /* Exit now if the cell we're waiting for became non-nil. */
4939 if (wait_for_cell && ! NILP (*wait_for_cell))
4940 break;
4941 }
4942
4943 start_polling ();
4944
4945 return 0;
4946}
4947
4948
4949DEFUN ("get-buffer-process", Fget_buffer_process, Sget_buffer_process, 1, 1, 0,
4950 /* Don't confuse make-docfile by having two doc strings for this function.
4951 make-docfile does not pay attention to #if, for good reason! */
4952 0)
4953 (name)
4954 register Lisp_Object name;
4955{
4956 return Qnil;
4957}
4958
4959DEFUN ("process-inherit-coding-system-flag",
4960 Fprocess_inherit_coding_system_flag, Sprocess_inherit_coding_system_flag,
4961 1, 1, 0,
4962 /* Don't confuse make-docfile by having two doc strings for this function.
4963 make-docfile does not pay attention to #if, for good reason! */
4964 0)
4965 (process)
4966 register Lisp_Object process;
4967{
4968 /* Ignore the argument and return the value of
4969 inherit-process-coding-system. */
4970 return inherit_process_coding_system ? Qt : Qnil;
4971}
4972
4973/* Kill all processes associated with `buffer'.
4974 If `buffer' is nil, kill all processes.
4975 Since we have no subprocesses, this does nothing. */
4976
4977void
4978kill_buffer_processes (buffer)
4979 Lisp_Object buffer;
4980{
4981}
4982
4983void
4984init_process ()
4985{
4986}
4987
4988void
4989syms_of_process ()
4990{
4991 defsubr (&Sget_buffer_process);
4992 defsubr (&Sprocess_inherit_coding_system_flag);
4993}
4994
4995\f
4996#endif /* not subprocesses */