1 /* Asynchronous subprocess control for GNU Emacs.
2 Copyright (C) 1985, 86, 87, 88, 93, 94, 95, 96, 98, 1999,
3 2001, 2002 Free Software Foundation, Inc.
5 This file is part of GNU Emacs.
7 GNU Emacs is free software; you can redistribute it and/or modify
8 it under the terms of the GNU General Public License as published by
9 the Free Software Foundation; either version 2, or (at your option)
12 GNU Emacs is distributed in the hope that it will be useful,
13 but WITHOUT ANY WARRANTY; without even the implied warranty of
14 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
15 GNU General Public License for more details.
17 You should have received a copy of the GNU General Public License
18 along with GNU Emacs; see the file COPYING. If not, write to
19 the Free Software Foundation, Inc., 59 Temple Place - Suite 330,
20 Boston, MA 02111-1307, USA. */
26 /* This file is split into two parts by the following preprocessor
27 conditional. The 'then' clause contains all of the support for
28 asynchronous subprocesses. The 'else' clause contains stub
29 versions of some of the asynchronous subprocess routines that are
30 often called elsewhere in Emacs, so we don't have to #ifdef the
31 sections that call them. */
39 #include <sys/types.h> /* some typedefs are used in sys/file.h */
46 #if defined(WINDOWSNT) || defined(UNIX98_PTYS)
49 #endif /* not WINDOWSNT */
51 #ifdef HAVE_SOCKETS /* TCP connection support, if kernel can do it */
52 #include <sys/socket.h>
54 #include <netinet/in.h>
55 #include <arpa/inet.h>
56 #ifdef NEED_NET_ERRNO_H
57 #include <net/errno.h>
58 #endif /* NEED_NET_ERRNO_H */
60 /* Are local (unix) sockets supported? */
61 #if defined (HAVE_SYS_UN_H) && !defined (NO_SOCKETS_IN_FILE_SYSTEM)
62 #if !defined (AF_LOCAL) && defined (AF_UNIX)
63 #define AF_LOCAL AF_UNIX
66 #define HAVE_LOCAL_SOCKETS
70 #endif /* HAVE_SOCKETS */
72 /* TERM is a poor-man's SLIP, used on GNU/Linux. */
77 /* On some systems, e.g. DGUX, inet_addr returns a 'struct in_addr'. */
78 #ifdef HAVE_BROKEN_INET_ADDR
79 #define IN_ADDR struct in_addr
80 #define NUMERIC_ADDR_ERROR (numeric_addr.s_addr == -1)
82 #define IN_ADDR unsigned long
83 #define NUMERIC_ADDR_ERROR (numeric_addr == -1)
86 #if defined(BSD_SYSTEM) || defined(STRIDE)
87 #include <sys/ioctl.h>
88 #if !defined (O_NDELAY) && defined (HAVE_PTYS) && !defined(USG5)
90 #endif /* HAVE_PTYS and no O_NDELAY */
91 #endif /* BSD_SYSTEM || STRIDE */
93 #ifdef BROKEN_O_NONBLOCK
95 #endif /* BROKEN_O_NONBLOCK */
102 #include <sys/sysmacros.h> /* for "minor" */
103 #endif /* not IRIS */
106 #include <sys/wait.h>
118 #include "termhooks.h"
119 #include "termopts.h"
120 #include "commands.h"
121 #include "keyboard.h"
123 #include "blockinput.h"
124 #include "dispextern.h"
125 #include "composite.h"
128 Lisp_Object Qprocessp
;
129 Lisp_Object Qrun
, Qstop
, Qsignal
;
130 Lisp_Object Qopen
, Qclosed
, Qconnect
, Qfailed
, Qlisten
;
131 Lisp_Object Qlocal
, Qdatagram
;
132 Lisp_Object QCname
, QCbuffer
, QChost
, QCservice
, QCtype
;
133 Lisp_Object QClocal
, QCremote
, QCcoding
;
134 Lisp_Object QCserver
, QCnowait
, QCnoquery
, QCstop
;
135 Lisp_Object QCsentinel
, QClog
, QCoptions
, QCplist
;
136 Lisp_Object QCfilter_multibyte
;
137 Lisp_Object Qlast_nonmenu_event
;
138 /* QCfamily is declared and initialized in xfaces.c,
139 QCfilter in keyboard.c. */
140 extern Lisp_Object QCfamily
, QCfilter
;
142 /* Qexit is declared and initialized in eval.c. */
144 /* QCfamily is defined in xfaces.c. */
145 extern Lisp_Object QCfamily
;
146 /* QCfilter is defined in keyboard.c. */
147 extern Lisp_Object QCfilter
;
149 /* a process object is a network connection when its childp field is neither
150 Qt nor Qnil but is instead a property list (KEY VAL ...). */
153 #define NETCONN_P(p) (GC_CONSP (XPROCESS (p)->childp))
154 #define NETCONN1_P(p) (GC_CONSP ((p)->childp))
156 #define NETCONN_P(p) 0
157 #define NETCONN1_P(p) 0
158 #endif /* HAVE_SOCKETS */
160 /* Define first descriptor number available for subprocesses. */
162 #define FIRST_PROC_DESC 1
164 #define FIRST_PROC_DESC 3
167 /* Define SIGCHLD as an alias for SIGCLD. There are many conditionals
170 #if !defined (SIGCHLD) && defined (SIGCLD)
171 #define SIGCHLD SIGCLD
174 #include "syssignal.h"
178 extern void set_waiting_for_input
P_ ((EMACS_TIME
*));
184 extern char *sys_errlist
[];
191 /* t means use pty, nil means use a pipe,
192 maybe other values to come. */
193 static Lisp_Object Vprocess_connection_type
;
197 #include <sys/socket.h>
201 /* These next two vars are non-static since sysdep.c uses them in the
202 emulation of `select'. */
203 /* Number of events of change of status of a process. */
205 /* Number of events for which the user or sentinel has been notified. */
208 /* Define NON_BLOCKING_CONNECT if we can support non-blocking connects. */
210 #ifdef BROKEN_NON_BLOCKING_CONNECT
211 #undef NON_BLOCKING_CONNECT
213 #ifndef NON_BLOCKING_CONNECT
216 #if defined (HAVE_GETPEERNAME) || defined (GNU_LINUX)
217 #if defined (O_NONBLOCK) || defined (O_NDELAY)
218 #if defined (EWOULDBLOCK) || defined (EINPROGRESS)
219 #define NON_BLOCKING_CONNECT
220 #endif /* EWOULDBLOCK || EINPROGRESS */
221 #endif /* O_NONBLOCK || O_NDELAY */
222 #endif /* HAVE_GETPEERNAME || GNU_LINUX */
223 #endif /* HAVE_SELECT */
224 #endif /* HAVE_SOCKETS */
225 #endif /* NON_BLOCKING_CONNECT */
226 #endif /* BROKEN_NON_BLOCKING_CONNECT */
228 /* Define DATAGRAM_SOCKETS if datagrams can be used safely on
229 this system. We need to read full packets, so we need a
230 "non-destructive" select. So we require either native select,
231 or emulation of select using FIONREAD. */
233 #ifdef BROKEN_DATAGRAM_SOCKETS
234 #undef DATAGRAM_SOCKETS
236 #ifndef DATAGRAM_SOCKETS
238 #if defined (HAVE_SELECT) || defined (FIONREAD)
239 #if defined (HAVE_SENDTO) && defined (HAVE_RECVFROM) && defined (EMSGSIZE)
240 #define DATAGRAM_SOCKETS
241 #endif /* HAVE_SENDTO && HAVE_RECVFROM && EMSGSIZE */
242 #endif /* HAVE_SELECT || FIONREAD */
243 #endif /* HAVE_SOCKETS */
244 #endif /* DATAGRAM_SOCKETS */
245 #endif /* BROKEN_DATAGRAM_SOCKETS */
248 #undef NON_BLOCKING_CONNECT
249 #undef DATAGRAM_SOCKETS
253 #include "sysselect.h"
255 extern int keyboard_bit_set
P_ ((SELECT_TYPE
*));
257 /* If we support a window system, turn on the code to poll periodically
258 to detect C-g. It isn't actually used when doing interrupt input. */
259 #ifdef HAVE_WINDOW_SYSTEM
260 #define POLL_FOR_INPUT
263 /* Mask of bits indicating the descriptors that we wait for input on. */
265 static SELECT_TYPE input_wait_mask
;
267 /* Mask that excludes keyboard input descriptor (s). */
269 static SELECT_TYPE non_keyboard_wait_mask
;
271 /* Mask that excludes process input descriptor (s). */
273 static SELECT_TYPE non_process_wait_mask
;
275 /* Mask of bits indicating the descriptors that we wait for connect to
276 complete on. Once they complete, they are removed from this mask
277 and added to the input_wait_mask and non_keyboard_wait_mask. */
279 static SELECT_TYPE connect_wait_mask
;
281 /* Number of bits set in connect_wait_mask. */
282 static int num_pending_connects
;
284 /* The largest descriptor currently in use for a process object. */
285 static int max_process_desc
;
287 /* The largest descriptor currently in use for keyboard input. */
288 static int max_keyboard_desc
;
290 /* Nonzero means delete a process right away if it exits. */
291 static int delete_exited_processes
;
293 /* Indexed by descriptor, gives the process (if any) for that descriptor */
294 Lisp_Object chan_process
[MAXDESC
];
296 /* Alist of elements (NAME . PROCESS) */
297 Lisp_Object Vprocess_alist
;
299 /* Buffered-ahead input char from process, indexed by channel.
300 -1 means empty (no char is buffered).
301 Used on sys V where the only way to tell if there is any
302 output from the process is to read at least one char.
303 Always -1 on systems that support FIONREAD. */
305 /* Don't make static; need to access externally. */
306 int proc_buffered_char
[MAXDESC
];
308 /* Table of `struct coding-system' for each process. */
309 static struct coding_system
*proc_decode_coding_system
[MAXDESC
];
310 static struct coding_system
*proc_encode_coding_system
[MAXDESC
];
312 #ifdef DATAGRAM_SOCKETS
313 /* Table of `partner address' for datagram sockets. */
314 struct sockaddr_and_len
{
317 } datagram_address
[MAXDESC
];
318 #define DATAGRAM_CHAN_P(chan) (datagram_address[chan].sa != 0)
319 #define DATAGRAM_CONN_P(proc) (PROCESSP (proc) && datagram_address[XINT (XPROCESS (proc)->infd)].sa != 0)
321 #define DATAGRAM_CHAN_P(chan) (0)
322 #define DATAGRAM_CONN_P(proc) (0)
325 static Lisp_Object
get_process ();
326 static void exec_sentinel ();
328 extern EMACS_TIME
timer_check ();
329 extern int timers_run
;
331 /* Maximum number of bytes to send to a pty without an eof. */
332 static int pty_max_bytes
;
334 extern Lisp_Object Vfile_name_coding_system
, Vdefault_file_name_coding_system
;
340 /* The file name of the pty opened by allocate_pty. */
342 static char pty_name
[24];
345 /* Compute the Lisp form of the process status, p->status, from
346 the numeric status that was returned by `wait'. */
348 Lisp_Object
status_convert ();
352 struct Lisp_Process
*p
;
354 union { int i
; WAITTYPE wt
; } u
;
355 u
.i
= XFASTINT (p
->raw_status_low
) + (XFASTINT (p
->raw_status_high
) << 16);
356 p
->status
= status_convert (u
.wt
);
357 p
->raw_status_low
= Qnil
;
358 p
->raw_status_high
= Qnil
;
361 /* Convert a process status word in Unix format to
362 the list that we use internally. */
369 return Fcons (Qstop
, Fcons (make_number (WSTOPSIG (w
)), Qnil
));
370 else if (WIFEXITED (w
))
371 return Fcons (Qexit
, Fcons (make_number (WRETCODE (w
)),
372 WCOREDUMP (w
) ? Qt
: Qnil
));
373 else if (WIFSIGNALED (w
))
374 return Fcons (Qsignal
, Fcons (make_number (WTERMSIG (w
)),
375 WCOREDUMP (w
) ? Qt
: Qnil
));
380 /* Given a status-list, extract the three pieces of information
381 and store them individually through the three pointers. */
384 decode_status (l
, symbol
, code
, coredump
)
402 *code
= XFASTINT (XCAR (tem
));
404 *coredump
= !NILP (tem
);
408 /* Return a string describing a process status list. */
411 status_message (status
)
416 Lisp_Object string
, string2
;
418 decode_status (status
, &symbol
, &code
, &coredump
);
420 if (EQ (symbol
, Qsignal
) || EQ (symbol
, Qstop
))
423 synchronize_system_messages_locale ();
424 signame
= strsignal (code
);
427 string
= build_string (signame
);
428 string2
= build_string (coredump
? " (core dumped)\n" : "\n");
429 SSET (string
, 0, DOWNCASE (SREF (string
, 0)));
430 return concat2 (string
, string2
);
432 else if (EQ (symbol
, Qexit
))
435 return build_string ("finished\n");
436 string
= Fnumber_to_string (make_number (code
));
437 string2
= build_string (coredump
? " (core dumped)\n" : "\n");
438 return concat3 (build_string ("exited abnormally with code "),
441 else if (EQ (symbol
, Qfailed
))
443 string
= Fnumber_to_string (make_number (code
));
444 string2
= build_string ("\n");
445 return concat3 (build_string ("failed with code "),
449 return Fcopy_sequence (Fsymbol_name (symbol
));
454 /* Open an available pty, returning a file descriptor.
455 Return -1 on failure.
456 The file name of the terminal corresponding to the pty
457 is left in the variable pty_name. */
466 /* Some systems name their pseudoterminals so that there are gaps in
467 the usual sequence - for example, on HP9000/S700 systems, there
468 are no pseudoterminals with names ending in 'f'. So we wait for
469 three failures in a row before deciding that we've reached the
471 int failed_count
= 0;
476 for (c
= FIRST_PTY_LETTER
; c
<= 'z'; c
++)
477 for (i
= 0; i
< 16; i
++)
480 #ifdef PTY_NAME_SPRINTF
483 sprintf (pty_name
, "/dev/pty%c%x", c
, i
);
484 #endif /* no PTY_NAME_SPRINTF */
488 #else /* no PTY_OPEN */
490 /* Unusual IRIS code */
491 *ptyv
= emacs_open ("/dev/ptc", O_RDWR
| O_NDELAY
, 0);
494 if (fstat (fd
, &stb
) < 0)
497 if (stat (pty_name
, &stb
) < 0)
500 if (failed_count
>= 3)
506 fd
= emacs_open (pty_name
, O_RDWR
| O_NONBLOCK
, 0);
508 fd
= emacs_open (pty_name
, O_RDWR
| O_NDELAY
, 0);
510 #endif /* not IRIS */
511 #endif /* no PTY_OPEN */
515 /* check to make certain that both sides are available
516 this avoids a nasty yet stupid bug in rlogins */
517 #ifdef PTY_TTY_NAME_SPRINTF
520 sprintf (pty_name
, "/dev/tty%c%x", c
, i
);
521 #endif /* no PTY_TTY_NAME_SPRINTF */
523 if (access (pty_name
, 6) != 0)
526 #if !defined(IRIS) && !defined(__sgi)
532 #endif /* not UNIPLUS */
539 #endif /* HAVE_PTYS */
545 register Lisp_Object val
, tem
, name1
;
546 register struct Lisp_Process
*p
;
550 p
= allocate_process ();
552 XSETINT (p
->infd
, -1);
553 XSETINT (p
->outfd
, -1);
554 XSETFASTINT (p
->pid
, 0);
555 XSETFASTINT (p
->tick
, 0);
556 XSETFASTINT (p
->update_tick
, 0);
557 p
->raw_status_low
= Qnil
;
558 p
->raw_status_high
= Qnil
;
560 p
->mark
= Fmake_marker ();
562 /* If name is already in use, modify it until it is unused. */
567 tem
= Fget_process (name1
);
568 if (NILP (tem
)) break;
569 sprintf (suffix
, "<%d>", i
);
570 name1
= concat2 (name
, build_string (suffix
));
574 XSETPROCESS (val
, p
);
575 Vprocess_alist
= Fcons (Fcons (name
, val
), Vprocess_alist
);
580 remove_process (proc
)
581 register Lisp_Object proc
;
583 register Lisp_Object pair
;
585 pair
= Frassq (proc
, Vprocess_alist
);
586 Vprocess_alist
= Fdelq (pair
, Vprocess_alist
);
588 deactivate_process (proc
);
591 /* Setup coding systems of PROCESS. */
594 setup_process_coding_systems (process
)
597 struct Lisp_Process
*p
= XPROCESS (process
);
598 int inch
= XINT (p
->infd
);
599 int outch
= XINT (p
->outfd
);
601 if (inch
< 0 || outch
< 0)
604 if (!proc_decode_coding_system
[inch
])
605 proc_decode_coding_system
[inch
]
606 = (struct coding_system
*) xmalloc (sizeof (struct coding_system
));
607 setup_coding_system (p
->decode_coding_system
,
608 proc_decode_coding_system
[inch
]);
609 if (! NILP (p
->filter
))
611 if (NILP (p
->filter_multibyte
))
612 setup_raw_text_coding_system (proc_decode_coding_system
[inch
]);
614 else if (BUFFERP (p
->buffer
))
616 if (NILP (XBUFFER (p
->buffer
)->enable_multibyte_characters
))
617 setup_raw_text_coding_system (proc_decode_coding_system
[inch
]);
620 if (!proc_encode_coding_system
[outch
])
621 proc_encode_coding_system
[outch
]
622 = (struct coding_system
*) xmalloc (sizeof (struct coding_system
));
623 setup_coding_system (p
->encode_coding_system
,
624 proc_encode_coding_system
[outch
]);
627 DEFUN ("processp", Fprocessp
, Sprocessp
, 1, 1, 0,
628 doc
: /* Return t if OBJECT is a process. */)
632 return PROCESSP (object
) ? Qt
: Qnil
;
635 DEFUN ("get-process", Fget_process
, Sget_process
, 1, 1, 0,
636 doc
: /* Return the process named NAME, or nil if there is none. */)
638 register Lisp_Object name
;
643 return Fcdr (Fassoc (name
, Vprocess_alist
));
646 DEFUN ("get-buffer-process", Fget_buffer_process
, Sget_buffer_process
, 1, 1, 0,
647 doc
: /* Return the (or a) process associated with BUFFER.
648 BUFFER may be a buffer or the name of one. */)
650 register Lisp_Object buffer
;
652 register Lisp_Object buf
, tail
, proc
;
654 if (NILP (buffer
)) return Qnil
;
655 buf
= Fget_buffer (buffer
);
656 if (NILP (buf
)) return Qnil
;
658 for (tail
= Vprocess_alist
; !NILP (tail
); tail
= Fcdr (tail
))
660 proc
= Fcdr (Fcar (tail
));
661 if (PROCESSP (proc
) && EQ (XPROCESS (proc
)->buffer
, buf
))
667 /* This is how commands for the user decode process arguments. It
668 accepts a process, a process name, a buffer, a buffer name, or nil.
669 Buffers denote the first process in the buffer, and nil denotes the
674 register Lisp_Object name
;
676 register Lisp_Object proc
, obj
;
679 obj
= Fget_process (name
);
681 obj
= Fget_buffer (name
);
683 error ("Process %s does not exist", SDATA (name
));
685 else if (NILP (name
))
686 obj
= Fcurrent_buffer ();
690 /* Now obj should be either a buffer object or a process object.
694 proc
= Fget_buffer_process (obj
);
696 error ("Buffer %s has no process", SDATA (XBUFFER (obj
)->name
));
706 DEFUN ("delete-process", Fdelete_process
, Sdelete_process
, 1, 1, 0,
707 doc
: /* Delete PROCESS: kill it and forget about it immediately.
708 PROCESS may be a process, a buffer, the name of a process or buffer, or
709 nil, indicating the current buffer's process. */)
711 register Lisp_Object process
;
713 process
= get_process (process
);
714 XPROCESS (process
)->raw_status_low
= Qnil
;
715 XPROCESS (process
)->raw_status_high
= Qnil
;
716 if (NETCONN_P (process
))
718 XPROCESS (process
)->status
= Fcons (Qexit
, Fcons (make_number (0), Qnil
));
719 XSETINT (XPROCESS (process
)->tick
, ++process_tick
);
721 else if (XINT (XPROCESS (process
)->infd
) >= 0)
723 Fkill_process (process
, Qnil
);
724 /* Do this now, since remove_process will make sigchld_handler do nothing. */
725 XPROCESS (process
)->status
726 = Fcons (Qsignal
, Fcons (make_number (SIGKILL
), Qnil
));
727 XSETINT (XPROCESS (process
)->tick
, ++process_tick
);
730 remove_process (process
);
734 DEFUN ("process-status", Fprocess_status
, Sprocess_status
, 1, 1, 0,
735 doc
: /* Return the status of PROCESS.
736 The returned value is one of the following symbols:
737 run -- for a process that is running.
738 stop -- for a process stopped but continuable.
739 exit -- for a process that has exited.
740 signal -- for a process that has got a fatal signal.
741 open -- for a network stream connection that is open.
742 listen -- for a network stream server that is listening.
743 closed -- for a network stream connection that is closed.
744 connect -- when waiting for a non-blocking connection to complete.
745 failed -- when a non-blocking connection has failed.
746 nil -- if arg is a process name and no such process exists.
747 PROCESS may be a process, a buffer, the name of a process, or
748 nil, indicating the current buffer's process. */)
750 register Lisp_Object process
;
752 register struct Lisp_Process
*p
;
753 register Lisp_Object status
;
755 if (STRINGP (process
))
756 process
= Fget_process (process
);
758 process
= get_process (process
);
763 p
= XPROCESS (process
);
764 if (!NILP (p
->raw_status_low
))
768 status
= XCAR (status
);
771 if (EQ (status
, Qexit
))
773 else if (EQ (p
->command
, Qt
))
775 else if (EQ (status
, Qrun
))
781 DEFUN ("process-exit-status", Fprocess_exit_status
, Sprocess_exit_status
,
783 doc
: /* Return the exit status of PROCESS or the signal number that killed it.
784 If PROCESS has not yet exited or died, return 0. */)
786 register Lisp_Object process
;
788 CHECK_PROCESS (process
);
789 if (!NILP (XPROCESS (process
)->raw_status_low
))
790 update_status (XPROCESS (process
));
791 if (CONSP (XPROCESS (process
)->status
))
792 return XCAR (XCDR (XPROCESS (process
)->status
));
793 return make_number (0);
796 DEFUN ("process-id", Fprocess_id
, Sprocess_id
, 1, 1, 0,
797 doc
: /* Return the process id of PROCESS.
798 This is the pid of the Unix process which PROCESS uses or talks to.
799 For a network connection, this value is nil. */)
801 register Lisp_Object process
;
803 CHECK_PROCESS (process
);
804 return XPROCESS (process
)->pid
;
807 DEFUN ("process-name", Fprocess_name
, Sprocess_name
, 1, 1, 0,
808 doc
: /* Return the name of PROCESS, as a string.
809 This is the name of the program invoked in PROCESS,
810 possibly modified to make it unique among process names. */)
812 register Lisp_Object process
;
814 CHECK_PROCESS (process
);
815 return XPROCESS (process
)->name
;
818 DEFUN ("process-command", Fprocess_command
, Sprocess_command
, 1, 1, 0,
819 doc
: /* Return the command that was executed to start PROCESS.
820 This is a list of strings, the first string being the program executed
821 and the rest of the strings being the arguments given to it.
822 For a non-child channel, this is nil. */)
824 register Lisp_Object process
;
826 CHECK_PROCESS (process
);
827 return XPROCESS (process
)->command
;
830 DEFUN ("process-tty-name", Fprocess_tty_name
, Sprocess_tty_name
, 1, 1, 0,
831 doc
: /* Return the name of the terminal PROCESS uses, or nil if none.
832 This is the terminal that the process itself reads and writes on,
833 not the name of the pty that Emacs uses to talk with that terminal. */)
835 register Lisp_Object process
;
837 CHECK_PROCESS (process
);
838 return XPROCESS (process
)->tty_name
;
841 DEFUN ("set-process-buffer", Fset_process_buffer
, Sset_process_buffer
,
843 doc
: /* Set buffer associated with PROCESS to BUFFER (a buffer, or nil). */)
845 register Lisp_Object process
, buffer
;
847 struct Lisp_Process
*p
;
849 CHECK_PROCESS (process
);
851 CHECK_BUFFER (buffer
);
852 p
= XPROCESS (process
);
855 p
->childp
= Fplist_put (p
->childp
, QCbuffer
, buffer
);
856 setup_process_coding_systems (process
);
860 DEFUN ("process-buffer", Fprocess_buffer
, Sprocess_buffer
,
862 doc
: /* Return the buffer PROCESS is associated with.
863 Output from PROCESS is inserted in this buffer unless PROCESS has a filter. */)
865 register Lisp_Object process
;
867 CHECK_PROCESS (process
);
868 return XPROCESS (process
)->buffer
;
871 DEFUN ("process-mark", Fprocess_mark
, Sprocess_mark
,
873 doc
: /* Return the marker for the end of the last output from PROCESS. */)
875 register Lisp_Object process
;
877 CHECK_PROCESS (process
);
878 return XPROCESS (process
)->mark
;
881 DEFUN ("set-process-filter", Fset_process_filter
, Sset_process_filter
,
883 doc
: /* Give PROCESS the filter function FILTER; nil means no filter.
884 t means stop accepting output from the process.
886 When a process has a filter, its buffer is not used for output.
887 Instead, each time it does output, the entire string of output is
888 passed to the filter.
890 The filter gets two arguments: the process and the string of output.
891 The string argument is normally a multibyte string, except:
892 - if the process' input coding system is no-conversion or raw-text,
893 it is a unibyte string (the non-converted input), or else
894 - if `default-enable-multibyte-characters' is nil, it is a unibyte
895 string (the result of converting the decoded input multibyte
896 string to unibyte with `string-make-unibyte'). */)
898 register Lisp_Object process
, filter
;
900 struct Lisp_Process
*p
;
902 CHECK_PROCESS (process
);
903 p
= XPROCESS (process
);
905 /* Don't signal an error if the process' input file descriptor
906 is closed. This could make debugging Lisp more difficult,
907 for example when doing something like
909 (setq process (start-process ...))
911 (set-process-filter process ...) */
913 if (XINT (p
->infd
) >= 0)
915 if (EQ (filter
, Qt
) && !EQ (p
->status
, Qlisten
))
917 FD_CLR (XINT (p
->infd
), &input_wait_mask
);
918 FD_CLR (XINT (p
->infd
), &non_keyboard_wait_mask
);
920 else if (EQ (p
->filter
, Qt
)
921 && !EQ (p
->command
, Qt
)) /* Network process not stopped. */
923 FD_SET (XINT (p
->infd
), &input_wait_mask
);
924 FD_SET (XINT (p
->infd
), &non_keyboard_wait_mask
);
930 p
->childp
= Fplist_put (p
->childp
, QCfilter
, filter
);
931 setup_process_coding_systems (process
);
935 DEFUN ("process-filter", Fprocess_filter
, Sprocess_filter
,
937 doc
: /* Returns the filter function of PROCESS; nil if none.
938 See `set-process-filter' for more info on filter functions. */)
940 register Lisp_Object process
;
942 CHECK_PROCESS (process
);
943 return XPROCESS (process
)->filter
;
946 DEFUN ("set-process-sentinel", Fset_process_sentinel
, Sset_process_sentinel
,
948 doc
: /* Give PROCESS the sentinel SENTINEL; nil for none.
949 The sentinel is called as a function when the process changes state.
950 It gets two arguments: the process, and a string describing the change. */)
952 register Lisp_Object process
, sentinel
;
954 CHECK_PROCESS (process
);
955 XPROCESS (process
)->sentinel
= sentinel
;
959 DEFUN ("process-sentinel", Fprocess_sentinel
, Sprocess_sentinel
,
961 doc
: /* Return the sentinel of PROCESS; nil if none.
962 See `set-process-sentinel' for more info on sentinels. */)
964 register Lisp_Object process
;
966 CHECK_PROCESS (process
);
967 return XPROCESS (process
)->sentinel
;
970 DEFUN ("set-process-window-size", Fset_process_window_size
,
971 Sset_process_window_size
, 3, 3, 0,
972 doc
: /* Tell PROCESS that it has logical window size HEIGHT and WIDTH. */)
973 (process
, height
, width
)
974 register Lisp_Object process
, height
, width
;
976 CHECK_PROCESS (process
);
977 CHECK_NATNUM (height
);
978 CHECK_NATNUM (width
);
980 if (XINT (XPROCESS (process
)->infd
) < 0
981 || set_window_size (XINT (XPROCESS (process
)->infd
),
982 XINT (height
), XINT (width
)) <= 0)
988 DEFUN ("set-process-inherit-coding-system-flag",
989 Fset_process_inherit_coding_system_flag
,
990 Sset_process_inherit_coding_system_flag
, 2, 2, 0,
991 doc
: /* Determine whether buffer of PROCESS will inherit coding-system.
992 If the second argument FLAG is non-nil, then the variable
993 `buffer-file-coding-system' of the buffer associated with PROCESS
994 will be bound to the value of the coding system used to decode
997 This is useful when the coding system specified for the process buffer
998 leaves either the character code conversion or the end-of-line conversion
999 unspecified, or if the coding system used to decode the process output
1000 is more appropriate for saving the process buffer.
1002 Binding the variable `inherit-process-coding-system' to non-nil before
1003 starting the process is an alternative way of setting the inherit flag
1004 for the process which will run. */)
1006 register Lisp_Object process
, flag
;
1008 CHECK_PROCESS (process
);
1009 XPROCESS (process
)->inherit_coding_system_flag
= flag
;
1013 DEFUN ("process-inherit-coding-system-flag",
1014 Fprocess_inherit_coding_system_flag
, Sprocess_inherit_coding_system_flag
,
1016 doc
: /* Return the value of inherit-coding-system flag for PROCESS.
1017 If this flag is t, `buffer-file-coding-system' of the buffer
1018 associated with PROCESS will inherit the coding system used to decode
1019 the process output. */)
1021 register Lisp_Object process
;
1023 CHECK_PROCESS (process
);
1024 return XPROCESS (process
)->inherit_coding_system_flag
;
1027 DEFUN ("set-process-query-on-exit-flag",
1028 Fset_process_query_on_exit_flag
, Sset_process_query_on_exit_flag
,
1030 doc
: /* Specify if query is needed for PROCESS when Emacs is exited.
1031 If the second argument FLAG is non-nil, emacs will query the user before
1032 exiting if PROCESS is running. */)
1034 register Lisp_Object process
, flag
;
1036 CHECK_PROCESS (process
);
1037 XPROCESS (process
)->kill_without_query
= Fnull (flag
);
1041 DEFUN ("process-query-on-exit-flag",
1042 Fprocess_query_on_exit_flag
, Sprocess_query_on_exit_flag
,
1044 doc
: /* Return the current value of query on exit flag for PROCESS. */)
1046 register Lisp_Object process
;
1048 CHECK_PROCESS (process
);
1049 return Fnull (XPROCESS (process
)->kill_without_query
);
1052 #ifdef DATAGRAM_SOCKETS
1053 Lisp_Object
Fprocess_datagram_address ();
1056 DEFUN ("process-contact", Fprocess_contact
, Sprocess_contact
,
1058 doc
: /* Return the contact info of PROCESS; t for a real child.
1059 For a net connection, the value depends on the optional KEY arg.
1060 If KEY is nil, value is a cons cell of the form (HOST SERVICE),
1061 if KEY is t, the complete contact information for the connection is
1062 returned, else the specific value for the keyword KEY is returned.
1063 See `make-network-process' for a list of keywords. */)
1065 register Lisp_Object process
, key
;
1067 Lisp_Object contact
;
1069 CHECK_PROCESS (process
);
1070 contact
= XPROCESS (process
)->childp
;
1072 #ifdef DATAGRAM_SOCKETS
1073 if (DATAGRAM_CONN_P (process
)
1074 && (EQ (key
, Qt
) || EQ (key
, QCremote
)))
1075 contact
= Fplist_put (contact
, QCremote
,
1076 Fprocess_datagram_address (process
));
1079 if (!NETCONN_P (process
) || EQ (key
, Qt
))
1082 return Fcons (Fplist_get (contact
, QChost
),
1083 Fcons (Fplist_get (contact
, QCservice
), Qnil
));
1084 return Fplist_get (contact
, key
);
1087 DEFUN ("process-plist", Fprocess_plist
, Sprocess_plist
,
1089 doc
: /* Return the plist of PROCESS. */)
1091 register Lisp_Object process
;
1093 CHECK_PROCESS (process
);
1094 return XPROCESS (process
)->plist
;
1097 DEFUN ("set-process-plist", Fset_process_plist
, Sset_process_plist
,
1099 doc
: /* Replace the plist of PROCESS with PLIST. Returns PLIST. */)
1101 register Lisp_Object process
, plist
;
1103 CHECK_PROCESS (process
);
1106 XPROCESS (process
)->plist
= plist
;
1110 #if 0 /* Turned off because we don't currently record this info
1111 in the process. Perhaps add it. */
1112 DEFUN ("process-connection", Fprocess_connection
, Sprocess_connection
, 1, 1, 0,
1113 doc
: /* Return the connection type of PROCESS.
1114 The value is nil for a pipe, t or `pty' for a pty, or `stream' for
1115 a socket connection. */)
1117 Lisp_Object process
;
1119 return XPROCESS (process
)->type
;
1124 DEFUN ("format-network-address", Fformat_network_address
, Sformat_network_address
,
1126 doc
: /* Convert network ADDRESS from internal format to a string.
1127 If optional second argument OMIT-PORT is non-nil, don't include a port
1128 number in the string; in this case, interpret a 4 element vector as an
1129 IP address. Returns nil if format of ADDRESS is invalid. */)
1130 (address
, omit_port
)
1131 Lisp_Object address
, omit_port
;
1136 if (STRINGP (address
)) /* AF_LOCAL */
1139 if (VECTORP (address
)) /* AF_INET */
1141 register struct Lisp_Vector
*p
= XVECTOR (address
);
1142 Lisp_Object args
[6];
1145 if (!NILP (omit_port
) && (p
->size
== 4 || p
->size
== 5))
1147 args
[0] = build_string ("%d.%d.%d.%d");
1150 else if (p
->size
== 5)
1152 args
[0] = build_string ("%d.%d.%d.%d:%d");
1158 for (i
= 0; i
< nargs
; i
++)
1159 args
[i
+1] = p
->contents
[i
];
1160 return Fformat (nargs
+1, args
);
1163 if (CONSP (address
))
1165 Lisp_Object args
[2];
1166 args
[0] = build_string ("<Family %d>");
1167 args
[1] = Fcar (address
);
1168 return Fformat (2, args
);
1177 list_processes_1 (query_only
)
1178 Lisp_Object query_only
;
1180 register Lisp_Object tail
, tem
;
1181 Lisp_Object proc
, minspace
, tem1
;
1182 register struct Lisp_Process
*p
;
1184 int w_proc
, w_buffer
, w_tty
;
1185 Lisp_Object i_status
, i_buffer
, i_tty
, i_command
;
1187 w_proc
= 4; /* Proc */
1188 w_buffer
= 6; /* Buffer */
1189 w_tty
= 0; /* Omit if no ttys */
1191 for (tail
= Vprocess_alist
; !NILP (tail
); tail
= Fcdr (tail
))
1195 proc
= Fcdr (Fcar (tail
));
1196 p
= XPROCESS (proc
);
1197 if (NILP (p
->childp
))
1199 if (!NILP (query_only
) && !NILP (p
->kill_without_query
))
1201 if (STRINGP (p
->name
)
1202 && ( i
= SCHARS (p
->name
), (i
> w_proc
)))
1204 if (!NILP (p
->buffer
))
1206 if (NILP (XBUFFER (p
->buffer
)->name
) && w_buffer
< 8)
1207 w_buffer
= 8; /* (Killed) */
1208 else if ((i
= SCHARS (XBUFFER (p
->buffer
)->name
), (i
> w_buffer
)))
1211 if (STRINGP (p
->tty_name
)
1212 && (i
= SCHARS (p
->tty_name
), (i
> w_tty
)))
1216 XSETFASTINT (i_status
, w_proc
+ 1);
1217 XSETFASTINT (i_buffer
, XFASTINT (i_status
) + 9);
1220 XSETFASTINT (i_tty
, XFASTINT (i_buffer
) + w_buffer
+ 1);
1221 XSETFASTINT (i_command
, XFASTINT (i_buffer
) + w_tty
+ 1);
1224 XSETFASTINT (i_command
, XFASTINT (i_buffer
) + w_buffer
+ 1);
1227 XSETFASTINT (minspace
, 1);
1229 set_buffer_internal (XBUFFER (Vstandard_output
));
1230 Fbuffer_disable_undo (Vstandard_output
);
1232 current_buffer
->truncate_lines
= Qt
;
1234 write_string ("Proc", -1);
1235 Findent_to (i_status
, minspace
); write_string ("Status", -1);
1236 Findent_to (i_buffer
, minspace
); write_string ("Buffer", -1);
1239 Findent_to (i_tty
, minspace
); write_string ("Tty", -1);
1241 Findent_to (i_command
, minspace
); write_string ("Command", -1);
1242 write_string ("\n", -1);
1244 write_string ("----", -1);
1245 Findent_to (i_status
, minspace
); write_string ("------", -1);
1246 Findent_to (i_buffer
, minspace
); write_string ("------", -1);
1249 Findent_to (i_tty
, minspace
); write_string ("---", -1);
1251 Findent_to (i_command
, minspace
); write_string ("-------", -1);
1252 write_string ("\n", -1);
1254 for (tail
= Vprocess_alist
; !NILP (tail
); tail
= Fcdr (tail
))
1258 proc
= Fcdr (Fcar (tail
));
1259 p
= XPROCESS (proc
);
1260 if (NILP (p
->childp
))
1262 if (!NILP (query_only
) && !NILP (p
->kill_without_query
))
1265 Finsert (1, &p
->name
);
1266 Findent_to (i_status
, minspace
);
1268 if (!NILP (p
->raw_status_low
))
1271 if (CONSP (p
->status
))
1272 symbol
= XCAR (p
->status
);
1275 if (EQ (symbol
, Qsignal
))
1278 tem
= Fcar (Fcdr (p
->status
));
1280 if (XINT (tem
) < NSIG
)
1281 write_string (sys_errlist
[XINT (tem
)], -1);
1284 Fprinc (symbol
, Qnil
);
1286 else if (NETCONN1_P (p
))
1288 if (EQ (symbol
, Qexit
))
1289 write_string ("closed", -1);
1290 else if (EQ (p
->command
, Qt
))
1291 write_string ("stopped", -1);
1292 else if (EQ (symbol
, Qrun
))
1293 write_string ("open", -1);
1295 Fprinc (symbol
, Qnil
);
1298 Fprinc (symbol
, Qnil
);
1300 if (EQ (symbol
, Qexit
))
1303 tem
= Fcar (Fcdr (p
->status
));
1306 sprintf (tembuf
, " %d", (int) XFASTINT (tem
));
1307 write_string (tembuf
, -1);
1311 if (EQ (symbol
, Qsignal
) || EQ (symbol
, Qexit
))
1312 remove_process (proc
);
1314 Findent_to (i_buffer
, minspace
);
1315 if (NILP (p
->buffer
))
1316 insert_string ("(none)");
1317 else if (NILP (XBUFFER (p
->buffer
)->name
))
1318 insert_string ("(Killed)");
1320 Finsert (1, &XBUFFER (p
->buffer
)->name
);
1324 Findent_to (i_tty
, minspace
);
1325 if (STRINGP (p
->tty_name
))
1326 Finsert (1, &p
->tty_name
);
1329 Findent_to (i_command
, minspace
);
1331 if (EQ (p
->status
, Qlisten
))
1333 Lisp_Object port
= Fplist_get (p
->childp
, QCservice
);
1334 if (INTEGERP (port
))
1335 port
= Fnumber_to_string (port
);
1337 port
= Fformat_network_address (Fplist_get (p
->childp
, QClocal
), Qnil
);
1338 sprintf (tembuf
, "(network %s server on %s)\n",
1339 (DATAGRAM_CHAN_P (XINT (p
->infd
)) ? "datagram" : "stream"),
1340 (STRINGP (port
) ? (char *)SDATA (port
) : "?"));
1341 insert_string (tembuf
);
1343 else if (NETCONN1_P (p
))
1345 /* For a local socket, there is no host name,
1346 so display service instead. */
1347 Lisp_Object host
= Fplist_get (p
->childp
, QChost
);
1348 if (!STRINGP (host
))
1350 host
= Fplist_get (p
->childp
, QCservice
);
1351 if (INTEGERP (host
))
1352 host
= Fnumber_to_string (host
);
1355 host
= Fformat_network_address (Fplist_get (p
->childp
, QCremote
), Qnil
);
1356 sprintf (tembuf
, "(network %s connection to %s)\n",
1357 (DATAGRAM_CHAN_P (XINT (p
->infd
)) ? "datagram" : "stream"),
1358 (STRINGP (host
) ? (char *)SDATA (host
) : "?"));
1359 insert_string (tembuf
);
1371 insert_string (" ");
1373 insert_string ("\n");
1379 DEFUN ("list-processes", Flist_processes
, Slist_processes
, 0, 1, "P",
1380 doc
: /* Display a list of all processes.
1381 If optional argument QUERY-ONLY is non-nil, only processes with
1382 the query-on-exit flag set will be listed.
1383 Any process listed as exited or signaled is actually eliminated
1384 after the listing is made. */)
1386 Lisp_Object query_only
;
1388 internal_with_output_to_temp_buffer ("*Process List*",
1389 list_processes_1
, query_only
);
1393 DEFUN ("process-list", Fprocess_list
, Sprocess_list
, 0, 0, 0,
1394 doc
: /* Return a list of all processes. */)
1397 return Fmapcar (Qcdr
, Vprocess_alist
);
1400 /* Starting asynchronous inferior processes. */
1402 static Lisp_Object
start_process_unwind ();
1404 DEFUN ("start-process", Fstart_process
, Sstart_process
, 3, MANY
, 0,
1405 doc
: /* Start a program in a subprocess. Return the process object for it.
1406 NAME is name for process. It is modified if necessary to make it unique.
1407 BUFFER is the buffer or (buffer-name) to associate with the process.
1408 Process output goes at end of that buffer, unless you specify
1409 an output stream or filter function to handle the output.
1410 BUFFER may be also nil, meaning that this process is not associated
1412 Third arg is program file name. It is searched for in PATH.
1413 Remaining arguments are strings to give program as arguments.
1415 usage: (start-process NAME BUFFER PROGRAM &rest PROGRAM-ARGS) */)
1418 register Lisp_Object
*args
;
1420 Lisp_Object buffer
, name
, program
, proc
, current_dir
, tem
;
1422 register unsigned char *new_argv
;
1425 register unsigned char **new_argv
;
1428 int count
= SPECPDL_INDEX ();
1432 buffer
= Fget_buffer_create (buffer
);
1434 /* Make sure that the child will be able to chdir to the current
1435 buffer's current directory, or its unhandled equivalent. We
1436 can't just have the child check for an error when it does the
1437 chdir, since it's in a vfork.
1439 We have to GCPRO around this because Fexpand_file_name and
1440 Funhandled_file_name_directory might call a file name handling
1441 function. The argument list is protected by the caller, so all
1442 we really have to worry about is buffer. */
1444 struct gcpro gcpro1
, gcpro2
;
1446 current_dir
= current_buffer
->directory
;
1448 GCPRO2 (buffer
, current_dir
);
1451 = expand_and_dir_to_file (Funhandled_file_name_directory (current_dir
),
1453 if (NILP (Ffile_accessible_directory_p (current_dir
)))
1454 report_file_error ("Setting current directory",
1455 Fcons (current_buffer
->directory
, Qnil
));
1461 CHECK_STRING (name
);
1465 CHECK_STRING (program
);
1467 proc
= make_process (name
);
1468 /* If an error occurs and we can't start the process, we want to
1469 remove it from the process list. This means that each error
1470 check in create_process doesn't need to call remove_process
1471 itself; it's all taken care of here. */
1472 record_unwind_protect (start_process_unwind
, proc
);
1474 XPROCESS (proc
)->childp
= Qt
;
1475 XPROCESS (proc
)->plist
= Qnil
;
1476 XPROCESS (proc
)->command_channel_p
= Qnil
;
1477 XPROCESS (proc
)->buffer
= buffer
;
1478 XPROCESS (proc
)->sentinel
= Qnil
;
1479 XPROCESS (proc
)->filter
= Qnil
;
1480 XPROCESS (proc
)->filter_multibyte
1481 = buffer_defaults
.enable_multibyte_characters
;
1482 XPROCESS (proc
)->command
= Flist (nargs
- 2, args
+ 2);
1484 /* Make the process marker point into the process buffer (if any). */
1486 set_marker_both (XPROCESS (proc
)->mark
, buffer
,
1487 BUF_ZV (XBUFFER (buffer
)),
1488 BUF_ZV_BYTE (XBUFFER (buffer
)));
1491 /* Decide coding systems for communicating with the process. Here
1492 we don't setup the structure coding_system nor pay attention to
1493 unibyte mode. They are done in create_process. */
1495 /* Qt denotes we have not yet called Ffind_operation_coding_system. */
1496 Lisp_Object coding_systems
= Qt
;
1497 Lisp_Object val
, *args2
;
1498 struct gcpro gcpro1
, gcpro2
;
1500 val
= Vcoding_system_for_read
;
1503 args2
= (Lisp_Object
*) alloca ((nargs
+ 1) * sizeof *args2
);
1504 args2
[0] = Qstart_process
;
1505 for (i
= 0; i
< nargs
; i
++) args2
[i
+ 1] = args
[i
];
1506 GCPRO2 (proc
, current_dir
);
1507 coding_systems
= Ffind_operation_coding_system (nargs
+ 1, args2
);
1509 if (CONSP (coding_systems
))
1510 val
= XCAR (coding_systems
);
1511 else if (CONSP (Vdefault_process_coding_system
))
1512 val
= XCAR (Vdefault_process_coding_system
);
1514 XPROCESS (proc
)->decode_coding_system
= val
;
1516 val
= Vcoding_system_for_write
;
1519 if (EQ (coding_systems
, Qt
))
1521 args2
= (Lisp_Object
*) alloca ((nargs
+ 1) * sizeof args2
);
1522 args2
[0] = Qstart_process
;
1523 for (i
= 0; i
< nargs
; i
++) args2
[i
+ 1] = args
[i
];
1524 GCPRO2 (proc
, current_dir
);
1525 coding_systems
= Ffind_operation_coding_system (nargs
+ 1, args2
);
1528 if (CONSP (coding_systems
))
1529 val
= XCDR (coding_systems
);
1530 else if (CONSP (Vdefault_process_coding_system
))
1531 val
= XCDR (Vdefault_process_coding_system
);
1533 XPROCESS (proc
)->encode_coding_system
= val
;
1537 /* Make a one member argv with all args concatenated
1538 together separated by a blank. */
1539 len
= SBYTES (program
) + 2;
1540 for (i
= 3; i
< nargs
; i
++)
1544 len
+= SBYTES (tem
) + 1; /* count the blank */
1546 new_argv
= (unsigned char *) alloca (len
);
1547 strcpy (new_argv
, SDATA (program
));
1548 for (i
= 3; i
< nargs
; i
++)
1552 strcat (new_argv
, " ");
1553 strcat (new_argv
, SDATA (tem
));
1555 /* Need to add code here to check for program existence on VMS */
1558 new_argv
= (unsigned char **) alloca ((nargs
- 1) * sizeof (char *));
1560 /* If program file name is not absolute, search our path for it.
1561 Put the name we will really use in TEM. */
1562 if (!IS_DIRECTORY_SEP (SREF (program
, 0))
1563 && !(SCHARS (program
) > 1
1564 && IS_DEVICE_SEP (SREF (program
, 1))))
1566 struct gcpro gcpro1
, gcpro2
, gcpro3
, gcpro4
;
1569 GCPRO4 (name
, program
, buffer
, current_dir
);
1570 openp (Vexec_path
, program
, Vexec_suffixes
, &tem
, make_number (X_OK
));
1573 report_file_error ("Searching for program", Fcons (program
, Qnil
));
1574 tem
= Fexpand_file_name (tem
, Qnil
);
1578 if (!NILP (Ffile_directory_p (program
)))
1579 error ("Specified program for new process is a directory");
1583 /* If program file name starts with /: for quoting a magic name,
1585 if (SBYTES (tem
) > 2 && SREF (tem
, 0) == '/'
1586 && SREF (tem
, 1) == ':')
1587 tem
= Fsubstring (tem
, make_number (2), Qnil
);
1589 /* Encode the file name and put it in NEW_ARGV.
1590 That's where the child will use it to execute the program. */
1591 tem
= ENCODE_FILE (tem
);
1592 new_argv
[0] = SDATA (tem
);
1594 /* Here we encode arguments by the coding system used for sending
1595 data to the process. We don't support using different coding
1596 systems for encoding arguments and for encoding data sent to the
1599 for (i
= 3; i
< nargs
; i
++)
1603 if (STRING_MULTIBYTE (tem
))
1604 tem
= (code_convert_string_norecord
1605 (tem
, XPROCESS (proc
)->encode_coding_system
, 1));
1606 new_argv
[i
- 2] = SDATA (tem
);
1608 new_argv
[i
- 2] = 0;
1609 #endif /* not VMS */
1611 XPROCESS (proc
)->decoding_buf
= make_uninit_string (0);
1612 XPROCESS (proc
)->decoding_carryover
= make_number (0);
1613 XPROCESS (proc
)->encoding_buf
= make_uninit_string (0);
1614 XPROCESS (proc
)->encoding_carryover
= make_number (0);
1616 XPROCESS (proc
)->inherit_coding_system_flag
1617 = (NILP (buffer
) || !inherit_process_coding_system
1620 create_process (proc
, (char **) new_argv
, current_dir
);
1622 return unbind_to (count
, proc
);
1625 /* This function is the unwind_protect form for Fstart_process. If
1626 PROC doesn't have its pid set, then we know someone has signaled
1627 an error and the process wasn't started successfully, so we should
1628 remove it from the process list. */
1630 start_process_unwind (proc
)
1633 if (!PROCESSP (proc
))
1636 /* Was PROC started successfully? */
1637 if (XINT (XPROCESS (proc
)->pid
) <= 0)
1638 remove_process (proc
);
1644 create_process_1 (timer
)
1645 struct atimer
*timer
;
1647 /* Nothing to do. */
1651 #if 0 /* This doesn't work; see the note before sigchld_handler. */
1654 /* Mimic blocking of signals on system V, which doesn't really have it. */
1656 /* Nonzero means we got a SIGCHLD when it was supposed to be blocked. */
1657 int sigchld_deferred
;
1660 create_process_sigchld ()
1662 signal (SIGCHLD
, create_process_sigchld
);
1664 sigchld_deferred
= 1;
1670 #ifndef VMS /* VMS version of this function is in vmsproc.c. */
1672 create_process (process
, new_argv
, current_dir
)
1673 Lisp_Object process
;
1675 Lisp_Object current_dir
;
1677 int pid
, inchannel
, outchannel
;
1679 #ifdef POSIX_SIGNALS
1682 struct sigaction sigint_action
;
1683 struct sigaction sigquit_action
;
1685 struct sigaction sighup_action
;
1687 #else /* !POSIX_SIGNALS */
1690 SIGTYPE (*sigchld
)();
1693 #endif /* !POSIX_SIGNALS */
1694 /* Use volatile to protect variables from being clobbered by longjmp. */
1695 volatile int forkin
, forkout
;
1696 volatile int pty_flag
= 0;
1698 extern char **environ
;
1701 inchannel
= outchannel
= -1;
1704 if (!NILP (Vprocess_connection_type
))
1705 outchannel
= inchannel
= allocate_pty ();
1709 #if ! defined (USG) || defined (USG_SUBTTY_WORKS)
1710 /* On most USG systems it does not work to open the pty's tty here,
1711 then close it and reopen it in the child. */
1713 /* Don't let this terminal become our controlling terminal
1714 (in case we don't have one). */
1715 forkout
= forkin
= emacs_open (pty_name
, O_RDWR
| O_NOCTTY
, 0);
1717 forkout
= forkin
= emacs_open (pty_name
, O_RDWR
, 0);
1720 report_file_error ("Opening pty", Qnil
);
1722 forkin
= forkout
= -1;
1723 #endif /* not USG, or USG_SUBTTY_WORKS */
1727 #endif /* HAVE_PTYS */
1730 if (socketpair (AF_UNIX
, SOCK_STREAM
, 0, sv
) < 0)
1731 report_file_error ("Opening socketpair", Qnil
);
1732 outchannel
= inchannel
= sv
[0];
1733 forkout
= forkin
= sv
[1];
1735 #else /* not SKTPAIR */
1740 report_file_error ("Creating pipe", Qnil
);
1746 emacs_close (inchannel
);
1747 emacs_close (forkout
);
1748 report_file_error ("Creating pipe", Qnil
);
1753 #endif /* not SKTPAIR */
1756 /* Replaced by close_process_descs */
1757 set_exclusive_use (inchannel
);
1758 set_exclusive_use (outchannel
);
1761 /* Stride people say it's a mystery why this is needed
1762 as well as the O_NDELAY, but that it fails without this. */
1763 #if defined (STRIDE) || (defined (pfa) && defined (HAVE_PTYS))
1766 ioctl (inchannel
, FIONBIO
, &one
);
1771 fcntl (inchannel
, F_SETFL
, O_NONBLOCK
);
1772 fcntl (outchannel
, F_SETFL
, O_NONBLOCK
);
1775 fcntl (inchannel
, F_SETFL
, O_NDELAY
);
1776 fcntl (outchannel
, F_SETFL
, O_NDELAY
);
1780 /* Record this as an active process, with its channels.
1781 As a result, child_setup will close Emacs's side of the pipes. */
1782 chan_process
[inchannel
] = process
;
1783 XSETINT (XPROCESS (process
)->infd
, inchannel
);
1784 XSETINT (XPROCESS (process
)->outfd
, outchannel
);
1786 /* Previously we recorded the tty descriptor used in the subprocess.
1787 It was only used for getting the foreground tty process, so now
1788 we just reopen the device (see emacs_get_tty_pgrp) as this is
1789 more portable (see USG_SUBTTY_WORKS above). */
1791 XPROCESS (process
)->pty_flag
= (pty_flag
? Qt
: Qnil
);
1792 XPROCESS (process
)->status
= Qrun
;
1793 setup_process_coding_systems (process
);
1795 /* Delay interrupts until we have a chance to store
1796 the new fork's pid in its process structure */
1797 #ifdef POSIX_SIGNALS
1798 sigemptyset (&blocked
);
1800 sigaddset (&blocked
, SIGCHLD
);
1802 #ifdef HAVE_WORKING_VFORK
1803 /* On many hosts (e.g. Solaris 2.4), if a vforked child calls `signal',
1804 this sets the parent's signal handlers as well as the child's.
1805 So delay all interrupts whose handlers the child might munge,
1806 and record the current handlers so they can be restored later. */
1807 sigaddset (&blocked
, SIGINT
); sigaction (SIGINT
, 0, &sigint_action
);
1808 sigaddset (&blocked
, SIGQUIT
); sigaction (SIGQUIT
, 0, &sigquit_action
);
1810 sigaddset (&blocked
, SIGHUP
); sigaction (SIGHUP
, 0, &sighup_action
);
1812 #endif /* HAVE_WORKING_VFORK */
1813 sigprocmask (SIG_BLOCK
, &blocked
, &procmask
);
1814 #else /* !POSIX_SIGNALS */
1818 #else /* not BSD4_1 */
1819 #if defined (BSD_SYSTEM) || defined (UNIPLUS) || defined (HPUX)
1820 sigsetmask (sigmask (SIGCHLD
));
1821 #else /* ordinary USG */
1823 sigchld_deferred
= 0;
1824 sigchld
= signal (SIGCHLD
, create_process_sigchld
);
1826 #endif /* ordinary USG */
1827 #endif /* not BSD4_1 */
1828 #endif /* SIGCHLD */
1829 #endif /* !POSIX_SIGNALS */
1831 FD_SET (inchannel
, &input_wait_mask
);
1832 FD_SET (inchannel
, &non_keyboard_wait_mask
);
1833 if (inchannel
> max_process_desc
)
1834 max_process_desc
= inchannel
;
1836 /* Until we store the proper pid, enable sigchld_handler
1837 to recognize an unknown pid as standing for this process.
1838 It is very important not to let this `marker' value stay
1839 in the table after this function has returned; if it does
1840 it might cause call-process to hang and subsequent asynchronous
1841 processes to get their return values scrambled. */
1842 XSETINT (XPROCESS (process
)->pid
, -1);
1847 /* child_setup must clobber environ on systems with true vfork.
1848 Protect it from permanent change. */
1849 char **save_environ
= environ
;
1851 current_dir
= ENCODE_FILE (current_dir
);
1856 #endif /* not WINDOWSNT */
1858 int xforkin
= forkin
;
1859 int xforkout
= forkout
;
1861 #if 0 /* This was probably a mistake--it duplicates code later on,
1862 but fails to handle all the cases. */
1863 /* Make sure SIGCHLD is not blocked in the child. */
1864 sigsetmask (SIGEMPTYMASK
);
1867 /* Make the pty be the controlling terminal of the process. */
1869 /* First, disconnect its current controlling terminal. */
1871 /* We tried doing setsid only if pty_flag, but it caused
1872 process_set_signal to fail on SGI when using a pipe. */
1874 /* Make the pty's terminal the controlling terminal. */
1878 /* We ignore the return value
1879 because faith@cs.unc.edu says that is necessary on Linux. */
1880 ioctl (xforkin
, TIOCSCTTY
, 0);
1883 #else /* not HAVE_SETSID */
1885 /* It's very important to call setpgrp here and no time
1886 afterwards. Otherwise, we lose our controlling tty which
1887 is set when we open the pty. */
1890 #endif /* not HAVE_SETSID */
1891 #if defined (HAVE_TERMIOS) && defined (LDISC1)
1892 if (pty_flag
&& xforkin
>= 0)
1895 tcgetattr (xforkin
, &t
);
1897 if (tcsetattr (xforkin
, TCSANOW
, &t
) < 0)
1898 emacs_write (1, "create_process/tcsetattr LDISC1 failed\n", 39);
1901 #if defined (NTTYDISC) && defined (TIOCSETD)
1902 if (pty_flag
&& xforkin
>= 0)
1904 /* Use new line discipline. */
1905 int ldisc
= NTTYDISC
;
1906 ioctl (xforkin
, TIOCSETD
, &ldisc
);
1911 /* In 4.3BSD, the TIOCSPGRP bug has been fixed, and now you
1912 can do TIOCSPGRP only to the process's controlling tty. */
1915 /* I wonder: would just ioctl (0, TIOCNOTTY, 0) work here?
1916 I can't test it since I don't have 4.3. */
1917 int j
= emacs_open ("/dev/tty", O_RDWR
, 0);
1918 ioctl (j
, TIOCNOTTY
, 0);
1921 /* In order to get a controlling terminal on some versions
1922 of BSD, it is necessary to put the process in pgrp 0
1923 before it opens the terminal. */
1931 #endif /* TIOCNOTTY */
1933 #if !defined (RTU) && !defined (UNIPLUS) && !defined (DONT_REOPEN_PTY)
1934 /*** There is a suggestion that this ought to be a
1935 conditional on TIOCSPGRP,
1936 or !(defined (HAVE_SETSID) && defined (TIOCSCTTY)).
1937 Trying the latter gave the wrong results on Debian GNU/Linux 1.1;
1938 that system does seem to need this code, even though
1939 both HAVE_SETSID and TIOCSCTTY are defined. */
1940 /* Now close the pty (if we had it open) and reopen it.
1941 This makes the pty the controlling terminal of the subprocess. */
1944 #ifdef SET_CHILD_PTY_PGRP
1945 int pgrp
= getpid ();
1948 /* I wonder if emacs_close (emacs_open (pty_name, ...))
1951 emacs_close (xforkin
);
1952 xforkout
= xforkin
= emacs_open (pty_name
, O_RDWR
, 0);
1956 emacs_write (1, "Couldn't open the pty terminal ", 31);
1957 emacs_write (1, pty_name
, strlen (pty_name
));
1958 emacs_write (1, "\n", 1);
1962 #ifdef SET_CHILD_PTY_PGRP
1963 ioctl (xforkin
, TIOCSPGRP
, &pgrp
);
1964 ioctl (xforkout
, TIOCSPGRP
, &pgrp
);
1967 #endif /* not UNIPLUS and not RTU and not DONT_REOPEN_PTY */
1969 #ifdef SETUP_SLAVE_PTY
1974 #endif /* SETUP_SLAVE_PTY */
1976 /* On AIX, we've disabled SIGHUP above once we start a child on a pty.
1977 Now reenable it in the child, so it will die when we want it to. */
1979 signal (SIGHUP
, SIG_DFL
);
1981 #endif /* HAVE_PTYS */
1983 signal (SIGINT
, SIG_DFL
);
1984 signal (SIGQUIT
, SIG_DFL
);
1986 /* Stop blocking signals in the child. */
1987 #ifdef POSIX_SIGNALS
1988 sigprocmask (SIG_SETMASK
, &procmask
, 0);
1989 #else /* !POSIX_SIGNALS */
1993 #else /* not BSD4_1 */
1994 #if defined (BSD_SYSTEM) || defined (UNIPLUS) || defined (HPUX)
1995 sigsetmask (SIGEMPTYMASK
);
1996 #else /* ordinary USG */
1998 signal (SIGCHLD
, sigchld
);
2000 #endif /* ordinary USG */
2001 #endif /* not BSD4_1 */
2002 #endif /* SIGCHLD */
2003 #endif /* !POSIX_SIGNALS */
2006 child_setup_tty (xforkout
);
2008 pid
= child_setup (xforkin
, xforkout
, xforkout
,
2009 new_argv
, 1, current_dir
);
2010 #else /* not WINDOWSNT */
2011 child_setup (xforkin
, xforkout
, xforkout
,
2012 new_argv
, 1, current_dir
);
2013 #endif /* not WINDOWSNT */
2015 environ
= save_environ
;
2020 /* This runs in the Emacs process. */
2024 emacs_close (forkin
);
2025 if (forkin
!= forkout
&& forkout
>= 0)
2026 emacs_close (forkout
);
2030 /* vfork succeeded. */
2031 XSETFASTINT (XPROCESS (process
)->pid
, pid
);
2034 register_child (pid
, inchannel
);
2035 #endif /* WINDOWSNT */
2037 /* If the subfork execv fails, and it exits,
2038 this close hangs. I don't know why.
2039 So have an interrupt jar it loose. */
2041 struct atimer
*timer
;
2045 EMACS_SET_SECS_USECS (offset
, 1, 0);
2046 timer
= start_atimer (ATIMER_RELATIVE
, offset
, create_process_1
, 0);
2049 emacs_close (forkin
);
2051 cancel_atimer (timer
);
2055 if (forkin
!= forkout
&& forkout
>= 0)
2056 emacs_close (forkout
);
2060 XPROCESS (process
)->tty_name
= build_string (pty_name
);
2063 XPROCESS (process
)->tty_name
= Qnil
;
2066 /* Restore the signal state whether vfork succeeded or not.
2067 (We will signal an error, below, if it failed.) */
2068 #ifdef POSIX_SIGNALS
2069 #ifdef HAVE_WORKING_VFORK
2070 /* Restore the parent's signal handlers. */
2071 sigaction (SIGINT
, &sigint_action
, 0);
2072 sigaction (SIGQUIT
, &sigquit_action
, 0);
2074 sigaction (SIGHUP
, &sighup_action
, 0);
2076 #endif /* HAVE_WORKING_VFORK */
2077 /* Stop blocking signals in the parent. */
2078 sigprocmask (SIG_SETMASK
, &procmask
, 0);
2079 #else /* !POSIX_SIGNALS */
2083 #else /* not BSD4_1 */
2084 #if defined (BSD_SYSTEM) || defined (UNIPLUS) || defined (HPUX)
2085 sigsetmask (SIGEMPTYMASK
);
2086 #else /* ordinary USG */
2088 signal (SIGCHLD
, sigchld
);
2089 /* Now really handle any of these signals
2090 that came in during this function. */
2091 if (sigchld_deferred
)
2092 kill (getpid (), SIGCHLD
);
2094 #endif /* ordinary USG */
2095 #endif /* not BSD4_1 */
2096 #endif /* SIGCHLD */
2097 #endif /* !POSIX_SIGNALS */
2099 /* Now generate the error if vfork failed. */
2101 report_file_error ("Doing vfork", Qnil
);
2103 #endif /* not VMS */
2108 /* Convert an internal struct sockaddr to a lisp object (vector or string).
2109 The address family of sa is not included in the result. */
2112 conv_sockaddr_to_lisp (sa
, len
)
2113 struct sockaddr
*sa
;
2116 Lisp_Object address
;
2119 register struct Lisp_Vector
*p
;
2121 switch (sa
->sa_family
)
2125 struct sockaddr_in
*sin
= (struct sockaddr_in
*) sa
;
2126 len
= sizeof (sin
->sin_addr
) + 1;
2127 address
= Fmake_vector (make_number (len
), Qnil
);
2128 p
= XVECTOR (address
);
2129 p
->contents
[--len
] = make_number (ntohs (sin
->sin_port
));
2130 cp
= (unsigned char *)&sin
->sin_addr
;
2133 #ifdef HAVE_LOCAL_SOCKETS
2136 struct sockaddr_un
*sockun
= (struct sockaddr_un
*) sa
;
2137 for (i
= 0; i
< sizeof (sockun
->sun_path
); i
++)
2138 if (sockun
->sun_path
[i
] == 0)
2140 return make_unibyte_string (sockun
->sun_path
, i
);
2144 len
-= sizeof (sa
->sa_family
);
2145 address
= Fcons (make_number (sa
->sa_family
),
2146 Fmake_vector (make_number (len
), Qnil
));
2147 p
= XVECTOR (XCDR (address
));
2148 cp
= (unsigned char *) sa
+ sizeof (sa
->sa_family
);
2154 p
->contents
[i
++] = make_number (*cp
++);
2160 /* Get family and required size for sockaddr structure to hold ADDRESS. */
2163 get_lisp_to_sockaddr_size (address
, familyp
)
2164 Lisp_Object address
;
2167 register struct Lisp_Vector
*p
;
2169 if (VECTORP (address
))
2171 p
= XVECTOR (address
);
2175 return sizeof (struct sockaddr_in
);
2178 #ifdef HAVE_LOCAL_SOCKETS
2179 else if (STRINGP (address
))
2181 *familyp
= AF_LOCAL
;
2182 return sizeof (struct sockaddr_un
);
2185 else if (CONSP (address
) && INTEGERP (XCAR (address
)) && VECTORP (XCDR (address
)))
2187 struct sockaddr
*sa
;
2188 *familyp
= XINT (XCAR (address
));
2189 p
= XVECTOR (XCDR (address
));
2190 return p
->size
+ sizeof (sa
->sa_family
);
2195 /* Convert an address object (vector or string) to an internal sockaddr.
2196 Format of address has already been validated by size_lisp_to_sockaddr. */
2199 conv_lisp_to_sockaddr (family
, address
, sa
, len
)
2201 Lisp_Object address
;
2202 struct sockaddr
*sa
;
2205 register struct Lisp_Vector
*p
;
2206 register unsigned char *cp
;
2210 sa
->sa_family
= family
;
2212 if (VECTORP (address
))
2214 p
= XVECTOR (address
);
2215 if (family
== AF_INET
)
2217 struct sockaddr_in
*sin
= (struct sockaddr_in
*) sa
;
2218 len
= sizeof (sin
->sin_addr
) + 1;
2219 i
= XINT (p
->contents
[--len
]);
2220 sin
->sin_port
= htons (i
);
2221 cp
= (unsigned char *)&sin
->sin_addr
;
2224 else if (STRINGP (address
))
2226 #ifdef HAVE_LOCAL_SOCKETS
2227 if (family
== AF_LOCAL
)
2229 struct sockaddr_un
*sockun
= (struct sockaddr_un
*) sa
;
2230 cp
= SDATA (address
);
2231 for (i
= 0; i
< sizeof (sockun
->sun_path
) && *cp
; i
++)
2232 sockun
->sun_path
[i
] = *cp
++;
2239 p
= XVECTOR (XCDR (address
));
2240 cp
= (unsigned char *)sa
+ sizeof (sa
->sa_family
);
2243 for (i
= 0; i
< len
; i
++)
2244 if (INTEGERP (p
->contents
[i
]))
2245 *cp
++ = XFASTINT (p
->contents
[i
]) & 0xff;
2248 #ifdef DATAGRAM_SOCKETS
2249 DEFUN ("process-datagram-address", Fprocess_datagram_address
, Sprocess_datagram_address
,
2251 doc
: /* Get the current datagram address associated with PROCESS. */)
2253 Lisp_Object process
;
2257 CHECK_PROCESS (process
);
2259 if (!DATAGRAM_CONN_P (process
))
2262 channel
= XINT (XPROCESS (process
)->infd
);
2263 return conv_sockaddr_to_lisp (datagram_address
[channel
].sa
,
2264 datagram_address
[channel
].len
);
2267 DEFUN ("set-process-datagram-address", Fset_process_datagram_address
, Sset_process_datagram_address
,
2269 doc
: /* Set the datagram address for PROCESS to ADDRESS.
2270 Returns nil upon error setting address, ADDRESS otherwise. */)
2272 Lisp_Object process
, address
;
2277 CHECK_PROCESS (process
);
2279 if (!DATAGRAM_CONN_P (process
))
2282 channel
= XINT (XPROCESS (process
)->infd
);
2284 len
= get_lisp_to_sockaddr_size (address
, &family
);
2285 if (datagram_address
[channel
].len
!= len
)
2287 conv_lisp_to_sockaddr (family
, address
, datagram_address
[channel
].sa
, len
);
2293 static struct socket_options
{
2294 /* The name of this option. Should be lowercase version of option
2295 name without SO_ prefix. */
2297 /* Length of name. */
2299 /* Option level SOL_... */
2301 /* Option number SO_... */
2303 enum { SOPT_UNKNOWN
, SOPT_BOOL
, SOPT_INT
, SOPT_STR
, SOPT_LINGER
} opttype
;
2304 } socket_options
[] =
2306 #ifdef SO_BINDTODEVICE
2307 { "bindtodevice", 12, SOL_SOCKET
, SO_BINDTODEVICE
, SOPT_STR
},
2310 { "broadcast", 9, SOL_SOCKET
, SO_BROADCAST
, SOPT_BOOL
},
2313 { "dontroute", 9, SOL_SOCKET
, SO_DONTROUTE
, SOPT_BOOL
},
2316 { "keepalive", 9, SOL_SOCKET
, SO_KEEPALIVE
, SOPT_BOOL
},
2319 { "linger", 6, SOL_SOCKET
, SO_LINGER
, SOPT_LINGER
},
2322 { "oobinline", 9, SOL_SOCKET
, SO_OOBINLINE
, SOPT_BOOL
},
2325 { "priority", 8, SOL_SOCKET
, SO_PRIORITY
, SOPT_INT
},
2328 { "reuseaddr", 9, SOL_SOCKET
, SO_REUSEADDR
, SOPT_BOOL
},
2330 { 0, 0, 0, 0, SOPT_UNKNOWN
}
2333 /* Process list of socket options OPTS on socket S.
2334 Only check if options are supported is S < 0.
2335 If NO_ERROR is non-zero, continue silently if an option
2338 Each element specifies one option. An element is either a string
2339 "OPTION=VALUE" or a cons (OPTION . VALUE) where OPTION is a string
2343 set_socket_options (s
, opts
, no_error
)
2349 opts
= Fcons (opts
, Qnil
);
2351 while (CONSP (opts
))
2356 struct socket_options
*sopt
;
2370 name
= (char *) SDATA (opt
);
2371 else if (SYMBOLP (opt
))
2372 name
= (char *) SDATA (SYMBOL_NAME (opt
));
2374 error ("Mal-formed option list");
2378 if (strncmp (name
, "no", 2) == 0)
2385 for (sopt
= socket_options
; sopt
->name
; sopt
++)
2386 if (strncmp (name
, sopt
->name
, sopt
->nlen
) == 0)
2388 if (name
[sopt
->nlen
] == 0)
2390 if (name
[sopt
->nlen
] == '=')
2392 arg
= name
+ sopt
->nlen
+ 1;
2397 switch (sopt
->opttype
)
2405 optval
= (*arg
== '0' || *arg
== 'n') ? 0 : 1;
2406 else if (INTEGERP (val
))
2407 optval
= XINT (val
) == 0 ? 0 : 1;
2409 optval
= NILP (val
) ? 0 : 1;
2410 ret
= setsockopt (s
, sopt
->optlevel
, sopt
->optnum
,
2411 &optval
, sizeof (optval
));
2420 else if (INTEGERP (val
))
2421 optval
= XINT (val
);
2423 error ("Bad option argument for %s", name
);
2426 ret
= setsockopt (s
, sopt
->optlevel
, sopt
->optnum
,
2427 &optval
, sizeof (optval
));
2437 else if (STRINGP (val
))
2438 arg
= (char *) SDATA (val
);
2439 else if (XSYMBOL (val
))
2440 arg
= (char *) SDATA (SYMBOL_NAME (val
));
2442 error ("Invalid argument to %s option", name
);
2444 ret
= setsockopt (s
, sopt
->optlevel
, sopt
->optnum
,
2451 struct linger linger
;
2454 linger
.l_linger
= 0;
2461 if (*arg
== 'n' || *arg
== 't' || *arg
== 'y')
2462 linger
.l_onoff
= (*arg
== 'n') ? 0 : 1;
2464 linger
.l_linger
= atoi(arg
);
2466 else if (INTEGERP (val
))
2467 linger
.l_linger
= XINT (val
);
2469 linger
.l_onoff
= NILP (val
) ? 0 : 1;
2470 ret
= setsockopt (s
, sopt
->optlevel
, sopt
->optnum
,
2471 &linger
, sizeof (linger
));
2480 error ("Unsupported option: %s", name
);
2482 if (ret
< 0 && ! no_error
)
2483 report_file_error ("Cannot set network option: %s", opt
);
2488 DEFUN ("set-network-process-options",
2489 Fset_network_process_options
, Sset_network_process_options
,
2491 doc
: /* Set one or more options for network process PROCESS.
2492 Each option is either a string "OPT=VALUE" or a cons (OPT . VALUE).
2493 A boolean value is false if it either zero or nil, true otherwise.
2495 The following options are known. Consult the relevant system manual
2496 pages for more information.
2498 bindtodevice=NAME -- bind to interface NAME, or remove binding if nil.
2499 broadcast=BOOL -- Allow send and receive of datagram broadcasts.
2500 dontroute=BOOL -- Only send to directly connected hosts.
2501 keepalive=BOOL -- Send keep-alive messages on network stream.
2502 linger=BOOL or TIMEOUT -- Send queued messages before closing.
2503 oobinline=BOOL -- Place out-of-band data in receive data stream.
2504 priority=INT -- Set protocol defined priority for sent packets.
2505 reuseaddr=BOOL -- Allow reusing a recently used address.
2507 usage: (set-network-process-options PROCESS &rest OPTIONS) */)
2512 Lisp_Object process
;
2516 CHECK_PROCESS (process
);
2517 if (nargs
> 1 && XINT (XPROCESS (process
)->infd
) >= 0)
2519 opts
= Flist (nargs
, args
);
2520 set_socket_options (XINT (XPROCESS (process
)->infd
), opts
, 0);
2525 /* A version of request_sigio suitable for a record_unwind_protect. */
2528 unwind_request_sigio (dummy
)
2531 if (interrupt_input
)
2536 /* Create a network stream/datagram client/server process. Treated
2537 exactly like a normal process when reading and writing. Primary
2538 differences are in status display and process deletion. A network
2539 connection has no PID; you cannot signal it. All you can do is
2540 stop/continue it and deactivate/close it via delete-process */
2542 DEFUN ("make-network-process", Fmake_network_process
, Smake_network_process
,
2544 doc
: /* Create and return a network server or client process.
2546 In Emacs, network connections are represented by process objects, so
2547 input and output work as for subprocesses and `delete-process' closes
2548 a network connection. However, a network process has no process id,
2549 it cannot be signalled, and the status codes are different from normal
2552 Arguments are specified as keyword/argument pairs. The following
2553 arguments are defined:
2555 :name NAME -- NAME is name for process. It is modified if necessary
2558 :buffer BUFFER -- BUFFER is the buffer (or buffer-name) to associate
2559 with the process. Process output goes at end of that buffer, unless
2560 you specify an output stream or filter function to handle the output.
2561 BUFFER may be also nil, meaning that this process is not associated
2564 :host HOST -- HOST is name of the host to connect to, or its IP
2565 address. The symbol `local' specifies the local host. If specified
2566 for a server process, it must be a valid name or address for the local
2567 host, and only clients connecting to that address will be accepted.
2569 :service SERVICE -- SERVICE is name of the service desired, or an
2570 integer specifying a port number to connect to. If SERVICE is t,
2571 a random port number is selected for the server.
2573 :type TYPE -- TYPE is the type of connection. The default (nil) is a
2574 stream type connection, `datagram' creates a datagram type connection.
2576 :family FAMILY -- FAMILY is the address (and protocol) family for the
2577 service specified by HOST and SERVICE. The default address family is
2578 Inet (or IPv4) for the host and port number specified by HOST and
2579 SERVICE. Other address families supported are:
2580 local -- for a local (i.e. UNIX) address specified by SERVICE.
2582 :local ADDRESS -- ADDRESS is the local address used for the connection.
2583 This parameter is ignored when opening a client process. When specified
2584 for a server process, the FAMILY, HOST and SERVICE args are ignored.
2586 :remote ADDRESS -- ADDRESS is the remote partner's address for the
2587 connection. This parameter is ignored when opening a stream server
2588 process. For a datagram server process, it specifies the initial
2589 setting of the remote datagram address. When specified for a client
2590 process, the FAMILY, HOST, and SERVICE args are ignored.
2592 The format of ADDRESS depends on the address family:
2593 - An IPv4 address is represented as an vector of integers [A B C D P]
2594 corresponding to numeric IP address A.B.C.D and port number P.
2595 - A local address is represented as a string with the address in the
2596 local address space.
2597 - An "unsupported family" address is represented by a cons (F . AV)
2598 where F is the family number and AV is a vector containing the socket
2599 address data with one element per address data byte. Do not rely on
2600 this format in portable code, as it may depend on implementation
2601 defined constants, data sizes, and data structure alignment.
2603 :coding CODING -- CODING is coding system for this process.
2605 :options OPTIONS -- Set the specified options for the network process.
2606 See `set-network-process-options' for details.
2608 :nowait BOOL -- If BOOL is non-nil for a stream type client process,
2609 return without waiting for the connection to complete; instead, the
2610 sentinel function will be called with second arg matching "open" (if
2611 successful) or "failed" when the connect completes. Default is to use
2612 a blocking connect (i.e. wait) for stream type connections.
2614 :noquery BOOL -- Query the user unless BOOL is non-nil, and process is
2615 running when emacs is exited.
2617 :stop BOOL -- Start process in the `stopped' state if BOOL non-nil.
2618 In the stopped state, a server process does not accept new
2619 connections, and a client process does not handle incoming traffic.
2620 The stopped state is cleared by `continue-process' and set by
2623 :filter FILTER -- Install FILTER as the process filter.
2625 :filter-multibyte BOOL -- If BOOL is non-nil, strings given to the
2626 process filter are multibyte, otherwise they are unibyte.
2627 If this keyword is not specified, the strings are multibyte iff
2628 `default-enable-multibyte-characters' is non-nil.
2630 :sentinel SENTINEL -- Install SENTINEL as the process sentinel.
2632 :log LOG -- Install LOG as the server process log function. This
2633 function is called when the server accepts a network connection from a
2634 client. The arguments are SERVER, CLIENT, and MESSAGE, where SERVER
2635 is the server process, CLIENT is the new process for the connection,
2636 and MESSAGE is a string.
2638 :plist PLIST -- Install PLIST as the new process' initial plist.
2640 :server BOOL -- if BOOL is non-nil, create a server process for the
2641 specified FAMILY, SERVICE, and connection type (stream or datagram).
2642 Default is a client process.
2644 A server process will listen for and accept connections from
2645 clients. When a client connection is accepted, a new network process
2646 is created for the connection with the following parameters:
2647 - The client's process name is constructed by concatenating the server
2648 process' NAME and a client identification string.
2649 - If the FILTER argument is non-nil, the client process will not get a
2650 separate process buffer; otherwise, the client's process buffer is a newly
2651 created buffer named after the server process' BUFFER name or process
2652 NAME concatenated with the client identification string.
2653 - The connection type and the process filter and sentinel parameters are
2654 inherited from the server process' TYPE, FILTER and SENTINEL.
2655 - The client process' contact info is set according to the client's
2656 addressing information (typically an IP address and a port number).
2657 - The client process' plist is initialized from the server's plist.
2659 Notice that the FILTER and SENTINEL args are never used directly by
2660 the server process. Also, the BUFFER argument is not used directly by
2661 the server process, but via the optional :log function, accepted (and
2662 failed) connections may be logged in the server process' buffer.
2664 The original argument list, modified with the actual connection
2665 information, is available via the `process-contact' function.
2667 usage: (make-network-process &rest ARGS) */)
2673 Lisp_Object contact
;
2674 struct Lisp_Process
*p
;
2675 #ifdef HAVE_GETADDRINFO
2676 struct addrinfo ai
, *res
, *lres
;
2677 struct addrinfo hints
;
2678 char *portstring
, portbuf
[128];
2679 #else /* HAVE_GETADDRINFO */
2680 struct _emacs_addrinfo
2686 struct sockaddr
*ai_addr
;
2687 struct _emacs_addrinfo
*ai_next
;
2689 #endif /* HAVE_GETADDRINFO */
2690 struct sockaddr_in address_in
;
2691 #ifdef HAVE_LOCAL_SOCKETS
2692 struct sockaddr_un address_un
;
2697 int s
= -1, outch
, inch
;
2698 struct gcpro gcpro1
;
2700 int count
= SPECPDL_INDEX ();
2702 Lisp_Object QCaddress
; /* one of QClocal or QCremote */
2704 Lisp_Object name
, buffer
, host
, service
, address
;
2705 Lisp_Object filter
, sentinel
;
2706 int is_non_blocking_client
= 0;
2714 /* Save arguments for process-contact and clone-process. */
2715 contact
= Flist (nargs
, args
);
2719 /* Ensure socket support is loaded if available. */
2720 init_winsock (TRUE
);
2723 /* :type TYPE (nil: stream, datagram */
2724 tem
= Fplist_get (contact
, QCtype
);
2726 socktype
= SOCK_STREAM
;
2727 #ifdef DATAGRAM_SOCKETS
2728 else if (EQ (tem
, Qdatagram
))
2729 socktype
= SOCK_DGRAM
;
2732 error ("Unsupported connection type");
2735 tem
= Fplist_get (contact
, QCserver
);
2738 /* Don't support network sockets when non-blocking mode is
2739 not available, since a blocked Emacs is not useful. */
2740 #if defined(TERM) || (!defined(O_NONBLOCK) && !defined(O_NDELAY))
2741 error ("Network servers not supported");
2747 /* Make QCaddress an alias for :local (server) or :remote (client). */
2748 QCaddress
= is_server
? QClocal
: QCremote
;
2751 if (!is_server
&& socktype
== SOCK_STREAM
2752 && (tem
= Fplist_get (contact
, QCnowait
), !NILP (tem
)))
2754 #ifndef NON_BLOCKING_CONNECT
2755 error ("Non-blocking connect not supported");
2757 is_non_blocking_client
= 1;
2761 name
= Fplist_get (contact
, QCname
);
2762 buffer
= Fplist_get (contact
, QCbuffer
);
2763 filter
= Fplist_get (contact
, QCfilter
);
2764 sentinel
= Fplist_get (contact
, QCsentinel
);
2766 CHECK_STRING (name
);
2769 /* Let's handle TERM before things get complicated ... */
2770 host
= Fplist_get (contact
, QChost
);
2771 CHECK_STRING (host
);
2773 service
= Fplist_get (contact
, QCservice
);
2774 if (INTEGERP (service
))
2775 port
= htons ((unsigned short) XINT (service
));
2778 struct servent
*svc_info
;
2779 CHECK_STRING (service
);
2780 svc_info
= getservbyname (SDATA (service
), "tcp");
2782 error ("Unknown service: %s", SDATA (service
));
2783 port
= svc_info
->s_port
;
2786 s
= connect_server (0);
2788 report_file_error ("error creating socket", Fcons (name
, Qnil
));
2789 send_command (s
, C_PORT
, 0, "%s:%d", SDATA (host
), ntohs (port
));
2790 send_command (s
, C_DUMB
, 1, 0);
2792 #else /* not TERM */
2794 /* Initialize addrinfo structure in case we don't use getaddrinfo. */
2795 ai
.ai_socktype
= socktype
;
2800 /* :local ADDRESS or :remote ADDRESS */
2801 address
= Fplist_get (contact
, QCaddress
);
2802 if (!NILP (address
))
2804 host
= service
= Qnil
;
2806 if (!(ai
.ai_addrlen
= get_lisp_to_sockaddr_size (address
, &family
)))
2807 error ("Malformed :address");
2808 ai
.ai_family
= family
;
2809 ai
.ai_addr
= alloca (ai
.ai_addrlen
);
2810 conv_lisp_to_sockaddr (family
, address
, ai
.ai_addr
, ai
.ai_addrlen
);
2814 /* :family FAMILY -- nil (for Inet), local, or integer. */
2815 tem
= Fplist_get (contact
, QCfamily
);
2817 family
= XINT (tem
);
2822 #ifdef HAVE_LOCAL_SOCKETS
2823 else if (EQ (tem
, Qlocal
))
2828 error ("Unknown address family");
2829 ai
.ai_family
= family
;
2831 /* :service SERVICE -- string, integer (port number), or t (random port). */
2832 service
= Fplist_get (contact
, QCservice
);
2834 #ifdef HAVE_LOCAL_SOCKETS
2835 if (family
== AF_LOCAL
)
2837 /* Host is not used. */
2839 CHECK_STRING (service
);
2840 bzero (&address_un
, sizeof address_un
);
2841 address_un
.sun_family
= AF_LOCAL
;
2842 strncpy (address_un
.sun_path
, SDATA (service
), sizeof address_un
.sun_path
);
2843 ai
.ai_addr
= (struct sockaddr
*) &address_un
;
2844 ai
.ai_addrlen
= sizeof address_un
;
2849 /* :host HOST -- hostname, ip address, or 'local for localhost. */
2850 host
= Fplist_get (contact
, QChost
);
2853 if (EQ (host
, Qlocal
))
2854 host
= build_string ("localhost");
2855 CHECK_STRING (host
);
2858 /* Slow down polling to every ten seconds.
2859 Some kernels have a bug which causes retrying connect to fail
2860 after a connect. Polling can interfere with gethostbyname too. */
2861 #ifdef POLL_FOR_INPUT
2862 if (socktype
== SOCK_STREAM
)
2864 record_unwind_protect (unwind_stop_other_atimers
, Qnil
);
2865 bind_polling_period (10);
2869 #ifdef HAVE_GETADDRINFO
2870 /* If we have a host, use getaddrinfo to resolve both host and service.
2871 Otherwise, use getservbyname to lookup the service. */
2875 /* SERVICE can either be a string or int.
2876 Convert to a C string for later use by getaddrinfo. */
2877 if (EQ (service
, Qt
))
2879 else if (INTEGERP (service
))
2881 sprintf (portbuf
, "%ld", (long) XINT (service
));
2882 portstring
= portbuf
;
2886 CHECK_STRING (service
);
2887 portstring
= SDATA (service
);
2892 memset (&hints
, 0, sizeof (hints
));
2894 hints
.ai_family
= NILP (Fplist_member (contact
, QCfamily
)) ? AF_UNSPEC
: family
;
2895 hints
.ai_socktype
= socktype
;
2896 hints
.ai_protocol
= 0;
2897 ret
= getaddrinfo (SDATA (host
), portstring
, &hints
, &res
);
2899 #ifdef HAVE_GAI_STRERROR
2900 error ("%s/%s %s", SDATA (host
), portstring
, gai_strerror(ret
));
2902 error ("%s/%s getaddrinfo error %d", SDATA (host
), portstring
, ret
);
2908 #endif /* HAVE_GETADDRINFO */
2910 /* We end up here if getaddrinfo is not defined, or in case no hostname
2911 has been specified (e.g. for a local server process). */
2913 if (EQ (service
, Qt
))
2915 else if (INTEGERP (service
))
2916 port
= htons ((unsigned short) XINT (service
));
2919 struct servent
*svc_info
;
2920 CHECK_STRING (service
);
2921 svc_info
= getservbyname (SDATA (service
),
2922 (socktype
== SOCK_DGRAM
? "udp" : "tcp"));
2924 error ("Unknown service: %s", SDATA (service
));
2925 port
= svc_info
->s_port
;
2928 bzero (&address_in
, sizeof address_in
);
2929 address_in
.sin_family
= family
;
2930 address_in
.sin_addr
.s_addr
= INADDR_ANY
;
2931 address_in
.sin_port
= port
;
2933 #ifndef HAVE_GETADDRINFO
2936 struct hostent
*host_info_ptr
;
2938 /* gethostbyname may fail with TRY_AGAIN, but we don't honour that,
2939 as it may `hang' emacs for a very long time. */
2942 host_info_ptr
= gethostbyname (SDATA (host
));
2947 bcopy (host_info_ptr
->h_addr
, (char *) &address_in
.sin_addr
,
2948 host_info_ptr
->h_length
);
2949 family
= host_info_ptr
->h_addrtype
;
2950 address_in
.sin_family
= family
;
2953 /* Attempt to interpret host as numeric inet address */
2955 IN_ADDR numeric_addr
;
2956 numeric_addr
= inet_addr ((char *) SDATA (host
));
2957 if (NUMERIC_ADDR_ERROR
)
2958 error ("Unknown host \"%s\"", SDATA (host
));
2960 bcopy ((char *)&numeric_addr
, (char *) &address_in
.sin_addr
,
2961 sizeof (address_in
.sin_addr
));
2965 #endif /* not HAVE_GETADDRINFO */
2967 ai
.ai_family
= family
;
2968 ai
.ai_addr
= (struct sockaddr
*) &address_in
;
2969 ai
.ai_addrlen
= sizeof address_in
;
2973 /* Kernel bugs (on Ultrix at least) cause lossage (not just EINTR)
2974 when connect is interrupted. So let's not let it get interrupted.
2975 Note we do not turn off polling, because polling is only used
2976 when not interrupt_input, and thus not normally used on the systems
2977 which have this bug. On systems which use polling, there's no way
2978 to quit if polling is turned off. */
2980 && !is_server
&& socktype
== SOCK_STREAM
)
2982 /* Comment from KFS: The original open-network-stream code
2983 didn't unwind protect this, but it seems like the proper
2984 thing to do. In any case, I don't see how it could harm to
2985 do this -- and it makes cleanup (using unbind_to) easier. */
2986 record_unwind_protect (unwind_request_sigio
, Qnil
);
2990 /* Do this in case we never enter the for-loop below. */
2991 count1
= SPECPDL_INDEX ();
2994 for (lres
= res
; lres
; lres
= lres
->ai_next
)
2996 s
= socket (lres
->ai_family
, lres
->ai_socktype
, lres
->ai_protocol
);
3003 #ifdef DATAGRAM_SOCKETS
3004 if (!is_server
&& socktype
== SOCK_DGRAM
)
3006 #endif /* DATAGRAM_SOCKETS */
3008 #ifdef NON_BLOCKING_CONNECT
3009 if (is_non_blocking_client
)
3012 ret
= fcntl (s
, F_SETFL
, O_NONBLOCK
);
3014 ret
= fcntl (s
, F_SETFL
, O_NDELAY
);
3026 /* Make us close S if quit. */
3027 record_unwind_protect (close_file_unwind
, make_number (s
));
3031 /* Configure as a server socket. */
3032 #ifdef HAVE_LOCAL_SOCKETS
3033 if (family
!= AF_LOCAL
)
3037 if (setsockopt (s
, SOL_SOCKET
, SO_REUSEADDR
, &optval
, sizeof optval
))
3038 report_file_error ("Cannot set reuse option on server socket.", Qnil
);
3041 if (bind (s
, lres
->ai_addr
, lres
->ai_addrlen
))
3042 report_file_error ("Cannot bind server socket", Qnil
);
3044 #ifdef HAVE_GETSOCKNAME
3045 if (EQ (service
, Qt
))
3047 struct sockaddr_in sa1
;
3048 int len1
= sizeof (sa1
);
3049 if (getsockname (s
, (struct sockaddr
*)&sa1
, &len1
) == 0)
3051 ((struct sockaddr_in
*)(lres
->ai_addr
))->sin_port
= sa1
.sin_port
;
3052 service
= make_number (ntohs (sa1
.sin_port
));
3053 contact
= Fplist_put (contact
, QCservice
, service
);
3058 if (socktype
== SOCK_STREAM
&& listen (s
, 5))
3059 report_file_error ("Cannot listen on server socket", Qnil
);
3069 /* This turns off all alarm-based interrupts; the
3070 bind_polling_period call above doesn't always turn all the
3071 short-interval ones off, especially if interrupt_input is
3074 It'd be nice to be able to control the connect timeout
3075 though. Would non-blocking connect calls be portable?
3077 This used to be conditioned by HAVE_GETADDRINFO. Why? */
3079 turn_on_atimers (0);
3081 ret
= connect (s
, lres
->ai_addr
, lres
->ai_addrlen
);
3084 turn_on_atimers (1);
3086 if (ret
== 0 || xerrno
== EISCONN
)
3088 /* The unwind-protect will be discarded afterwards.
3089 Likewise for immediate_quit. */
3093 #ifdef NON_BLOCKING_CONNECT
3095 if (is_non_blocking_client
&& xerrno
== EINPROGRESS
)
3099 if (is_non_blocking_client
&& xerrno
== EWOULDBLOCK
)
3107 if (xerrno
== EINTR
)
3109 if (xerrno
== EADDRINUSE
&& retry
< 20)
3111 /* A delay here is needed on some FreeBSD systems,
3112 and it is harmless, since this retrying takes time anyway
3113 and should be infrequent. */
3114 Fsleep_for (make_number (1), Qnil
);
3119 /* Discard the unwind protect closing S. */
3120 specpdl_ptr
= specpdl
+ count1
;
3127 #ifdef DATAGRAM_SOCKETS
3128 if (socktype
== SOCK_DGRAM
)
3130 if (datagram_address
[s
].sa
)
3132 datagram_address
[s
].sa
= (struct sockaddr
*) xmalloc (lres
->ai_addrlen
);
3133 datagram_address
[s
].len
= lres
->ai_addrlen
;
3137 bzero (datagram_address
[s
].sa
, lres
->ai_addrlen
);
3138 if (remote
= Fplist_get (contact
, QCremote
), !NILP (remote
))
3141 rlen
= get_lisp_to_sockaddr_size (remote
, &rfamily
);
3142 if (rfamily
== lres
->ai_family
&& rlen
== lres
->ai_addrlen
)
3143 conv_lisp_to_sockaddr (rfamily
, remote
,
3144 datagram_address
[s
].sa
, rlen
);
3148 bcopy (lres
->ai_addr
, datagram_address
[s
].sa
, lres
->ai_addrlen
);
3151 contact
= Fplist_put (contact
, QCaddress
,
3152 conv_sockaddr_to_lisp (lres
->ai_addr
, lres
->ai_addrlen
));
3153 #ifdef HAVE_GETSOCKNAME
3156 struct sockaddr_in sa1
;
3157 int len1
= sizeof (sa1
);
3158 if (getsockname (s
, (struct sockaddr
*)&sa1
, &len1
) == 0)
3159 contact
= Fplist_put (contact
, QClocal
,
3160 conv_sockaddr_to_lisp (&sa1
, len1
));
3165 #ifdef HAVE_GETADDRINFO
3172 /* Discard the unwind protect for closing S, if any. */
3173 specpdl_ptr
= specpdl
+ count1
;
3175 /* Unwind bind_polling_period and request_sigio. */
3176 unbind_to (count
, Qnil
);
3180 /* If non-blocking got this far - and failed - assume non-blocking is
3181 not supported after all. This is probably a wrong assumption, but
3182 the normal blocking calls to open-network-stream handles this error
3184 if (is_non_blocking_client
)
3189 report_file_error ("make server process failed", contact
);
3191 report_file_error ("make client process failed", contact
);
3194 tem
= Fplist_get (contact
, QCoptions
);
3196 set_socket_options (s
, tem
, 1);
3198 #endif /* not TERM */
3204 buffer
= Fget_buffer_create (buffer
);
3205 proc
= make_process (name
);
3207 chan_process
[inch
] = proc
;
3210 fcntl (inch
, F_SETFL
, O_NONBLOCK
);
3213 fcntl (inch
, F_SETFL
, O_NDELAY
);
3217 p
= XPROCESS (proc
);
3219 p
->childp
= contact
;
3220 p
->plist
= Fcopy_sequence (Fplist_get (contact
, QCplist
));
3223 p
->sentinel
= sentinel
;
3225 p
->filter_multibyte
= buffer_defaults
.enable_multibyte_characters
;
3226 /* Override the above only if :filter-multibyte is specified. */
3227 if (! NILP (Fplist_member (contact
, QCfilter_multibyte
)))
3228 p
->filter_multibyte
= Fplist_get (contact
, QCfilter_multibyte
);
3229 p
->log
= Fplist_get (contact
, QClog
);
3230 if (tem
= Fplist_get (contact
, QCnoquery
), !NILP (tem
))
3231 p
->kill_without_query
= Qt
;
3232 if ((tem
= Fplist_get (contact
, QCstop
), !NILP (tem
)))
3235 XSETINT (p
->infd
, inch
);
3236 XSETINT (p
->outfd
, outch
);
3237 if (is_server
&& socktype
== SOCK_STREAM
)
3238 p
->status
= Qlisten
;
3240 #ifdef NON_BLOCKING_CONNECT
3241 if (is_non_blocking_client
)
3243 /* We may get here if connect did succeed immediately. However,
3244 in that case, we still need to signal this like a non-blocking
3246 p
->status
= Qconnect
;
3247 if (!FD_ISSET (inch
, &connect_wait_mask
))
3249 FD_SET (inch
, &connect_wait_mask
);
3250 num_pending_connects
++;
3255 /* A server may have a client filter setting of Qt, but it must
3256 still listen for incoming connects unless it is stopped. */
3257 if ((!EQ (p
->filter
, Qt
) && !EQ (p
->command
, Qt
))
3258 || (EQ (p
->status
, Qlisten
) && NILP (p
->command
)))
3260 FD_SET (inch
, &input_wait_mask
);
3261 FD_SET (inch
, &non_keyboard_wait_mask
);
3264 if (inch
> max_process_desc
)
3265 max_process_desc
= inch
;
3267 tem
= Fplist_member (contact
, QCcoding
);
3268 if (!NILP (tem
) && (!CONSP (tem
) || !CONSP (XCDR (tem
))))
3269 tem
= Qnil
; /* No error message (too late!). */
3272 /* Setup coding systems for communicating with the network stream. */
3273 struct gcpro gcpro1
;
3274 /* Qt denotes we have not yet called Ffind_operation_coding_system. */
3275 Lisp_Object coding_systems
= Qt
;
3276 Lisp_Object args
[5], val
;
3279 val
= XCAR (XCDR (tem
));
3280 else if (!NILP (Vcoding_system_for_read
))
3281 val
= Vcoding_system_for_read
;
3282 else if ((!NILP (buffer
) && NILP (XBUFFER (buffer
)->enable_multibyte_characters
))
3283 || (NILP (buffer
) && NILP (buffer_defaults
.enable_multibyte_characters
)))
3284 /* We dare not decode end-of-line format by setting VAL to
3285 Qraw_text, because the existing Emacs Lisp libraries
3286 assume that they receive bare code including a sequene of
3291 if (NILP (host
) || NILP (service
))
3292 coding_systems
= Qnil
;
3295 args
[0] = Qopen_network_stream
, args
[1] = name
,
3296 args
[2] = buffer
, args
[3] = host
, args
[4] = service
;
3298 coding_systems
= Ffind_operation_coding_system (5, args
);
3301 if (CONSP (coding_systems
))
3302 val
= XCAR (coding_systems
);
3303 else if (CONSP (Vdefault_process_coding_system
))
3304 val
= XCAR (Vdefault_process_coding_system
);
3308 p
->decode_coding_system
= val
;
3311 val
= XCAR (XCDR (tem
));
3312 else if (!NILP (Vcoding_system_for_write
))
3313 val
= Vcoding_system_for_write
;
3314 else if (NILP (current_buffer
->enable_multibyte_characters
))
3318 if (EQ (coding_systems
, Qt
))
3320 if (NILP (host
) || NILP (service
))
3321 coding_systems
= Qnil
;
3324 args
[0] = Qopen_network_stream
, args
[1] = name
,
3325 args
[2] = buffer
, args
[3] = host
, args
[4] = service
;
3327 coding_systems
= Ffind_operation_coding_system (5, args
);
3331 if (CONSP (coding_systems
))
3332 val
= XCDR (coding_systems
);
3333 else if (CONSP (Vdefault_process_coding_system
))
3334 val
= XCDR (Vdefault_process_coding_system
);
3338 p
->encode_coding_system
= val
;
3340 setup_process_coding_systems (proc
);
3342 p
->decoding_buf
= make_uninit_string (0);
3343 p
->decoding_carryover
= make_number (0);
3344 p
->encoding_buf
= make_uninit_string (0);
3345 p
->encoding_carryover
= make_number (0);
3347 p
->inherit_coding_system_flag
3348 = (!NILP (tem
) || NILP (buffer
) || !inherit_process_coding_system
3354 #endif /* HAVE_SOCKETS */
3357 deactivate_process (proc
)
3360 register int inchannel
, outchannel
;
3361 register struct Lisp_Process
*p
= XPROCESS (proc
);
3363 inchannel
= XINT (p
->infd
);
3364 outchannel
= XINT (p
->outfd
);
3368 /* Beware SIGCHLD hereabouts. */
3369 flush_pending_output (inchannel
);
3372 VMS_PROC_STUFF
*get_vms_process_pointer (), *vs
;
3373 sys$
dassgn (outchannel
);
3374 vs
= get_vms_process_pointer (p
->pid
);
3376 give_back_vms_process_stuff (vs
);
3379 emacs_close (inchannel
);
3380 if (outchannel
>= 0 && outchannel
!= inchannel
)
3381 emacs_close (outchannel
);
3384 XSETINT (p
->infd
, -1);
3385 XSETINT (p
->outfd
, -1);
3386 #ifdef DATAGRAM_SOCKETS
3387 if (DATAGRAM_CHAN_P (inchannel
))
3389 xfree (datagram_address
[inchannel
].sa
);
3390 datagram_address
[inchannel
].sa
= 0;
3391 datagram_address
[inchannel
].len
= 0;
3394 chan_process
[inchannel
] = Qnil
;
3395 FD_CLR (inchannel
, &input_wait_mask
);
3396 FD_CLR (inchannel
, &non_keyboard_wait_mask
);
3397 if (FD_ISSET (inchannel
, &connect_wait_mask
))
3399 FD_CLR (inchannel
, &connect_wait_mask
);
3400 if (--num_pending_connects
< 0)
3403 if (inchannel
== max_process_desc
)
3406 /* We just closed the highest-numbered process input descriptor,
3407 so recompute the highest-numbered one now. */
3408 max_process_desc
= 0;
3409 for (i
= 0; i
< MAXDESC
; i
++)
3410 if (!NILP (chan_process
[i
]))
3411 max_process_desc
= i
;
3416 /* Close all descriptors currently in use for communication
3417 with subprocess. This is used in a newly-forked subprocess
3418 to get rid of irrelevant descriptors. */
3421 close_process_descs ()
3425 for (i
= 0; i
< MAXDESC
; i
++)
3427 Lisp_Object process
;
3428 process
= chan_process
[i
];
3429 if (!NILP (process
))
3431 int in
= XINT (XPROCESS (process
)->infd
);
3432 int out
= XINT (XPROCESS (process
)->outfd
);
3435 if (out
>= 0 && in
!= out
)
3442 DEFUN ("accept-process-output", Faccept_process_output
, Saccept_process_output
,
3444 doc
: /* Allow any pending output from subprocesses to be read by Emacs.
3445 It is read into the process' buffers or given to their filter functions.
3446 Non-nil arg PROCESS means do not return until some output has been received
3448 Non-nil second arg TIMEOUT and third arg TIMEOUT-MSECS are number of
3449 seconds and microseconds to wait; return after that much time whether
3450 or not there is input.
3451 Return non-nil iff we received any output before the timeout expired. */)
3452 (process
, timeout
, timeout_msecs
)
3453 register Lisp_Object process
, timeout
, timeout_msecs
;
3458 if (! NILP (process
))
3459 CHECK_PROCESS (process
);
3461 if (! NILP (timeout_msecs
))
3463 CHECK_NUMBER (timeout_msecs
);
3464 useconds
= XINT (timeout_msecs
);
3465 if (!INTEGERP (timeout
))
3466 XSETINT (timeout
, 0);
3469 int carry
= useconds
/ 1000000;
3471 XSETINT (timeout
, XINT (timeout
) + carry
);
3472 useconds
-= carry
* 1000000;
3474 /* I think this clause is necessary because C doesn't
3475 guarantee a particular rounding direction for negative
3479 XSETINT (timeout
, XINT (timeout
) - 1);
3480 useconds
+= 1000000;
3487 if (! NILP (timeout
))
3489 CHECK_NUMBER (timeout
);
3490 seconds
= XINT (timeout
);
3491 if (seconds
< 0 || (seconds
== 0 && useconds
== 0))
3503 XSETFASTINT (process
, 0);
3506 (wait_reading_process_input (seconds
, useconds
, process
, 0)
3510 /* Accept a connection for server process SERVER on CHANNEL. */
3512 static int connect_counter
= 0;
3515 server_accept_connection (server
, channel
)
3519 Lisp_Object proc
, caller
, name
, buffer
;
3520 Lisp_Object contact
, host
, service
;
3521 struct Lisp_Process
*ps
= XPROCESS (server
);
3522 struct Lisp_Process
*p
;
3526 struct sockaddr_in in
;
3527 #ifdef HAVE_LOCAL_SOCKETS
3528 struct sockaddr_un un
;
3531 int len
= sizeof saddr
;
3533 s
= accept (channel
, &saddr
.sa
, &len
);
3542 if (code
== EWOULDBLOCK
)
3546 if (!NILP (ps
->log
))
3547 call3 (ps
->log
, server
, Qnil
,
3548 concat3 (build_string ("accept failed with code"),
3549 Fnumber_to_string (make_number (code
)),
3550 build_string ("\n")));
3556 /* Setup a new process to handle the connection. */
3558 /* Generate a unique identification of the caller, and build contact
3559 information for this process. */
3562 switch (saddr
.sa
.sa_family
)
3566 Lisp_Object args
[5];
3567 unsigned char *ip
= (unsigned char *)&saddr
.in
.sin_addr
.s_addr
;
3568 args
[0] = build_string ("%d.%d.%d.%d");
3569 args
[1] = make_number (*ip
++);
3570 args
[2] = make_number (*ip
++);
3571 args
[3] = make_number (*ip
++);
3572 args
[4] = make_number (*ip
++);
3573 host
= Fformat (5, args
);
3574 service
= make_number (ntohs (saddr
.in
.sin_port
));
3576 args
[0] = build_string (" <%s:%d>");
3579 caller
= Fformat (3, args
);
3583 #ifdef HAVE_LOCAL_SOCKETS
3587 caller
= Fnumber_to_string (make_number (connect_counter
));
3588 caller
= concat3 (build_string (" <*"), caller
, build_string ("*>"));
3592 /* Create a new buffer name for this process if it doesn't have a
3593 filter. The new buffer name is based on the buffer name or
3594 process name of the server process concatenated with the caller
3597 if (!NILP (ps
->filter
) && !EQ (ps
->filter
, Qt
))
3601 buffer
= ps
->buffer
;
3603 buffer
= Fbuffer_name (buffer
);
3608 buffer
= concat2 (buffer
, caller
);
3609 buffer
= Fget_buffer_create (buffer
);
3613 /* Generate a unique name for the new server process. Combine the
3614 server process name with the caller identification. */
3616 name
= concat2 (ps
->name
, caller
);
3617 proc
= make_process (name
);
3619 chan_process
[s
] = proc
;
3622 fcntl (s
, F_SETFL
, O_NONBLOCK
);
3625 fcntl (s
, F_SETFL
, O_NDELAY
);
3629 p
= XPROCESS (proc
);
3631 /* Build new contact information for this setup. */
3632 contact
= Fcopy_sequence (ps
->childp
);
3633 contact
= Fplist_put (contact
, QCserver
, Qnil
);
3634 contact
= Fplist_put (contact
, QChost
, host
);
3635 if (!NILP (service
))
3636 contact
= Fplist_put (contact
, QCservice
, service
);
3637 contact
= Fplist_put (contact
, QCremote
,
3638 conv_sockaddr_to_lisp (&saddr
.sa
, len
));
3639 #ifdef HAVE_GETSOCKNAME
3641 if (getsockname (s
, &saddr
.sa
, &len
) == 0)
3642 contact
= Fplist_put (contact
, QClocal
,
3643 conv_sockaddr_to_lisp (&saddr
.sa
, len
));
3646 p
->childp
= contact
;
3647 p
->plist
= Fcopy_sequence (ps
->plist
);
3650 p
->sentinel
= ps
->sentinel
;
3651 p
->filter
= ps
->filter
;
3654 XSETINT (p
->infd
, s
);
3655 XSETINT (p
->outfd
, s
);
3658 /* Client processes for accepted connections are not stopped initially. */
3659 if (!EQ (p
->filter
, Qt
))
3661 FD_SET (s
, &input_wait_mask
);
3662 FD_SET (s
, &non_keyboard_wait_mask
);
3665 if (s
> max_process_desc
)
3666 max_process_desc
= s
;
3668 /* Setup coding system for new process based on server process.
3669 This seems to be the proper thing to do, as the coding system
3670 of the new process should reflect the settings at the time the
3671 server socket was opened; not the current settings. */
3673 p
->decode_coding_system
= ps
->decode_coding_system
;
3674 p
->encode_coding_system
= ps
->encode_coding_system
;
3675 setup_process_coding_systems (proc
);
3677 p
->decoding_buf
= make_uninit_string (0);
3678 p
->decoding_carryover
= make_number (0);
3679 p
->encoding_buf
= make_uninit_string (0);
3680 p
->encoding_carryover
= make_number (0);
3682 p
->inherit_coding_system_flag
3683 = (NILP (buffer
) ? Qnil
: ps
->inherit_coding_system_flag
);
3685 if (!NILP (ps
->log
))
3686 call3 (ps
->log
, server
, proc
,
3687 concat3 (build_string ("accept from "),
3688 (STRINGP (host
) ? host
: build_string ("-")),
3689 build_string ("\n")));
3691 if (!NILP (p
->sentinel
))
3692 exec_sentinel (proc
,
3693 concat3 (build_string ("open from "),
3694 (STRINGP (host
) ? host
: build_string ("-")),
3695 build_string ("\n")));
3698 /* This variable is different from waiting_for_input in keyboard.c.
3699 It is used to communicate to a lisp process-filter/sentinel (via the
3700 function Fwaiting_for_user_input_p below) whether emacs was waiting
3701 for user-input when that process-filter was called.
3702 waiting_for_input cannot be used as that is by definition 0 when
3703 lisp code is being evalled.
3704 This is also used in record_asynch_buffer_change.
3705 For that purpose, this must be 0
3706 when not inside wait_reading_process_input. */
3707 static int waiting_for_user_input_p
;
3709 /* This is here so breakpoints can be put on it. */
3711 wait_reading_process_input_1 ()
3715 /* Read and dispose of subprocess output while waiting for timeout to
3716 elapse and/or keyboard input to be available.
3719 timeout in seconds, or
3720 zero for no limit, or
3721 -1 means gobble data immediately available but don't wait for any.
3724 an additional duration to wait, measured in microseconds.
3725 If this is nonzero and time_limit is 0, then the timeout
3726 consists of MICROSECS only.
3728 READ_KBD is a lisp value:
3729 0 to ignore keyboard input, or
3730 1 to return when input is available, or
3731 -1 meaning caller will actually read the input, so don't throw to
3732 the quit handler, or
3733 a cons cell, meaning wait until its car is non-nil
3734 (and gobble terminal input into the buffer if any arrives), or
3735 a process object, meaning wait until something arrives from that
3736 process. The return value is true iff we read some input from
3739 DO_DISPLAY != 0 means redisplay should be done to show subprocess
3740 output that arrives.
3742 If READ_KBD is a pointer to a struct Lisp_Process, then the
3743 function returns true iff we received input from that process
3744 before the timeout elapsed.
3745 Otherwise, return true iff we received input from any process. */
3748 wait_reading_process_input (time_limit
, microsecs
, read_kbd
, do_display
)
3749 int time_limit
, microsecs
;
3750 Lisp_Object read_kbd
;
3753 register int channel
, nfds
;
3754 static SELECT_TYPE Available
;
3755 static SELECT_TYPE Connecting
;
3756 int check_connect
, no_avail
;
3759 EMACS_TIME timeout
, end_time
;
3760 int wait_channel
= -1;
3761 struct Lisp_Process
*wait_proc
= 0;
3762 int got_some_input
= 0;
3763 /* Either nil or a cons cell, the car of which is of interest and
3764 may be changed outside of this routine. */
3765 Lisp_Object wait_for_cell
= Qnil
;
3767 FD_ZERO (&Available
);
3768 FD_ZERO (&Connecting
);
3770 /* If read_kbd is a process to watch, set wait_proc and wait_channel
3772 if (PROCESSP (read_kbd
))
3774 wait_proc
= XPROCESS (read_kbd
);
3775 wait_channel
= XINT (wait_proc
->infd
);
3776 XSETFASTINT (read_kbd
, 0);
3779 /* If waiting for non-nil in a cell, record where. */
3780 if (CONSP (read_kbd
))
3782 wait_for_cell
= read_kbd
;
3783 XSETFASTINT (read_kbd
, 0);
3786 waiting_for_user_input_p
= XINT (read_kbd
);
3788 /* Since we may need to wait several times,
3789 compute the absolute time to return at. */
3790 if (time_limit
|| microsecs
)
3792 EMACS_GET_TIME (end_time
);
3793 EMACS_SET_SECS_USECS (timeout
, time_limit
, microsecs
);
3794 EMACS_ADD_TIME (end_time
, end_time
, timeout
);
3796 #ifdef POLL_INTERRUPTED_SYS_CALL
3797 /* AlainF 5-Jul-1996
3798 HP-UX 10.10 seem to have problems with signals coming in
3799 Causes "poll: interrupted system call" messages when Emacs is run
3801 Turn off periodic alarms (in case they are in use),
3802 and then turn off any other atimers. */
3804 turn_on_atimers (0);
3805 #endif /* POLL_INTERRUPTED_SYS_CALL */
3809 int timeout_reduced_for_timers
= 0;
3811 /* If calling from keyboard input, do not quit
3812 since we want to return C-g as an input character.
3813 Otherwise, do pending quit if requested. */
3814 if (XINT (read_kbd
) >= 0)
3817 /* Exit now if the cell we're waiting for became non-nil. */
3818 if (! NILP (wait_for_cell
) && ! NILP (XCAR (wait_for_cell
)))
3821 /* Compute time from now till when time limit is up */
3822 /* Exit if already run out */
3823 if (time_limit
== -1)
3825 /* -1 specified for timeout means
3826 gobble output available now
3827 but don't wait at all. */
3829 EMACS_SET_SECS_USECS (timeout
, 0, 0);
3831 else if (time_limit
|| microsecs
)
3833 EMACS_GET_TIME (timeout
);
3834 EMACS_SUB_TIME (timeout
, end_time
, timeout
);
3835 if (EMACS_TIME_NEG_P (timeout
))
3840 EMACS_SET_SECS_USECS (timeout
, 100000, 0);
3843 /* Normally we run timers here.
3844 But not if wait_for_cell; in those cases,
3845 the wait is supposed to be short,
3846 and those callers cannot handle running arbitrary Lisp code here. */
3847 if (NILP (wait_for_cell
))
3849 EMACS_TIME timer_delay
;
3853 int old_timers_run
= timers_run
;
3854 struct buffer
*old_buffer
= current_buffer
;
3856 timer_delay
= timer_check (1);
3858 /* If a timer has run, this might have changed buffers
3859 an alike. Make read_key_sequence aware of that. */
3860 if (timers_run
!= old_timers_run
3861 && old_buffer
!= current_buffer
3862 && waiting_for_user_input_p
== -1)
3863 record_asynch_buffer_change ();
3865 if (timers_run
!= old_timers_run
&& do_display
)
3866 /* We must retry, since a timer may have requeued itself
3867 and that could alter the time_delay. */
3868 redisplay_preserve_echo_area (9);
3872 while (!detect_input_pending ());
3874 /* If there is unread keyboard input, also return. */
3875 if (XINT (read_kbd
) != 0
3876 && requeued_events_pending_p ())
3879 if (! EMACS_TIME_NEG_P (timer_delay
) && time_limit
!= -1)
3881 EMACS_TIME difference
;
3882 EMACS_SUB_TIME (difference
, timer_delay
, timeout
);
3883 if (EMACS_TIME_NEG_P (difference
))
3885 timeout
= timer_delay
;
3886 timeout_reduced_for_timers
= 1;
3889 /* If time_limit is -1, we are not going to wait at all. */
3890 else if (time_limit
!= -1)
3892 /* This is so a breakpoint can be put here. */
3893 wait_reading_process_input_1 ();
3897 /* Cause C-g and alarm signals to take immediate action,
3898 and cause input available signals to zero out timeout.
3900 It is important that we do this before checking for process
3901 activity. If we get a SIGCHLD after the explicit checks for
3902 process activity, timeout is the only way we will know. */
3903 if (XINT (read_kbd
) < 0)
3904 set_waiting_for_input (&timeout
);
3906 /* If status of something has changed, and no input is
3907 available, notify the user of the change right away. After
3908 this explicit check, we'll let the SIGCHLD handler zap
3909 timeout to get our attention. */
3910 if (update_tick
!= process_tick
&& do_display
)
3912 SELECT_TYPE Atemp
, Ctemp
;
3914 Atemp
= input_wait_mask
;
3916 /* On Mac OS X, the SELECT system call always says input is
3917 present (for reading) at stdin, even when none is. This
3918 causes the call to SELECT below to return 1 and
3919 status_notify not to be called. As a result output of
3920 subprocesses are incorrectly discarded. */
3923 Ctemp
= connect_wait_mask
;
3924 EMACS_SET_SECS_USECS (timeout
, 0, 0);
3925 if ((select (max (max_process_desc
, max_keyboard_desc
) + 1,
3927 (num_pending_connects
> 0 ? &Ctemp
: (SELECT_TYPE
*)0),
3928 (SELECT_TYPE
*)0, &timeout
)
3931 /* It's okay for us to do this and then continue with
3932 the loop, since timeout has already been zeroed out. */
3933 clear_waiting_for_input ();
3938 /* Don't wait for output from a non-running process. Just
3939 read whatever data has already been received. */
3940 if (wait_proc
!= 0 && !NILP (wait_proc
->raw_status_low
))
3941 update_status (wait_proc
);
3943 && ! EQ (wait_proc
->status
, Qrun
)
3944 && ! EQ (wait_proc
->status
, Qconnect
))
3946 int nread
, total_nread
= 0;
3948 clear_waiting_for_input ();
3949 XSETPROCESS (proc
, wait_proc
);
3951 /* Read data from the process, until we exhaust it. */
3952 while (XINT (wait_proc
->infd
) >= 0)
3954 nread
= read_process_output (proc
, XINT (wait_proc
->infd
));
3960 total_nread
+= nread
;
3962 else if (nread
== -1 && EIO
== errno
)
3966 else if (nread
== -1 && EAGAIN
== errno
)
3970 else if (nread
== -1 && EWOULDBLOCK
== errno
)
3974 if (total_nread
> 0 && do_display
)
3975 redisplay_preserve_echo_area (10);
3980 /* Wait till there is something to do */
3982 if (!NILP (wait_for_cell
))
3984 Available
= non_process_wait_mask
;
3989 if (! XINT (read_kbd
))
3990 Available
= non_keyboard_wait_mask
;
3992 Available
= input_wait_mask
;
3993 check_connect
= (num_pending_connects
> 0);
3996 /* If frame size has changed or the window is newly mapped,
3997 redisplay now, before we start to wait. There is a race
3998 condition here; if a SIGIO arrives between now and the select
3999 and indicates that a frame is trashed, the select may block
4000 displaying a trashed screen. */
4001 if (frame_garbaged
&& do_display
)
4003 clear_waiting_for_input ();
4004 redisplay_preserve_echo_area (11);
4005 if (XINT (read_kbd
) < 0)
4006 set_waiting_for_input (&timeout
);
4010 if (XINT (read_kbd
) && detect_input_pending ())
4018 Connecting
= connect_wait_mask
;
4019 nfds
= select (max (max_process_desc
, max_keyboard_desc
) + 1,
4021 (check_connect
? &Connecting
: (SELECT_TYPE
*)0),
4022 (SELECT_TYPE
*)0, &timeout
);
4027 /* Make C-g and alarm signals set flags again */
4028 clear_waiting_for_input ();
4030 /* If we woke up due to SIGWINCH, actually change size now. */
4031 do_pending_window_change (0);
4033 if (time_limit
&& nfds
== 0 && ! timeout_reduced_for_timers
)
4034 /* We wanted the full specified time, so return now. */
4038 if (xerrno
== EINTR
)
4041 /* Ultrix select seems to return ENOMEM when it is
4042 interrupted. Treat it just like EINTR. Bleah. Note
4043 that we want to test for the "ultrix" CPP symbol, not
4044 "__ultrix__"; the latter is only defined under GCC, but
4045 not by DEC's bundled CC. -JimB */
4046 else if (xerrno
== ENOMEM
)
4050 /* This happens for no known reason on ALLIANT.
4051 I am guessing that this is the right response. -- RMS. */
4052 else if (xerrno
== EFAULT
)
4055 else if (xerrno
== EBADF
)
4058 /* AIX doesn't handle PTY closure the same way BSD does. On AIX,
4059 the child's closure of the pts gives the parent a SIGHUP, and
4060 the ptc file descriptor is automatically closed,
4061 yielding EBADF here or at select() call above.
4062 So, SIGHUP is ignored (see def of PTY_TTY_NAME_SPRINTF
4063 in m/ibmrt-aix.h), and here we just ignore the select error.
4064 Cleanup occurs c/o status_notify after SIGCLD. */
4065 no_avail
= 1; /* Cannot depend on values returned */
4071 error ("select error: %s", emacs_strerror (xerrno
));
4076 FD_ZERO (&Available
);
4080 #if defined(sun) && !defined(USG5_4)
4081 if (nfds
> 0 && keyboard_bit_set (&Available
)
4083 /* System sometimes fails to deliver SIGIO.
4085 David J. Mackenzie says that Emacs doesn't compile under
4086 Solaris if this code is enabled, thus the USG5_4 in the CPP
4087 conditional. "I haven't noticed any ill effects so far.
4088 If you find a Solaris expert somewhere, they might know
4090 kill (getpid (), SIGIO
);
4093 #if 0 /* When polling is used, interrupt_input is 0,
4094 so get_input_pending should read the input.
4095 So this should not be needed. */
4096 /* If we are using polling for input,
4097 and we see input available, make it get read now.
4098 Otherwise it might not actually get read for a second.
4099 And on hpux, since we turn off polling in wait_reading_process_input,
4100 it might never get read at all if we don't spend much time
4101 outside of wait_reading_process_input. */
4102 if (XINT (read_kbd
) && interrupt_input
4103 && keyboard_bit_set (&Available
)
4104 && input_polling_used ())
4105 kill (getpid (), SIGALRM
);
4108 /* Check for keyboard input */
4109 /* If there is any, return immediately
4110 to give it higher priority than subprocesses */
4112 if (XINT (read_kbd
) != 0)
4114 int old_timers_run
= timers_run
;
4115 struct buffer
*old_buffer
= current_buffer
;
4118 if (detect_input_pending_run_timers (do_display
))
4120 swallow_events (do_display
);
4121 if (detect_input_pending_run_timers (do_display
))
4125 /* If a timer has run, this might have changed buffers
4126 an alike. Make read_key_sequence aware of that. */
4127 if (timers_run
!= old_timers_run
4128 && waiting_for_user_input_p
== -1
4129 && old_buffer
!= current_buffer
)
4130 record_asynch_buffer_change ();
4136 /* If there is unread keyboard input, also return. */
4137 if (XINT (read_kbd
) != 0
4138 && requeued_events_pending_p ())
4141 /* If we are not checking for keyboard input now,
4142 do process events (but don't run any timers).
4143 This is so that X events will be processed.
4144 Otherwise they may have to wait until polling takes place.
4145 That would causes delays in pasting selections, for example.
4147 (We used to do this only if wait_for_cell.) */
4148 if (XINT (read_kbd
) == 0 && detect_input_pending ())
4150 swallow_events (do_display
);
4151 #if 0 /* Exiting when read_kbd doesn't request that seems wrong, though. */
4152 if (detect_input_pending ())
4157 /* Exit now if the cell we're waiting for became non-nil. */
4158 if (! NILP (wait_for_cell
) && ! NILP (XCAR (wait_for_cell
)))
4162 /* If we think we have keyboard input waiting, but didn't get SIGIO,
4163 go read it. This can happen with X on BSD after logging out.
4164 In that case, there really is no input and no SIGIO,
4165 but select says there is input. */
4167 if (XINT (read_kbd
) && interrupt_input
4168 && keyboard_bit_set (&Available
))
4169 kill (getpid (), SIGIO
);
4173 got_some_input
|= nfds
> 0;
4175 /* If checking input just got us a size-change event from X,
4176 obey it now if we should. */
4177 if (XINT (read_kbd
) || ! NILP (wait_for_cell
))
4178 do_pending_window_change (0);
4180 /* Check for data from a process. */
4181 if (no_avail
|| nfds
== 0)
4184 /* Really FIRST_PROC_DESC should be 0 on Unix,
4185 but this is safer in the short run. */
4186 for (channel
= 0; channel
<= max_process_desc
; channel
++)
4188 if (FD_ISSET (channel
, &Available
)
4189 && FD_ISSET (channel
, &non_keyboard_wait_mask
))
4193 /* If waiting for this channel, arrange to return as
4194 soon as no more input to be processed. No more
4196 if (wait_channel
== channel
)
4202 proc
= chan_process
[channel
];
4206 /* If this is a server stream socket, accept connection. */
4207 if (EQ (XPROCESS (proc
)->status
, Qlisten
))
4209 server_accept_connection (proc
, channel
);
4213 /* Read data from the process, starting with our
4214 buffered-ahead character if we have one. */
4216 nread
= read_process_output (proc
, channel
);
4219 /* Since read_process_output can run a filter,
4220 which can call accept-process-output,
4221 don't try to read from any other processes
4222 before doing the select again. */
4223 FD_ZERO (&Available
);
4226 redisplay_preserve_echo_area (12);
4229 else if (nread
== -1 && errno
== EWOULDBLOCK
)
4232 /* ISC 4.1 defines both EWOULDBLOCK and O_NONBLOCK,
4233 and Emacs uses O_NONBLOCK, so what we get is EAGAIN. */
4235 else if (nread
== -1 && errno
== EAGAIN
)
4239 else if (nread
== -1 && errno
== EAGAIN
)
4241 /* Note that we cannot distinguish between no input
4242 available now and a closed pipe.
4243 With luck, a closed pipe will be accompanied by
4244 subprocess termination and SIGCHLD. */
4245 else if (nread
== 0 && !NETCONN_P (proc
))
4247 #endif /* O_NDELAY */
4248 #endif /* O_NONBLOCK */
4250 /* On some OSs with ptys, when the process on one end of
4251 a pty exits, the other end gets an error reading with
4252 errno = EIO instead of getting an EOF (0 bytes read).
4253 Therefore, if we get an error reading and errno =
4254 EIO, just continue, because the child process has
4255 exited and should clean itself up soon (e.g. when we
4258 However, it has been known to happen that the SIGCHLD
4259 got lost. So raise the signl again just in case.
4261 else if (nread
== -1 && errno
== EIO
)
4262 kill (getpid (), SIGCHLD
);
4263 #endif /* HAVE_PTYS */
4264 /* If we can detect process termination, don't consider the process
4265 gone just because its pipe is closed. */
4267 else if (nread
== 0 && !NETCONN_P (proc
))
4272 /* Preserve status of processes already terminated. */
4273 XSETINT (XPROCESS (proc
)->tick
, ++process_tick
);
4274 deactivate_process (proc
);
4275 if (!NILP (XPROCESS (proc
)->raw_status_low
))
4276 update_status (XPROCESS (proc
));
4277 if (EQ (XPROCESS (proc
)->status
, Qrun
))
4278 XPROCESS (proc
)->status
4279 = Fcons (Qexit
, Fcons (make_number (256), Qnil
));
4282 #ifdef NON_BLOCKING_CONNECT
4283 if (check_connect
&& FD_ISSET (channel
, &Connecting
))
4285 struct Lisp_Process
*p
;
4287 FD_CLR (channel
, &connect_wait_mask
);
4288 if (--num_pending_connects
< 0)
4291 proc
= chan_process
[channel
];
4295 p
= XPROCESS (proc
);
4298 /* getsockopt(,,SO_ERROR,,) is said to hang on some systems.
4299 So only use it on systems where it is known to work. */
4301 int xlen
= sizeof(xerrno
);
4302 if (getsockopt(channel
, SOL_SOCKET
, SO_ERROR
, &xerrno
, &xlen
))
4307 struct sockaddr pname
;
4308 int pnamelen
= sizeof(pname
);
4310 /* If connection failed, getpeername will fail. */
4312 if (getpeername(channel
, &pname
, &pnamelen
) < 0)
4314 /* Obtain connect failure code through error slippage. */
4317 if (errno
== ENOTCONN
&& read(channel
, &dummy
, 1) < 0)
4324 XSETINT (p
->tick
, ++process_tick
);
4325 p
->status
= Fcons (Qfailed
, Fcons (make_number (xerrno
), Qnil
));
4326 deactivate_process (proc
);
4331 /* Execute the sentinel here. If we had relied on
4332 status_notify to do it later, it will read input
4333 from the process before calling the sentinel. */
4334 exec_sentinel (proc
, build_string ("open\n"));
4335 if (!EQ (p
->filter
, Qt
) && !EQ (p
->command
, Qt
))
4337 FD_SET (XINT (p
->infd
), &input_wait_mask
);
4338 FD_SET (XINT (p
->infd
), &non_keyboard_wait_mask
);
4342 #endif /* NON_BLOCKING_CONNECT */
4343 } /* end for each file descriptor */
4344 } /* end while exit conditions not met */
4346 waiting_for_user_input_p
= 0;
4348 /* If calling from keyboard input, do not quit
4349 since we want to return C-g as an input character.
4350 Otherwise, do pending quit if requested. */
4351 if (XINT (read_kbd
) >= 0)
4353 /* Prevent input_pending from remaining set if we quit. */
4354 clear_input_pending ();
4357 #ifdef POLL_INTERRUPTED_SYS_CALL
4358 /* AlainF 5-Jul-1996
4359 HP-UX 10.10 seems to have problems with signals coming in
4360 Causes "poll: interrupted system call" messages when Emacs is run
4362 Turn periodic alarms back on */
4364 #endif /* POLL_INTERRUPTED_SYS_CALL */
4366 return got_some_input
;
4369 /* Given a list (FUNCTION ARGS...), apply FUNCTION to the ARGS. */
4372 read_process_output_call (fun_and_args
)
4373 Lisp_Object fun_and_args
;
4375 return apply1 (XCAR (fun_and_args
), XCDR (fun_and_args
));
4379 read_process_output_error_handler (error
)
4382 cmd_error_internal (error
, "error in process filter: ");
4384 update_echo_area ();
4385 Fsleep_for (make_number (2), Qnil
);
4389 /* Read pending output from the process channel,
4390 starting with our buffered-ahead character if we have one.
4391 Yield number of decoded characters read.
4393 This function reads at most 1024 characters.
4394 If you want to read all available subprocess output,
4395 you must call it repeatedly until it returns zero.
4397 The characters read are decoded according to PROC's coding-system
4401 read_process_output (proc
, channel
)
4403 register int channel
;
4405 register int nchars
, nbytes
;
4407 register Lisp_Object outstream
;
4408 register struct buffer
*old
= current_buffer
;
4409 register struct Lisp_Process
*p
= XPROCESS (proc
);
4410 register int opoint
;
4411 struct coding_system
*coding
= proc_decode_coding_system
[channel
];
4412 int carryover
= XINT (p
->decoding_carryover
);
4416 VMS_PROC_STUFF
*vs
, *get_vms_process_pointer();
4418 vs
= get_vms_process_pointer (p
->pid
);
4422 return (0); /* Really weird if it does this */
4423 if (!(vs
->iosb
[0] & 1))
4424 return -1; /* I/O error */
4427 error ("Could not get VMS process pointer");
4428 chars
= vs
->inputBuffer
;
4429 nbytes
= clean_vms_buffer (chars
, vs
->iosb
[1]);
4432 start_vms_process_read (vs
); /* Crank up the next read on the process */
4433 return 1; /* Nothing worth printing, say we got 1 */
4437 /* The data carried over in the previous decoding (which are at
4438 the tail of decoding buffer) should be prepended to the new
4439 data read to decode all together. */
4440 chars
= (char *) alloca (nbytes
+ carryover
);
4441 bcopy (SDATA (p
->decoding_buf
), buf
, carryover
);
4442 bcopy (vs
->inputBuffer
, chars
+ carryover
, nbytes
);
4446 #ifdef DATAGRAM_SOCKETS
4447 /* A datagram is one packet; allow at least 1500+ bytes of data
4448 corresponding to the typical Ethernet frame size. */
4449 if (DATAGRAM_CHAN_P (channel
))
4451 /* carryover = 0; */ /* Does carryover make sense for datagrams? */
4456 chars
= (char *) alloca (carryover
+ readmax
);
4458 /* See the comment above. */
4459 bcopy (SDATA (p
->decoding_buf
), chars
, carryover
);
4461 #ifdef DATAGRAM_SOCKETS
4462 /* We have a working select, so proc_buffered_char is always -1. */
4463 if (DATAGRAM_CHAN_P (channel
))
4465 int len
= datagram_address
[channel
].len
;
4466 nbytes
= recvfrom (channel
, chars
+ carryover
, readmax
- carryover
,
4467 0, datagram_address
[channel
].sa
, &len
);
4471 if (proc_buffered_char
[channel
] < 0)
4472 nbytes
= emacs_read (channel
, chars
+ carryover
, readmax
- carryover
);
4475 chars
[carryover
] = proc_buffered_char
[channel
];
4476 proc_buffered_char
[channel
] = -1;
4477 nbytes
= emacs_read (channel
, chars
+ carryover
+ 1, readmax
- 1 - carryover
);
4481 nbytes
= nbytes
+ 1;
4483 #endif /* not VMS */
4485 XSETINT (p
->decoding_carryover
, 0);
4487 /* At this point, NBYTES holds number of bytes just received
4488 (including the one in proc_buffered_char[channel]). */
4491 if (nbytes
< 0 || coding
->mode
& CODING_MODE_LAST_BLOCK
)
4493 coding
->mode
|= CODING_MODE_LAST_BLOCK
;
4496 /* Now set NBYTES how many bytes we must decode. */
4497 nbytes
+= carryover
;
4499 /* Read and dispose of the process output. */
4500 outstream
= p
->filter
;
4501 if (!NILP (outstream
))
4503 /* We inhibit quit here instead of just catching it so that
4504 hitting ^G when a filter happens to be running won't screw
4506 int count
= SPECPDL_INDEX ();
4507 Lisp_Object odeactivate
;
4508 Lisp_Object obuffer
, okeymap
;
4510 int outer_running_asynch_code
= running_asynch_code
;
4511 int waiting
= waiting_for_user_input_p
;
4513 /* No need to gcpro these, because all we do with them later
4514 is test them for EQness, and none of them should be a string. */
4515 odeactivate
= Vdeactivate_mark
;
4516 XSETBUFFER (obuffer
, current_buffer
);
4517 okeymap
= current_buffer
->keymap
;
4519 specbind (Qinhibit_quit
, Qt
);
4520 specbind (Qlast_nonmenu_event
, Qt
);
4522 /* In case we get recursively called,
4523 and we already saved the match data nonrecursively,
4524 save the same match data in safely recursive fashion. */
4525 if (outer_running_asynch_code
)
4528 /* Don't clobber the CURRENT match data, either! */
4529 tem
= Fmatch_data (Qnil
, Qnil
);
4530 restore_match_data ();
4531 record_unwind_protect (Fset_match_data
, Fmatch_data (Qnil
, Qnil
));
4532 Fset_match_data (tem
);
4535 /* For speed, if a search happens within this code,
4536 save the match data in a special nonrecursive fashion. */
4537 running_asynch_code
= 1;
4539 text
= decode_coding_string (make_unibyte_string (chars
, nbytes
),
4541 Vlast_coding_system_used
= coding
->symbol
;
4542 /* A new coding system might be found. */
4543 if (!EQ (p
->decode_coding_system
, coding
->symbol
))
4545 p
->decode_coding_system
= coding
->symbol
;
4547 /* Don't call setup_coding_system for
4548 proc_decode_coding_system[channel] here. It is done in
4549 detect_coding called via decode_coding above. */
4551 /* If a coding system for encoding is not yet decided, we set
4552 it as the same as coding-system for decoding.
4554 But, before doing that we must check if
4555 proc_encode_coding_system[p->outfd] surely points to a
4556 valid memory because p->outfd will be changed once EOF is
4557 sent to the process. */
4558 if (NILP (p
->encode_coding_system
)
4559 && proc_encode_coding_system
[XINT (p
->outfd
)])
4561 p
->encode_coding_system
= coding
->symbol
;
4562 setup_coding_system (coding
->symbol
,
4563 proc_encode_coding_system
[XINT (p
->outfd
)]);
4567 carryover
= nbytes
- coding
->consumed
;
4568 bcopy (chars
+ coding
->consumed
, SDATA (p
->decoding_buf
),
4570 XSETINT (p
->decoding_carryover
, carryover
);
4571 /* Adjust the multibyteness of TEXT to that of the filter. */
4572 if (NILP (p
->filter_multibyte
) != ! STRING_MULTIBYTE (text
))
4573 text
= (STRING_MULTIBYTE (text
)
4574 ? Fstring_as_unibyte (text
)
4575 : Fstring_to_multibyte (text
));
4576 nbytes
= SBYTES (text
);
4577 nchars
= SCHARS (text
);
4579 internal_condition_case_1 (read_process_output_call
,
4581 Fcons (proc
, Fcons (text
, Qnil
))),
4582 !NILP (Vdebug_on_error
) ? Qnil
: Qerror
,
4583 read_process_output_error_handler
);
4585 /* If we saved the match data nonrecursively, restore it now. */
4586 restore_match_data ();
4587 running_asynch_code
= outer_running_asynch_code
;
4589 /* Handling the process output should not deactivate the mark. */
4590 Vdeactivate_mark
= odeactivate
;
4592 /* Restore waiting_for_user_input_p as it was
4593 when we were called, in case the filter clobbered it. */
4594 waiting_for_user_input_p
= waiting
;
4596 #if 0 /* Call record_asynch_buffer_change unconditionally,
4597 because we might have changed minor modes or other things
4598 that affect key bindings. */
4599 if (! EQ (Fcurrent_buffer (), obuffer
)
4600 || ! EQ (current_buffer
->keymap
, okeymap
))
4602 /* But do it only if the caller is actually going to read events.
4603 Otherwise there's no need to make him wake up, and it could
4604 cause trouble (for example it would make Fsit_for return). */
4605 if (waiting_for_user_input_p
== -1)
4606 record_asynch_buffer_change ();
4609 start_vms_process_read (vs
);
4611 unbind_to (count
, Qnil
);
4615 /* If no filter, write into buffer if it isn't dead. */
4616 if (!NILP (p
->buffer
) && !NILP (XBUFFER (p
->buffer
)->name
))
4618 Lisp_Object old_read_only
;
4619 int old_begv
, old_zv
;
4620 int old_begv_byte
, old_zv_byte
;
4621 Lisp_Object odeactivate
;
4622 int before
, before_byte
;
4627 odeactivate
= Vdeactivate_mark
;
4629 Fset_buffer (p
->buffer
);
4631 opoint_byte
= PT_BYTE
;
4632 old_read_only
= current_buffer
->read_only
;
4635 old_begv_byte
= BEGV_BYTE
;
4636 old_zv_byte
= ZV_BYTE
;
4638 current_buffer
->read_only
= Qnil
;
4640 /* Insert new output into buffer
4641 at the current end-of-output marker,
4642 thus preserving logical ordering of input and output. */
4643 if (XMARKER (p
->mark
)->buffer
)
4644 SET_PT_BOTH (clip_to_bounds (BEGV
, marker_position (p
->mark
), ZV
),
4645 clip_to_bounds (BEGV_BYTE
, marker_byte_position (p
->mark
),
4648 SET_PT_BOTH (ZV
, ZV_BYTE
);
4650 before_byte
= PT_BYTE
;
4652 /* If the output marker is outside of the visible region, save
4653 the restriction and widen. */
4654 if (! (BEGV
<= PT
&& PT
<= ZV
))
4657 text
= decode_coding_string (make_unibyte_string (chars
, nbytes
),
4659 Vlast_coding_system_used
= coding
->symbol
;
4660 /* A new coding system might be found. See the comment in the
4661 similar code in the previous `if' block. */
4662 if (!EQ (p
->decode_coding_system
, coding
->symbol
))
4664 p
->decode_coding_system
= coding
->symbol
;
4665 if (NILP (p
->encode_coding_system
)
4666 && proc_encode_coding_system
[XINT (p
->outfd
)])
4668 p
->encode_coding_system
= coding
->symbol
;
4669 setup_coding_system (coding
->symbol
,
4670 proc_encode_coding_system
[XINT (p
->outfd
)]);
4673 carryover
= nbytes
- coding
->consumed
;
4674 bcopy (chars
+ coding
->consumed
, SDATA (p
->decoding_buf
),
4676 XSETINT (p
->decoding_carryover
, carryover
);
4677 /* Adjust the multibyteness of TEXT to that of the buffer. */
4678 if (NILP (current_buffer
->enable_multibyte_characters
)
4679 != ! STRING_MULTIBYTE (text
))
4680 text
= (STRING_MULTIBYTE (text
)
4681 ? Fstring_as_unibyte (text
)
4682 : Fstring_to_multibyte (text
));
4683 nbytes
= SBYTES (text
);
4684 nchars
= SCHARS (text
);
4685 /* Insert before markers in case we are inserting where
4686 the buffer's mark is, and the user's next command is Meta-y. */
4687 insert_from_string_before_markers (text
, 0, 0, nchars
, nbytes
, 0);
4689 /* Make sure the process marker's position is valid when the
4690 process buffer is changed in the signal_after_change above.
4691 W3 is known to do that. */
4692 if (BUFFERP (p
->buffer
)
4693 && (b
= XBUFFER (p
->buffer
), b
!= current_buffer
))
4694 set_marker_both (p
->mark
, p
->buffer
, BUF_PT (b
), BUF_PT_BYTE (b
));
4696 set_marker_both (p
->mark
, p
->buffer
, PT
, PT_BYTE
);
4698 update_mode_lines
++;
4700 /* Make sure opoint and the old restrictions
4701 float ahead of any new text just as point would. */
4702 if (opoint
>= before
)
4704 opoint
+= PT
- before
;
4705 opoint_byte
+= PT_BYTE
- before_byte
;
4707 if (old_begv
> before
)
4709 old_begv
+= PT
- before
;
4710 old_begv_byte
+= PT_BYTE
- before_byte
;
4712 if (old_zv
>= before
)
4714 old_zv
+= PT
- before
;
4715 old_zv_byte
+= PT_BYTE
- before_byte
;
4718 /* If the restriction isn't what it should be, set it. */
4719 if (old_begv
!= BEGV
|| old_zv
!= ZV
)
4720 Fnarrow_to_region (make_number (old_begv
), make_number (old_zv
));
4722 /* Handling the process output should not deactivate the mark. */
4723 Vdeactivate_mark
= odeactivate
;
4725 current_buffer
->read_only
= old_read_only
;
4726 SET_PT_BOTH (opoint
, opoint_byte
);
4727 set_buffer_internal (old
);
4730 start_vms_process_read (vs
);
4735 DEFUN ("waiting-for-user-input-p", Fwaiting_for_user_input_p
, Swaiting_for_user_input_p
,
4737 doc
: /* Returns non-nil if emacs is waiting for input from the user.
4738 This is intended for use by asynchronous process output filters and sentinels. */)
4741 return (waiting_for_user_input_p
? Qt
: Qnil
);
4744 /* Sending data to subprocess */
4746 jmp_buf send_process_frame
;
4747 Lisp_Object process_sent_to
;
4750 send_process_trap ()
4756 longjmp (send_process_frame
, 1);
4759 /* Send some data to process PROC.
4760 BUF is the beginning of the data; LEN is the number of characters.
4761 OBJECT is the Lisp object that the data comes from. If OBJECT is
4762 nil or t, it means that the data comes from C string.
4764 If OBJECT is not nil, the data is encoded by PROC's coding-system
4765 for encoding before it is sent.
4767 This function can evaluate Lisp code and can garbage collect. */
4770 send_process (proc
, buf
, len
, object
)
4771 volatile Lisp_Object proc
;
4772 unsigned char *volatile buf
;
4774 volatile Lisp_Object object
;
4776 /* Use volatile to protect variables from being clobbered by longjmp. */
4778 struct coding_system
*coding
;
4779 struct gcpro gcpro1
;
4784 struct Lisp_Process
*p
= XPROCESS (proc
);
4785 VMS_PROC_STUFF
*vs
, *get_vms_process_pointer();
4788 if (! NILP (XPROCESS (proc
)->raw_status_low
))
4789 update_status (XPROCESS (proc
));
4790 if (! EQ (XPROCESS (proc
)->status
, Qrun
))
4791 error ("Process %s not running",
4792 SDATA (XPROCESS (proc
)->name
));
4793 if (XINT (XPROCESS (proc
)->outfd
) < 0)
4794 error ("Output file descriptor of %s is closed",
4795 SDATA (XPROCESS (proc
)->name
));
4797 coding
= proc_encode_coding_system
[XINT (XPROCESS (proc
)->outfd
)];
4798 Vlast_coding_system_used
= coding
->symbol
;
4800 if ((STRINGP (object
) && STRING_MULTIBYTE (object
))
4801 || (BUFFERP (object
)
4802 && !NILP (XBUFFER (object
)->enable_multibyte_characters
))
4805 if (!EQ (coding
->symbol
, XPROCESS (proc
)->encode_coding_system
))
4806 /* The coding system for encoding was changed to raw-text
4807 because we sent a unibyte text previously. Now we are
4808 sending a multibyte text, thus we must encode it by the
4809 original coding system specified for the current
4811 setup_coding_system (XPROCESS (proc
)->encode_coding_system
, coding
);
4812 /* src_multibyte should be set to 1 _after_ a call to
4813 setup_coding_system, since it resets src_multibyte to
4815 coding
->src_multibyte
= 1;
4819 /* For sending a unibyte text, character code conversion should
4820 not take place but EOL conversion should. So, setup raw-text
4821 or one of the subsidiary if we have not yet done it. */
4822 if (coding
->type
!= coding_type_raw_text
)
4824 if (CODING_REQUIRE_FLUSHING (coding
))
4826 /* But, before changing the coding, we must flush out data. */
4827 coding
->mode
|= CODING_MODE_LAST_BLOCK
;
4828 send_process (proc
, "", 0, Qt
);
4830 coding
->src_multibyte
= 0;
4831 setup_raw_text_coding_system (coding
);
4834 coding
->dst_multibyte
= 0;
4836 if (CODING_REQUIRE_ENCODING (coding
))
4838 int require
= encoding_buffer_size (coding
, len
);
4839 int from_byte
= -1, from
= -1, to
= -1;
4840 unsigned char *temp_buf
= NULL
;
4842 if (BUFFERP (object
))
4844 from_byte
= BUF_PTR_BYTE_POS (XBUFFER (object
), buf
);
4845 from
= buf_bytepos_to_charpos (XBUFFER (object
), from_byte
);
4846 to
= buf_bytepos_to_charpos (XBUFFER (object
), from_byte
+ len
);
4848 else if (STRINGP (object
))
4850 from_byte
= buf
- SDATA (object
);
4851 from
= string_byte_to_char (object
, from_byte
);
4852 to
= string_byte_to_char (object
, from_byte
+ len
);
4855 if (coding
->composing
!= COMPOSITION_DISABLED
)
4858 coding_save_composition (coding
, from
, to
, object
);
4860 coding
->composing
= COMPOSITION_DISABLED
;
4863 if (SBYTES (XPROCESS (proc
)->encoding_buf
) < require
)
4864 XPROCESS (proc
)->encoding_buf
= make_uninit_string (require
);
4867 buf
= (BUFFERP (object
)
4868 ? BUF_BYTE_ADDRESS (XBUFFER (object
), from_byte
)
4869 : SDATA (object
) + from_byte
);
4871 object
= XPROCESS (proc
)->encoding_buf
;
4872 encode_coding (coding
, (char *) buf
, SDATA (object
),
4873 len
, SBYTES (object
));
4874 len
= coding
->produced
;
4875 buf
= SDATA (object
);
4881 vs
= get_vms_process_pointer (p
->pid
);
4883 error ("Could not find this process: %x", p
->pid
);
4884 else if (write_to_vms_process (vs
, buf
, len
))
4888 if (pty_max_bytes
== 0)
4890 #if defined (HAVE_FPATHCONF) && defined (_PC_MAX_CANON)
4891 pty_max_bytes
= fpathconf (XFASTINT (XPROCESS (proc
)->outfd
),
4893 if (pty_max_bytes
< 0)
4894 pty_max_bytes
= 250;
4896 pty_max_bytes
= 250;
4898 /* Deduct one, to leave space for the eof. */
4902 /* 2000-09-21: Emacs 20.7, sparc-sun-solaris-2.6, GCC 2.95.2,
4903 CFLAGS="-g -O": The value of the parameter `proc' is clobbered
4904 when returning with longjmp despite being declared volatile. */
4905 if (!setjmp (send_process_frame
))
4907 process_sent_to
= proc
;
4911 SIGTYPE (*old_sigpipe
)();
4913 /* Decide how much data we can send in one batch.
4914 Long lines need to be split into multiple batches. */
4915 if (!NILP (XPROCESS (proc
)->pty_flag
))
4917 /* Starting this at zero is always correct when not the first
4918 iteration because the previous iteration ended by sending C-d.
4919 It may not be correct for the first iteration
4920 if a partial line was sent in a separate send_process call.
4921 If that proves worth handling, we need to save linepos
4922 in the process object. */
4924 unsigned char *ptr
= (unsigned char *) buf
;
4925 unsigned char *end
= (unsigned char *) buf
+ len
;
4927 /* Scan through this text for a line that is too long. */
4928 while (ptr
!= end
&& linepos
< pty_max_bytes
)
4936 /* If we found one, break the line there
4937 and put in a C-d to force the buffer through. */
4941 /* Send this batch, using one or more write calls. */
4944 int outfd
= XINT (XPROCESS (proc
)->outfd
);
4945 old_sigpipe
= (SIGTYPE (*) ()) signal (SIGPIPE
, send_process_trap
);
4946 #ifdef DATAGRAM_SOCKETS
4947 if (DATAGRAM_CHAN_P (outfd
))
4949 rv
= sendto (outfd
, (char *) buf
, this,
4950 0, datagram_address
[outfd
].sa
,
4951 datagram_address
[outfd
].len
);
4952 if (rv
< 0 && errno
== EMSGSIZE
)
4953 report_file_error ("sending datagram", Fcons (proc
, Qnil
));
4957 rv
= emacs_write (outfd
, (char *) buf
, this);
4958 signal (SIGPIPE
, old_sigpipe
);
4964 || errno
== EWOULDBLOCK
4970 /* Buffer is full. Wait, accepting input;
4971 that may allow the program
4972 to finish doing output and read more. */
4977 #ifdef BROKEN_PTY_READ_AFTER_EAGAIN
4978 /* A gross hack to work around a bug in FreeBSD.
4979 In the following sequence, read(2) returns
4983 write(2) 954 bytes, get EAGAIN
4984 read(2) 1024 bytes in process_read_output
4985 read(2) 11 bytes in process_read_output
4987 That is, read(2) returns more bytes than have
4988 ever been written successfully. The 1033 bytes
4989 read are the 1022 bytes written successfully
4990 after processing (for example with CRs added if
4991 the terminal is set up that way which it is
4992 here). The same bytes will be seen again in a
4993 later read(2), without the CRs. */
4995 if (errno
== EAGAIN
)
4998 ioctl (XINT (XPROCESS (proc
)->outfd
), TIOCFLUSH
,
5001 #endif /* BROKEN_PTY_READ_AFTER_EAGAIN */
5003 /* Running filters might relocate buffers or strings.
5004 Arrange to relocate BUF. */
5005 if (BUFFERP (object
))
5006 offset
= BUF_PTR_BYTE_POS (XBUFFER (object
), buf
);
5007 else if (STRINGP (object
))
5008 offset
= buf
- SDATA (object
);
5010 XSETFASTINT (zero
, 0);
5011 #ifdef EMACS_HAS_USECS
5012 wait_reading_process_input (0, 20000, zero
, 0);
5014 wait_reading_process_input (1, 0, zero
, 0);
5017 if (BUFFERP (object
))
5018 buf
= BUF_BYTE_ADDRESS (XBUFFER (object
), offset
);
5019 else if (STRINGP (object
))
5020 buf
= offset
+ SDATA (object
);
5025 /* This is a real error. */
5026 report_file_error ("writing to process", Fcons (proc
, Qnil
));
5033 /* If we sent just part of the string, put in an EOF
5034 to force it through, before we send the rest. */
5036 Fprocess_send_eof (proc
);
5039 #endif /* not VMS */
5043 proc
= process_sent_to
;
5045 XPROCESS (proc
)->raw_status_low
= Qnil
;
5046 XPROCESS (proc
)->raw_status_high
= Qnil
;
5047 XPROCESS (proc
)->status
= Fcons (Qexit
, Fcons (make_number (256), Qnil
));
5048 XSETINT (XPROCESS (proc
)->tick
, ++process_tick
);
5049 deactivate_process (proc
);
5051 error ("Error writing to process %s; closed it",
5052 SDATA (XPROCESS (proc
)->name
));
5054 error ("SIGPIPE raised on process %s; closed it",
5055 SDATA (XPROCESS (proc
)->name
));
5062 DEFUN ("process-send-region", Fprocess_send_region
, Sprocess_send_region
,
5064 doc
: /* Send current contents of region as input to PROCESS.
5065 PROCESS may be a process, a buffer, the name of a process or buffer, or
5066 nil, indicating the current buffer's process.
5067 Called from program, takes three arguments, PROCESS, START and END.
5068 If the region is more than 500 characters long,
5069 it is sent in several bunches. This may happen even for shorter regions.
5070 Output from processes can arrive in between bunches. */)
5071 (process
, start
, end
)
5072 Lisp_Object process
, start
, end
;
5077 proc
= get_process (process
);
5078 validate_region (&start
, &end
);
5080 if (XINT (start
) < GPT
&& XINT (end
) > GPT
)
5081 move_gap (XINT (start
));
5083 start1
= CHAR_TO_BYTE (XINT (start
));
5084 end1
= CHAR_TO_BYTE (XINT (end
));
5085 send_process (proc
, BYTE_POS_ADDR (start1
), end1
- start1
,
5086 Fcurrent_buffer ());
5091 DEFUN ("process-send-string", Fprocess_send_string
, Sprocess_send_string
,
5093 doc
: /* Send PROCESS the contents of STRING as input.
5094 PROCESS may be a process, a buffer, the name of a process or buffer, or
5095 nil, indicating the current buffer's process.
5096 If STRING is more than 500 characters long,
5097 it is sent in several bunches. This may happen even for shorter strings.
5098 Output from processes can arrive in between bunches. */)
5100 Lisp_Object process
, string
;
5103 CHECK_STRING (string
);
5104 proc
= get_process (process
);
5105 send_process (proc
, SDATA (string
),
5106 SBYTES (string
), string
);
5110 /* Return the foreground process group for the tty/pty that
5111 the process P uses. */
5113 emacs_get_tty_pgrp (p
)
5114 struct Lisp_Process
*p
;
5119 if (ioctl (XINT (p
->infd
), TIOCGPGRP
, &gid
) == -1 && ! NILP (p
->tty_name
))
5122 /* Some OS:es (Solaris 8/9) does not allow TIOCGPGRP from the
5123 master side. Try the slave side. */
5124 fd
= emacs_open (XSTRING (p
->tty_name
)->data
, O_RDONLY
, 0);
5128 ioctl (fd
, TIOCGPGRP
, &gid
);
5132 #endif /* defined (TIOCGPGRP ) */
5137 DEFUN ("process-running-child-p", Fprocess_running_child_p
,
5138 Sprocess_running_child_p
, 0, 1, 0,
5139 doc
: /* Return t if PROCESS has given the terminal to a child.
5140 If the operating system does not make it possible to find out,
5141 return t unconditionally. */)
5143 Lisp_Object process
;
5145 /* Initialize in case ioctl doesn't exist or gives an error,
5146 in a way that will cause returning t. */
5149 struct Lisp_Process
*p
;
5151 proc
= get_process (process
);
5152 p
= XPROCESS (proc
);
5154 if (!EQ (p
->childp
, Qt
))
5155 error ("Process %s is not a subprocess",
5157 if (XINT (p
->infd
) < 0)
5158 error ("Process %s is not active",
5161 gid
= emacs_get_tty_pgrp (p
);
5163 if (gid
== XFASTINT (p
->pid
))
5168 /* send a signal number SIGNO to PROCESS.
5169 If CURRENT_GROUP is t, that means send to the process group
5170 that currently owns the terminal being used to communicate with PROCESS.
5171 This is used for various commands in shell mode.
5172 If CURRENT_GROUP is lambda, that means send to the process group
5173 that currently owns the terminal, but only if it is NOT the shell itself.
5175 If NOMSG is zero, insert signal-announcements into process's buffers
5178 If we can, we try to signal PROCESS by sending control characters
5179 down the pty. This allows us to signal inferiors who have changed
5180 their uid, for which killpg would return an EPERM error. */
5183 process_send_signal (process
, signo
, current_group
, nomsg
)
5184 Lisp_Object process
;
5186 Lisp_Object current_group
;
5190 register struct Lisp_Process
*p
;
5194 proc
= get_process (process
);
5195 p
= XPROCESS (proc
);
5197 if (!EQ (p
->childp
, Qt
))
5198 error ("Process %s is not a subprocess",
5200 if (XINT (p
->infd
) < 0)
5201 error ("Process %s is not active",
5204 if (NILP (p
->pty_flag
))
5205 current_group
= Qnil
;
5207 /* If we are using pgrps, get a pgrp number and make it negative. */
5208 if (NILP (current_group
))
5209 /* Send the signal to the shell's process group. */
5210 gid
= XFASTINT (p
->pid
);
5213 #ifdef SIGNALS_VIA_CHARACTERS
5214 /* If possible, send signals to the entire pgrp
5215 by sending an input character to it. */
5217 /* TERMIOS is the latest and bestest, and seems most likely to
5218 work. If the system has it, use it. */
5225 tcgetattr (XINT (p
->infd
), &t
);
5226 send_process (proc
, &t
.c_cc
[VINTR
], 1, Qnil
);
5230 tcgetattr (XINT (p
->infd
), &t
);
5231 send_process (proc
, &t
.c_cc
[VQUIT
], 1, Qnil
);
5235 tcgetattr (XINT (p
->infd
), &t
);
5236 #if defined (VSWTCH) && !defined (PREFER_VSUSP)
5237 send_process (proc
, &t
.c_cc
[VSWTCH
], 1, Qnil
);
5239 send_process (proc
, &t
.c_cc
[VSUSP
], 1, Qnil
);
5244 #else /* ! HAVE_TERMIOS */
5246 /* On Berkeley descendants, the following IOCTL's retrieve the
5247 current control characters. */
5248 #if defined (TIOCGLTC) && defined (TIOCGETC)
5256 ioctl (XINT (p
->infd
), TIOCGETC
, &c
);
5257 send_process (proc
, &c
.t_intrc
, 1, Qnil
);
5260 ioctl (XINT (p
->infd
), TIOCGETC
, &c
);
5261 send_process (proc
, &c
.t_quitc
, 1, Qnil
);
5265 ioctl (XINT (p
->infd
), TIOCGLTC
, &lc
);
5266 send_process (proc
, &lc
.t_suspc
, 1, Qnil
);
5268 #endif /* ! defined (SIGTSTP) */
5271 #else /* ! defined (TIOCGLTC) && defined (TIOCGETC) */
5273 /* On SYSV descendants, the TCGETA ioctl retrieves the current control
5280 ioctl (XINT (p
->infd
), TCGETA
, &t
);
5281 send_process (proc
, &t
.c_cc
[VINTR
], 1, Qnil
);
5284 ioctl (XINT (p
->infd
), TCGETA
, &t
);
5285 send_process (proc
, &t
.c_cc
[VQUIT
], 1, Qnil
);
5289 ioctl (XINT (p
->infd
), TCGETA
, &t
);
5290 send_process (proc
, &t
.c_cc
[VSWTCH
], 1, Qnil
);
5292 #endif /* ! defined (SIGTSTP) */
5294 #else /* ! defined (TCGETA) */
5295 Your configuration files are messed up
.
5296 /* If your system configuration files define SIGNALS_VIA_CHARACTERS,
5297 you'd better be using one of the alternatives above! */
5298 #endif /* ! defined (TCGETA) */
5299 #endif /* ! defined (TIOCGLTC) && defined (TIOCGETC) */
5300 #endif /* ! defined HAVE_TERMIOS */
5302 /* The code above always returns from the function. */
5303 #endif /* defined (SIGNALS_VIA_CHARACTERS) */
5306 /* Get the current pgrp using the tty itself, if we have that.
5307 Otherwise, use the pty to get the pgrp.
5308 On pfa systems, saka@pfu.fujitsu.co.JP writes:
5309 "TIOCGPGRP symbol defined in sys/ioctl.h at E50.
5310 But, TIOCGPGRP does not work on E50 ;-P works fine on E60"
5311 His patch indicates that if TIOCGPGRP returns an error, then
5312 we should just assume that p->pid is also the process group id. */
5314 gid
= emacs_get_tty_pgrp (p
);
5317 /* If we can't get the information, assume
5318 the shell owns the tty. */
5319 gid
= XFASTINT (p
->pid
);
5321 /* It is not clear whether anything really can set GID to -1.
5322 Perhaps on some system one of those ioctls can or could do so.
5323 Or perhaps this is vestigial. */
5326 #else /* ! defined (TIOCGPGRP ) */
5327 /* Can't select pgrps on this system, so we know that
5328 the child itself heads the pgrp. */
5329 gid
= XFASTINT (p
->pid
);
5330 #endif /* ! defined (TIOCGPGRP ) */
5332 /* If current_group is lambda, and the shell owns the terminal,
5333 don't send any signal. */
5334 if (EQ (current_group
, Qlambda
) && gid
== XFASTINT (p
->pid
))
5342 p
->raw_status_low
= Qnil
;
5343 p
->raw_status_high
= Qnil
;
5345 XSETINT (p
->tick
, ++process_tick
);
5349 #endif /* ! defined (SIGCONT) */
5352 send_process (proc
, "\003", 1, Qnil
); /* ^C */
5357 send_process (proc
, "\031", 1, Qnil
); /* ^Y */
5362 sys$
forcex (&(XFASTINT (p
->pid
)), 0, 1);
5365 flush_pending_output (XINT (p
->infd
));
5369 /* If we don't have process groups, send the signal to the immediate
5370 subprocess. That isn't really right, but it's better than any
5371 obvious alternative. */
5374 kill (XFASTINT (p
->pid
), signo
);
5378 /* gid may be a pid, or minus a pgrp's number */
5380 if (!NILP (current_group
))
5382 if (ioctl (XINT (p
->infd
), TIOCSIGSEND
, signo
) == -1)
5383 EMACS_KILLPG (gid
, signo
);
5387 gid
= - XFASTINT (p
->pid
);
5390 #else /* ! defined (TIOCSIGSEND) */
5391 EMACS_KILLPG (gid
, signo
);
5392 #endif /* ! defined (TIOCSIGSEND) */
5395 DEFUN ("interrupt-process", Finterrupt_process
, Sinterrupt_process
, 0, 2, 0,
5396 doc
: /* Interrupt process PROCESS.
5397 PROCESS may be a process, a buffer, or the name of a process or buffer.
5398 nil or no arg means current buffer's process.
5399 Second arg CURRENT-GROUP non-nil means send signal to
5400 the current process-group of the process's controlling terminal
5401 rather than to the process's own process group.
5402 If the process is a shell, this means interrupt current subjob
5403 rather than the shell.
5405 If CURRENT-GROUP is `lambda', and if the shell owns the terminal,
5406 don't send the signal. */)
5407 (process
, current_group
)
5408 Lisp_Object process
, current_group
;
5410 process_send_signal (process
, SIGINT
, current_group
, 0);
5414 DEFUN ("kill-process", Fkill_process
, Skill_process
, 0, 2, 0,
5415 doc
: /* Kill process PROCESS. May be process or name of one.
5416 See function `interrupt-process' for more details on usage. */)
5417 (process
, current_group
)
5418 Lisp_Object process
, current_group
;
5420 process_send_signal (process
, SIGKILL
, current_group
, 0);
5424 DEFUN ("quit-process", Fquit_process
, Squit_process
, 0, 2, 0,
5425 doc
: /* Send QUIT signal to process PROCESS. May be process or name of one.
5426 See function `interrupt-process' for more details on usage. */)
5427 (process
, current_group
)
5428 Lisp_Object process
, current_group
;
5430 process_send_signal (process
, SIGQUIT
, current_group
, 0);
5434 DEFUN ("stop-process", Fstop_process
, Sstop_process
, 0, 2, 0,
5435 doc
: /* Stop process PROCESS. May be process or name of one.
5436 See function `interrupt-process' for more details on usage.
5437 If PROCESS is a network process, inhibit handling of incoming traffic. */)
5438 (process
, current_group
)
5439 Lisp_Object process
, current_group
;
5442 if (PROCESSP (process
) && NETCONN_P (process
))
5444 struct Lisp_Process
*p
;
5446 p
= XPROCESS (process
);
5447 if (NILP (p
->command
)
5448 && XINT (p
->infd
) >= 0)
5450 FD_CLR (XINT (p
->infd
), &input_wait_mask
);
5451 FD_CLR (XINT (p
->infd
), &non_keyboard_wait_mask
);
5458 error ("no SIGTSTP support");
5460 process_send_signal (process
, SIGTSTP
, current_group
, 0);
5465 DEFUN ("continue-process", Fcontinue_process
, Scontinue_process
, 0, 2, 0,
5466 doc
: /* Continue process PROCESS. May be process or name of one.
5467 See function `interrupt-process' for more details on usage.
5468 If PROCESS is a network process, resume handling of incoming traffic. */)
5469 (process
, current_group
)
5470 Lisp_Object process
, current_group
;
5473 if (PROCESSP (process
) && NETCONN_P (process
))
5475 struct Lisp_Process
*p
;
5477 p
= XPROCESS (process
);
5478 if (EQ (p
->command
, Qt
)
5479 && XINT (p
->infd
) >= 0
5480 && (!EQ (p
->filter
, Qt
) || EQ (p
->status
, Qlisten
)))
5482 FD_SET (XINT (p
->infd
), &input_wait_mask
);
5483 FD_SET (XINT (p
->infd
), &non_keyboard_wait_mask
);
5490 process_send_signal (process
, SIGCONT
, current_group
, 0);
5492 error ("no SIGCONT support");
5497 DEFUN ("signal-process", Fsignal_process
, Ssignal_process
,
5498 2, 2, "sProcess (name or number): \nnSignal code: ",
5499 doc
: /* Send PROCESS the signal with code SIGCODE.
5500 PROCESS may also be an integer specifying the process id of the
5501 process to signal; in this case, the process need not be a child of
5503 SIGCODE may be an integer, or a symbol whose name is a signal name. */)
5505 Lisp_Object process
, sigcode
;
5509 if (INTEGERP (process
))
5515 if (STRINGP (process
))
5518 if (tem
= Fget_process (process
), NILP (tem
))
5520 pid
= Fstring_to_number (process
, make_number (10));
5521 if (XINT (pid
) != 0)
5527 process
= get_process (process
);
5532 CHECK_PROCESS (process
);
5533 pid
= XPROCESS (process
)->pid
;
5534 if (!INTEGERP (pid
) || XINT (pid
) <= 0)
5535 error ("Cannot signal process %s", SDATA (XPROCESS (process
)->name
));
5539 #define handle_signal(NAME, VALUE) \
5540 else if (!strcmp (name, NAME)) \
5541 XSETINT (sigcode, VALUE)
5543 if (INTEGERP (sigcode
))
5547 unsigned char *name
;
5549 CHECK_SYMBOL (sigcode
);
5550 name
= SDATA (SYMBOL_NAME (sigcode
));
5555 handle_signal ("SIGHUP", SIGHUP
);
5558 handle_signal ("SIGINT", SIGINT
);
5561 handle_signal ("SIGQUIT", SIGQUIT
);
5564 handle_signal ("SIGILL", SIGILL
);
5567 handle_signal ("SIGABRT", SIGABRT
);
5570 handle_signal ("SIGEMT", SIGEMT
);
5573 handle_signal ("SIGKILL", SIGKILL
);
5576 handle_signal ("SIGFPE", SIGFPE
);
5579 handle_signal ("SIGBUS", SIGBUS
);
5582 handle_signal ("SIGSEGV", SIGSEGV
);
5585 handle_signal ("SIGSYS", SIGSYS
);
5588 handle_signal ("SIGPIPE", SIGPIPE
);
5591 handle_signal ("SIGALRM", SIGALRM
);
5594 handle_signal ("SIGTERM", SIGTERM
);
5597 handle_signal ("SIGURG", SIGURG
);
5600 handle_signal ("SIGSTOP", SIGSTOP
);
5603 handle_signal ("SIGTSTP", SIGTSTP
);
5606 handle_signal ("SIGCONT", SIGCONT
);
5609 handle_signal ("SIGCHLD", SIGCHLD
);
5612 handle_signal ("SIGTTIN", SIGTTIN
);
5615 handle_signal ("SIGTTOU", SIGTTOU
);
5618 handle_signal ("SIGIO", SIGIO
);
5621 handle_signal ("SIGXCPU", SIGXCPU
);
5624 handle_signal ("SIGXFSZ", SIGXFSZ
);
5627 handle_signal ("SIGVTALRM", SIGVTALRM
);
5630 handle_signal ("SIGPROF", SIGPROF
);
5633 handle_signal ("SIGWINCH", SIGWINCH
);
5636 handle_signal ("SIGINFO", SIGINFO
);
5639 handle_signal ("SIGUSR1", SIGUSR1
);
5642 handle_signal ("SIGUSR2", SIGUSR2
);
5645 error ("Undefined signal name %s", name
);
5648 #undef handle_signal
5650 return make_number (kill (XINT (pid
), XINT (sigcode
)));
5653 DEFUN ("process-send-eof", Fprocess_send_eof
, Sprocess_send_eof
, 0, 1, 0,
5654 doc
: /* Make PROCESS see end-of-file in its input.
5655 EOF comes after any text already sent to it.
5656 PROCESS may be a process, a buffer, the name of a process or buffer, or
5657 nil, indicating the current buffer's process.
5658 If PROCESS is a network connection, or is a process communicating
5659 through a pipe (as opposed to a pty), then you cannot send any more
5660 text to PROCESS after you call this function. */)
5662 Lisp_Object process
;
5665 struct coding_system
*coding
;
5667 if (DATAGRAM_CONN_P (process
))
5670 proc
= get_process (process
);
5671 coding
= proc_encode_coding_system
[XINT (XPROCESS (proc
)->outfd
)];
5673 /* Make sure the process is really alive. */
5674 if (! NILP (XPROCESS (proc
)->raw_status_low
))
5675 update_status (XPROCESS (proc
));
5676 if (! EQ (XPROCESS (proc
)->status
, Qrun
))
5677 error ("Process %s not running", SDATA (XPROCESS (proc
)->name
));
5679 if (CODING_REQUIRE_FLUSHING (coding
))
5681 coding
->mode
|= CODING_MODE_LAST_BLOCK
;
5682 send_process (proc
, "", 0, Qnil
);
5686 send_process (proc
, "\032", 1, Qnil
); /* ^z */
5688 if (!NILP (XPROCESS (proc
)->pty_flag
))
5689 send_process (proc
, "\004", 1, Qnil
);
5692 int old_outfd
, new_outfd
;
5694 #ifdef HAVE_SHUTDOWN
5695 /* If this is a network connection, or socketpair is used
5696 for communication with the subprocess, call shutdown to cause EOF.
5697 (In some old system, shutdown to socketpair doesn't work.
5698 Then we just can't win.) */
5699 if (NILP (XPROCESS (proc
)->pid
)
5700 || XINT (XPROCESS (proc
)->outfd
) == XINT (XPROCESS (proc
)->infd
))
5701 shutdown (XINT (XPROCESS (proc
)->outfd
), 1);
5702 /* In case of socketpair, outfd == infd, so don't close it. */
5703 if (XINT (XPROCESS (proc
)->outfd
) != XINT (XPROCESS (proc
)->infd
))
5704 emacs_close (XINT (XPROCESS (proc
)->outfd
));
5705 #else /* not HAVE_SHUTDOWN */
5706 emacs_close (XINT (XPROCESS (proc
)->outfd
));
5707 #endif /* not HAVE_SHUTDOWN */
5708 new_outfd
= emacs_open (NULL_DEVICE
, O_WRONLY
, 0);
5709 old_outfd
= XINT (XPROCESS (proc
)->outfd
);
5711 if (!proc_encode_coding_system
[new_outfd
])
5712 proc_encode_coding_system
[new_outfd
]
5713 = (struct coding_system
*) xmalloc (sizeof (struct coding_system
));
5714 bcopy (proc_encode_coding_system
[old_outfd
],
5715 proc_encode_coding_system
[new_outfd
],
5716 sizeof (struct coding_system
));
5717 bzero (proc_encode_coding_system
[old_outfd
],
5718 sizeof (struct coding_system
));
5720 XSETINT (XPROCESS (proc
)->outfd
, new_outfd
);
5726 /* Kill all processes associated with `buffer'.
5727 If `buffer' is nil, kill all processes */
5730 kill_buffer_processes (buffer
)
5733 Lisp_Object tail
, proc
;
5735 for (tail
= Vprocess_alist
; GC_CONSP (tail
); tail
= XCDR (tail
))
5737 proc
= XCDR (XCAR (tail
));
5738 if (GC_PROCESSP (proc
)
5739 && (NILP (buffer
) || EQ (XPROCESS (proc
)->buffer
, buffer
)))
5741 if (NETCONN_P (proc
))
5742 Fdelete_process (proc
);
5743 else if (XINT (XPROCESS (proc
)->infd
) >= 0)
5744 process_send_signal (proc
, SIGHUP
, Qnil
, 1);
5749 /* On receipt of a signal that a child status has changed, loop asking
5750 about children with changed statuses until the system says there
5753 All we do is change the status; we do not run sentinels or print
5754 notifications. That is saved for the next time keyboard input is
5755 done, in order to avoid timing errors.
5757 ** WARNING: this can be called during garbage collection.
5758 Therefore, it must not be fooled by the presence of mark bits in
5761 ** USG WARNING: Although it is not obvious from the documentation
5762 in signal(2), on a USG system the SIGCLD handler MUST NOT call
5763 signal() before executing at least one wait(), otherwise the
5764 handler will be called again, resulting in an infinite loop. The
5765 relevant portion of the documentation reads "SIGCLD signals will be
5766 queued and the signal-catching function will be continually
5767 reentered until the queue is empty". Invoking signal() causes the
5768 kernel to reexamine the SIGCLD queue. Fred Fish, UniSoft Systems
5772 sigchld_handler (signo
)
5775 int old_errno
= errno
;
5777 register struct Lisp_Process
*p
;
5778 extern EMACS_TIME
*input_available_clear_time
;
5782 sigheld
|= sigbit (SIGCHLD
);
5794 #endif /* no WUNTRACED */
5795 /* Keep trying to get a status until we get a definitive result. */
5799 pid
= wait3 (&w
, WNOHANG
| WUNTRACED
, 0);
5801 while (pid
< 0 && errno
== EINTR
);
5805 /* PID == 0 means no processes found, PID == -1 means a real
5806 failure. We have done all our job, so return. */
5808 /* USG systems forget handlers when they are used;
5809 must reestablish each time */
5810 #if defined (USG) && !defined (POSIX_SIGNALS)
5811 signal (signo
, sigchld_handler
); /* WARNING - must come after wait3() */
5814 sigheld
&= ~sigbit (SIGCHLD
);
5822 #endif /* no WNOHANG */
5824 /* Find the process that signaled us, and record its status. */
5827 for (tail
= Vprocess_alist
; GC_CONSP (tail
); tail
= XCDR (tail
))
5829 proc
= XCDR (XCAR (tail
));
5830 p
= XPROCESS (proc
);
5831 if (GC_EQ (p
->childp
, Qt
) && XINT (p
->pid
) == pid
)
5836 /* Look for an asynchronous process whose pid hasn't been filled
5839 for (tail
= Vprocess_alist
; GC_CONSP (tail
); tail
= XCDR (tail
))
5841 proc
= XCDR (XCAR (tail
));
5842 p
= XPROCESS (proc
);
5843 if (GC_INTEGERP (p
->pid
) && XINT (p
->pid
) == -1)
5848 /* Change the status of the process that was found. */
5851 union { int i
; WAITTYPE wt
; } u
;
5852 int clear_desc_flag
= 0;
5854 XSETINT (p
->tick
, ++process_tick
);
5856 XSETINT (p
->raw_status_low
, u
.i
& 0xffff);
5857 XSETINT (p
->raw_status_high
, u
.i
>> 16);
5859 /* If process has terminated, stop waiting for its output. */
5860 if ((WIFSIGNALED (w
) || WIFEXITED (w
))
5861 && XINT (p
->infd
) >= 0)
5862 clear_desc_flag
= 1;
5864 /* We use clear_desc_flag to avoid a compiler bug in Microsoft C. */
5865 if (clear_desc_flag
)
5867 FD_CLR (XINT (p
->infd
), &input_wait_mask
);
5868 FD_CLR (XINT (p
->infd
), &non_keyboard_wait_mask
);
5871 /* Tell wait_reading_process_input that it needs to wake up and
5873 if (input_available_clear_time
)
5874 EMACS_SET_SECS_USECS (*input_available_clear_time
, 0, 0);
5877 /* There was no asynchronous process found for that id. Check
5878 if we have a synchronous process. */
5881 synch_process_alive
= 0;
5883 /* Report the status of the synchronous process. */
5885 synch_process_retcode
= WRETCODE (w
);
5886 else if (WIFSIGNALED (w
))
5888 int code
= WTERMSIG (w
);
5891 synchronize_system_messages_locale ();
5892 signame
= strsignal (code
);
5895 signame
= "unknown";
5897 synch_process_death
= signame
;
5900 /* Tell wait_reading_process_input that it needs to wake up and
5902 if (input_available_clear_time
)
5903 EMACS_SET_SECS_USECS (*input_available_clear_time
, 0, 0);
5906 /* On some systems, we must return right away.
5907 If any more processes want to signal us, we will
5909 Otherwise (on systems that have WNOHANG), loop around
5910 to use up all the processes that have something to tell us. */
5911 #if (defined WINDOWSNT \
5912 || (defined USG && !defined GNU_LINUX \
5913 && !(defined HPUX && defined WNOHANG)))
5914 #if defined (USG) && ! defined (POSIX_SIGNALS)
5915 signal (signo
, sigchld_handler
);
5919 #endif /* USG, but not HPUX with WNOHANG */
5925 exec_sentinel_unwind (data
)
5928 XPROCESS (XCAR (data
))->sentinel
= XCDR (data
);
5933 exec_sentinel_error_handler (error
)
5936 cmd_error_internal (error
, "error in process sentinel: ");
5938 update_echo_area ();
5939 Fsleep_for (make_number (2), Qnil
);
5944 exec_sentinel (proc
, reason
)
5945 Lisp_Object proc
, reason
;
5947 Lisp_Object sentinel
, obuffer
, odeactivate
, okeymap
;
5948 register struct Lisp_Process
*p
= XPROCESS (proc
);
5949 int count
= SPECPDL_INDEX ();
5950 int outer_running_asynch_code
= running_asynch_code
;
5951 int waiting
= waiting_for_user_input_p
;
5953 /* No need to gcpro these, because all we do with them later
5954 is test them for EQness, and none of them should be a string. */
5955 odeactivate
= Vdeactivate_mark
;
5956 XSETBUFFER (obuffer
, current_buffer
);
5957 okeymap
= current_buffer
->keymap
;
5959 sentinel
= p
->sentinel
;
5960 if (NILP (sentinel
))
5963 /* Zilch the sentinel while it's running, to avoid recursive invocations;
5964 assure that it gets restored no matter how the sentinel exits. */
5966 record_unwind_protect (exec_sentinel_unwind
, Fcons (proc
, sentinel
));
5967 /* Inhibit quit so that random quits don't screw up a running filter. */
5968 specbind (Qinhibit_quit
, Qt
);
5969 specbind (Qlast_nonmenu_event
, Qt
);
5971 /* In case we get recursively called,
5972 and we already saved the match data nonrecursively,
5973 save the same match data in safely recursive fashion. */
5974 if (outer_running_asynch_code
)
5977 tem
= Fmatch_data (Qnil
, Qnil
);
5978 restore_match_data ();
5979 record_unwind_protect (Fset_match_data
, Fmatch_data (Qnil
, Qnil
));
5980 Fset_match_data (tem
);
5983 /* For speed, if a search happens within this code,
5984 save the match data in a special nonrecursive fashion. */
5985 running_asynch_code
= 1;
5987 internal_condition_case_1 (read_process_output_call
,
5989 Fcons (proc
, Fcons (reason
, Qnil
))),
5990 !NILP (Vdebug_on_error
) ? Qnil
: Qerror
,
5991 exec_sentinel_error_handler
);
5993 /* If we saved the match data nonrecursively, restore it now. */
5994 restore_match_data ();
5995 running_asynch_code
= outer_running_asynch_code
;
5997 Vdeactivate_mark
= odeactivate
;
5999 /* Restore waiting_for_user_input_p as it was
6000 when we were called, in case the filter clobbered it. */
6001 waiting_for_user_input_p
= waiting
;
6004 if (! EQ (Fcurrent_buffer (), obuffer
)
6005 || ! EQ (current_buffer
->keymap
, okeymap
))
6007 /* But do it only if the caller is actually going to read events.
6008 Otherwise there's no need to make him wake up, and it could
6009 cause trouble (for example it would make Fsit_for return). */
6010 if (waiting_for_user_input_p
== -1)
6011 record_asynch_buffer_change ();
6013 unbind_to (count
, Qnil
);
6016 /* Report all recent events of a change in process status
6017 (either run the sentinel or output a message).
6018 This is usually done while Emacs is waiting for keyboard input
6019 but can be done at other times. */
6024 register Lisp_Object proc
, buffer
;
6025 Lisp_Object tail
, msg
;
6026 struct gcpro gcpro1
, gcpro2
;
6030 /* We need to gcpro tail; if read_process_output calls a filter
6031 which deletes a process and removes the cons to which tail points
6032 from Vprocess_alist, and then causes a GC, tail is an unprotected
6036 /* Set this now, so that if new processes are created by sentinels
6037 that we run, we get called again to handle their status changes. */
6038 update_tick
= process_tick
;
6040 for (tail
= Vprocess_alist
; !NILP (tail
); tail
= Fcdr (tail
))
6043 register struct Lisp_Process
*p
;
6045 proc
= Fcdr (Fcar (tail
));
6046 p
= XPROCESS (proc
);
6048 if (XINT (p
->tick
) != XINT (p
->update_tick
))
6050 XSETINT (p
->update_tick
, XINT (p
->tick
));
6052 /* If process is still active, read any output that remains. */
6053 while (! EQ (p
->filter
, Qt
)
6054 && ! EQ (p
->status
, Qconnect
)
6055 && ! EQ (p
->status
, Qlisten
)
6056 && ! EQ (p
->command
, Qt
) /* Network process not stopped. */
6057 && XINT (p
->infd
) >= 0
6058 && read_process_output (proc
, XINT (p
->infd
)) > 0);
6062 /* Get the text to use for the message. */
6063 if (!NILP (p
->raw_status_low
))
6065 msg
= status_message (p
->status
);
6067 /* If process is terminated, deactivate it or delete it. */
6069 if (CONSP (p
->status
))
6070 symbol
= XCAR (p
->status
);
6072 if (EQ (symbol
, Qsignal
) || EQ (symbol
, Qexit
)
6073 || EQ (symbol
, Qclosed
))
6075 if (delete_exited_processes
)
6076 remove_process (proc
);
6078 deactivate_process (proc
);
6081 /* The actions above may have further incremented p->tick.
6082 So set p->update_tick again
6083 so that an error in the sentinel will not cause
6084 this code to be run again. */
6085 XSETINT (p
->update_tick
, XINT (p
->tick
));
6086 /* Now output the message suitably. */
6087 if (!NILP (p
->sentinel
))
6088 exec_sentinel (proc
, msg
);
6089 /* Don't bother with a message in the buffer
6090 when a process becomes runnable. */
6091 else if (!EQ (symbol
, Qrun
) && !NILP (buffer
))
6093 Lisp_Object ro
, tem
;
6094 struct buffer
*old
= current_buffer
;
6095 int opoint
, opoint_byte
;
6096 int before
, before_byte
;
6098 ro
= XBUFFER (buffer
)->read_only
;
6100 /* Avoid error if buffer is deleted
6101 (probably that's why the process is dead, too) */
6102 if (NILP (XBUFFER (buffer
)->name
))
6104 Fset_buffer (buffer
);
6107 opoint_byte
= PT_BYTE
;
6108 /* Insert new output into buffer
6109 at the current end-of-output marker,
6110 thus preserving logical ordering of input and output. */
6111 if (XMARKER (p
->mark
)->buffer
)
6112 Fgoto_char (p
->mark
);
6114 SET_PT_BOTH (ZV
, ZV_BYTE
);
6117 before_byte
= PT_BYTE
;
6119 tem
= current_buffer
->read_only
;
6120 current_buffer
->read_only
= Qnil
;
6121 insert_string ("\nProcess ");
6122 Finsert (1, &p
->name
);
6123 insert_string (" ");
6125 current_buffer
->read_only
= tem
;
6126 set_marker_both (p
->mark
, p
->buffer
, PT
, PT_BYTE
);
6128 if (opoint
>= before
)
6129 SET_PT_BOTH (opoint
+ (PT
- before
),
6130 opoint_byte
+ (PT_BYTE
- before_byte
));
6132 SET_PT_BOTH (opoint
, opoint_byte
);
6134 set_buffer_internal (old
);
6139 update_mode_lines
++; /* in case buffers use %s in mode-line-format */
6140 redisplay_preserve_echo_area (13);
6146 DEFUN ("set-process-coding-system", Fset_process_coding_system
,
6147 Sset_process_coding_system
, 1, 3, 0,
6148 doc
: /* Set coding systems of PROCESS to DECODING and ENCODING.
6149 DECODING will be used to decode subprocess output and ENCODING to
6150 encode subprocess input. */)
6151 (proc
, decoding
, encoding
)
6152 register Lisp_Object proc
, decoding
, encoding
;
6154 register struct Lisp_Process
*p
;
6156 CHECK_PROCESS (proc
);
6157 p
= XPROCESS (proc
);
6158 if (XINT (p
->infd
) < 0)
6159 error ("Input file descriptor of %s closed", SDATA (p
->name
));
6160 if (XINT (p
->outfd
) < 0)
6161 error ("Output file descriptor of %s closed", SDATA (p
->name
));
6162 Fcheck_coding_system (decoding
);
6163 Fcheck_coding_system (encoding
);
6165 p
->decode_coding_system
= decoding
;
6166 p
->encode_coding_system
= encoding
;
6167 setup_process_coding_systems (proc
);
6172 DEFUN ("process-coding-system",
6173 Fprocess_coding_system
, Sprocess_coding_system
, 1, 1, 0,
6174 doc
: /* Return a cons of coding systems for decoding and encoding of PROCESS. */)
6176 register Lisp_Object proc
;
6178 CHECK_PROCESS (proc
);
6179 return Fcons (XPROCESS (proc
)->decode_coding_system
,
6180 XPROCESS (proc
)->encode_coding_system
);
6183 DEFUN ("set-process-filter-multibyte", Fset_process_filter_multibyte
,
6184 Sset_process_filter_multibyte
, 2, 2, 0,
6185 doc
: /* Set multibyteness of the strings given to PROCESS's filter.
6186 If FLAG is non-nil, the filter is given multibyte strings.
6187 If FLAG is nil, the filter is given unibyte strings. In this case,
6188 all character code conversion except for end-of-line conversion is
6191 Lisp_Object proc
, flag
;
6193 register struct Lisp_Process
*p
;
6195 CHECK_PROCESS (proc
);
6196 p
= XPROCESS (proc
);
6197 p
->filter_multibyte
= flag
;
6198 setup_process_coding_systems (proc
);
6203 DEFUN ("process-filter-multibyte-p", Fprocess_filter_multibyte_p
,
6204 Sprocess_filter_multibyte_p
, 1, 1, 0,
6205 doc
: /* Return t if a multibyte string is given to PROCESS's filter.*/)
6209 register struct Lisp_Process
*p
;
6211 CHECK_PROCESS (proc
);
6212 p
= XPROCESS (proc
);
6214 return (NILP (p
->filter_multibyte
) ? Qnil
: Qt
);
6219 /* The first time this is called, assume keyboard input comes from DESC
6220 instead of from where we used to expect it.
6221 Subsequent calls mean assume input keyboard can come from DESC
6222 in addition to other places. */
6224 static int add_keyboard_wait_descriptor_called_flag
;
6227 add_keyboard_wait_descriptor (desc
)
6230 if (! add_keyboard_wait_descriptor_called_flag
)
6231 FD_CLR (0, &input_wait_mask
);
6232 add_keyboard_wait_descriptor_called_flag
= 1;
6233 FD_SET (desc
, &input_wait_mask
);
6234 FD_SET (desc
, &non_process_wait_mask
);
6235 if (desc
> max_keyboard_desc
)
6236 max_keyboard_desc
= desc
;
6239 /* From now on, do not expect DESC to give keyboard input. */
6242 delete_keyboard_wait_descriptor (desc
)
6246 int lim
= max_keyboard_desc
;
6248 FD_CLR (desc
, &input_wait_mask
);
6249 FD_CLR (desc
, &non_process_wait_mask
);
6251 if (desc
== max_keyboard_desc
)
6252 for (fd
= 0; fd
< lim
; fd
++)
6253 if (FD_ISSET (fd
, &input_wait_mask
)
6254 && !FD_ISSET (fd
, &non_keyboard_wait_mask
))
6255 max_keyboard_desc
= fd
;
6258 /* Return nonzero if *MASK has a bit set
6259 that corresponds to one of the keyboard input descriptors. */
6262 keyboard_bit_set (mask
)
6267 for (fd
= 0; fd
<= max_keyboard_desc
; fd
++)
6268 if (FD_ISSET (fd
, mask
) && FD_ISSET (fd
, &input_wait_mask
)
6269 && !FD_ISSET (fd
, &non_keyboard_wait_mask
))
6282 if (! noninteractive
|| initialized
)
6284 signal (SIGCHLD
, sigchld_handler
);
6287 FD_ZERO (&input_wait_mask
);
6288 FD_ZERO (&non_keyboard_wait_mask
);
6289 FD_ZERO (&non_process_wait_mask
);
6290 max_process_desc
= 0;
6292 FD_SET (0, &input_wait_mask
);
6294 Vprocess_alist
= Qnil
;
6295 for (i
= 0; i
< MAXDESC
; i
++)
6297 chan_process
[i
] = Qnil
;
6298 proc_buffered_char
[i
] = -1;
6300 bzero (proc_decode_coding_system
, sizeof proc_decode_coding_system
);
6301 bzero (proc_encode_coding_system
, sizeof proc_encode_coding_system
);
6302 #ifdef DATAGRAM_SOCKETS
6303 bzero (datagram_address
, sizeof datagram_address
);
6308 Lisp_Object subfeatures
= Qnil
;
6309 #define ADD_SUBFEATURE(key, val) \
6310 subfeatures = Fcons (Fcons (key, Fcons (val, Qnil)), subfeatures)
6312 #ifdef NON_BLOCKING_CONNECT
6313 ADD_SUBFEATURE (QCnowait
, Qt
);
6315 #ifdef DATAGRAM_SOCKETS
6316 ADD_SUBFEATURE (QCtype
, Qdatagram
);
6318 #ifdef HAVE_LOCAL_SOCKETS
6319 ADD_SUBFEATURE (QCfamily
, Qlocal
);
6321 #ifdef HAVE_GETSOCKNAME
6322 ADD_SUBFEATURE (QCservice
, Qt
);
6324 #if !defined(TERM) && (defined(O_NONBLOCK) || defined(O_NDELAY))
6325 ADD_SUBFEATURE (QCserver
, Qt
);
6327 #ifdef SO_BINDTODEVICE
6328 ADD_SUBFEATURE (QCoptions
, intern ("bindtodevice"));
6331 ADD_SUBFEATURE (QCoptions
, intern ("broadcast"));
6334 ADD_SUBFEATURE (QCoptions
, intern ("dontroute"));
6337 ADD_SUBFEATURE (QCoptions
, intern ("keepalive"));
6340 ADD_SUBFEATURE (QCoptions
, intern ("linger"));
6343 ADD_SUBFEATURE (QCoptions
, intern ("oobinline"));
6346 ADD_SUBFEATURE (QCoptions
, intern ("priority"));
6349 ADD_SUBFEATURE (QCoptions
, intern ("reuseaddr"));
6351 Fprovide (intern ("make-network-process"), subfeatures
);
6353 #endif /* HAVE_SOCKETS */
6359 Qprocessp
= intern ("processp");
6360 staticpro (&Qprocessp
);
6361 Qrun
= intern ("run");
6363 Qstop
= intern ("stop");
6365 Qsignal
= intern ("signal");
6366 staticpro (&Qsignal
);
6368 /* Qexit is already staticpro'd by syms_of_eval; don't staticpro it
6371 Qexit = intern ("exit");
6372 staticpro (&Qexit); */
6374 Qopen
= intern ("open");
6376 Qclosed
= intern ("closed");
6377 staticpro (&Qclosed
);
6378 Qconnect
= intern ("connect");
6379 staticpro (&Qconnect
);
6380 Qfailed
= intern ("failed");
6381 staticpro (&Qfailed
);
6382 Qlisten
= intern ("listen");
6383 staticpro (&Qlisten
);
6384 Qlocal
= intern ("local");
6385 staticpro (&Qlocal
);
6386 Qdatagram
= intern ("datagram");
6387 staticpro (&Qdatagram
);
6389 QCname
= intern (":name");
6390 staticpro (&QCname
);
6391 QCbuffer
= intern (":buffer");
6392 staticpro (&QCbuffer
);
6393 QChost
= intern (":host");
6394 staticpro (&QChost
);
6395 QCservice
= intern (":service");
6396 staticpro (&QCservice
);
6397 QCtype
= intern (":type");
6398 staticpro (&QCtype
);
6399 QClocal
= intern (":local");
6400 staticpro (&QClocal
);
6401 QCremote
= intern (":remote");
6402 staticpro (&QCremote
);
6403 QCcoding
= intern (":coding");
6404 staticpro (&QCcoding
);
6405 QCserver
= intern (":server");
6406 staticpro (&QCserver
);
6407 QCnowait
= intern (":nowait");
6408 staticpro (&QCnowait
);
6409 QCsentinel
= intern (":sentinel");
6410 staticpro (&QCsentinel
);
6411 QClog
= intern (":log");
6413 QCnoquery
= intern (":noquery");
6414 staticpro (&QCnoquery
);
6415 QCstop
= intern (":stop");
6416 staticpro (&QCstop
);
6417 QCoptions
= intern (":options");
6418 staticpro (&QCoptions
);
6419 QCplist
= intern (":plist");
6420 staticpro (&QCplist
);
6421 QCfilter_multibyte
= intern (":filter-multibyte");
6422 staticpro (&QCfilter_multibyte
);
6424 Qlast_nonmenu_event
= intern ("last-nonmenu-event");
6425 staticpro (&Qlast_nonmenu_event
);
6427 staticpro (&Vprocess_alist
);
6429 DEFVAR_BOOL ("delete-exited-processes", &delete_exited_processes
,
6430 doc
: /* *Non-nil means delete processes immediately when they exit.
6431 nil means don't delete them until `list-processes' is run. */);
6433 delete_exited_processes
= 1;
6435 DEFVAR_LISP ("process-connection-type", &Vprocess_connection_type
,
6436 doc
: /* Control type of device used to communicate with subprocesses.
6437 Values are nil to use a pipe, or t or `pty' to use a pty.
6438 The value has no effect if the system has no ptys or if all ptys are busy:
6439 then a pipe is used in any case.
6440 The value takes effect when `start-process' is called. */);
6441 Vprocess_connection_type
= Qt
;
6443 defsubr (&Sprocessp
);
6444 defsubr (&Sget_process
);
6445 defsubr (&Sget_buffer_process
);
6446 defsubr (&Sdelete_process
);
6447 defsubr (&Sprocess_status
);
6448 defsubr (&Sprocess_exit_status
);
6449 defsubr (&Sprocess_id
);
6450 defsubr (&Sprocess_name
);
6451 defsubr (&Sprocess_tty_name
);
6452 defsubr (&Sprocess_command
);
6453 defsubr (&Sset_process_buffer
);
6454 defsubr (&Sprocess_buffer
);
6455 defsubr (&Sprocess_mark
);
6456 defsubr (&Sset_process_filter
);
6457 defsubr (&Sprocess_filter
);
6458 defsubr (&Sset_process_sentinel
);
6459 defsubr (&Sprocess_sentinel
);
6460 defsubr (&Sset_process_window_size
);
6461 defsubr (&Sset_process_inherit_coding_system_flag
);
6462 defsubr (&Sprocess_inherit_coding_system_flag
);
6463 defsubr (&Sset_process_query_on_exit_flag
);
6464 defsubr (&Sprocess_query_on_exit_flag
);
6465 defsubr (&Sprocess_contact
);
6466 defsubr (&Sprocess_plist
);
6467 defsubr (&Sset_process_plist
);
6468 defsubr (&Slist_processes
);
6469 defsubr (&Sprocess_list
);
6470 defsubr (&Sstart_process
);
6472 defsubr (&Sset_network_process_options
);
6473 defsubr (&Smake_network_process
);
6474 defsubr (&Sformat_network_address
);
6475 #endif /* HAVE_SOCKETS */
6476 #ifdef DATAGRAM_SOCKETS
6477 defsubr (&Sprocess_datagram_address
);
6478 defsubr (&Sset_process_datagram_address
);
6480 defsubr (&Saccept_process_output
);
6481 defsubr (&Sprocess_send_region
);
6482 defsubr (&Sprocess_send_string
);
6483 defsubr (&Sinterrupt_process
);
6484 defsubr (&Skill_process
);
6485 defsubr (&Squit_process
);
6486 defsubr (&Sstop_process
);
6487 defsubr (&Scontinue_process
);
6488 defsubr (&Sprocess_running_child_p
);
6489 defsubr (&Sprocess_send_eof
);
6490 defsubr (&Ssignal_process
);
6491 defsubr (&Swaiting_for_user_input_p
);
6492 /* defsubr (&Sprocess_connection); */
6493 defsubr (&Sset_process_coding_system
);
6494 defsubr (&Sprocess_coding_system
);
6495 defsubr (&Sset_process_filter_multibyte
);
6496 defsubr (&Sprocess_filter_multibyte_p
);
6500 #else /* not subprocesses */
6502 #include <sys/types.h>
6506 #include "systime.h"
6507 #include "charset.h"
6509 #include "termopts.h"
6510 #include "sysselect.h"
6512 extern int frame_garbaged
;
6514 extern EMACS_TIME
timer_check ();
6515 extern int timers_run
;
6519 /* As described above, except assuming that there are no subprocesses:
6521 Wait for timeout to elapse and/or keyboard input to be available.
6524 timeout in seconds, or
6525 zero for no limit, or
6526 -1 means gobble data immediately available but don't wait for any.
6528 read_kbd is a Lisp_Object:
6529 0 to ignore keyboard input, or
6530 1 to return when input is available, or
6531 -1 means caller will actually read the input, so don't throw to
6533 a cons cell, meaning wait until its car is non-nil
6534 (and gobble terminal input into the buffer if any arrives), or
6535 We know that read_kbd will never be a Lisp_Process, since
6536 `subprocesses' isn't defined.
6538 do_display != 0 means redisplay should be done to show subprocess
6539 output that arrives.
6541 Return true iff we received input from any process. */
6544 wait_reading_process_input (time_limit
, microsecs
, read_kbd
, do_display
)
6545 int time_limit
, microsecs
;
6546 Lisp_Object read_kbd
;
6550 EMACS_TIME end_time
, timeout
;
6551 SELECT_TYPE waitchannels
;
6553 /* Either nil or a cons cell, the car of which is of interest and
6554 may be changed outside of this routine. */
6555 Lisp_Object wait_for_cell
;
6557 wait_for_cell
= Qnil
;
6559 /* If waiting for non-nil in a cell, record where. */
6560 if (CONSP (read_kbd
))
6562 wait_for_cell
= read_kbd
;
6563 XSETFASTINT (read_kbd
, 0);
6566 /* What does time_limit really mean? */
6567 if (time_limit
|| microsecs
)
6569 EMACS_GET_TIME (end_time
);
6570 EMACS_SET_SECS_USECS (timeout
, time_limit
, microsecs
);
6571 EMACS_ADD_TIME (end_time
, end_time
, timeout
);
6574 /* Turn off periodic alarms (in case they are in use)
6575 and then turn off any other atimers,
6576 because the select emulator uses alarms. */
6578 turn_on_atimers (0);
6582 int timeout_reduced_for_timers
= 0;
6584 /* If calling from keyboard input, do not quit
6585 since we want to return C-g as an input character.
6586 Otherwise, do pending quit if requested. */
6587 if (XINT (read_kbd
) >= 0)
6590 /* Exit now if the cell we're waiting for became non-nil. */
6591 if (! NILP (wait_for_cell
) && ! NILP (XCAR (wait_for_cell
)))
6594 /* Compute time from now till when time limit is up */
6595 /* Exit if already run out */
6596 if (time_limit
== -1)
6598 /* -1 specified for timeout means
6599 gobble output available now
6600 but don't wait at all. */
6602 EMACS_SET_SECS_USECS (timeout
, 0, 0);
6604 else if (time_limit
|| microsecs
)
6606 EMACS_GET_TIME (timeout
);
6607 EMACS_SUB_TIME (timeout
, end_time
, timeout
);
6608 if (EMACS_TIME_NEG_P (timeout
))
6613 EMACS_SET_SECS_USECS (timeout
, 100000, 0);
6616 /* If our caller will not immediately handle keyboard events,
6617 run timer events directly.
6618 (Callers that will immediately read keyboard events
6619 call timer_delay on their own.) */
6620 if (NILP (wait_for_cell
))
6622 EMACS_TIME timer_delay
;
6626 int old_timers_run
= timers_run
;
6627 timer_delay
= timer_check (1);
6628 if (timers_run
!= old_timers_run
&& do_display
)
6629 /* We must retry, since a timer may have requeued itself
6630 and that could alter the time delay. */
6631 redisplay_preserve_echo_area (14);
6635 while (!detect_input_pending ());
6637 /* If there is unread keyboard input, also return. */
6638 if (XINT (read_kbd
) != 0
6639 && requeued_events_pending_p ())
6642 if (! EMACS_TIME_NEG_P (timer_delay
) && time_limit
!= -1)
6644 EMACS_TIME difference
;
6645 EMACS_SUB_TIME (difference
, timer_delay
, timeout
);
6646 if (EMACS_TIME_NEG_P (difference
))
6648 timeout
= timer_delay
;
6649 timeout_reduced_for_timers
= 1;
6654 /* Cause C-g and alarm signals to take immediate action,
6655 and cause input available signals to zero out timeout. */
6656 if (XINT (read_kbd
) < 0)
6657 set_waiting_for_input (&timeout
);
6659 /* Wait till there is something to do. */
6661 if (! XINT (read_kbd
) && NILP (wait_for_cell
))
6662 FD_ZERO (&waitchannels
);
6664 FD_SET (0, &waitchannels
);
6666 /* If a frame has been newly mapped and needs updating,
6667 reprocess its display stuff. */
6668 if (frame_garbaged
&& do_display
)
6670 clear_waiting_for_input ();
6671 redisplay_preserve_echo_area (15);
6672 if (XINT (read_kbd
) < 0)
6673 set_waiting_for_input (&timeout
);
6676 if (XINT (read_kbd
) && detect_input_pending ())
6679 FD_ZERO (&waitchannels
);
6682 nfds
= select (1, &waitchannels
, (SELECT_TYPE
*)0, (SELECT_TYPE
*)0,
6687 /* Make C-g and alarm signals set flags again */
6688 clear_waiting_for_input ();
6690 /* If we woke up due to SIGWINCH, actually change size now. */
6691 do_pending_window_change (0);
6693 if (time_limit
&& nfds
== 0 && ! timeout_reduced_for_timers
)
6694 /* We waited the full specified time, so return now. */
6699 /* If the system call was interrupted, then go around the
6701 if (xerrno
== EINTR
)
6702 FD_ZERO (&waitchannels
);
6704 error ("select error: %s", emacs_strerror (xerrno
));
6707 else if (nfds
> 0 && (waitchannels
& 1) && interrupt_input
)
6708 /* System sometimes fails to deliver SIGIO. */
6709 kill (getpid (), SIGIO
);
6712 if (XINT (read_kbd
) && interrupt_input
&& (waitchannels
& 1))
6713 kill (getpid (), SIGIO
);
6716 /* Check for keyboard input */
6718 if ((XINT (read_kbd
) != 0)
6719 && detect_input_pending_run_timers (do_display
))
6721 swallow_events (do_display
);
6722 if (detect_input_pending_run_timers (do_display
))
6726 /* If there is unread keyboard input, also return. */
6727 if (XINT (read_kbd
) != 0
6728 && requeued_events_pending_p ())
6731 /* If wait_for_cell. check for keyboard input
6732 but don't run any timers.
6733 ??? (It seems wrong to me to check for keyboard
6734 input at all when wait_for_cell, but the code
6735 has been this way since July 1994.
6736 Try changing this after version 19.31.) */
6737 if (! NILP (wait_for_cell
)
6738 && detect_input_pending ())
6740 swallow_events (do_display
);
6741 if (detect_input_pending ())
6745 /* Exit now if the cell we're waiting for became non-nil. */
6746 if (! NILP (wait_for_cell
) && ! NILP (XCAR (wait_for_cell
)))
6756 /* Don't confuse make-docfile by having two doc strings for this function.
6757 make-docfile does not pay attention to #if, for good reason! */
6758 DEFUN ("get-buffer-process", Fget_buffer_process
, Sget_buffer_process
, 1, 1, 0,
6761 register Lisp_Object name
;
6766 /* Don't confuse make-docfile by having two doc strings for this function.
6767 make-docfile does not pay attention to #if, for good reason! */
6768 DEFUN ("process-inherit-coding-system-flag",
6769 Fprocess_inherit_coding_system_flag
, Sprocess_inherit_coding_system_flag
,
6773 register Lisp_Object process
;
6775 /* Ignore the argument and return the value of
6776 inherit-process-coding-system. */
6777 return inherit_process_coding_system
? Qt
: Qnil
;
6780 /* Kill all processes associated with `buffer'.
6781 If `buffer' is nil, kill all processes.
6782 Since we have no subprocesses, this does nothing. */
6785 kill_buffer_processes (buffer
)
6798 QCtype
= intern (":type");
6799 staticpro (&QCtype
);
6801 defsubr (&Sget_buffer_process
);
6802 defsubr (&Sprocess_inherit_coding_system_flag
);
6806 #endif /* not subprocesses */