1 /* Asynchronous subprocess control for GNU Emacs.
2 Copyright (C) 1985, 86, 87, 88, 93, 94, 95, 96, 98, 1999,
3 2001, 2002, 2003 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. */
468 for (c
= FIRST_PTY_LETTER
; c
<= 'z'; c
++)
469 for (i
= 0; i
< 16; i
++)
472 #ifdef PTY_NAME_SPRINTF
475 sprintf (pty_name
, "/dev/pty%c%x", c
, i
);
476 #endif /* no PTY_NAME_SPRINTF */
480 #else /* no PTY_OPEN */
484 /* Unusual IRIS code */
485 *ptyv
= emacs_open ("/dev/ptc", O_RDWR
| O_NDELAY
, 0);
488 if (fstat (fd
, &stb
) < 0)
490 # else /* not IRIS */
491 { /* Some systems name their pseudoterminals so that there are gaps in
492 the usual sequence - for example, on HP9000/S700 systems, there
493 are no pseudoterminals with names ending in 'f'. So we wait for
494 three failures in a row before deciding that we've reached the
496 int failed_count
= 0;
498 if (stat (pty_name
, &stb
) < 0)
501 if (failed_count
>= 3)
508 fd
= emacs_open (pty_name
, O_RDWR
| O_NONBLOCK
, 0);
510 fd
= emacs_open (pty_name
, O_RDWR
| O_NDELAY
, 0);
512 # endif /* not IRIS */
514 #endif /* no PTY_OPEN */
518 /* check to make certain that both sides are available
519 this avoids a nasty yet stupid bug in rlogins */
520 #ifdef PTY_TTY_NAME_SPRINTF
523 sprintf (pty_name
, "/dev/tty%c%x", c
, i
);
524 #endif /* no PTY_TTY_NAME_SPRINTF */
526 if (access (pty_name
, 6) != 0)
529 # if !defined(IRIS) && !defined(__sgi)
535 #endif /* not UNIPLUS */
542 #endif /* HAVE_PTYS */
548 register Lisp_Object val
, tem
, name1
;
549 register struct Lisp_Process
*p
;
553 p
= allocate_process ();
555 XSETINT (p
->infd
, -1);
556 XSETINT (p
->outfd
, -1);
557 XSETFASTINT (p
->pid
, 0);
558 XSETFASTINT (p
->tick
, 0);
559 XSETFASTINT (p
->update_tick
, 0);
560 p
->raw_status_low
= Qnil
;
561 p
->raw_status_high
= Qnil
;
563 p
->mark
= Fmake_marker ();
565 /* If name is already in use, modify it until it is unused. */
570 tem
= Fget_process (name1
);
571 if (NILP (tem
)) break;
572 sprintf (suffix
, "<%d>", i
);
573 name1
= concat2 (name
, build_string (suffix
));
577 XSETPROCESS (val
, p
);
578 Vprocess_alist
= Fcons (Fcons (name
, val
), Vprocess_alist
);
583 remove_process (proc
)
584 register Lisp_Object proc
;
586 register Lisp_Object pair
;
588 pair
= Frassq (proc
, Vprocess_alist
);
589 Vprocess_alist
= Fdelq (pair
, Vprocess_alist
);
591 deactivate_process (proc
);
594 /* Setup coding systems of PROCESS. */
597 setup_process_coding_systems (process
)
600 struct Lisp_Process
*p
= XPROCESS (process
);
601 int inch
= XINT (p
->infd
);
602 int outch
= XINT (p
->outfd
);
604 if (inch
< 0 || outch
< 0)
607 if (!proc_decode_coding_system
[inch
])
608 proc_decode_coding_system
[inch
]
609 = (struct coding_system
*) xmalloc (sizeof (struct coding_system
));
610 setup_coding_system (p
->decode_coding_system
,
611 proc_decode_coding_system
[inch
]);
612 if (! NILP (p
->filter
))
614 if (NILP (p
->filter_multibyte
))
615 setup_raw_text_coding_system (proc_decode_coding_system
[inch
]);
617 else if (BUFFERP (p
->buffer
))
619 if (NILP (XBUFFER (p
->buffer
)->enable_multibyte_characters
))
620 setup_raw_text_coding_system (proc_decode_coding_system
[inch
]);
623 if (!proc_encode_coding_system
[outch
])
624 proc_encode_coding_system
[outch
]
625 = (struct coding_system
*) xmalloc (sizeof (struct coding_system
));
626 setup_coding_system (p
->encode_coding_system
,
627 proc_encode_coding_system
[outch
]);
630 DEFUN ("processp", Fprocessp
, Sprocessp
, 1, 1, 0,
631 doc
: /* Return t if OBJECT is a process. */)
635 return PROCESSP (object
) ? Qt
: Qnil
;
638 DEFUN ("get-process", Fget_process
, Sget_process
, 1, 1, 0,
639 doc
: /* Return the process named NAME, or nil if there is none. */)
641 register Lisp_Object name
;
646 return Fcdr (Fassoc (name
, Vprocess_alist
));
649 DEFUN ("get-buffer-process", Fget_buffer_process
, Sget_buffer_process
, 1, 1, 0,
650 doc
: /* Return the (or a) process associated with BUFFER.
651 BUFFER may be a buffer or the name of one. */)
653 register Lisp_Object buffer
;
655 register Lisp_Object buf
, tail
, proc
;
657 if (NILP (buffer
)) return Qnil
;
658 buf
= Fget_buffer (buffer
);
659 if (NILP (buf
)) return Qnil
;
661 for (tail
= Vprocess_alist
; !NILP (tail
); tail
= Fcdr (tail
))
663 proc
= Fcdr (Fcar (tail
));
664 if (PROCESSP (proc
) && EQ (XPROCESS (proc
)->buffer
, buf
))
670 /* This is how commands for the user decode process arguments. It
671 accepts a process, a process name, a buffer, a buffer name, or nil.
672 Buffers denote the first process in the buffer, and nil denotes the
677 register Lisp_Object name
;
679 register Lisp_Object proc
, obj
;
682 obj
= Fget_process (name
);
684 obj
= Fget_buffer (name
);
686 error ("Process %s does not exist", SDATA (name
));
688 else if (NILP (name
))
689 obj
= Fcurrent_buffer ();
693 /* Now obj should be either a buffer object or a process object.
697 proc
= Fget_buffer_process (obj
);
699 error ("Buffer %s has no process", SDATA (XBUFFER (obj
)->name
));
709 DEFUN ("delete-process", Fdelete_process
, Sdelete_process
, 1, 1, 0,
710 doc
: /* Delete PROCESS: kill it and forget about it immediately.
711 PROCESS may be a process, a buffer, the name of a process or buffer, or
712 nil, indicating the current buffer's process. */)
714 register Lisp_Object process
;
716 process
= get_process (process
);
717 XPROCESS (process
)->raw_status_low
= Qnil
;
718 XPROCESS (process
)->raw_status_high
= Qnil
;
719 if (NETCONN_P (process
))
721 XPROCESS (process
)->status
= Fcons (Qexit
, Fcons (make_number (0), Qnil
));
722 XSETINT (XPROCESS (process
)->tick
, ++process_tick
);
724 else if (XINT (XPROCESS (process
)->infd
) >= 0)
726 Fkill_process (process
, Qnil
);
727 /* Do this now, since remove_process will make sigchld_handler do nothing. */
728 XPROCESS (process
)->status
729 = Fcons (Qsignal
, Fcons (make_number (SIGKILL
), Qnil
));
730 XSETINT (XPROCESS (process
)->tick
, ++process_tick
);
733 remove_process (process
);
737 DEFUN ("process-status", Fprocess_status
, Sprocess_status
, 1, 1, 0,
738 doc
: /* Return the status of PROCESS.
739 The returned value is one of the following symbols:
740 run -- for a process that is running.
741 stop -- for a process stopped but continuable.
742 exit -- for a process that has exited.
743 signal -- for a process that has got a fatal signal.
744 open -- for a network stream connection that is open.
745 listen -- for a network stream server that is listening.
746 closed -- for a network stream connection that is closed.
747 connect -- when waiting for a non-blocking connection to complete.
748 failed -- when a non-blocking connection has failed.
749 nil -- if arg is a process name and no such process exists.
750 PROCESS may be a process, a buffer, the name of a process, or
751 nil, indicating the current buffer's process. */)
753 register Lisp_Object process
;
755 register struct Lisp_Process
*p
;
756 register Lisp_Object status
;
758 if (STRINGP (process
))
759 process
= Fget_process (process
);
761 process
= get_process (process
);
766 p
= XPROCESS (process
);
767 if (!NILP (p
->raw_status_low
))
771 status
= XCAR (status
);
774 if (EQ (status
, Qexit
))
776 else if (EQ (p
->command
, Qt
))
778 else if (EQ (status
, Qrun
))
784 DEFUN ("process-exit-status", Fprocess_exit_status
, Sprocess_exit_status
,
786 doc
: /* Return the exit status of PROCESS or the signal number that killed it.
787 If PROCESS has not yet exited or died, return 0. */)
789 register Lisp_Object process
;
791 CHECK_PROCESS (process
);
792 if (!NILP (XPROCESS (process
)->raw_status_low
))
793 update_status (XPROCESS (process
));
794 if (CONSP (XPROCESS (process
)->status
))
795 return XCAR (XCDR (XPROCESS (process
)->status
));
796 return make_number (0);
799 DEFUN ("process-id", Fprocess_id
, Sprocess_id
, 1, 1, 0,
800 doc
: /* Return the process id of PROCESS.
801 This is the pid of the Unix process which PROCESS uses or talks to.
802 For a network connection, this value is nil. */)
804 register Lisp_Object process
;
806 CHECK_PROCESS (process
);
807 return XPROCESS (process
)->pid
;
810 DEFUN ("process-name", Fprocess_name
, Sprocess_name
, 1, 1, 0,
811 doc
: /* Return the name of PROCESS, as a string.
812 This is the name of the program invoked in PROCESS,
813 possibly modified to make it unique among process names. */)
815 register Lisp_Object process
;
817 CHECK_PROCESS (process
);
818 return XPROCESS (process
)->name
;
821 DEFUN ("process-command", Fprocess_command
, Sprocess_command
, 1, 1, 0,
822 doc
: /* Return the command that was executed to start PROCESS.
823 This is a list of strings, the first string being the program executed
824 and the rest of the strings being the arguments given to it.
825 For a non-child channel, this is nil. */)
827 register Lisp_Object process
;
829 CHECK_PROCESS (process
);
830 return XPROCESS (process
)->command
;
833 DEFUN ("process-tty-name", Fprocess_tty_name
, Sprocess_tty_name
, 1, 1, 0,
834 doc
: /* Return the name of the terminal PROCESS uses, or nil if none.
835 This is the terminal that the process itself reads and writes on,
836 not the name of the pty that Emacs uses to talk with that terminal. */)
838 register Lisp_Object process
;
840 CHECK_PROCESS (process
);
841 return XPROCESS (process
)->tty_name
;
844 DEFUN ("set-process-buffer", Fset_process_buffer
, Sset_process_buffer
,
846 doc
: /* Set buffer associated with PROCESS to BUFFER (a buffer, or nil). */)
848 register Lisp_Object process
, buffer
;
850 struct Lisp_Process
*p
;
852 CHECK_PROCESS (process
);
854 CHECK_BUFFER (buffer
);
855 p
= XPROCESS (process
);
858 p
->childp
= Fplist_put (p
->childp
, QCbuffer
, buffer
);
859 setup_process_coding_systems (process
);
863 DEFUN ("process-buffer", Fprocess_buffer
, Sprocess_buffer
,
865 doc
: /* Return the buffer PROCESS is associated with.
866 Output from PROCESS is inserted in this buffer unless PROCESS has a filter. */)
868 register Lisp_Object process
;
870 CHECK_PROCESS (process
);
871 return XPROCESS (process
)->buffer
;
874 DEFUN ("process-mark", Fprocess_mark
, Sprocess_mark
,
876 doc
: /* Return the marker for the end of the last output from PROCESS. */)
878 register Lisp_Object process
;
880 CHECK_PROCESS (process
);
881 return XPROCESS (process
)->mark
;
884 DEFUN ("set-process-filter", Fset_process_filter
, Sset_process_filter
,
886 doc
: /* Give PROCESS the filter function FILTER; nil means no filter.
887 t means stop accepting output from the process.
889 When a process has a filter, its buffer is not used for output.
890 Instead, each time it does output, the entire string of output is
891 passed to the filter.
893 The filter gets two arguments: the process and the string of output.
894 The string argument is normally a multibyte string, except:
895 - if the process' input coding system is no-conversion or raw-text,
896 it is a unibyte string (the non-converted input), or else
897 - if `default-enable-multibyte-characters' is nil, it is a unibyte
898 string (the result of converting the decoded input multibyte
899 string to unibyte with `string-make-unibyte'). */)
901 register Lisp_Object process
, filter
;
903 struct Lisp_Process
*p
;
905 CHECK_PROCESS (process
);
906 p
= XPROCESS (process
);
908 /* Don't signal an error if the process' input file descriptor
909 is closed. This could make debugging Lisp more difficult,
910 for example when doing something like
912 (setq process (start-process ...))
914 (set-process-filter process ...) */
916 if (XINT (p
->infd
) >= 0)
918 if (EQ (filter
, Qt
) && !EQ (p
->status
, Qlisten
))
920 FD_CLR (XINT (p
->infd
), &input_wait_mask
);
921 FD_CLR (XINT (p
->infd
), &non_keyboard_wait_mask
);
923 else if (EQ (p
->filter
, Qt
)
924 && !EQ (p
->command
, Qt
)) /* Network process not stopped. */
926 FD_SET (XINT (p
->infd
), &input_wait_mask
);
927 FD_SET (XINT (p
->infd
), &non_keyboard_wait_mask
);
933 p
->childp
= Fplist_put (p
->childp
, QCfilter
, filter
);
934 setup_process_coding_systems (process
);
938 DEFUN ("process-filter", Fprocess_filter
, Sprocess_filter
,
940 doc
: /* Returns the filter function of PROCESS; nil if none.
941 See `set-process-filter' for more info on filter functions. */)
943 register Lisp_Object process
;
945 CHECK_PROCESS (process
);
946 return XPROCESS (process
)->filter
;
949 DEFUN ("set-process-sentinel", Fset_process_sentinel
, Sset_process_sentinel
,
951 doc
: /* Give PROCESS the sentinel SENTINEL; nil for none.
952 The sentinel is called as a function when the process changes state.
953 It gets two arguments: the process, and a string describing the change. */)
955 register Lisp_Object process
, sentinel
;
957 CHECK_PROCESS (process
);
958 XPROCESS (process
)->sentinel
= sentinel
;
962 DEFUN ("process-sentinel", Fprocess_sentinel
, Sprocess_sentinel
,
964 doc
: /* Return the sentinel of PROCESS; nil if none.
965 See `set-process-sentinel' for more info on sentinels. */)
967 register Lisp_Object process
;
969 CHECK_PROCESS (process
);
970 return XPROCESS (process
)->sentinel
;
973 DEFUN ("set-process-window-size", Fset_process_window_size
,
974 Sset_process_window_size
, 3, 3, 0,
975 doc
: /* Tell PROCESS that it has logical window size HEIGHT and WIDTH. */)
976 (process
, height
, width
)
977 register Lisp_Object process
, height
, width
;
979 CHECK_PROCESS (process
);
980 CHECK_NATNUM (height
);
981 CHECK_NATNUM (width
);
983 if (XINT (XPROCESS (process
)->infd
) < 0
984 || set_window_size (XINT (XPROCESS (process
)->infd
),
985 XINT (height
), XINT (width
)) <= 0)
991 DEFUN ("set-process-inherit-coding-system-flag",
992 Fset_process_inherit_coding_system_flag
,
993 Sset_process_inherit_coding_system_flag
, 2, 2, 0,
994 doc
: /* Determine whether buffer of PROCESS will inherit coding-system.
995 If the second argument FLAG is non-nil, then the variable
996 `buffer-file-coding-system' of the buffer associated with PROCESS
997 will be bound to the value of the coding system used to decode
1000 This is useful when the coding system specified for the process buffer
1001 leaves either the character code conversion or the end-of-line conversion
1002 unspecified, or if the coding system used to decode the process output
1003 is more appropriate for saving the process buffer.
1005 Binding the variable `inherit-process-coding-system' to non-nil before
1006 starting the process is an alternative way of setting the inherit flag
1007 for the process which will run. */)
1009 register Lisp_Object process
, flag
;
1011 CHECK_PROCESS (process
);
1012 XPROCESS (process
)->inherit_coding_system_flag
= flag
;
1016 DEFUN ("process-inherit-coding-system-flag",
1017 Fprocess_inherit_coding_system_flag
, Sprocess_inherit_coding_system_flag
,
1019 doc
: /* Return the value of inherit-coding-system flag for PROCESS.
1020 If this flag is t, `buffer-file-coding-system' of the buffer
1021 associated with PROCESS will inherit the coding system used to decode
1022 the process output. */)
1024 register Lisp_Object process
;
1026 CHECK_PROCESS (process
);
1027 return XPROCESS (process
)->inherit_coding_system_flag
;
1030 DEFUN ("set-process-query-on-exit-flag",
1031 Fset_process_query_on_exit_flag
, Sset_process_query_on_exit_flag
,
1033 doc
: /* Specify if query is needed for PROCESS when Emacs is exited.
1034 If the second argument FLAG is non-nil, emacs will query the user before
1035 exiting if PROCESS is running. */)
1037 register Lisp_Object process
, flag
;
1039 CHECK_PROCESS (process
);
1040 XPROCESS (process
)->kill_without_query
= Fnull (flag
);
1044 DEFUN ("process-query-on-exit-flag",
1045 Fprocess_query_on_exit_flag
, Sprocess_query_on_exit_flag
,
1047 doc
: /* Return the current value of query on exit flag for PROCESS. */)
1049 register Lisp_Object process
;
1051 CHECK_PROCESS (process
);
1052 return Fnull (XPROCESS (process
)->kill_without_query
);
1055 #ifdef DATAGRAM_SOCKETS
1056 Lisp_Object
Fprocess_datagram_address ();
1059 DEFUN ("process-contact", Fprocess_contact
, Sprocess_contact
,
1061 doc
: /* Return the contact info of PROCESS; t for a real child.
1062 For a net connection, the value depends on the optional KEY arg.
1063 If KEY is nil, value is a cons cell of the form (HOST SERVICE),
1064 if KEY is t, the complete contact information for the connection is
1065 returned, else the specific value for the keyword KEY is returned.
1066 See `make-network-process' for a list of keywords. */)
1068 register Lisp_Object process
, key
;
1070 Lisp_Object contact
;
1072 CHECK_PROCESS (process
);
1073 contact
= XPROCESS (process
)->childp
;
1075 #ifdef DATAGRAM_SOCKETS
1076 if (DATAGRAM_CONN_P (process
)
1077 && (EQ (key
, Qt
) || EQ (key
, QCremote
)))
1078 contact
= Fplist_put (contact
, QCremote
,
1079 Fprocess_datagram_address (process
));
1082 if (!NETCONN_P (process
) || EQ (key
, Qt
))
1085 return Fcons (Fplist_get (contact
, QChost
),
1086 Fcons (Fplist_get (contact
, QCservice
), Qnil
));
1087 return Fplist_get (contact
, key
);
1090 DEFUN ("process-plist", Fprocess_plist
, Sprocess_plist
,
1092 doc
: /* Return the plist of PROCESS. */)
1094 register Lisp_Object process
;
1096 CHECK_PROCESS (process
);
1097 return XPROCESS (process
)->plist
;
1100 DEFUN ("set-process-plist", Fset_process_plist
, Sset_process_plist
,
1102 doc
: /* Replace the plist of PROCESS with PLIST. Returns PLIST. */)
1104 register Lisp_Object process
, plist
;
1106 CHECK_PROCESS (process
);
1109 XPROCESS (process
)->plist
= plist
;
1113 #if 0 /* Turned off because we don't currently record this info
1114 in the process. Perhaps add it. */
1115 DEFUN ("process-connection", Fprocess_connection
, Sprocess_connection
, 1, 1, 0,
1116 doc
: /* Return the connection type of PROCESS.
1117 The value is nil for a pipe, t or `pty' for a pty, or `stream' for
1118 a socket connection. */)
1120 Lisp_Object process
;
1122 return XPROCESS (process
)->type
;
1127 DEFUN ("format-network-address", Fformat_network_address
, Sformat_network_address
,
1129 doc
: /* Convert network ADDRESS from internal format to a string.
1130 If optional second argument OMIT-PORT is non-nil, don't include a port
1131 number in the string; in this case, interpret a 4 element vector as an
1132 IP address. Returns nil if format of ADDRESS is invalid. */)
1133 (address
, omit_port
)
1134 Lisp_Object address
, omit_port
;
1139 if (STRINGP (address
)) /* AF_LOCAL */
1142 if (VECTORP (address
)) /* AF_INET */
1144 register struct Lisp_Vector
*p
= XVECTOR (address
);
1145 Lisp_Object args
[6];
1148 if (!NILP (omit_port
) && (p
->size
== 4 || p
->size
== 5))
1150 args
[0] = build_string ("%d.%d.%d.%d");
1153 else if (p
->size
== 5)
1155 args
[0] = build_string ("%d.%d.%d.%d:%d");
1161 for (i
= 0; i
< nargs
; i
++)
1162 args
[i
+1] = p
->contents
[i
];
1163 return Fformat (nargs
+1, args
);
1166 if (CONSP (address
))
1168 Lisp_Object args
[2];
1169 args
[0] = build_string ("<Family %d>");
1170 args
[1] = Fcar (address
);
1171 return Fformat (2, args
);
1180 list_processes_1 (query_only
)
1181 Lisp_Object query_only
;
1183 register Lisp_Object tail
, tem
;
1184 Lisp_Object proc
, minspace
, tem1
;
1185 register struct Lisp_Process
*p
;
1187 int w_proc
, w_buffer
, w_tty
;
1188 Lisp_Object i_status
, i_buffer
, i_tty
, i_command
;
1190 w_proc
= 4; /* Proc */
1191 w_buffer
= 6; /* Buffer */
1192 w_tty
= 0; /* Omit if no ttys */
1194 for (tail
= Vprocess_alist
; !NILP (tail
); tail
= Fcdr (tail
))
1198 proc
= Fcdr (Fcar (tail
));
1199 p
= XPROCESS (proc
);
1200 if (NILP (p
->childp
))
1202 if (!NILP (query_only
) && !NILP (p
->kill_without_query
))
1204 if (STRINGP (p
->name
)
1205 && ( i
= SCHARS (p
->name
), (i
> w_proc
)))
1207 if (!NILP (p
->buffer
))
1209 if (NILP (XBUFFER (p
->buffer
)->name
) && w_buffer
< 8)
1210 w_buffer
= 8; /* (Killed) */
1211 else if ((i
= SCHARS (XBUFFER (p
->buffer
)->name
), (i
> w_buffer
)))
1214 if (STRINGP (p
->tty_name
)
1215 && (i
= SCHARS (p
->tty_name
), (i
> w_tty
)))
1219 XSETFASTINT (i_status
, w_proc
+ 1);
1220 XSETFASTINT (i_buffer
, XFASTINT (i_status
) + 9);
1223 XSETFASTINT (i_tty
, XFASTINT (i_buffer
) + w_buffer
+ 1);
1224 XSETFASTINT (i_command
, XFASTINT (i_buffer
) + w_tty
+ 1);
1227 XSETFASTINT (i_command
, XFASTINT (i_buffer
) + w_buffer
+ 1);
1230 XSETFASTINT (minspace
, 1);
1232 set_buffer_internal (XBUFFER (Vstandard_output
));
1233 Fbuffer_disable_undo (Vstandard_output
);
1235 current_buffer
->truncate_lines
= Qt
;
1237 write_string ("Proc", -1);
1238 Findent_to (i_status
, minspace
); write_string ("Status", -1);
1239 Findent_to (i_buffer
, minspace
); write_string ("Buffer", -1);
1242 Findent_to (i_tty
, minspace
); write_string ("Tty", -1);
1244 Findent_to (i_command
, minspace
); write_string ("Command", -1);
1245 write_string ("\n", -1);
1247 write_string ("----", -1);
1248 Findent_to (i_status
, minspace
); write_string ("------", -1);
1249 Findent_to (i_buffer
, minspace
); write_string ("------", -1);
1252 Findent_to (i_tty
, minspace
); write_string ("---", -1);
1254 Findent_to (i_command
, minspace
); write_string ("-------", -1);
1255 write_string ("\n", -1);
1257 for (tail
= Vprocess_alist
; !NILP (tail
); tail
= Fcdr (tail
))
1261 proc
= Fcdr (Fcar (tail
));
1262 p
= XPROCESS (proc
);
1263 if (NILP (p
->childp
))
1265 if (!NILP (query_only
) && !NILP (p
->kill_without_query
))
1268 Finsert (1, &p
->name
);
1269 Findent_to (i_status
, minspace
);
1271 if (!NILP (p
->raw_status_low
))
1274 if (CONSP (p
->status
))
1275 symbol
= XCAR (p
->status
);
1278 if (EQ (symbol
, Qsignal
))
1281 tem
= Fcar (Fcdr (p
->status
));
1283 if (XINT (tem
) < NSIG
)
1284 write_string (sys_errlist
[XINT (tem
)], -1);
1287 Fprinc (symbol
, Qnil
);
1289 else if (NETCONN1_P (p
))
1291 if (EQ (symbol
, Qexit
))
1292 write_string ("closed", -1);
1293 else if (EQ (p
->command
, Qt
))
1294 write_string ("stopped", -1);
1295 else if (EQ (symbol
, Qrun
))
1296 write_string ("open", -1);
1298 Fprinc (symbol
, Qnil
);
1301 Fprinc (symbol
, Qnil
);
1303 if (EQ (symbol
, Qexit
))
1306 tem
= Fcar (Fcdr (p
->status
));
1309 sprintf (tembuf
, " %d", (int) XFASTINT (tem
));
1310 write_string (tembuf
, -1);
1314 if (EQ (symbol
, Qsignal
) || EQ (symbol
, Qexit
))
1315 remove_process (proc
);
1317 Findent_to (i_buffer
, minspace
);
1318 if (NILP (p
->buffer
))
1319 insert_string ("(none)");
1320 else if (NILP (XBUFFER (p
->buffer
)->name
))
1321 insert_string ("(Killed)");
1323 Finsert (1, &XBUFFER (p
->buffer
)->name
);
1327 Findent_to (i_tty
, minspace
);
1328 if (STRINGP (p
->tty_name
))
1329 Finsert (1, &p
->tty_name
);
1332 Findent_to (i_command
, minspace
);
1334 if (EQ (p
->status
, Qlisten
))
1336 Lisp_Object port
= Fplist_get (p
->childp
, QCservice
);
1337 if (INTEGERP (port
))
1338 port
= Fnumber_to_string (port
);
1340 port
= Fformat_network_address (Fplist_get (p
->childp
, QClocal
), Qnil
);
1341 sprintf (tembuf
, "(network %s server on %s)\n",
1342 (DATAGRAM_CHAN_P (XINT (p
->infd
)) ? "datagram" : "stream"),
1343 (STRINGP (port
) ? (char *)SDATA (port
) : "?"));
1344 insert_string (tembuf
);
1346 else if (NETCONN1_P (p
))
1348 /* For a local socket, there is no host name,
1349 so display service instead. */
1350 Lisp_Object host
= Fplist_get (p
->childp
, QChost
);
1351 if (!STRINGP (host
))
1353 host
= Fplist_get (p
->childp
, QCservice
);
1354 if (INTEGERP (host
))
1355 host
= Fnumber_to_string (host
);
1358 host
= Fformat_network_address (Fplist_get (p
->childp
, QCremote
), Qnil
);
1359 sprintf (tembuf
, "(network %s connection to %s)\n",
1360 (DATAGRAM_CHAN_P (XINT (p
->infd
)) ? "datagram" : "stream"),
1361 (STRINGP (host
) ? (char *)SDATA (host
) : "?"));
1362 insert_string (tembuf
);
1374 insert_string (" ");
1376 insert_string ("\n");
1382 DEFUN ("list-processes", Flist_processes
, Slist_processes
, 0, 1, "P",
1383 doc
: /* Display a list of all processes.
1384 If optional argument QUERY-ONLY is non-nil, only processes with
1385 the query-on-exit flag set will be listed.
1386 Any process listed as exited or signaled is actually eliminated
1387 after the listing is made. */)
1389 Lisp_Object query_only
;
1391 internal_with_output_to_temp_buffer ("*Process List*",
1392 list_processes_1
, query_only
);
1396 DEFUN ("process-list", Fprocess_list
, Sprocess_list
, 0, 0, 0,
1397 doc
: /* Return a list of all processes. */)
1400 return Fmapcar (Qcdr
, Vprocess_alist
);
1403 /* Starting asynchronous inferior processes. */
1405 static Lisp_Object
start_process_unwind ();
1407 DEFUN ("start-process", Fstart_process
, Sstart_process
, 3, MANY
, 0,
1408 doc
: /* Start a program in a subprocess. Return the process object for it.
1409 NAME is name for process. It is modified if necessary to make it unique.
1410 BUFFER is the buffer or (buffer-name) to associate with the process.
1411 Process output goes at end of that buffer, unless you specify
1412 an output stream or filter function to handle the output.
1413 BUFFER may be also nil, meaning that this process is not associated
1415 Third arg is program file name. It is searched for in PATH.
1416 Remaining arguments are strings to give program as arguments.
1418 usage: (start-process NAME BUFFER PROGRAM &rest PROGRAM-ARGS) */)
1421 register Lisp_Object
*args
;
1423 Lisp_Object buffer
, name
, program
, proc
, current_dir
, tem
;
1425 register unsigned char *new_argv
;
1428 register unsigned char **new_argv
;
1431 int count
= SPECPDL_INDEX ();
1435 buffer
= Fget_buffer_create (buffer
);
1437 /* Make sure that the child will be able to chdir to the current
1438 buffer's current directory, or its unhandled equivalent. We
1439 can't just have the child check for an error when it does the
1440 chdir, since it's in a vfork.
1442 We have to GCPRO around this because Fexpand_file_name and
1443 Funhandled_file_name_directory might call a file name handling
1444 function. The argument list is protected by the caller, so all
1445 we really have to worry about is buffer. */
1447 struct gcpro gcpro1
, gcpro2
;
1449 current_dir
= current_buffer
->directory
;
1451 GCPRO2 (buffer
, current_dir
);
1454 = expand_and_dir_to_file (Funhandled_file_name_directory (current_dir
),
1456 if (NILP (Ffile_accessible_directory_p (current_dir
)))
1457 report_file_error ("Setting current directory",
1458 Fcons (current_buffer
->directory
, Qnil
));
1464 CHECK_STRING (name
);
1468 CHECK_STRING (program
);
1470 proc
= make_process (name
);
1471 /* If an error occurs and we can't start the process, we want to
1472 remove it from the process list. This means that each error
1473 check in create_process doesn't need to call remove_process
1474 itself; it's all taken care of here. */
1475 record_unwind_protect (start_process_unwind
, proc
);
1477 XPROCESS (proc
)->childp
= Qt
;
1478 XPROCESS (proc
)->plist
= Qnil
;
1479 XPROCESS (proc
)->command_channel_p
= Qnil
;
1480 XPROCESS (proc
)->buffer
= buffer
;
1481 XPROCESS (proc
)->sentinel
= Qnil
;
1482 XPROCESS (proc
)->filter
= Qnil
;
1483 XPROCESS (proc
)->filter_multibyte
1484 = buffer_defaults
.enable_multibyte_characters
;
1485 XPROCESS (proc
)->command
= Flist (nargs
- 2, args
+ 2);
1487 /* Make the process marker point into the process buffer (if any). */
1489 set_marker_both (XPROCESS (proc
)->mark
, buffer
,
1490 BUF_ZV (XBUFFER (buffer
)),
1491 BUF_ZV_BYTE (XBUFFER (buffer
)));
1494 /* Decide coding systems for communicating with the process. Here
1495 we don't setup the structure coding_system nor pay attention to
1496 unibyte mode. They are done in create_process. */
1498 /* Qt denotes we have not yet called Ffind_operation_coding_system. */
1499 Lisp_Object coding_systems
= Qt
;
1500 Lisp_Object val
, *args2
;
1501 struct gcpro gcpro1
, gcpro2
;
1503 val
= Vcoding_system_for_read
;
1506 args2
= (Lisp_Object
*) alloca ((nargs
+ 1) * sizeof *args2
);
1507 args2
[0] = Qstart_process
;
1508 for (i
= 0; i
< nargs
; i
++) args2
[i
+ 1] = args
[i
];
1509 GCPRO2 (proc
, current_dir
);
1510 coding_systems
= Ffind_operation_coding_system (nargs
+ 1, args2
);
1512 if (CONSP (coding_systems
))
1513 val
= XCAR (coding_systems
);
1514 else if (CONSP (Vdefault_process_coding_system
))
1515 val
= XCAR (Vdefault_process_coding_system
);
1517 XPROCESS (proc
)->decode_coding_system
= val
;
1519 val
= Vcoding_system_for_write
;
1522 if (EQ (coding_systems
, Qt
))
1524 args2
= (Lisp_Object
*) alloca ((nargs
+ 1) * sizeof args2
);
1525 args2
[0] = Qstart_process
;
1526 for (i
= 0; i
< nargs
; i
++) args2
[i
+ 1] = args
[i
];
1527 GCPRO2 (proc
, current_dir
);
1528 coding_systems
= Ffind_operation_coding_system (nargs
+ 1, args2
);
1531 if (CONSP (coding_systems
))
1532 val
= XCDR (coding_systems
);
1533 else if (CONSP (Vdefault_process_coding_system
))
1534 val
= XCDR (Vdefault_process_coding_system
);
1536 XPROCESS (proc
)->encode_coding_system
= val
;
1540 /* Make a one member argv with all args concatenated
1541 together separated by a blank. */
1542 len
= SBYTES (program
) + 2;
1543 for (i
= 3; i
< nargs
; i
++)
1547 len
+= SBYTES (tem
) + 1; /* count the blank */
1549 new_argv
= (unsigned char *) alloca (len
);
1550 strcpy (new_argv
, SDATA (program
));
1551 for (i
= 3; i
< nargs
; i
++)
1555 strcat (new_argv
, " ");
1556 strcat (new_argv
, SDATA (tem
));
1558 /* Need to add code here to check for program existence on VMS */
1561 new_argv
= (unsigned char **) alloca ((nargs
- 1) * sizeof (char *));
1563 /* If program file name is not absolute, search our path for it.
1564 Put the name we will really use in TEM. */
1565 if (!IS_DIRECTORY_SEP (SREF (program
, 0))
1566 && !(SCHARS (program
) > 1
1567 && IS_DEVICE_SEP (SREF (program
, 1))))
1569 struct gcpro gcpro1
, gcpro2
, gcpro3
, gcpro4
;
1572 GCPRO4 (name
, program
, buffer
, current_dir
);
1573 openp (Vexec_path
, program
, Vexec_suffixes
, &tem
, make_number (X_OK
));
1576 report_file_error ("Searching for program", Fcons (program
, Qnil
));
1577 tem
= Fexpand_file_name (tem
, Qnil
);
1581 if (!NILP (Ffile_directory_p (program
)))
1582 error ("Specified program for new process is a directory");
1586 /* If program file name starts with /: for quoting a magic name,
1588 if (SBYTES (tem
) > 2 && SREF (tem
, 0) == '/'
1589 && SREF (tem
, 1) == ':')
1590 tem
= Fsubstring (tem
, make_number (2), Qnil
);
1592 /* Encode the file name and put it in NEW_ARGV.
1593 That's where the child will use it to execute the program. */
1594 tem
= ENCODE_FILE (tem
);
1595 new_argv
[0] = SDATA (tem
);
1597 /* Here we encode arguments by the coding system used for sending
1598 data to the process. We don't support using different coding
1599 systems for encoding arguments and for encoding data sent to the
1602 for (i
= 3; i
< nargs
; i
++)
1606 if (STRING_MULTIBYTE (tem
))
1607 tem
= (code_convert_string_norecord
1608 (tem
, XPROCESS (proc
)->encode_coding_system
, 1));
1609 new_argv
[i
- 2] = SDATA (tem
);
1611 new_argv
[i
- 2] = 0;
1612 #endif /* not VMS */
1614 XPROCESS (proc
)->decoding_buf
= make_uninit_string (0);
1615 XPROCESS (proc
)->decoding_carryover
= make_number (0);
1616 XPROCESS (proc
)->encoding_buf
= make_uninit_string (0);
1617 XPROCESS (proc
)->encoding_carryover
= make_number (0);
1619 XPROCESS (proc
)->inherit_coding_system_flag
1620 = (NILP (buffer
) || !inherit_process_coding_system
1623 create_process (proc
, (char **) new_argv
, current_dir
);
1625 return unbind_to (count
, proc
);
1628 /* This function is the unwind_protect form for Fstart_process. If
1629 PROC doesn't have its pid set, then we know someone has signaled
1630 an error and the process wasn't started successfully, so we should
1631 remove it from the process list. */
1633 start_process_unwind (proc
)
1636 if (!PROCESSP (proc
))
1639 /* Was PROC started successfully? */
1640 if (XINT (XPROCESS (proc
)->pid
) <= 0)
1641 remove_process (proc
);
1647 create_process_1 (timer
)
1648 struct atimer
*timer
;
1650 /* Nothing to do. */
1654 #if 0 /* This doesn't work; see the note before sigchld_handler. */
1657 /* Mimic blocking of signals on system V, which doesn't really have it. */
1659 /* Nonzero means we got a SIGCHLD when it was supposed to be blocked. */
1660 int sigchld_deferred
;
1663 create_process_sigchld ()
1665 signal (SIGCHLD
, create_process_sigchld
);
1667 sigchld_deferred
= 1;
1673 #ifndef VMS /* VMS version of this function is in vmsproc.c. */
1675 create_process (process
, new_argv
, current_dir
)
1676 Lisp_Object process
;
1678 Lisp_Object current_dir
;
1680 int pid
, inchannel
, outchannel
;
1682 #ifdef POSIX_SIGNALS
1685 struct sigaction sigint_action
;
1686 struct sigaction sigquit_action
;
1688 struct sigaction sighup_action
;
1690 #else /* !POSIX_SIGNALS */
1693 SIGTYPE (*sigchld
)();
1696 #endif /* !POSIX_SIGNALS */
1697 /* Use volatile to protect variables from being clobbered by longjmp. */
1698 volatile int forkin
, forkout
;
1699 volatile int pty_flag
= 0;
1701 extern char **environ
;
1704 inchannel
= outchannel
= -1;
1707 if (!NILP (Vprocess_connection_type
))
1708 outchannel
= inchannel
= allocate_pty ();
1712 #if ! defined (USG) || defined (USG_SUBTTY_WORKS)
1713 /* On most USG systems it does not work to open the pty's tty here,
1714 then close it and reopen it in the child. */
1716 /* Don't let this terminal become our controlling terminal
1717 (in case we don't have one). */
1718 forkout
= forkin
= emacs_open (pty_name
, O_RDWR
| O_NOCTTY
, 0);
1720 forkout
= forkin
= emacs_open (pty_name
, O_RDWR
, 0);
1723 report_file_error ("Opening pty", Qnil
);
1725 forkin
= forkout
= -1;
1726 #endif /* not USG, or USG_SUBTTY_WORKS */
1730 #endif /* HAVE_PTYS */
1733 if (socketpair (AF_UNIX
, SOCK_STREAM
, 0, sv
) < 0)
1734 report_file_error ("Opening socketpair", Qnil
);
1735 outchannel
= inchannel
= sv
[0];
1736 forkout
= forkin
= sv
[1];
1738 #else /* not SKTPAIR */
1743 report_file_error ("Creating pipe", Qnil
);
1749 emacs_close (inchannel
);
1750 emacs_close (forkout
);
1751 report_file_error ("Creating pipe", Qnil
);
1756 #endif /* not SKTPAIR */
1759 /* Replaced by close_process_descs */
1760 set_exclusive_use (inchannel
);
1761 set_exclusive_use (outchannel
);
1764 /* Stride people say it's a mystery why this is needed
1765 as well as the O_NDELAY, but that it fails without this. */
1766 #if defined (STRIDE) || (defined (pfa) && defined (HAVE_PTYS))
1769 ioctl (inchannel
, FIONBIO
, &one
);
1774 fcntl (inchannel
, F_SETFL
, O_NONBLOCK
);
1775 fcntl (outchannel
, F_SETFL
, O_NONBLOCK
);
1778 fcntl (inchannel
, F_SETFL
, O_NDELAY
);
1779 fcntl (outchannel
, F_SETFL
, O_NDELAY
);
1783 /* Record this as an active process, with its channels.
1784 As a result, child_setup will close Emacs's side of the pipes. */
1785 chan_process
[inchannel
] = process
;
1786 XSETINT (XPROCESS (process
)->infd
, inchannel
);
1787 XSETINT (XPROCESS (process
)->outfd
, outchannel
);
1789 /* Previously we recorded the tty descriptor used in the subprocess.
1790 It was only used for getting the foreground tty process, so now
1791 we just reopen the device (see emacs_get_tty_pgrp) as this is
1792 more portable (see USG_SUBTTY_WORKS above). */
1794 XPROCESS (process
)->pty_flag
= (pty_flag
? Qt
: Qnil
);
1795 XPROCESS (process
)->status
= Qrun
;
1796 setup_process_coding_systems (process
);
1798 /* Delay interrupts until we have a chance to store
1799 the new fork's pid in its process structure */
1800 #ifdef POSIX_SIGNALS
1801 sigemptyset (&blocked
);
1803 sigaddset (&blocked
, SIGCHLD
);
1805 #ifdef HAVE_WORKING_VFORK
1806 /* On many hosts (e.g. Solaris 2.4), if a vforked child calls `signal',
1807 this sets the parent's signal handlers as well as the child's.
1808 So delay all interrupts whose handlers the child might munge,
1809 and record the current handlers so they can be restored later. */
1810 sigaddset (&blocked
, SIGINT
); sigaction (SIGINT
, 0, &sigint_action
);
1811 sigaddset (&blocked
, SIGQUIT
); sigaction (SIGQUIT
, 0, &sigquit_action
);
1813 sigaddset (&blocked
, SIGHUP
); sigaction (SIGHUP
, 0, &sighup_action
);
1815 #endif /* HAVE_WORKING_VFORK */
1816 sigprocmask (SIG_BLOCK
, &blocked
, &procmask
);
1817 #else /* !POSIX_SIGNALS */
1821 #else /* not BSD4_1 */
1822 #if defined (BSD_SYSTEM) || defined (UNIPLUS) || defined (HPUX)
1823 sigsetmask (sigmask (SIGCHLD
));
1824 #else /* ordinary USG */
1826 sigchld_deferred
= 0;
1827 sigchld
= signal (SIGCHLD
, create_process_sigchld
);
1829 #endif /* ordinary USG */
1830 #endif /* not BSD4_1 */
1831 #endif /* SIGCHLD */
1832 #endif /* !POSIX_SIGNALS */
1834 FD_SET (inchannel
, &input_wait_mask
);
1835 FD_SET (inchannel
, &non_keyboard_wait_mask
);
1836 if (inchannel
> max_process_desc
)
1837 max_process_desc
= inchannel
;
1839 /* Until we store the proper pid, enable sigchld_handler
1840 to recognize an unknown pid as standing for this process.
1841 It is very important not to let this `marker' value stay
1842 in the table after this function has returned; if it does
1843 it might cause call-process to hang and subsequent asynchronous
1844 processes to get their return values scrambled. */
1845 XSETINT (XPROCESS (process
)->pid
, -1);
1850 /* child_setup must clobber environ on systems with true vfork.
1851 Protect it from permanent change. */
1852 char **save_environ
= environ
;
1854 current_dir
= ENCODE_FILE (current_dir
);
1859 #endif /* not WINDOWSNT */
1861 int xforkin
= forkin
;
1862 int xforkout
= forkout
;
1864 #if 0 /* This was probably a mistake--it duplicates code later on,
1865 but fails to handle all the cases. */
1866 /* Make sure SIGCHLD is not blocked in the child. */
1867 sigsetmask (SIGEMPTYMASK
);
1870 /* Make the pty be the controlling terminal of the process. */
1872 /* First, disconnect its current controlling terminal. */
1874 /* We tried doing setsid only if pty_flag, but it caused
1875 process_set_signal to fail on SGI when using a pipe. */
1877 /* Make the pty's terminal the controlling terminal. */
1881 /* We ignore the return value
1882 because faith@cs.unc.edu says that is necessary on Linux. */
1883 ioctl (xforkin
, TIOCSCTTY
, 0);
1886 #else /* not HAVE_SETSID */
1888 /* It's very important to call setpgrp here and no time
1889 afterwards. Otherwise, we lose our controlling tty which
1890 is set when we open the pty. */
1893 #endif /* not HAVE_SETSID */
1894 #if defined (HAVE_TERMIOS) && defined (LDISC1)
1895 if (pty_flag
&& xforkin
>= 0)
1898 tcgetattr (xforkin
, &t
);
1900 if (tcsetattr (xforkin
, TCSANOW
, &t
) < 0)
1901 emacs_write (1, "create_process/tcsetattr LDISC1 failed\n", 39);
1904 #if defined (NTTYDISC) && defined (TIOCSETD)
1905 if (pty_flag
&& xforkin
>= 0)
1907 /* Use new line discipline. */
1908 int ldisc
= NTTYDISC
;
1909 ioctl (xforkin
, TIOCSETD
, &ldisc
);
1914 /* In 4.3BSD, the TIOCSPGRP bug has been fixed, and now you
1915 can do TIOCSPGRP only to the process's controlling tty. */
1918 /* I wonder: would just ioctl (0, TIOCNOTTY, 0) work here?
1919 I can't test it since I don't have 4.3. */
1920 int j
= emacs_open ("/dev/tty", O_RDWR
, 0);
1921 ioctl (j
, TIOCNOTTY
, 0);
1924 /* In order to get a controlling terminal on some versions
1925 of BSD, it is necessary to put the process in pgrp 0
1926 before it opens the terminal. */
1934 #endif /* TIOCNOTTY */
1936 #if !defined (RTU) && !defined (UNIPLUS) && !defined (DONT_REOPEN_PTY)
1937 /*** There is a suggestion that this ought to be a
1938 conditional on TIOCSPGRP,
1939 or !(defined (HAVE_SETSID) && defined (TIOCSCTTY)).
1940 Trying the latter gave the wrong results on Debian GNU/Linux 1.1;
1941 that system does seem to need this code, even though
1942 both HAVE_SETSID and TIOCSCTTY are defined. */
1943 /* Now close the pty (if we had it open) and reopen it.
1944 This makes the pty the controlling terminal of the subprocess. */
1947 #ifdef SET_CHILD_PTY_PGRP
1948 int pgrp
= getpid ();
1951 /* I wonder if emacs_close (emacs_open (pty_name, ...))
1954 emacs_close (xforkin
);
1955 xforkout
= xforkin
= emacs_open (pty_name
, O_RDWR
, 0);
1959 emacs_write (1, "Couldn't open the pty terminal ", 31);
1960 emacs_write (1, pty_name
, strlen (pty_name
));
1961 emacs_write (1, "\n", 1);
1965 #ifdef SET_CHILD_PTY_PGRP
1966 ioctl (xforkin
, TIOCSPGRP
, &pgrp
);
1967 ioctl (xforkout
, TIOCSPGRP
, &pgrp
);
1970 #endif /* not UNIPLUS and not RTU and not DONT_REOPEN_PTY */
1972 #ifdef SETUP_SLAVE_PTY
1977 #endif /* SETUP_SLAVE_PTY */
1979 /* On AIX, we've disabled SIGHUP above once we start a child on a pty.
1980 Now reenable it in the child, so it will die when we want it to. */
1982 signal (SIGHUP
, SIG_DFL
);
1984 #endif /* HAVE_PTYS */
1986 signal (SIGINT
, SIG_DFL
);
1987 signal (SIGQUIT
, SIG_DFL
);
1989 /* Stop blocking signals in the child. */
1990 #ifdef POSIX_SIGNALS
1991 sigprocmask (SIG_SETMASK
, &procmask
, 0);
1992 #else /* !POSIX_SIGNALS */
1996 #else /* not BSD4_1 */
1997 #if defined (BSD_SYSTEM) || defined (UNIPLUS) || defined (HPUX)
1998 sigsetmask (SIGEMPTYMASK
);
1999 #else /* ordinary USG */
2001 signal (SIGCHLD
, sigchld
);
2003 #endif /* ordinary USG */
2004 #endif /* not BSD4_1 */
2005 #endif /* SIGCHLD */
2006 #endif /* !POSIX_SIGNALS */
2009 child_setup_tty (xforkout
);
2011 pid
= child_setup (xforkin
, xforkout
, xforkout
,
2012 new_argv
, 1, current_dir
);
2013 #else /* not WINDOWSNT */
2014 child_setup (xforkin
, xforkout
, xforkout
,
2015 new_argv
, 1, current_dir
);
2016 #endif /* not WINDOWSNT */
2018 environ
= save_environ
;
2023 /* This runs in the Emacs process. */
2027 emacs_close (forkin
);
2028 if (forkin
!= forkout
&& forkout
>= 0)
2029 emacs_close (forkout
);
2033 /* vfork succeeded. */
2034 XSETFASTINT (XPROCESS (process
)->pid
, pid
);
2037 register_child (pid
, inchannel
);
2038 #endif /* WINDOWSNT */
2040 /* If the subfork execv fails, and it exits,
2041 this close hangs. I don't know why.
2042 So have an interrupt jar it loose. */
2044 struct atimer
*timer
;
2048 EMACS_SET_SECS_USECS (offset
, 1, 0);
2049 timer
= start_atimer (ATIMER_RELATIVE
, offset
, create_process_1
, 0);
2052 emacs_close (forkin
);
2054 cancel_atimer (timer
);
2058 if (forkin
!= forkout
&& forkout
>= 0)
2059 emacs_close (forkout
);
2063 XPROCESS (process
)->tty_name
= build_string (pty_name
);
2066 XPROCESS (process
)->tty_name
= Qnil
;
2069 /* Restore the signal state whether vfork succeeded or not.
2070 (We will signal an error, below, if it failed.) */
2071 #ifdef POSIX_SIGNALS
2072 #ifdef HAVE_WORKING_VFORK
2073 /* Restore the parent's signal handlers. */
2074 sigaction (SIGINT
, &sigint_action
, 0);
2075 sigaction (SIGQUIT
, &sigquit_action
, 0);
2077 sigaction (SIGHUP
, &sighup_action
, 0);
2079 #endif /* HAVE_WORKING_VFORK */
2080 /* Stop blocking signals in the parent. */
2081 sigprocmask (SIG_SETMASK
, &procmask
, 0);
2082 #else /* !POSIX_SIGNALS */
2086 #else /* not BSD4_1 */
2087 #if defined (BSD_SYSTEM) || defined (UNIPLUS) || defined (HPUX)
2088 sigsetmask (SIGEMPTYMASK
);
2089 #else /* ordinary USG */
2091 signal (SIGCHLD
, sigchld
);
2092 /* Now really handle any of these signals
2093 that came in during this function. */
2094 if (sigchld_deferred
)
2095 kill (getpid (), SIGCHLD
);
2097 #endif /* ordinary USG */
2098 #endif /* not BSD4_1 */
2099 #endif /* SIGCHLD */
2100 #endif /* !POSIX_SIGNALS */
2102 /* Now generate the error if vfork failed. */
2104 report_file_error ("Doing vfork", Qnil
);
2106 #endif /* not VMS */
2111 /* Convert an internal struct sockaddr to a lisp object (vector or string).
2112 The address family of sa is not included in the result. */
2115 conv_sockaddr_to_lisp (sa
, len
)
2116 struct sockaddr
*sa
;
2119 Lisp_Object address
;
2122 register struct Lisp_Vector
*p
;
2124 switch (sa
->sa_family
)
2128 struct sockaddr_in
*sin
= (struct sockaddr_in
*) sa
;
2129 len
= sizeof (sin
->sin_addr
) + 1;
2130 address
= Fmake_vector (make_number (len
), Qnil
);
2131 p
= XVECTOR (address
);
2132 p
->contents
[--len
] = make_number (ntohs (sin
->sin_port
));
2133 cp
= (unsigned char *)&sin
->sin_addr
;
2136 #ifdef HAVE_LOCAL_SOCKETS
2139 struct sockaddr_un
*sockun
= (struct sockaddr_un
*) sa
;
2140 for (i
= 0; i
< sizeof (sockun
->sun_path
); i
++)
2141 if (sockun
->sun_path
[i
] == 0)
2143 return make_unibyte_string (sockun
->sun_path
, i
);
2147 len
-= sizeof (sa
->sa_family
);
2148 address
= Fcons (make_number (sa
->sa_family
),
2149 Fmake_vector (make_number (len
), Qnil
));
2150 p
= XVECTOR (XCDR (address
));
2151 cp
= (unsigned char *) sa
+ sizeof (sa
->sa_family
);
2157 p
->contents
[i
++] = make_number (*cp
++);
2163 /* Get family and required size for sockaddr structure to hold ADDRESS. */
2166 get_lisp_to_sockaddr_size (address
, familyp
)
2167 Lisp_Object address
;
2170 register struct Lisp_Vector
*p
;
2172 if (VECTORP (address
))
2174 p
= XVECTOR (address
);
2178 return sizeof (struct sockaddr_in
);
2181 #ifdef HAVE_LOCAL_SOCKETS
2182 else if (STRINGP (address
))
2184 *familyp
= AF_LOCAL
;
2185 return sizeof (struct sockaddr_un
);
2188 else if (CONSP (address
) && INTEGERP (XCAR (address
)) && VECTORP (XCDR (address
)))
2190 struct sockaddr
*sa
;
2191 *familyp
= XINT (XCAR (address
));
2192 p
= XVECTOR (XCDR (address
));
2193 return p
->size
+ sizeof (sa
->sa_family
);
2198 /* Convert an address object (vector or string) to an internal sockaddr.
2199 Format of address has already been validated by size_lisp_to_sockaddr. */
2202 conv_lisp_to_sockaddr (family
, address
, sa
, len
)
2204 Lisp_Object address
;
2205 struct sockaddr
*sa
;
2208 register struct Lisp_Vector
*p
;
2209 register unsigned char *cp
= NULL
;
2213 sa
->sa_family
= family
;
2215 if (VECTORP (address
))
2217 p
= XVECTOR (address
);
2218 if (family
== AF_INET
)
2220 struct sockaddr_in
*sin
= (struct sockaddr_in
*) sa
;
2221 len
= sizeof (sin
->sin_addr
) + 1;
2222 i
= XINT (p
->contents
[--len
]);
2223 sin
->sin_port
= htons (i
);
2224 cp
= (unsigned char *)&sin
->sin_addr
;
2227 else if (STRINGP (address
))
2229 #ifdef HAVE_LOCAL_SOCKETS
2230 if (family
== AF_LOCAL
)
2232 struct sockaddr_un
*sockun
= (struct sockaddr_un
*) sa
;
2233 cp
= SDATA (address
);
2234 for (i
= 0; i
< sizeof (sockun
->sun_path
) && *cp
; i
++)
2235 sockun
->sun_path
[i
] = *cp
++;
2242 p
= XVECTOR (XCDR (address
));
2243 cp
= (unsigned char *)sa
+ sizeof (sa
->sa_family
);
2246 for (i
= 0; i
< len
; i
++)
2247 if (INTEGERP (p
->contents
[i
]))
2248 *cp
++ = XFASTINT (p
->contents
[i
]) & 0xff;
2251 #ifdef DATAGRAM_SOCKETS
2252 DEFUN ("process-datagram-address", Fprocess_datagram_address
, Sprocess_datagram_address
,
2254 doc
: /* Get the current datagram address associated with PROCESS. */)
2256 Lisp_Object process
;
2260 CHECK_PROCESS (process
);
2262 if (!DATAGRAM_CONN_P (process
))
2265 channel
= XINT (XPROCESS (process
)->infd
);
2266 return conv_sockaddr_to_lisp (datagram_address
[channel
].sa
,
2267 datagram_address
[channel
].len
);
2270 DEFUN ("set-process-datagram-address", Fset_process_datagram_address
, Sset_process_datagram_address
,
2272 doc
: /* Set the datagram address for PROCESS to ADDRESS.
2273 Returns nil upon error setting address, ADDRESS otherwise. */)
2275 Lisp_Object process
, address
;
2280 CHECK_PROCESS (process
);
2282 if (!DATAGRAM_CONN_P (process
))
2285 channel
= XINT (XPROCESS (process
)->infd
);
2287 len
= get_lisp_to_sockaddr_size (address
, &family
);
2288 if (datagram_address
[channel
].len
!= len
)
2290 conv_lisp_to_sockaddr (family
, address
, datagram_address
[channel
].sa
, len
);
2296 static struct socket_options
{
2297 /* The name of this option. Should be lowercase version of option
2298 name without SO_ prefix. */
2300 /* Length of name. */
2302 /* Option level SOL_... */
2304 /* Option number SO_... */
2306 enum { SOPT_UNKNOWN
, SOPT_BOOL
, SOPT_INT
, SOPT_STR
, SOPT_LINGER
} opttype
;
2307 } socket_options
[] =
2309 #ifdef SO_BINDTODEVICE
2310 { "bindtodevice", 12, SOL_SOCKET
, SO_BINDTODEVICE
, SOPT_STR
},
2313 { "broadcast", 9, SOL_SOCKET
, SO_BROADCAST
, SOPT_BOOL
},
2316 { "dontroute", 9, SOL_SOCKET
, SO_DONTROUTE
, SOPT_BOOL
},
2319 { "keepalive", 9, SOL_SOCKET
, SO_KEEPALIVE
, SOPT_BOOL
},
2322 { "linger", 6, SOL_SOCKET
, SO_LINGER
, SOPT_LINGER
},
2325 { "oobinline", 9, SOL_SOCKET
, SO_OOBINLINE
, SOPT_BOOL
},
2328 { "priority", 8, SOL_SOCKET
, SO_PRIORITY
, SOPT_INT
},
2331 { "reuseaddr", 9, SOL_SOCKET
, SO_REUSEADDR
, SOPT_BOOL
},
2333 { 0, 0, 0, 0, SOPT_UNKNOWN
}
2336 /* Process list of socket options OPTS on socket S.
2337 Only check if options are supported is S < 0.
2338 If NO_ERROR is non-zero, continue silently if an option
2341 Each element specifies one option. An element is either a string
2342 "OPTION=VALUE" or a cons (OPTION . VALUE) where OPTION is a string
2346 set_socket_options (s
, opts
, no_error
)
2352 opts
= Fcons (opts
, Qnil
);
2354 while (CONSP (opts
))
2359 struct socket_options
*sopt
;
2373 name
= (char *) SDATA (opt
);
2374 else if (SYMBOLP (opt
))
2375 name
= (char *) SDATA (SYMBOL_NAME (opt
));
2377 error ("Mal-formed option list");
2381 if (strncmp (name
, "no", 2) == 0)
2388 for (sopt
= socket_options
; sopt
->name
; sopt
++)
2389 if (strncmp (name
, sopt
->name
, sopt
->nlen
) == 0)
2391 if (name
[sopt
->nlen
] == 0)
2393 if (name
[sopt
->nlen
] == '=')
2395 arg
= name
+ sopt
->nlen
+ 1;
2400 switch (sopt
->opttype
)
2408 optval
= (*arg
== '0' || *arg
== 'n') ? 0 : 1;
2409 else if (INTEGERP (val
))
2410 optval
= XINT (val
) == 0 ? 0 : 1;
2412 optval
= NILP (val
) ? 0 : 1;
2413 ret
= setsockopt (s
, sopt
->optlevel
, sopt
->optnum
,
2414 &optval
, sizeof (optval
));
2423 else if (INTEGERP (val
))
2424 optval
= XINT (val
);
2426 error ("Bad option argument for %s", name
);
2429 ret
= setsockopt (s
, sopt
->optlevel
, sopt
->optnum
,
2430 &optval
, sizeof (optval
));
2440 else if (STRINGP (val
))
2441 arg
= (char *) SDATA (val
);
2442 else if (XSYMBOL (val
))
2443 arg
= (char *) SDATA (SYMBOL_NAME (val
));
2445 error ("Invalid argument to %s option", name
);
2447 ret
= setsockopt (s
, sopt
->optlevel
, sopt
->optnum
,
2454 struct linger linger
;
2457 linger
.l_linger
= 0;
2464 if (*arg
== 'n' || *arg
== 't' || *arg
== 'y')
2465 linger
.l_onoff
= (*arg
== 'n') ? 0 : 1;
2467 linger
.l_linger
= atoi(arg
);
2469 else if (INTEGERP (val
))
2470 linger
.l_linger
= XINT (val
);
2472 linger
.l_onoff
= NILP (val
) ? 0 : 1;
2473 ret
= setsockopt (s
, sopt
->optlevel
, sopt
->optnum
,
2474 &linger
, sizeof (linger
));
2483 error ("Unsupported option: %s", name
);
2485 if (ret
< 0 && ! no_error
)
2486 report_file_error ("Cannot set network option: %s", opt
);
2491 DEFUN ("set-network-process-options",
2492 Fset_network_process_options
, Sset_network_process_options
,
2494 doc
: /* Set one or more options for network process PROCESS.
2495 Each option is either a string "OPT=VALUE" or a cons (OPT . VALUE).
2496 A boolean value is false if it either zero or nil, true otherwise.
2498 The following options are known. Consult the relevant system manual
2499 pages for more information.
2501 bindtodevice=NAME -- bind to interface NAME, or remove binding if nil.
2502 broadcast=BOOL -- Allow send and receive of datagram broadcasts.
2503 dontroute=BOOL -- Only send to directly connected hosts.
2504 keepalive=BOOL -- Send keep-alive messages on network stream.
2505 linger=BOOL or TIMEOUT -- Send queued messages before closing.
2506 oobinline=BOOL -- Place out-of-band data in receive data stream.
2507 priority=INT -- Set protocol defined priority for sent packets.
2508 reuseaddr=BOOL -- Allow reusing a recently used address.
2510 usage: (set-network-process-options PROCESS &rest OPTIONS) */)
2515 Lisp_Object process
;
2519 CHECK_PROCESS (process
);
2520 if (nargs
> 1 && XINT (XPROCESS (process
)->infd
) >= 0)
2522 opts
= Flist (nargs
, args
);
2523 set_socket_options (XINT (XPROCESS (process
)->infd
), opts
, 0);
2528 /* A version of request_sigio suitable for a record_unwind_protect. */
2531 unwind_request_sigio (dummy
)
2534 if (interrupt_input
)
2539 /* Create a network stream/datagram client/server process. Treated
2540 exactly like a normal process when reading and writing. Primary
2541 differences are in status display and process deletion. A network
2542 connection has no PID; you cannot signal it. All you can do is
2543 stop/continue it and deactivate/close it via delete-process */
2545 DEFUN ("make-network-process", Fmake_network_process
, Smake_network_process
,
2547 doc
: /* Create and return a network server or client process.
2549 In Emacs, network connections are represented by process objects, so
2550 input and output work as for subprocesses and `delete-process' closes
2551 a network connection. However, a network process has no process id,
2552 it cannot be signalled, and the status codes are different from normal
2555 Arguments are specified as keyword/argument pairs. The following
2556 arguments are defined:
2558 :name NAME -- NAME is name for process. It is modified if necessary
2561 :buffer BUFFER -- BUFFER is the buffer (or buffer-name) to associate
2562 with the process. Process output goes at end of that buffer, unless
2563 you specify an output stream or filter function to handle the output.
2564 BUFFER may be also nil, meaning that this process is not associated
2567 :host HOST -- HOST is name of the host to connect to, or its IP
2568 address. The symbol `local' specifies the local host. If specified
2569 for a server process, it must be a valid name or address for the local
2570 host, and only clients connecting to that address will be accepted.
2572 :service SERVICE -- SERVICE is name of the service desired, or an
2573 integer specifying a port number to connect to. If SERVICE is t,
2574 a random port number is selected for the server.
2576 :type TYPE -- TYPE is the type of connection. The default (nil) is a
2577 stream type connection, `datagram' creates a datagram type connection.
2579 :family FAMILY -- FAMILY is the address (and protocol) family for the
2580 service specified by HOST and SERVICE. The default address family is
2581 Inet (or IPv4) for the host and port number specified by HOST and
2582 SERVICE. Other address families supported are:
2583 local -- for a local (i.e. UNIX) address specified by SERVICE.
2585 :local ADDRESS -- ADDRESS is the local address used for the connection.
2586 This parameter is ignored when opening a client process. When specified
2587 for a server process, the FAMILY, HOST and SERVICE args are ignored.
2589 :remote ADDRESS -- ADDRESS is the remote partner's address for the
2590 connection. This parameter is ignored when opening a stream server
2591 process. For a datagram server process, it specifies the initial
2592 setting of the remote datagram address. When specified for a client
2593 process, the FAMILY, HOST, and SERVICE args are ignored.
2595 The format of ADDRESS depends on the address family:
2596 - An IPv4 address is represented as an vector of integers [A B C D P]
2597 corresponding to numeric IP address A.B.C.D and port number P.
2598 - A local address is represented as a string with the address in the
2599 local address space.
2600 - An "unsupported family" address is represented by a cons (F . AV)
2601 where F is the family number and AV is a vector containing the socket
2602 address data with one element per address data byte. Do not rely on
2603 this format in portable code, as it may depend on implementation
2604 defined constants, data sizes, and data structure alignment.
2606 :coding CODING -- CODING is coding system for this process.
2608 :options OPTIONS -- Set the specified options for the network process.
2609 See `set-network-process-options' for details.
2611 :nowait BOOL -- If BOOL is non-nil for a stream type client process,
2612 return without waiting for the connection to complete; instead, the
2613 sentinel function will be called with second arg matching "open" (if
2614 successful) or "failed" when the connect completes. Default is to use
2615 a blocking connect (i.e. wait) for stream type connections.
2617 :noquery BOOL -- Query the user unless BOOL is non-nil, and process is
2618 running when emacs is exited.
2620 :stop BOOL -- Start process in the `stopped' state if BOOL non-nil.
2621 In the stopped state, a server process does not accept new
2622 connections, and a client process does not handle incoming traffic.
2623 The stopped state is cleared by `continue-process' and set by
2626 :filter FILTER -- Install FILTER as the process filter.
2628 :filter-multibyte BOOL -- If BOOL is non-nil, strings given to the
2629 process filter are multibyte, otherwise they are unibyte.
2630 If this keyword is not specified, the strings are multibyte iff
2631 `default-enable-multibyte-characters' is non-nil.
2633 :sentinel SENTINEL -- Install SENTINEL as the process sentinel.
2635 :log LOG -- Install LOG as the server process log function. This
2636 function is called when the server accepts a network connection from a
2637 client. The arguments are SERVER, CLIENT, and MESSAGE, where SERVER
2638 is the server process, CLIENT is the new process for the connection,
2639 and MESSAGE is a string.
2641 :plist PLIST -- Install PLIST as the new process' initial plist.
2643 :server BOOL -- if BOOL is non-nil, create a server process for the
2644 specified FAMILY, SERVICE, and connection type (stream or datagram).
2645 Default is a client process.
2647 A server process will listen for and accept connections from
2648 clients. When a client connection is accepted, a new network process
2649 is created for the connection with the following parameters:
2650 - The client's process name is constructed by concatenating the server
2651 process' NAME and a client identification string.
2652 - If the FILTER argument is non-nil, the client process will not get a
2653 separate process buffer; otherwise, the client's process buffer is a newly
2654 created buffer named after the server process' BUFFER name or process
2655 NAME concatenated with the client identification string.
2656 - The connection type and the process filter and sentinel parameters are
2657 inherited from the server process' TYPE, FILTER and SENTINEL.
2658 - The client process' contact info is set according to the client's
2659 addressing information (typically an IP address and a port number).
2660 - The client process' plist is initialized from the server's plist.
2662 Notice that the FILTER and SENTINEL args are never used directly by
2663 the server process. Also, the BUFFER argument is not used directly by
2664 the server process, but via the optional :log function, accepted (and
2665 failed) connections may be logged in the server process' buffer.
2667 The original argument list, modified with the actual connection
2668 information, is available via the `process-contact' function.
2670 usage: (make-network-process &rest ARGS) */)
2676 Lisp_Object contact
;
2677 struct Lisp_Process
*p
;
2678 #ifdef HAVE_GETADDRINFO
2679 struct addrinfo ai
, *res
, *lres
;
2680 struct addrinfo hints
;
2681 char *portstring
, portbuf
[128];
2682 #else /* HAVE_GETADDRINFO */
2683 struct _emacs_addrinfo
2689 struct sockaddr
*ai_addr
;
2690 struct _emacs_addrinfo
*ai_next
;
2692 #endif /* HAVE_GETADDRINFO */
2693 struct sockaddr_in address_in
;
2694 #ifdef HAVE_LOCAL_SOCKETS
2695 struct sockaddr_un address_un
;
2700 int s
= -1, outch
, inch
;
2701 struct gcpro gcpro1
;
2703 int count
= SPECPDL_INDEX ();
2705 Lisp_Object QCaddress
; /* one of QClocal or QCremote */
2707 Lisp_Object name
, buffer
, host
, service
, address
;
2708 Lisp_Object filter
, sentinel
;
2709 int is_non_blocking_client
= 0;
2717 /* Save arguments for process-contact and clone-process. */
2718 contact
= Flist (nargs
, args
);
2722 /* Ensure socket support is loaded if available. */
2723 init_winsock (TRUE
);
2726 /* :type TYPE (nil: stream, datagram */
2727 tem
= Fplist_get (contact
, QCtype
);
2729 socktype
= SOCK_STREAM
;
2730 #ifdef DATAGRAM_SOCKETS
2731 else if (EQ (tem
, Qdatagram
))
2732 socktype
= SOCK_DGRAM
;
2735 error ("Unsupported connection type");
2738 tem
= Fplist_get (contact
, QCserver
);
2741 /* Don't support network sockets when non-blocking mode is
2742 not available, since a blocked Emacs is not useful. */
2743 #if defined(TERM) || (!defined(O_NONBLOCK) && !defined(O_NDELAY))
2744 error ("Network servers not supported");
2750 /* Make QCaddress an alias for :local (server) or :remote (client). */
2751 QCaddress
= is_server
? QClocal
: QCremote
;
2754 if (!is_server
&& socktype
== SOCK_STREAM
2755 && (tem
= Fplist_get (contact
, QCnowait
), !NILP (tem
)))
2757 #ifndef NON_BLOCKING_CONNECT
2758 error ("Non-blocking connect not supported");
2760 is_non_blocking_client
= 1;
2764 name
= Fplist_get (contact
, QCname
);
2765 buffer
= Fplist_get (contact
, QCbuffer
);
2766 filter
= Fplist_get (contact
, QCfilter
);
2767 sentinel
= Fplist_get (contact
, QCsentinel
);
2769 CHECK_STRING (name
);
2772 /* Let's handle TERM before things get complicated ... */
2773 host
= Fplist_get (contact
, QChost
);
2774 CHECK_STRING (host
);
2776 service
= Fplist_get (contact
, QCservice
);
2777 if (INTEGERP (service
))
2778 port
= htons ((unsigned short) XINT (service
));
2781 struct servent
*svc_info
;
2782 CHECK_STRING (service
);
2783 svc_info
= getservbyname (SDATA (service
), "tcp");
2785 error ("Unknown service: %s", SDATA (service
));
2786 port
= svc_info
->s_port
;
2789 s
= connect_server (0);
2791 report_file_error ("error creating socket", Fcons (name
, Qnil
));
2792 send_command (s
, C_PORT
, 0, "%s:%d", SDATA (host
), ntohs (port
));
2793 send_command (s
, C_DUMB
, 1, 0);
2795 #else /* not TERM */
2797 /* Initialize addrinfo structure in case we don't use getaddrinfo. */
2798 ai
.ai_socktype
= socktype
;
2803 /* :local ADDRESS or :remote ADDRESS */
2804 address
= Fplist_get (contact
, QCaddress
);
2805 if (!NILP (address
))
2807 host
= service
= Qnil
;
2809 if (!(ai
.ai_addrlen
= get_lisp_to_sockaddr_size (address
, &family
)))
2810 error ("Malformed :address");
2811 ai
.ai_family
= family
;
2812 ai
.ai_addr
= alloca (ai
.ai_addrlen
);
2813 conv_lisp_to_sockaddr (family
, address
, ai
.ai_addr
, ai
.ai_addrlen
);
2817 /* :family FAMILY -- nil (for Inet), local, or integer. */
2818 tem
= Fplist_get (contact
, QCfamily
);
2820 family
= XINT (tem
);
2825 #ifdef HAVE_LOCAL_SOCKETS
2826 else if (EQ (tem
, Qlocal
))
2831 error ("Unknown address family");
2832 ai
.ai_family
= family
;
2834 /* :service SERVICE -- string, integer (port number), or t (random port). */
2835 service
= Fplist_get (contact
, QCservice
);
2837 #ifdef HAVE_LOCAL_SOCKETS
2838 if (family
== AF_LOCAL
)
2840 /* Host is not used. */
2842 CHECK_STRING (service
);
2843 bzero (&address_un
, sizeof address_un
);
2844 address_un
.sun_family
= AF_LOCAL
;
2845 strncpy (address_un
.sun_path
, SDATA (service
), sizeof address_un
.sun_path
);
2846 ai
.ai_addr
= (struct sockaddr
*) &address_un
;
2847 ai
.ai_addrlen
= sizeof address_un
;
2852 /* :host HOST -- hostname, ip address, or 'local for localhost. */
2853 host
= Fplist_get (contact
, QChost
);
2856 if (EQ (host
, Qlocal
))
2857 host
= build_string ("localhost");
2858 CHECK_STRING (host
);
2861 /* Slow down polling to every ten seconds.
2862 Some kernels have a bug which causes retrying connect to fail
2863 after a connect. Polling can interfere with gethostbyname too. */
2864 #ifdef POLL_FOR_INPUT
2865 if (socktype
== SOCK_STREAM
)
2867 record_unwind_protect (unwind_stop_other_atimers
, Qnil
);
2868 bind_polling_period (10);
2872 #ifdef HAVE_GETADDRINFO
2873 /* If we have a host, use getaddrinfo to resolve both host and service.
2874 Otherwise, use getservbyname to lookup the service. */
2878 /* SERVICE can either be a string or int.
2879 Convert to a C string for later use by getaddrinfo. */
2880 if (EQ (service
, Qt
))
2882 else if (INTEGERP (service
))
2884 sprintf (portbuf
, "%ld", (long) XINT (service
));
2885 portstring
= portbuf
;
2889 CHECK_STRING (service
);
2890 portstring
= SDATA (service
);
2895 memset (&hints
, 0, sizeof (hints
));
2897 hints
.ai_family
= NILP (Fplist_member (contact
, QCfamily
)) ? AF_UNSPEC
: family
;
2898 hints
.ai_socktype
= socktype
;
2899 hints
.ai_protocol
= 0;
2900 ret
= getaddrinfo (SDATA (host
), portstring
, &hints
, &res
);
2902 #ifdef HAVE_GAI_STRERROR
2903 error ("%s/%s %s", SDATA (host
), portstring
, gai_strerror(ret
));
2905 error ("%s/%s getaddrinfo error %d", SDATA (host
), portstring
, ret
);
2911 #endif /* HAVE_GETADDRINFO */
2913 /* We end up here if getaddrinfo is not defined, or in case no hostname
2914 has been specified (e.g. for a local server process). */
2916 if (EQ (service
, Qt
))
2918 else if (INTEGERP (service
))
2919 port
= htons ((unsigned short) XINT (service
));
2922 struct servent
*svc_info
;
2923 CHECK_STRING (service
);
2924 svc_info
= getservbyname (SDATA (service
),
2925 (socktype
== SOCK_DGRAM
? "udp" : "tcp"));
2927 error ("Unknown service: %s", SDATA (service
));
2928 port
= svc_info
->s_port
;
2931 bzero (&address_in
, sizeof address_in
);
2932 address_in
.sin_family
= family
;
2933 address_in
.sin_addr
.s_addr
= INADDR_ANY
;
2934 address_in
.sin_port
= port
;
2936 #ifndef HAVE_GETADDRINFO
2939 struct hostent
*host_info_ptr
;
2941 /* gethostbyname may fail with TRY_AGAIN, but we don't honour that,
2942 as it may `hang' emacs for a very long time. */
2945 host_info_ptr
= gethostbyname (SDATA (host
));
2950 bcopy (host_info_ptr
->h_addr
, (char *) &address_in
.sin_addr
,
2951 host_info_ptr
->h_length
);
2952 family
= host_info_ptr
->h_addrtype
;
2953 address_in
.sin_family
= family
;
2956 /* Attempt to interpret host as numeric inet address */
2958 IN_ADDR numeric_addr
;
2959 numeric_addr
= inet_addr ((char *) SDATA (host
));
2960 if (NUMERIC_ADDR_ERROR
)
2961 error ("Unknown host \"%s\"", SDATA (host
));
2963 bcopy ((char *)&numeric_addr
, (char *) &address_in
.sin_addr
,
2964 sizeof (address_in
.sin_addr
));
2968 #endif /* not HAVE_GETADDRINFO */
2970 ai
.ai_family
= family
;
2971 ai
.ai_addr
= (struct sockaddr
*) &address_in
;
2972 ai
.ai_addrlen
= sizeof address_in
;
2976 /* Kernel bugs (on Ultrix at least) cause lossage (not just EINTR)
2977 when connect is interrupted. So let's not let it get interrupted.
2978 Note we do not turn off polling, because polling is only used
2979 when not interrupt_input, and thus not normally used on the systems
2980 which have this bug. On systems which use polling, there's no way
2981 to quit if polling is turned off. */
2983 && !is_server
&& socktype
== SOCK_STREAM
)
2985 /* Comment from KFS: The original open-network-stream code
2986 didn't unwind protect this, but it seems like the proper
2987 thing to do. In any case, I don't see how it could harm to
2988 do this -- and it makes cleanup (using unbind_to) easier. */
2989 record_unwind_protect (unwind_request_sigio
, Qnil
);
2993 /* Do this in case we never enter the for-loop below. */
2994 count1
= SPECPDL_INDEX ();
2997 for (lres
= res
; lres
; lres
= lres
->ai_next
)
2999 s
= socket (lres
->ai_family
, lres
->ai_socktype
, lres
->ai_protocol
);
3006 #ifdef DATAGRAM_SOCKETS
3007 if (!is_server
&& socktype
== SOCK_DGRAM
)
3009 #endif /* DATAGRAM_SOCKETS */
3011 #ifdef NON_BLOCKING_CONNECT
3012 if (is_non_blocking_client
)
3015 ret
= fcntl (s
, F_SETFL
, O_NONBLOCK
);
3017 ret
= fcntl (s
, F_SETFL
, O_NDELAY
);
3029 /* Make us close S if quit. */
3030 record_unwind_protect (close_file_unwind
, make_number (s
));
3034 /* Configure as a server socket. */
3035 #ifdef HAVE_LOCAL_SOCKETS
3036 if (family
!= AF_LOCAL
)
3040 if (setsockopt (s
, SOL_SOCKET
, SO_REUSEADDR
, &optval
, sizeof optval
))
3041 report_file_error ("Cannot set reuse option on server socket.", Qnil
);
3044 if (bind (s
, lres
->ai_addr
, lres
->ai_addrlen
))
3045 report_file_error ("Cannot bind server socket", Qnil
);
3047 #ifdef HAVE_GETSOCKNAME
3048 if (EQ (service
, Qt
))
3050 struct sockaddr_in sa1
;
3051 int len1
= sizeof (sa1
);
3052 if (getsockname (s
, (struct sockaddr
*)&sa1
, &len1
) == 0)
3054 ((struct sockaddr_in
*)(lres
->ai_addr
))->sin_port
= sa1
.sin_port
;
3055 service
= make_number (ntohs (sa1
.sin_port
));
3056 contact
= Fplist_put (contact
, QCservice
, service
);
3061 if (socktype
== SOCK_STREAM
&& listen (s
, 5))
3062 report_file_error ("Cannot listen on server socket", Qnil
);
3072 /* This turns off all alarm-based interrupts; the
3073 bind_polling_period call above doesn't always turn all the
3074 short-interval ones off, especially if interrupt_input is
3077 It'd be nice to be able to control the connect timeout
3078 though. Would non-blocking connect calls be portable?
3080 This used to be conditioned by HAVE_GETADDRINFO. Why? */
3082 turn_on_atimers (0);
3084 ret
= connect (s
, lres
->ai_addr
, lres
->ai_addrlen
);
3087 turn_on_atimers (1);
3089 if (ret
== 0 || xerrno
== EISCONN
)
3091 /* The unwind-protect will be discarded afterwards.
3092 Likewise for immediate_quit. */
3096 #ifdef NON_BLOCKING_CONNECT
3098 if (is_non_blocking_client
&& xerrno
== EINPROGRESS
)
3102 if (is_non_blocking_client
&& xerrno
== EWOULDBLOCK
)
3110 if (xerrno
== EINTR
)
3112 if (xerrno
== EADDRINUSE
&& retry
< 20)
3114 /* A delay here is needed on some FreeBSD systems,
3115 and it is harmless, since this retrying takes time anyway
3116 and should be infrequent. */
3117 Fsleep_for (make_number (1), Qnil
);
3122 /* Discard the unwind protect closing S. */
3123 specpdl_ptr
= specpdl
+ count1
;
3130 #ifdef DATAGRAM_SOCKETS
3131 if (socktype
== SOCK_DGRAM
)
3133 if (datagram_address
[s
].sa
)
3135 datagram_address
[s
].sa
= (struct sockaddr
*) xmalloc (lres
->ai_addrlen
);
3136 datagram_address
[s
].len
= lres
->ai_addrlen
;
3140 bzero (datagram_address
[s
].sa
, lres
->ai_addrlen
);
3141 if (remote
= Fplist_get (contact
, QCremote
), !NILP (remote
))
3144 rlen
= get_lisp_to_sockaddr_size (remote
, &rfamily
);
3145 if (rfamily
== lres
->ai_family
&& rlen
== lres
->ai_addrlen
)
3146 conv_lisp_to_sockaddr (rfamily
, remote
,
3147 datagram_address
[s
].sa
, rlen
);
3151 bcopy (lres
->ai_addr
, datagram_address
[s
].sa
, lres
->ai_addrlen
);
3154 contact
= Fplist_put (contact
, QCaddress
,
3155 conv_sockaddr_to_lisp (lres
->ai_addr
, lres
->ai_addrlen
));
3156 #ifdef HAVE_GETSOCKNAME
3159 struct sockaddr_in sa1
;
3160 int len1
= sizeof (sa1
);
3161 if (getsockname (s
, (struct sockaddr
*)&sa1
, &len1
) == 0)
3162 contact
= Fplist_put (contact
, QClocal
,
3163 conv_sockaddr_to_lisp (&sa1
, len1
));
3168 #ifdef HAVE_GETADDRINFO
3175 /* Discard the unwind protect for closing S, if any. */
3176 specpdl_ptr
= specpdl
+ count1
;
3178 /* Unwind bind_polling_period and request_sigio. */
3179 unbind_to (count
, Qnil
);
3183 /* If non-blocking got this far - and failed - assume non-blocking is
3184 not supported after all. This is probably a wrong assumption, but
3185 the normal blocking calls to open-network-stream handles this error
3187 if (is_non_blocking_client
)
3192 report_file_error ("make server process failed", contact
);
3194 report_file_error ("make client process failed", contact
);
3197 tem
= Fplist_get (contact
, QCoptions
);
3199 set_socket_options (s
, tem
, 1);
3201 #endif /* not TERM */
3207 buffer
= Fget_buffer_create (buffer
);
3208 proc
= make_process (name
);
3210 chan_process
[inch
] = proc
;
3213 fcntl (inch
, F_SETFL
, O_NONBLOCK
);
3216 fcntl (inch
, F_SETFL
, O_NDELAY
);
3220 p
= XPROCESS (proc
);
3222 p
->childp
= contact
;
3223 p
->plist
= Fcopy_sequence (Fplist_get (contact
, QCplist
));
3226 p
->sentinel
= sentinel
;
3228 p
->filter_multibyte
= buffer_defaults
.enable_multibyte_characters
;
3229 /* Override the above only if :filter-multibyte is specified. */
3230 if (! NILP (Fplist_member (contact
, QCfilter_multibyte
)))
3231 p
->filter_multibyte
= Fplist_get (contact
, QCfilter_multibyte
);
3232 p
->log
= Fplist_get (contact
, QClog
);
3233 if (tem
= Fplist_get (contact
, QCnoquery
), !NILP (tem
))
3234 p
->kill_without_query
= Qt
;
3235 if ((tem
= Fplist_get (contact
, QCstop
), !NILP (tem
)))
3238 XSETINT (p
->infd
, inch
);
3239 XSETINT (p
->outfd
, outch
);
3240 if (is_server
&& socktype
== SOCK_STREAM
)
3241 p
->status
= Qlisten
;
3243 #ifdef NON_BLOCKING_CONNECT
3244 if (is_non_blocking_client
)
3246 /* We may get here if connect did succeed immediately. However,
3247 in that case, we still need to signal this like a non-blocking
3249 p
->status
= Qconnect
;
3250 if (!FD_ISSET (inch
, &connect_wait_mask
))
3252 FD_SET (inch
, &connect_wait_mask
);
3253 num_pending_connects
++;
3258 /* A server may have a client filter setting of Qt, but it must
3259 still listen for incoming connects unless it is stopped. */
3260 if ((!EQ (p
->filter
, Qt
) && !EQ (p
->command
, Qt
))
3261 || (EQ (p
->status
, Qlisten
) && NILP (p
->command
)))
3263 FD_SET (inch
, &input_wait_mask
);
3264 FD_SET (inch
, &non_keyboard_wait_mask
);
3267 if (inch
> max_process_desc
)
3268 max_process_desc
= inch
;
3270 tem
= Fplist_member (contact
, QCcoding
);
3271 if (!NILP (tem
) && (!CONSP (tem
) || !CONSP (XCDR (tem
))))
3272 tem
= Qnil
; /* No error message (too late!). */
3275 /* Setup coding systems for communicating with the network stream. */
3276 struct gcpro gcpro1
;
3277 /* Qt denotes we have not yet called Ffind_operation_coding_system. */
3278 Lisp_Object coding_systems
= Qt
;
3279 Lisp_Object args
[5], val
;
3282 val
= XCAR (XCDR (tem
));
3283 else if (!NILP (Vcoding_system_for_read
))
3284 val
= Vcoding_system_for_read
;
3285 else if ((!NILP (buffer
) && NILP (XBUFFER (buffer
)->enable_multibyte_characters
))
3286 || (NILP (buffer
) && NILP (buffer_defaults
.enable_multibyte_characters
)))
3287 /* We dare not decode end-of-line format by setting VAL to
3288 Qraw_text, because the existing Emacs Lisp libraries
3289 assume that they receive bare code including a sequene of
3294 if (NILP (host
) || NILP (service
))
3295 coding_systems
= Qnil
;
3298 args
[0] = Qopen_network_stream
, args
[1] = name
,
3299 args
[2] = buffer
, args
[3] = host
, args
[4] = service
;
3301 coding_systems
= Ffind_operation_coding_system (5, args
);
3304 if (CONSP (coding_systems
))
3305 val
= XCAR (coding_systems
);
3306 else if (CONSP (Vdefault_process_coding_system
))
3307 val
= XCAR (Vdefault_process_coding_system
);
3311 p
->decode_coding_system
= val
;
3314 val
= XCAR (XCDR (tem
));
3315 else if (!NILP (Vcoding_system_for_write
))
3316 val
= Vcoding_system_for_write
;
3317 else if (NILP (current_buffer
->enable_multibyte_characters
))
3321 if (EQ (coding_systems
, Qt
))
3323 if (NILP (host
) || NILP (service
))
3324 coding_systems
= Qnil
;
3327 args
[0] = Qopen_network_stream
, args
[1] = name
,
3328 args
[2] = buffer
, args
[3] = host
, args
[4] = service
;
3330 coding_systems
= Ffind_operation_coding_system (5, args
);
3334 if (CONSP (coding_systems
))
3335 val
= XCDR (coding_systems
);
3336 else if (CONSP (Vdefault_process_coding_system
))
3337 val
= XCDR (Vdefault_process_coding_system
);
3341 p
->encode_coding_system
= val
;
3343 setup_process_coding_systems (proc
);
3345 p
->decoding_buf
= make_uninit_string (0);
3346 p
->decoding_carryover
= make_number (0);
3347 p
->encoding_buf
= make_uninit_string (0);
3348 p
->encoding_carryover
= make_number (0);
3350 p
->inherit_coding_system_flag
3351 = (!NILP (tem
) || NILP (buffer
) || !inherit_process_coding_system
3357 #endif /* HAVE_SOCKETS */
3360 deactivate_process (proc
)
3363 register int inchannel
, outchannel
;
3364 register struct Lisp_Process
*p
= XPROCESS (proc
);
3366 inchannel
= XINT (p
->infd
);
3367 outchannel
= XINT (p
->outfd
);
3371 /* Beware SIGCHLD hereabouts. */
3372 flush_pending_output (inchannel
);
3375 VMS_PROC_STUFF
*get_vms_process_pointer (), *vs
;
3376 sys$
dassgn (outchannel
);
3377 vs
= get_vms_process_pointer (p
->pid
);
3379 give_back_vms_process_stuff (vs
);
3382 emacs_close (inchannel
);
3383 if (outchannel
>= 0 && outchannel
!= inchannel
)
3384 emacs_close (outchannel
);
3387 XSETINT (p
->infd
, -1);
3388 XSETINT (p
->outfd
, -1);
3389 #ifdef DATAGRAM_SOCKETS
3390 if (DATAGRAM_CHAN_P (inchannel
))
3392 xfree (datagram_address
[inchannel
].sa
);
3393 datagram_address
[inchannel
].sa
= 0;
3394 datagram_address
[inchannel
].len
= 0;
3397 chan_process
[inchannel
] = Qnil
;
3398 FD_CLR (inchannel
, &input_wait_mask
);
3399 FD_CLR (inchannel
, &non_keyboard_wait_mask
);
3400 if (FD_ISSET (inchannel
, &connect_wait_mask
))
3402 FD_CLR (inchannel
, &connect_wait_mask
);
3403 if (--num_pending_connects
< 0)
3406 if (inchannel
== max_process_desc
)
3409 /* We just closed the highest-numbered process input descriptor,
3410 so recompute the highest-numbered one now. */
3411 max_process_desc
= 0;
3412 for (i
= 0; i
< MAXDESC
; i
++)
3413 if (!NILP (chan_process
[i
]))
3414 max_process_desc
= i
;
3419 /* Close all descriptors currently in use for communication
3420 with subprocess. This is used in a newly-forked subprocess
3421 to get rid of irrelevant descriptors. */
3424 close_process_descs ()
3428 for (i
= 0; i
< MAXDESC
; i
++)
3430 Lisp_Object process
;
3431 process
= chan_process
[i
];
3432 if (!NILP (process
))
3434 int in
= XINT (XPROCESS (process
)->infd
);
3435 int out
= XINT (XPROCESS (process
)->outfd
);
3438 if (out
>= 0 && in
!= out
)
3445 DEFUN ("accept-process-output", Faccept_process_output
, Saccept_process_output
,
3447 doc
: /* Allow any pending output from subprocesses to be read by Emacs.
3448 It is read into the process' buffers or given to their filter functions.
3449 Non-nil arg PROCESS means do not return until some output has been received
3451 Non-nil second arg TIMEOUT and third arg TIMEOUT-MSECS are number of
3452 seconds and microseconds to wait; return after that much time whether
3453 or not there is input.
3454 Return non-nil iff we received any output before the timeout expired. */)
3455 (process
, timeout
, timeout_msecs
)
3456 register Lisp_Object process
, timeout
, timeout_msecs
;
3461 if (! NILP (process
))
3462 CHECK_PROCESS (process
);
3464 if (! NILP (timeout_msecs
))
3466 CHECK_NUMBER (timeout_msecs
);
3467 useconds
= XINT (timeout_msecs
);
3468 if (!INTEGERP (timeout
))
3469 XSETINT (timeout
, 0);
3472 int carry
= useconds
/ 1000000;
3474 XSETINT (timeout
, XINT (timeout
) + carry
);
3475 useconds
-= carry
* 1000000;
3477 /* I think this clause is necessary because C doesn't
3478 guarantee a particular rounding direction for negative
3482 XSETINT (timeout
, XINT (timeout
) - 1);
3483 useconds
+= 1000000;
3490 if (! NILP (timeout
))
3492 CHECK_NUMBER (timeout
);
3493 seconds
= XINT (timeout
);
3494 if (seconds
< 0 || (seconds
== 0 && useconds
== 0))
3506 XSETFASTINT (process
, 0);
3509 (wait_reading_process_input (seconds
, useconds
, process
, 0)
3513 /* Accept a connection for server process SERVER on CHANNEL. */
3515 static int connect_counter
= 0;
3518 server_accept_connection (server
, channel
)
3522 Lisp_Object proc
, caller
, name
, buffer
;
3523 Lisp_Object contact
, host
, service
;
3524 struct Lisp_Process
*ps
= XPROCESS (server
);
3525 struct Lisp_Process
*p
;
3529 struct sockaddr_in in
;
3530 #ifdef HAVE_LOCAL_SOCKETS
3531 struct sockaddr_un un
;
3534 int len
= sizeof saddr
;
3536 s
= accept (channel
, &saddr
.sa
, &len
);
3545 if (code
== EWOULDBLOCK
)
3549 if (!NILP (ps
->log
))
3550 call3 (ps
->log
, server
, Qnil
,
3551 concat3 (build_string ("accept failed with code"),
3552 Fnumber_to_string (make_number (code
)),
3553 build_string ("\n")));
3559 /* Setup a new process to handle the connection. */
3561 /* Generate a unique identification of the caller, and build contact
3562 information for this process. */
3565 switch (saddr
.sa
.sa_family
)
3569 Lisp_Object args
[5];
3570 unsigned char *ip
= (unsigned char *)&saddr
.in
.sin_addr
.s_addr
;
3571 args
[0] = build_string ("%d.%d.%d.%d");
3572 args
[1] = make_number (*ip
++);
3573 args
[2] = make_number (*ip
++);
3574 args
[3] = make_number (*ip
++);
3575 args
[4] = make_number (*ip
++);
3576 host
= Fformat (5, args
);
3577 service
= make_number (ntohs (saddr
.in
.sin_port
));
3579 args
[0] = build_string (" <%s:%d>");
3582 caller
= Fformat (3, args
);
3586 #ifdef HAVE_LOCAL_SOCKETS
3590 caller
= Fnumber_to_string (make_number (connect_counter
));
3591 caller
= concat3 (build_string (" <*"), caller
, build_string ("*>"));
3595 /* Create a new buffer name for this process if it doesn't have a
3596 filter. The new buffer name is based on the buffer name or
3597 process name of the server process concatenated with the caller
3600 if (!NILP (ps
->filter
) && !EQ (ps
->filter
, Qt
))
3604 buffer
= ps
->buffer
;
3606 buffer
= Fbuffer_name (buffer
);
3611 buffer
= concat2 (buffer
, caller
);
3612 buffer
= Fget_buffer_create (buffer
);
3616 /* Generate a unique name for the new server process. Combine the
3617 server process name with the caller identification. */
3619 name
= concat2 (ps
->name
, caller
);
3620 proc
= make_process (name
);
3622 chan_process
[s
] = proc
;
3625 fcntl (s
, F_SETFL
, O_NONBLOCK
);
3628 fcntl (s
, F_SETFL
, O_NDELAY
);
3632 p
= XPROCESS (proc
);
3634 /* Build new contact information for this setup. */
3635 contact
= Fcopy_sequence (ps
->childp
);
3636 contact
= Fplist_put (contact
, QCserver
, Qnil
);
3637 contact
= Fplist_put (contact
, QChost
, host
);
3638 if (!NILP (service
))
3639 contact
= Fplist_put (contact
, QCservice
, service
);
3640 contact
= Fplist_put (contact
, QCremote
,
3641 conv_sockaddr_to_lisp (&saddr
.sa
, len
));
3642 #ifdef HAVE_GETSOCKNAME
3644 if (getsockname (s
, &saddr
.sa
, &len
) == 0)
3645 contact
= Fplist_put (contact
, QClocal
,
3646 conv_sockaddr_to_lisp (&saddr
.sa
, len
));
3649 p
->childp
= contact
;
3650 p
->plist
= Fcopy_sequence (ps
->plist
);
3653 p
->sentinel
= ps
->sentinel
;
3654 p
->filter
= ps
->filter
;
3657 XSETINT (p
->infd
, s
);
3658 XSETINT (p
->outfd
, s
);
3661 /* Client processes for accepted connections are not stopped initially. */
3662 if (!EQ (p
->filter
, Qt
))
3664 FD_SET (s
, &input_wait_mask
);
3665 FD_SET (s
, &non_keyboard_wait_mask
);
3668 if (s
> max_process_desc
)
3669 max_process_desc
= s
;
3671 /* Setup coding system for new process based on server process.
3672 This seems to be the proper thing to do, as the coding system
3673 of the new process should reflect the settings at the time the
3674 server socket was opened; not the current settings. */
3676 p
->decode_coding_system
= ps
->decode_coding_system
;
3677 p
->encode_coding_system
= ps
->encode_coding_system
;
3678 setup_process_coding_systems (proc
);
3680 p
->decoding_buf
= make_uninit_string (0);
3681 p
->decoding_carryover
= make_number (0);
3682 p
->encoding_buf
= make_uninit_string (0);
3683 p
->encoding_carryover
= make_number (0);
3685 p
->inherit_coding_system_flag
3686 = (NILP (buffer
) ? Qnil
: ps
->inherit_coding_system_flag
);
3688 if (!NILP (ps
->log
))
3689 call3 (ps
->log
, server
, proc
,
3690 concat3 (build_string ("accept from "),
3691 (STRINGP (host
) ? host
: build_string ("-")),
3692 build_string ("\n")));
3694 if (!NILP (p
->sentinel
))
3695 exec_sentinel (proc
,
3696 concat3 (build_string ("open from "),
3697 (STRINGP (host
) ? host
: build_string ("-")),
3698 build_string ("\n")));
3701 /* This variable is different from waiting_for_input in keyboard.c.
3702 It is used to communicate to a lisp process-filter/sentinel (via the
3703 function Fwaiting_for_user_input_p below) whether emacs was waiting
3704 for user-input when that process-filter was called.
3705 waiting_for_input cannot be used as that is by definition 0 when
3706 lisp code is being evalled.
3707 This is also used in record_asynch_buffer_change.
3708 For that purpose, this must be 0
3709 when not inside wait_reading_process_input. */
3710 static int waiting_for_user_input_p
;
3712 /* This is here so breakpoints can be put on it. */
3714 wait_reading_process_input_1 ()
3718 /* Read and dispose of subprocess output while waiting for timeout to
3719 elapse and/or keyboard input to be available.
3722 timeout in seconds, or
3723 zero for no limit, or
3724 -1 means gobble data immediately available but don't wait for any.
3727 an additional duration to wait, measured in microseconds.
3728 If this is nonzero and time_limit is 0, then the timeout
3729 consists of MICROSECS only.
3731 READ_KBD is a lisp value:
3732 0 to ignore keyboard input, or
3733 1 to return when input is available, or
3734 -1 meaning caller will actually read the input, so don't throw to
3735 the quit handler, or
3736 a cons cell, meaning wait until its car is non-nil
3737 (and gobble terminal input into the buffer if any arrives), or
3738 a process object, meaning wait until something arrives from that
3739 process. The return value is true iff we read some input from
3742 DO_DISPLAY != 0 means redisplay should be done to show subprocess
3743 output that arrives.
3745 If READ_KBD is a pointer to a struct Lisp_Process, then the
3746 function returns true iff we received input from that process
3747 before the timeout elapsed.
3748 Otherwise, return true iff we received input from any process. */
3751 wait_reading_process_input (time_limit
, microsecs
, read_kbd
, do_display
)
3752 int time_limit
, microsecs
;
3753 Lisp_Object read_kbd
;
3756 register int channel
, nfds
;
3757 static SELECT_TYPE Available
;
3758 static SELECT_TYPE Connecting
;
3759 int check_connect
, no_avail
;
3762 EMACS_TIME timeout
, end_time
;
3763 int wait_channel
= -1;
3764 struct Lisp_Process
*wait_proc
= 0;
3765 int got_some_input
= 0;
3766 /* Either nil or a cons cell, the car of which is of interest and
3767 may be changed outside of this routine. */
3768 Lisp_Object wait_for_cell
= Qnil
;
3770 FD_ZERO (&Available
);
3771 FD_ZERO (&Connecting
);
3773 /* If read_kbd is a process to watch, set wait_proc and wait_channel
3775 if (PROCESSP (read_kbd
))
3777 wait_proc
= XPROCESS (read_kbd
);
3778 wait_channel
= XINT (wait_proc
->infd
);
3779 XSETFASTINT (read_kbd
, 0);
3782 /* If waiting for non-nil in a cell, record where. */
3783 if (CONSP (read_kbd
))
3785 wait_for_cell
= read_kbd
;
3786 XSETFASTINT (read_kbd
, 0);
3789 waiting_for_user_input_p
= XINT (read_kbd
);
3791 /* Since we may need to wait several times,
3792 compute the absolute time to return at. */
3793 if (time_limit
|| microsecs
)
3795 EMACS_GET_TIME (end_time
);
3796 EMACS_SET_SECS_USECS (timeout
, time_limit
, microsecs
);
3797 EMACS_ADD_TIME (end_time
, end_time
, timeout
);
3799 #ifdef POLL_INTERRUPTED_SYS_CALL
3800 /* AlainF 5-Jul-1996
3801 HP-UX 10.10 seem to have problems with signals coming in
3802 Causes "poll: interrupted system call" messages when Emacs is run
3804 Turn off periodic alarms (in case they are in use),
3805 and then turn off any other atimers. */
3807 turn_on_atimers (0);
3808 #endif /* POLL_INTERRUPTED_SYS_CALL */
3812 int timeout_reduced_for_timers
= 0;
3814 /* If calling from keyboard input, do not quit
3815 since we want to return C-g as an input character.
3816 Otherwise, do pending quit if requested. */
3817 if (XINT (read_kbd
) >= 0)
3820 /* Exit now if the cell we're waiting for became non-nil. */
3821 if (! NILP (wait_for_cell
) && ! NILP (XCAR (wait_for_cell
)))
3824 /* Compute time from now till when time limit is up */
3825 /* Exit if already run out */
3826 if (time_limit
== -1)
3828 /* -1 specified for timeout means
3829 gobble output available now
3830 but don't wait at all. */
3832 EMACS_SET_SECS_USECS (timeout
, 0, 0);
3834 else if (time_limit
|| microsecs
)
3836 EMACS_GET_TIME (timeout
);
3837 EMACS_SUB_TIME (timeout
, end_time
, timeout
);
3838 if (EMACS_TIME_NEG_P (timeout
))
3843 EMACS_SET_SECS_USECS (timeout
, 100000, 0);
3846 /* Normally we run timers here.
3847 But not if wait_for_cell; in those cases,
3848 the wait is supposed to be short,
3849 and those callers cannot handle running arbitrary Lisp code here. */
3850 if (NILP (wait_for_cell
))
3852 EMACS_TIME timer_delay
;
3856 int old_timers_run
= timers_run
;
3857 struct buffer
*old_buffer
= current_buffer
;
3859 timer_delay
= timer_check (1);
3861 /* If a timer has run, this might have changed buffers
3862 an alike. Make read_key_sequence aware of that. */
3863 if (timers_run
!= old_timers_run
3864 && old_buffer
!= current_buffer
3865 && waiting_for_user_input_p
== -1)
3866 record_asynch_buffer_change ();
3868 if (timers_run
!= old_timers_run
&& do_display
)
3869 /* We must retry, since a timer may have requeued itself
3870 and that could alter the time_delay. */
3871 redisplay_preserve_echo_area (9);
3875 while (!detect_input_pending ());
3877 /* If there is unread keyboard input, also return. */
3878 if (XINT (read_kbd
) != 0
3879 && requeued_events_pending_p ())
3882 if (! EMACS_TIME_NEG_P (timer_delay
) && time_limit
!= -1)
3884 EMACS_TIME difference
;
3885 EMACS_SUB_TIME (difference
, timer_delay
, timeout
);
3886 if (EMACS_TIME_NEG_P (difference
))
3888 timeout
= timer_delay
;
3889 timeout_reduced_for_timers
= 1;
3892 /* If time_limit is -1, we are not going to wait at all. */
3893 else if (time_limit
!= -1)
3895 /* This is so a breakpoint can be put here. */
3896 wait_reading_process_input_1 ();
3900 /* Cause C-g and alarm signals to take immediate action,
3901 and cause input available signals to zero out timeout.
3903 It is important that we do this before checking for process
3904 activity. If we get a SIGCHLD after the explicit checks for
3905 process activity, timeout is the only way we will know. */
3906 if (XINT (read_kbd
) < 0)
3907 set_waiting_for_input (&timeout
);
3909 /* If status of something has changed, and no input is
3910 available, notify the user of the change right away. After
3911 this explicit check, we'll let the SIGCHLD handler zap
3912 timeout to get our attention. */
3913 if (update_tick
!= process_tick
&& do_display
)
3915 SELECT_TYPE Atemp
, Ctemp
;
3917 Atemp
= input_wait_mask
;
3919 /* On Mac OS X, the SELECT system call always says input is
3920 present (for reading) at stdin, even when none is. This
3921 causes the call to SELECT below to return 1 and
3922 status_notify not to be called. As a result output of
3923 subprocesses are incorrectly discarded. */
3926 Ctemp
= connect_wait_mask
;
3927 EMACS_SET_SECS_USECS (timeout
, 0, 0);
3928 if ((select (max (max_process_desc
, max_keyboard_desc
) + 1,
3930 (num_pending_connects
> 0 ? &Ctemp
: (SELECT_TYPE
*)0),
3931 (SELECT_TYPE
*)0, &timeout
)
3934 /* It's okay for us to do this and then continue with
3935 the loop, since timeout has already been zeroed out. */
3936 clear_waiting_for_input ();
3941 /* Don't wait for output from a non-running process. Just
3942 read whatever data has already been received. */
3943 if (wait_proc
!= 0 && !NILP (wait_proc
->raw_status_low
))
3944 update_status (wait_proc
);
3946 && ! EQ (wait_proc
->status
, Qrun
)
3947 && ! EQ (wait_proc
->status
, Qconnect
))
3949 int nread
, total_nread
= 0;
3951 clear_waiting_for_input ();
3952 XSETPROCESS (proc
, wait_proc
);
3954 /* Read data from the process, until we exhaust it. */
3955 while (XINT (wait_proc
->infd
) >= 0)
3957 nread
= read_process_output (proc
, XINT (wait_proc
->infd
));
3963 total_nread
+= nread
;
3965 else if (nread
== -1 && EIO
== errno
)
3969 else if (nread
== -1 && EAGAIN
== errno
)
3973 else if (nread
== -1 && EWOULDBLOCK
== errno
)
3977 if (total_nread
> 0 && do_display
)
3978 redisplay_preserve_echo_area (10);
3983 /* Wait till there is something to do */
3985 if (!NILP (wait_for_cell
))
3987 Available
= non_process_wait_mask
;
3992 if (! XINT (read_kbd
))
3993 Available
= non_keyboard_wait_mask
;
3995 Available
= input_wait_mask
;
3996 check_connect
= (num_pending_connects
> 0);
3999 /* If frame size has changed or the window is newly mapped,
4000 redisplay now, before we start to wait. There is a race
4001 condition here; if a SIGIO arrives between now and the select
4002 and indicates that a frame is trashed, the select may block
4003 displaying a trashed screen. */
4004 if (frame_garbaged
&& do_display
)
4006 clear_waiting_for_input ();
4007 redisplay_preserve_echo_area (11);
4008 if (XINT (read_kbd
) < 0)
4009 set_waiting_for_input (&timeout
);
4013 if (XINT (read_kbd
) && detect_input_pending ())
4021 Connecting
= connect_wait_mask
;
4022 nfds
= select (max (max_process_desc
, max_keyboard_desc
) + 1,
4024 (check_connect
? &Connecting
: (SELECT_TYPE
*)0),
4025 (SELECT_TYPE
*)0, &timeout
);
4030 /* Make C-g and alarm signals set flags again */
4031 clear_waiting_for_input ();
4033 /* If we woke up due to SIGWINCH, actually change size now. */
4034 do_pending_window_change (0);
4036 if (time_limit
&& nfds
== 0 && ! timeout_reduced_for_timers
)
4037 /* We wanted the full specified time, so return now. */
4041 if (xerrno
== EINTR
)
4044 /* Ultrix select seems to return ENOMEM when it is
4045 interrupted. Treat it just like EINTR. Bleah. Note
4046 that we want to test for the "ultrix" CPP symbol, not
4047 "__ultrix__"; the latter is only defined under GCC, but
4048 not by DEC's bundled CC. -JimB */
4049 else if (xerrno
== ENOMEM
)
4053 /* This happens for no known reason on ALLIANT.
4054 I am guessing that this is the right response. -- RMS. */
4055 else if (xerrno
== EFAULT
)
4058 else if (xerrno
== EBADF
)
4061 /* AIX doesn't handle PTY closure the same way BSD does. On AIX,
4062 the child's closure of the pts gives the parent a SIGHUP, and
4063 the ptc file descriptor is automatically closed,
4064 yielding EBADF here or at select() call above.
4065 So, SIGHUP is ignored (see def of PTY_TTY_NAME_SPRINTF
4066 in m/ibmrt-aix.h), and here we just ignore the select error.
4067 Cleanup occurs c/o status_notify after SIGCLD. */
4068 no_avail
= 1; /* Cannot depend on values returned */
4074 error ("select error: %s", emacs_strerror (xerrno
));
4079 FD_ZERO (&Available
);
4083 #if defined(sun) && !defined(USG5_4)
4084 if (nfds
> 0 && keyboard_bit_set (&Available
)
4086 /* System sometimes fails to deliver SIGIO.
4088 David J. Mackenzie says that Emacs doesn't compile under
4089 Solaris if this code is enabled, thus the USG5_4 in the CPP
4090 conditional. "I haven't noticed any ill effects so far.
4091 If you find a Solaris expert somewhere, they might know
4093 kill (getpid (), SIGIO
);
4096 #if 0 /* When polling is used, interrupt_input is 0,
4097 so get_input_pending should read the input.
4098 So this should not be needed. */
4099 /* If we are using polling for input,
4100 and we see input available, make it get read now.
4101 Otherwise it might not actually get read for a second.
4102 And on hpux, since we turn off polling in wait_reading_process_input,
4103 it might never get read at all if we don't spend much time
4104 outside of wait_reading_process_input. */
4105 if (XINT (read_kbd
) && interrupt_input
4106 && keyboard_bit_set (&Available
)
4107 && input_polling_used ())
4108 kill (getpid (), SIGALRM
);
4111 /* Check for keyboard input */
4112 /* If there is any, return immediately
4113 to give it higher priority than subprocesses */
4115 if (XINT (read_kbd
) != 0)
4117 int old_timers_run
= timers_run
;
4118 struct buffer
*old_buffer
= current_buffer
;
4121 if (detect_input_pending_run_timers (do_display
))
4123 swallow_events (do_display
);
4124 if (detect_input_pending_run_timers (do_display
))
4128 /* If a timer has run, this might have changed buffers
4129 an alike. Make read_key_sequence aware of that. */
4130 if (timers_run
!= old_timers_run
4131 && waiting_for_user_input_p
== -1
4132 && old_buffer
!= current_buffer
)
4133 record_asynch_buffer_change ();
4139 /* If there is unread keyboard input, also return. */
4140 if (XINT (read_kbd
) != 0
4141 && requeued_events_pending_p ())
4144 /* If we are not checking for keyboard input now,
4145 do process events (but don't run any timers).
4146 This is so that X events will be processed.
4147 Otherwise they may have to wait until polling takes place.
4148 That would causes delays in pasting selections, for example.
4150 (We used to do this only if wait_for_cell.) */
4151 if (XINT (read_kbd
) == 0 && detect_input_pending ())
4153 swallow_events (do_display
);
4154 #if 0 /* Exiting when read_kbd doesn't request that seems wrong, though. */
4155 if (detect_input_pending ())
4160 /* Exit now if the cell we're waiting for became non-nil. */
4161 if (! NILP (wait_for_cell
) && ! NILP (XCAR (wait_for_cell
)))
4165 /* If we think we have keyboard input waiting, but didn't get SIGIO,
4166 go read it. This can happen with X on BSD after logging out.
4167 In that case, there really is no input and no SIGIO,
4168 but select says there is input. */
4170 if (XINT (read_kbd
) && interrupt_input
4171 && keyboard_bit_set (&Available
))
4172 kill (getpid (), SIGIO
);
4176 got_some_input
|= nfds
> 0;
4178 /* If checking input just got us a size-change event from X,
4179 obey it now if we should. */
4180 if (XINT (read_kbd
) || ! NILP (wait_for_cell
))
4181 do_pending_window_change (0);
4183 /* Check for data from a process. */
4184 if (no_avail
|| nfds
== 0)
4187 /* Really FIRST_PROC_DESC should be 0 on Unix,
4188 but this is safer in the short run. */
4189 for (channel
= 0; channel
<= max_process_desc
; channel
++)
4191 if (FD_ISSET (channel
, &Available
)
4192 && FD_ISSET (channel
, &non_keyboard_wait_mask
))
4196 /* If waiting for this channel, arrange to return as
4197 soon as no more input to be processed. No more
4199 if (wait_channel
== channel
)
4205 proc
= chan_process
[channel
];
4209 /* If this is a server stream socket, accept connection. */
4210 if (EQ (XPROCESS (proc
)->status
, Qlisten
))
4212 server_accept_connection (proc
, channel
);
4216 /* Read data from the process, starting with our
4217 buffered-ahead character if we have one. */
4219 nread
= read_process_output (proc
, channel
);
4222 /* Since read_process_output can run a filter,
4223 which can call accept-process-output,
4224 don't try to read from any other processes
4225 before doing the select again. */
4226 FD_ZERO (&Available
);
4229 redisplay_preserve_echo_area (12);
4232 else if (nread
== -1 && errno
== EWOULDBLOCK
)
4235 /* ISC 4.1 defines both EWOULDBLOCK and O_NONBLOCK,
4236 and Emacs uses O_NONBLOCK, so what we get is EAGAIN. */
4238 else if (nread
== -1 && errno
== EAGAIN
)
4242 else if (nread
== -1 && errno
== EAGAIN
)
4244 /* Note that we cannot distinguish between no input
4245 available now and a closed pipe.
4246 With luck, a closed pipe will be accompanied by
4247 subprocess termination and SIGCHLD. */
4248 else if (nread
== 0 && !NETCONN_P (proc
))
4250 #endif /* O_NDELAY */
4251 #endif /* O_NONBLOCK */
4253 /* On some OSs with ptys, when the process on one end of
4254 a pty exits, the other end gets an error reading with
4255 errno = EIO instead of getting an EOF (0 bytes read).
4256 Therefore, if we get an error reading and errno =
4257 EIO, just continue, because the child process has
4258 exited and should clean itself up soon (e.g. when we
4261 However, it has been known to happen that the SIGCHLD
4262 got lost. So raise the signl again just in case.
4264 else if (nread
== -1 && errno
== EIO
)
4265 kill (getpid (), SIGCHLD
);
4266 #endif /* HAVE_PTYS */
4267 /* If we can detect process termination, don't consider the process
4268 gone just because its pipe is closed. */
4270 else if (nread
== 0 && !NETCONN_P (proc
))
4275 /* Preserve status of processes already terminated. */
4276 XSETINT (XPROCESS (proc
)->tick
, ++process_tick
);
4277 deactivate_process (proc
);
4278 if (!NILP (XPROCESS (proc
)->raw_status_low
))
4279 update_status (XPROCESS (proc
));
4280 if (EQ (XPROCESS (proc
)->status
, Qrun
))
4281 XPROCESS (proc
)->status
4282 = Fcons (Qexit
, Fcons (make_number (256), Qnil
));
4285 #ifdef NON_BLOCKING_CONNECT
4286 if (check_connect
&& FD_ISSET (channel
, &Connecting
))
4288 struct Lisp_Process
*p
;
4290 FD_CLR (channel
, &connect_wait_mask
);
4291 if (--num_pending_connects
< 0)
4294 proc
= chan_process
[channel
];
4298 p
= XPROCESS (proc
);
4301 /* getsockopt(,,SO_ERROR,,) is said to hang on some systems.
4302 So only use it on systems where it is known to work. */
4304 int xlen
= sizeof(xerrno
);
4305 if (getsockopt(channel
, SOL_SOCKET
, SO_ERROR
, &xerrno
, &xlen
))
4310 struct sockaddr pname
;
4311 int pnamelen
= sizeof(pname
);
4313 /* If connection failed, getpeername will fail. */
4315 if (getpeername(channel
, &pname
, &pnamelen
) < 0)
4317 /* Obtain connect failure code through error slippage. */
4320 if (errno
== ENOTCONN
&& read(channel
, &dummy
, 1) < 0)
4327 XSETINT (p
->tick
, ++process_tick
);
4328 p
->status
= Fcons (Qfailed
, Fcons (make_number (xerrno
), Qnil
));
4329 deactivate_process (proc
);
4334 /* Execute the sentinel here. If we had relied on
4335 status_notify to do it later, it will read input
4336 from the process before calling the sentinel. */
4337 exec_sentinel (proc
, build_string ("open\n"));
4338 if (!EQ (p
->filter
, Qt
) && !EQ (p
->command
, Qt
))
4340 FD_SET (XINT (p
->infd
), &input_wait_mask
);
4341 FD_SET (XINT (p
->infd
), &non_keyboard_wait_mask
);
4345 #endif /* NON_BLOCKING_CONNECT */
4346 } /* end for each file descriptor */
4347 } /* end while exit conditions not met */
4349 waiting_for_user_input_p
= 0;
4351 /* If calling from keyboard input, do not quit
4352 since we want to return C-g as an input character.
4353 Otherwise, do pending quit if requested. */
4354 if (XINT (read_kbd
) >= 0)
4356 /* Prevent input_pending from remaining set if we quit. */
4357 clear_input_pending ();
4360 #ifdef POLL_INTERRUPTED_SYS_CALL
4361 /* AlainF 5-Jul-1996
4362 HP-UX 10.10 seems to have problems with signals coming in
4363 Causes "poll: interrupted system call" messages when Emacs is run
4365 Turn periodic alarms back on */
4367 #endif /* POLL_INTERRUPTED_SYS_CALL */
4369 return got_some_input
;
4372 /* Given a list (FUNCTION ARGS...), apply FUNCTION to the ARGS. */
4375 read_process_output_call (fun_and_args
)
4376 Lisp_Object fun_and_args
;
4378 return apply1 (XCAR (fun_and_args
), XCDR (fun_and_args
));
4382 read_process_output_error_handler (error
)
4385 cmd_error_internal (error
, "error in process filter: ");
4387 update_echo_area ();
4388 Fsleep_for (make_number (2), Qnil
);
4392 /* Read pending output from the process channel,
4393 starting with our buffered-ahead character if we have one.
4394 Yield number of decoded characters read.
4396 This function reads at most 1024 characters.
4397 If you want to read all available subprocess output,
4398 you must call it repeatedly until it returns zero.
4400 The characters read are decoded according to PROC's coding-system
4404 read_process_output (proc
, channel
)
4406 register int channel
;
4408 register int nchars
, nbytes
;
4410 register Lisp_Object outstream
;
4411 register struct buffer
*old
= current_buffer
;
4412 register struct Lisp_Process
*p
= XPROCESS (proc
);
4413 register int opoint
;
4414 struct coding_system
*coding
= proc_decode_coding_system
[channel
];
4415 int carryover
= XINT (p
->decoding_carryover
);
4419 VMS_PROC_STUFF
*vs
, *get_vms_process_pointer();
4421 vs
= get_vms_process_pointer (p
->pid
);
4425 return (0); /* Really weird if it does this */
4426 if (!(vs
->iosb
[0] & 1))
4427 return -1; /* I/O error */
4430 error ("Could not get VMS process pointer");
4431 chars
= vs
->inputBuffer
;
4432 nbytes
= clean_vms_buffer (chars
, vs
->iosb
[1]);
4435 start_vms_process_read (vs
); /* Crank up the next read on the process */
4436 return 1; /* Nothing worth printing, say we got 1 */
4440 /* The data carried over in the previous decoding (which are at
4441 the tail of decoding buffer) should be prepended to the new
4442 data read to decode all together. */
4443 chars
= (char *) alloca (nbytes
+ carryover
);
4444 bcopy (SDATA (p
->decoding_buf
), buf
, carryover
);
4445 bcopy (vs
->inputBuffer
, chars
+ carryover
, nbytes
);
4449 #ifdef DATAGRAM_SOCKETS
4450 /* A datagram is one packet; allow at least 1500+ bytes of data
4451 corresponding to the typical Ethernet frame size. */
4452 if (DATAGRAM_CHAN_P (channel
))
4454 /* carryover = 0; */ /* Does carryover make sense for datagrams? */
4459 chars
= (char *) alloca (carryover
+ readmax
);
4461 /* See the comment above. */
4462 bcopy (SDATA (p
->decoding_buf
), chars
, carryover
);
4464 #ifdef DATAGRAM_SOCKETS
4465 /* We have a working select, so proc_buffered_char is always -1. */
4466 if (DATAGRAM_CHAN_P (channel
))
4468 int len
= datagram_address
[channel
].len
;
4469 nbytes
= recvfrom (channel
, chars
+ carryover
, readmax
- carryover
,
4470 0, datagram_address
[channel
].sa
, &len
);
4474 if (proc_buffered_char
[channel
] < 0)
4475 nbytes
= emacs_read (channel
, chars
+ carryover
, readmax
- carryover
);
4478 chars
[carryover
] = proc_buffered_char
[channel
];
4479 proc_buffered_char
[channel
] = -1;
4480 nbytes
= emacs_read (channel
, chars
+ carryover
+ 1, readmax
- 1 - carryover
);
4484 nbytes
= nbytes
+ 1;
4486 #endif /* not VMS */
4488 XSETINT (p
->decoding_carryover
, 0);
4490 /* At this point, NBYTES holds number of bytes just received
4491 (including the one in proc_buffered_char[channel]). */
4494 if (nbytes
< 0 || coding
->mode
& CODING_MODE_LAST_BLOCK
)
4496 coding
->mode
|= CODING_MODE_LAST_BLOCK
;
4499 /* Now set NBYTES how many bytes we must decode. */
4500 nbytes
+= carryover
;
4502 /* Read and dispose of the process output. */
4503 outstream
= p
->filter
;
4504 if (!NILP (outstream
))
4506 /* We inhibit quit here instead of just catching it so that
4507 hitting ^G when a filter happens to be running won't screw
4509 int count
= SPECPDL_INDEX ();
4510 Lisp_Object odeactivate
;
4511 Lisp_Object obuffer
, okeymap
;
4513 int outer_running_asynch_code
= running_asynch_code
;
4514 int waiting
= waiting_for_user_input_p
;
4516 /* No need to gcpro these, because all we do with them later
4517 is test them for EQness, and none of them should be a string. */
4518 odeactivate
= Vdeactivate_mark
;
4519 XSETBUFFER (obuffer
, current_buffer
);
4520 okeymap
= current_buffer
->keymap
;
4522 specbind (Qinhibit_quit
, Qt
);
4523 specbind (Qlast_nonmenu_event
, Qt
);
4525 /* In case we get recursively called,
4526 and we already saved the match data nonrecursively,
4527 save the same match data in safely recursive fashion. */
4528 if (outer_running_asynch_code
)
4531 /* Don't clobber the CURRENT match data, either! */
4532 tem
= Fmatch_data (Qnil
, Qnil
);
4533 restore_match_data ();
4534 record_unwind_protect (Fset_match_data
, Fmatch_data (Qnil
, Qnil
));
4535 Fset_match_data (tem
);
4538 /* For speed, if a search happens within this code,
4539 save the match data in a special nonrecursive fashion. */
4540 running_asynch_code
= 1;
4542 text
= decode_coding_string (make_unibyte_string (chars
, nbytes
),
4544 Vlast_coding_system_used
= coding
->symbol
;
4545 /* A new coding system might be found. */
4546 if (!EQ (p
->decode_coding_system
, coding
->symbol
))
4548 p
->decode_coding_system
= coding
->symbol
;
4550 /* Don't call setup_coding_system for
4551 proc_decode_coding_system[channel] here. It is done in
4552 detect_coding called via decode_coding above. */
4554 /* If a coding system for encoding is not yet decided, we set
4555 it as the same as coding-system for decoding.
4557 But, before doing that we must check if
4558 proc_encode_coding_system[p->outfd] surely points to a
4559 valid memory because p->outfd will be changed once EOF is
4560 sent to the process. */
4561 if (NILP (p
->encode_coding_system
)
4562 && proc_encode_coding_system
[XINT (p
->outfd
)])
4564 p
->encode_coding_system
= coding
->symbol
;
4565 setup_coding_system (coding
->symbol
,
4566 proc_encode_coding_system
[XINT (p
->outfd
)]);
4570 carryover
= nbytes
- coding
->consumed
;
4571 bcopy (chars
+ coding
->consumed
, SDATA (p
->decoding_buf
),
4573 XSETINT (p
->decoding_carryover
, carryover
);
4574 /* Adjust the multibyteness of TEXT to that of the filter. */
4575 if (NILP (p
->filter_multibyte
) != ! STRING_MULTIBYTE (text
))
4576 text
= (STRING_MULTIBYTE (text
)
4577 ? Fstring_as_unibyte (text
)
4578 : Fstring_to_multibyte (text
));
4579 nbytes
= SBYTES (text
);
4580 nchars
= SCHARS (text
);
4582 internal_condition_case_1 (read_process_output_call
,
4584 Fcons (proc
, Fcons (text
, Qnil
))),
4585 !NILP (Vdebug_on_error
) ? Qnil
: Qerror
,
4586 read_process_output_error_handler
);
4588 /* If we saved the match data nonrecursively, restore it now. */
4589 restore_match_data ();
4590 running_asynch_code
= outer_running_asynch_code
;
4592 /* Handling the process output should not deactivate the mark. */
4593 Vdeactivate_mark
= odeactivate
;
4595 /* Restore waiting_for_user_input_p as it was
4596 when we were called, in case the filter clobbered it. */
4597 waiting_for_user_input_p
= waiting
;
4599 #if 0 /* Call record_asynch_buffer_change unconditionally,
4600 because we might have changed minor modes or other things
4601 that affect key bindings. */
4602 if (! EQ (Fcurrent_buffer (), obuffer
)
4603 || ! EQ (current_buffer
->keymap
, okeymap
))
4605 /* But do it only if the caller is actually going to read events.
4606 Otherwise there's no need to make him wake up, and it could
4607 cause trouble (for example it would make Fsit_for return). */
4608 if (waiting_for_user_input_p
== -1)
4609 record_asynch_buffer_change ();
4612 start_vms_process_read (vs
);
4614 unbind_to (count
, Qnil
);
4618 /* If no filter, write into buffer if it isn't dead. */
4619 if (!NILP (p
->buffer
) && !NILP (XBUFFER (p
->buffer
)->name
))
4621 Lisp_Object old_read_only
;
4622 int old_begv
, old_zv
;
4623 int old_begv_byte
, old_zv_byte
;
4624 Lisp_Object odeactivate
;
4625 int before
, before_byte
;
4630 odeactivate
= Vdeactivate_mark
;
4632 Fset_buffer (p
->buffer
);
4634 opoint_byte
= PT_BYTE
;
4635 old_read_only
= current_buffer
->read_only
;
4638 old_begv_byte
= BEGV_BYTE
;
4639 old_zv_byte
= ZV_BYTE
;
4641 current_buffer
->read_only
= Qnil
;
4643 /* Insert new output into buffer
4644 at the current end-of-output marker,
4645 thus preserving logical ordering of input and output. */
4646 if (XMARKER (p
->mark
)->buffer
)
4647 SET_PT_BOTH (clip_to_bounds (BEGV
, marker_position (p
->mark
), ZV
),
4648 clip_to_bounds (BEGV_BYTE
, marker_byte_position (p
->mark
),
4651 SET_PT_BOTH (ZV
, ZV_BYTE
);
4653 before_byte
= PT_BYTE
;
4655 /* If the output marker is outside of the visible region, save
4656 the restriction and widen. */
4657 if (! (BEGV
<= PT
&& PT
<= ZV
))
4660 text
= decode_coding_string (make_unibyte_string (chars
, nbytes
),
4662 Vlast_coding_system_used
= coding
->symbol
;
4663 /* A new coding system might be found. See the comment in the
4664 similar code in the previous `if' block. */
4665 if (!EQ (p
->decode_coding_system
, coding
->symbol
))
4667 p
->decode_coding_system
= coding
->symbol
;
4668 if (NILP (p
->encode_coding_system
)
4669 && proc_encode_coding_system
[XINT (p
->outfd
)])
4671 p
->encode_coding_system
= coding
->symbol
;
4672 setup_coding_system (coding
->symbol
,
4673 proc_encode_coding_system
[XINT (p
->outfd
)]);
4676 carryover
= nbytes
- coding
->consumed
;
4677 bcopy (chars
+ coding
->consumed
, SDATA (p
->decoding_buf
),
4679 XSETINT (p
->decoding_carryover
, carryover
);
4680 /* Adjust the multibyteness of TEXT to that of the buffer. */
4681 if (NILP (current_buffer
->enable_multibyte_characters
)
4682 != ! STRING_MULTIBYTE (text
))
4683 text
= (STRING_MULTIBYTE (text
)
4684 ? Fstring_as_unibyte (text
)
4685 : Fstring_to_multibyte (text
));
4686 nbytes
= SBYTES (text
);
4687 nchars
= SCHARS (text
);
4688 /* Insert before markers in case we are inserting where
4689 the buffer's mark is, and the user's next command is Meta-y. */
4690 insert_from_string_before_markers (text
, 0, 0, nchars
, nbytes
, 0);
4692 /* Make sure the process marker's position is valid when the
4693 process buffer is changed in the signal_after_change above.
4694 W3 is known to do that. */
4695 if (BUFFERP (p
->buffer
)
4696 && (b
= XBUFFER (p
->buffer
), b
!= current_buffer
))
4697 set_marker_both (p
->mark
, p
->buffer
, BUF_PT (b
), BUF_PT_BYTE (b
));
4699 set_marker_both (p
->mark
, p
->buffer
, PT
, PT_BYTE
);
4701 update_mode_lines
++;
4703 /* Make sure opoint and the old restrictions
4704 float ahead of any new text just as point would. */
4705 if (opoint
>= before
)
4707 opoint
+= PT
- before
;
4708 opoint_byte
+= PT_BYTE
- before_byte
;
4710 if (old_begv
> before
)
4712 old_begv
+= PT
- before
;
4713 old_begv_byte
+= PT_BYTE
- before_byte
;
4715 if (old_zv
>= before
)
4717 old_zv
+= PT
- before
;
4718 old_zv_byte
+= PT_BYTE
- before_byte
;
4721 /* If the restriction isn't what it should be, set it. */
4722 if (old_begv
!= BEGV
|| old_zv
!= ZV
)
4723 Fnarrow_to_region (make_number (old_begv
), make_number (old_zv
));
4725 /* Handling the process output should not deactivate the mark. */
4726 Vdeactivate_mark
= odeactivate
;
4728 current_buffer
->read_only
= old_read_only
;
4729 SET_PT_BOTH (opoint
, opoint_byte
);
4730 set_buffer_internal (old
);
4733 start_vms_process_read (vs
);
4738 DEFUN ("waiting-for-user-input-p", Fwaiting_for_user_input_p
, Swaiting_for_user_input_p
,
4740 doc
: /* Returns non-nil if emacs is waiting for input from the user.
4741 This is intended for use by asynchronous process output filters and sentinels. */)
4744 return (waiting_for_user_input_p
? Qt
: Qnil
);
4747 /* Sending data to subprocess */
4749 jmp_buf send_process_frame
;
4750 Lisp_Object process_sent_to
;
4753 send_process_trap ()
4759 longjmp (send_process_frame
, 1);
4762 /* Send some data to process PROC.
4763 BUF is the beginning of the data; LEN is the number of characters.
4764 OBJECT is the Lisp object that the data comes from. If OBJECT is
4765 nil or t, it means that the data comes from C string.
4767 If OBJECT is not nil, the data is encoded by PROC's coding-system
4768 for encoding before it is sent.
4770 This function can evaluate Lisp code and can garbage collect. */
4773 send_process (proc
, buf
, len
, object
)
4774 volatile Lisp_Object proc
;
4775 unsigned char *volatile buf
;
4777 volatile Lisp_Object object
;
4779 /* Use volatile to protect variables from being clobbered by longjmp. */
4781 struct coding_system
*coding
;
4782 struct gcpro gcpro1
;
4787 struct Lisp_Process
*p
= XPROCESS (proc
);
4788 VMS_PROC_STUFF
*vs
, *get_vms_process_pointer();
4791 if (! NILP (XPROCESS (proc
)->raw_status_low
))
4792 update_status (XPROCESS (proc
));
4793 if (! EQ (XPROCESS (proc
)->status
, Qrun
))
4794 error ("Process %s not running",
4795 SDATA (XPROCESS (proc
)->name
));
4796 if (XINT (XPROCESS (proc
)->outfd
) < 0)
4797 error ("Output file descriptor of %s is closed",
4798 SDATA (XPROCESS (proc
)->name
));
4800 coding
= proc_encode_coding_system
[XINT (XPROCESS (proc
)->outfd
)];
4801 Vlast_coding_system_used
= coding
->symbol
;
4803 if ((STRINGP (object
) && STRING_MULTIBYTE (object
))
4804 || (BUFFERP (object
)
4805 && !NILP (XBUFFER (object
)->enable_multibyte_characters
))
4808 if (!EQ (coding
->symbol
, XPROCESS (proc
)->encode_coding_system
))
4809 /* The coding system for encoding was changed to raw-text
4810 because we sent a unibyte text previously. Now we are
4811 sending a multibyte text, thus we must encode it by the
4812 original coding system specified for the current
4814 setup_coding_system (XPROCESS (proc
)->encode_coding_system
, coding
);
4815 /* src_multibyte should be set to 1 _after_ a call to
4816 setup_coding_system, since it resets src_multibyte to
4818 coding
->src_multibyte
= 1;
4822 /* For sending a unibyte text, character code conversion should
4823 not take place but EOL conversion should. So, setup raw-text
4824 or one of the subsidiary if we have not yet done it. */
4825 if (coding
->type
!= coding_type_raw_text
)
4827 if (CODING_REQUIRE_FLUSHING (coding
))
4829 /* But, before changing the coding, we must flush out data. */
4830 coding
->mode
|= CODING_MODE_LAST_BLOCK
;
4831 send_process (proc
, "", 0, Qt
);
4833 coding
->src_multibyte
= 0;
4834 setup_raw_text_coding_system (coding
);
4837 coding
->dst_multibyte
= 0;
4839 if (CODING_REQUIRE_ENCODING (coding
))
4841 int require
= encoding_buffer_size (coding
, len
);
4842 int from_byte
= -1, from
= -1, to
= -1;
4843 unsigned char *temp_buf
= NULL
;
4845 if (BUFFERP (object
))
4847 from_byte
= BUF_PTR_BYTE_POS (XBUFFER (object
), buf
);
4848 from
= buf_bytepos_to_charpos (XBUFFER (object
), from_byte
);
4849 to
= buf_bytepos_to_charpos (XBUFFER (object
), from_byte
+ len
);
4851 else if (STRINGP (object
))
4853 from_byte
= buf
- SDATA (object
);
4854 from
= string_byte_to_char (object
, from_byte
);
4855 to
= string_byte_to_char (object
, from_byte
+ len
);
4858 if (coding
->composing
!= COMPOSITION_DISABLED
)
4861 coding_save_composition (coding
, from
, to
, object
);
4863 coding
->composing
= COMPOSITION_DISABLED
;
4866 if (SBYTES (XPROCESS (proc
)->encoding_buf
) < require
)
4867 XPROCESS (proc
)->encoding_buf
= make_uninit_string (require
);
4870 buf
= (BUFFERP (object
)
4871 ? BUF_BYTE_ADDRESS (XBUFFER (object
), from_byte
)
4872 : SDATA (object
) + from_byte
);
4874 object
= XPROCESS (proc
)->encoding_buf
;
4875 encode_coding (coding
, (char *) buf
, SDATA (object
),
4876 len
, SBYTES (object
));
4877 len
= coding
->produced
;
4878 buf
= SDATA (object
);
4884 vs
= get_vms_process_pointer (p
->pid
);
4886 error ("Could not find this process: %x", p
->pid
);
4887 else if (write_to_vms_process (vs
, buf
, len
))
4891 if (pty_max_bytes
== 0)
4893 #if defined (HAVE_FPATHCONF) && defined (_PC_MAX_CANON)
4894 pty_max_bytes
= fpathconf (XFASTINT (XPROCESS (proc
)->outfd
),
4896 if (pty_max_bytes
< 0)
4897 pty_max_bytes
= 250;
4899 pty_max_bytes
= 250;
4901 /* Deduct one, to leave space for the eof. */
4905 /* 2000-09-21: Emacs 20.7, sparc-sun-solaris-2.6, GCC 2.95.2,
4906 CFLAGS="-g -O": The value of the parameter `proc' is clobbered
4907 when returning with longjmp despite being declared volatile. */
4908 if (!setjmp (send_process_frame
))
4910 process_sent_to
= proc
;
4914 SIGTYPE (*old_sigpipe
)();
4916 /* Decide how much data we can send in one batch.
4917 Long lines need to be split into multiple batches. */
4918 if (!NILP (XPROCESS (proc
)->pty_flag
))
4920 /* Starting this at zero is always correct when not the first
4921 iteration because the previous iteration ended by sending C-d.
4922 It may not be correct for the first iteration
4923 if a partial line was sent in a separate send_process call.
4924 If that proves worth handling, we need to save linepos
4925 in the process object. */
4927 unsigned char *ptr
= (unsigned char *) buf
;
4928 unsigned char *end
= (unsigned char *) buf
+ len
;
4930 /* Scan through this text for a line that is too long. */
4931 while (ptr
!= end
&& linepos
< pty_max_bytes
)
4939 /* If we found one, break the line there
4940 and put in a C-d to force the buffer through. */
4944 /* Send this batch, using one or more write calls. */
4947 int outfd
= XINT (XPROCESS (proc
)->outfd
);
4948 old_sigpipe
= (SIGTYPE (*) ()) signal (SIGPIPE
, send_process_trap
);
4949 #ifdef DATAGRAM_SOCKETS
4950 if (DATAGRAM_CHAN_P (outfd
))
4952 rv
= sendto (outfd
, (char *) buf
, this,
4953 0, datagram_address
[outfd
].sa
,
4954 datagram_address
[outfd
].len
);
4955 if (rv
< 0 && errno
== EMSGSIZE
)
4956 report_file_error ("sending datagram", Fcons (proc
, Qnil
));
4960 rv
= emacs_write (outfd
, (char *) buf
, this);
4961 signal (SIGPIPE
, old_sigpipe
);
4967 || errno
== EWOULDBLOCK
4973 /* Buffer is full. Wait, accepting input;
4974 that may allow the program
4975 to finish doing output and read more. */
4980 #ifdef BROKEN_PTY_READ_AFTER_EAGAIN
4981 /* A gross hack to work around a bug in FreeBSD.
4982 In the following sequence, read(2) returns
4986 write(2) 954 bytes, get EAGAIN
4987 read(2) 1024 bytes in process_read_output
4988 read(2) 11 bytes in process_read_output
4990 That is, read(2) returns more bytes than have
4991 ever been written successfully. The 1033 bytes
4992 read are the 1022 bytes written successfully
4993 after processing (for example with CRs added if
4994 the terminal is set up that way which it is
4995 here). The same bytes will be seen again in a
4996 later read(2), without the CRs. */
4998 if (errno
== EAGAIN
)
5001 ioctl (XINT (XPROCESS (proc
)->outfd
), TIOCFLUSH
,
5004 #endif /* BROKEN_PTY_READ_AFTER_EAGAIN */
5006 /* Running filters might relocate buffers or strings.
5007 Arrange to relocate BUF. */
5008 if (BUFFERP (object
))
5009 offset
= BUF_PTR_BYTE_POS (XBUFFER (object
), buf
);
5010 else if (STRINGP (object
))
5011 offset
= buf
- SDATA (object
);
5013 XSETFASTINT (zero
, 0);
5014 #ifdef EMACS_HAS_USECS
5015 wait_reading_process_input (0, 20000, zero
, 0);
5017 wait_reading_process_input (1, 0, zero
, 0);
5020 if (BUFFERP (object
))
5021 buf
= BUF_BYTE_ADDRESS (XBUFFER (object
), offset
);
5022 else if (STRINGP (object
))
5023 buf
= offset
+ SDATA (object
);
5028 /* This is a real error. */
5029 report_file_error ("writing to process", Fcons (proc
, Qnil
));
5036 /* If we sent just part of the string, put in an EOF
5037 to force it through, before we send the rest. */
5039 Fprocess_send_eof (proc
);
5042 #endif /* not VMS */
5046 proc
= process_sent_to
;
5048 XPROCESS (proc
)->raw_status_low
= Qnil
;
5049 XPROCESS (proc
)->raw_status_high
= Qnil
;
5050 XPROCESS (proc
)->status
= Fcons (Qexit
, Fcons (make_number (256), Qnil
));
5051 XSETINT (XPROCESS (proc
)->tick
, ++process_tick
);
5052 deactivate_process (proc
);
5054 error ("Error writing to process %s; closed it",
5055 SDATA (XPROCESS (proc
)->name
));
5057 error ("SIGPIPE raised on process %s; closed it",
5058 SDATA (XPROCESS (proc
)->name
));
5065 DEFUN ("process-send-region", Fprocess_send_region
, Sprocess_send_region
,
5067 doc
: /* Send current contents of region as input to PROCESS.
5068 PROCESS may be a process, a buffer, the name of a process or buffer, or
5069 nil, indicating the current buffer's process.
5070 Called from program, takes three arguments, PROCESS, START and END.
5071 If the region is more than 500 characters long,
5072 it is sent in several bunches. This may happen even for shorter regions.
5073 Output from processes can arrive in between bunches. */)
5074 (process
, start
, end
)
5075 Lisp_Object process
, start
, end
;
5080 proc
= get_process (process
);
5081 validate_region (&start
, &end
);
5083 if (XINT (start
) < GPT
&& XINT (end
) > GPT
)
5084 move_gap (XINT (start
));
5086 start1
= CHAR_TO_BYTE (XINT (start
));
5087 end1
= CHAR_TO_BYTE (XINT (end
));
5088 send_process (proc
, BYTE_POS_ADDR (start1
), end1
- start1
,
5089 Fcurrent_buffer ());
5094 DEFUN ("process-send-string", Fprocess_send_string
, Sprocess_send_string
,
5096 doc
: /* Send PROCESS the contents of STRING as input.
5097 PROCESS may be a process, a buffer, the name of a process or buffer, or
5098 nil, indicating the current buffer's process.
5099 If STRING is more than 500 characters long,
5100 it is sent in several bunches. This may happen even for shorter strings.
5101 Output from processes can arrive in between bunches. */)
5103 Lisp_Object process
, string
;
5106 CHECK_STRING (string
);
5107 proc
= get_process (process
);
5108 send_process (proc
, SDATA (string
),
5109 SBYTES (string
), string
);
5113 /* Return the foreground process group for the tty/pty that
5114 the process P uses. */
5116 emacs_get_tty_pgrp (p
)
5117 struct Lisp_Process
*p
;
5122 if (ioctl (XINT (p
->infd
), TIOCGPGRP
, &gid
) == -1 && ! NILP (p
->tty_name
))
5125 /* Some OS:es (Solaris 8/9) does not allow TIOCGPGRP from the
5126 master side. Try the slave side. */
5127 fd
= emacs_open (XSTRING (p
->tty_name
)->data
, O_RDONLY
, 0);
5131 ioctl (fd
, TIOCGPGRP
, &gid
);
5135 #endif /* defined (TIOCGPGRP ) */
5140 DEFUN ("process-running-child-p", Fprocess_running_child_p
,
5141 Sprocess_running_child_p
, 0, 1, 0,
5142 doc
: /* Return t if PROCESS has given the terminal to a child.
5143 If the operating system does not make it possible to find out,
5144 return t unconditionally. */)
5146 Lisp_Object process
;
5148 /* Initialize in case ioctl doesn't exist or gives an error,
5149 in a way that will cause returning t. */
5152 struct Lisp_Process
*p
;
5154 proc
= get_process (process
);
5155 p
= XPROCESS (proc
);
5157 if (!EQ (p
->childp
, Qt
))
5158 error ("Process %s is not a subprocess",
5160 if (XINT (p
->infd
) < 0)
5161 error ("Process %s is not active",
5164 gid
= emacs_get_tty_pgrp (p
);
5166 if (gid
== XFASTINT (p
->pid
))
5171 /* send a signal number SIGNO to PROCESS.
5172 If CURRENT_GROUP is t, that means send to the process group
5173 that currently owns the terminal being used to communicate with PROCESS.
5174 This is used for various commands in shell mode.
5175 If CURRENT_GROUP is lambda, that means send to the process group
5176 that currently owns the terminal, but only if it is NOT the shell itself.
5178 If NOMSG is zero, insert signal-announcements into process's buffers
5181 If we can, we try to signal PROCESS by sending control characters
5182 down the pty. This allows us to signal inferiors who have changed
5183 their uid, for which killpg would return an EPERM error. */
5186 process_send_signal (process
, signo
, current_group
, nomsg
)
5187 Lisp_Object process
;
5189 Lisp_Object current_group
;
5193 register struct Lisp_Process
*p
;
5197 proc
= get_process (process
);
5198 p
= XPROCESS (proc
);
5200 if (!EQ (p
->childp
, Qt
))
5201 error ("Process %s is not a subprocess",
5203 if (XINT (p
->infd
) < 0)
5204 error ("Process %s is not active",
5207 if (NILP (p
->pty_flag
))
5208 current_group
= Qnil
;
5210 /* If we are using pgrps, get a pgrp number and make it negative. */
5211 if (NILP (current_group
))
5212 /* Send the signal to the shell's process group. */
5213 gid
= XFASTINT (p
->pid
);
5216 #ifdef SIGNALS_VIA_CHARACTERS
5217 /* If possible, send signals to the entire pgrp
5218 by sending an input character to it. */
5220 /* TERMIOS is the latest and bestest, and seems most likely to
5221 work. If the system has it, use it. */
5228 tcgetattr (XINT (p
->infd
), &t
);
5229 send_process (proc
, &t
.c_cc
[VINTR
], 1, Qnil
);
5233 tcgetattr (XINT (p
->infd
), &t
);
5234 send_process (proc
, &t
.c_cc
[VQUIT
], 1, Qnil
);
5238 tcgetattr (XINT (p
->infd
), &t
);
5239 #if defined (VSWTCH) && !defined (PREFER_VSUSP)
5240 send_process (proc
, &t
.c_cc
[VSWTCH
], 1, Qnil
);
5242 send_process (proc
, &t
.c_cc
[VSUSP
], 1, Qnil
);
5247 #else /* ! HAVE_TERMIOS */
5249 /* On Berkeley descendants, the following IOCTL's retrieve the
5250 current control characters. */
5251 #if defined (TIOCGLTC) && defined (TIOCGETC)
5259 ioctl (XINT (p
->infd
), TIOCGETC
, &c
);
5260 send_process (proc
, &c
.t_intrc
, 1, Qnil
);
5263 ioctl (XINT (p
->infd
), TIOCGETC
, &c
);
5264 send_process (proc
, &c
.t_quitc
, 1, Qnil
);
5268 ioctl (XINT (p
->infd
), TIOCGLTC
, &lc
);
5269 send_process (proc
, &lc
.t_suspc
, 1, Qnil
);
5271 #endif /* ! defined (SIGTSTP) */
5274 #else /* ! defined (TIOCGLTC) && defined (TIOCGETC) */
5276 /* On SYSV descendants, the TCGETA ioctl retrieves the current control
5283 ioctl (XINT (p
->infd
), TCGETA
, &t
);
5284 send_process (proc
, &t
.c_cc
[VINTR
], 1, Qnil
);
5287 ioctl (XINT (p
->infd
), TCGETA
, &t
);
5288 send_process (proc
, &t
.c_cc
[VQUIT
], 1, Qnil
);
5292 ioctl (XINT (p
->infd
), TCGETA
, &t
);
5293 send_process (proc
, &t
.c_cc
[VSWTCH
], 1, Qnil
);
5295 #endif /* ! defined (SIGTSTP) */
5297 #else /* ! defined (TCGETA) */
5298 Your configuration files are messed up
.
5299 /* If your system configuration files define SIGNALS_VIA_CHARACTERS,
5300 you'd better be using one of the alternatives above! */
5301 #endif /* ! defined (TCGETA) */
5302 #endif /* ! defined (TIOCGLTC) && defined (TIOCGETC) */
5303 #endif /* ! defined HAVE_TERMIOS */
5305 /* The code above always returns from the function. */
5306 #endif /* defined (SIGNALS_VIA_CHARACTERS) */
5309 /* Get the current pgrp using the tty itself, if we have that.
5310 Otherwise, use the pty to get the pgrp.
5311 On pfa systems, saka@pfu.fujitsu.co.JP writes:
5312 "TIOCGPGRP symbol defined in sys/ioctl.h at E50.
5313 But, TIOCGPGRP does not work on E50 ;-P works fine on E60"
5314 His patch indicates that if TIOCGPGRP returns an error, then
5315 we should just assume that p->pid is also the process group id. */
5317 gid
= emacs_get_tty_pgrp (p
);
5320 /* If we can't get the information, assume
5321 the shell owns the tty. */
5322 gid
= XFASTINT (p
->pid
);
5324 /* It is not clear whether anything really can set GID to -1.
5325 Perhaps on some system one of those ioctls can or could do so.
5326 Or perhaps this is vestigial. */
5329 #else /* ! defined (TIOCGPGRP ) */
5330 /* Can't select pgrps on this system, so we know that
5331 the child itself heads the pgrp. */
5332 gid
= XFASTINT (p
->pid
);
5333 #endif /* ! defined (TIOCGPGRP ) */
5335 /* If current_group is lambda, and the shell owns the terminal,
5336 don't send any signal. */
5337 if (EQ (current_group
, Qlambda
) && gid
== XFASTINT (p
->pid
))
5345 p
->raw_status_low
= Qnil
;
5346 p
->raw_status_high
= Qnil
;
5348 XSETINT (p
->tick
, ++process_tick
);
5352 #endif /* ! defined (SIGCONT) */
5355 send_process (proc
, "\003", 1, Qnil
); /* ^C */
5360 send_process (proc
, "\031", 1, Qnil
); /* ^Y */
5365 sys$
forcex (&(XFASTINT (p
->pid
)), 0, 1);
5368 flush_pending_output (XINT (p
->infd
));
5372 /* If we don't have process groups, send the signal to the immediate
5373 subprocess. That isn't really right, but it's better than any
5374 obvious alternative. */
5377 kill (XFASTINT (p
->pid
), signo
);
5381 /* gid may be a pid, or minus a pgrp's number */
5383 if (!NILP (current_group
))
5385 if (ioctl (XINT (p
->infd
), TIOCSIGSEND
, signo
) == -1)
5386 EMACS_KILLPG (gid
, signo
);
5390 gid
= - XFASTINT (p
->pid
);
5393 #else /* ! defined (TIOCSIGSEND) */
5394 EMACS_KILLPG (gid
, signo
);
5395 #endif /* ! defined (TIOCSIGSEND) */
5398 DEFUN ("interrupt-process", Finterrupt_process
, Sinterrupt_process
, 0, 2, 0,
5399 doc
: /* Interrupt process PROCESS.
5400 PROCESS may be a process, a buffer, or the name of a process or buffer.
5401 nil or no arg means current buffer's process.
5402 Second arg CURRENT-GROUP non-nil means send signal to
5403 the current process-group of the process's controlling terminal
5404 rather than to the process's own process group.
5405 If the process is a shell, this means interrupt current subjob
5406 rather than the shell.
5408 If CURRENT-GROUP is `lambda', and if the shell owns the terminal,
5409 don't send the signal. */)
5410 (process
, current_group
)
5411 Lisp_Object process
, current_group
;
5413 process_send_signal (process
, SIGINT
, current_group
, 0);
5417 DEFUN ("kill-process", Fkill_process
, Skill_process
, 0, 2, 0,
5418 doc
: /* Kill process PROCESS. May be process or name of one.
5419 See function `interrupt-process' for more details on usage. */)
5420 (process
, current_group
)
5421 Lisp_Object process
, current_group
;
5423 process_send_signal (process
, SIGKILL
, current_group
, 0);
5427 DEFUN ("quit-process", Fquit_process
, Squit_process
, 0, 2, 0,
5428 doc
: /* Send QUIT signal to process PROCESS. May be process or name of one.
5429 See function `interrupt-process' for more details on usage. */)
5430 (process
, current_group
)
5431 Lisp_Object process
, current_group
;
5433 process_send_signal (process
, SIGQUIT
, current_group
, 0);
5437 DEFUN ("stop-process", Fstop_process
, Sstop_process
, 0, 2, 0,
5438 doc
: /* Stop process PROCESS. May be process or name of one.
5439 See function `interrupt-process' for more details on usage.
5440 If PROCESS is a network process, inhibit handling of incoming traffic. */)
5441 (process
, current_group
)
5442 Lisp_Object process
, current_group
;
5445 if (PROCESSP (process
) && NETCONN_P (process
))
5447 struct Lisp_Process
*p
;
5449 p
= XPROCESS (process
);
5450 if (NILP (p
->command
)
5451 && XINT (p
->infd
) >= 0)
5453 FD_CLR (XINT (p
->infd
), &input_wait_mask
);
5454 FD_CLR (XINT (p
->infd
), &non_keyboard_wait_mask
);
5461 error ("no SIGTSTP support");
5463 process_send_signal (process
, SIGTSTP
, current_group
, 0);
5468 DEFUN ("continue-process", Fcontinue_process
, Scontinue_process
, 0, 2, 0,
5469 doc
: /* Continue process PROCESS. May be process or name of one.
5470 See function `interrupt-process' for more details on usage.
5471 If PROCESS is a network process, resume handling of incoming traffic. */)
5472 (process
, current_group
)
5473 Lisp_Object process
, current_group
;
5476 if (PROCESSP (process
) && NETCONN_P (process
))
5478 struct Lisp_Process
*p
;
5480 p
= XPROCESS (process
);
5481 if (EQ (p
->command
, Qt
)
5482 && XINT (p
->infd
) >= 0
5483 && (!EQ (p
->filter
, Qt
) || EQ (p
->status
, Qlisten
)))
5485 FD_SET (XINT (p
->infd
), &input_wait_mask
);
5486 FD_SET (XINT (p
->infd
), &non_keyboard_wait_mask
);
5493 process_send_signal (process
, SIGCONT
, current_group
, 0);
5495 error ("no SIGCONT support");
5500 DEFUN ("signal-process", Fsignal_process
, Ssignal_process
,
5501 2, 2, "sProcess (name or number): \nnSignal code: ",
5502 doc
: /* Send PROCESS the signal with code SIGCODE.
5503 PROCESS may also be an integer specifying the process id of the
5504 process to signal; in this case, the process need not be a child of
5506 SIGCODE may be an integer, or a symbol whose name is a signal name. */)
5508 Lisp_Object process
, sigcode
;
5512 if (INTEGERP (process
))
5518 if (STRINGP (process
))
5521 if (tem
= Fget_process (process
), NILP (tem
))
5523 pid
= Fstring_to_number (process
, make_number (10));
5524 if (XINT (pid
) != 0)
5530 process
= get_process (process
);
5535 CHECK_PROCESS (process
);
5536 pid
= XPROCESS (process
)->pid
;
5537 if (!INTEGERP (pid
) || XINT (pid
) <= 0)
5538 error ("Cannot signal process %s", SDATA (XPROCESS (process
)->name
));
5542 #define handle_signal(NAME, VALUE) \
5543 else if (!strcmp (name, NAME)) \
5544 XSETINT (sigcode, VALUE)
5546 if (INTEGERP (sigcode
))
5550 unsigned char *name
;
5552 CHECK_SYMBOL (sigcode
);
5553 name
= SDATA (SYMBOL_NAME (sigcode
));
5558 handle_signal ("SIGHUP", SIGHUP
);
5561 handle_signal ("SIGINT", SIGINT
);
5564 handle_signal ("SIGQUIT", SIGQUIT
);
5567 handle_signal ("SIGILL", SIGILL
);
5570 handle_signal ("SIGABRT", SIGABRT
);
5573 handle_signal ("SIGEMT", SIGEMT
);
5576 handle_signal ("SIGKILL", SIGKILL
);
5579 handle_signal ("SIGFPE", SIGFPE
);
5582 handle_signal ("SIGBUS", SIGBUS
);
5585 handle_signal ("SIGSEGV", SIGSEGV
);
5588 handle_signal ("SIGSYS", SIGSYS
);
5591 handle_signal ("SIGPIPE", SIGPIPE
);
5594 handle_signal ("SIGALRM", SIGALRM
);
5597 handle_signal ("SIGTERM", SIGTERM
);
5600 handle_signal ("SIGURG", SIGURG
);
5603 handle_signal ("SIGSTOP", SIGSTOP
);
5606 handle_signal ("SIGTSTP", SIGTSTP
);
5609 handle_signal ("SIGCONT", SIGCONT
);
5612 handle_signal ("SIGCHLD", SIGCHLD
);
5615 handle_signal ("SIGTTIN", SIGTTIN
);
5618 handle_signal ("SIGTTOU", SIGTTOU
);
5621 handle_signal ("SIGIO", SIGIO
);
5624 handle_signal ("SIGXCPU", SIGXCPU
);
5627 handle_signal ("SIGXFSZ", SIGXFSZ
);
5630 handle_signal ("SIGVTALRM", SIGVTALRM
);
5633 handle_signal ("SIGPROF", SIGPROF
);
5636 handle_signal ("SIGWINCH", SIGWINCH
);
5639 handle_signal ("SIGINFO", SIGINFO
);
5642 handle_signal ("SIGUSR1", SIGUSR1
);
5645 handle_signal ("SIGUSR2", SIGUSR2
);
5648 error ("Undefined signal name %s", name
);
5651 #undef handle_signal
5653 return make_number (kill (XINT (pid
), XINT (sigcode
)));
5656 DEFUN ("process-send-eof", Fprocess_send_eof
, Sprocess_send_eof
, 0, 1, 0,
5657 doc
: /* Make PROCESS see end-of-file in its input.
5658 EOF comes after any text already sent to it.
5659 PROCESS may be a process, a buffer, the name of a process or buffer, or
5660 nil, indicating the current buffer's process.
5661 If PROCESS is a network connection, or is a process communicating
5662 through a pipe (as opposed to a pty), then you cannot send any more
5663 text to PROCESS after you call this function. */)
5665 Lisp_Object process
;
5668 struct coding_system
*coding
;
5670 if (DATAGRAM_CONN_P (process
))
5673 proc
= get_process (process
);
5674 coding
= proc_encode_coding_system
[XINT (XPROCESS (proc
)->outfd
)];
5676 /* Make sure the process is really alive. */
5677 if (! NILP (XPROCESS (proc
)->raw_status_low
))
5678 update_status (XPROCESS (proc
));
5679 if (! EQ (XPROCESS (proc
)->status
, Qrun
))
5680 error ("Process %s not running", SDATA (XPROCESS (proc
)->name
));
5682 if (CODING_REQUIRE_FLUSHING (coding
))
5684 coding
->mode
|= CODING_MODE_LAST_BLOCK
;
5685 send_process (proc
, "", 0, Qnil
);
5689 send_process (proc
, "\032", 1, Qnil
); /* ^z */
5691 if (!NILP (XPROCESS (proc
)->pty_flag
))
5692 send_process (proc
, "\004", 1, Qnil
);
5695 int old_outfd
, new_outfd
;
5697 #ifdef HAVE_SHUTDOWN
5698 /* If this is a network connection, or socketpair is used
5699 for communication with the subprocess, call shutdown to cause EOF.
5700 (In some old system, shutdown to socketpair doesn't work.
5701 Then we just can't win.) */
5702 if (NILP (XPROCESS (proc
)->pid
)
5703 || XINT (XPROCESS (proc
)->outfd
) == XINT (XPROCESS (proc
)->infd
))
5704 shutdown (XINT (XPROCESS (proc
)->outfd
), 1);
5705 /* In case of socketpair, outfd == infd, so don't close it. */
5706 if (XINT (XPROCESS (proc
)->outfd
) != XINT (XPROCESS (proc
)->infd
))
5707 emacs_close (XINT (XPROCESS (proc
)->outfd
));
5708 #else /* not HAVE_SHUTDOWN */
5709 emacs_close (XINT (XPROCESS (proc
)->outfd
));
5710 #endif /* not HAVE_SHUTDOWN */
5711 new_outfd
= emacs_open (NULL_DEVICE
, O_WRONLY
, 0);
5712 old_outfd
= XINT (XPROCESS (proc
)->outfd
);
5714 if (!proc_encode_coding_system
[new_outfd
])
5715 proc_encode_coding_system
[new_outfd
]
5716 = (struct coding_system
*) xmalloc (sizeof (struct coding_system
));
5717 bcopy (proc_encode_coding_system
[old_outfd
],
5718 proc_encode_coding_system
[new_outfd
],
5719 sizeof (struct coding_system
));
5720 bzero (proc_encode_coding_system
[old_outfd
],
5721 sizeof (struct coding_system
));
5723 XSETINT (XPROCESS (proc
)->outfd
, new_outfd
);
5729 /* Kill all processes associated with `buffer'.
5730 If `buffer' is nil, kill all processes */
5733 kill_buffer_processes (buffer
)
5736 Lisp_Object tail
, proc
;
5738 for (tail
= Vprocess_alist
; GC_CONSP (tail
); tail
= XCDR (tail
))
5740 proc
= XCDR (XCAR (tail
));
5741 if (GC_PROCESSP (proc
)
5742 && (NILP (buffer
) || EQ (XPROCESS (proc
)->buffer
, buffer
)))
5744 if (NETCONN_P (proc
))
5745 Fdelete_process (proc
);
5746 else if (XINT (XPROCESS (proc
)->infd
) >= 0)
5747 process_send_signal (proc
, SIGHUP
, Qnil
, 1);
5752 /* On receipt of a signal that a child status has changed, loop asking
5753 about children with changed statuses until the system says there
5756 All we do is change the status; we do not run sentinels or print
5757 notifications. That is saved for the next time keyboard input is
5758 done, in order to avoid timing errors.
5760 ** WARNING: this can be called during garbage collection.
5761 Therefore, it must not be fooled by the presence of mark bits in
5764 ** USG WARNING: Although it is not obvious from the documentation
5765 in signal(2), on a USG system the SIGCLD handler MUST NOT call
5766 signal() before executing at least one wait(), otherwise the
5767 handler will be called again, resulting in an infinite loop. The
5768 relevant portion of the documentation reads "SIGCLD signals will be
5769 queued and the signal-catching function will be continually
5770 reentered until the queue is empty". Invoking signal() causes the
5771 kernel to reexamine the SIGCLD queue. Fred Fish, UniSoft Systems
5775 sigchld_handler (signo
)
5778 int old_errno
= errno
;
5780 register struct Lisp_Process
*p
;
5781 extern EMACS_TIME
*input_available_clear_time
;
5785 sigheld
|= sigbit (SIGCHLD
);
5797 #endif /* no WUNTRACED */
5798 /* Keep trying to get a status until we get a definitive result. */
5802 pid
= wait3 (&w
, WNOHANG
| WUNTRACED
, 0);
5804 while (pid
< 0 && errno
== EINTR
);
5808 /* PID == 0 means no processes found, PID == -1 means a real
5809 failure. We have done all our job, so return. */
5811 /* USG systems forget handlers when they are used;
5812 must reestablish each time */
5813 #if defined (USG) && !defined (POSIX_SIGNALS)
5814 signal (signo
, sigchld_handler
); /* WARNING - must come after wait3() */
5817 sigheld
&= ~sigbit (SIGCHLD
);
5825 #endif /* no WNOHANG */
5827 /* Find the process that signaled us, and record its status. */
5830 for (tail
= Vprocess_alist
; GC_CONSP (tail
); tail
= XCDR (tail
))
5832 proc
= XCDR (XCAR (tail
));
5833 p
= XPROCESS (proc
);
5834 if (GC_EQ (p
->childp
, Qt
) && XINT (p
->pid
) == pid
)
5839 /* Look for an asynchronous process whose pid hasn't been filled
5842 for (tail
= Vprocess_alist
; GC_CONSP (tail
); tail
= XCDR (tail
))
5844 proc
= XCDR (XCAR (tail
));
5845 p
= XPROCESS (proc
);
5846 if (GC_INTEGERP (p
->pid
) && XINT (p
->pid
) == -1)
5851 /* Change the status of the process that was found. */
5854 union { int i
; WAITTYPE wt
; } u
;
5855 int clear_desc_flag
= 0;
5857 XSETINT (p
->tick
, ++process_tick
);
5859 XSETINT (p
->raw_status_low
, u
.i
& 0xffff);
5860 XSETINT (p
->raw_status_high
, u
.i
>> 16);
5862 /* If process has terminated, stop waiting for its output. */
5863 if ((WIFSIGNALED (w
) || WIFEXITED (w
))
5864 && XINT (p
->infd
) >= 0)
5865 clear_desc_flag
= 1;
5867 /* We use clear_desc_flag to avoid a compiler bug in Microsoft C. */
5868 if (clear_desc_flag
)
5870 FD_CLR (XINT (p
->infd
), &input_wait_mask
);
5871 FD_CLR (XINT (p
->infd
), &non_keyboard_wait_mask
);
5874 /* Tell wait_reading_process_input that it needs to wake up and
5876 if (input_available_clear_time
)
5877 EMACS_SET_SECS_USECS (*input_available_clear_time
, 0, 0);
5880 /* There was no asynchronous process found for that id. Check
5881 if we have a synchronous process. */
5884 synch_process_alive
= 0;
5886 /* Report the status of the synchronous process. */
5888 synch_process_retcode
= WRETCODE (w
);
5889 else if (WIFSIGNALED (w
))
5891 int code
= WTERMSIG (w
);
5894 synchronize_system_messages_locale ();
5895 signame
= strsignal (code
);
5898 signame
= "unknown";
5900 synch_process_death
= signame
;
5903 /* Tell wait_reading_process_input that it needs to wake up and
5905 if (input_available_clear_time
)
5906 EMACS_SET_SECS_USECS (*input_available_clear_time
, 0, 0);
5909 /* On some systems, we must return right away.
5910 If any more processes want to signal us, we will
5912 Otherwise (on systems that have WNOHANG), loop around
5913 to use up all the processes that have something to tell us. */
5914 #if (defined WINDOWSNT \
5915 || (defined USG && !defined GNU_LINUX \
5916 && !(defined HPUX && defined WNOHANG)))
5917 #if defined (USG) && ! defined (POSIX_SIGNALS)
5918 signal (signo
, sigchld_handler
);
5922 #endif /* USG, but not HPUX with WNOHANG */
5928 exec_sentinel_unwind (data
)
5931 XPROCESS (XCAR (data
))->sentinel
= XCDR (data
);
5936 exec_sentinel_error_handler (error
)
5939 cmd_error_internal (error
, "error in process sentinel: ");
5941 update_echo_area ();
5942 Fsleep_for (make_number (2), Qnil
);
5947 exec_sentinel (proc
, reason
)
5948 Lisp_Object proc
, reason
;
5950 Lisp_Object sentinel
, obuffer
, odeactivate
, okeymap
;
5951 register struct Lisp_Process
*p
= XPROCESS (proc
);
5952 int count
= SPECPDL_INDEX ();
5953 int outer_running_asynch_code
= running_asynch_code
;
5954 int waiting
= waiting_for_user_input_p
;
5956 /* No need to gcpro these, because all we do with them later
5957 is test them for EQness, and none of them should be a string. */
5958 odeactivate
= Vdeactivate_mark
;
5959 XSETBUFFER (obuffer
, current_buffer
);
5960 okeymap
= current_buffer
->keymap
;
5962 sentinel
= p
->sentinel
;
5963 if (NILP (sentinel
))
5966 /* Zilch the sentinel while it's running, to avoid recursive invocations;
5967 assure that it gets restored no matter how the sentinel exits. */
5969 record_unwind_protect (exec_sentinel_unwind
, Fcons (proc
, sentinel
));
5970 /* Inhibit quit so that random quits don't screw up a running filter. */
5971 specbind (Qinhibit_quit
, Qt
);
5972 specbind (Qlast_nonmenu_event
, Qt
);
5974 /* In case we get recursively called,
5975 and we already saved the match data nonrecursively,
5976 save the same match data in safely recursive fashion. */
5977 if (outer_running_asynch_code
)
5980 tem
= Fmatch_data (Qnil
, Qnil
);
5981 restore_match_data ();
5982 record_unwind_protect (Fset_match_data
, Fmatch_data (Qnil
, Qnil
));
5983 Fset_match_data (tem
);
5986 /* For speed, if a search happens within this code,
5987 save the match data in a special nonrecursive fashion. */
5988 running_asynch_code
= 1;
5990 internal_condition_case_1 (read_process_output_call
,
5992 Fcons (proc
, Fcons (reason
, Qnil
))),
5993 !NILP (Vdebug_on_error
) ? Qnil
: Qerror
,
5994 exec_sentinel_error_handler
);
5996 /* If we saved the match data nonrecursively, restore it now. */
5997 restore_match_data ();
5998 running_asynch_code
= outer_running_asynch_code
;
6000 Vdeactivate_mark
= odeactivate
;
6002 /* Restore waiting_for_user_input_p as it was
6003 when we were called, in case the filter clobbered it. */
6004 waiting_for_user_input_p
= waiting
;
6007 if (! EQ (Fcurrent_buffer (), obuffer
)
6008 || ! EQ (current_buffer
->keymap
, okeymap
))
6010 /* But do it only if the caller is actually going to read events.
6011 Otherwise there's no need to make him wake up, and it could
6012 cause trouble (for example it would make Fsit_for return). */
6013 if (waiting_for_user_input_p
== -1)
6014 record_asynch_buffer_change ();
6016 unbind_to (count
, Qnil
);
6019 /* Report all recent events of a change in process status
6020 (either run the sentinel or output a message).
6021 This is usually done while Emacs is waiting for keyboard input
6022 but can be done at other times. */
6027 register Lisp_Object proc
, buffer
;
6028 Lisp_Object tail
, msg
;
6029 struct gcpro gcpro1
, gcpro2
;
6033 /* We need to gcpro tail; if read_process_output calls a filter
6034 which deletes a process and removes the cons to which tail points
6035 from Vprocess_alist, and then causes a GC, tail is an unprotected
6039 /* Set this now, so that if new processes are created by sentinels
6040 that we run, we get called again to handle their status changes. */
6041 update_tick
= process_tick
;
6043 for (tail
= Vprocess_alist
; !NILP (tail
); tail
= Fcdr (tail
))
6046 register struct Lisp_Process
*p
;
6048 proc
= Fcdr (Fcar (tail
));
6049 p
= XPROCESS (proc
);
6051 if (XINT (p
->tick
) != XINT (p
->update_tick
))
6053 XSETINT (p
->update_tick
, XINT (p
->tick
));
6055 /* If process is still active, read any output that remains. */
6056 while (! EQ (p
->filter
, Qt
)
6057 && ! EQ (p
->status
, Qconnect
)
6058 && ! EQ (p
->status
, Qlisten
)
6059 && ! EQ (p
->command
, Qt
) /* Network process not stopped. */
6060 && XINT (p
->infd
) >= 0
6061 && read_process_output (proc
, XINT (p
->infd
)) > 0);
6065 /* Get the text to use for the message. */
6066 if (!NILP (p
->raw_status_low
))
6068 msg
= status_message (p
->status
);
6070 /* If process is terminated, deactivate it or delete it. */
6072 if (CONSP (p
->status
))
6073 symbol
= XCAR (p
->status
);
6075 if (EQ (symbol
, Qsignal
) || EQ (symbol
, Qexit
)
6076 || EQ (symbol
, Qclosed
))
6078 if (delete_exited_processes
)
6079 remove_process (proc
);
6081 deactivate_process (proc
);
6084 /* The actions above may have further incremented p->tick.
6085 So set p->update_tick again
6086 so that an error in the sentinel will not cause
6087 this code to be run again. */
6088 XSETINT (p
->update_tick
, XINT (p
->tick
));
6089 /* Now output the message suitably. */
6090 if (!NILP (p
->sentinel
))
6091 exec_sentinel (proc
, msg
);
6092 /* Don't bother with a message in the buffer
6093 when a process becomes runnable. */
6094 else if (!EQ (symbol
, Qrun
) && !NILP (buffer
))
6096 Lisp_Object ro
, tem
;
6097 struct buffer
*old
= current_buffer
;
6098 int opoint
, opoint_byte
;
6099 int before
, before_byte
;
6101 ro
= XBUFFER (buffer
)->read_only
;
6103 /* Avoid error if buffer is deleted
6104 (probably that's why the process is dead, too) */
6105 if (NILP (XBUFFER (buffer
)->name
))
6107 Fset_buffer (buffer
);
6110 opoint_byte
= PT_BYTE
;
6111 /* Insert new output into buffer
6112 at the current end-of-output marker,
6113 thus preserving logical ordering of input and output. */
6114 if (XMARKER (p
->mark
)->buffer
)
6115 Fgoto_char (p
->mark
);
6117 SET_PT_BOTH (ZV
, ZV_BYTE
);
6120 before_byte
= PT_BYTE
;
6122 tem
= current_buffer
->read_only
;
6123 current_buffer
->read_only
= Qnil
;
6124 insert_string ("\nProcess ");
6125 Finsert (1, &p
->name
);
6126 insert_string (" ");
6128 current_buffer
->read_only
= tem
;
6129 set_marker_both (p
->mark
, p
->buffer
, PT
, PT_BYTE
);
6131 if (opoint
>= before
)
6132 SET_PT_BOTH (opoint
+ (PT
- before
),
6133 opoint_byte
+ (PT_BYTE
- before_byte
));
6135 SET_PT_BOTH (opoint
, opoint_byte
);
6137 set_buffer_internal (old
);
6142 update_mode_lines
++; /* in case buffers use %s in mode-line-format */
6143 redisplay_preserve_echo_area (13);
6149 DEFUN ("set-process-coding-system", Fset_process_coding_system
,
6150 Sset_process_coding_system
, 1, 3, 0,
6151 doc
: /* Set coding systems of PROCESS to DECODING and ENCODING.
6152 DECODING will be used to decode subprocess output and ENCODING to
6153 encode subprocess input. */)
6154 (proc
, decoding
, encoding
)
6155 register Lisp_Object proc
, decoding
, encoding
;
6157 register struct Lisp_Process
*p
;
6159 CHECK_PROCESS (proc
);
6160 p
= XPROCESS (proc
);
6161 if (XINT (p
->infd
) < 0)
6162 error ("Input file descriptor of %s closed", SDATA (p
->name
));
6163 if (XINT (p
->outfd
) < 0)
6164 error ("Output file descriptor of %s closed", SDATA (p
->name
));
6165 Fcheck_coding_system (decoding
);
6166 Fcheck_coding_system (encoding
);
6168 p
->decode_coding_system
= decoding
;
6169 p
->encode_coding_system
= encoding
;
6170 setup_process_coding_systems (proc
);
6175 DEFUN ("process-coding-system",
6176 Fprocess_coding_system
, Sprocess_coding_system
, 1, 1, 0,
6177 doc
: /* Return a cons of coding systems for decoding and encoding of PROCESS. */)
6179 register Lisp_Object proc
;
6181 CHECK_PROCESS (proc
);
6182 return Fcons (XPROCESS (proc
)->decode_coding_system
,
6183 XPROCESS (proc
)->encode_coding_system
);
6186 DEFUN ("set-process-filter-multibyte", Fset_process_filter_multibyte
,
6187 Sset_process_filter_multibyte
, 2, 2, 0,
6188 doc
: /* Set multibyteness of the strings given to PROCESS's filter.
6189 If FLAG is non-nil, the filter is given multibyte strings.
6190 If FLAG is nil, the filter is given unibyte strings. In this case,
6191 all character code conversion except for end-of-line conversion is
6194 Lisp_Object proc
, flag
;
6196 register struct Lisp_Process
*p
;
6198 CHECK_PROCESS (proc
);
6199 p
= XPROCESS (proc
);
6200 p
->filter_multibyte
= flag
;
6201 setup_process_coding_systems (proc
);
6206 DEFUN ("process-filter-multibyte-p", Fprocess_filter_multibyte_p
,
6207 Sprocess_filter_multibyte_p
, 1, 1, 0,
6208 doc
: /* Return t if a multibyte string is given to PROCESS's filter.*/)
6212 register struct Lisp_Process
*p
;
6214 CHECK_PROCESS (proc
);
6215 p
= XPROCESS (proc
);
6217 return (NILP (p
->filter_multibyte
) ? Qnil
: Qt
);
6222 /* The first time this is called, assume keyboard input comes from DESC
6223 instead of from where we used to expect it.
6224 Subsequent calls mean assume input keyboard can come from DESC
6225 in addition to other places. */
6227 static int add_keyboard_wait_descriptor_called_flag
;
6230 add_keyboard_wait_descriptor (desc
)
6233 if (! add_keyboard_wait_descriptor_called_flag
)
6234 FD_CLR (0, &input_wait_mask
);
6235 add_keyboard_wait_descriptor_called_flag
= 1;
6236 FD_SET (desc
, &input_wait_mask
);
6237 FD_SET (desc
, &non_process_wait_mask
);
6238 if (desc
> max_keyboard_desc
)
6239 max_keyboard_desc
= desc
;
6242 /* From now on, do not expect DESC to give keyboard input. */
6245 delete_keyboard_wait_descriptor (desc
)
6249 int lim
= max_keyboard_desc
;
6251 FD_CLR (desc
, &input_wait_mask
);
6252 FD_CLR (desc
, &non_process_wait_mask
);
6254 if (desc
== max_keyboard_desc
)
6255 for (fd
= 0; fd
< lim
; fd
++)
6256 if (FD_ISSET (fd
, &input_wait_mask
)
6257 && !FD_ISSET (fd
, &non_keyboard_wait_mask
))
6258 max_keyboard_desc
= fd
;
6261 /* Return nonzero if *MASK has a bit set
6262 that corresponds to one of the keyboard input descriptors. */
6265 keyboard_bit_set (mask
)
6270 for (fd
= 0; fd
<= max_keyboard_desc
; fd
++)
6271 if (FD_ISSET (fd
, mask
) && FD_ISSET (fd
, &input_wait_mask
)
6272 && !FD_ISSET (fd
, &non_keyboard_wait_mask
))
6285 if (! noninteractive
|| initialized
)
6287 signal (SIGCHLD
, sigchld_handler
);
6290 FD_ZERO (&input_wait_mask
);
6291 FD_ZERO (&non_keyboard_wait_mask
);
6292 FD_ZERO (&non_process_wait_mask
);
6293 max_process_desc
= 0;
6295 FD_SET (0, &input_wait_mask
);
6297 Vprocess_alist
= Qnil
;
6298 for (i
= 0; i
< MAXDESC
; i
++)
6300 chan_process
[i
] = Qnil
;
6301 proc_buffered_char
[i
] = -1;
6303 bzero (proc_decode_coding_system
, sizeof proc_decode_coding_system
);
6304 bzero (proc_encode_coding_system
, sizeof proc_encode_coding_system
);
6305 #ifdef DATAGRAM_SOCKETS
6306 bzero (datagram_address
, sizeof datagram_address
);
6311 Lisp_Object subfeatures
= Qnil
;
6312 #define ADD_SUBFEATURE(key, val) \
6313 subfeatures = Fcons (Fcons (key, Fcons (val, Qnil)), subfeatures)
6315 #ifdef NON_BLOCKING_CONNECT
6316 ADD_SUBFEATURE (QCnowait
, Qt
);
6318 #ifdef DATAGRAM_SOCKETS
6319 ADD_SUBFEATURE (QCtype
, Qdatagram
);
6321 #ifdef HAVE_LOCAL_SOCKETS
6322 ADD_SUBFEATURE (QCfamily
, Qlocal
);
6324 #ifdef HAVE_GETSOCKNAME
6325 ADD_SUBFEATURE (QCservice
, Qt
);
6327 #if !defined(TERM) && (defined(O_NONBLOCK) || defined(O_NDELAY))
6328 ADD_SUBFEATURE (QCserver
, Qt
);
6330 #ifdef SO_BINDTODEVICE
6331 ADD_SUBFEATURE (QCoptions
, intern ("bindtodevice"));
6334 ADD_SUBFEATURE (QCoptions
, intern ("broadcast"));
6337 ADD_SUBFEATURE (QCoptions
, intern ("dontroute"));
6340 ADD_SUBFEATURE (QCoptions
, intern ("keepalive"));
6343 ADD_SUBFEATURE (QCoptions
, intern ("linger"));
6346 ADD_SUBFEATURE (QCoptions
, intern ("oobinline"));
6349 ADD_SUBFEATURE (QCoptions
, intern ("priority"));
6352 ADD_SUBFEATURE (QCoptions
, intern ("reuseaddr"));
6354 Fprovide (intern ("make-network-process"), subfeatures
);
6356 #endif /* HAVE_SOCKETS */
6362 Qprocessp
= intern ("processp");
6363 staticpro (&Qprocessp
);
6364 Qrun
= intern ("run");
6366 Qstop
= intern ("stop");
6368 Qsignal
= intern ("signal");
6369 staticpro (&Qsignal
);
6371 /* Qexit is already staticpro'd by syms_of_eval; don't staticpro it
6374 Qexit = intern ("exit");
6375 staticpro (&Qexit); */
6377 Qopen
= intern ("open");
6379 Qclosed
= intern ("closed");
6380 staticpro (&Qclosed
);
6381 Qconnect
= intern ("connect");
6382 staticpro (&Qconnect
);
6383 Qfailed
= intern ("failed");
6384 staticpro (&Qfailed
);
6385 Qlisten
= intern ("listen");
6386 staticpro (&Qlisten
);
6387 Qlocal
= intern ("local");
6388 staticpro (&Qlocal
);
6389 Qdatagram
= intern ("datagram");
6390 staticpro (&Qdatagram
);
6392 QCname
= intern (":name");
6393 staticpro (&QCname
);
6394 QCbuffer
= intern (":buffer");
6395 staticpro (&QCbuffer
);
6396 QChost
= intern (":host");
6397 staticpro (&QChost
);
6398 QCservice
= intern (":service");
6399 staticpro (&QCservice
);
6400 QCtype
= intern (":type");
6401 staticpro (&QCtype
);
6402 QClocal
= intern (":local");
6403 staticpro (&QClocal
);
6404 QCremote
= intern (":remote");
6405 staticpro (&QCremote
);
6406 QCcoding
= intern (":coding");
6407 staticpro (&QCcoding
);
6408 QCserver
= intern (":server");
6409 staticpro (&QCserver
);
6410 QCnowait
= intern (":nowait");
6411 staticpro (&QCnowait
);
6412 QCsentinel
= intern (":sentinel");
6413 staticpro (&QCsentinel
);
6414 QClog
= intern (":log");
6416 QCnoquery
= intern (":noquery");
6417 staticpro (&QCnoquery
);
6418 QCstop
= intern (":stop");
6419 staticpro (&QCstop
);
6420 QCoptions
= intern (":options");
6421 staticpro (&QCoptions
);
6422 QCplist
= intern (":plist");
6423 staticpro (&QCplist
);
6424 QCfilter_multibyte
= intern (":filter-multibyte");
6425 staticpro (&QCfilter_multibyte
);
6427 Qlast_nonmenu_event
= intern ("last-nonmenu-event");
6428 staticpro (&Qlast_nonmenu_event
);
6430 staticpro (&Vprocess_alist
);
6432 DEFVAR_BOOL ("delete-exited-processes", &delete_exited_processes
,
6433 doc
: /* *Non-nil means delete processes immediately when they exit.
6434 nil means don't delete them until `list-processes' is run. */);
6436 delete_exited_processes
= 1;
6438 DEFVAR_LISP ("process-connection-type", &Vprocess_connection_type
,
6439 doc
: /* Control type of device used to communicate with subprocesses.
6440 Values are nil to use a pipe, or t or `pty' to use a pty.
6441 The value has no effect if the system has no ptys or if all ptys are busy:
6442 then a pipe is used in any case.
6443 The value takes effect when `start-process' is called. */);
6444 Vprocess_connection_type
= Qt
;
6446 defsubr (&Sprocessp
);
6447 defsubr (&Sget_process
);
6448 defsubr (&Sget_buffer_process
);
6449 defsubr (&Sdelete_process
);
6450 defsubr (&Sprocess_status
);
6451 defsubr (&Sprocess_exit_status
);
6452 defsubr (&Sprocess_id
);
6453 defsubr (&Sprocess_name
);
6454 defsubr (&Sprocess_tty_name
);
6455 defsubr (&Sprocess_command
);
6456 defsubr (&Sset_process_buffer
);
6457 defsubr (&Sprocess_buffer
);
6458 defsubr (&Sprocess_mark
);
6459 defsubr (&Sset_process_filter
);
6460 defsubr (&Sprocess_filter
);
6461 defsubr (&Sset_process_sentinel
);
6462 defsubr (&Sprocess_sentinel
);
6463 defsubr (&Sset_process_window_size
);
6464 defsubr (&Sset_process_inherit_coding_system_flag
);
6465 defsubr (&Sprocess_inherit_coding_system_flag
);
6466 defsubr (&Sset_process_query_on_exit_flag
);
6467 defsubr (&Sprocess_query_on_exit_flag
);
6468 defsubr (&Sprocess_contact
);
6469 defsubr (&Sprocess_plist
);
6470 defsubr (&Sset_process_plist
);
6471 defsubr (&Slist_processes
);
6472 defsubr (&Sprocess_list
);
6473 defsubr (&Sstart_process
);
6475 defsubr (&Sset_network_process_options
);
6476 defsubr (&Smake_network_process
);
6477 defsubr (&Sformat_network_address
);
6478 #endif /* HAVE_SOCKETS */
6479 #ifdef DATAGRAM_SOCKETS
6480 defsubr (&Sprocess_datagram_address
);
6481 defsubr (&Sset_process_datagram_address
);
6483 defsubr (&Saccept_process_output
);
6484 defsubr (&Sprocess_send_region
);
6485 defsubr (&Sprocess_send_string
);
6486 defsubr (&Sinterrupt_process
);
6487 defsubr (&Skill_process
);
6488 defsubr (&Squit_process
);
6489 defsubr (&Sstop_process
);
6490 defsubr (&Scontinue_process
);
6491 defsubr (&Sprocess_running_child_p
);
6492 defsubr (&Sprocess_send_eof
);
6493 defsubr (&Ssignal_process
);
6494 defsubr (&Swaiting_for_user_input_p
);
6495 /* defsubr (&Sprocess_connection); */
6496 defsubr (&Sset_process_coding_system
);
6497 defsubr (&Sprocess_coding_system
);
6498 defsubr (&Sset_process_filter_multibyte
);
6499 defsubr (&Sprocess_filter_multibyte_p
);
6503 #else /* not subprocesses */
6505 #include <sys/types.h>
6509 #include "systime.h"
6510 #include "charset.h"
6512 #include "termopts.h"
6513 #include "sysselect.h"
6515 extern int frame_garbaged
;
6517 extern EMACS_TIME
timer_check ();
6518 extern int timers_run
;
6522 /* As described above, except assuming that there are no subprocesses:
6524 Wait for timeout to elapse and/or keyboard input to be available.
6527 timeout in seconds, or
6528 zero for no limit, or
6529 -1 means gobble data immediately available but don't wait for any.
6531 read_kbd is a Lisp_Object:
6532 0 to ignore keyboard input, or
6533 1 to return when input is available, or
6534 -1 means caller will actually read the input, so don't throw to
6536 a cons cell, meaning wait until its car is non-nil
6537 (and gobble terminal input into the buffer if any arrives), or
6538 We know that read_kbd will never be a Lisp_Process, since
6539 `subprocesses' isn't defined.
6541 do_display != 0 means redisplay should be done to show subprocess
6542 output that arrives.
6544 Return true iff we received input from any process. */
6547 wait_reading_process_input (time_limit
, microsecs
, read_kbd
, do_display
)
6548 int time_limit
, microsecs
;
6549 Lisp_Object read_kbd
;
6553 EMACS_TIME end_time
, timeout
;
6554 SELECT_TYPE waitchannels
;
6556 /* Either nil or a cons cell, the car of which is of interest and
6557 may be changed outside of this routine. */
6558 Lisp_Object wait_for_cell
;
6560 wait_for_cell
= Qnil
;
6562 /* If waiting for non-nil in a cell, record where. */
6563 if (CONSP (read_kbd
))
6565 wait_for_cell
= read_kbd
;
6566 XSETFASTINT (read_kbd
, 0);
6569 /* What does time_limit really mean? */
6570 if (time_limit
|| microsecs
)
6572 EMACS_GET_TIME (end_time
);
6573 EMACS_SET_SECS_USECS (timeout
, time_limit
, microsecs
);
6574 EMACS_ADD_TIME (end_time
, end_time
, timeout
);
6577 /* Turn off periodic alarms (in case they are in use)
6578 and then turn off any other atimers,
6579 because the select emulator uses alarms. */
6581 turn_on_atimers (0);
6585 int timeout_reduced_for_timers
= 0;
6587 /* If calling from keyboard input, do not quit
6588 since we want to return C-g as an input character.
6589 Otherwise, do pending quit if requested. */
6590 if (XINT (read_kbd
) >= 0)
6593 /* Exit now if the cell we're waiting for became non-nil. */
6594 if (! NILP (wait_for_cell
) && ! NILP (XCAR (wait_for_cell
)))
6597 /* Compute time from now till when time limit is up */
6598 /* Exit if already run out */
6599 if (time_limit
== -1)
6601 /* -1 specified for timeout means
6602 gobble output available now
6603 but don't wait at all. */
6605 EMACS_SET_SECS_USECS (timeout
, 0, 0);
6607 else if (time_limit
|| microsecs
)
6609 EMACS_GET_TIME (timeout
);
6610 EMACS_SUB_TIME (timeout
, end_time
, timeout
);
6611 if (EMACS_TIME_NEG_P (timeout
))
6616 EMACS_SET_SECS_USECS (timeout
, 100000, 0);
6619 /* If our caller will not immediately handle keyboard events,
6620 run timer events directly.
6621 (Callers that will immediately read keyboard events
6622 call timer_delay on their own.) */
6623 if (NILP (wait_for_cell
))
6625 EMACS_TIME timer_delay
;
6629 int old_timers_run
= timers_run
;
6630 timer_delay
= timer_check (1);
6631 if (timers_run
!= old_timers_run
&& do_display
)
6632 /* We must retry, since a timer may have requeued itself
6633 and that could alter the time delay. */
6634 redisplay_preserve_echo_area (14);
6638 while (!detect_input_pending ());
6640 /* If there is unread keyboard input, also return. */
6641 if (XINT (read_kbd
) != 0
6642 && requeued_events_pending_p ())
6645 if (! EMACS_TIME_NEG_P (timer_delay
) && time_limit
!= -1)
6647 EMACS_TIME difference
;
6648 EMACS_SUB_TIME (difference
, timer_delay
, timeout
);
6649 if (EMACS_TIME_NEG_P (difference
))
6651 timeout
= timer_delay
;
6652 timeout_reduced_for_timers
= 1;
6657 /* Cause C-g and alarm signals to take immediate action,
6658 and cause input available signals to zero out timeout. */
6659 if (XINT (read_kbd
) < 0)
6660 set_waiting_for_input (&timeout
);
6662 /* Wait till there is something to do. */
6664 if (! XINT (read_kbd
) && NILP (wait_for_cell
))
6665 FD_ZERO (&waitchannels
);
6667 FD_SET (0, &waitchannels
);
6669 /* If a frame has been newly mapped and needs updating,
6670 reprocess its display stuff. */
6671 if (frame_garbaged
&& do_display
)
6673 clear_waiting_for_input ();
6674 redisplay_preserve_echo_area (15);
6675 if (XINT (read_kbd
) < 0)
6676 set_waiting_for_input (&timeout
);
6679 if (XINT (read_kbd
) && detect_input_pending ())
6682 FD_ZERO (&waitchannels
);
6685 nfds
= select (1, &waitchannels
, (SELECT_TYPE
*)0, (SELECT_TYPE
*)0,
6690 /* Make C-g and alarm signals set flags again */
6691 clear_waiting_for_input ();
6693 /* If we woke up due to SIGWINCH, actually change size now. */
6694 do_pending_window_change (0);
6696 if (time_limit
&& nfds
== 0 && ! timeout_reduced_for_timers
)
6697 /* We waited the full specified time, so return now. */
6702 /* If the system call was interrupted, then go around the
6704 if (xerrno
== EINTR
)
6705 FD_ZERO (&waitchannels
);
6707 error ("select error: %s", emacs_strerror (xerrno
));
6710 else if (nfds
> 0 && (waitchannels
& 1) && interrupt_input
)
6711 /* System sometimes fails to deliver SIGIO. */
6712 kill (getpid (), SIGIO
);
6715 if (XINT (read_kbd
) && interrupt_input
&& (waitchannels
& 1))
6716 kill (getpid (), SIGIO
);
6719 /* Check for keyboard input */
6721 if ((XINT (read_kbd
) != 0)
6722 && detect_input_pending_run_timers (do_display
))
6724 swallow_events (do_display
);
6725 if (detect_input_pending_run_timers (do_display
))
6729 /* If there is unread keyboard input, also return. */
6730 if (XINT (read_kbd
) != 0
6731 && requeued_events_pending_p ())
6734 /* If wait_for_cell. check for keyboard input
6735 but don't run any timers.
6736 ??? (It seems wrong to me to check for keyboard
6737 input at all when wait_for_cell, but the code
6738 has been this way since July 1994.
6739 Try changing this after version 19.31.) */
6740 if (! NILP (wait_for_cell
)
6741 && detect_input_pending ())
6743 swallow_events (do_display
);
6744 if (detect_input_pending ())
6748 /* Exit now if the cell we're waiting for became non-nil. */
6749 if (! NILP (wait_for_cell
) && ! NILP (XCAR (wait_for_cell
)))
6759 /* Don't confuse make-docfile by having two doc strings for this function.
6760 make-docfile does not pay attention to #if, for good reason! */
6761 DEFUN ("get-buffer-process", Fget_buffer_process
, Sget_buffer_process
, 1, 1, 0,
6764 register Lisp_Object name
;
6769 /* Don't confuse make-docfile by having two doc strings for this function.
6770 make-docfile does not pay attention to #if, for good reason! */
6771 DEFUN ("process-inherit-coding-system-flag",
6772 Fprocess_inherit_coding_system_flag
, Sprocess_inherit_coding_system_flag
,
6776 register Lisp_Object process
;
6778 /* Ignore the argument and return the value of
6779 inherit-process-coding-system. */
6780 return inherit_process_coding_system
? Qt
: Qnil
;
6783 /* Kill all processes associated with `buffer'.
6784 If `buffer' is nil, kill all processes.
6785 Since we have no subprocesses, this does nothing. */
6788 kill_buffer_processes (buffer
)
6801 QCtype
= intern (":type");
6802 staticpro (&QCtype
);
6804 defsubr (&Sget_buffer_process
);
6805 defsubr (&Sprocess_inherit_coding_system_flag
);
6809 #endif /* not subprocesses */