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 */
101 /* Can we use SIOCGIFCONF and/or SIOCGIFADDR */
103 #if defined(HAVE_SYS_IOCTL_H) && defined(HAVE_NET_IF_H)
104 /* sys/ioctl.h may have been included already */
106 #include <sys/ioctl.h>
113 #include <sys/sysmacros.h> /* for "minor" */
114 #endif /* not IRIS */
117 #include <sys/wait.h>
129 #include "termhooks.h"
130 #include "termopts.h"
131 #include "commands.h"
132 #include "keyboard.h"
134 #include "blockinput.h"
135 #include "dispextern.h"
136 #include "composite.h"
139 Lisp_Object Qprocessp
;
140 Lisp_Object Qrun
, Qstop
, Qsignal
;
141 Lisp_Object Qopen
, Qclosed
, Qconnect
, Qfailed
, Qlisten
;
142 Lisp_Object Qlocal
, Qdatagram
;
143 Lisp_Object QCname
, QCbuffer
, QChost
, QCservice
, QCtype
;
144 Lisp_Object QClocal
, QCremote
, QCcoding
;
145 Lisp_Object QCserver
, QCnowait
, QCnoquery
, QCstop
;
146 Lisp_Object QCsentinel
, QClog
, QCoptions
, QCplist
;
147 Lisp_Object QCfilter_multibyte
;
148 Lisp_Object Qlast_nonmenu_event
;
149 /* QCfamily is declared and initialized in xfaces.c,
150 QCfilter in keyboard.c. */
151 extern Lisp_Object QCfamily
, QCfilter
;
153 /* Qexit is declared and initialized in eval.c. */
155 /* QCfamily is defined in xfaces.c. */
156 extern Lisp_Object QCfamily
;
157 /* QCfilter is defined in keyboard.c. */
158 extern Lisp_Object QCfilter
;
160 /* a process object is a network connection when its childp field is neither
161 Qt nor Qnil but is instead a property list (KEY VAL ...). */
164 #define NETCONN_P(p) (GC_CONSP (XPROCESS (p)->childp))
165 #define NETCONN1_P(p) (GC_CONSP ((p)->childp))
167 #define NETCONN_P(p) 0
168 #define NETCONN1_P(p) 0
169 #endif /* HAVE_SOCKETS */
171 /* Define first descriptor number available for subprocesses. */
173 #define FIRST_PROC_DESC 1
175 #define FIRST_PROC_DESC 3
178 /* Define SIGCHLD as an alias for SIGCLD. There are many conditionals
181 #if !defined (SIGCHLD) && defined (SIGCLD)
182 #define SIGCHLD SIGCLD
185 #include "syssignal.h"
189 extern void set_waiting_for_input
P_ ((EMACS_TIME
*));
195 extern char *sys_errlist
[];
202 /* t means use pty, nil means use a pipe,
203 maybe other values to come. */
204 static Lisp_Object Vprocess_connection_type
;
208 #include <sys/socket.h>
212 /* These next two vars are non-static since sysdep.c uses them in the
213 emulation of `select'. */
214 /* Number of events of change of status of a process. */
216 /* Number of events for which the user or sentinel has been notified. */
219 /* Define NON_BLOCKING_CONNECT if we can support non-blocking connects. */
221 #ifdef BROKEN_NON_BLOCKING_CONNECT
222 #undef NON_BLOCKING_CONNECT
224 #ifndef NON_BLOCKING_CONNECT
227 #if defined (HAVE_GETPEERNAME) || defined (GNU_LINUX)
228 #if defined (O_NONBLOCK) || defined (O_NDELAY)
229 #if defined (EWOULDBLOCK) || defined (EINPROGRESS)
230 #define NON_BLOCKING_CONNECT
231 #endif /* EWOULDBLOCK || EINPROGRESS */
232 #endif /* O_NONBLOCK || O_NDELAY */
233 #endif /* HAVE_GETPEERNAME || GNU_LINUX */
234 #endif /* HAVE_SELECT */
235 #endif /* HAVE_SOCKETS */
236 #endif /* NON_BLOCKING_CONNECT */
237 #endif /* BROKEN_NON_BLOCKING_CONNECT */
239 /* Define DATAGRAM_SOCKETS if datagrams can be used safely on
240 this system. We need to read full packets, so we need a
241 "non-destructive" select. So we require either native select,
242 or emulation of select using FIONREAD. */
244 #ifdef BROKEN_DATAGRAM_SOCKETS
245 #undef DATAGRAM_SOCKETS
247 #ifndef DATAGRAM_SOCKETS
249 #if defined (HAVE_SELECT) || defined (FIONREAD)
250 #if defined (HAVE_SENDTO) && defined (HAVE_RECVFROM) && defined (EMSGSIZE)
251 #define DATAGRAM_SOCKETS
252 #endif /* HAVE_SENDTO && HAVE_RECVFROM && EMSGSIZE */
253 #endif /* HAVE_SELECT || FIONREAD */
254 #endif /* HAVE_SOCKETS */
255 #endif /* DATAGRAM_SOCKETS */
256 #endif /* BROKEN_DATAGRAM_SOCKETS */
259 #undef NON_BLOCKING_CONNECT
260 #undef DATAGRAM_SOCKETS
264 #include "sysselect.h"
266 extern int keyboard_bit_set
P_ ((SELECT_TYPE
*));
268 /* If we support a window system, turn on the code to poll periodically
269 to detect C-g. It isn't actually used when doing interrupt input. */
270 #ifdef HAVE_WINDOW_SYSTEM
271 #define POLL_FOR_INPUT
274 /* Mask of bits indicating the descriptors that we wait for input on. */
276 static SELECT_TYPE input_wait_mask
;
278 /* Mask that excludes keyboard input descriptor (s). */
280 static SELECT_TYPE non_keyboard_wait_mask
;
282 /* Mask that excludes process input descriptor (s). */
284 static SELECT_TYPE non_process_wait_mask
;
286 /* Mask of bits indicating the descriptors that we wait for connect to
287 complete on. Once they complete, they are removed from this mask
288 and added to the input_wait_mask and non_keyboard_wait_mask. */
290 static SELECT_TYPE connect_wait_mask
;
292 /* Number of bits set in connect_wait_mask. */
293 static int num_pending_connects
;
295 /* The largest descriptor currently in use for a process object. */
296 static int max_process_desc
;
298 /* The largest descriptor currently in use for keyboard input. */
299 static int max_keyboard_desc
;
301 /* Nonzero means delete a process right away if it exits. */
302 static int delete_exited_processes
;
304 /* Indexed by descriptor, gives the process (if any) for that descriptor */
305 Lisp_Object chan_process
[MAXDESC
];
307 /* Alist of elements (NAME . PROCESS) */
308 Lisp_Object Vprocess_alist
;
310 /* Buffered-ahead input char from process, indexed by channel.
311 -1 means empty (no char is buffered).
312 Used on sys V where the only way to tell if there is any
313 output from the process is to read at least one char.
314 Always -1 on systems that support FIONREAD. */
316 /* Don't make static; need to access externally. */
317 int proc_buffered_char
[MAXDESC
];
319 /* Table of `struct coding-system' for each process. */
320 static struct coding_system
*proc_decode_coding_system
[MAXDESC
];
321 static struct coding_system
*proc_encode_coding_system
[MAXDESC
];
323 #ifdef DATAGRAM_SOCKETS
324 /* Table of `partner address' for datagram sockets. */
325 struct sockaddr_and_len
{
328 } datagram_address
[MAXDESC
];
329 #define DATAGRAM_CHAN_P(chan) (datagram_address[chan].sa != 0)
330 #define DATAGRAM_CONN_P(proc) (PROCESSP (proc) && datagram_address[XINT (XPROCESS (proc)->infd)].sa != 0)
332 #define DATAGRAM_CHAN_P(chan) (0)
333 #define DATAGRAM_CONN_P(proc) (0)
336 static Lisp_Object
get_process ();
337 static void exec_sentinel ();
339 extern EMACS_TIME
timer_check ();
340 extern int timers_run
;
342 /* Maximum number of bytes to send to a pty without an eof. */
343 static int pty_max_bytes
;
345 extern Lisp_Object Vfile_name_coding_system
, Vdefault_file_name_coding_system
;
351 /* The file name of the pty opened by allocate_pty. */
353 static char pty_name
[24];
356 /* Compute the Lisp form of the process status, p->status, from
357 the numeric status that was returned by `wait'. */
359 Lisp_Object
status_convert ();
363 struct Lisp_Process
*p
;
365 union { int i
; WAITTYPE wt
; } u
;
366 u
.i
= XFASTINT (p
->raw_status_low
) + (XFASTINT (p
->raw_status_high
) << 16);
367 p
->status
= status_convert (u
.wt
);
368 p
->raw_status_low
= Qnil
;
369 p
->raw_status_high
= Qnil
;
372 /* Convert a process status word in Unix format to
373 the list that we use internally. */
380 return Fcons (Qstop
, Fcons (make_number (WSTOPSIG (w
)), Qnil
));
381 else if (WIFEXITED (w
))
382 return Fcons (Qexit
, Fcons (make_number (WRETCODE (w
)),
383 WCOREDUMP (w
) ? Qt
: Qnil
));
384 else if (WIFSIGNALED (w
))
385 return Fcons (Qsignal
, Fcons (make_number (WTERMSIG (w
)),
386 WCOREDUMP (w
) ? Qt
: Qnil
));
391 /* Given a status-list, extract the three pieces of information
392 and store them individually through the three pointers. */
395 decode_status (l
, symbol
, code
, coredump
)
413 *code
= XFASTINT (XCAR (tem
));
415 *coredump
= !NILP (tem
);
419 /* Return a string describing a process status list. */
422 status_message (status
)
427 Lisp_Object string
, string2
;
429 decode_status (status
, &symbol
, &code
, &coredump
);
431 if (EQ (symbol
, Qsignal
) || EQ (symbol
, Qstop
))
434 synchronize_system_messages_locale ();
435 signame
= strsignal (code
);
438 string
= build_string (signame
);
439 string2
= build_string (coredump
? " (core dumped)\n" : "\n");
440 SSET (string
, 0, DOWNCASE (SREF (string
, 0)));
441 return concat2 (string
, string2
);
443 else if (EQ (symbol
, Qexit
))
446 return build_string ("finished\n");
447 string
= Fnumber_to_string (make_number (code
));
448 string2
= build_string (coredump
? " (core dumped)\n" : "\n");
449 return concat3 (build_string ("exited abnormally with code "),
452 else if (EQ (symbol
, Qfailed
))
454 string
= Fnumber_to_string (make_number (code
));
455 string2
= build_string ("\n");
456 return concat3 (build_string ("failed with code "),
460 return Fcopy_sequence (Fsymbol_name (symbol
));
465 /* Open an available pty, returning a file descriptor.
466 Return -1 on failure.
467 The file name of the terminal corresponding to the pty
468 is left in the variable pty_name. */
479 for (c
= FIRST_PTY_LETTER
; c
<= 'z'; c
++)
480 for (i
= 0; i
< 16; i
++)
483 struct stat stb
; /* Used in some PTY_OPEN. */
484 #ifdef PTY_NAME_SPRINTF
487 sprintf (pty_name
, "/dev/pty%c%x", c
, i
);
488 #endif /* no PTY_NAME_SPRINTF */
492 #else /* no PTY_OPEN */
495 /* Unusual IRIS code */
496 *ptyv
= emacs_open ("/dev/ptc", O_RDWR
| O_NDELAY
, 0);
499 if (fstat (fd
, &stb
) < 0)
501 # else /* not IRIS */
502 { /* Some systems name their pseudoterminals so that there are gaps in
503 the usual sequence - for example, on HP9000/S700 systems, there
504 are no pseudoterminals with names ending in 'f'. So we wait for
505 three failures in a row before deciding that we've reached the
507 int failed_count
= 0;
509 if (stat (pty_name
, &stb
) < 0)
512 if (failed_count
>= 3)
519 fd
= emacs_open (pty_name
, O_RDWR
| O_NONBLOCK
, 0);
521 fd
= emacs_open (pty_name
, O_RDWR
| O_NDELAY
, 0);
523 # endif /* not IRIS */
525 #endif /* no PTY_OPEN */
529 /* check to make certain that both sides are available
530 this avoids a nasty yet stupid bug in rlogins */
531 #ifdef PTY_TTY_NAME_SPRINTF
534 sprintf (pty_name
, "/dev/tty%c%x", c
, i
);
535 #endif /* no PTY_TTY_NAME_SPRINTF */
537 if (access (pty_name
, 6) != 0)
540 # if !defined(IRIS) && !defined(__sgi)
546 #endif /* not UNIPLUS */
553 #endif /* HAVE_PTYS */
559 register Lisp_Object val
, tem
, name1
;
560 register struct Lisp_Process
*p
;
564 p
= allocate_process ();
566 XSETINT (p
->infd
, -1);
567 XSETINT (p
->outfd
, -1);
568 XSETFASTINT (p
->pid
, 0);
569 XSETFASTINT (p
->tick
, 0);
570 XSETFASTINT (p
->update_tick
, 0);
571 p
->raw_status_low
= Qnil
;
572 p
->raw_status_high
= Qnil
;
574 p
->mark
= Fmake_marker ();
576 /* If name is already in use, modify it until it is unused. */
581 tem
= Fget_process (name1
);
582 if (NILP (tem
)) break;
583 sprintf (suffix
, "<%d>", i
);
584 name1
= concat2 (name
, build_string (suffix
));
588 XSETPROCESS (val
, p
);
589 Vprocess_alist
= Fcons (Fcons (name
, val
), Vprocess_alist
);
594 remove_process (proc
)
595 register Lisp_Object proc
;
597 register Lisp_Object pair
;
599 pair
= Frassq (proc
, Vprocess_alist
);
600 Vprocess_alist
= Fdelq (pair
, Vprocess_alist
);
602 deactivate_process (proc
);
605 /* Setup coding systems of PROCESS. */
608 setup_process_coding_systems (process
)
611 struct Lisp_Process
*p
= XPROCESS (process
);
612 int inch
= XINT (p
->infd
);
613 int outch
= XINT (p
->outfd
);
615 if (inch
< 0 || outch
< 0)
618 if (!proc_decode_coding_system
[inch
])
619 proc_decode_coding_system
[inch
]
620 = (struct coding_system
*) xmalloc (sizeof (struct coding_system
));
621 setup_coding_system (p
->decode_coding_system
,
622 proc_decode_coding_system
[inch
]);
623 if (! NILP (p
->filter
))
625 if (NILP (p
->filter_multibyte
))
626 setup_raw_text_coding_system (proc_decode_coding_system
[inch
]);
628 else if (BUFFERP (p
->buffer
))
630 if (NILP (XBUFFER (p
->buffer
)->enable_multibyte_characters
))
631 setup_raw_text_coding_system (proc_decode_coding_system
[inch
]);
634 if (!proc_encode_coding_system
[outch
])
635 proc_encode_coding_system
[outch
]
636 = (struct coding_system
*) xmalloc (sizeof (struct coding_system
));
637 setup_coding_system (p
->encode_coding_system
,
638 proc_encode_coding_system
[outch
]);
641 DEFUN ("processp", Fprocessp
, Sprocessp
, 1, 1, 0,
642 doc
: /* Return t if OBJECT is a process. */)
646 return PROCESSP (object
) ? Qt
: Qnil
;
649 DEFUN ("get-process", Fget_process
, Sget_process
, 1, 1, 0,
650 doc
: /* Return the process named NAME, or nil if there is none. */)
652 register Lisp_Object name
;
657 return Fcdr (Fassoc (name
, Vprocess_alist
));
660 DEFUN ("get-buffer-process", Fget_buffer_process
, Sget_buffer_process
, 1, 1, 0,
661 doc
: /* Return the (or a) process associated with BUFFER.
662 BUFFER may be a buffer or the name of one. */)
664 register Lisp_Object buffer
;
666 register Lisp_Object buf
, tail
, proc
;
668 if (NILP (buffer
)) return Qnil
;
669 buf
= Fget_buffer (buffer
);
670 if (NILP (buf
)) return Qnil
;
672 for (tail
= Vprocess_alist
; !NILP (tail
); tail
= Fcdr (tail
))
674 proc
= Fcdr (Fcar (tail
));
675 if (PROCESSP (proc
) && EQ (XPROCESS (proc
)->buffer
, buf
))
681 /* This is how commands for the user decode process arguments. It
682 accepts a process, a process name, a buffer, a buffer name, or nil.
683 Buffers denote the first process in the buffer, and nil denotes the
688 register Lisp_Object name
;
690 register Lisp_Object proc
, obj
;
693 obj
= Fget_process (name
);
695 obj
= Fget_buffer (name
);
697 error ("Process %s does not exist", SDATA (name
));
699 else if (NILP (name
))
700 obj
= Fcurrent_buffer ();
704 /* Now obj should be either a buffer object or a process object.
708 proc
= Fget_buffer_process (obj
);
710 error ("Buffer %s has no process", SDATA (XBUFFER (obj
)->name
));
720 DEFUN ("delete-process", Fdelete_process
, Sdelete_process
, 1, 1, 0,
721 doc
: /* Delete PROCESS: kill it and forget about it immediately.
722 PROCESS may be a process, a buffer, the name of a process or buffer, or
723 nil, indicating the current buffer's process. */)
725 register Lisp_Object process
;
727 process
= get_process (process
);
728 XPROCESS (process
)->raw_status_low
= Qnil
;
729 XPROCESS (process
)->raw_status_high
= Qnil
;
730 if (NETCONN_P (process
))
732 XPROCESS (process
)->status
= Fcons (Qexit
, Fcons (make_number (0), Qnil
));
733 XSETINT (XPROCESS (process
)->tick
, ++process_tick
);
735 else if (XINT (XPROCESS (process
)->infd
) >= 0)
737 Fkill_process (process
, Qnil
);
738 /* Do this now, since remove_process will make sigchld_handler do nothing. */
739 XPROCESS (process
)->status
740 = Fcons (Qsignal
, Fcons (make_number (SIGKILL
), Qnil
));
741 XSETINT (XPROCESS (process
)->tick
, ++process_tick
);
744 remove_process (process
);
748 DEFUN ("process-status", Fprocess_status
, Sprocess_status
, 1, 1, 0,
749 doc
: /* Return the status of PROCESS.
750 The returned value is one of the following symbols:
751 run -- for a process that is running.
752 stop -- for a process stopped but continuable.
753 exit -- for a process that has exited.
754 signal -- for a process that has got a fatal signal.
755 open -- for a network stream connection that is open.
756 listen -- for a network stream server that is listening.
757 closed -- for a network stream connection that is closed.
758 connect -- when waiting for a non-blocking connection to complete.
759 failed -- when a non-blocking connection has failed.
760 nil -- if arg is a process name and no such process exists.
761 PROCESS may be a process, a buffer, the name of a process, or
762 nil, indicating the current buffer's process. */)
764 register Lisp_Object process
;
766 register struct Lisp_Process
*p
;
767 register Lisp_Object status
;
769 if (STRINGP (process
))
770 process
= Fget_process (process
);
772 process
= get_process (process
);
777 p
= XPROCESS (process
);
778 if (!NILP (p
->raw_status_low
))
782 status
= XCAR (status
);
785 if (EQ (status
, Qexit
))
787 else if (EQ (p
->command
, Qt
))
789 else if (EQ (status
, Qrun
))
795 DEFUN ("process-exit-status", Fprocess_exit_status
, Sprocess_exit_status
,
797 doc
: /* Return the exit status of PROCESS or the signal number that killed it.
798 If PROCESS has not yet exited or died, return 0. */)
800 register Lisp_Object process
;
802 CHECK_PROCESS (process
);
803 if (!NILP (XPROCESS (process
)->raw_status_low
))
804 update_status (XPROCESS (process
));
805 if (CONSP (XPROCESS (process
)->status
))
806 return XCAR (XCDR (XPROCESS (process
)->status
));
807 return make_number (0);
810 DEFUN ("process-id", Fprocess_id
, Sprocess_id
, 1, 1, 0,
811 doc
: /* Return the process id of PROCESS.
812 This is the pid of the Unix process which PROCESS uses or talks to.
813 For a network connection, this value is nil. */)
815 register Lisp_Object process
;
817 CHECK_PROCESS (process
);
818 return XPROCESS (process
)->pid
;
821 DEFUN ("process-name", Fprocess_name
, Sprocess_name
, 1, 1, 0,
822 doc
: /* Return the name of PROCESS, as a string.
823 This is the name of the program invoked in PROCESS,
824 possibly modified to make it unique among process names. */)
826 register Lisp_Object process
;
828 CHECK_PROCESS (process
);
829 return XPROCESS (process
)->name
;
832 DEFUN ("process-command", Fprocess_command
, Sprocess_command
, 1, 1, 0,
833 doc
: /* Return the command that was executed to start PROCESS.
834 This is a list of strings, the first string being the program executed
835 and the rest of the strings being the arguments given to it.
836 For a non-child channel, this is nil. */)
838 register Lisp_Object process
;
840 CHECK_PROCESS (process
);
841 return XPROCESS (process
)->command
;
844 DEFUN ("process-tty-name", Fprocess_tty_name
, Sprocess_tty_name
, 1, 1, 0,
845 doc
: /* Return the name of the terminal PROCESS uses, or nil if none.
846 This is the terminal that the process itself reads and writes on,
847 not the name of the pty that Emacs uses to talk with that terminal. */)
849 register Lisp_Object process
;
851 CHECK_PROCESS (process
);
852 return XPROCESS (process
)->tty_name
;
855 DEFUN ("set-process-buffer", Fset_process_buffer
, Sset_process_buffer
,
857 doc
: /* Set buffer associated with PROCESS to BUFFER (a buffer, or nil). */)
859 register Lisp_Object process
, buffer
;
861 struct Lisp_Process
*p
;
863 CHECK_PROCESS (process
);
865 CHECK_BUFFER (buffer
);
866 p
= XPROCESS (process
);
869 p
->childp
= Fplist_put (p
->childp
, QCbuffer
, buffer
);
870 setup_process_coding_systems (process
);
874 DEFUN ("process-buffer", Fprocess_buffer
, Sprocess_buffer
,
876 doc
: /* Return the buffer PROCESS is associated with.
877 Output from PROCESS is inserted in this buffer unless PROCESS has a filter. */)
879 register Lisp_Object process
;
881 CHECK_PROCESS (process
);
882 return XPROCESS (process
)->buffer
;
885 DEFUN ("process-mark", Fprocess_mark
, Sprocess_mark
,
887 doc
: /* Return the marker for the end of the last output from PROCESS. */)
889 register Lisp_Object process
;
891 CHECK_PROCESS (process
);
892 return XPROCESS (process
)->mark
;
895 DEFUN ("set-process-filter", Fset_process_filter
, Sset_process_filter
,
897 doc
: /* Give PROCESS the filter function FILTER; nil means no filter.
898 t means stop accepting output from the process.
900 When a process has a filter, its buffer is not used for output.
901 Instead, each time it does output, the entire string of output is
902 passed to the filter.
904 The filter gets two arguments: the process and the string of output.
905 The string argument is normally a multibyte string, except:
906 - if the process' input coding system is no-conversion or raw-text,
907 it is a unibyte string (the non-converted input), or else
908 - if `default-enable-multibyte-characters' is nil, it is a unibyte
909 string (the result of converting the decoded input multibyte
910 string to unibyte with `string-make-unibyte'). */)
912 register Lisp_Object process
, filter
;
914 struct Lisp_Process
*p
;
916 CHECK_PROCESS (process
);
917 p
= XPROCESS (process
);
919 /* Don't signal an error if the process' input file descriptor
920 is closed. This could make debugging Lisp more difficult,
921 for example when doing something like
923 (setq process (start-process ...))
925 (set-process-filter process ...) */
927 if (XINT (p
->infd
) >= 0)
929 if (EQ (filter
, Qt
) && !EQ (p
->status
, Qlisten
))
931 FD_CLR (XINT (p
->infd
), &input_wait_mask
);
932 FD_CLR (XINT (p
->infd
), &non_keyboard_wait_mask
);
934 else if (EQ (p
->filter
, Qt
)
935 && !EQ (p
->command
, Qt
)) /* Network process not stopped. */
937 FD_SET (XINT (p
->infd
), &input_wait_mask
);
938 FD_SET (XINT (p
->infd
), &non_keyboard_wait_mask
);
944 p
->childp
= Fplist_put (p
->childp
, QCfilter
, filter
);
945 setup_process_coding_systems (process
);
949 DEFUN ("process-filter", Fprocess_filter
, Sprocess_filter
,
951 doc
: /* Returns the filter function of PROCESS; nil if none.
952 See `set-process-filter' for more info on filter functions. */)
954 register Lisp_Object process
;
956 CHECK_PROCESS (process
);
957 return XPROCESS (process
)->filter
;
960 DEFUN ("set-process-sentinel", Fset_process_sentinel
, Sset_process_sentinel
,
962 doc
: /* Give PROCESS the sentinel SENTINEL; nil for none.
963 The sentinel is called as a function when the process changes state.
964 It gets two arguments: the process, and a string describing the change. */)
966 register Lisp_Object process
, sentinel
;
968 struct Lisp_Process
*p
;
970 CHECK_PROCESS (process
);
971 p
= XPROCESS (process
);
973 p
->sentinel
= sentinel
;
975 p
->childp
= Fplist_put (p
->childp
, QCsentinel
, sentinel
);
979 DEFUN ("process-sentinel", Fprocess_sentinel
, Sprocess_sentinel
,
981 doc
: /* Return the sentinel of PROCESS; nil if none.
982 See `set-process-sentinel' for more info on sentinels. */)
984 register Lisp_Object process
;
986 CHECK_PROCESS (process
);
987 return XPROCESS (process
)->sentinel
;
990 DEFUN ("set-process-window-size", Fset_process_window_size
,
991 Sset_process_window_size
, 3, 3, 0,
992 doc
: /* Tell PROCESS that it has logical window size HEIGHT and WIDTH. */)
993 (process
, height
, width
)
994 register Lisp_Object process
, height
, width
;
996 CHECK_PROCESS (process
);
997 CHECK_NATNUM (height
);
998 CHECK_NATNUM (width
);
1000 if (XINT (XPROCESS (process
)->infd
) < 0
1001 || set_window_size (XINT (XPROCESS (process
)->infd
),
1002 XINT (height
), XINT (width
)) <= 0)
1008 DEFUN ("set-process-inherit-coding-system-flag",
1009 Fset_process_inherit_coding_system_flag
,
1010 Sset_process_inherit_coding_system_flag
, 2, 2, 0,
1011 doc
: /* Determine whether buffer of PROCESS will inherit coding-system.
1012 If the second argument FLAG is non-nil, then the variable
1013 `buffer-file-coding-system' of the buffer associated with PROCESS
1014 will be bound to the value of the coding system used to decode
1017 This is useful when the coding system specified for the process buffer
1018 leaves either the character code conversion or the end-of-line conversion
1019 unspecified, or if the coding system used to decode the process output
1020 is more appropriate for saving the process buffer.
1022 Binding the variable `inherit-process-coding-system' to non-nil before
1023 starting the process is an alternative way of setting the inherit flag
1024 for the process which will run. */)
1026 register Lisp_Object process
, flag
;
1028 CHECK_PROCESS (process
);
1029 XPROCESS (process
)->inherit_coding_system_flag
= flag
;
1033 DEFUN ("process-inherit-coding-system-flag",
1034 Fprocess_inherit_coding_system_flag
, Sprocess_inherit_coding_system_flag
,
1036 doc
: /* Return the value of inherit-coding-system flag for PROCESS.
1037 If this flag is t, `buffer-file-coding-system' of the buffer
1038 associated with PROCESS will inherit the coding system used to decode
1039 the process output. */)
1041 register Lisp_Object process
;
1043 CHECK_PROCESS (process
);
1044 return XPROCESS (process
)->inherit_coding_system_flag
;
1047 DEFUN ("set-process-query-on-exit-flag",
1048 Fset_process_query_on_exit_flag
, Sset_process_query_on_exit_flag
,
1050 doc
: /* Specify if query is needed for PROCESS when Emacs is exited.
1051 If the second argument FLAG is non-nil, emacs will query the user before
1052 exiting if PROCESS is running. */)
1054 register Lisp_Object process
, flag
;
1056 CHECK_PROCESS (process
);
1057 XPROCESS (process
)->kill_without_query
= Fnull (flag
);
1061 DEFUN ("process-query-on-exit-flag",
1062 Fprocess_query_on_exit_flag
, Sprocess_query_on_exit_flag
,
1064 doc
: /* Return the current value of query on exit flag for PROCESS. */)
1066 register Lisp_Object process
;
1068 CHECK_PROCESS (process
);
1069 return Fnull (XPROCESS (process
)->kill_without_query
);
1072 #ifdef DATAGRAM_SOCKETS
1073 Lisp_Object
Fprocess_datagram_address ();
1076 DEFUN ("process-contact", Fprocess_contact
, Sprocess_contact
,
1078 doc
: /* Return the contact info of PROCESS; t for a real child.
1079 For a net connection, the value depends on the optional KEY arg.
1080 If KEY is nil, value is a cons cell of the form (HOST SERVICE),
1081 if KEY is t, the complete contact information for the connection is
1082 returned, else the specific value for the keyword KEY is returned.
1083 See `make-network-process' for a list of keywords. */)
1085 register Lisp_Object process
, key
;
1087 Lisp_Object contact
;
1089 CHECK_PROCESS (process
);
1090 contact
= XPROCESS (process
)->childp
;
1092 #ifdef DATAGRAM_SOCKETS
1093 if (DATAGRAM_CONN_P (process
)
1094 && (EQ (key
, Qt
) || EQ (key
, QCremote
)))
1095 contact
= Fplist_put (contact
, QCremote
,
1096 Fprocess_datagram_address (process
));
1099 if (!NETCONN_P (process
) || EQ (key
, Qt
))
1102 return Fcons (Fplist_get (contact
, QChost
),
1103 Fcons (Fplist_get (contact
, QCservice
), Qnil
));
1104 return Fplist_get (contact
, key
);
1107 DEFUN ("process-plist", Fprocess_plist
, Sprocess_plist
,
1109 doc
: /* Return the plist of PROCESS. */)
1111 register Lisp_Object process
;
1113 CHECK_PROCESS (process
);
1114 return XPROCESS (process
)->plist
;
1117 DEFUN ("set-process-plist", Fset_process_plist
, Sset_process_plist
,
1119 doc
: /* Replace the plist of PROCESS with PLIST. Returns PLIST. */)
1121 register Lisp_Object process
, plist
;
1123 CHECK_PROCESS (process
);
1126 XPROCESS (process
)->plist
= plist
;
1130 #if 0 /* Turned off because we don't currently record this info
1131 in the process. Perhaps add it. */
1132 DEFUN ("process-connection", Fprocess_connection
, Sprocess_connection
, 1, 1, 0,
1133 doc
: /* Return the connection type of PROCESS.
1134 The value is nil for a pipe, t or `pty' for a pty, or `stream' for
1135 a socket connection. */)
1137 Lisp_Object process
;
1139 return XPROCESS (process
)->type
;
1144 DEFUN ("format-network-address", Fformat_network_address
, Sformat_network_address
,
1146 doc
: /* Convert network ADDRESS from internal format to a string.
1147 If optional second argument OMIT-PORT is non-nil, don't include a port
1148 number in the string; in this case, interpret a 4 element vector as an
1149 IP address. Returns nil if format of ADDRESS is invalid. */)
1150 (address
, omit_port
)
1151 Lisp_Object address
, omit_port
;
1156 if (STRINGP (address
)) /* AF_LOCAL */
1159 if (VECTORP (address
)) /* AF_INET */
1161 register struct Lisp_Vector
*p
= XVECTOR (address
);
1162 Lisp_Object args
[6];
1165 if (!NILP (omit_port
) && (p
->size
== 4 || p
->size
== 5))
1167 args
[0] = build_string ("%d.%d.%d.%d");
1170 else if (p
->size
== 5)
1172 args
[0] = build_string ("%d.%d.%d.%d:%d");
1178 for (i
= 0; i
< nargs
; i
++)
1179 args
[i
+1] = p
->contents
[i
];
1180 return Fformat (nargs
+1, args
);
1183 if (CONSP (address
))
1185 Lisp_Object args
[2];
1186 args
[0] = build_string ("<Family %d>");
1187 args
[1] = Fcar (address
);
1188 return Fformat (2, args
);
1197 list_processes_1 (query_only
)
1198 Lisp_Object query_only
;
1200 register Lisp_Object tail
, tem
;
1201 Lisp_Object proc
, minspace
, tem1
;
1202 register struct Lisp_Process
*p
;
1204 int w_proc
, w_buffer
, w_tty
;
1205 Lisp_Object i_status
, i_buffer
, i_tty
, i_command
;
1207 w_proc
= 4; /* Proc */
1208 w_buffer
= 6; /* Buffer */
1209 w_tty
= 0; /* Omit if no ttys */
1211 for (tail
= Vprocess_alist
; !NILP (tail
); tail
= Fcdr (tail
))
1215 proc
= Fcdr (Fcar (tail
));
1216 p
= XPROCESS (proc
);
1217 if (NILP (p
->childp
))
1219 if (!NILP (query_only
) && !NILP (p
->kill_without_query
))
1221 if (STRINGP (p
->name
)
1222 && ( i
= SCHARS (p
->name
), (i
> w_proc
)))
1224 if (!NILP (p
->buffer
))
1226 if (NILP (XBUFFER (p
->buffer
)->name
) && w_buffer
< 8)
1227 w_buffer
= 8; /* (Killed) */
1228 else if ((i
= SCHARS (XBUFFER (p
->buffer
)->name
), (i
> w_buffer
)))
1231 if (STRINGP (p
->tty_name
)
1232 && (i
= SCHARS (p
->tty_name
), (i
> w_tty
)))
1236 XSETFASTINT (i_status
, w_proc
+ 1);
1237 XSETFASTINT (i_buffer
, XFASTINT (i_status
) + 9);
1240 XSETFASTINT (i_tty
, XFASTINT (i_buffer
) + w_buffer
+ 1);
1241 XSETFASTINT (i_command
, XFASTINT (i_buffer
) + w_tty
+ 1);
1244 XSETFASTINT (i_command
, XFASTINT (i_buffer
) + w_buffer
+ 1);
1247 XSETFASTINT (minspace
, 1);
1249 set_buffer_internal (XBUFFER (Vstandard_output
));
1250 Fbuffer_disable_undo (Vstandard_output
);
1252 current_buffer
->truncate_lines
= Qt
;
1254 write_string ("Proc", -1);
1255 Findent_to (i_status
, minspace
); write_string ("Status", -1);
1256 Findent_to (i_buffer
, minspace
); write_string ("Buffer", -1);
1259 Findent_to (i_tty
, minspace
); write_string ("Tty", -1);
1261 Findent_to (i_command
, minspace
); write_string ("Command", -1);
1262 write_string ("\n", -1);
1264 write_string ("----", -1);
1265 Findent_to (i_status
, minspace
); write_string ("------", -1);
1266 Findent_to (i_buffer
, minspace
); write_string ("------", -1);
1269 Findent_to (i_tty
, minspace
); write_string ("---", -1);
1271 Findent_to (i_command
, minspace
); write_string ("-------", -1);
1272 write_string ("\n", -1);
1274 for (tail
= Vprocess_alist
; !NILP (tail
); tail
= Fcdr (tail
))
1278 proc
= Fcdr (Fcar (tail
));
1279 p
= XPROCESS (proc
);
1280 if (NILP (p
->childp
))
1282 if (!NILP (query_only
) && !NILP (p
->kill_without_query
))
1285 Finsert (1, &p
->name
);
1286 Findent_to (i_status
, minspace
);
1288 if (!NILP (p
->raw_status_low
))
1291 if (CONSP (p
->status
))
1292 symbol
= XCAR (p
->status
);
1295 if (EQ (symbol
, Qsignal
))
1298 tem
= Fcar (Fcdr (p
->status
));
1300 if (XINT (tem
) < NSIG
)
1301 write_string (sys_errlist
[XINT (tem
)], -1);
1304 Fprinc (symbol
, Qnil
);
1306 else if (NETCONN1_P (p
))
1308 if (EQ (symbol
, Qexit
))
1309 write_string ("closed", -1);
1310 else if (EQ (p
->command
, Qt
))
1311 write_string ("stopped", -1);
1312 else if (EQ (symbol
, Qrun
))
1313 write_string ("open", -1);
1315 Fprinc (symbol
, Qnil
);
1318 Fprinc (symbol
, Qnil
);
1320 if (EQ (symbol
, Qexit
))
1323 tem
= Fcar (Fcdr (p
->status
));
1326 sprintf (tembuf
, " %d", (int) XFASTINT (tem
));
1327 write_string (tembuf
, -1);
1331 if (EQ (symbol
, Qsignal
) || EQ (symbol
, Qexit
))
1332 remove_process (proc
);
1334 Findent_to (i_buffer
, minspace
);
1335 if (NILP (p
->buffer
))
1336 insert_string ("(none)");
1337 else if (NILP (XBUFFER (p
->buffer
)->name
))
1338 insert_string ("(Killed)");
1340 Finsert (1, &XBUFFER (p
->buffer
)->name
);
1344 Findent_to (i_tty
, minspace
);
1345 if (STRINGP (p
->tty_name
))
1346 Finsert (1, &p
->tty_name
);
1349 Findent_to (i_command
, minspace
);
1351 if (EQ (p
->status
, Qlisten
))
1353 Lisp_Object port
= Fplist_get (p
->childp
, QCservice
);
1354 if (INTEGERP (port
))
1355 port
= Fnumber_to_string (port
);
1357 port
= Fformat_network_address (Fplist_get (p
->childp
, QClocal
), Qnil
);
1358 sprintf (tembuf
, "(network %s server on %s)\n",
1359 (DATAGRAM_CHAN_P (XINT (p
->infd
)) ? "datagram" : "stream"),
1360 (STRINGP (port
) ? (char *)SDATA (port
) : "?"));
1361 insert_string (tembuf
);
1363 else if (NETCONN1_P (p
))
1365 /* For a local socket, there is no host name,
1366 so display service instead. */
1367 Lisp_Object host
= Fplist_get (p
->childp
, QChost
);
1368 if (!STRINGP (host
))
1370 host
= Fplist_get (p
->childp
, QCservice
);
1371 if (INTEGERP (host
))
1372 host
= Fnumber_to_string (host
);
1375 host
= Fformat_network_address (Fplist_get (p
->childp
, QCremote
), Qnil
);
1376 sprintf (tembuf
, "(network %s connection to %s)\n",
1377 (DATAGRAM_CHAN_P (XINT (p
->infd
)) ? "datagram" : "stream"),
1378 (STRINGP (host
) ? (char *)SDATA (host
) : "?"));
1379 insert_string (tembuf
);
1391 insert_string (" ");
1393 insert_string ("\n");
1399 DEFUN ("list-processes", Flist_processes
, Slist_processes
, 0, 1, "P",
1400 doc
: /* Display a list of all processes.
1401 If optional argument QUERY-ONLY is non-nil, only processes with
1402 the query-on-exit flag set will be listed.
1403 Any process listed as exited or signaled is actually eliminated
1404 after the listing is made. */)
1406 Lisp_Object query_only
;
1408 internal_with_output_to_temp_buffer ("*Process List*",
1409 list_processes_1
, query_only
);
1413 DEFUN ("process-list", Fprocess_list
, Sprocess_list
, 0, 0, 0,
1414 doc
: /* Return a list of all processes. */)
1417 return Fmapcar (Qcdr
, Vprocess_alist
);
1420 /* Starting asynchronous inferior processes. */
1422 static Lisp_Object
start_process_unwind ();
1424 DEFUN ("start-process", Fstart_process
, Sstart_process
, 3, MANY
, 0,
1425 doc
: /* Start a program in a subprocess. Return the process object for it.
1426 NAME is name for process. It is modified if necessary to make it unique.
1427 BUFFER is the buffer or (buffer-name) to associate with the process.
1428 Process output goes at end of that buffer, unless you specify
1429 an output stream or filter function to handle the output.
1430 BUFFER may be also nil, meaning that this process is not associated
1432 Third arg is program file name. It is searched for in PATH.
1433 Remaining arguments are strings to give program as arguments.
1435 usage: (start-process NAME BUFFER PROGRAM &rest PROGRAM-ARGS) */)
1438 register Lisp_Object
*args
;
1440 Lisp_Object buffer
, name
, program
, proc
, current_dir
, tem
;
1442 register unsigned char *new_argv
;
1445 register unsigned char **new_argv
;
1448 int count
= SPECPDL_INDEX ();
1452 buffer
= Fget_buffer_create (buffer
);
1454 /* Make sure that the child will be able to chdir to the current
1455 buffer's current directory, or its unhandled equivalent. We
1456 can't just have the child check for an error when it does the
1457 chdir, since it's in a vfork.
1459 We have to GCPRO around this because Fexpand_file_name and
1460 Funhandled_file_name_directory might call a file name handling
1461 function. The argument list is protected by the caller, so all
1462 we really have to worry about is buffer. */
1464 struct gcpro gcpro1
, gcpro2
;
1466 current_dir
= current_buffer
->directory
;
1468 GCPRO2 (buffer
, current_dir
);
1471 = expand_and_dir_to_file (Funhandled_file_name_directory (current_dir
),
1473 if (NILP (Ffile_accessible_directory_p (current_dir
)))
1474 report_file_error ("Setting current directory",
1475 Fcons (current_buffer
->directory
, Qnil
));
1481 CHECK_STRING (name
);
1485 CHECK_STRING (program
);
1487 proc
= make_process (name
);
1488 /* If an error occurs and we can't start the process, we want to
1489 remove it from the process list. This means that each error
1490 check in create_process doesn't need to call remove_process
1491 itself; it's all taken care of here. */
1492 record_unwind_protect (start_process_unwind
, proc
);
1494 XPROCESS (proc
)->childp
= Qt
;
1495 XPROCESS (proc
)->plist
= Qnil
;
1496 XPROCESS (proc
)->command_channel_p
= Qnil
;
1497 XPROCESS (proc
)->buffer
= buffer
;
1498 XPROCESS (proc
)->sentinel
= Qnil
;
1499 XPROCESS (proc
)->filter
= Qnil
;
1500 XPROCESS (proc
)->filter_multibyte
1501 = buffer_defaults
.enable_multibyte_characters
;
1502 XPROCESS (proc
)->command
= Flist (nargs
- 2, args
+ 2);
1504 /* Make the process marker point into the process buffer (if any). */
1506 set_marker_both (XPROCESS (proc
)->mark
, buffer
,
1507 BUF_ZV (XBUFFER (buffer
)),
1508 BUF_ZV_BYTE (XBUFFER (buffer
)));
1511 /* Decide coding systems for communicating with the process. Here
1512 we don't setup the structure coding_system nor pay attention to
1513 unibyte mode. They are done in create_process. */
1515 /* Qt denotes we have not yet called Ffind_operation_coding_system. */
1516 Lisp_Object coding_systems
= Qt
;
1517 Lisp_Object val
, *args2
;
1518 struct gcpro gcpro1
, gcpro2
;
1520 val
= Vcoding_system_for_read
;
1523 args2
= (Lisp_Object
*) alloca ((nargs
+ 1) * sizeof *args2
);
1524 args2
[0] = Qstart_process
;
1525 for (i
= 0; i
< nargs
; i
++) args2
[i
+ 1] = args
[i
];
1526 GCPRO2 (proc
, current_dir
);
1527 coding_systems
= Ffind_operation_coding_system (nargs
+ 1, args2
);
1529 if (CONSP (coding_systems
))
1530 val
= XCAR (coding_systems
);
1531 else if (CONSP (Vdefault_process_coding_system
))
1532 val
= XCAR (Vdefault_process_coding_system
);
1534 XPROCESS (proc
)->decode_coding_system
= val
;
1536 val
= Vcoding_system_for_write
;
1539 if (EQ (coding_systems
, Qt
))
1541 args2
= (Lisp_Object
*) alloca ((nargs
+ 1) * sizeof args2
);
1542 args2
[0] = Qstart_process
;
1543 for (i
= 0; i
< nargs
; i
++) args2
[i
+ 1] = args
[i
];
1544 GCPRO2 (proc
, current_dir
);
1545 coding_systems
= Ffind_operation_coding_system (nargs
+ 1, args2
);
1548 if (CONSP (coding_systems
))
1549 val
= XCDR (coding_systems
);
1550 else if (CONSP (Vdefault_process_coding_system
))
1551 val
= XCDR (Vdefault_process_coding_system
);
1553 XPROCESS (proc
)->encode_coding_system
= val
;
1557 /* Make a one member argv with all args concatenated
1558 together separated by a blank. */
1559 len
= SBYTES (program
) + 2;
1560 for (i
= 3; i
< nargs
; i
++)
1564 len
+= SBYTES (tem
) + 1; /* count the blank */
1566 new_argv
= (unsigned char *) alloca (len
);
1567 strcpy (new_argv
, SDATA (program
));
1568 for (i
= 3; i
< nargs
; i
++)
1572 strcat (new_argv
, " ");
1573 strcat (new_argv
, SDATA (tem
));
1575 /* Need to add code here to check for program existence on VMS */
1578 new_argv
= (unsigned char **) alloca ((nargs
- 1) * sizeof (char *));
1580 /* If program file name is not absolute, search our path for it.
1581 Put the name we will really use in TEM. */
1582 if (!IS_DIRECTORY_SEP (SREF (program
, 0))
1583 && !(SCHARS (program
) > 1
1584 && IS_DEVICE_SEP (SREF (program
, 1))))
1586 struct gcpro gcpro1
, gcpro2
, gcpro3
, gcpro4
;
1589 GCPRO4 (name
, program
, buffer
, current_dir
);
1590 openp (Vexec_path
, program
, Vexec_suffixes
, &tem
, make_number (X_OK
));
1593 report_file_error ("Searching for program", Fcons (program
, Qnil
));
1594 tem
= Fexpand_file_name (tem
, Qnil
);
1598 if (!NILP (Ffile_directory_p (program
)))
1599 error ("Specified program for new process is a directory");
1603 /* If program file name starts with /: for quoting a magic name,
1605 if (SBYTES (tem
) > 2 && SREF (tem
, 0) == '/'
1606 && SREF (tem
, 1) == ':')
1607 tem
= Fsubstring (tem
, make_number (2), Qnil
);
1609 /* Encode the file name and put it in NEW_ARGV.
1610 That's where the child will use it to execute the program. */
1611 tem
= ENCODE_FILE (tem
);
1612 new_argv
[0] = SDATA (tem
);
1614 /* Here we encode arguments by the coding system used for sending
1615 data to the process. We don't support using different coding
1616 systems for encoding arguments and for encoding data sent to the
1619 for (i
= 3; i
< nargs
; i
++)
1623 if (STRING_MULTIBYTE (tem
))
1624 tem
= (code_convert_string_norecord
1625 (tem
, XPROCESS (proc
)->encode_coding_system
, 1));
1626 new_argv
[i
- 2] = SDATA (tem
);
1628 new_argv
[i
- 2] = 0;
1629 #endif /* not VMS */
1631 XPROCESS (proc
)->decoding_buf
= make_uninit_string (0);
1632 XPROCESS (proc
)->decoding_carryover
= make_number (0);
1633 XPROCESS (proc
)->encoding_buf
= make_uninit_string (0);
1634 XPROCESS (proc
)->encoding_carryover
= make_number (0);
1636 XPROCESS (proc
)->inherit_coding_system_flag
1637 = (NILP (buffer
) || !inherit_process_coding_system
1640 create_process (proc
, (char **) new_argv
, current_dir
);
1642 return unbind_to (count
, proc
);
1645 /* This function is the unwind_protect form for Fstart_process. If
1646 PROC doesn't have its pid set, then we know someone has signaled
1647 an error and the process wasn't started successfully, so we should
1648 remove it from the process list. */
1650 start_process_unwind (proc
)
1653 if (!PROCESSP (proc
))
1656 /* Was PROC started successfully? */
1657 if (XINT (XPROCESS (proc
)->pid
) <= 0)
1658 remove_process (proc
);
1664 create_process_1 (timer
)
1665 struct atimer
*timer
;
1667 /* Nothing to do. */
1671 #if 0 /* This doesn't work; see the note before sigchld_handler. */
1674 /* Mimic blocking of signals on system V, which doesn't really have it. */
1676 /* Nonzero means we got a SIGCHLD when it was supposed to be blocked. */
1677 int sigchld_deferred
;
1680 create_process_sigchld ()
1682 signal (SIGCHLD
, create_process_sigchld
);
1684 sigchld_deferred
= 1;
1690 #ifndef VMS /* VMS version of this function is in vmsproc.c. */
1692 create_process (process
, new_argv
, current_dir
)
1693 Lisp_Object process
;
1695 Lisp_Object current_dir
;
1697 int pid
, inchannel
, outchannel
;
1699 #ifdef POSIX_SIGNALS
1702 struct sigaction sigint_action
;
1703 struct sigaction sigquit_action
;
1705 struct sigaction sighup_action
;
1707 #else /* !POSIX_SIGNALS */
1710 SIGTYPE (*sigchld
)();
1713 #endif /* !POSIX_SIGNALS */
1714 /* Use volatile to protect variables from being clobbered by longjmp. */
1715 volatile int forkin
, forkout
;
1716 volatile int pty_flag
= 0;
1718 extern char **environ
;
1721 inchannel
= outchannel
= -1;
1724 if (!NILP (Vprocess_connection_type
))
1725 outchannel
= inchannel
= allocate_pty ();
1729 #if ! defined (USG) || defined (USG_SUBTTY_WORKS)
1730 /* On most USG systems it does not work to open the pty's tty here,
1731 then close it and reopen it in the child. */
1733 /* Don't let this terminal become our controlling terminal
1734 (in case we don't have one). */
1735 forkout
= forkin
= emacs_open (pty_name
, O_RDWR
| O_NOCTTY
, 0);
1737 forkout
= forkin
= emacs_open (pty_name
, O_RDWR
, 0);
1740 report_file_error ("Opening pty", Qnil
);
1742 forkin
= forkout
= -1;
1743 #endif /* not USG, or USG_SUBTTY_WORKS */
1747 #endif /* HAVE_PTYS */
1750 if (socketpair (AF_UNIX
, SOCK_STREAM
, 0, sv
) < 0)
1751 report_file_error ("Opening socketpair", Qnil
);
1752 outchannel
= inchannel
= sv
[0];
1753 forkout
= forkin
= sv
[1];
1755 #else /* not SKTPAIR */
1760 report_file_error ("Creating pipe", Qnil
);
1766 emacs_close (inchannel
);
1767 emacs_close (forkout
);
1768 report_file_error ("Creating pipe", Qnil
);
1773 #endif /* not SKTPAIR */
1776 /* Replaced by close_process_descs */
1777 set_exclusive_use (inchannel
);
1778 set_exclusive_use (outchannel
);
1781 /* Stride people say it's a mystery why this is needed
1782 as well as the O_NDELAY, but that it fails without this. */
1783 #if defined (STRIDE) || (defined (pfa) && defined (HAVE_PTYS))
1786 ioctl (inchannel
, FIONBIO
, &one
);
1791 fcntl (inchannel
, F_SETFL
, O_NONBLOCK
);
1792 fcntl (outchannel
, F_SETFL
, O_NONBLOCK
);
1795 fcntl (inchannel
, F_SETFL
, O_NDELAY
);
1796 fcntl (outchannel
, F_SETFL
, O_NDELAY
);
1800 /* Record this as an active process, with its channels.
1801 As a result, child_setup will close Emacs's side of the pipes. */
1802 chan_process
[inchannel
] = process
;
1803 XSETINT (XPROCESS (process
)->infd
, inchannel
);
1804 XSETINT (XPROCESS (process
)->outfd
, outchannel
);
1806 /* Previously we recorded the tty descriptor used in the subprocess.
1807 It was only used for getting the foreground tty process, so now
1808 we just reopen the device (see emacs_get_tty_pgrp) as this is
1809 more portable (see USG_SUBTTY_WORKS above). */
1811 XPROCESS (process
)->pty_flag
= (pty_flag
? Qt
: Qnil
);
1812 XPROCESS (process
)->status
= Qrun
;
1813 setup_process_coding_systems (process
);
1815 /* Delay interrupts until we have a chance to store
1816 the new fork's pid in its process structure */
1817 #ifdef POSIX_SIGNALS
1818 sigemptyset (&blocked
);
1820 sigaddset (&blocked
, SIGCHLD
);
1822 #ifdef HAVE_WORKING_VFORK
1823 /* On many hosts (e.g. Solaris 2.4), if a vforked child calls `signal',
1824 this sets the parent's signal handlers as well as the child's.
1825 So delay all interrupts whose handlers the child might munge,
1826 and record the current handlers so they can be restored later. */
1827 sigaddset (&blocked
, SIGINT
); sigaction (SIGINT
, 0, &sigint_action
);
1828 sigaddset (&blocked
, SIGQUIT
); sigaction (SIGQUIT
, 0, &sigquit_action
);
1830 sigaddset (&blocked
, SIGHUP
); sigaction (SIGHUP
, 0, &sighup_action
);
1832 #endif /* HAVE_WORKING_VFORK */
1833 sigprocmask (SIG_BLOCK
, &blocked
, &procmask
);
1834 #else /* !POSIX_SIGNALS */
1838 #else /* not BSD4_1 */
1839 #if defined (BSD_SYSTEM) || defined (UNIPLUS) || defined (HPUX)
1840 sigsetmask (sigmask (SIGCHLD
));
1841 #else /* ordinary USG */
1843 sigchld_deferred
= 0;
1844 sigchld
= signal (SIGCHLD
, create_process_sigchld
);
1846 #endif /* ordinary USG */
1847 #endif /* not BSD4_1 */
1848 #endif /* SIGCHLD */
1849 #endif /* !POSIX_SIGNALS */
1851 FD_SET (inchannel
, &input_wait_mask
);
1852 FD_SET (inchannel
, &non_keyboard_wait_mask
);
1853 if (inchannel
> max_process_desc
)
1854 max_process_desc
= inchannel
;
1856 /* Until we store the proper pid, enable sigchld_handler
1857 to recognize an unknown pid as standing for this process.
1858 It is very important not to let this `marker' value stay
1859 in the table after this function has returned; if it does
1860 it might cause call-process to hang and subsequent asynchronous
1861 processes to get their return values scrambled. */
1862 XSETINT (XPROCESS (process
)->pid
, -1);
1867 /* child_setup must clobber environ on systems with true vfork.
1868 Protect it from permanent change. */
1869 char **save_environ
= environ
;
1871 current_dir
= ENCODE_FILE (current_dir
);
1876 #endif /* not WINDOWSNT */
1878 int xforkin
= forkin
;
1879 int xforkout
= forkout
;
1881 #if 0 /* This was probably a mistake--it duplicates code later on,
1882 but fails to handle all the cases. */
1883 /* Make sure SIGCHLD is not blocked in the child. */
1884 sigsetmask (SIGEMPTYMASK
);
1887 /* Make the pty be the controlling terminal of the process. */
1889 /* First, disconnect its current controlling terminal. */
1891 /* We tried doing setsid only if pty_flag, but it caused
1892 process_set_signal to fail on SGI when using a pipe. */
1894 /* Make the pty's terminal the controlling terminal. */
1898 /* We ignore the return value
1899 because faith@cs.unc.edu says that is necessary on Linux. */
1900 ioctl (xforkin
, TIOCSCTTY
, 0);
1903 #else /* not HAVE_SETSID */
1905 /* It's very important to call setpgrp here and no time
1906 afterwards. Otherwise, we lose our controlling tty which
1907 is set when we open the pty. */
1910 #endif /* not HAVE_SETSID */
1911 #if defined (HAVE_TERMIOS) && defined (LDISC1)
1912 if (pty_flag
&& xforkin
>= 0)
1915 tcgetattr (xforkin
, &t
);
1917 if (tcsetattr (xforkin
, TCSANOW
, &t
) < 0)
1918 emacs_write (1, "create_process/tcsetattr LDISC1 failed\n", 39);
1921 #if defined (NTTYDISC) && defined (TIOCSETD)
1922 if (pty_flag
&& xforkin
>= 0)
1924 /* Use new line discipline. */
1925 int ldisc
= NTTYDISC
;
1926 ioctl (xforkin
, TIOCSETD
, &ldisc
);
1931 /* In 4.3BSD, the TIOCSPGRP bug has been fixed, and now you
1932 can do TIOCSPGRP only to the process's controlling tty. */
1935 /* I wonder: would just ioctl (0, TIOCNOTTY, 0) work here?
1936 I can't test it since I don't have 4.3. */
1937 int j
= emacs_open ("/dev/tty", O_RDWR
, 0);
1938 ioctl (j
, TIOCNOTTY
, 0);
1941 /* In order to get a controlling terminal on some versions
1942 of BSD, it is necessary to put the process in pgrp 0
1943 before it opens the terminal. */
1951 #endif /* TIOCNOTTY */
1953 #if !defined (RTU) && !defined (UNIPLUS) && !defined (DONT_REOPEN_PTY)
1954 /*** There is a suggestion that this ought to be a
1955 conditional on TIOCSPGRP,
1956 or !(defined (HAVE_SETSID) && defined (TIOCSCTTY)).
1957 Trying the latter gave the wrong results on Debian GNU/Linux 1.1;
1958 that system does seem to need this code, even though
1959 both HAVE_SETSID and TIOCSCTTY are defined. */
1960 /* Now close the pty (if we had it open) and reopen it.
1961 This makes the pty the controlling terminal of the subprocess. */
1964 #ifdef SET_CHILD_PTY_PGRP
1965 int pgrp
= getpid ();
1968 /* I wonder if emacs_close (emacs_open (pty_name, ...))
1971 emacs_close (xforkin
);
1972 xforkout
= xforkin
= emacs_open (pty_name
, O_RDWR
, 0);
1976 emacs_write (1, "Couldn't open the pty terminal ", 31);
1977 emacs_write (1, pty_name
, strlen (pty_name
));
1978 emacs_write (1, "\n", 1);
1982 #ifdef SET_CHILD_PTY_PGRP
1983 ioctl (xforkin
, TIOCSPGRP
, &pgrp
);
1984 ioctl (xforkout
, TIOCSPGRP
, &pgrp
);
1987 #endif /* not UNIPLUS and not RTU and not DONT_REOPEN_PTY */
1989 #ifdef SETUP_SLAVE_PTY
1994 #endif /* SETUP_SLAVE_PTY */
1996 /* On AIX, we've disabled SIGHUP above once we start a child on a pty.
1997 Now reenable it in the child, so it will die when we want it to. */
1999 signal (SIGHUP
, SIG_DFL
);
2001 #endif /* HAVE_PTYS */
2003 signal (SIGINT
, SIG_DFL
);
2004 signal (SIGQUIT
, SIG_DFL
);
2006 /* Stop blocking signals in the child. */
2007 #ifdef POSIX_SIGNALS
2008 sigprocmask (SIG_SETMASK
, &procmask
, 0);
2009 #else /* !POSIX_SIGNALS */
2013 #else /* not BSD4_1 */
2014 #if defined (BSD_SYSTEM) || defined (UNIPLUS) || defined (HPUX)
2015 sigsetmask (SIGEMPTYMASK
);
2016 #else /* ordinary USG */
2018 signal (SIGCHLD
, sigchld
);
2020 #endif /* ordinary USG */
2021 #endif /* not BSD4_1 */
2022 #endif /* SIGCHLD */
2023 #endif /* !POSIX_SIGNALS */
2026 child_setup_tty (xforkout
);
2028 pid
= child_setup (xforkin
, xforkout
, xforkout
,
2029 new_argv
, 1, current_dir
);
2030 #else /* not WINDOWSNT */
2031 child_setup (xforkin
, xforkout
, xforkout
,
2032 new_argv
, 1, current_dir
);
2033 #endif /* not WINDOWSNT */
2035 environ
= save_environ
;
2040 /* This runs in the Emacs process. */
2044 emacs_close (forkin
);
2045 if (forkin
!= forkout
&& forkout
>= 0)
2046 emacs_close (forkout
);
2050 /* vfork succeeded. */
2051 XSETFASTINT (XPROCESS (process
)->pid
, pid
);
2054 register_child (pid
, inchannel
);
2055 #endif /* WINDOWSNT */
2057 /* If the subfork execv fails, and it exits,
2058 this close hangs. I don't know why.
2059 So have an interrupt jar it loose. */
2061 struct atimer
*timer
;
2065 EMACS_SET_SECS_USECS (offset
, 1, 0);
2066 timer
= start_atimer (ATIMER_RELATIVE
, offset
, create_process_1
, 0);
2069 emacs_close (forkin
);
2071 cancel_atimer (timer
);
2075 if (forkin
!= forkout
&& forkout
>= 0)
2076 emacs_close (forkout
);
2080 XPROCESS (process
)->tty_name
= build_string (pty_name
);
2083 XPROCESS (process
)->tty_name
= Qnil
;
2086 /* Restore the signal state whether vfork succeeded or not.
2087 (We will signal an error, below, if it failed.) */
2088 #ifdef POSIX_SIGNALS
2089 #ifdef HAVE_WORKING_VFORK
2090 /* Restore the parent's signal handlers. */
2091 sigaction (SIGINT
, &sigint_action
, 0);
2092 sigaction (SIGQUIT
, &sigquit_action
, 0);
2094 sigaction (SIGHUP
, &sighup_action
, 0);
2096 #endif /* HAVE_WORKING_VFORK */
2097 /* Stop blocking signals in the parent. */
2098 sigprocmask (SIG_SETMASK
, &procmask
, 0);
2099 #else /* !POSIX_SIGNALS */
2103 #else /* not BSD4_1 */
2104 #if defined (BSD_SYSTEM) || defined (UNIPLUS) || defined (HPUX)
2105 sigsetmask (SIGEMPTYMASK
);
2106 #else /* ordinary USG */
2108 signal (SIGCHLD
, sigchld
);
2109 /* Now really handle any of these signals
2110 that came in during this function. */
2111 if (sigchld_deferred
)
2112 kill (getpid (), SIGCHLD
);
2114 #endif /* ordinary USG */
2115 #endif /* not BSD4_1 */
2116 #endif /* SIGCHLD */
2117 #endif /* !POSIX_SIGNALS */
2119 /* Now generate the error if vfork failed. */
2121 report_file_error ("Doing vfork", Qnil
);
2123 #endif /* not VMS */
2128 /* Convert an internal struct sockaddr to a lisp object (vector or string).
2129 The address family of sa is not included in the result. */
2132 conv_sockaddr_to_lisp (sa
, len
)
2133 struct sockaddr
*sa
;
2136 Lisp_Object address
;
2139 register struct Lisp_Vector
*p
;
2141 switch (sa
->sa_family
)
2145 struct sockaddr_in
*sin
= (struct sockaddr_in
*) sa
;
2146 len
= sizeof (sin
->sin_addr
) + 1;
2147 address
= Fmake_vector (make_number (len
), Qnil
);
2148 p
= XVECTOR (address
);
2149 p
->contents
[--len
] = make_number (ntohs (sin
->sin_port
));
2150 cp
= (unsigned char *)&sin
->sin_addr
;
2153 #ifdef HAVE_LOCAL_SOCKETS
2156 struct sockaddr_un
*sockun
= (struct sockaddr_un
*) sa
;
2157 for (i
= 0; i
< sizeof (sockun
->sun_path
); i
++)
2158 if (sockun
->sun_path
[i
] == 0)
2160 return make_unibyte_string (sockun
->sun_path
, i
);
2164 len
-= sizeof (sa
->sa_family
);
2165 address
= Fcons (make_number (sa
->sa_family
),
2166 Fmake_vector (make_number (len
), Qnil
));
2167 p
= XVECTOR (XCDR (address
));
2168 cp
= (unsigned char *) sa
+ sizeof (sa
->sa_family
);
2174 p
->contents
[i
++] = make_number (*cp
++);
2180 /* Get family and required size for sockaddr structure to hold ADDRESS. */
2183 get_lisp_to_sockaddr_size (address
, familyp
)
2184 Lisp_Object address
;
2187 register struct Lisp_Vector
*p
;
2189 if (VECTORP (address
))
2191 p
= XVECTOR (address
);
2195 return sizeof (struct sockaddr_in
);
2198 #ifdef HAVE_LOCAL_SOCKETS
2199 else if (STRINGP (address
))
2201 *familyp
= AF_LOCAL
;
2202 return sizeof (struct sockaddr_un
);
2205 else if (CONSP (address
) && INTEGERP (XCAR (address
)) && VECTORP (XCDR (address
)))
2207 struct sockaddr
*sa
;
2208 *familyp
= XINT (XCAR (address
));
2209 p
= XVECTOR (XCDR (address
));
2210 return p
->size
+ sizeof (sa
->sa_family
);
2215 /* Convert an address object (vector or string) to an internal sockaddr.
2216 Format of address has already been validated by size_lisp_to_sockaddr. */
2219 conv_lisp_to_sockaddr (family
, address
, sa
, len
)
2221 Lisp_Object address
;
2222 struct sockaddr
*sa
;
2225 register struct Lisp_Vector
*p
;
2226 register unsigned char *cp
= NULL
;
2230 sa
->sa_family
= family
;
2232 if (VECTORP (address
))
2234 p
= XVECTOR (address
);
2235 if (family
== AF_INET
)
2237 struct sockaddr_in
*sin
= (struct sockaddr_in
*) sa
;
2238 len
= sizeof (sin
->sin_addr
) + 1;
2239 i
= XINT (p
->contents
[--len
]);
2240 sin
->sin_port
= htons (i
);
2241 cp
= (unsigned char *)&sin
->sin_addr
;
2244 else if (STRINGP (address
))
2246 #ifdef HAVE_LOCAL_SOCKETS
2247 if (family
== AF_LOCAL
)
2249 struct sockaddr_un
*sockun
= (struct sockaddr_un
*) sa
;
2250 cp
= SDATA (address
);
2251 for (i
= 0; i
< sizeof (sockun
->sun_path
) && *cp
; i
++)
2252 sockun
->sun_path
[i
] = *cp
++;
2259 p
= XVECTOR (XCDR (address
));
2260 cp
= (unsigned char *)sa
+ sizeof (sa
->sa_family
);
2263 for (i
= 0; i
< len
; i
++)
2264 if (INTEGERP (p
->contents
[i
]))
2265 *cp
++ = XFASTINT (p
->contents
[i
]) & 0xff;
2268 #ifdef DATAGRAM_SOCKETS
2269 DEFUN ("process-datagram-address", Fprocess_datagram_address
, Sprocess_datagram_address
,
2271 doc
: /* Get the current datagram address associated with PROCESS. */)
2273 Lisp_Object process
;
2277 CHECK_PROCESS (process
);
2279 if (!DATAGRAM_CONN_P (process
))
2282 channel
= XINT (XPROCESS (process
)->infd
);
2283 return conv_sockaddr_to_lisp (datagram_address
[channel
].sa
,
2284 datagram_address
[channel
].len
);
2287 DEFUN ("set-process-datagram-address", Fset_process_datagram_address
, Sset_process_datagram_address
,
2289 doc
: /* Set the datagram address for PROCESS to ADDRESS.
2290 Returns nil upon error setting address, ADDRESS otherwise. */)
2292 Lisp_Object process
, address
;
2297 CHECK_PROCESS (process
);
2299 if (!DATAGRAM_CONN_P (process
))
2302 channel
= XINT (XPROCESS (process
)->infd
);
2304 len
= get_lisp_to_sockaddr_size (address
, &family
);
2305 if (datagram_address
[channel
].len
!= len
)
2307 conv_lisp_to_sockaddr (family
, address
, datagram_address
[channel
].sa
, len
);
2313 static struct socket_options
{
2314 /* The name of this option. Should be lowercase version of option
2315 name without SO_ prefix. */
2317 /* Option level SOL_... */
2319 /* Option number SO_... */
2321 enum { SOPT_UNKNOWN
, SOPT_BOOL
, SOPT_INT
, SOPT_IFNAME
, SOPT_LINGER
} opttype
;
2322 enum { OPIX_NONE
=0, OPIX_MISC
=1, OPIX_REUSEADDR
=2 } optbit
;
2323 } socket_options
[] =
2325 #ifdef SO_BINDTODEVICE
2326 { ":bindtodevice", SOL_SOCKET
, SO_BINDTODEVICE
, SOPT_IFNAME
, OPIX_MISC
},
2329 { ":broadcast", SOL_SOCKET
, SO_BROADCAST
, SOPT_BOOL
, OPIX_MISC
},
2332 { ":dontroute", SOL_SOCKET
, SO_DONTROUTE
, SOPT_BOOL
, OPIX_MISC
},
2335 { ":keepalive", SOL_SOCKET
, SO_KEEPALIVE
, SOPT_BOOL
, OPIX_MISC
},
2338 { ":linger", SOL_SOCKET
, SO_LINGER
, SOPT_LINGER
, OPIX_MISC
},
2341 { ":oobinline", SOL_SOCKET
, SO_OOBINLINE
, SOPT_BOOL
, OPIX_MISC
},
2344 { ":priority", SOL_SOCKET
, SO_PRIORITY
, SOPT_INT
, OPIX_MISC
},
2347 { ":reuseaddr", SOL_SOCKET
, SO_REUSEADDR
, SOPT_BOOL
, OPIX_REUSEADDR
},
2349 { 0, 0, 0, SOPT_UNKNOWN
, OPIX_NONE
}
2352 /* Set option OPT to value VAL on socket S.
2354 Returns (1<<socket_options[OPT].optbit) if option is known, 0 otherwise.
2355 Signals an error if setting a known option fails.
2359 set_socket_option (s
, opt
, val
)
2361 Lisp_Object opt
, val
;
2364 struct socket_options
*sopt
;
2369 name
= (char *) SDATA (SYMBOL_NAME (opt
));
2370 for (sopt
= socket_options
; sopt
->name
; sopt
++)
2371 if (strcmp (name
, sopt
->name
) == 0)
2374 switch (sopt
->opttype
)
2379 optval
= NILP (val
) ? 0 : 1;
2380 ret
= setsockopt (s
, sopt
->optlevel
, sopt
->optnum
,
2381 &optval
, sizeof (optval
));
2389 optval
= XINT (val
);
2391 error ("Bad option value for %s", name
);
2392 ret
= setsockopt (s
, sopt
->optlevel
, sopt
->optnum
,
2393 &optval
, sizeof (optval
));
2397 #ifdef SO_BINDTODEVICE
2400 char devname
[IFNAMSIZ
+1];
2402 /* This is broken, at least in the Linux 2.4 kernel.
2403 To unbind, the arg must be a zero integer, not the empty string.
2404 This should work on all systems. KFS. 2003-09-23. */
2405 bzero (devname
, sizeof devname
);
2408 char *arg
= (char *) SDATA (val
);
2409 int len
= min (strlen (arg
), IFNAMSIZ
);
2410 bcopy (arg
, devname
, len
);
2412 else if (!NILP (val
))
2413 error ("Bad option value for %s", name
);
2414 ret
= setsockopt (s
, sopt
->optlevel
, sopt
->optnum
,
2423 struct linger linger
;
2426 linger
.l_linger
= 0;
2428 linger
.l_linger
= XINT (val
);
2430 linger
.l_onoff
= NILP (val
) ? 0 : 1;
2431 ret
= setsockopt (s
, sopt
->optlevel
, sopt
->optnum
,
2432 &linger
, sizeof (linger
));
2442 report_file_error ("Cannot set network option",
2443 Fcons (opt
, Fcons (val
, Qnil
)));
2444 return (1 << sopt
->optbit
);
2448 DEFUN ("set-network-process-option",
2449 Fset_network_process_option
, Sset_network_process_option
,
2451 doc
: /* For network process PROCESS set option OPTION to value VALUE.
2452 See `make-network-process' for a list of options and values.
2453 If optional fourth arg NO-ERROR is non-nil, don't signal an error if
2454 OPTION is not a supported option, return nil instead; otherwise return t. */)
2455 (process
, option
, value
, no_error
)
2456 Lisp_Object process
, option
, value
;
2457 Lisp_Object no_error
;
2460 struct Lisp_Process
*p
;
2462 CHECK_PROCESS (process
);
2463 p
= XPROCESS (process
);
2464 if (!NETCONN1_P (p
))
2465 error ("Process is not a network process");
2469 error ("Process is not running");
2471 if (set_socket_option (s
, option
, value
))
2473 p
->childp
= Fplist_put (p
->childp
, option
, value
);
2477 if (NILP (no_error
))
2478 error ("Unknown or unsupported option");
2484 /* A version of request_sigio suitable for a record_unwind_protect. */
2487 unwind_request_sigio (dummy
)
2490 if (interrupt_input
)
2495 /* Create a network stream/datagram client/server process. Treated
2496 exactly like a normal process when reading and writing. Primary
2497 differences are in status display and process deletion. A network
2498 connection has no PID; you cannot signal it. All you can do is
2499 stop/continue it and deactivate/close it via delete-process */
2501 DEFUN ("make-network-process", Fmake_network_process
, Smake_network_process
,
2503 doc
: /* Create and return a network server or client process.
2505 In Emacs, network connections are represented by process objects, so
2506 input and output work as for subprocesses and `delete-process' closes
2507 a network connection. However, a network process has no process id,
2508 it cannot be signalled, and the status codes are different from normal
2511 Arguments are specified as keyword/argument pairs. The following
2512 arguments are defined:
2514 :name NAME -- NAME is name for process. It is modified if necessary
2517 :buffer BUFFER -- BUFFER is the buffer (or buffer-name) to associate
2518 with the process. Process output goes at end of that buffer, unless
2519 you specify an output stream or filter function to handle the output.
2520 BUFFER may be also nil, meaning that this process is not associated
2523 :host HOST -- HOST is name of the host to connect to, or its IP
2524 address. The symbol `local' specifies the local host. If specified
2525 for a server process, it must be a valid name or address for the local
2526 host, and only clients connecting to that address will be accepted.
2528 :service SERVICE -- SERVICE is name of the service desired, or an
2529 integer specifying a port number to connect to. If SERVICE is t,
2530 a random port number is selected for the server.
2532 :type TYPE -- TYPE is the type of connection. The default (nil) is a
2533 stream type connection, `datagram' creates a datagram type connection.
2535 :family FAMILY -- FAMILY is the address (and protocol) family for the
2536 service specified by HOST and SERVICE. The default address family is
2537 Inet (or IPv4) for the host and port number specified by HOST and
2538 SERVICE. Other address families supported are:
2539 local -- for a local (i.e. UNIX) address specified by SERVICE.
2541 :local ADDRESS -- ADDRESS is the local address used for the connection.
2542 This parameter is ignored when opening a client process. When specified
2543 for a server process, the FAMILY, HOST and SERVICE args are ignored.
2545 :remote ADDRESS -- ADDRESS is the remote partner's address for the
2546 connection. This parameter is ignored when opening a stream server
2547 process. For a datagram server process, it specifies the initial
2548 setting of the remote datagram address. When specified for a client
2549 process, the FAMILY, HOST, and SERVICE args are ignored.
2551 The format of ADDRESS depends on the address family:
2552 - An IPv4 address is represented as an vector of integers [A B C D P]
2553 corresponding to numeric IP address A.B.C.D and port number P.
2554 - A local address is represented as a string with the address in the
2555 local address space.
2556 - An "unsupported family" address is represented by a cons (F . AV)
2557 where F is the family number and AV is a vector containing the socket
2558 address data with one element per address data byte. Do not rely on
2559 this format in portable code, as it may depend on implementation
2560 defined constants, data sizes, and data structure alignment.
2562 :coding CODING -- If CODING is a symbol, it specifies the coding
2563 system used for both reading and writing for this process. If CODING
2564 is a cons (DECODING . ENCODING), DECODING is used for reading, and
2565 ENCODING is used for writing.
2567 :nowait BOOL -- If BOOL is non-nil for a stream type client process,
2568 return without waiting for the connection to complete; instead, the
2569 sentinel function will be called with second arg matching "open" (if
2570 successful) or "failed" when the connect completes. Default is to use
2571 a blocking connect (i.e. wait) for stream type connections.
2573 :noquery BOOL -- Query the user unless BOOL is non-nil, and process is
2574 running when emacs is exited.
2576 :stop BOOL -- Start process in the `stopped' state if BOOL non-nil.
2577 In the stopped state, a server process does not accept new
2578 connections, and a client process does not handle incoming traffic.
2579 The stopped state is cleared by `continue-process' and set by
2582 :filter FILTER -- Install FILTER as the process filter.
2584 :filter-multibyte BOOL -- If BOOL is non-nil, strings given to the
2585 process filter are multibyte, otherwise they are unibyte.
2586 If this keyword is not specified, the strings are multibyte iff
2587 `default-enable-multibyte-characters' is non-nil.
2589 :sentinel SENTINEL -- Install SENTINEL as the process sentinel.
2591 :log LOG -- Install LOG as the server process log function. This
2592 function is called when the server accepts a network connection from a
2593 client. The arguments are SERVER, CLIENT, and MESSAGE, where SERVER
2594 is the server process, CLIENT is the new process for the connection,
2595 and MESSAGE is a string.
2597 :plist PLIST -- Install PLIST as the new process' initial plist.
2599 :server QLEN -- if QLEN is non-nil, create a server process for the
2600 specified FAMILY, SERVICE, and connection type (stream or datagram).
2601 If QLEN is an integer, it is used as the max. length of the server's
2602 pending connection queue (also known as the backlog); the default
2603 queue length is 5. Default is to create a client process.
2605 The following network options can be specified for this connection:
2607 :broadcast BOOL -- Allow send and receive of datagram broadcasts.
2608 :dontroute BOOL -- Only send to directly connected hosts.
2609 :keepalive BOOL -- Send keep-alive messages on network stream.
2610 :linger BOOL or TIMEOUT -- Send queued messages before closing.
2611 :oobinline BOOL -- Place out-of-band data in receive data stream.
2612 :priority INT -- Set protocol defined priority for sent packets.
2613 :reuseaddr BOOL -- Allow reusing a recently used local address
2614 (this is allowed by default for a server process).
2615 :bindtodevice NAME -- bind to interface NAME. Using this may require
2616 special privileges on some systems.
2618 Consult the relevant system programmer's manual pages for more
2619 information on using these options.
2622 A server process will listen for and accept connections from clients.
2623 When a client connection is accepted, a new network process is created
2624 for the connection with the following parameters:
2626 - The client's process name is constructed by concatenating the server
2627 process' NAME and a client identification string.
2628 - If the FILTER argument is non-nil, the client process will not get a
2629 separate process buffer; otherwise, the client's process buffer is a newly
2630 created buffer named after the server process' BUFFER name or process
2631 NAME concatenated with the client identification string.
2632 - The connection type and the process filter and sentinel parameters are
2633 inherited from the server process' TYPE, FILTER and SENTINEL.
2634 - The client process' contact info is set according to the client's
2635 addressing information (typically an IP address and a port number).
2636 - The client process' plist is initialized from the server's plist.
2638 Notice that the FILTER and SENTINEL args are never used directly by
2639 the server process. Also, the BUFFER argument is not used directly by
2640 the server process, but via the optional :log function, accepted (and
2641 failed) connections may be logged in the server process' buffer.
2643 The original argument list, modified with the actual connection
2644 information, is available via the `process-contact' function.
2646 usage: (make-network-process &rest ARGS) */)
2652 Lisp_Object contact
;
2653 struct Lisp_Process
*p
;
2654 #ifdef HAVE_GETADDRINFO
2655 struct addrinfo ai
, *res
, *lres
;
2656 struct addrinfo hints
;
2657 char *portstring
, portbuf
[128];
2658 #else /* HAVE_GETADDRINFO */
2659 struct _emacs_addrinfo
2665 struct sockaddr
*ai_addr
;
2666 struct _emacs_addrinfo
*ai_next
;
2668 #endif /* HAVE_GETADDRINFO */
2669 struct sockaddr_in address_in
;
2670 #ifdef HAVE_LOCAL_SOCKETS
2671 struct sockaddr_un address_un
;
2676 int s
= -1, outch
, inch
;
2677 struct gcpro gcpro1
;
2679 int count
= SPECPDL_INDEX ();
2681 Lisp_Object QCaddress
; /* one of QClocal or QCremote */
2683 Lisp_Object name
, buffer
, host
, service
, address
;
2684 Lisp_Object filter
, sentinel
;
2685 int is_non_blocking_client
= 0;
2686 int is_server
= 0, backlog
= 5;
2693 /* Save arguments for process-contact and clone-process. */
2694 contact
= Flist (nargs
, args
);
2698 /* Ensure socket support is loaded if available. */
2699 init_winsock (TRUE
);
2702 /* :type TYPE (nil: stream, datagram */
2703 tem
= Fplist_get (contact
, QCtype
);
2705 socktype
= SOCK_STREAM
;
2706 #ifdef DATAGRAM_SOCKETS
2707 else if (EQ (tem
, Qdatagram
))
2708 socktype
= SOCK_DGRAM
;
2711 error ("Unsupported connection type");
2714 tem
= Fplist_get (contact
, QCserver
);
2717 /* Don't support network sockets when non-blocking mode is
2718 not available, since a blocked Emacs is not useful. */
2719 #if defined(TERM) || (!defined(O_NONBLOCK) && !defined(O_NDELAY))
2720 error ("Network servers not supported");
2724 backlog
= XINT (tem
);
2728 /* Make QCaddress an alias for :local (server) or :remote (client). */
2729 QCaddress
= is_server
? QClocal
: QCremote
;
2732 if (!is_server
&& socktype
== SOCK_STREAM
2733 && (tem
= Fplist_get (contact
, QCnowait
), !NILP (tem
)))
2735 #ifndef NON_BLOCKING_CONNECT
2736 error ("Non-blocking connect not supported");
2738 is_non_blocking_client
= 1;
2742 name
= Fplist_get (contact
, QCname
);
2743 buffer
= Fplist_get (contact
, QCbuffer
);
2744 filter
= Fplist_get (contact
, QCfilter
);
2745 sentinel
= Fplist_get (contact
, QCsentinel
);
2747 CHECK_STRING (name
);
2750 /* Let's handle TERM before things get complicated ... */
2751 host
= Fplist_get (contact
, QChost
);
2752 CHECK_STRING (host
);
2754 service
= Fplist_get (contact
, QCservice
);
2755 if (INTEGERP (service
))
2756 port
= htons ((unsigned short) XINT (service
));
2759 struct servent
*svc_info
;
2760 CHECK_STRING (service
);
2761 svc_info
= getservbyname (SDATA (service
), "tcp");
2763 error ("Unknown service: %s", SDATA (service
));
2764 port
= svc_info
->s_port
;
2767 s
= connect_server (0);
2769 report_file_error ("error creating socket", Fcons (name
, Qnil
));
2770 send_command (s
, C_PORT
, 0, "%s:%d", SDATA (host
), ntohs (port
));
2771 send_command (s
, C_DUMB
, 1, 0);
2773 #else /* not TERM */
2775 /* Initialize addrinfo structure in case we don't use getaddrinfo. */
2776 ai
.ai_socktype
= socktype
;
2781 /* :local ADDRESS or :remote ADDRESS */
2782 address
= Fplist_get (contact
, QCaddress
);
2783 if (!NILP (address
))
2785 host
= service
= Qnil
;
2787 if (!(ai
.ai_addrlen
= get_lisp_to_sockaddr_size (address
, &family
)))
2788 error ("Malformed :address");
2789 ai
.ai_family
= family
;
2790 ai
.ai_addr
= alloca (ai
.ai_addrlen
);
2791 conv_lisp_to_sockaddr (family
, address
, ai
.ai_addr
, ai
.ai_addrlen
);
2795 /* :family FAMILY -- nil (for Inet), local, or integer. */
2796 tem
= Fplist_get (contact
, QCfamily
);
2798 family
= XINT (tem
);
2803 #ifdef HAVE_LOCAL_SOCKETS
2804 else if (EQ (tem
, Qlocal
))
2809 error ("Unknown address family");
2810 ai
.ai_family
= family
;
2812 /* :service SERVICE -- string, integer (port number), or t (random port). */
2813 service
= Fplist_get (contact
, QCservice
);
2815 #ifdef HAVE_LOCAL_SOCKETS
2816 if (family
== AF_LOCAL
)
2818 /* Host is not used. */
2820 CHECK_STRING (service
);
2821 bzero (&address_un
, sizeof address_un
);
2822 address_un
.sun_family
= AF_LOCAL
;
2823 strncpy (address_un
.sun_path
, SDATA (service
), sizeof address_un
.sun_path
);
2824 ai
.ai_addr
= (struct sockaddr
*) &address_un
;
2825 ai
.ai_addrlen
= sizeof address_un
;
2830 /* :host HOST -- hostname, ip address, or 'local for localhost. */
2831 host
= Fplist_get (contact
, QChost
);
2834 if (EQ (host
, Qlocal
))
2835 host
= build_string ("localhost");
2836 CHECK_STRING (host
);
2839 /* Slow down polling to every ten seconds.
2840 Some kernels have a bug which causes retrying connect to fail
2841 after a connect. Polling can interfere with gethostbyname too. */
2842 #ifdef POLL_FOR_INPUT
2843 if (socktype
== SOCK_STREAM
)
2845 record_unwind_protect (unwind_stop_other_atimers
, Qnil
);
2846 bind_polling_period (10);
2850 #ifdef HAVE_GETADDRINFO
2851 /* If we have a host, use getaddrinfo to resolve both host and service.
2852 Otherwise, use getservbyname to lookup the service. */
2856 /* SERVICE can either be a string or int.
2857 Convert to a C string for later use by getaddrinfo. */
2858 if (EQ (service
, Qt
))
2860 else if (INTEGERP (service
))
2862 sprintf (portbuf
, "%ld", (long) XINT (service
));
2863 portstring
= portbuf
;
2867 CHECK_STRING (service
);
2868 portstring
= SDATA (service
);
2873 memset (&hints
, 0, sizeof (hints
));
2875 hints
.ai_family
= NILP (Fplist_member (contact
, QCfamily
)) ? AF_UNSPEC
: family
;
2876 hints
.ai_socktype
= socktype
;
2877 hints
.ai_protocol
= 0;
2878 ret
= getaddrinfo (SDATA (host
), portstring
, &hints
, &res
);
2880 #ifdef HAVE_GAI_STRERROR
2881 error ("%s/%s %s", SDATA (host
), portstring
, gai_strerror(ret
));
2883 error ("%s/%s getaddrinfo error %d", SDATA (host
), portstring
, ret
);
2889 #endif /* HAVE_GETADDRINFO */
2891 /* We end up here if getaddrinfo is not defined, or in case no hostname
2892 has been specified (e.g. for a local server process). */
2894 if (EQ (service
, Qt
))
2896 else if (INTEGERP (service
))
2897 port
= htons ((unsigned short) XINT (service
));
2900 struct servent
*svc_info
;
2901 CHECK_STRING (service
);
2902 svc_info
= getservbyname (SDATA (service
),
2903 (socktype
== SOCK_DGRAM
? "udp" : "tcp"));
2905 error ("Unknown service: %s", SDATA (service
));
2906 port
= svc_info
->s_port
;
2909 bzero (&address_in
, sizeof address_in
);
2910 address_in
.sin_family
= family
;
2911 address_in
.sin_addr
.s_addr
= INADDR_ANY
;
2912 address_in
.sin_port
= port
;
2914 #ifndef HAVE_GETADDRINFO
2917 struct hostent
*host_info_ptr
;
2919 /* gethostbyname may fail with TRY_AGAIN, but we don't honour that,
2920 as it may `hang' emacs for a very long time. */
2923 host_info_ptr
= gethostbyname (SDATA (host
));
2928 bcopy (host_info_ptr
->h_addr
, (char *) &address_in
.sin_addr
,
2929 host_info_ptr
->h_length
);
2930 family
= host_info_ptr
->h_addrtype
;
2931 address_in
.sin_family
= family
;
2934 /* Attempt to interpret host as numeric inet address */
2936 IN_ADDR numeric_addr
;
2937 numeric_addr
= inet_addr ((char *) SDATA (host
));
2938 if (NUMERIC_ADDR_ERROR
)
2939 error ("Unknown host \"%s\"", SDATA (host
));
2941 bcopy ((char *)&numeric_addr
, (char *) &address_in
.sin_addr
,
2942 sizeof (address_in
.sin_addr
));
2946 #endif /* not HAVE_GETADDRINFO */
2948 ai
.ai_family
= family
;
2949 ai
.ai_addr
= (struct sockaddr
*) &address_in
;
2950 ai
.ai_addrlen
= sizeof address_in
;
2954 /* Kernel bugs (on Ultrix at least) cause lossage (not just EINTR)
2955 when connect is interrupted. So let's not let it get interrupted.
2956 Note we do not turn off polling, because polling is only used
2957 when not interrupt_input, and thus not normally used on the systems
2958 which have this bug. On systems which use polling, there's no way
2959 to quit if polling is turned off. */
2961 && !is_server
&& socktype
== SOCK_STREAM
)
2963 /* Comment from KFS: The original open-network-stream code
2964 didn't unwind protect this, but it seems like the proper
2965 thing to do. In any case, I don't see how it could harm to
2966 do this -- and it makes cleanup (using unbind_to) easier. */
2967 record_unwind_protect (unwind_request_sigio
, Qnil
);
2971 /* Do this in case we never enter the for-loop below. */
2972 count1
= SPECPDL_INDEX ();
2975 for (lres
= res
; lres
; lres
= lres
->ai_next
)
2979 s
= socket (lres
->ai_family
, lres
->ai_socktype
, lres
->ai_protocol
);
2986 #ifdef DATAGRAM_SOCKETS
2987 if (!is_server
&& socktype
== SOCK_DGRAM
)
2989 #endif /* DATAGRAM_SOCKETS */
2991 #ifdef NON_BLOCKING_CONNECT
2992 if (is_non_blocking_client
)
2995 ret
= fcntl (s
, F_SETFL
, O_NONBLOCK
);
2997 ret
= fcntl (s
, F_SETFL
, O_NDELAY
);
3009 /* Make us close S if quit. */
3010 record_unwind_protect (close_file_unwind
, make_number (s
));
3012 /* Parse network options in the arg list.
3013 We simply ignore anything which isn't a known option (including other keywords).
3014 An error is signalled if setting a known option fails. */
3015 for (optn
= optbits
= 0; optn
< nargs
-1; optn
+= 2)
3016 optbits
|= set_socket_option (s
, args
[optn
], args
[optn
+1]);
3020 /* Configure as a server socket. */
3022 /* SO_REUSEADDR = 1 is default for server sockets; must specify
3023 explicit :reuseaddr key to override this. */
3024 #ifdef HAVE_LOCAL_SOCKETS
3025 if (family
!= AF_LOCAL
)
3027 if (!(optbits
& (1 << OPIX_REUSEADDR
)))
3030 if (setsockopt (s
, SOL_SOCKET
, SO_REUSEADDR
, &optval
, sizeof optval
))
3031 report_file_error ("Cannot set reuse option on server socket", Qnil
);
3034 if (bind (s
, lres
->ai_addr
, lres
->ai_addrlen
))
3035 report_file_error ("Cannot bind server socket", Qnil
);
3037 #ifdef HAVE_GETSOCKNAME
3038 if (EQ (service
, Qt
))
3040 struct sockaddr_in sa1
;
3041 int len1
= sizeof (sa1
);
3042 if (getsockname (s
, (struct sockaddr
*)&sa1
, &len1
) == 0)
3044 ((struct sockaddr_in
*)(lres
->ai_addr
))->sin_port
= sa1
.sin_port
;
3045 service
= make_number (ntohs (sa1
.sin_port
));
3046 contact
= Fplist_put (contact
, QCservice
, service
);
3051 if (socktype
== SOCK_STREAM
&& listen (s
, backlog
))
3052 report_file_error ("Cannot listen on server socket", Qnil
);
3062 /* This turns off all alarm-based interrupts; the
3063 bind_polling_period call above doesn't always turn all the
3064 short-interval ones off, especially if interrupt_input is
3067 It'd be nice to be able to control the connect timeout
3068 though. Would non-blocking connect calls be portable?
3070 This used to be conditioned by HAVE_GETADDRINFO. Why? */
3072 turn_on_atimers (0);
3074 ret
= connect (s
, lres
->ai_addr
, lres
->ai_addrlen
);
3077 turn_on_atimers (1);
3079 if (ret
== 0 || xerrno
== EISCONN
)
3081 /* The unwind-protect will be discarded afterwards.
3082 Likewise for immediate_quit. */
3086 #ifdef NON_BLOCKING_CONNECT
3088 if (is_non_blocking_client
&& xerrno
== EINPROGRESS
)
3092 if (is_non_blocking_client
&& xerrno
== EWOULDBLOCK
)
3100 if (xerrno
== EINTR
)
3102 if (xerrno
== EADDRINUSE
&& retry
< 20)
3104 /* A delay here is needed on some FreeBSD systems,
3105 and it is harmless, since this retrying takes time anyway
3106 and should be infrequent. */
3107 Fsleep_for (make_number (1), Qnil
);
3112 /* Discard the unwind protect closing S. */
3113 specpdl_ptr
= specpdl
+ count1
;
3120 #ifdef DATAGRAM_SOCKETS
3121 if (socktype
== SOCK_DGRAM
)
3123 if (datagram_address
[s
].sa
)
3125 datagram_address
[s
].sa
= (struct sockaddr
*) xmalloc (lres
->ai_addrlen
);
3126 datagram_address
[s
].len
= lres
->ai_addrlen
;
3130 bzero (datagram_address
[s
].sa
, lres
->ai_addrlen
);
3131 if (remote
= Fplist_get (contact
, QCremote
), !NILP (remote
))
3134 rlen
= get_lisp_to_sockaddr_size (remote
, &rfamily
);
3135 if (rfamily
== lres
->ai_family
&& rlen
== lres
->ai_addrlen
)
3136 conv_lisp_to_sockaddr (rfamily
, remote
,
3137 datagram_address
[s
].sa
, rlen
);
3141 bcopy (lres
->ai_addr
, datagram_address
[s
].sa
, lres
->ai_addrlen
);
3144 contact
= Fplist_put (contact
, QCaddress
,
3145 conv_sockaddr_to_lisp (lres
->ai_addr
, lres
->ai_addrlen
));
3146 #ifdef HAVE_GETSOCKNAME
3149 struct sockaddr_in sa1
;
3150 int len1
= sizeof (sa1
);
3151 if (getsockname (s
, (struct sockaddr
*)&sa1
, &len1
) == 0)
3152 contact
= Fplist_put (contact
, QClocal
,
3153 conv_sockaddr_to_lisp (&sa1
, len1
));
3158 #ifdef HAVE_GETADDRINFO
3165 /* Discard the unwind protect for closing S, if any. */
3166 specpdl_ptr
= specpdl
+ count1
;
3168 /* Unwind bind_polling_period and request_sigio. */
3169 unbind_to (count
, Qnil
);
3173 /* If non-blocking got this far - and failed - assume non-blocking is
3174 not supported after all. This is probably a wrong assumption, but
3175 the normal blocking calls to open-network-stream handles this error
3177 if (is_non_blocking_client
)
3182 report_file_error ("make server process failed", contact
);
3184 report_file_error ("make client process failed", contact
);
3187 #endif /* not TERM */
3193 buffer
= Fget_buffer_create (buffer
);
3194 proc
= make_process (name
);
3196 chan_process
[inch
] = proc
;
3199 fcntl (inch
, F_SETFL
, O_NONBLOCK
);
3202 fcntl (inch
, F_SETFL
, O_NDELAY
);
3206 p
= XPROCESS (proc
);
3208 p
->childp
= contact
;
3209 p
->plist
= Fcopy_sequence (Fplist_get (contact
, QCplist
));
3212 p
->sentinel
= sentinel
;
3214 p
->filter_multibyte
= buffer_defaults
.enable_multibyte_characters
;
3215 /* Override the above only if :filter-multibyte is specified. */
3216 if (! NILP (Fplist_member (contact
, QCfilter_multibyte
)))
3217 p
->filter_multibyte
= Fplist_get (contact
, QCfilter_multibyte
);
3218 p
->log
= Fplist_get (contact
, QClog
);
3219 if (tem
= Fplist_get (contact
, QCnoquery
), !NILP (tem
))
3220 p
->kill_without_query
= Qt
;
3221 if ((tem
= Fplist_get (contact
, QCstop
), !NILP (tem
)))
3224 XSETINT (p
->infd
, inch
);
3225 XSETINT (p
->outfd
, outch
);
3226 if (is_server
&& socktype
== SOCK_STREAM
)
3227 p
->status
= Qlisten
;
3229 #ifdef NON_BLOCKING_CONNECT
3230 if (is_non_blocking_client
)
3232 /* We may get here if connect did succeed immediately. However,
3233 in that case, we still need to signal this like a non-blocking
3235 p
->status
= Qconnect
;
3236 if (!FD_ISSET (inch
, &connect_wait_mask
))
3238 FD_SET (inch
, &connect_wait_mask
);
3239 num_pending_connects
++;
3244 /* A server may have a client filter setting of Qt, but it must
3245 still listen for incoming connects unless it is stopped. */
3246 if ((!EQ (p
->filter
, Qt
) && !EQ (p
->command
, Qt
))
3247 || (EQ (p
->status
, Qlisten
) && NILP (p
->command
)))
3249 FD_SET (inch
, &input_wait_mask
);
3250 FD_SET (inch
, &non_keyboard_wait_mask
);
3253 if (inch
> max_process_desc
)
3254 max_process_desc
= inch
;
3256 tem
= Fplist_member (contact
, QCcoding
);
3257 if (!NILP (tem
) && (!CONSP (tem
) || !CONSP (XCDR (tem
))))
3258 tem
= Qnil
; /* No error message (too late!). */
3261 /* Setup coding systems for communicating with the network stream. */
3262 struct gcpro gcpro1
;
3263 /* Qt denotes we have not yet called Ffind_operation_coding_system. */
3264 Lisp_Object coding_systems
= Qt
;
3265 Lisp_Object args
[5], val
;
3269 val
= XCAR (XCDR (tem
));
3273 else if (!NILP (Vcoding_system_for_read
))
3274 val
= Vcoding_system_for_read
;
3275 else if ((!NILP (buffer
) && NILP (XBUFFER (buffer
)->enable_multibyte_characters
))
3276 || (NILP (buffer
) && NILP (buffer_defaults
.enable_multibyte_characters
)))
3277 /* We dare not decode end-of-line format by setting VAL to
3278 Qraw_text, because the existing Emacs Lisp libraries
3279 assume that they receive bare code including a sequene of
3284 if (NILP (host
) || NILP (service
))
3285 coding_systems
= Qnil
;
3288 args
[0] = Qopen_network_stream
, args
[1] = name
,
3289 args
[2] = buffer
, args
[3] = host
, args
[4] = service
;
3291 coding_systems
= Ffind_operation_coding_system (5, args
);
3294 if (CONSP (coding_systems
))
3295 val
= XCAR (coding_systems
);
3296 else if (CONSP (Vdefault_process_coding_system
))
3297 val
= XCAR (Vdefault_process_coding_system
);
3301 p
->decode_coding_system
= val
;
3305 val
= XCAR (XCDR (tem
));
3309 else if (!NILP (Vcoding_system_for_write
))
3310 val
= Vcoding_system_for_write
;
3311 else if (NILP (current_buffer
->enable_multibyte_characters
))
3315 if (EQ (coding_systems
, Qt
))
3317 if (NILP (host
) || NILP (service
))
3318 coding_systems
= Qnil
;
3321 args
[0] = Qopen_network_stream
, args
[1] = name
,
3322 args
[2] = buffer
, args
[3] = host
, args
[4] = service
;
3324 coding_systems
= Ffind_operation_coding_system (5, args
);
3328 if (CONSP (coding_systems
))
3329 val
= XCDR (coding_systems
);
3330 else if (CONSP (Vdefault_process_coding_system
))
3331 val
= XCDR (Vdefault_process_coding_system
);
3335 p
->encode_coding_system
= val
;
3337 setup_process_coding_systems (proc
);
3339 p
->decoding_buf
= make_uninit_string (0);
3340 p
->decoding_carryover
= make_number (0);
3341 p
->encoding_buf
= make_uninit_string (0);
3342 p
->encoding_carryover
= make_number (0);
3344 p
->inherit_coding_system_flag
3345 = (!NILP (tem
) || NILP (buffer
) || !inherit_process_coding_system
3351 #endif /* HAVE_SOCKETS */
3354 #if defined(HAVE_SOCKETS) && defined(HAVE_NET_IF_H) && defined(HAVE_SYS_IOCTL_H)
3357 DEFUN ("network-interface-list", Fnetwork_interface_list
, Snetwork_interface_list
, 0, 0, 0,
3358 doc
: /* Return an alist of all network interfaces and their network address.
3359 Each element is a cons, the car of which is a string containing the
3360 interface name, and the cdr is the network address in internal
3361 format; see the description of ADDRESS in `make-network-process'. */)
3364 struct ifconf ifconf
;
3365 struct ifreq
*ifreqs
= NULL
;
3370 s
= socket (AF_INET
, SOCK_STREAM
, 0);
3376 buf_size
= ifaces
* sizeof(ifreqs
[0]);
3377 ifreqs
= (struct ifreq
*)xrealloc(ifreqs
, buf_size
);
3384 ifconf
.ifc_len
= buf_size
;
3385 ifconf
.ifc_req
= ifreqs
;
3386 if (ioctl (s
, SIOCGIFCONF
, &ifconf
))
3392 if (ifconf
.ifc_len
== buf_size
)
3396 ifaces
= ifconf
.ifc_len
/ sizeof (ifreqs
[0]);
3399 while (--ifaces
>= 0)
3401 struct ifreq
*ifq
= &ifreqs
[ifaces
];
3402 char namebuf
[sizeof (ifq
->ifr_name
) + 1];
3403 if (ifq
->ifr_addr
.sa_family
!= AF_INET
)
3405 bcopy (ifq
->ifr_name
, namebuf
, sizeof (ifq
->ifr_name
));
3406 namebuf
[sizeof (ifq
->ifr_name
)] = 0;
3407 res
= Fcons (Fcons (build_string (namebuf
),
3408 conv_sockaddr_to_lisp (&ifq
->ifr_addr
,
3409 sizeof (struct sockaddr
))),
3415 #endif /* SIOCGIFCONF */
3417 #if defined(SIOCGIFADDR) || defined(SIOCGIFHWADDR) || defined(SIOCGIFFLAGS)
3424 static struct ifflag_def ifflag_table
[] = {
3428 #ifdef IFF_BROADCAST
3429 { IFF_BROADCAST
, "broadcast" },
3432 { IFF_DEBUG
, "debug" },
3435 { IFF_LOOPBACK
, "loopback" },
3437 #ifdef IFF_POINTOPOINT
3438 { IFF_POINTOPOINT
, "pointopoint" },
3441 { IFF_RUNNING
, "running" },
3444 { IFF_NOARP
, "noarp" },
3447 { IFF_PROMISC
, "promisc" },
3449 #ifdef IFF_NOTRAILERS
3450 { IFF_NOTRAILERS
, "notrailers" },
3453 { IFF_ALLMULTI
, "allmulti" },
3456 { IFF_MASTER
, "master" },
3459 { IFF_SLAVE
, "slave" },
3461 #ifdef IFF_MULTICAST
3462 { IFF_MULTICAST
, "multicast" },
3465 { IFF_PORTSEL
, "portsel" },
3467 #ifdef IFF_AUTOMEDIA
3468 { IFF_AUTOMEDIA
, "automedia" },
3471 { IFF_DYNAMIC
, "dynamic" },
3476 DEFUN ("network-interface-info", Fnetwork_interface_info
, Snetwork_interface_info
, 1, 1, 0,
3477 doc
: /* Return information about network interface named IFNAME.
3478 The return value is a list (ADDR BCAST NETMASK HWADDR FLAGS),
3479 where ADDR is the layer 3 address, BCAST is the layer 3 broadcast address,
3480 NETMASK is the layer 3 network mask, HWADDR is the layer 2 addres, and
3481 FLAGS is the current flags of the interface. */)
3486 Lisp_Object res
= Qnil
;
3491 CHECK_STRING (ifname
);
3493 bzero (rq
.ifr_name
, sizeof rq
.ifr_name
);
3494 strncpy (rq
.ifr_name
, SDATA (ifname
), sizeof (rq
.ifr_name
));
3496 s
= socket (AF_INET
, SOCK_STREAM
, 0);
3501 #if defined(SIOCGIFFLAGS) && defined(HAVE_STRUCT_IFREQ_IFR_FLAGS)
3502 if (ioctl (s
, SIOCGIFFLAGS
, &rq
) == 0)
3504 int flags
= rq
.ifr_flags
;
3505 struct ifflag_def
*fp
;
3509 for (fp
= ifflag_table
; flags
!= 0 && fp
; fp
++)
3511 if (flags
& fp
->flag_bit
)
3513 elt
= Fcons (intern (fp
->flag_sym
), elt
);
3514 flags
-= fp
->flag_bit
;
3517 for (fnum
= 0; flags
&& fnum
< 32; fnum
++)
3519 if (flags
& (1 << fnum
))
3521 elt
= Fcons (make_number (fnum
), elt
);
3526 res
= Fcons (elt
, res
);
3529 #if defined(SIOCGIFHWADDR) && defined(HAVE_STRUCT_IFREQ_IFR_HWADDR)
3530 if (ioctl (s
, SIOCGIFHWADDR
, &rq
) == 0)
3532 Lisp_Object hwaddr
= Fmake_vector (make_number (6), Qnil
);
3533 register struct Lisp_Vector
*p
= XVECTOR (hwaddr
);
3537 for (n
= 0; n
< 6; n
++)
3538 p
->contents
[n
] = make_number (((unsigned char *)&rq
.ifr_hwaddr
.sa_data
[0])[n
]);
3539 elt
= Fcons (make_number (rq
.ifr_hwaddr
.sa_family
), hwaddr
);
3542 res
= Fcons (elt
, res
);
3545 #if defined(SIOCGIFNETMASK) && defined(ifr_netmask)
3546 if (ioctl (s
, SIOCGIFNETMASK
, &rq
) == 0)
3549 elt
= conv_sockaddr_to_lisp (&rq
.ifr_netmask
, sizeof (rq
.ifr_netmask
));
3552 res
= Fcons (elt
, res
);
3555 #if defined(SIOCGIFBRDADDR) && defined(HAVE_STRUCT_IFREQ_IFR_BROADADDR)
3556 if (ioctl (s
, SIOCGIFBRDADDR
, &rq
) == 0)
3559 elt
= conv_sockaddr_to_lisp (&rq
.ifr_broadaddr
, sizeof (rq
.ifr_broadaddr
));
3562 res
= Fcons (elt
, res
);
3565 #if defined(SIOCGIFADDR) && defined(HAVE_STRUCT_IFREQ_IFR_ADDR)
3566 if (ioctl (s
, SIOCGIFADDR
, &rq
) == 0)
3569 elt
= conv_sockaddr_to_lisp (&rq
.ifr_addr
, sizeof (rq
.ifr_addr
));
3572 res
= Fcons (elt
, res
);
3576 return any
? res
: Qnil
;
3579 #endif /* HAVE_SOCKETS */
3582 deactivate_process (proc
)
3585 register int inchannel
, outchannel
;
3586 register struct Lisp_Process
*p
= XPROCESS (proc
);
3588 inchannel
= XINT (p
->infd
);
3589 outchannel
= XINT (p
->outfd
);
3593 /* Beware SIGCHLD hereabouts. */
3594 flush_pending_output (inchannel
);
3597 VMS_PROC_STUFF
*get_vms_process_pointer (), *vs
;
3598 sys$
dassgn (outchannel
);
3599 vs
= get_vms_process_pointer (p
->pid
);
3601 give_back_vms_process_stuff (vs
);
3604 emacs_close (inchannel
);
3605 if (outchannel
>= 0 && outchannel
!= inchannel
)
3606 emacs_close (outchannel
);
3609 XSETINT (p
->infd
, -1);
3610 XSETINT (p
->outfd
, -1);
3611 #ifdef DATAGRAM_SOCKETS
3612 if (DATAGRAM_CHAN_P (inchannel
))
3614 xfree (datagram_address
[inchannel
].sa
);
3615 datagram_address
[inchannel
].sa
= 0;
3616 datagram_address
[inchannel
].len
= 0;
3619 chan_process
[inchannel
] = Qnil
;
3620 FD_CLR (inchannel
, &input_wait_mask
);
3621 FD_CLR (inchannel
, &non_keyboard_wait_mask
);
3622 if (FD_ISSET (inchannel
, &connect_wait_mask
))
3624 FD_CLR (inchannel
, &connect_wait_mask
);
3625 if (--num_pending_connects
< 0)
3628 if (inchannel
== max_process_desc
)
3631 /* We just closed the highest-numbered process input descriptor,
3632 so recompute the highest-numbered one now. */
3633 max_process_desc
= 0;
3634 for (i
= 0; i
< MAXDESC
; i
++)
3635 if (!NILP (chan_process
[i
]))
3636 max_process_desc
= i
;
3641 /* Close all descriptors currently in use for communication
3642 with subprocess. This is used in a newly-forked subprocess
3643 to get rid of irrelevant descriptors. */
3646 close_process_descs ()
3650 for (i
= 0; i
< MAXDESC
; i
++)
3652 Lisp_Object process
;
3653 process
= chan_process
[i
];
3654 if (!NILP (process
))
3656 int in
= XINT (XPROCESS (process
)->infd
);
3657 int out
= XINT (XPROCESS (process
)->outfd
);
3660 if (out
>= 0 && in
!= out
)
3667 DEFUN ("accept-process-output", Faccept_process_output
, Saccept_process_output
,
3669 doc
: /* Allow any pending output from subprocesses to be read by Emacs.
3670 It is read into the process' buffers or given to their filter functions.
3671 Non-nil arg PROCESS means do not return until some output has been received
3673 Non-nil second arg TIMEOUT and third arg TIMEOUT-MSECS are number of
3674 seconds and microseconds to wait; return after that much time whether
3675 or not there is input.
3676 Return non-nil iff we received any output before the timeout expired. */)
3677 (process
, timeout
, timeout_msecs
)
3678 register Lisp_Object process
, timeout
, timeout_msecs
;
3683 if (! NILP (process
))
3684 CHECK_PROCESS (process
);
3686 if (! NILP (timeout_msecs
))
3688 CHECK_NUMBER (timeout_msecs
);
3689 useconds
= XINT (timeout_msecs
);
3690 if (!INTEGERP (timeout
))
3691 XSETINT (timeout
, 0);
3694 int carry
= useconds
/ 1000000;
3696 XSETINT (timeout
, XINT (timeout
) + carry
);
3697 useconds
-= carry
* 1000000;
3699 /* I think this clause is necessary because C doesn't
3700 guarantee a particular rounding direction for negative
3704 XSETINT (timeout
, XINT (timeout
) - 1);
3705 useconds
+= 1000000;
3712 if (! NILP (timeout
))
3714 CHECK_NUMBER (timeout
);
3715 seconds
= XINT (timeout
);
3716 if (seconds
< 0 || (seconds
== 0 && useconds
== 0))
3720 seconds
= NILP (process
) ? -1 : 0;
3723 XSETFASTINT (process
, 0);
3726 (wait_reading_process_input (seconds
, useconds
, process
, 0)
3730 /* Accept a connection for server process SERVER on CHANNEL. */
3732 static int connect_counter
= 0;
3735 server_accept_connection (server
, channel
)
3739 Lisp_Object proc
, caller
, name
, buffer
;
3740 Lisp_Object contact
, host
, service
;
3741 struct Lisp_Process
*ps
= XPROCESS (server
);
3742 struct Lisp_Process
*p
;
3746 struct sockaddr_in in
;
3747 #ifdef HAVE_LOCAL_SOCKETS
3748 struct sockaddr_un un
;
3751 int len
= sizeof saddr
;
3753 s
= accept (channel
, &saddr
.sa
, &len
);
3762 if (code
== EWOULDBLOCK
)
3766 if (!NILP (ps
->log
))
3767 call3 (ps
->log
, server
, Qnil
,
3768 concat3 (build_string ("accept failed with code"),
3769 Fnumber_to_string (make_number (code
)),
3770 build_string ("\n")));
3776 /* Setup a new process to handle the connection. */
3778 /* Generate a unique identification of the caller, and build contact
3779 information for this process. */
3782 switch (saddr
.sa
.sa_family
)
3786 Lisp_Object args
[5];
3787 unsigned char *ip
= (unsigned char *)&saddr
.in
.sin_addr
.s_addr
;
3788 args
[0] = build_string ("%d.%d.%d.%d");
3789 args
[1] = make_number (*ip
++);
3790 args
[2] = make_number (*ip
++);
3791 args
[3] = make_number (*ip
++);
3792 args
[4] = make_number (*ip
++);
3793 host
= Fformat (5, args
);
3794 service
= make_number (ntohs (saddr
.in
.sin_port
));
3796 args
[0] = build_string (" <%s:%d>");
3799 caller
= Fformat (3, args
);
3803 #ifdef HAVE_LOCAL_SOCKETS
3807 caller
= Fnumber_to_string (make_number (connect_counter
));
3808 caller
= concat3 (build_string (" <*"), caller
, build_string ("*>"));
3812 /* Create a new buffer name for this process if it doesn't have a
3813 filter. The new buffer name is based on the buffer name or
3814 process name of the server process concatenated with the caller
3817 if (!NILP (ps
->filter
) && !EQ (ps
->filter
, Qt
))
3821 buffer
= ps
->buffer
;
3823 buffer
= Fbuffer_name (buffer
);
3828 buffer
= concat2 (buffer
, caller
);
3829 buffer
= Fget_buffer_create (buffer
);
3833 /* Generate a unique name for the new server process. Combine the
3834 server process name with the caller identification. */
3836 name
= concat2 (ps
->name
, caller
);
3837 proc
= make_process (name
);
3839 chan_process
[s
] = proc
;
3842 fcntl (s
, F_SETFL
, O_NONBLOCK
);
3845 fcntl (s
, F_SETFL
, O_NDELAY
);
3849 p
= XPROCESS (proc
);
3851 /* Build new contact information for this setup. */
3852 contact
= Fcopy_sequence (ps
->childp
);
3853 contact
= Fplist_put (contact
, QCserver
, Qnil
);
3854 contact
= Fplist_put (contact
, QChost
, host
);
3855 if (!NILP (service
))
3856 contact
= Fplist_put (contact
, QCservice
, service
);
3857 contact
= Fplist_put (contact
, QCremote
,
3858 conv_sockaddr_to_lisp (&saddr
.sa
, len
));
3859 #ifdef HAVE_GETSOCKNAME
3861 if (getsockname (s
, &saddr
.sa
, &len
) == 0)
3862 contact
= Fplist_put (contact
, QClocal
,
3863 conv_sockaddr_to_lisp (&saddr
.sa
, len
));
3866 p
->childp
= contact
;
3867 p
->plist
= Fcopy_sequence (ps
->plist
);
3870 p
->sentinel
= ps
->sentinel
;
3871 p
->filter
= ps
->filter
;
3874 XSETINT (p
->infd
, s
);
3875 XSETINT (p
->outfd
, s
);
3878 /* Client processes for accepted connections are not stopped initially. */
3879 if (!EQ (p
->filter
, Qt
))
3881 FD_SET (s
, &input_wait_mask
);
3882 FD_SET (s
, &non_keyboard_wait_mask
);
3885 if (s
> max_process_desc
)
3886 max_process_desc
= s
;
3888 /* Setup coding system for new process based on server process.
3889 This seems to be the proper thing to do, as the coding system
3890 of the new process should reflect the settings at the time the
3891 server socket was opened; not the current settings. */
3893 p
->decode_coding_system
= ps
->decode_coding_system
;
3894 p
->encode_coding_system
= ps
->encode_coding_system
;
3895 setup_process_coding_systems (proc
);
3897 p
->decoding_buf
= make_uninit_string (0);
3898 p
->decoding_carryover
= make_number (0);
3899 p
->encoding_buf
= make_uninit_string (0);
3900 p
->encoding_carryover
= make_number (0);
3902 p
->inherit_coding_system_flag
3903 = (NILP (buffer
) ? Qnil
: ps
->inherit_coding_system_flag
);
3905 if (!NILP (ps
->log
))
3906 call3 (ps
->log
, server
, proc
,
3907 concat3 (build_string ("accept from "),
3908 (STRINGP (host
) ? host
: build_string ("-")),
3909 build_string ("\n")));
3911 if (!NILP (p
->sentinel
))
3912 exec_sentinel (proc
,
3913 concat3 (build_string ("open from "),
3914 (STRINGP (host
) ? host
: build_string ("-")),
3915 build_string ("\n")));
3918 /* This variable is different from waiting_for_input in keyboard.c.
3919 It is used to communicate to a lisp process-filter/sentinel (via the
3920 function Fwaiting_for_user_input_p below) whether emacs was waiting
3921 for user-input when that process-filter was called.
3922 waiting_for_input cannot be used as that is by definition 0 when
3923 lisp code is being evalled.
3924 This is also used in record_asynch_buffer_change.
3925 For that purpose, this must be 0
3926 when not inside wait_reading_process_input. */
3927 static int waiting_for_user_input_p
;
3929 /* This is here so breakpoints can be put on it. */
3931 wait_reading_process_input_1 ()
3935 /* Read and dispose of subprocess output while waiting for timeout to
3936 elapse and/or keyboard input to be available.
3939 timeout in seconds, or
3940 zero for no limit, or
3941 -1 means gobble data immediately available but don't wait for any.
3944 an additional duration to wait, measured in microseconds.
3945 If this is nonzero and time_limit is 0, then the timeout
3946 consists of MICROSECS only.
3948 READ_KBD is a lisp value:
3949 0 to ignore keyboard input, or
3950 1 to return when input is available, or
3951 -1 meaning caller will actually read the input, so don't throw to
3952 the quit handler, or
3953 a cons cell, meaning wait until its car is non-nil
3954 (and gobble terminal input into the buffer if any arrives), or
3955 a process object, meaning wait until something arrives from that
3956 process. The return value is true iff we read some input from
3959 DO_DISPLAY != 0 means redisplay should be done to show subprocess
3960 output that arrives.
3962 If READ_KBD is a pointer to a struct Lisp_Process, then the
3963 function returns true iff we received input from that process
3964 before the timeout elapsed.
3965 Otherwise, return true iff we received input from any process. */
3968 wait_reading_process_input (time_limit
, microsecs
, read_kbd
, do_display
)
3969 int time_limit
, microsecs
;
3970 Lisp_Object read_kbd
;
3973 register int channel
, nfds
;
3974 static SELECT_TYPE Available
;
3975 static SELECT_TYPE Connecting
;
3976 int check_connect
, no_avail
;
3979 EMACS_TIME timeout
, end_time
;
3980 int wait_channel
= -1;
3981 struct Lisp_Process
*wait_proc
= 0;
3982 int got_some_input
= 0;
3983 /* Either nil or a cons cell, the car of which is of interest and
3984 may be changed outside of this routine. */
3985 Lisp_Object wait_for_cell
= Qnil
;
3987 FD_ZERO (&Available
);
3988 FD_ZERO (&Connecting
);
3990 /* If read_kbd is a process to watch, set wait_proc and wait_channel
3992 if (PROCESSP (read_kbd
))
3994 wait_proc
= XPROCESS (read_kbd
);
3995 wait_channel
= XINT (wait_proc
->infd
);
3996 XSETFASTINT (read_kbd
, 0);
3999 /* If waiting for non-nil in a cell, record where. */
4000 if (CONSP (read_kbd
))
4002 wait_for_cell
= read_kbd
;
4003 XSETFASTINT (read_kbd
, 0);
4006 waiting_for_user_input_p
= XINT (read_kbd
);
4008 /* Since we may need to wait several times,
4009 compute the absolute time to return at. */
4010 if (time_limit
|| microsecs
)
4012 EMACS_GET_TIME (end_time
);
4013 EMACS_SET_SECS_USECS (timeout
, time_limit
, microsecs
);
4014 EMACS_ADD_TIME (end_time
, end_time
, timeout
);
4016 #ifdef POLL_INTERRUPTED_SYS_CALL
4017 /* AlainF 5-Jul-1996
4018 HP-UX 10.10 seem to have problems with signals coming in
4019 Causes "poll: interrupted system call" messages when Emacs is run
4021 Turn off periodic alarms (in case they are in use),
4022 and then turn off any other atimers. */
4024 turn_on_atimers (0);
4025 #endif /* POLL_INTERRUPTED_SYS_CALL */
4029 int timeout_reduced_for_timers
= 0;
4031 /* If calling from keyboard input, do not quit
4032 since we want to return C-g as an input character.
4033 Otherwise, do pending quit if requested. */
4034 if (XINT (read_kbd
) >= 0)
4037 /* Exit now if the cell we're waiting for became non-nil. */
4038 if (! NILP (wait_for_cell
) && ! NILP (XCAR (wait_for_cell
)))
4041 /* Compute time from now till when time limit is up */
4042 /* Exit if already run out */
4043 if (time_limit
== -1)
4045 /* -1 specified for timeout means
4046 gobble output available now
4047 but don't wait at all. */
4049 EMACS_SET_SECS_USECS (timeout
, 0, 0);
4051 else if (time_limit
|| microsecs
)
4053 EMACS_GET_TIME (timeout
);
4054 EMACS_SUB_TIME (timeout
, end_time
, timeout
);
4055 if (EMACS_TIME_NEG_P (timeout
))
4060 EMACS_SET_SECS_USECS (timeout
, 100000, 0);
4063 /* Normally we run timers here.
4064 But not if wait_for_cell; in those cases,
4065 the wait is supposed to be short,
4066 and those callers cannot handle running arbitrary Lisp code here. */
4067 if (NILP (wait_for_cell
))
4069 EMACS_TIME timer_delay
;
4073 int old_timers_run
= timers_run
;
4074 struct buffer
*old_buffer
= current_buffer
;
4076 timer_delay
= timer_check (1);
4078 /* If a timer has run, this might have changed buffers
4079 an alike. Make read_key_sequence aware of that. */
4080 if (timers_run
!= old_timers_run
4081 && old_buffer
!= current_buffer
4082 && waiting_for_user_input_p
== -1)
4083 record_asynch_buffer_change ();
4085 if (timers_run
!= old_timers_run
&& do_display
)
4086 /* We must retry, since a timer may have requeued itself
4087 and that could alter the time_delay. */
4088 redisplay_preserve_echo_area (9);
4092 while (!detect_input_pending ());
4094 /* If there is unread keyboard input, also return. */
4095 if (XINT (read_kbd
) != 0
4096 && requeued_events_pending_p ())
4099 if (! EMACS_TIME_NEG_P (timer_delay
) && time_limit
!= -1)
4101 EMACS_TIME difference
;
4102 EMACS_SUB_TIME (difference
, timer_delay
, timeout
);
4103 if (EMACS_TIME_NEG_P (difference
))
4105 timeout
= timer_delay
;
4106 timeout_reduced_for_timers
= 1;
4109 /* If time_limit is -1, we are not going to wait at all. */
4110 else if (time_limit
!= -1)
4112 /* This is so a breakpoint can be put here. */
4113 wait_reading_process_input_1 ();
4117 /* Cause C-g and alarm signals to take immediate action,
4118 and cause input available signals to zero out timeout.
4120 It is important that we do this before checking for process
4121 activity. If we get a SIGCHLD after the explicit checks for
4122 process activity, timeout is the only way we will know. */
4123 if (XINT (read_kbd
) < 0)
4124 set_waiting_for_input (&timeout
);
4126 /* If status of something has changed, and no input is
4127 available, notify the user of the change right away. After
4128 this explicit check, we'll let the SIGCHLD handler zap
4129 timeout to get our attention. */
4130 if (update_tick
!= process_tick
&& do_display
)
4132 SELECT_TYPE Atemp
, Ctemp
;
4134 Atemp
= input_wait_mask
;
4136 /* On Mac OS X, the SELECT system call always says input is
4137 present (for reading) at stdin, even when none is. This
4138 causes the call to SELECT below to return 1 and
4139 status_notify not to be called. As a result output of
4140 subprocesses are incorrectly discarded. */
4143 Ctemp
= connect_wait_mask
;
4144 EMACS_SET_SECS_USECS (timeout
, 0, 0);
4145 if ((select (max (max_process_desc
, max_keyboard_desc
) + 1,
4147 (num_pending_connects
> 0 ? &Ctemp
: (SELECT_TYPE
*)0),
4148 (SELECT_TYPE
*)0, &timeout
)
4151 /* It's okay for us to do this and then continue with
4152 the loop, since timeout has already been zeroed out. */
4153 clear_waiting_for_input ();
4158 /* Don't wait for output from a non-running process. Just
4159 read whatever data has already been received. */
4160 if (wait_proc
!= 0 && !NILP (wait_proc
->raw_status_low
))
4161 update_status (wait_proc
);
4163 && ! EQ (wait_proc
->status
, Qrun
)
4164 && ! EQ (wait_proc
->status
, Qconnect
))
4166 int nread
, total_nread
= 0;
4168 clear_waiting_for_input ();
4169 XSETPROCESS (proc
, wait_proc
);
4171 /* Read data from the process, until we exhaust it. */
4172 while (XINT (wait_proc
->infd
) >= 0)
4174 nread
= read_process_output (proc
, XINT (wait_proc
->infd
));
4180 total_nread
+= nread
;
4182 else if (nread
== -1 && EIO
== errno
)
4186 else if (nread
== -1 && EAGAIN
== errno
)
4190 else if (nread
== -1 && EWOULDBLOCK
== errno
)
4194 if (total_nread
> 0 && do_display
)
4195 redisplay_preserve_echo_area (10);
4200 /* Wait till there is something to do */
4202 if (!NILP (wait_for_cell
))
4204 Available
= non_process_wait_mask
;
4209 if (! XINT (read_kbd
))
4210 Available
= non_keyboard_wait_mask
;
4212 Available
= input_wait_mask
;
4213 check_connect
= (num_pending_connects
> 0);
4216 /* If frame size has changed or the window is newly mapped,
4217 redisplay now, before we start to wait. There is a race
4218 condition here; if a SIGIO arrives between now and the select
4219 and indicates that a frame is trashed, the select may block
4220 displaying a trashed screen. */
4221 if (frame_garbaged
&& do_display
)
4223 clear_waiting_for_input ();
4224 redisplay_preserve_echo_area (11);
4225 if (XINT (read_kbd
) < 0)
4226 set_waiting_for_input (&timeout
);
4230 if (XINT (read_kbd
) && detect_input_pending ())
4238 Connecting
= connect_wait_mask
;
4239 nfds
= select (max (max_process_desc
, max_keyboard_desc
) + 1,
4241 (check_connect
? &Connecting
: (SELECT_TYPE
*)0),
4242 (SELECT_TYPE
*)0, &timeout
);
4247 /* Make C-g and alarm signals set flags again */
4248 clear_waiting_for_input ();
4250 /* If we woke up due to SIGWINCH, actually change size now. */
4251 do_pending_window_change (0);
4253 if (time_limit
&& nfds
== 0 && ! timeout_reduced_for_timers
)
4254 /* We wanted the full specified time, so return now. */
4258 if (xerrno
== EINTR
)
4261 /* Ultrix select seems to return ENOMEM when it is
4262 interrupted. Treat it just like EINTR. Bleah. Note
4263 that we want to test for the "ultrix" CPP symbol, not
4264 "__ultrix__"; the latter is only defined under GCC, but
4265 not by DEC's bundled CC. -JimB */
4266 else if (xerrno
== ENOMEM
)
4270 /* This happens for no known reason on ALLIANT.
4271 I am guessing that this is the right response. -- RMS. */
4272 else if (xerrno
== EFAULT
)
4275 else if (xerrno
== EBADF
)
4278 /* AIX doesn't handle PTY closure the same way BSD does. On AIX,
4279 the child's closure of the pts gives the parent a SIGHUP, and
4280 the ptc file descriptor is automatically closed,
4281 yielding EBADF here or at select() call above.
4282 So, SIGHUP is ignored (see def of PTY_TTY_NAME_SPRINTF
4283 in m/ibmrt-aix.h), and here we just ignore the select error.
4284 Cleanup occurs c/o status_notify after SIGCLD. */
4285 no_avail
= 1; /* Cannot depend on values returned */
4291 error ("select error: %s", emacs_strerror (xerrno
));
4296 FD_ZERO (&Available
);
4300 #if defined(sun) && !defined(USG5_4)
4301 if (nfds
> 0 && keyboard_bit_set (&Available
)
4303 /* System sometimes fails to deliver SIGIO.
4305 David J. Mackenzie says that Emacs doesn't compile under
4306 Solaris if this code is enabled, thus the USG5_4 in the CPP
4307 conditional. "I haven't noticed any ill effects so far.
4308 If you find a Solaris expert somewhere, they might know
4310 kill (getpid (), SIGIO
);
4313 #if 0 /* When polling is used, interrupt_input is 0,
4314 so get_input_pending should read the input.
4315 So this should not be needed. */
4316 /* If we are using polling for input,
4317 and we see input available, make it get read now.
4318 Otherwise it might not actually get read for a second.
4319 And on hpux, since we turn off polling in wait_reading_process_input,
4320 it might never get read at all if we don't spend much time
4321 outside of wait_reading_process_input. */
4322 if (XINT (read_kbd
) && interrupt_input
4323 && keyboard_bit_set (&Available
)
4324 && input_polling_used ())
4325 kill (getpid (), SIGALRM
);
4328 /* Check for keyboard input */
4329 /* If there is any, return immediately
4330 to give it higher priority than subprocesses */
4332 if (XINT (read_kbd
) != 0)
4334 int old_timers_run
= timers_run
;
4335 struct buffer
*old_buffer
= current_buffer
;
4338 if (detect_input_pending_run_timers (do_display
))
4340 swallow_events (do_display
);
4341 if (detect_input_pending_run_timers (do_display
))
4345 /* If a timer has run, this might have changed buffers
4346 an alike. Make read_key_sequence aware of that. */
4347 if (timers_run
!= old_timers_run
4348 && waiting_for_user_input_p
== -1
4349 && old_buffer
!= current_buffer
)
4350 record_asynch_buffer_change ();
4356 /* If there is unread keyboard input, also return. */
4357 if (XINT (read_kbd
) != 0
4358 && requeued_events_pending_p ())
4361 /* If we are not checking for keyboard input now,
4362 do process events (but don't run any timers).
4363 This is so that X events will be processed.
4364 Otherwise they may have to wait until polling takes place.
4365 That would causes delays in pasting selections, for example.
4367 (We used to do this only if wait_for_cell.) */
4368 if (XINT (read_kbd
) == 0 && detect_input_pending ())
4370 swallow_events (do_display
);
4371 #if 0 /* Exiting when read_kbd doesn't request that seems wrong, though. */
4372 if (detect_input_pending ())
4377 /* Exit now if the cell we're waiting for became non-nil. */
4378 if (! NILP (wait_for_cell
) && ! NILP (XCAR (wait_for_cell
)))
4382 /* If we think we have keyboard input waiting, but didn't get SIGIO,
4383 go read it. This can happen with X on BSD after logging out.
4384 In that case, there really is no input and no SIGIO,
4385 but select says there is input. */
4387 if (XINT (read_kbd
) && interrupt_input
4388 && keyboard_bit_set (&Available
) && ! noninteractive
)
4389 kill (getpid (), SIGIO
);
4393 got_some_input
|= nfds
> 0;
4395 /* If checking input just got us a size-change event from X,
4396 obey it now if we should. */
4397 if (XINT (read_kbd
) || ! NILP (wait_for_cell
))
4398 do_pending_window_change (0);
4400 /* Check for data from a process. */
4401 if (no_avail
|| nfds
== 0)
4404 /* Really FIRST_PROC_DESC should be 0 on Unix,
4405 but this is safer in the short run. */
4406 for (channel
= 0; channel
<= max_process_desc
; channel
++)
4408 if (FD_ISSET (channel
, &Available
)
4409 && FD_ISSET (channel
, &non_keyboard_wait_mask
))
4413 /* If waiting for this channel, arrange to return as
4414 soon as no more input to be processed. No more
4416 if (wait_channel
== channel
)
4422 proc
= chan_process
[channel
];
4426 /* If this is a server stream socket, accept connection. */
4427 if (EQ (XPROCESS (proc
)->status
, Qlisten
))
4429 server_accept_connection (proc
, channel
);
4433 /* Read data from the process, starting with our
4434 buffered-ahead character if we have one. */
4436 nread
= read_process_output (proc
, channel
);
4439 /* Since read_process_output can run a filter,
4440 which can call accept-process-output,
4441 don't try to read from any other processes
4442 before doing the select again. */
4443 FD_ZERO (&Available
);
4446 redisplay_preserve_echo_area (12);
4449 else if (nread
== -1 && errno
== EWOULDBLOCK
)
4452 /* ISC 4.1 defines both EWOULDBLOCK and O_NONBLOCK,
4453 and Emacs uses O_NONBLOCK, so what we get is EAGAIN. */
4455 else if (nread
== -1 && errno
== EAGAIN
)
4459 else if (nread
== -1 && errno
== EAGAIN
)
4461 /* Note that we cannot distinguish between no input
4462 available now and a closed pipe.
4463 With luck, a closed pipe will be accompanied by
4464 subprocess termination and SIGCHLD. */
4465 else if (nread
== 0 && !NETCONN_P (proc
))
4467 #endif /* O_NDELAY */
4468 #endif /* O_NONBLOCK */
4470 /* On some OSs with ptys, when the process on one end of
4471 a pty exits, the other end gets an error reading with
4472 errno = EIO instead of getting an EOF (0 bytes read).
4473 Therefore, if we get an error reading and errno =
4474 EIO, just continue, because the child process has
4475 exited and should clean itself up soon (e.g. when we
4478 However, it has been known to happen that the SIGCHLD
4479 got lost. So raise the signl again just in case.
4481 else if (nread
== -1 && errno
== EIO
)
4482 kill (getpid (), SIGCHLD
);
4483 #endif /* HAVE_PTYS */
4484 /* If we can detect process termination, don't consider the process
4485 gone just because its pipe is closed. */
4487 else if (nread
== 0 && !NETCONN_P (proc
))
4492 /* Preserve status of processes already terminated. */
4493 XSETINT (XPROCESS (proc
)->tick
, ++process_tick
);
4494 deactivate_process (proc
);
4495 if (!NILP (XPROCESS (proc
)->raw_status_low
))
4496 update_status (XPROCESS (proc
));
4497 if (EQ (XPROCESS (proc
)->status
, Qrun
))
4498 XPROCESS (proc
)->status
4499 = Fcons (Qexit
, Fcons (make_number (256), Qnil
));
4502 #ifdef NON_BLOCKING_CONNECT
4503 if (check_connect
&& FD_ISSET (channel
, &Connecting
))
4505 struct Lisp_Process
*p
;
4507 FD_CLR (channel
, &connect_wait_mask
);
4508 if (--num_pending_connects
< 0)
4511 proc
= chan_process
[channel
];
4515 p
= XPROCESS (proc
);
4518 /* getsockopt(,,SO_ERROR,,) is said to hang on some systems.
4519 So only use it on systems where it is known to work. */
4521 int xlen
= sizeof(xerrno
);
4522 if (getsockopt(channel
, SOL_SOCKET
, SO_ERROR
, &xerrno
, &xlen
))
4527 struct sockaddr pname
;
4528 int pnamelen
= sizeof(pname
);
4530 /* If connection failed, getpeername will fail. */
4532 if (getpeername(channel
, &pname
, &pnamelen
) < 0)
4534 /* Obtain connect failure code through error slippage. */
4537 if (errno
== ENOTCONN
&& read(channel
, &dummy
, 1) < 0)
4544 XSETINT (p
->tick
, ++process_tick
);
4545 p
->status
= Fcons (Qfailed
, Fcons (make_number (xerrno
), Qnil
));
4546 deactivate_process (proc
);
4551 /* Execute the sentinel here. If we had relied on
4552 status_notify to do it later, it will read input
4553 from the process before calling the sentinel. */
4554 exec_sentinel (proc
, build_string ("open\n"));
4555 if (!EQ (p
->filter
, Qt
) && !EQ (p
->command
, Qt
))
4557 FD_SET (XINT (p
->infd
), &input_wait_mask
);
4558 FD_SET (XINT (p
->infd
), &non_keyboard_wait_mask
);
4562 #endif /* NON_BLOCKING_CONNECT */
4563 } /* end for each file descriptor */
4564 } /* end while exit conditions not met */
4566 waiting_for_user_input_p
= 0;
4568 /* If calling from keyboard input, do not quit
4569 since we want to return C-g as an input character.
4570 Otherwise, do pending quit if requested. */
4571 if (XINT (read_kbd
) >= 0)
4573 /* Prevent input_pending from remaining set if we quit. */
4574 clear_input_pending ();
4577 #ifdef POLL_INTERRUPTED_SYS_CALL
4578 /* AlainF 5-Jul-1996
4579 HP-UX 10.10 seems to have problems with signals coming in
4580 Causes "poll: interrupted system call" messages when Emacs is run
4582 Turn periodic alarms back on */
4584 #endif /* POLL_INTERRUPTED_SYS_CALL */
4586 return got_some_input
;
4589 /* Given a list (FUNCTION ARGS...), apply FUNCTION to the ARGS. */
4592 read_process_output_call (fun_and_args
)
4593 Lisp_Object fun_and_args
;
4595 return apply1 (XCAR (fun_and_args
), XCDR (fun_and_args
));
4599 read_process_output_error_handler (error
)
4602 cmd_error_internal (error
, "error in process filter: ");
4604 update_echo_area ();
4605 Fsleep_for (make_number (2), Qnil
);
4609 /* Read pending output from the process channel,
4610 starting with our buffered-ahead character if we have one.
4611 Yield number of decoded characters read.
4613 This function reads at most 1024 characters.
4614 If you want to read all available subprocess output,
4615 you must call it repeatedly until it returns zero.
4617 The characters read are decoded according to PROC's coding-system
4621 read_process_output (proc
, channel
)
4623 register int channel
;
4625 register int nbytes
;
4627 register Lisp_Object outstream
;
4628 register struct buffer
*old
= current_buffer
;
4629 register struct Lisp_Process
*p
= XPROCESS (proc
);
4630 register int opoint
;
4631 struct coding_system
*coding
= proc_decode_coding_system
[channel
];
4632 int carryover
= XINT (p
->decoding_carryover
);
4636 VMS_PROC_STUFF
*vs
, *get_vms_process_pointer();
4638 vs
= get_vms_process_pointer (p
->pid
);
4642 return (0); /* Really weird if it does this */
4643 if (!(vs
->iosb
[0] & 1))
4644 return -1; /* I/O error */
4647 error ("Could not get VMS process pointer");
4648 chars
= vs
->inputBuffer
;
4649 nbytes
= clean_vms_buffer (chars
, vs
->iosb
[1]);
4652 start_vms_process_read (vs
); /* Crank up the next read on the process */
4653 return 1; /* Nothing worth printing, say we got 1 */
4657 /* The data carried over in the previous decoding (which are at
4658 the tail of decoding buffer) should be prepended to the new
4659 data read to decode all together. */
4660 chars
= (char *) alloca (nbytes
+ carryover
);
4661 bcopy (SDATA (p
->decoding_buf
), buf
, carryover
);
4662 bcopy (vs
->inputBuffer
, chars
+ carryover
, nbytes
);
4666 #ifdef DATAGRAM_SOCKETS
4667 /* A datagram is one packet; allow at least 1500+ bytes of data
4668 corresponding to the typical Ethernet frame size. */
4669 if (DATAGRAM_CHAN_P (channel
))
4671 /* carryover = 0; */ /* Does carryover make sense for datagrams? */
4676 chars
= (char *) alloca (carryover
+ readmax
);
4678 /* See the comment above. */
4679 bcopy (SDATA (p
->decoding_buf
), chars
, carryover
);
4681 #ifdef DATAGRAM_SOCKETS
4682 /* We have a working select, so proc_buffered_char is always -1. */
4683 if (DATAGRAM_CHAN_P (channel
))
4685 int len
= datagram_address
[channel
].len
;
4686 nbytes
= recvfrom (channel
, chars
+ carryover
, readmax
- carryover
,
4687 0, datagram_address
[channel
].sa
, &len
);
4691 if (proc_buffered_char
[channel
] < 0)
4692 nbytes
= emacs_read (channel
, chars
+ carryover
, readmax
- carryover
);
4695 chars
[carryover
] = proc_buffered_char
[channel
];
4696 proc_buffered_char
[channel
] = -1;
4697 nbytes
= emacs_read (channel
, chars
+ carryover
+ 1, readmax
- 1 - carryover
);
4701 nbytes
= nbytes
+ 1;
4703 #endif /* not VMS */
4705 XSETINT (p
->decoding_carryover
, 0);
4707 /* At this point, NBYTES holds number of bytes just received
4708 (including the one in proc_buffered_char[channel]). */
4711 if (nbytes
< 0 || coding
->mode
& CODING_MODE_LAST_BLOCK
)
4713 coding
->mode
|= CODING_MODE_LAST_BLOCK
;
4716 /* Now set NBYTES how many bytes we must decode. */
4717 nbytes
+= carryover
;
4719 /* Read and dispose of the process output. */
4720 outstream
= p
->filter
;
4721 if (!NILP (outstream
))
4723 /* We inhibit quit here instead of just catching it so that
4724 hitting ^G when a filter happens to be running won't screw
4726 int count
= SPECPDL_INDEX ();
4727 Lisp_Object odeactivate
;
4728 Lisp_Object obuffer
, okeymap
;
4730 int outer_running_asynch_code
= running_asynch_code
;
4731 int waiting
= waiting_for_user_input_p
;
4733 /* No need to gcpro these, because all we do with them later
4734 is test them for EQness, and none of them should be a string. */
4735 odeactivate
= Vdeactivate_mark
;
4736 XSETBUFFER (obuffer
, current_buffer
);
4737 okeymap
= current_buffer
->keymap
;
4739 specbind (Qinhibit_quit
, Qt
);
4740 specbind (Qlast_nonmenu_event
, Qt
);
4742 /* In case we get recursively called,
4743 and we already saved the match data nonrecursively,
4744 save the same match data in safely recursive fashion. */
4745 if (outer_running_asynch_code
)
4748 /* Don't clobber the CURRENT match data, either! */
4749 tem
= Fmatch_data (Qnil
, Qnil
);
4750 restore_match_data ();
4751 record_unwind_protect (Fset_match_data
, Fmatch_data (Qnil
, Qnil
));
4752 Fset_match_data (tem
);
4755 /* For speed, if a search happens within this code,
4756 save the match data in a special nonrecursive fashion. */
4757 running_asynch_code
= 1;
4759 text
= decode_coding_string (make_unibyte_string (chars
, nbytes
),
4761 Vlast_coding_system_used
= coding
->symbol
;
4762 /* A new coding system might be found. */
4763 if (!EQ (p
->decode_coding_system
, coding
->symbol
))
4765 p
->decode_coding_system
= coding
->symbol
;
4767 /* Don't call setup_coding_system for
4768 proc_decode_coding_system[channel] here. It is done in
4769 detect_coding called via decode_coding above. */
4771 /* If a coding system for encoding is not yet decided, we set
4772 it as the same as coding-system for decoding.
4774 But, before doing that we must check if
4775 proc_encode_coding_system[p->outfd] surely points to a
4776 valid memory because p->outfd will be changed once EOF is
4777 sent to the process. */
4778 if (NILP (p
->encode_coding_system
)
4779 && proc_encode_coding_system
[XINT (p
->outfd
)])
4781 p
->encode_coding_system
= coding
->symbol
;
4782 setup_coding_system (coding
->symbol
,
4783 proc_encode_coding_system
[XINT (p
->outfd
)]);
4787 carryover
= nbytes
- coding
->consumed
;
4788 bcopy (chars
+ coding
->consumed
, SDATA (p
->decoding_buf
),
4790 XSETINT (p
->decoding_carryover
, carryover
);
4791 /* Adjust the multibyteness of TEXT to that of the filter. */
4792 if (NILP (p
->filter_multibyte
) != ! STRING_MULTIBYTE (text
))
4793 text
= (STRING_MULTIBYTE (text
)
4794 ? Fstring_as_unibyte (text
)
4795 : Fstring_to_multibyte (text
));
4796 if (SBYTES (text
) > 0)
4797 internal_condition_case_1 (read_process_output_call
,
4799 Fcons (proc
, Fcons (text
, Qnil
))),
4800 !NILP (Vdebug_on_error
) ? Qnil
: Qerror
,
4801 read_process_output_error_handler
);
4803 /* If we saved the match data nonrecursively, restore it now. */
4804 restore_match_data ();
4805 running_asynch_code
= outer_running_asynch_code
;
4807 /* Handling the process output should not deactivate the mark. */
4808 Vdeactivate_mark
= odeactivate
;
4810 /* Restore waiting_for_user_input_p as it was
4811 when we were called, in case the filter clobbered it. */
4812 waiting_for_user_input_p
= waiting
;
4814 #if 0 /* Call record_asynch_buffer_change unconditionally,
4815 because we might have changed minor modes or other things
4816 that affect key bindings. */
4817 if (! EQ (Fcurrent_buffer (), obuffer
)
4818 || ! EQ (current_buffer
->keymap
, okeymap
))
4820 /* But do it only if the caller is actually going to read events.
4821 Otherwise there's no need to make him wake up, and it could
4822 cause trouble (for example it would make Fsit_for return). */
4823 if (waiting_for_user_input_p
== -1)
4824 record_asynch_buffer_change ();
4827 start_vms_process_read (vs
);
4829 unbind_to (count
, Qnil
);
4833 /* If no filter, write into buffer if it isn't dead. */
4834 if (!NILP (p
->buffer
) && !NILP (XBUFFER (p
->buffer
)->name
))
4836 Lisp_Object old_read_only
;
4837 int old_begv
, old_zv
;
4838 int old_begv_byte
, old_zv_byte
;
4839 Lisp_Object odeactivate
;
4840 int before
, before_byte
;
4845 odeactivate
= Vdeactivate_mark
;
4847 Fset_buffer (p
->buffer
);
4849 opoint_byte
= PT_BYTE
;
4850 old_read_only
= current_buffer
->read_only
;
4853 old_begv_byte
= BEGV_BYTE
;
4854 old_zv_byte
= ZV_BYTE
;
4856 current_buffer
->read_only
= Qnil
;
4858 /* Insert new output into buffer
4859 at the current end-of-output marker,
4860 thus preserving logical ordering of input and output. */
4861 if (XMARKER (p
->mark
)->buffer
)
4862 SET_PT_BOTH (clip_to_bounds (BEGV
, marker_position (p
->mark
), ZV
),
4863 clip_to_bounds (BEGV_BYTE
, marker_byte_position (p
->mark
),
4866 SET_PT_BOTH (ZV
, ZV_BYTE
);
4868 before_byte
= PT_BYTE
;
4870 /* If the output marker is outside of the visible region, save
4871 the restriction and widen. */
4872 if (! (BEGV
<= PT
&& PT
<= ZV
))
4875 text
= decode_coding_string (make_unibyte_string (chars
, nbytes
),
4877 Vlast_coding_system_used
= coding
->symbol
;
4878 /* A new coding system might be found. See the comment in the
4879 similar code in the previous `if' block. */
4880 if (!EQ (p
->decode_coding_system
, coding
->symbol
))
4882 p
->decode_coding_system
= coding
->symbol
;
4883 if (NILP (p
->encode_coding_system
)
4884 && proc_encode_coding_system
[XINT (p
->outfd
)])
4886 p
->encode_coding_system
= coding
->symbol
;
4887 setup_coding_system (coding
->symbol
,
4888 proc_encode_coding_system
[XINT (p
->outfd
)]);
4891 carryover
= nbytes
- coding
->consumed
;
4892 bcopy (chars
+ coding
->consumed
, SDATA (p
->decoding_buf
),
4894 XSETINT (p
->decoding_carryover
, carryover
);
4895 /* Adjust the multibyteness of TEXT to that of the buffer. */
4896 if (NILP (current_buffer
->enable_multibyte_characters
)
4897 != ! STRING_MULTIBYTE (text
))
4898 text
= (STRING_MULTIBYTE (text
)
4899 ? Fstring_as_unibyte (text
)
4900 : Fstring_to_multibyte (text
));
4901 /* Insert before markers in case we are inserting where
4902 the buffer's mark is, and the user's next command is Meta-y. */
4903 insert_from_string_before_markers (text
, 0, 0,
4904 SCHARS (text
), SBYTES (text
), 0);
4906 /* Make sure the process marker's position is valid when the
4907 process buffer is changed in the signal_after_change above.
4908 W3 is known to do that. */
4909 if (BUFFERP (p
->buffer
)
4910 && (b
= XBUFFER (p
->buffer
), b
!= current_buffer
))
4911 set_marker_both (p
->mark
, p
->buffer
, BUF_PT (b
), BUF_PT_BYTE (b
));
4913 set_marker_both (p
->mark
, p
->buffer
, PT
, PT_BYTE
);
4915 update_mode_lines
++;
4917 /* Make sure opoint and the old restrictions
4918 float ahead of any new text just as point would. */
4919 if (opoint
>= before
)
4921 opoint
+= PT
- before
;
4922 opoint_byte
+= PT_BYTE
- before_byte
;
4924 if (old_begv
> before
)
4926 old_begv
+= PT
- before
;
4927 old_begv_byte
+= PT_BYTE
- before_byte
;
4929 if (old_zv
>= before
)
4931 old_zv
+= PT
- before
;
4932 old_zv_byte
+= PT_BYTE
- before_byte
;
4935 /* If the restriction isn't what it should be, set it. */
4936 if (old_begv
!= BEGV
|| old_zv
!= ZV
)
4937 Fnarrow_to_region (make_number (old_begv
), make_number (old_zv
));
4939 /* Handling the process output should not deactivate the mark. */
4940 Vdeactivate_mark
= odeactivate
;
4942 current_buffer
->read_only
= old_read_only
;
4943 SET_PT_BOTH (opoint
, opoint_byte
);
4944 set_buffer_internal (old
);
4947 start_vms_process_read (vs
);
4952 DEFUN ("waiting-for-user-input-p", Fwaiting_for_user_input_p
, Swaiting_for_user_input_p
,
4954 doc
: /* Returns non-nil if emacs is waiting for input from the user.
4955 This is intended for use by asynchronous process output filters and sentinels. */)
4958 return (waiting_for_user_input_p
? Qt
: Qnil
);
4961 /* Sending data to subprocess */
4963 jmp_buf send_process_frame
;
4964 Lisp_Object process_sent_to
;
4967 send_process_trap ()
4973 longjmp (send_process_frame
, 1);
4976 /* Send some data to process PROC.
4977 BUF is the beginning of the data; LEN is the number of characters.
4978 OBJECT is the Lisp object that the data comes from. If OBJECT is
4979 nil or t, it means that the data comes from C string.
4981 If OBJECT is not nil, the data is encoded by PROC's coding-system
4982 for encoding before it is sent.
4984 This function can evaluate Lisp code and can garbage collect. */
4987 send_process (proc
, buf
, len
, object
)
4988 volatile Lisp_Object proc
;
4989 unsigned char *volatile buf
;
4991 volatile Lisp_Object object
;
4993 /* Use volatile to protect variables from being clobbered by longjmp. */
4995 struct coding_system
*coding
;
4996 struct gcpro gcpro1
;
5001 struct Lisp_Process
*p
= XPROCESS (proc
);
5002 VMS_PROC_STUFF
*vs
, *get_vms_process_pointer();
5005 if (! NILP (XPROCESS (proc
)->raw_status_low
))
5006 update_status (XPROCESS (proc
));
5007 if (! EQ (XPROCESS (proc
)->status
, Qrun
))
5008 error ("Process %s not running",
5009 SDATA (XPROCESS (proc
)->name
));
5010 if (XINT (XPROCESS (proc
)->outfd
) < 0)
5011 error ("Output file descriptor of %s is closed",
5012 SDATA (XPROCESS (proc
)->name
));
5014 coding
= proc_encode_coding_system
[XINT (XPROCESS (proc
)->outfd
)];
5015 Vlast_coding_system_used
= coding
->symbol
;
5017 if ((STRINGP (object
) && STRING_MULTIBYTE (object
))
5018 || (BUFFERP (object
)
5019 && !NILP (XBUFFER (object
)->enable_multibyte_characters
))
5022 if (!EQ (coding
->symbol
, XPROCESS (proc
)->encode_coding_system
))
5023 /* The coding system for encoding was changed to raw-text
5024 because we sent a unibyte text previously. Now we are
5025 sending a multibyte text, thus we must encode it by the
5026 original coding system specified for the current
5028 setup_coding_system (XPROCESS (proc
)->encode_coding_system
, coding
);
5029 /* src_multibyte should be set to 1 _after_ a call to
5030 setup_coding_system, since it resets src_multibyte to
5032 coding
->src_multibyte
= 1;
5036 /* For sending a unibyte text, character code conversion should
5037 not take place but EOL conversion should. So, setup raw-text
5038 or one of the subsidiary if we have not yet done it. */
5039 if (coding
->type
!= coding_type_raw_text
)
5041 if (CODING_REQUIRE_FLUSHING (coding
))
5043 /* But, before changing the coding, we must flush out data. */
5044 coding
->mode
|= CODING_MODE_LAST_BLOCK
;
5045 send_process (proc
, "", 0, Qt
);
5047 coding
->src_multibyte
= 0;
5048 setup_raw_text_coding_system (coding
);
5051 coding
->dst_multibyte
= 0;
5053 if (CODING_REQUIRE_ENCODING (coding
))
5055 int require
= encoding_buffer_size (coding
, len
);
5056 int from_byte
= -1, from
= -1, to
= -1;
5058 if (BUFFERP (object
))
5060 from_byte
= BUF_PTR_BYTE_POS (XBUFFER (object
), buf
);
5061 from
= buf_bytepos_to_charpos (XBUFFER (object
), from_byte
);
5062 to
= buf_bytepos_to_charpos (XBUFFER (object
), from_byte
+ len
);
5064 else if (STRINGP (object
))
5066 from_byte
= buf
- SDATA (object
);
5067 from
= string_byte_to_char (object
, from_byte
);
5068 to
= string_byte_to_char (object
, from_byte
+ len
);
5071 if (coding
->composing
!= COMPOSITION_DISABLED
)
5074 coding_save_composition (coding
, from
, to
, object
);
5076 coding
->composing
= COMPOSITION_DISABLED
;
5079 if (SBYTES (XPROCESS (proc
)->encoding_buf
) < require
)
5080 XPROCESS (proc
)->encoding_buf
= make_uninit_string (require
);
5083 buf
= (BUFFERP (object
)
5084 ? BUF_BYTE_ADDRESS (XBUFFER (object
), from_byte
)
5085 : SDATA (object
) + from_byte
);
5087 object
= XPROCESS (proc
)->encoding_buf
;
5088 encode_coding (coding
, (char *) buf
, SDATA (object
),
5089 len
, SBYTES (object
));
5090 len
= coding
->produced
;
5091 buf
= SDATA (object
);
5095 vs
= get_vms_process_pointer (p
->pid
);
5097 error ("Could not find this process: %x", p
->pid
);
5098 else if (write_to_vms_process (vs
, buf
, len
))
5102 if (pty_max_bytes
== 0)
5104 #if defined (HAVE_FPATHCONF) && defined (_PC_MAX_CANON)
5105 pty_max_bytes
= fpathconf (XFASTINT (XPROCESS (proc
)->outfd
),
5107 if (pty_max_bytes
< 0)
5108 pty_max_bytes
= 250;
5110 pty_max_bytes
= 250;
5112 /* Deduct one, to leave space for the eof. */
5116 /* 2000-09-21: Emacs 20.7, sparc-sun-solaris-2.6, GCC 2.95.2,
5117 CFLAGS="-g -O": The value of the parameter `proc' is clobbered
5118 when returning with longjmp despite being declared volatile. */
5119 if (!setjmp (send_process_frame
))
5121 process_sent_to
= proc
;
5125 SIGTYPE (*old_sigpipe
)();
5127 /* Decide how much data we can send in one batch.
5128 Long lines need to be split into multiple batches. */
5129 if (!NILP (XPROCESS (proc
)->pty_flag
))
5131 /* Starting this at zero is always correct when not the first
5132 iteration because the previous iteration ended by sending C-d.
5133 It may not be correct for the first iteration
5134 if a partial line was sent in a separate send_process call.
5135 If that proves worth handling, we need to save linepos
5136 in the process object. */
5138 unsigned char *ptr
= (unsigned char *) buf
;
5139 unsigned char *end
= (unsigned char *) buf
+ len
;
5141 /* Scan through this text for a line that is too long. */
5142 while (ptr
!= end
&& linepos
< pty_max_bytes
)
5150 /* If we found one, break the line there
5151 and put in a C-d to force the buffer through. */
5155 /* Send this batch, using one or more write calls. */
5158 int outfd
= XINT (XPROCESS (proc
)->outfd
);
5159 old_sigpipe
= (SIGTYPE (*) ()) signal (SIGPIPE
, send_process_trap
);
5160 #ifdef DATAGRAM_SOCKETS
5161 if (DATAGRAM_CHAN_P (outfd
))
5163 rv
= sendto (outfd
, (char *) buf
, this,
5164 0, datagram_address
[outfd
].sa
,
5165 datagram_address
[outfd
].len
);
5166 if (rv
< 0 && errno
== EMSGSIZE
)
5167 report_file_error ("sending datagram", Fcons (proc
, Qnil
));
5171 rv
= emacs_write (outfd
, (char *) buf
, this);
5172 signal (SIGPIPE
, old_sigpipe
);
5178 || errno
== EWOULDBLOCK
5184 /* Buffer is full. Wait, accepting input;
5185 that may allow the program
5186 to finish doing output and read more. */
5191 #ifdef BROKEN_PTY_READ_AFTER_EAGAIN
5192 /* A gross hack to work around a bug in FreeBSD.
5193 In the following sequence, read(2) returns
5197 write(2) 954 bytes, get EAGAIN
5198 read(2) 1024 bytes in process_read_output
5199 read(2) 11 bytes in process_read_output
5201 That is, read(2) returns more bytes than have
5202 ever been written successfully. The 1033 bytes
5203 read are the 1022 bytes written successfully
5204 after processing (for example with CRs added if
5205 the terminal is set up that way which it is
5206 here). The same bytes will be seen again in a
5207 later read(2), without the CRs. */
5209 if (errno
== EAGAIN
)
5212 ioctl (XINT (XPROCESS (proc
)->outfd
), TIOCFLUSH
,
5215 #endif /* BROKEN_PTY_READ_AFTER_EAGAIN */
5217 /* Running filters might relocate buffers or strings.
5218 Arrange to relocate BUF. */
5219 if (BUFFERP (object
))
5220 offset
= BUF_PTR_BYTE_POS (XBUFFER (object
), buf
);
5221 else if (STRINGP (object
))
5222 offset
= buf
- SDATA (object
);
5224 XSETFASTINT (zero
, 0);
5225 #ifdef EMACS_HAS_USECS
5226 wait_reading_process_input (0, 20000, zero
, 0);
5228 wait_reading_process_input (1, 0, zero
, 0);
5231 if (BUFFERP (object
))
5232 buf
= BUF_BYTE_ADDRESS (XBUFFER (object
), offset
);
5233 else if (STRINGP (object
))
5234 buf
= offset
+ SDATA (object
);
5239 /* This is a real error. */
5240 report_file_error ("writing to process", Fcons (proc
, Qnil
));
5247 /* If we sent just part of the string, put in an EOF
5248 to force it through, before we send the rest. */
5250 Fprocess_send_eof (proc
);
5253 #endif /* not VMS */
5257 proc
= process_sent_to
;
5259 XPROCESS (proc
)->raw_status_low
= Qnil
;
5260 XPROCESS (proc
)->raw_status_high
= Qnil
;
5261 XPROCESS (proc
)->status
= Fcons (Qexit
, Fcons (make_number (256), Qnil
));
5262 XSETINT (XPROCESS (proc
)->tick
, ++process_tick
);
5263 deactivate_process (proc
);
5265 error ("Error writing to process %s; closed it",
5266 SDATA (XPROCESS (proc
)->name
));
5268 error ("SIGPIPE raised on process %s; closed it",
5269 SDATA (XPROCESS (proc
)->name
));
5276 DEFUN ("process-send-region", Fprocess_send_region
, Sprocess_send_region
,
5278 doc
: /* Send current contents of region as input to PROCESS.
5279 PROCESS may be a process, a buffer, the name of a process or buffer, or
5280 nil, indicating the current buffer's process.
5281 Called from program, takes three arguments, PROCESS, START and END.
5282 If the region is more than 500 characters long,
5283 it is sent in several bunches. This may happen even for shorter regions.
5284 Output from processes can arrive in between bunches. */)
5285 (process
, start
, end
)
5286 Lisp_Object process
, start
, end
;
5291 proc
= get_process (process
);
5292 validate_region (&start
, &end
);
5294 if (XINT (start
) < GPT
&& XINT (end
) > GPT
)
5295 move_gap (XINT (start
));
5297 start1
= CHAR_TO_BYTE (XINT (start
));
5298 end1
= CHAR_TO_BYTE (XINT (end
));
5299 send_process (proc
, BYTE_POS_ADDR (start1
), end1
- start1
,
5300 Fcurrent_buffer ());
5305 DEFUN ("process-send-string", Fprocess_send_string
, Sprocess_send_string
,
5307 doc
: /* Send PROCESS the contents of STRING as input.
5308 PROCESS may be a process, a buffer, the name of a process or buffer, or
5309 nil, indicating the current buffer's process.
5310 If STRING is more than 500 characters long,
5311 it is sent in several bunches. This may happen even for shorter strings.
5312 Output from processes can arrive in between bunches. */)
5314 Lisp_Object process
, string
;
5317 CHECK_STRING (string
);
5318 proc
= get_process (process
);
5319 send_process (proc
, SDATA (string
),
5320 SBYTES (string
), string
);
5324 /* Return the foreground process group for the tty/pty that
5325 the process P uses. */
5327 emacs_get_tty_pgrp (p
)
5328 struct Lisp_Process
*p
;
5333 if (ioctl (XINT (p
->infd
), TIOCGPGRP
, &gid
) == -1 && ! NILP (p
->tty_name
))
5336 /* Some OS:es (Solaris 8/9) does not allow TIOCGPGRP from the
5337 master side. Try the slave side. */
5338 fd
= emacs_open (XSTRING (p
->tty_name
)->data
, O_RDONLY
, 0);
5342 ioctl (fd
, TIOCGPGRP
, &gid
);
5346 #endif /* defined (TIOCGPGRP ) */
5351 DEFUN ("process-running-child-p", Fprocess_running_child_p
,
5352 Sprocess_running_child_p
, 0, 1, 0,
5353 doc
: /* Return t if PROCESS has given the terminal to a child.
5354 If the operating system does not make it possible to find out,
5355 return t unconditionally. */)
5357 Lisp_Object process
;
5359 /* Initialize in case ioctl doesn't exist or gives an error,
5360 in a way that will cause returning t. */
5363 struct Lisp_Process
*p
;
5365 proc
= get_process (process
);
5366 p
= XPROCESS (proc
);
5368 if (!EQ (p
->childp
, Qt
))
5369 error ("Process %s is not a subprocess",
5371 if (XINT (p
->infd
) < 0)
5372 error ("Process %s is not active",
5375 gid
= emacs_get_tty_pgrp (p
);
5377 if (gid
== XFASTINT (p
->pid
))
5382 /* send a signal number SIGNO to PROCESS.
5383 If CURRENT_GROUP is t, that means send to the process group
5384 that currently owns the terminal being used to communicate with PROCESS.
5385 This is used for various commands in shell mode.
5386 If CURRENT_GROUP is lambda, that means send to the process group
5387 that currently owns the terminal, but only if it is NOT the shell itself.
5389 If NOMSG is zero, insert signal-announcements into process's buffers
5392 If we can, we try to signal PROCESS by sending control characters
5393 down the pty. This allows us to signal inferiors who have changed
5394 their uid, for which killpg would return an EPERM error. */
5397 process_send_signal (process
, signo
, current_group
, nomsg
)
5398 Lisp_Object process
;
5400 Lisp_Object current_group
;
5404 register struct Lisp_Process
*p
;
5408 proc
= get_process (process
);
5409 p
= XPROCESS (proc
);
5411 if (!EQ (p
->childp
, Qt
))
5412 error ("Process %s is not a subprocess",
5414 if (XINT (p
->infd
) < 0)
5415 error ("Process %s is not active",
5418 if (NILP (p
->pty_flag
))
5419 current_group
= Qnil
;
5421 /* If we are using pgrps, get a pgrp number and make it negative. */
5422 if (NILP (current_group
))
5423 /* Send the signal to the shell's process group. */
5424 gid
= XFASTINT (p
->pid
);
5427 #ifdef SIGNALS_VIA_CHARACTERS
5428 /* If possible, send signals to the entire pgrp
5429 by sending an input character to it. */
5431 /* TERMIOS is the latest and bestest, and seems most likely to
5432 work. If the system has it, use it. */
5439 tcgetattr (XINT (p
->infd
), &t
);
5440 send_process (proc
, &t
.c_cc
[VINTR
], 1, Qnil
);
5444 tcgetattr (XINT (p
->infd
), &t
);
5445 send_process (proc
, &t
.c_cc
[VQUIT
], 1, Qnil
);
5449 tcgetattr (XINT (p
->infd
), &t
);
5450 #if defined (VSWTCH) && !defined (PREFER_VSUSP)
5451 send_process (proc
, &t
.c_cc
[VSWTCH
], 1, Qnil
);
5453 send_process (proc
, &t
.c_cc
[VSUSP
], 1, Qnil
);
5458 #else /* ! HAVE_TERMIOS */
5460 /* On Berkeley descendants, the following IOCTL's retrieve the
5461 current control characters. */
5462 #if defined (TIOCGLTC) && defined (TIOCGETC)
5470 ioctl (XINT (p
->infd
), TIOCGETC
, &c
);
5471 send_process (proc
, &c
.t_intrc
, 1, Qnil
);
5474 ioctl (XINT (p
->infd
), TIOCGETC
, &c
);
5475 send_process (proc
, &c
.t_quitc
, 1, Qnil
);
5479 ioctl (XINT (p
->infd
), TIOCGLTC
, &lc
);
5480 send_process (proc
, &lc
.t_suspc
, 1, Qnil
);
5482 #endif /* ! defined (SIGTSTP) */
5485 #else /* ! defined (TIOCGLTC) && defined (TIOCGETC) */
5487 /* On SYSV descendants, the TCGETA ioctl retrieves the current control
5494 ioctl (XINT (p
->infd
), TCGETA
, &t
);
5495 send_process (proc
, &t
.c_cc
[VINTR
], 1, Qnil
);
5498 ioctl (XINT (p
->infd
), TCGETA
, &t
);
5499 send_process (proc
, &t
.c_cc
[VQUIT
], 1, Qnil
);
5503 ioctl (XINT (p
->infd
), TCGETA
, &t
);
5504 send_process (proc
, &t
.c_cc
[VSWTCH
], 1, Qnil
);
5506 #endif /* ! defined (SIGTSTP) */
5508 #else /* ! defined (TCGETA) */
5509 Your configuration files are messed up
.
5510 /* If your system configuration files define SIGNALS_VIA_CHARACTERS,
5511 you'd better be using one of the alternatives above! */
5512 #endif /* ! defined (TCGETA) */
5513 #endif /* ! defined (TIOCGLTC) && defined (TIOCGETC) */
5514 #endif /* ! defined HAVE_TERMIOS */
5516 /* The code above always returns from the function. */
5517 #endif /* defined (SIGNALS_VIA_CHARACTERS) */
5520 /* Get the current pgrp using the tty itself, if we have that.
5521 Otherwise, use the pty to get the pgrp.
5522 On pfa systems, saka@pfu.fujitsu.co.JP writes:
5523 "TIOCGPGRP symbol defined in sys/ioctl.h at E50.
5524 But, TIOCGPGRP does not work on E50 ;-P works fine on E60"
5525 His patch indicates that if TIOCGPGRP returns an error, then
5526 we should just assume that p->pid is also the process group id. */
5528 gid
= emacs_get_tty_pgrp (p
);
5531 /* If we can't get the information, assume
5532 the shell owns the tty. */
5533 gid
= XFASTINT (p
->pid
);
5535 /* It is not clear whether anything really can set GID to -1.
5536 Perhaps on some system one of those ioctls can or could do so.
5537 Or perhaps this is vestigial. */
5540 #else /* ! defined (TIOCGPGRP ) */
5541 /* Can't select pgrps on this system, so we know that
5542 the child itself heads the pgrp. */
5543 gid
= XFASTINT (p
->pid
);
5544 #endif /* ! defined (TIOCGPGRP ) */
5546 /* If current_group is lambda, and the shell owns the terminal,
5547 don't send any signal. */
5548 if (EQ (current_group
, Qlambda
) && gid
== XFASTINT (p
->pid
))
5556 p
->raw_status_low
= Qnil
;
5557 p
->raw_status_high
= Qnil
;
5559 XSETINT (p
->tick
, ++process_tick
);
5563 #endif /* ! defined (SIGCONT) */
5566 send_process (proc
, "\003", 1, Qnil
); /* ^C */
5571 send_process (proc
, "\031", 1, Qnil
); /* ^Y */
5576 sys$
forcex (&(XFASTINT (p
->pid
)), 0, 1);
5579 flush_pending_output (XINT (p
->infd
));
5583 /* If we don't have process groups, send the signal to the immediate
5584 subprocess. That isn't really right, but it's better than any
5585 obvious alternative. */
5588 kill (XFASTINT (p
->pid
), signo
);
5592 /* gid may be a pid, or minus a pgrp's number */
5594 if (!NILP (current_group
))
5596 if (ioctl (XINT (p
->infd
), TIOCSIGSEND
, signo
) == -1)
5597 EMACS_KILLPG (gid
, signo
);
5601 gid
= - XFASTINT (p
->pid
);
5604 #else /* ! defined (TIOCSIGSEND) */
5605 EMACS_KILLPG (gid
, signo
);
5606 #endif /* ! defined (TIOCSIGSEND) */
5609 DEFUN ("interrupt-process", Finterrupt_process
, Sinterrupt_process
, 0, 2, 0,
5610 doc
: /* Interrupt process PROCESS.
5611 PROCESS may be a process, a buffer, or the name of a process or buffer.
5612 nil or no arg means current buffer's process.
5613 Second arg CURRENT-GROUP non-nil means send signal to
5614 the current process-group of the process's controlling terminal
5615 rather than to the process's own process group.
5616 If the process is a shell, this means interrupt current subjob
5617 rather than the shell.
5619 If CURRENT-GROUP is `lambda', and if the shell owns the terminal,
5620 don't send the signal. */)
5621 (process
, current_group
)
5622 Lisp_Object process
, current_group
;
5624 process_send_signal (process
, SIGINT
, current_group
, 0);
5628 DEFUN ("kill-process", Fkill_process
, Skill_process
, 0, 2, 0,
5629 doc
: /* Kill process PROCESS. May be process or name of one.
5630 See function `interrupt-process' for more details on usage. */)
5631 (process
, current_group
)
5632 Lisp_Object process
, current_group
;
5634 process_send_signal (process
, SIGKILL
, current_group
, 0);
5638 DEFUN ("quit-process", Fquit_process
, Squit_process
, 0, 2, 0,
5639 doc
: /* Send QUIT signal to process PROCESS. May be process or name of one.
5640 See function `interrupt-process' for more details on usage. */)
5641 (process
, current_group
)
5642 Lisp_Object process
, current_group
;
5644 process_send_signal (process
, SIGQUIT
, current_group
, 0);
5648 DEFUN ("stop-process", Fstop_process
, Sstop_process
, 0, 2, 0,
5649 doc
: /* Stop process PROCESS. May be process or name of one.
5650 See function `interrupt-process' for more details on usage.
5651 If PROCESS is a network process, inhibit handling of incoming traffic. */)
5652 (process
, current_group
)
5653 Lisp_Object process
, current_group
;
5656 if (PROCESSP (process
) && NETCONN_P (process
))
5658 struct Lisp_Process
*p
;
5660 p
= XPROCESS (process
);
5661 if (NILP (p
->command
)
5662 && XINT (p
->infd
) >= 0)
5664 FD_CLR (XINT (p
->infd
), &input_wait_mask
);
5665 FD_CLR (XINT (p
->infd
), &non_keyboard_wait_mask
);
5672 error ("no SIGTSTP support");
5674 process_send_signal (process
, SIGTSTP
, current_group
, 0);
5679 DEFUN ("continue-process", Fcontinue_process
, Scontinue_process
, 0, 2, 0,
5680 doc
: /* Continue process PROCESS. May be process or name of one.
5681 See function `interrupt-process' for more details on usage.
5682 If PROCESS is a network process, resume handling of incoming traffic. */)
5683 (process
, current_group
)
5684 Lisp_Object process
, current_group
;
5687 if (PROCESSP (process
) && NETCONN_P (process
))
5689 struct Lisp_Process
*p
;
5691 p
= XPROCESS (process
);
5692 if (EQ (p
->command
, Qt
)
5693 && XINT (p
->infd
) >= 0
5694 && (!EQ (p
->filter
, Qt
) || EQ (p
->status
, Qlisten
)))
5696 FD_SET (XINT (p
->infd
), &input_wait_mask
);
5697 FD_SET (XINT (p
->infd
), &non_keyboard_wait_mask
);
5704 process_send_signal (process
, SIGCONT
, current_group
, 0);
5706 error ("no SIGCONT support");
5711 DEFUN ("signal-process", Fsignal_process
, Ssignal_process
,
5712 2, 2, "sProcess (name or number): \nnSignal code: ",
5713 doc
: /* Send PROCESS the signal with code SIGCODE.
5714 PROCESS may also be an integer specifying the process id of the
5715 process to signal; in this case, the process need not be a child of
5717 SIGCODE may be an integer, or a symbol whose name is a signal name. */)
5719 Lisp_Object process
, sigcode
;
5723 if (INTEGERP (process
))
5729 if (STRINGP (process
))
5732 if (tem
= Fget_process (process
), NILP (tem
))
5734 pid
= Fstring_to_number (process
, make_number (10));
5735 if (XINT (pid
) != 0)
5741 process
= get_process (process
);
5746 CHECK_PROCESS (process
);
5747 pid
= XPROCESS (process
)->pid
;
5748 if (!INTEGERP (pid
) || XINT (pid
) <= 0)
5749 error ("Cannot signal process %s", SDATA (XPROCESS (process
)->name
));
5753 #define handle_signal(NAME, VALUE) \
5754 else if (!strcmp (name, NAME)) \
5755 XSETINT (sigcode, VALUE)
5757 if (INTEGERP (sigcode
))
5761 unsigned char *name
;
5763 CHECK_SYMBOL (sigcode
);
5764 name
= SDATA (SYMBOL_NAME (sigcode
));
5769 handle_signal ("SIGHUP", SIGHUP
);
5772 handle_signal ("SIGINT", SIGINT
);
5775 handle_signal ("SIGQUIT", SIGQUIT
);
5778 handle_signal ("SIGILL", SIGILL
);
5781 handle_signal ("SIGABRT", SIGABRT
);
5784 handle_signal ("SIGEMT", SIGEMT
);
5787 handle_signal ("SIGKILL", SIGKILL
);
5790 handle_signal ("SIGFPE", SIGFPE
);
5793 handle_signal ("SIGBUS", SIGBUS
);
5796 handle_signal ("SIGSEGV", SIGSEGV
);
5799 handle_signal ("SIGSYS", SIGSYS
);
5802 handle_signal ("SIGPIPE", SIGPIPE
);
5805 handle_signal ("SIGALRM", SIGALRM
);
5808 handle_signal ("SIGTERM", SIGTERM
);
5811 handle_signal ("SIGURG", SIGURG
);
5814 handle_signal ("SIGSTOP", SIGSTOP
);
5817 handle_signal ("SIGTSTP", SIGTSTP
);
5820 handle_signal ("SIGCONT", SIGCONT
);
5823 handle_signal ("SIGCHLD", SIGCHLD
);
5826 handle_signal ("SIGTTIN", SIGTTIN
);
5829 handle_signal ("SIGTTOU", SIGTTOU
);
5832 handle_signal ("SIGIO", SIGIO
);
5835 handle_signal ("SIGXCPU", SIGXCPU
);
5838 handle_signal ("SIGXFSZ", SIGXFSZ
);
5841 handle_signal ("SIGVTALRM", SIGVTALRM
);
5844 handle_signal ("SIGPROF", SIGPROF
);
5847 handle_signal ("SIGWINCH", SIGWINCH
);
5850 handle_signal ("SIGINFO", SIGINFO
);
5853 handle_signal ("SIGUSR1", SIGUSR1
);
5856 handle_signal ("SIGUSR2", SIGUSR2
);
5859 error ("Undefined signal name %s", name
);
5862 #undef handle_signal
5864 return make_number (kill (XINT (pid
), XINT (sigcode
)));
5867 DEFUN ("process-send-eof", Fprocess_send_eof
, Sprocess_send_eof
, 0, 1, 0,
5868 doc
: /* Make PROCESS see end-of-file in its input.
5869 EOF comes after any text already sent to it.
5870 PROCESS may be a process, a buffer, the name of a process or buffer, or
5871 nil, indicating the current buffer's process.
5872 If PROCESS is a network connection, or is a process communicating
5873 through a pipe (as opposed to a pty), then you cannot send any more
5874 text to PROCESS after you call this function. */)
5876 Lisp_Object process
;
5879 struct coding_system
*coding
;
5881 if (DATAGRAM_CONN_P (process
))
5884 proc
= get_process (process
);
5885 coding
= proc_encode_coding_system
[XINT (XPROCESS (proc
)->outfd
)];
5887 /* Make sure the process is really alive. */
5888 if (! NILP (XPROCESS (proc
)->raw_status_low
))
5889 update_status (XPROCESS (proc
));
5890 if (! EQ (XPROCESS (proc
)->status
, Qrun
))
5891 error ("Process %s not running", SDATA (XPROCESS (proc
)->name
));
5893 if (CODING_REQUIRE_FLUSHING (coding
))
5895 coding
->mode
|= CODING_MODE_LAST_BLOCK
;
5896 send_process (proc
, "", 0, Qnil
);
5900 send_process (proc
, "\032", 1, Qnil
); /* ^z */
5902 if (!NILP (XPROCESS (proc
)->pty_flag
))
5903 send_process (proc
, "\004", 1, Qnil
);
5906 int old_outfd
, new_outfd
;
5908 #ifdef HAVE_SHUTDOWN
5909 /* If this is a network connection, or socketpair is used
5910 for communication with the subprocess, call shutdown to cause EOF.
5911 (In some old system, shutdown to socketpair doesn't work.
5912 Then we just can't win.) */
5913 if (NILP (XPROCESS (proc
)->pid
)
5914 || XINT (XPROCESS (proc
)->outfd
) == XINT (XPROCESS (proc
)->infd
))
5915 shutdown (XINT (XPROCESS (proc
)->outfd
), 1);
5916 /* In case of socketpair, outfd == infd, so don't close it. */
5917 if (XINT (XPROCESS (proc
)->outfd
) != XINT (XPROCESS (proc
)->infd
))
5918 emacs_close (XINT (XPROCESS (proc
)->outfd
));
5919 #else /* not HAVE_SHUTDOWN */
5920 emacs_close (XINT (XPROCESS (proc
)->outfd
));
5921 #endif /* not HAVE_SHUTDOWN */
5922 new_outfd
= emacs_open (NULL_DEVICE
, O_WRONLY
, 0);
5923 old_outfd
= XINT (XPROCESS (proc
)->outfd
);
5925 if (!proc_encode_coding_system
[new_outfd
])
5926 proc_encode_coding_system
[new_outfd
]
5927 = (struct coding_system
*) xmalloc (sizeof (struct coding_system
));
5928 bcopy (proc_encode_coding_system
[old_outfd
],
5929 proc_encode_coding_system
[new_outfd
],
5930 sizeof (struct coding_system
));
5931 bzero (proc_encode_coding_system
[old_outfd
],
5932 sizeof (struct coding_system
));
5934 XSETINT (XPROCESS (proc
)->outfd
, new_outfd
);
5940 /* Kill all processes associated with `buffer'.
5941 If `buffer' is nil, kill all processes */
5944 kill_buffer_processes (buffer
)
5947 Lisp_Object tail
, proc
;
5949 for (tail
= Vprocess_alist
; GC_CONSP (tail
); tail
= XCDR (tail
))
5951 proc
= XCDR (XCAR (tail
));
5952 if (GC_PROCESSP (proc
)
5953 && (NILP (buffer
) || EQ (XPROCESS (proc
)->buffer
, buffer
)))
5955 if (NETCONN_P (proc
))
5956 Fdelete_process (proc
);
5957 else if (XINT (XPROCESS (proc
)->infd
) >= 0)
5958 process_send_signal (proc
, SIGHUP
, Qnil
, 1);
5963 /* On receipt of a signal that a child status has changed, loop asking
5964 about children with changed statuses until the system says there
5967 All we do is change the status; we do not run sentinels or print
5968 notifications. That is saved for the next time keyboard input is
5969 done, in order to avoid timing errors.
5971 ** WARNING: this can be called during garbage collection.
5972 Therefore, it must not be fooled by the presence of mark bits in
5975 ** USG WARNING: Although it is not obvious from the documentation
5976 in signal(2), on a USG system the SIGCLD handler MUST NOT call
5977 signal() before executing at least one wait(), otherwise the
5978 handler will be called again, resulting in an infinite loop. The
5979 relevant portion of the documentation reads "SIGCLD signals will be
5980 queued and the signal-catching function will be continually
5981 reentered until the queue is empty". Invoking signal() causes the
5982 kernel to reexamine the SIGCLD queue. Fred Fish, UniSoft Systems
5986 sigchld_handler (signo
)
5989 int old_errno
= errno
;
5991 register struct Lisp_Process
*p
;
5992 extern EMACS_TIME
*input_available_clear_time
;
5996 sigheld
|= sigbit (SIGCHLD
);
6008 #endif /* no WUNTRACED */
6009 /* Keep trying to get a status until we get a definitive result. */
6013 pid
= wait3 (&w
, WNOHANG
| WUNTRACED
, 0);
6015 while (pid
< 0 && errno
== EINTR
);
6019 /* PID == 0 means no processes found, PID == -1 means a real
6020 failure. We have done all our job, so return. */
6022 /* USG systems forget handlers when they are used;
6023 must reestablish each time */
6024 #if defined (USG) && !defined (POSIX_SIGNALS)
6025 signal (signo
, sigchld_handler
); /* WARNING - must come after wait3() */
6028 sigheld
&= ~sigbit (SIGCHLD
);
6036 #endif /* no WNOHANG */
6038 /* Find the process that signaled us, and record its status. */
6041 for (tail
= Vprocess_alist
; GC_CONSP (tail
); tail
= XCDR (tail
))
6043 proc
= XCDR (XCAR (tail
));
6044 p
= XPROCESS (proc
);
6045 if (GC_EQ (p
->childp
, Qt
) && XINT (p
->pid
) == pid
)
6050 /* Look for an asynchronous process whose pid hasn't been filled
6053 for (tail
= Vprocess_alist
; GC_CONSP (tail
); tail
= XCDR (tail
))
6055 proc
= XCDR (XCAR (tail
));
6056 p
= XPROCESS (proc
);
6057 if (GC_INTEGERP (p
->pid
) && XINT (p
->pid
) == -1)
6062 /* Change the status of the process that was found. */
6065 union { int i
; WAITTYPE wt
; } u
;
6066 int clear_desc_flag
= 0;
6068 XSETINT (p
->tick
, ++process_tick
);
6070 XSETINT (p
->raw_status_low
, u
.i
& 0xffff);
6071 XSETINT (p
->raw_status_high
, u
.i
>> 16);
6073 /* If process has terminated, stop waiting for its output. */
6074 if ((WIFSIGNALED (w
) || WIFEXITED (w
))
6075 && XINT (p
->infd
) >= 0)
6076 clear_desc_flag
= 1;
6078 /* We use clear_desc_flag to avoid a compiler bug in Microsoft C. */
6079 if (clear_desc_flag
)
6081 FD_CLR (XINT (p
->infd
), &input_wait_mask
);
6082 FD_CLR (XINT (p
->infd
), &non_keyboard_wait_mask
);
6085 /* Tell wait_reading_process_input that it needs to wake up and
6087 if (input_available_clear_time
)
6088 EMACS_SET_SECS_USECS (*input_available_clear_time
, 0, 0);
6091 /* There was no asynchronous process found for that id. Check
6092 if we have a synchronous process. */
6095 synch_process_alive
= 0;
6097 /* Report the status of the synchronous process. */
6099 synch_process_retcode
= WRETCODE (w
);
6100 else if (WIFSIGNALED (w
))
6102 int code
= WTERMSIG (w
);
6105 synchronize_system_messages_locale ();
6106 signame
= strsignal (code
);
6109 signame
= "unknown";
6111 synch_process_death
= signame
;
6114 /* Tell wait_reading_process_input that it needs to wake up and
6116 if (input_available_clear_time
)
6117 EMACS_SET_SECS_USECS (*input_available_clear_time
, 0, 0);
6120 /* On some systems, we must return right away.
6121 If any more processes want to signal us, we will
6123 Otherwise (on systems that have WNOHANG), loop around
6124 to use up all the processes that have something to tell us. */
6125 #if (defined WINDOWSNT \
6126 || (defined USG && !defined GNU_LINUX \
6127 && !(defined HPUX && defined WNOHANG)))
6128 #if defined (USG) && ! defined (POSIX_SIGNALS)
6129 signal (signo
, sigchld_handler
);
6133 #endif /* USG, but not HPUX with WNOHANG */
6139 exec_sentinel_unwind (data
)
6142 XPROCESS (XCAR (data
))->sentinel
= XCDR (data
);
6147 exec_sentinel_error_handler (error
)
6150 cmd_error_internal (error
, "error in process sentinel: ");
6152 update_echo_area ();
6153 Fsleep_for (make_number (2), Qnil
);
6158 exec_sentinel (proc
, reason
)
6159 Lisp_Object proc
, reason
;
6161 Lisp_Object sentinel
, obuffer
, odeactivate
, okeymap
;
6162 register struct Lisp_Process
*p
= XPROCESS (proc
);
6163 int count
= SPECPDL_INDEX ();
6164 int outer_running_asynch_code
= running_asynch_code
;
6165 int waiting
= waiting_for_user_input_p
;
6167 /* No need to gcpro these, because all we do with them later
6168 is test them for EQness, and none of them should be a string. */
6169 odeactivate
= Vdeactivate_mark
;
6170 XSETBUFFER (obuffer
, current_buffer
);
6171 okeymap
= current_buffer
->keymap
;
6173 sentinel
= p
->sentinel
;
6174 if (NILP (sentinel
))
6177 /* Zilch the sentinel while it's running, to avoid recursive invocations;
6178 assure that it gets restored no matter how the sentinel exits. */
6180 record_unwind_protect (exec_sentinel_unwind
, Fcons (proc
, sentinel
));
6181 /* Inhibit quit so that random quits don't screw up a running filter. */
6182 specbind (Qinhibit_quit
, Qt
);
6183 specbind (Qlast_nonmenu_event
, Qt
);
6185 /* In case we get recursively called,
6186 and we already saved the match data nonrecursively,
6187 save the same match data in safely recursive fashion. */
6188 if (outer_running_asynch_code
)
6191 tem
= Fmatch_data (Qnil
, Qnil
);
6192 restore_match_data ();
6193 record_unwind_protect (Fset_match_data
, Fmatch_data (Qnil
, Qnil
));
6194 Fset_match_data (tem
);
6197 /* For speed, if a search happens within this code,
6198 save the match data in a special nonrecursive fashion. */
6199 running_asynch_code
= 1;
6201 internal_condition_case_1 (read_process_output_call
,
6203 Fcons (proc
, Fcons (reason
, Qnil
))),
6204 !NILP (Vdebug_on_error
) ? Qnil
: Qerror
,
6205 exec_sentinel_error_handler
);
6207 /* If we saved the match data nonrecursively, restore it now. */
6208 restore_match_data ();
6209 running_asynch_code
= outer_running_asynch_code
;
6211 Vdeactivate_mark
= odeactivate
;
6213 /* Restore waiting_for_user_input_p as it was
6214 when we were called, in case the filter clobbered it. */
6215 waiting_for_user_input_p
= waiting
;
6218 if (! EQ (Fcurrent_buffer (), obuffer
)
6219 || ! EQ (current_buffer
->keymap
, okeymap
))
6221 /* But do it only if the caller is actually going to read events.
6222 Otherwise there's no need to make him wake up, and it could
6223 cause trouble (for example it would make Fsit_for return). */
6224 if (waiting_for_user_input_p
== -1)
6225 record_asynch_buffer_change ();
6227 unbind_to (count
, Qnil
);
6230 /* Report all recent events of a change in process status
6231 (either run the sentinel or output a message).
6232 This is usually done while Emacs is waiting for keyboard input
6233 but can be done at other times. */
6238 register Lisp_Object proc
, buffer
;
6239 Lisp_Object tail
, msg
;
6240 struct gcpro gcpro1
, gcpro2
;
6244 /* We need to gcpro tail; if read_process_output calls a filter
6245 which deletes a process and removes the cons to which tail points
6246 from Vprocess_alist, and then causes a GC, tail is an unprotected
6250 /* Set this now, so that if new processes are created by sentinels
6251 that we run, we get called again to handle their status changes. */
6252 update_tick
= process_tick
;
6254 for (tail
= Vprocess_alist
; !NILP (tail
); tail
= Fcdr (tail
))
6257 register struct Lisp_Process
*p
;
6259 proc
= Fcdr (Fcar (tail
));
6260 p
= XPROCESS (proc
);
6262 if (XINT (p
->tick
) != XINT (p
->update_tick
))
6264 XSETINT (p
->update_tick
, XINT (p
->tick
));
6266 /* If process is still active, read any output that remains. */
6267 while (! EQ (p
->filter
, Qt
)
6268 && ! EQ (p
->status
, Qconnect
)
6269 && ! EQ (p
->status
, Qlisten
)
6270 && ! EQ (p
->command
, Qt
) /* Network process not stopped. */
6271 && XINT (p
->infd
) >= 0
6272 && read_process_output (proc
, XINT (p
->infd
)) > 0);
6276 /* Get the text to use for the message. */
6277 if (!NILP (p
->raw_status_low
))
6279 msg
= status_message (p
->status
);
6281 /* If process is terminated, deactivate it or delete it. */
6283 if (CONSP (p
->status
))
6284 symbol
= XCAR (p
->status
);
6286 if (EQ (symbol
, Qsignal
) || EQ (symbol
, Qexit
)
6287 || EQ (symbol
, Qclosed
))
6289 if (delete_exited_processes
)
6290 remove_process (proc
);
6292 deactivate_process (proc
);
6295 /* The actions above may have further incremented p->tick.
6296 So set p->update_tick again
6297 so that an error in the sentinel will not cause
6298 this code to be run again. */
6299 XSETINT (p
->update_tick
, XINT (p
->tick
));
6300 /* Now output the message suitably. */
6301 if (!NILP (p
->sentinel
))
6302 exec_sentinel (proc
, msg
);
6303 /* Don't bother with a message in the buffer
6304 when a process becomes runnable. */
6305 else if (!EQ (symbol
, Qrun
) && !NILP (buffer
))
6307 Lisp_Object ro
, tem
;
6308 struct buffer
*old
= current_buffer
;
6309 int opoint
, opoint_byte
;
6310 int before
, before_byte
;
6312 ro
= XBUFFER (buffer
)->read_only
;
6314 /* Avoid error if buffer is deleted
6315 (probably that's why the process is dead, too) */
6316 if (NILP (XBUFFER (buffer
)->name
))
6318 Fset_buffer (buffer
);
6321 opoint_byte
= PT_BYTE
;
6322 /* Insert new output into buffer
6323 at the current end-of-output marker,
6324 thus preserving logical ordering of input and output. */
6325 if (XMARKER (p
->mark
)->buffer
)
6326 Fgoto_char (p
->mark
);
6328 SET_PT_BOTH (ZV
, ZV_BYTE
);
6331 before_byte
= PT_BYTE
;
6333 tem
= current_buffer
->read_only
;
6334 current_buffer
->read_only
= Qnil
;
6335 insert_string ("\nProcess ");
6336 Finsert (1, &p
->name
);
6337 insert_string (" ");
6339 current_buffer
->read_only
= tem
;
6340 set_marker_both (p
->mark
, p
->buffer
, PT
, PT_BYTE
);
6342 if (opoint
>= before
)
6343 SET_PT_BOTH (opoint
+ (PT
- before
),
6344 opoint_byte
+ (PT_BYTE
- before_byte
));
6346 SET_PT_BOTH (opoint
, opoint_byte
);
6348 set_buffer_internal (old
);
6353 update_mode_lines
++; /* in case buffers use %s in mode-line-format */
6354 redisplay_preserve_echo_area (13);
6360 DEFUN ("set-process-coding-system", Fset_process_coding_system
,
6361 Sset_process_coding_system
, 1, 3, 0,
6362 doc
: /* Set coding systems of PROCESS to DECODING and ENCODING.
6363 DECODING will be used to decode subprocess output and ENCODING to
6364 encode subprocess input. */)
6365 (proc
, decoding
, encoding
)
6366 register Lisp_Object proc
, decoding
, encoding
;
6368 register struct Lisp_Process
*p
;
6370 CHECK_PROCESS (proc
);
6371 p
= XPROCESS (proc
);
6372 if (XINT (p
->infd
) < 0)
6373 error ("Input file descriptor of %s closed", SDATA (p
->name
));
6374 if (XINT (p
->outfd
) < 0)
6375 error ("Output file descriptor of %s closed", SDATA (p
->name
));
6376 Fcheck_coding_system (decoding
);
6377 Fcheck_coding_system (encoding
);
6379 p
->decode_coding_system
= decoding
;
6380 p
->encode_coding_system
= encoding
;
6381 setup_process_coding_systems (proc
);
6386 DEFUN ("process-coding-system",
6387 Fprocess_coding_system
, Sprocess_coding_system
, 1, 1, 0,
6388 doc
: /* Return a cons of coding systems for decoding and encoding of PROCESS. */)
6390 register Lisp_Object proc
;
6392 CHECK_PROCESS (proc
);
6393 return Fcons (XPROCESS (proc
)->decode_coding_system
,
6394 XPROCESS (proc
)->encode_coding_system
);
6397 DEFUN ("set-process-filter-multibyte", Fset_process_filter_multibyte
,
6398 Sset_process_filter_multibyte
, 2, 2, 0,
6399 doc
: /* Set multibyteness of the strings given to PROCESS's filter.
6400 If FLAG is non-nil, the filter is given multibyte strings.
6401 If FLAG is nil, the filter is given unibyte strings. In this case,
6402 all character code conversion except for end-of-line conversion is
6405 Lisp_Object proc
, flag
;
6407 register struct Lisp_Process
*p
;
6409 CHECK_PROCESS (proc
);
6410 p
= XPROCESS (proc
);
6411 p
->filter_multibyte
= flag
;
6412 setup_process_coding_systems (proc
);
6417 DEFUN ("process-filter-multibyte-p", Fprocess_filter_multibyte_p
,
6418 Sprocess_filter_multibyte_p
, 1, 1, 0,
6419 doc
: /* Return t if a multibyte string is given to PROCESS's filter.*/)
6423 register struct Lisp_Process
*p
;
6425 CHECK_PROCESS (proc
);
6426 p
= XPROCESS (proc
);
6428 return (NILP (p
->filter_multibyte
) ? Qnil
: Qt
);
6433 /* The first time this is called, assume keyboard input comes from DESC
6434 instead of from where we used to expect it.
6435 Subsequent calls mean assume input keyboard can come from DESC
6436 in addition to other places. */
6438 static int add_keyboard_wait_descriptor_called_flag
;
6441 add_keyboard_wait_descriptor (desc
)
6444 if (! add_keyboard_wait_descriptor_called_flag
)
6445 FD_CLR (0, &input_wait_mask
);
6446 add_keyboard_wait_descriptor_called_flag
= 1;
6447 FD_SET (desc
, &input_wait_mask
);
6448 FD_SET (desc
, &non_process_wait_mask
);
6449 if (desc
> max_keyboard_desc
)
6450 max_keyboard_desc
= desc
;
6453 /* From now on, do not expect DESC to give keyboard input. */
6456 delete_keyboard_wait_descriptor (desc
)
6460 int lim
= max_keyboard_desc
;
6462 FD_CLR (desc
, &input_wait_mask
);
6463 FD_CLR (desc
, &non_process_wait_mask
);
6465 if (desc
== max_keyboard_desc
)
6466 for (fd
= 0; fd
< lim
; fd
++)
6467 if (FD_ISSET (fd
, &input_wait_mask
)
6468 && !FD_ISSET (fd
, &non_keyboard_wait_mask
))
6469 max_keyboard_desc
= fd
;
6472 /* Return nonzero if *MASK has a bit set
6473 that corresponds to one of the keyboard input descriptors. */
6476 keyboard_bit_set (mask
)
6481 for (fd
= 0; fd
<= max_keyboard_desc
; fd
++)
6482 if (FD_ISSET (fd
, mask
) && FD_ISSET (fd
, &input_wait_mask
)
6483 && !FD_ISSET (fd
, &non_keyboard_wait_mask
))
6496 if (! noninteractive
|| initialized
)
6498 signal (SIGCHLD
, sigchld_handler
);
6501 FD_ZERO (&input_wait_mask
);
6502 FD_ZERO (&non_keyboard_wait_mask
);
6503 FD_ZERO (&non_process_wait_mask
);
6504 max_process_desc
= 0;
6506 FD_SET (0, &input_wait_mask
);
6508 Vprocess_alist
= Qnil
;
6509 for (i
= 0; i
< MAXDESC
; i
++)
6511 chan_process
[i
] = Qnil
;
6512 proc_buffered_char
[i
] = -1;
6514 bzero (proc_decode_coding_system
, sizeof proc_decode_coding_system
);
6515 bzero (proc_encode_coding_system
, sizeof proc_encode_coding_system
);
6516 #ifdef DATAGRAM_SOCKETS
6517 bzero (datagram_address
, sizeof datagram_address
);
6522 Lisp_Object subfeatures
= Qnil
;
6523 struct socket_options
*sopt
;
6525 #define ADD_SUBFEATURE(key, val) \
6526 subfeatures = Fcons (Fcons (key, Fcons (val, Qnil)), subfeatures)
6528 #ifdef NON_BLOCKING_CONNECT
6529 ADD_SUBFEATURE (QCnowait
, Qt
);
6531 #ifdef DATAGRAM_SOCKETS
6532 ADD_SUBFEATURE (QCtype
, Qdatagram
);
6534 #ifdef HAVE_LOCAL_SOCKETS
6535 ADD_SUBFEATURE (QCfamily
, Qlocal
);
6537 #ifdef HAVE_GETSOCKNAME
6538 ADD_SUBFEATURE (QCservice
, Qt
);
6540 #if !defined(TERM) && (defined(O_NONBLOCK) || defined(O_NDELAY))
6541 ADD_SUBFEATURE (QCserver
, Qt
);
6544 for (sopt
= socket_options
; sopt
->name
; sopt
++)
6545 subfeatures
= Fcons (intern (sopt
->name
), subfeatures
);
6547 Fprovide (intern ("make-network-process"), subfeatures
);
6549 #endif /* HAVE_SOCKETS */
6555 Qprocessp
= intern ("processp");
6556 staticpro (&Qprocessp
);
6557 Qrun
= intern ("run");
6559 Qstop
= intern ("stop");
6561 Qsignal
= intern ("signal");
6562 staticpro (&Qsignal
);
6564 /* Qexit is already staticpro'd by syms_of_eval; don't staticpro it
6567 Qexit = intern ("exit");
6568 staticpro (&Qexit); */
6570 Qopen
= intern ("open");
6572 Qclosed
= intern ("closed");
6573 staticpro (&Qclosed
);
6574 Qconnect
= intern ("connect");
6575 staticpro (&Qconnect
);
6576 Qfailed
= intern ("failed");
6577 staticpro (&Qfailed
);
6578 Qlisten
= intern ("listen");
6579 staticpro (&Qlisten
);
6580 Qlocal
= intern ("local");
6581 staticpro (&Qlocal
);
6582 Qdatagram
= intern ("datagram");
6583 staticpro (&Qdatagram
);
6585 QCname
= intern (":name");
6586 staticpro (&QCname
);
6587 QCbuffer
= intern (":buffer");
6588 staticpro (&QCbuffer
);
6589 QChost
= intern (":host");
6590 staticpro (&QChost
);
6591 QCservice
= intern (":service");
6592 staticpro (&QCservice
);
6593 QCtype
= intern (":type");
6594 staticpro (&QCtype
);
6595 QClocal
= intern (":local");
6596 staticpro (&QClocal
);
6597 QCremote
= intern (":remote");
6598 staticpro (&QCremote
);
6599 QCcoding
= intern (":coding");
6600 staticpro (&QCcoding
);
6601 QCserver
= intern (":server");
6602 staticpro (&QCserver
);
6603 QCnowait
= intern (":nowait");
6604 staticpro (&QCnowait
);
6605 QCsentinel
= intern (":sentinel");
6606 staticpro (&QCsentinel
);
6607 QClog
= intern (":log");
6609 QCnoquery
= intern (":noquery");
6610 staticpro (&QCnoquery
);
6611 QCstop
= intern (":stop");
6612 staticpro (&QCstop
);
6613 QCoptions
= intern (":options");
6614 staticpro (&QCoptions
);
6615 QCplist
= intern (":plist");
6616 staticpro (&QCplist
);
6617 QCfilter_multibyte
= intern (":filter-multibyte");
6618 staticpro (&QCfilter_multibyte
);
6620 Qlast_nonmenu_event
= intern ("last-nonmenu-event");
6621 staticpro (&Qlast_nonmenu_event
);
6623 staticpro (&Vprocess_alist
);
6625 DEFVAR_BOOL ("delete-exited-processes", &delete_exited_processes
,
6626 doc
: /* *Non-nil means delete processes immediately when they exit.
6627 nil means don't delete them until `list-processes' is run. */);
6629 delete_exited_processes
= 1;
6631 DEFVAR_LISP ("process-connection-type", &Vprocess_connection_type
,
6632 doc
: /* Control type of device used to communicate with subprocesses.
6633 Values are nil to use a pipe, or t or `pty' to use a pty.
6634 The value has no effect if the system has no ptys or if all ptys are busy:
6635 then a pipe is used in any case.
6636 The value takes effect when `start-process' is called. */);
6637 Vprocess_connection_type
= Qt
;
6639 defsubr (&Sprocessp
);
6640 defsubr (&Sget_process
);
6641 defsubr (&Sget_buffer_process
);
6642 defsubr (&Sdelete_process
);
6643 defsubr (&Sprocess_status
);
6644 defsubr (&Sprocess_exit_status
);
6645 defsubr (&Sprocess_id
);
6646 defsubr (&Sprocess_name
);
6647 defsubr (&Sprocess_tty_name
);
6648 defsubr (&Sprocess_command
);
6649 defsubr (&Sset_process_buffer
);
6650 defsubr (&Sprocess_buffer
);
6651 defsubr (&Sprocess_mark
);
6652 defsubr (&Sset_process_filter
);
6653 defsubr (&Sprocess_filter
);
6654 defsubr (&Sset_process_sentinel
);
6655 defsubr (&Sprocess_sentinel
);
6656 defsubr (&Sset_process_window_size
);
6657 defsubr (&Sset_process_inherit_coding_system_flag
);
6658 defsubr (&Sprocess_inherit_coding_system_flag
);
6659 defsubr (&Sset_process_query_on_exit_flag
);
6660 defsubr (&Sprocess_query_on_exit_flag
);
6661 defsubr (&Sprocess_contact
);
6662 defsubr (&Sprocess_plist
);
6663 defsubr (&Sset_process_plist
);
6664 defsubr (&Slist_processes
);
6665 defsubr (&Sprocess_list
);
6666 defsubr (&Sstart_process
);
6668 defsubr (&Sset_network_process_option
);
6669 defsubr (&Smake_network_process
);
6670 defsubr (&Sformat_network_address
);
6671 #endif /* HAVE_SOCKETS */
6672 #if defined(HAVE_SOCKETS) && defined(HAVE_NET_IF_H) && defined(HAVE_SYS_IOCTL_H)
6674 defsubr (&Snetwork_interface_list
);
6676 #if defined(SIOCGIFADDR) || defined(SIOCGIFHWADDR) || defined(SIOCGIFFLAGS)
6677 defsubr (&Snetwork_interface_info
);
6679 #endif /* HAVE_SOCKETS ... */
6680 #ifdef DATAGRAM_SOCKETS
6681 defsubr (&Sprocess_datagram_address
);
6682 defsubr (&Sset_process_datagram_address
);
6684 defsubr (&Saccept_process_output
);
6685 defsubr (&Sprocess_send_region
);
6686 defsubr (&Sprocess_send_string
);
6687 defsubr (&Sinterrupt_process
);
6688 defsubr (&Skill_process
);
6689 defsubr (&Squit_process
);
6690 defsubr (&Sstop_process
);
6691 defsubr (&Scontinue_process
);
6692 defsubr (&Sprocess_running_child_p
);
6693 defsubr (&Sprocess_send_eof
);
6694 defsubr (&Ssignal_process
);
6695 defsubr (&Swaiting_for_user_input_p
);
6696 /* defsubr (&Sprocess_connection); */
6697 defsubr (&Sset_process_coding_system
);
6698 defsubr (&Sprocess_coding_system
);
6699 defsubr (&Sset_process_filter_multibyte
);
6700 defsubr (&Sprocess_filter_multibyte_p
);
6704 #else /* not subprocesses */
6706 #include <sys/types.h>
6710 #include "systime.h"
6711 #include "charset.h"
6713 #include "termopts.h"
6714 #include "sysselect.h"
6716 extern int frame_garbaged
;
6718 extern EMACS_TIME
timer_check ();
6719 extern int timers_run
;
6723 /* As described above, except assuming that there are no subprocesses:
6725 Wait for timeout to elapse and/or keyboard input to be available.
6728 timeout in seconds, or
6729 zero for no limit, or
6730 -1 means gobble data immediately available but don't wait for any.
6732 read_kbd is a Lisp_Object:
6733 0 to ignore keyboard input, or
6734 1 to return when input is available, or
6735 -1 means caller will actually read the input, so don't throw to
6737 a cons cell, meaning wait until its car is non-nil
6738 (and gobble terminal input into the buffer if any arrives), or
6739 We know that read_kbd will never be a Lisp_Process, since
6740 `subprocesses' isn't defined.
6742 do_display != 0 means redisplay should be done to show subprocess
6743 output that arrives.
6745 Return true iff we received input from any process. */
6748 wait_reading_process_input (time_limit
, microsecs
, read_kbd
, do_display
)
6749 int time_limit
, microsecs
;
6750 Lisp_Object read_kbd
;
6754 EMACS_TIME end_time
, timeout
;
6755 SELECT_TYPE waitchannels
;
6757 /* Either nil or a cons cell, the car of which is of interest and
6758 may be changed outside of this routine. */
6759 Lisp_Object wait_for_cell
;
6761 wait_for_cell
= Qnil
;
6763 /* If waiting for non-nil in a cell, record where. */
6764 if (CONSP (read_kbd
))
6766 wait_for_cell
= read_kbd
;
6767 XSETFASTINT (read_kbd
, 0);
6770 /* What does time_limit really mean? */
6771 if (time_limit
|| microsecs
)
6773 EMACS_GET_TIME (end_time
);
6774 EMACS_SET_SECS_USECS (timeout
, time_limit
, microsecs
);
6775 EMACS_ADD_TIME (end_time
, end_time
, timeout
);
6778 /* Turn off periodic alarms (in case they are in use)
6779 and then turn off any other atimers,
6780 because the select emulator uses alarms. */
6782 turn_on_atimers (0);
6786 int timeout_reduced_for_timers
= 0;
6788 /* If calling from keyboard input, do not quit
6789 since we want to return C-g as an input character.
6790 Otherwise, do pending quit if requested. */
6791 if (XINT (read_kbd
) >= 0)
6794 /* Exit now if the cell we're waiting for became non-nil. */
6795 if (! NILP (wait_for_cell
) && ! NILP (XCAR (wait_for_cell
)))
6798 /* Compute time from now till when time limit is up */
6799 /* Exit if already run out */
6800 if (time_limit
== -1)
6802 /* -1 specified for timeout means
6803 gobble output available now
6804 but don't wait at all. */
6806 EMACS_SET_SECS_USECS (timeout
, 0, 0);
6808 else if (time_limit
|| microsecs
)
6810 EMACS_GET_TIME (timeout
);
6811 EMACS_SUB_TIME (timeout
, end_time
, timeout
);
6812 if (EMACS_TIME_NEG_P (timeout
))
6817 EMACS_SET_SECS_USECS (timeout
, 100000, 0);
6820 /* If our caller will not immediately handle keyboard events,
6821 run timer events directly.
6822 (Callers that will immediately read keyboard events
6823 call timer_delay on their own.) */
6824 if (NILP (wait_for_cell
))
6826 EMACS_TIME timer_delay
;
6830 int old_timers_run
= timers_run
;
6831 timer_delay
= timer_check (1);
6832 if (timers_run
!= old_timers_run
&& do_display
)
6833 /* We must retry, since a timer may have requeued itself
6834 and that could alter the time delay. */
6835 redisplay_preserve_echo_area (14);
6839 while (!detect_input_pending ());
6841 /* If there is unread keyboard input, also return. */
6842 if (XINT (read_kbd
) != 0
6843 && requeued_events_pending_p ())
6846 if (! EMACS_TIME_NEG_P (timer_delay
) && time_limit
!= -1)
6848 EMACS_TIME difference
;
6849 EMACS_SUB_TIME (difference
, timer_delay
, timeout
);
6850 if (EMACS_TIME_NEG_P (difference
))
6852 timeout
= timer_delay
;
6853 timeout_reduced_for_timers
= 1;
6858 /* Cause C-g and alarm signals to take immediate action,
6859 and cause input available signals to zero out timeout. */
6860 if (XINT (read_kbd
) < 0)
6861 set_waiting_for_input (&timeout
);
6863 /* Wait till there is something to do. */
6865 if (! XINT (read_kbd
) && NILP (wait_for_cell
))
6866 FD_ZERO (&waitchannels
);
6868 FD_SET (0, &waitchannels
);
6870 /* If a frame has been newly mapped and needs updating,
6871 reprocess its display stuff. */
6872 if (frame_garbaged
&& do_display
)
6874 clear_waiting_for_input ();
6875 redisplay_preserve_echo_area (15);
6876 if (XINT (read_kbd
) < 0)
6877 set_waiting_for_input (&timeout
);
6880 if (XINT (read_kbd
) && detect_input_pending ())
6883 FD_ZERO (&waitchannels
);
6886 nfds
= select (1, &waitchannels
, (SELECT_TYPE
*)0, (SELECT_TYPE
*)0,
6891 /* Make C-g and alarm signals set flags again */
6892 clear_waiting_for_input ();
6894 /* If we woke up due to SIGWINCH, actually change size now. */
6895 do_pending_window_change (0);
6897 if (time_limit
&& nfds
== 0 && ! timeout_reduced_for_timers
)
6898 /* We waited the full specified time, so return now. */
6903 /* If the system call was interrupted, then go around the
6905 if (xerrno
== EINTR
)
6906 FD_ZERO (&waitchannels
);
6908 error ("select error: %s", emacs_strerror (xerrno
));
6911 else if (nfds
> 0 && (waitchannels
& 1) && interrupt_input
)
6912 /* System sometimes fails to deliver SIGIO. */
6913 kill (getpid (), SIGIO
);
6916 if (XINT (read_kbd
) && interrupt_input
&& (waitchannels
& 1))
6917 kill (getpid (), SIGIO
);
6920 /* Check for keyboard input */
6922 if ((XINT (read_kbd
) != 0)
6923 && detect_input_pending_run_timers (do_display
))
6925 swallow_events (do_display
);
6926 if (detect_input_pending_run_timers (do_display
))
6930 /* If there is unread keyboard input, also return. */
6931 if (XINT (read_kbd
) != 0
6932 && requeued_events_pending_p ())
6935 /* If wait_for_cell. check for keyboard input
6936 but don't run any timers.
6937 ??? (It seems wrong to me to check for keyboard
6938 input at all when wait_for_cell, but the code
6939 has been this way since July 1994.
6940 Try changing this after version 19.31.) */
6941 if (! NILP (wait_for_cell
)
6942 && detect_input_pending ())
6944 swallow_events (do_display
);
6945 if (detect_input_pending ())
6949 /* Exit now if the cell we're waiting for became non-nil. */
6950 if (! NILP (wait_for_cell
) && ! NILP (XCAR (wait_for_cell
)))
6960 /* Don't confuse make-docfile by having two doc strings for this function.
6961 make-docfile does not pay attention to #if, for good reason! */
6962 DEFUN ("get-buffer-process", Fget_buffer_process
, Sget_buffer_process
, 1, 1, 0,
6965 register Lisp_Object name
;
6970 /* Don't confuse make-docfile by having two doc strings for this function.
6971 make-docfile does not pay attention to #if, for good reason! */
6972 DEFUN ("process-inherit-coding-system-flag",
6973 Fprocess_inherit_coding_system_flag
, Sprocess_inherit_coding_system_flag
,
6977 register Lisp_Object process
;
6979 /* Ignore the argument and return the value of
6980 inherit-process-coding-system. */
6981 return inherit_process_coding_system
? Qt
: Qnil
;
6984 /* Kill all processes associated with `buffer'.
6985 If `buffer' is nil, kill all processes.
6986 Since we have no subprocesses, this does nothing. */
6989 kill_buffer_processes (buffer
)
7002 QCtype
= intern (":type");
7003 staticpro (&QCtype
);
7005 defsubr (&Sget_buffer_process
);
7006 defsubr (&Sprocess_inherit_coding_system_flag
);
7010 #endif /* not subprocesses */
7012 /* arch-tag: 3706c011-7b9a-4117-bd4f-59e7f701a4c4
7013 (do not change this comment) */