Mercurial > emacs
annotate src/process.c @ 110829:4d672e9d91bf
Complement a coding system for encoding arguments and input to a process.
author | Kenichi Handa <handa@m17n.org> |
---|---|
date | Thu, 30 Sep 2010 13:28:34 +0900 |
parents | 44a0c766b765 |
children | bec49af30c2f f2cb0d643a91 |
rev | line source |
---|---|
578 | 1 /* Asynchronous subprocess control for GNU Emacs. |
64770
a0d1312ede66
Update years in copyright notice; nfc.
Thien-Thi Nguyen <ttn@gnuvola.org>
parents:
64084
diff
changeset
|
2 Copyright (C) 1985, 1986, 1987, 1988, 1993, 1994, 1995, |
100824
e5aa6a069f40
(conv_sockaddr_to_lisp): Add workaround for
Andreas Schwab <schwab@suse.de>
parents:
100573
diff
changeset
|
3 1996, 1998, 1999, 2001, 2002, 2003, 2004, |
106815 | 4 2005, 2006, 2007, 2008, 2009, 2010 Free Software Foundation, Inc. |
578 | 5 |
6 This file is part of GNU Emacs. | |
7 | |
94963
8971ddf55736
Switch to recommended form of GPLv3 permissions notice.
Glenn Morris <rgm@gnu.org>
parents:
93896
diff
changeset
|
8 GNU Emacs is free software: you can redistribute it and/or modify |
578 | 9 it under the terms of the GNU General Public License as published by |
94963
8971ddf55736
Switch to recommended form of GPLv3 permissions notice.
Glenn Morris <rgm@gnu.org>
parents:
93896
diff
changeset
|
10 the Free Software Foundation, either version 3 of the License, or |
8971ddf55736
Switch to recommended form of GPLv3 permissions notice.
Glenn Morris <rgm@gnu.org>
parents:
93896
diff
changeset
|
11 (at your option) any later version. |
578 | 12 |
13 GNU Emacs is distributed in the hope that it will be useful, | |
14 but WITHOUT ANY WARRANTY; without even the implied warranty of | |
15 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the | |
16 GNU General Public License for more details. | |
17 | |
18 You should have received a copy of the GNU General Public License | |
94963
8971ddf55736
Switch to recommended form of GPLv3 permissions notice.
Glenn Morris <rgm@gnu.org>
parents:
93896
diff
changeset
|
19 along with GNU Emacs. If not, see <http://www.gnu.org/licenses/>. */ |
578 | 20 |
21 | |
26088
b7aa6ac26872
Add support for large files, 64-bit Solaris, system locale codings.
Paul Eggert <eggert@twinsun.com>
parents:
26019
diff
changeset
|
22 #include <config.h> |
578 | 23 #include <signal.h> |
24 | |
588 | 25 /* This file is split into two parts by the following preprocessor |
26 conditional. The 'then' clause contains all of the support for | |
27 asynchronous subprocesses. The 'else' clause contains stub | |
28 versions of some of the asynchronous subprocess routines that are | |
29 often called elsewhere in Emacs, so we don't have to #ifdef the | |
30 sections that call them. */ | |
31 | |
32 | |
578 | 33 #ifdef subprocesses |
34 | |
35 #include <stdio.h> | |
36 #include <errno.h> | |
37 #include <setjmp.h> | |
38 #include <sys/types.h> /* some typedefs are used in sys/file.h */ | |
39 #include <sys/file.h> | |
40 #include <sys/stat.h> | |
105669
68dd71358159
* alloc.c: Do not define struct catchtag.
Dan Nicolaescu <dann@ics.uci.edu>
parents:
105577
diff
changeset
|
41 #include <setjmp.h> |
68146
e5c85a134e67
[HAVE_INTTYPES_H]: Include inttypes.h.
YAMAMOTO Mitsuharu <mituharu@math.s.chiba-u.ac.jp>
parents:
68041
diff
changeset
|
42 #ifdef HAVE_INTTYPES_H |
e5c85a134e67
[HAVE_INTTYPES_H]: Include inttypes.h.
YAMAMOTO Mitsuharu <mituharu@math.s.chiba-u.ac.jp>
parents:
68041
diff
changeset
|
43 #include <inttypes.h> |
e5c85a134e67
[HAVE_INTTYPES_H]: Include inttypes.h.
YAMAMOTO Mitsuharu <mituharu@math.s.chiba-u.ac.jp>
parents:
68041
diff
changeset
|
44 #endif |
100824
e5aa6a069f40
(conv_sockaddr_to_lisp): Add workaround for
Andreas Schwab <schwab@suse.de>
parents:
100573
diff
changeset
|
45 #ifdef STDC_HEADERS |
e5aa6a069f40
(conv_sockaddr_to_lisp): Add workaround for
Andreas Schwab <schwab@suse.de>
parents:
100573
diff
changeset
|
46 #include <stdlib.h> |
e5aa6a069f40
(conv_sockaddr_to_lisp): Add workaround for
Andreas Schwab <schwab@suse.de>
parents:
100573
diff
changeset
|
47 #endif |
97227
1d85638347af
(Fsystem_processes_list, Fsystem_process_attributes): New functions.
Eli Zaretskii <eliz@gnu.org>
parents:
97142
diff
changeset
|
48 |
6158 | 49 #ifdef HAVE_UNISTD_H |
50 #include <unistd.h> | |
51 #endif | |
9793
28267fcc61be
Use macros IS_ANY_SEP, IS_DIRECTORY_SEP,
Richard M. Stallman <rms@gnu.org>
parents:
9705
diff
changeset
|
52 #include <fcntl.h> |
28267fcc61be
Use macros IS_ANY_SEP, IS_DIRECTORY_SEP,
Richard M. Stallman <rms@gnu.org>
parents:
9705
diff
changeset
|
53 |
578 | 54 #ifdef HAVE_SOCKETS /* TCP connection support, if kernel can do it */ |
55 #include <sys/socket.h> | |
56 #include <netdb.h> | |
57 #include <netinet/in.h> | |
58 #include <arpa/inet.h> | |
43968
7ec801358b7e
(Qlocal, QCname, QCbuffer, QChost, QCservice, QCfamily)
Kim F. Storm <storm@cua.dk>
parents:
43642
diff
changeset
|
59 |
7ec801358b7e
(Qlocal, QCname, QCbuffer, QChost, QCservice, QCfamily)
Kim F. Storm <storm@cua.dk>
parents:
43642
diff
changeset
|
60 /* Are local (unix) sockets supported? */ |
91702
b7a5a89054dc
* configure.in (LIBX11_MACHINE, HAVE_XFREE386): Remove code
Dan Nicolaescu <dann@ics.uci.edu>
parents:
91551
diff
changeset
|
61 #if defined (HAVE_SYS_UN_H) |
43968
7ec801358b7e
(Qlocal, QCname, QCbuffer, QChost, QCservice, QCfamily)
Kim F. Storm <storm@cua.dk>
parents:
43642
diff
changeset
|
62 #if !defined (AF_LOCAL) && defined (AF_UNIX) |
7ec801358b7e
(Qlocal, QCname, QCbuffer, QChost, QCservice, QCfamily)
Kim F. Storm <storm@cua.dk>
parents:
43642
diff
changeset
|
63 #define AF_LOCAL AF_UNIX |
7ec801358b7e
(Qlocal, QCname, QCbuffer, QChost, QCservice, QCfamily)
Kim F. Storm <storm@cua.dk>
parents:
43642
diff
changeset
|
64 #endif |
7ec801358b7e
(Qlocal, QCname, QCbuffer, QChost, QCservice, QCfamily)
Kim F. Storm <storm@cua.dk>
parents:
43642
diff
changeset
|
65 #ifdef AF_LOCAL |
7ec801358b7e
(Qlocal, QCname, QCbuffer, QChost, QCservice, QCfamily)
Kim F. Storm <storm@cua.dk>
parents:
43642
diff
changeset
|
66 #define HAVE_LOCAL_SOCKETS |
7ec801358b7e
(Qlocal, QCname, QCbuffer, QChost, QCservice, QCfamily)
Kim F. Storm <storm@cua.dk>
parents:
43642
diff
changeset
|
67 #include <sys/un.h> |
7ec801358b7e
(Qlocal, QCname, QCbuffer, QChost, QCservice, QCfamily)
Kim F. Storm <storm@cua.dk>
parents:
43642
diff
changeset
|
68 #endif |
7ec801358b7e
(Qlocal, QCname, QCbuffer, QChost, QCservice, QCfamily)
Kim F. Storm <storm@cua.dk>
parents:
43642
diff
changeset
|
69 #endif |
578 | 70 #endif /* HAVE_SOCKETS */ |
71 | |
87730 | 72 #if defined(BSD_SYSTEM) |
578 | 73 #include <sys/ioctl.h> |
1012
a48ed1d416dd
* process.c (process_send_signal): Don't send SIGTSTP if the
Jim Blandy <jimb@redhat.com>
parents:
849
diff
changeset
|
74 #if !defined (O_NDELAY) && defined (HAVE_PTYS) && !defined(USG5) |
578 | 75 #include <fcntl.h> |
76 #endif /* HAVE_PTYS and no O_NDELAY */ | |
87730 | 77 #endif /* BSD_SYSTEM */ |
5240
eed870591987
(Fprocess_status): Use get_process, not Fget_process.
Richard M. Stallman <rms@gnu.org>
parents:
5239
diff
changeset
|
78 |
578 | 79 #ifdef NEED_BSDTTY |
80 #include <bsdtty.h> | |
81 #endif | |
82 | |
52503
256a27a47af1
[HAVE_SOCKETS]: Include sys/ioctl.h and net/if.h.
Kim F. Storm <storm@cua.dk>
parents:
52401
diff
changeset
|
83 /* Can we use SIOCGIFCONF and/or SIOCGIFADDR */ |
256a27a47af1
[HAVE_SOCKETS]: Include sys/ioctl.h and net/if.h.
Kim F. Storm <storm@cua.dk>
parents:
52401
diff
changeset
|
84 #ifdef HAVE_SOCKETS |
256a27a47af1
[HAVE_SOCKETS]: Include sys/ioctl.h and net/if.h.
Kim F. Storm <storm@cua.dk>
parents:
52401
diff
changeset
|
85 #if defined(HAVE_SYS_IOCTL_H) && defined(HAVE_NET_IF_H) |
256a27a47af1
[HAVE_SOCKETS]: Include sys/ioctl.h and net/if.h.
Kim F. Storm <storm@cua.dk>
parents:
52401
diff
changeset
|
86 /* sys/ioctl.h may have been included already */ |
256a27a47af1
[HAVE_SOCKETS]: Include sys/ioctl.h and net/if.h.
Kim F. Storm <storm@cua.dk>
parents:
52401
diff
changeset
|
87 #ifndef SIOCGIFADDR |
256a27a47af1
[HAVE_SOCKETS]: Include sys/ioctl.h and net/if.h.
Kim F. Storm <storm@cua.dk>
parents:
52401
diff
changeset
|
88 #include <sys/ioctl.h> |
256a27a47af1
[HAVE_SOCKETS]: Include sys/ioctl.h and net/if.h.
Kim F. Storm <storm@cua.dk>
parents:
52401
diff
changeset
|
89 #endif |
256a27a47af1
[HAVE_SOCKETS]: Include sys/ioctl.h and net/if.h.
Kim F. Storm <storm@cua.dk>
parents:
52401
diff
changeset
|
90 #include <net/if.h> |
256a27a47af1
[HAVE_SOCKETS]: Include sys/ioctl.h and net/if.h.
Kim F. Storm <storm@cua.dk>
parents:
52401
diff
changeset
|
91 #endif |
256a27a47af1
[HAVE_SOCKETS]: Include sys/ioctl.h and net/if.h.
Kim F. Storm <storm@cua.dk>
parents:
52401
diff
changeset
|
92 #endif |
256a27a47af1
[HAVE_SOCKETS]: Include sys/ioctl.h and net/if.h.
Kim F. Storm <storm@cua.dk>
parents:
52401
diff
changeset
|
93 |
48088 | 94 #ifdef HAVE_SYS_WAIT |
95 #include <sys/wait.h> | |
96 #endif | |
578 | 97 |
85362
b949ffc47cba
Link to libs for calling res_init() if available.
Chong Yidong <cyd@stupidchicken.com>
parents:
84668
diff
changeset
|
98 #ifdef HAVE_RES_INIT |
b949ffc47cba
Link to libs for calling res_init() if available.
Chong Yidong <cyd@stupidchicken.com>
parents:
84668
diff
changeset
|
99 #include <netinet/in.h> |
b949ffc47cba
Link to libs for calling res_init() if available.
Chong Yidong <cyd@stupidchicken.com>
parents:
84668
diff
changeset
|
100 #include <arpa/nameser.h> |
b949ffc47cba
Link to libs for calling res_init() if available.
Chong Yidong <cyd@stupidchicken.com>
parents:
84668
diff
changeset
|
101 #include <resolv.h> |
68022
e213d76ca446
[WINDOWSNT]: Undef AF_INET6 to disable IPv6 support for w32.
Eli Zaretskii <eliz@gnu.org>
parents:
68008
diff
changeset
|
102 #endif |
e213d76ca446
[WINDOWSNT]: Undef AF_INET6 to disable IPv6 support for w32.
Eli Zaretskii <eliz@gnu.org>
parents:
68008
diff
changeset
|
103 |
65764
375ab086d366
* image.c (slurp_file, xbm_read_bitmap_data): Cast to the correct
Dan Nicolaescu <dann@ics.uci.edu>
parents:
65713
diff
changeset
|
104 #include "lisp.h" |
578 | 105 #include "systime.h" |
1047
1ab1ed32e82a
* process.c: Include "systty.h", not "systerm.h".
Jim Blandy <jimb@redhat.com>
parents:
1030
diff
changeset
|
106 #include "systty.h" |
578 | 107 |
108 #include "window.h" | |
109 #include "buffer.h" | |
88385
c60e206fcf58
Include "character.h" instead of "charset.h".
Kenichi Handa <handa@m17n.org>
parents:
42600
diff
changeset
|
110 #include "character.h" |
17041
b61cbe595be5
Include charset.h and coding.h.
Karl Heuer <kwzh@gnu.org>
parents:
16780
diff
changeset
|
111 #include "coding.h" |
578 | 112 #include "process.h" |
83004
7900111db01c
Converted display hooks to be display-local. Plus many bugfixes.
Karoly Lorentey <lorentey@elte.hu>
parents:
82993
diff
changeset
|
113 #include "frame.h" |
578 | 114 #include "termhooks.h" |
115 #include "termopts.h" | |
116 #include "commands.h" | |
31099
0fe5afca71e4
Include keyboard.h before frame.h.
Andrew Innes <andrewi@gnu.org>
parents:
30582
diff
changeset
|
117 #include "keyboard.h" |
16780 | 118 #include "blockinput.h" |
21514 | 119 #include "dispextern.h" |
26868 | 120 #include "composite.h" |
27430
1aa71680fe50
(toplevel): Include atimer.h.
Gerd Moellmann <gerd@gnu.org>
parents:
27028
diff
changeset
|
121 #include "atimer.h" |
578 | 122 |
106186
9b6f45dd8386
Use a select wrapper around the GLib event loop, thus taking into account GLib
Jan Djärv <jan.h.d@swipnet.se>
parents:
106185
diff
changeset
|
123 #if defined (USE_GTK) || defined (HAVE_GCONF) |
9b6f45dd8386
Use a select wrapper around the GLib event loop, thus taking into account GLib
Jan Djärv <jan.h.d@swipnet.se>
parents:
106185
diff
changeset
|
124 #include "xgselect.h" |
9b6f45dd8386
Use a select wrapper around the GLib event loop, thus taking into account GLib
Jan Djärv <jan.h.d@swipnet.se>
parents:
106185
diff
changeset
|
125 #endif /* defined (USE_GTK) || defined (HAVE_GCONF) */ |
9b6f45dd8386
Use a select wrapper around the GLib event loop, thus taking into account GLib
Jan Djärv <jan.h.d@swipnet.se>
parents:
106185
diff
changeset
|
126 |
4682
c4d471244116
(keyboard_descriptor): New variable.
Richard M. Stallman <rms@gnu.org>
parents:
4639
diff
changeset
|
127 Lisp_Object Qprocessp; |
74749 | 128 Lisp_Object Qrun, Qstop, Qsignal; |
43968
7ec801358b7e
(Qlocal, QCname, QCbuffer, QChost, QCservice, QCfamily)
Kim F. Storm <storm@cua.dk>
parents:
43642
diff
changeset
|
129 Lisp_Object Qopen, Qclosed, Qconnect, Qfailed, Qlisten; |
106397
210af1fb2669
(Qseqpacket): New symbol.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
106186
diff
changeset
|
130 Lisp_Object Qlocal, Qipv4, Qdatagram, Qseqpacket; |
95884
d6a4488883dc
Daniel Engeler <engeler at gmail.com>
Glenn Morris <rgm@gnu.org>
parents:
95387
diff
changeset
|
131 Lisp_Object Qreal, Qnetwork, Qserial; |
68008 | 132 #ifdef AF_INET6 |
133 Lisp_Object Qipv6; | |
134 #endif | |
95884
d6a4488883dc
Daniel Engeler <engeler at gmail.com>
Glenn Morris <rgm@gnu.org>
parents:
95387
diff
changeset
|
135 Lisp_Object QCport, QCspeed, QCprocess; |
d6a4488883dc
Daniel Engeler <engeler at gmail.com>
Glenn Morris <rgm@gnu.org>
parents:
95387
diff
changeset
|
136 Lisp_Object QCbytesize, QCstopbits, QCparity, Qodd, Qeven; |
d6a4488883dc
Daniel Engeler <engeler at gmail.com>
Glenn Morris <rgm@gnu.org>
parents:
95387
diff
changeset
|
137 Lisp_Object QCflowcontrol, Qhw, Qsw, QCsummary; |
44067
e8a136850817
(QCfeature, QCdatagram): Removed variables.
Kim F. Storm <storm@cua.dk>
parents:
44041
diff
changeset
|
138 Lisp_Object QCname, QCbuffer, QChost, QCservice, QCtype; |
43968
7ec801358b7e
(Qlocal, QCname, QCbuffer, QChost, QCservice, QCfamily)
Kim F. Storm <storm@cua.dk>
parents:
43642
diff
changeset
|
139 Lisp_Object QClocal, QCremote, QCcoding; |
44067
e8a136850817
(QCfeature, QCdatagram): Removed variables.
Kim F. Storm <storm@cua.dk>
parents:
44041
diff
changeset
|
140 Lisp_Object QCserver, QCnowait, QCnoquery, QCstop; |
49223
26622fa0d099
Reworked 2003-01-12 change -- call a plist a plist!
Kim F. Storm <storm@cua.dk>
parents:
49164
diff
changeset
|
141 Lisp_Object QCsentinel, QClog, QCoptions, QCplist; |
8231
5226ed89c1a6
(Qlast_nonmenu_event): New variable.
Richard M. Stallman <rms@gnu.org>
parents:
8063
diff
changeset
|
142 Lisp_Object Qlast_nonmenu_event; |
44041
134644f94850
(QCfamily, QCfiler): Remove duplicate declaration and initialization.
Jason Rumney <jasonr@gnu.org>
parents:
44038
diff
changeset
|
143 /* QCfamily is declared and initialized in xfaces.c, |
134644f94850
(QCfamily, QCfiler): Remove duplicate declaration and initialization.
Jason Rumney <jasonr@gnu.org>
parents:
44038
diff
changeset
|
144 QCfilter in keyboard.c. */ |
134644f94850
(QCfamily, QCfiler): Remove duplicate declaration and initialization.
Jason Rumney <jasonr@gnu.org>
parents:
44038
diff
changeset
|
145 extern Lisp_Object QCfamily, QCfilter; |
134644f94850
(QCfamily, QCfiler): Remove duplicate declaration and initialization.
Jason Rumney <jasonr@gnu.org>
parents:
44038
diff
changeset
|
146 |
578 | 147 /* Qexit is declared and initialized in eval.c. */ |
148 | |
44890
01b93e5e53a7
Patch for building Emacs on Mac OS X. April 26, 2002. See ChangeLog,
Andrew Choi <akochoi@shaw.ca>
parents:
44372
diff
changeset
|
149 /* QCfamily is defined in xfaces.c. */ |
01b93e5e53a7
Patch for building Emacs on Mac OS X. April 26, 2002. See ChangeLog,
Andrew Choi <akochoi@shaw.ca>
parents:
44372
diff
changeset
|
150 extern Lisp_Object QCfamily; |
01b93e5e53a7
Patch for building Emacs on Mac OS X. April 26, 2002. See ChangeLog,
Andrew Choi <akochoi@shaw.ca>
parents:
44372
diff
changeset
|
151 /* QCfilter is defined in keyboard.c. */ |
01b93e5e53a7
Patch for building Emacs on Mac OS X. April 26, 2002. See ChangeLog,
Andrew Choi <akochoi@shaw.ca>
parents:
44372
diff
changeset
|
152 extern Lisp_Object QCfilter; |
01b93e5e53a7
Patch for building Emacs on Mac OS X. April 26, 2002. See ChangeLog,
Andrew Choi <akochoi@shaw.ca>
parents:
44372
diff
changeset
|
153 |
97227
1d85638347af
(Fsystem_processes_list, Fsystem_process_attributes): New functions.
Eli Zaretskii <eliz@gnu.org>
parents:
97142
diff
changeset
|
154 Lisp_Object Qeuid, Qegid, Qcomm, Qstate, Qppid, Qpgrp, Qsess, Qttname, Qtpgid; |
1d85638347af
(Fsystem_processes_list, Fsystem_process_attributes): New functions.
Eli Zaretskii <eliz@gnu.org>
parents:
97142
diff
changeset
|
155 Lisp_Object Qminflt, Qmajflt, Qcminflt, Qcmajflt, Qutime, Qstime, Qcstime; |
1d85638347af
(Fsystem_processes_list, Fsystem_process_attributes): New functions.
Eli Zaretskii <eliz@gnu.org>
parents:
97142
diff
changeset
|
156 Lisp_Object Qcutime, Qpri, Qnice, Qthcount, Qstart, Qvsize, Qrss, Qargs; |
100828
0b30d1767fab
(top level) <Qtime, Qctime>: New variables.
Eli Zaretskii <eliz@gnu.org>
parents:
100824
diff
changeset
|
157 Lisp_Object Quser, Qgroup, Qetime, Qpcpu, Qpmem, Qtime, Qctime; |
97227
1d85638347af
(Fsystem_processes_list, Fsystem_process_attributes): New functions.
Eli Zaretskii <eliz@gnu.org>
parents:
97142
diff
changeset
|
158 |
578 | 159 #ifdef HAVE_SOCKETS |
95884
d6a4488883dc
Daniel Engeler <engeler at gmail.com>
Glenn Morris <rgm@gnu.org>
parents:
95387
diff
changeset
|
160 #define NETCONN_P(p) (EQ (XPROCESS (p)->type, Qnetwork)) |
d6a4488883dc
Daniel Engeler <engeler at gmail.com>
Glenn Morris <rgm@gnu.org>
parents:
95387
diff
changeset
|
161 #define NETCONN1_P(p) (EQ ((p)->type, Qnetwork)) |
d6a4488883dc
Daniel Engeler <engeler at gmail.com>
Glenn Morris <rgm@gnu.org>
parents:
95387
diff
changeset
|
162 #define SERIALCONN_P(p) (EQ (XPROCESS (p)->type, Qserial)) |
d6a4488883dc
Daniel Engeler <engeler at gmail.com>
Glenn Morris <rgm@gnu.org>
parents:
95387
diff
changeset
|
163 #define SERIALCONN1_P(p) (EQ ((p)->type, Qserial)) |
578 | 164 #else |
165 #define NETCONN_P(p) 0 | |
43968
7ec801358b7e
(Qlocal, QCname, QCbuffer, QChost, QCservice, QCfamily)
Kim F. Storm <storm@cua.dk>
parents:
43642
diff
changeset
|
166 #define NETCONN1_P(p) 0 |
95884
d6a4488883dc
Daniel Engeler <engeler at gmail.com>
Glenn Morris <rgm@gnu.org>
parents:
95387
diff
changeset
|
167 #define SERIALCONN_P(p) 0 |
d6a4488883dc
Daniel Engeler <engeler at gmail.com>
Glenn Morris <rgm@gnu.org>
parents:
95387
diff
changeset
|
168 #define SERIALCONN1_P(p) 0 |
578 | 169 #endif /* HAVE_SOCKETS */ |
170 | |
171 /* Define first descriptor number available for subprocesses. */ | |
172 #define FIRST_PROC_DESC 3 | |
173 | |
174 /* Define SIGCHLD as an alias for SIGCLD. There are many conditionals | |
175 testing SIGCHLD. */ | |
176 | |
177 #if !defined (SIGCHLD) && defined (SIGCLD) | |
178 #define SIGCHLD SIGCLD | |
179 #endif /* SIGCLD */ | |
180 | |
181 #include "syssignal.h" | |
182 | |
4639 | 183 #include "syswait.h" |
578 | 184 |
59689
007a1a6d92de
* s/darwin.h: Removed PTY_ITERATION from here.
Steven Tamm <steventamm@mac.com>
parents:
59113
diff
changeset
|
185 extern char *get_operating_system_release (); |
25770
3a44b5298cd5
(list_processes_1): Remove unused variables.
Gerd Moellmann <gerd@gnu.org>
parents:
25760
diff
changeset
|
186 |
95884
d6a4488883dc
Daniel Engeler <engeler at gmail.com>
Glenn Morris <rgm@gnu.org>
parents:
95387
diff
changeset
|
187 /* Serial processes require termios or Windows. */ |
d6a4488883dc
Daniel Engeler <engeler at gmail.com>
Glenn Morris <rgm@gnu.org>
parents:
95387
diff
changeset
|
188 #if defined (HAVE_TERMIOS) || defined (WINDOWSNT) |
d6a4488883dc
Daniel Engeler <engeler at gmail.com>
Glenn Morris <rgm@gnu.org>
parents:
95387
diff
changeset
|
189 #define HAVE_SERIAL |
d6a4488883dc
Daniel Engeler <engeler at gmail.com>
Glenn Morris <rgm@gnu.org>
parents:
95387
diff
changeset
|
190 #endif |
d6a4488883dc
Daniel Engeler <engeler at gmail.com>
Glenn Morris <rgm@gnu.org>
parents:
95387
diff
changeset
|
191 |
d6a4488883dc
Daniel Engeler <engeler at gmail.com>
Glenn Morris <rgm@gnu.org>
parents:
95387
diff
changeset
|
192 #ifdef HAVE_SERIAL |
d6a4488883dc
Daniel Engeler <engeler at gmail.com>
Glenn Morris <rgm@gnu.org>
parents:
95387
diff
changeset
|
193 /* From sysdep.c or w32.c */ |
d6a4488883dc
Daniel Engeler <engeler at gmail.com>
Glenn Morris <rgm@gnu.org>
parents:
95387
diff
changeset
|
194 extern int serial_open (char *port); |
d6a4488883dc
Daniel Engeler <engeler at gmail.com>
Glenn Morris <rgm@gnu.org>
parents:
95387
diff
changeset
|
195 extern void serial_configure (struct Lisp_Process *p, Lisp_Object contact); |
d6a4488883dc
Daniel Engeler <engeler at gmail.com>
Glenn Morris <rgm@gnu.org>
parents:
95387
diff
changeset
|
196 #endif |
d6a4488883dc
Daniel Engeler <engeler at gmail.com>
Glenn Morris <rgm@gnu.org>
parents:
95387
diff
changeset
|
197 |
31099
0fe5afca71e4
Include keyboard.h before frame.h.
Andrew Innes <andrewi@gnu.org>
parents:
30582
diff
changeset
|
198 #ifndef USE_CRT_DLL |
5543 | 199 extern int errno; |
31099
0fe5afca71e4
Include keyboard.h before frame.h.
Andrew Innes <andrewi@gnu.org>
parents:
30582
diff
changeset
|
200 #endif |
578 | 201 |
8331
14ddb4c66461
[!HAVE_H_ERRNO]: Declare h_errno.
Richard M. Stallman <rms@gnu.org>
parents:
8287
diff
changeset
|
202 #ifndef HAVE_H_ERRNO |
14ddb4c66461
[!HAVE_H_ERRNO]: Declare h_errno.
Richard M. Stallman <rms@gnu.org>
parents:
8287
diff
changeset
|
203 extern int h_errno; |
14ddb4c66461
[!HAVE_H_ERRNO]: Declare h_errno.
Richard M. Stallman <rms@gnu.org>
parents:
8287
diff
changeset
|
204 #endif |
14ddb4c66461
[!HAVE_H_ERRNO]: Declare h_errno.
Richard M. Stallman <rms@gnu.org>
parents:
8287
diff
changeset
|
205 |
578 | 206 /* t means use pty, nil means use a pipe, |
207 maybe other values to come. */ | |
4682
c4d471244116
(keyboard_descriptor): New variable.
Richard M. Stallman <rms@gnu.org>
parents:
4639
diff
changeset
|
208 static Lisp_Object Vprocess_connection_type; |
578 | 209 |
10548
dcae4394587d
(process_tick, update_tick): Make non-static.
Karl Heuer <kwzh@gnu.org>
parents:
10527
diff
changeset
|
210 /* These next two vars are non-static since sysdep.c uses them in the |
dcae4394587d
(process_tick, update_tick): Make non-static.
Karl Heuer <kwzh@gnu.org>
parents:
10527
diff
changeset
|
211 emulation of `select'. */ |
578 | 212 /* Number of events of change of status of a process. */ |
10548
dcae4394587d
(process_tick, update_tick): Make non-static.
Karl Heuer <kwzh@gnu.org>
parents:
10527
diff
changeset
|
213 int process_tick; |
578 | 214 /* Number of events for which the user or sentinel has been notified. */ |
10548
dcae4394587d
(process_tick, update_tick): Make non-static.
Karl Heuer <kwzh@gnu.org>
parents:
10527
diff
changeset
|
215 int update_tick; |
578 | 216 |
43598
f49377cf2e3c
(Qconnect, Qfailed): New variables.
Kim F. Storm <storm@cua.dk>
parents:
42600
diff
changeset
|
217 /* Define NON_BLOCKING_CONNECT if we can support non-blocking connects. */ |
f49377cf2e3c
(Qconnect, Qfailed): New variables.
Kim F. Storm <storm@cua.dk>
parents:
42600
diff
changeset
|
218 |
f49377cf2e3c
(Qconnect, Qfailed): New variables.
Kim F. Storm <storm@cua.dk>
parents:
42600
diff
changeset
|
219 #ifdef BROKEN_NON_BLOCKING_CONNECT |
f49377cf2e3c
(Qconnect, Qfailed): New variables.
Kim F. Storm <storm@cua.dk>
parents:
42600
diff
changeset
|
220 #undef NON_BLOCKING_CONNECT |
f49377cf2e3c
(Qconnect, Qfailed): New variables.
Kim F. Storm <storm@cua.dk>
parents:
42600
diff
changeset
|
221 #else |
f49377cf2e3c
(Qconnect, Qfailed): New variables.
Kim F. Storm <storm@cua.dk>
parents:
42600
diff
changeset
|
222 #ifndef NON_BLOCKING_CONNECT |
f49377cf2e3c
(Qconnect, Qfailed): New variables.
Kim F. Storm <storm@cua.dk>
parents:
42600
diff
changeset
|
223 #ifdef HAVE_SOCKETS |
f49377cf2e3c
(Qconnect, Qfailed): New variables.
Kim F. Storm <storm@cua.dk>
parents:
42600
diff
changeset
|
224 #ifdef HAVE_SELECT |
f49377cf2e3c
(Qconnect, Qfailed): New variables.
Kim F. Storm <storm@cua.dk>
parents:
42600
diff
changeset
|
225 #if defined (HAVE_GETPEERNAME) || defined (GNU_LINUX) |
f49377cf2e3c
(Qconnect, Qfailed): New variables.
Kim F. Storm <storm@cua.dk>
parents:
42600
diff
changeset
|
226 #if defined (O_NONBLOCK) || defined (O_NDELAY) |
f49377cf2e3c
(Qconnect, Qfailed): New variables.
Kim F. Storm <storm@cua.dk>
parents:
42600
diff
changeset
|
227 #if defined (EWOULDBLOCK) || defined (EINPROGRESS) |
f49377cf2e3c
(Qconnect, Qfailed): New variables.
Kim F. Storm <storm@cua.dk>
parents:
42600
diff
changeset
|
228 #define NON_BLOCKING_CONNECT |
f49377cf2e3c
(Qconnect, Qfailed): New variables.
Kim F. Storm <storm@cua.dk>
parents:
42600
diff
changeset
|
229 #endif /* EWOULDBLOCK || EINPROGRESS */ |
f49377cf2e3c
(Qconnect, Qfailed): New variables.
Kim F. Storm <storm@cua.dk>
parents:
42600
diff
changeset
|
230 #endif /* O_NONBLOCK || O_NDELAY */ |
f49377cf2e3c
(Qconnect, Qfailed): New variables.
Kim F. Storm <storm@cua.dk>
parents:
42600
diff
changeset
|
231 #endif /* HAVE_GETPEERNAME || GNU_LINUX */ |
f49377cf2e3c
(Qconnect, Qfailed): New variables.
Kim F. Storm <storm@cua.dk>
parents:
42600
diff
changeset
|
232 #endif /* HAVE_SELECT */ |
f49377cf2e3c
(Qconnect, Qfailed): New variables.
Kim F. Storm <storm@cua.dk>
parents:
42600
diff
changeset
|
233 #endif /* HAVE_SOCKETS */ |
f49377cf2e3c
(Qconnect, Qfailed): New variables.
Kim F. Storm <storm@cua.dk>
parents:
42600
diff
changeset
|
234 #endif /* NON_BLOCKING_CONNECT */ |
f49377cf2e3c
(Qconnect, Qfailed): New variables.
Kim F. Storm <storm@cua.dk>
parents:
42600
diff
changeset
|
235 #endif /* BROKEN_NON_BLOCKING_CONNECT */ |
f49377cf2e3c
(Qconnect, Qfailed): New variables.
Kim F. Storm <storm@cua.dk>
parents:
42600
diff
changeset
|
236 |
43968
7ec801358b7e
(Qlocal, QCname, QCbuffer, QChost, QCservice, QCfamily)
Kim F. Storm <storm@cua.dk>
parents:
43642
diff
changeset
|
237 /* Define DATAGRAM_SOCKETS if datagrams can be used safely on |
7ec801358b7e
(Qlocal, QCname, QCbuffer, QChost, QCservice, QCfamily)
Kim F. Storm <storm@cua.dk>
parents:
43642
diff
changeset
|
238 this system. We need to read full packets, so we need a |
7ec801358b7e
(Qlocal, QCname, QCbuffer, QChost, QCservice, QCfamily)
Kim F. Storm <storm@cua.dk>
parents:
43642
diff
changeset
|
239 "non-destructive" select. So we require either native select, |
7ec801358b7e
(Qlocal, QCname, QCbuffer, QChost, QCservice, QCfamily)
Kim F. Storm <storm@cua.dk>
parents:
43642
diff
changeset
|
240 or emulation of select using FIONREAD. */ |
7ec801358b7e
(Qlocal, QCname, QCbuffer, QChost, QCservice, QCfamily)
Kim F. Storm <storm@cua.dk>
parents:
43642
diff
changeset
|
241 |
7ec801358b7e
(Qlocal, QCname, QCbuffer, QChost, QCservice, QCfamily)
Kim F. Storm <storm@cua.dk>
parents:
43642
diff
changeset
|
242 #ifdef BROKEN_DATAGRAM_SOCKETS |
7ec801358b7e
(Qlocal, QCname, QCbuffer, QChost, QCservice, QCfamily)
Kim F. Storm <storm@cua.dk>
parents:
43642
diff
changeset
|
243 #undef DATAGRAM_SOCKETS |
7ec801358b7e
(Qlocal, QCname, QCbuffer, QChost, QCservice, QCfamily)
Kim F. Storm <storm@cua.dk>
parents:
43642
diff
changeset
|
244 #else |
7ec801358b7e
(Qlocal, QCname, QCbuffer, QChost, QCservice, QCfamily)
Kim F. Storm <storm@cua.dk>
parents:
43642
diff
changeset
|
245 #ifndef DATAGRAM_SOCKETS |
7ec801358b7e
(Qlocal, QCname, QCbuffer, QChost, QCservice, QCfamily)
Kim F. Storm <storm@cua.dk>
parents:
43642
diff
changeset
|
246 #ifdef HAVE_SOCKETS |
7ec801358b7e
(Qlocal, QCname, QCbuffer, QChost, QCservice, QCfamily)
Kim F. Storm <storm@cua.dk>
parents:
43642
diff
changeset
|
247 #if defined (HAVE_SELECT) || defined (FIONREAD) |
7ec801358b7e
(Qlocal, QCname, QCbuffer, QChost, QCservice, QCfamily)
Kim F. Storm <storm@cua.dk>
parents:
43642
diff
changeset
|
248 #if defined (HAVE_SENDTO) && defined (HAVE_RECVFROM) && defined (EMSGSIZE) |
7ec801358b7e
(Qlocal, QCname, QCbuffer, QChost, QCservice, QCfamily)
Kim F. Storm <storm@cua.dk>
parents:
43642
diff
changeset
|
249 #define DATAGRAM_SOCKETS |
7ec801358b7e
(Qlocal, QCname, QCbuffer, QChost, QCservice, QCfamily)
Kim F. Storm <storm@cua.dk>
parents:
43642
diff
changeset
|
250 #endif /* HAVE_SENDTO && HAVE_RECVFROM && EMSGSIZE */ |
7ec801358b7e
(Qlocal, QCname, QCbuffer, QChost, QCservice, QCfamily)
Kim F. Storm <storm@cua.dk>
parents:
43642
diff
changeset
|
251 #endif /* HAVE_SELECT || FIONREAD */ |
7ec801358b7e
(Qlocal, QCname, QCbuffer, QChost, QCservice, QCfamily)
Kim F. Storm <storm@cua.dk>
parents:
43642
diff
changeset
|
252 #endif /* HAVE_SOCKETS */ |
7ec801358b7e
(Qlocal, QCname, QCbuffer, QChost, QCservice, QCfamily)
Kim F. Storm <storm@cua.dk>
parents:
43642
diff
changeset
|
253 #endif /* DATAGRAM_SOCKETS */ |
7ec801358b7e
(Qlocal, QCname, QCbuffer, QChost, QCservice, QCfamily)
Kim F. Storm <storm@cua.dk>
parents:
43642
diff
changeset
|
254 #endif /* BROKEN_DATAGRAM_SOCKETS */ |
7ec801358b7e
(Qlocal, QCname, QCbuffer, QChost, QCservice, QCfamily)
Kim F. Storm <storm@cua.dk>
parents:
43642
diff
changeset
|
255 |
106397
210af1fb2669
(Qseqpacket): New symbol.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
106186
diff
changeset
|
256 #if defined HAVE_LOCAL_SOCKETS && defined DATAGRAM_SOCKETS |
210af1fb2669
(Qseqpacket): New symbol.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
106186
diff
changeset
|
257 # define HAVE_SEQPACKET |
210af1fb2669
(Qseqpacket): New symbol.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
106186
diff
changeset
|
258 #endif |
210af1fb2669
(Qseqpacket): New symbol.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
106186
diff
changeset
|
259 |
53472
1a5fe79d27f3
(ADAPTIVE_READ_BUFFERING): New conditional.
Kim F. Storm <storm@cua.dk>
parents:
53072
diff
changeset
|
260 #if !defined (ADAPTIVE_READ_BUFFERING) && !defined (NO_ADAPTIVE_READ_BUFFERING) |
1a5fe79d27f3
(ADAPTIVE_READ_BUFFERING): New conditional.
Kim F. Storm <storm@cua.dk>
parents:
53072
diff
changeset
|
261 #ifdef EMACS_HAS_USECS |
1a5fe79d27f3
(ADAPTIVE_READ_BUFFERING): New conditional.
Kim F. Storm <storm@cua.dk>
parents:
53072
diff
changeset
|
262 #define ADAPTIVE_READ_BUFFERING |
1a5fe79d27f3
(ADAPTIVE_READ_BUFFERING): New conditional.
Kim F. Storm <storm@cua.dk>
parents:
53072
diff
changeset
|
263 #endif |
1a5fe79d27f3
(ADAPTIVE_READ_BUFFERING): New conditional.
Kim F. Storm <storm@cua.dk>
parents:
53072
diff
changeset
|
264 #endif |
1a5fe79d27f3
(ADAPTIVE_READ_BUFFERING): New conditional.
Kim F. Storm <storm@cua.dk>
parents:
53072
diff
changeset
|
265 |
1a5fe79d27f3
(ADAPTIVE_READ_BUFFERING): New conditional.
Kim F. Storm <storm@cua.dk>
parents:
53072
diff
changeset
|
266 #ifdef ADAPTIVE_READ_BUFFERING |
1a5fe79d27f3
(ADAPTIVE_READ_BUFFERING): New conditional.
Kim F. Storm <storm@cua.dk>
parents:
53072
diff
changeset
|
267 #define READ_OUTPUT_DELAY_INCREMENT 10000 |
1a5fe79d27f3
(ADAPTIVE_READ_BUFFERING): New conditional.
Kim F. Storm <storm@cua.dk>
parents:
53072
diff
changeset
|
268 #define READ_OUTPUT_DELAY_MAX (READ_OUTPUT_DELAY_INCREMENT * 5) |
1a5fe79d27f3
(ADAPTIVE_READ_BUFFERING): New conditional.
Kim F. Storm <storm@cua.dk>
parents:
53072
diff
changeset
|
269 #define READ_OUTPUT_DELAY_MAX_MAX (READ_OUTPUT_DELAY_INCREMENT * 7) |
1a5fe79d27f3
(ADAPTIVE_READ_BUFFERING): New conditional.
Kim F. Storm <storm@cua.dk>
parents:
53072
diff
changeset
|
270 |
63114
6ef9e44e50d7
Improve commentary for adaptive read buffering.
Kim F. Storm <storm@cua.dk>
parents:
62604
diff
changeset
|
271 /* Number of processes which have a non-zero read_output_delay, |
6ef9e44e50d7
Improve commentary for adaptive read buffering.
Kim F. Storm <storm@cua.dk>
parents:
62604
diff
changeset
|
272 and therefore might be delayed for adaptive read buffering. */ |
53472
1a5fe79d27f3
(ADAPTIVE_READ_BUFFERING): New conditional.
Kim F. Storm <storm@cua.dk>
parents:
53072
diff
changeset
|
273 |
1a5fe79d27f3
(ADAPTIVE_READ_BUFFERING): New conditional.
Kim F. Storm <storm@cua.dk>
parents:
53072
diff
changeset
|
274 static int process_output_delay_count; |
1a5fe79d27f3
(ADAPTIVE_READ_BUFFERING): New conditional.
Kim F. Storm <storm@cua.dk>
parents:
53072
diff
changeset
|
275 |
63114
6ef9e44e50d7
Improve commentary for adaptive read buffering.
Kim F. Storm <storm@cua.dk>
parents:
62604
diff
changeset
|
276 /* Non-zero if any process has non-nil read_output_skip. */ |
53472
1a5fe79d27f3
(ADAPTIVE_READ_BUFFERING): New conditional.
Kim F. Storm <storm@cua.dk>
parents:
53072
diff
changeset
|
277 |
1a5fe79d27f3
(ADAPTIVE_READ_BUFFERING): New conditional.
Kim F. Storm <storm@cua.dk>
parents:
53072
diff
changeset
|
278 static int process_output_skip; |
1a5fe79d27f3
(ADAPTIVE_READ_BUFFERING): New conditional.
Kim F. Storm <storm@cua.dk>
parents:
53072
diff
changeset
|
279 |
1a5fe79d27f3
(ADAPTIVE_READ_BUFFERING): New conditional.
Kim F. Storm <storm@cua.dk>
parents:
53072
diff
changeset
|
280 /* Non-nil means to delay reading process output to improve buffering. |
1a5fe79d27f3
(ADAPTIVE_READ_BUFFERING): New conditional.
Kim F. Storm <storm@cua.dk>
parents:
53072
diff
changeset
|
281 A value of t means that delay is reset after each send, any other |
63114
6ef9e44e50d7
Improve commentary for adaptive read buffering.
Kim F. Storm <storm@cua.dk>
parents:
62604
diff
changeset
|
282 non-nil value does not reset the delay. A value of nil disables |
6ef9e44e50d7
Improve commentary for adaptive read buffering.
Kim F. Storm <storm@cua.dk>
parents:
62604
diff
changeset
|
283 adaptive read buffering completely. */ |
53472
1a5fe79d27f3
(ADAPTIVE_READ_BUFFERING): New conditional.
Kim F. Storm <storm@cua.dk>
parents:
53072
diff
changeset
|
284 static Lisp_Object Vprocess_adaptive_read_buffering; |
1a5fe79d27f3
(ADAPTIVE_READ_BUFFERING): New conditional.
Kim F. Storm <storm@cua.dk>
parents:
53072
diff
changeset
|
285 #else |
1a5fe79d27f3
(ADAPTIVE_READ_BUFFERING): New conditional.
Kim F. Storm <storm@cua.dk>
parents:
53072
diff
changeset
|
286 #define process_output_delay_count 0 |
1a5fe79d27f3
(ADAPTIVE_READ_BUFFERING): New conditional.
Kim F. Storm <storm@cua.dk>
parents:
53072
diff
changeset
|
287 #endif |
1a5fe79d27f3
(ADAPTIVE_READ_BUFFERING): New conditional.
Kim F. Storm <storm@cua.dk>
parents:
53072
diff
changeset
|
288 |
43598
f49377cf2e3c
(Qconnect, Qfailed): New variables.
Kim F. Storm <storm@cua.dk>
parents:
42600
diff
changeset
|
289 |
10527
68b8191091a7
#include sysselect.h instead of defining things by hand.
Karl Heuer <kwzh@gnu.org>
parents:
10032
diff
changeset
|
290 #include "sysselect.h" |
578 | 291 |
64977
d26871fb1b7b
(deactivate_process, status_notify, read_process_output)
Kim F. Storm <storm@cua.dk>
parents:
64770
diff
changeset
|
292 static int keyboard_bit_set P_ ((SELECT_TYPE *)); |
d26871fb1b7b
(deactivate_process, status_notify, read_process_output)
Kim F. Storm <storm@cua.dk>
parents:
64770
diff
changeset
|
293 static void deactivate_process P_ ((Lisp_Object)); |
d26871fb1b7b
(deactivate_process, status_notify, read_process_output)
Kim F. Storm <storm@cua.dk>
parents:
64770
diff
changeset
|
294 static void status_notify P_ ((struct Lisp_Process *)); |
d26871fb1b7b
(deactivate_process, status_notify, read_process_output)
Kim F. Storm <storm@cua.dk>
parents:
64770
diff
changeset
|
295 static int read_process_output P_ ((Lisp_Object, int)); |
104257
a577041a0370
(create_pty): New function.
Nick Roberts <nickrob@snap.net.nz>
parents:
103972
diff
changeset
|
296 static void create_pty P_ ((Lisp_Object)); |
25770
3a44b5298cd5
(list_processes_1): Remove unused variables.
Gerd Moellmann <gerd@gnu.org>
parents:
25760
diff
changeset
|
297 |
13414
b035c6e41457
[HAVE_NTGUI] (POLL_FOR_INPUT): Define macro.
Geoff Voelker <voelker@cs.washington.edu>
parents:
13159
diff
changeset
|
298 /* If we support a window system, turn on the code to poll periodically |
7486
cfe4840ffde9
(Fopen_network_stream): Call bind_polling_period; later unbind the binding.
Richard M. Stallman <rms@gnu.org>
parents:
7454
diff
changeset
|
299 to detect C-g. It isn't actually used when doing interrupt input. */ |
13414
b035c6e41457
[HAVE_NTGUI] (POLL_FOR_INPUT): Define macro.
Geoff Voelker <voelker@cs.washington.edu>
parents:
13159
diff
changeset
|
300 #ifdef HAVE_WINDOW_SYSTEM |
7486
cfe4840ffde9
(Fopen_network_stream): Call bind_polling_period; later unbind the binding.
Richard M. Stallman <rms@gnu.org>
parents:
7454
diff
changeset
|
301 #define POLL_FOR_INPUT |
cfe4840ffde9
(Fopen_network_stream): Call bind_polling_period; later unbind the binding.
Richard M. Stallman <rms@gnu.org>
parents:
7454
diff
changeset
|
302 #endif |
cfe4840ffde9
(Fopen_network_stream): Call bind_polling_period; later unbind the binding.
Richard M. Stallman <rms@gnu.org>
parents:
7454
diff
changeset
|
303 |
72727
5f2a73453aa3
(inhibit_sentinels): New variable.
Richard M. Stallman <rms@gnu.org>
parents:
72277
diff
changeset
|
304 static Lisp_Object get_process (); |
5f2a73453aa3
(inhibit_sentinels): New variable.
Richard M. Stallman <rms@gnu.org>
parents:
72277
diff
changeset
|
305 static void exec_sentinel (); |
5f2a73453aa3
(inhibit_sentinels): New variable.
Richard M. Stallman <rms@gnu.org>
parents:
72277
diff
changeset
|
306 |
5f2a73453aa3
(inhibit_sentinels): New variable.
Richard M. Stallman <rms@gnu.org>
parents:
72277
diff
changeset
|
307 extern int timers_run; |
5f2a73453aa3
(inhibit_sentinels): New variable.
Richard M. Stallman <rms@gnu.org>
parents:
72277
diff
changeset
|
308 |
9686
cd788aa8cb2a
Handle multiple keyboard input descriptors.
Richard M. Stallman <rms@gnu.org>
parents:
9334
diff
changeset
|
309 /* Mask of bits indicating the descriptors that we wait for input on. */ |
578 | 310 |
4682
c4d471244116
(keyboard_descriptor): New variable.
Richard M. Stallman <rms@gnu.org>
parents:
4639
diff
changeset
|
311 static SELECT_TYPE input_wait_mask; |
c4d471244116
(keyboard_descriptor): New variable.
Richard M. Stallman <rms@gnu.org>
parents:
4639
diff
changeset
|
312 |
80984
9247e9d47488
(gpm_wait_mask, max_gpm_desc): New variables.
Nick Roberts <nickrob@snap.net.nz>
parents:
77462
diff
changeset
|
313 /* Mask that excludes keyboard input descriptor(s). */ |
9686
cd788aa8cb2a
Handle multiple keyboard input descriptors.
Richard M. Stallman <rms@gnu.org>
parents:
9334
diff
changeset
|
314 |
cd788aa8cb2a
Handle multiple keyboard input descriptors.
Richard M. Stallman <rms@gnu.org>
parents:
9334
diff
changeset
|
315 static SELECT_TYPE non_keyboard_wait_mask; |
cd788aa8cb2a
Handle multiple keyboard input descriptors.
Richard M. Stallman <rms@gnu.org>
parents:
9334
diff
changeset
|
316 |
80984
9247e9d47488
(gpm_wait_mask, max_gpm_desc): New variables.
Nick Roberts <nickrob@snap.net.nz>
parents:
77462
diff
changeset
|
317 /* Mask that excludes process input descriptor(s). */ |
17224
dd2545e79add
(wait_reading_process_input): If wait_for_cell,
Richard M. Stallman <rms@gnu.org>
parents:
17110
diff
changeset
|
318 |
dd2545e79add
(wait_reading_process_input): If wait_for_cell,
Richard M. Stallman <rms@gnu.org>
parents:
17110
diff
changeset
|
319 static SELECT_TYPE non_process_wait_mask; |
dd2545e79add
(wait_reading_process_input): If wait_for_cell,
Richard M. Stallman <rms@gnu.org>
parents:
17110
diff
changeset
|
320 |
80984
9247e9d47488
(gpm_wait_mask, max_gpm_desc): New variables.
Nick Roberts <nickrob@snap.net.nz>
parents:
77462
diff
changeset
|
321 /* Mask for the gpm mouse input descriptor. */ |
9247e9d47488
(gpm_wait_mask, max_gpm_desc): New variables.
Nick Roberts <nickrob@snap.net.nz>
parents:
77462
diff
changeset
|
322 |
9247e9d47488
(gpm_wait_mask, max_gpm_desc): New variables.
Nick Roberts <nickrob@snap.net.nz>
parents:
77462
diff
changeset
|
323 static SELECT_TYPE gpm_wait_mask; |
9247e9d47488
(gpm_wait_mask, max_gpm_desc): New variables.
Nick Roberts <nickrob@snap.net.nz>
parents:
77462
diff
changeset
|
324 |
57840
8abbe69dfdb2
(connect_wait_mask, num_pending_connects): Only
Kim F. Storm <storm@cua.dk>
parents:
57287
diff
changeset
|
325 #ifdef NON_BLOCKING_CONNECT |
43598
f49377cf2e3c
(Qconnect, Qfailed): New variables.
Kim F. Storm <storm@cua.dk>
parents:
42600
diff
changeset
|
326 /* Mask of bits indicating the descriptors that we wait for connect to |
f49377cf2e3c
(Qconnect, Qfailed): New variables.
Kim F. Storm <storm@cua.dk>
parents:
42600
diff
changeset
|
327 complete on. Once they complete, they are removed from this mask |
f49377cf2e3c
(Qconnect, Qfailed): New variables.
Kim F. Storm <storm@cua.dk>
parents:
42600
diff
changeset
|
328 and added to the input_wait_mask and non_keyboard_wait_mask. */ |
f49377cf2e3c
(Qconnect, Qfailed): New variables.
Kim F. Storm <storm@cua.dk>
parents:
42600
diff
changeset
|
329 |
f49377cf2e3c
(Qconnect, Qfailed): New variables.
Kim F. Storm <storm@cua.dk>
parents:
42600
diff
changeset
|
330 static SELECT_TYPE connect_wait_mask; |
f49377cf2e3c
(Qconnect, Qfailed): New variables.
Kim F. Storm <storm@cua.dk>
parents:
42600
diff
changeset
|
331 |
f49377cf2e3c
(Qconnect, Qfailed): New variables.
Kim F. Storm <storm@cua.dk>
parents:
42600
diff
changeset
|
332 /* Number of bits set in connect_wait_mask. */ |
f49377cf2e3c
(Qconnect, Qfailed): New variables.
Kim F. Storm <storm@cua.dk>
parents:
42600
diff
changeset
|
333 static int num_pending_connects; |
f49377cf2e3c
(Qconnect, Qfailed): New variables.
Kim F. Storm <storm@cua.dk>
parents:
42600
diff
changeset
|
334 |
57840
8abbe69dfdb2
(connect_wait_mask, num_pending_connects): Only
Kim F. Storm <storm@cua.dk>
parents:
57287
diff
changeset
|
335 #define IF_NON_BLOCKING_CONNECT(s) s |
8abbe69dfdb2
(connect_wait_mask, num_pending_connects): Only
Kim F. Storm <storm@cua.dk>
parents:
57287
diff
changeset
|
336 #else |
8abbe69dfdb2
(connect_wait_mask, num_pending_connects): Only
Kim F. Storm <storm@cua.dk>
parents:
57287
diff
changeset
|
337 #define IF_NON_BLOCKING_CONNECT(s) |
8abbe69dfdb2
(connect_wait_mask, num_pending_connects): Only
Kim F. Storm <storm@cua.dk>
parents:
57287
diff
changeset
|
338 #endif |
8abbe69dfdb2
(connect_wait_mask, num_pending_connects): Only
Kim F. Storm <storm@cua.dk>
parents:
57287
diff
changeset
|
339 |
7044
7032d07f5ad9
(max_process_desc): New variable.
Richard M. Stallman <rms@gnu.org>
parents:
7013
diff
changeset
|
340 /* The largest descriptor currently in use for a process object. */ |
7032d07f5ad9
(max_process_desc): New variable.
Richard M. Stallman <rms@gnu.org>
parents:
7013
diff
changeset
|
341 static int max_process_desc; |
7032d07f5ad9
(max_process_desc): New variable.
Richard M. Stallman <rms@gnu.org>
parents:
7013
diff
changeset
|
342 |
9686
cd788aa8cb2a
Handle multiple keyboard input descriptors.
Richard M. Stallman <rms@gnu.org>
parents:
9334
diff
changeset
|
343 /* The largest descriptor currently in use for keyboard input. */ |
cd788aa8cb2a
Handle multiple keyboard input descriptors.
Richard M. Stallman <rms@gnu.org>
parents:
9334
diff
changeset
|
344 static int max_keyboard_desc; |
4682
c4d471244116
(keyboard_descriptor): New variable.
Richard M. Stallman <rms@gnu.org>
parents:
4639
diff
changeset
|
345 |
80984
9247e9d47488
(gpm_wait_mask, max_gpm_desc): New variables.
Nick Roberts <nickrob@snap.net.nz>
parents:
77462
diff
changeset
|
346 /* The largest descriptor currently in use for gpm mouse input. */ |
9247e9d47488
(gpm_wait_mask, max_gpm_desc): New variables.
Nick Roberts <nickrob@snap.net.nz>
parents:
77462
diff
changeset
|
347 static int max_gpm_desc; |
9247e9d47488
(gpm_wait_mask, max_gpm_desc): New variables.
Nick Roberts <nickrob@snap.net.nz>
parents:
77462
diff
changeset
|
348 |
4682
c4d471244116
(keyboard_descriptor): New variable.
Richard M. Stallman <rms@gnu.org>
parents:
4639
diff
changeset
|
349 /* Nonzero means delete a process right away if it exits. */ |
c4d471244116
(keyboard_descriptor): New variable.
Richard M. Stallman <rms@gnu.org>
parents:
4639
diff
changeset
|
350 static int delete_exited_processes; |
578 | 351 |
352 /* Indexed by descriptor, gives the process (if any) for that descriptor */ | |
6164
d047d5a48e0e
(chan_process, Vprocess_alist): No longer static.
Richard M. Stallman <rms@gnu.org>
parents:
6158
diff
changeset
|
353 Lisp_Object chan_process[MAXDESC]; |
578 | 354 |
355 /* Alist of elements (NAME . PROCESS) */ | |
6164
d047d5a48e0e
(chan_process, Vprocess_alist): No longer static.
Richard M. Stallman <rms@gnu.org>
parents:
6158
diff
changeset
|
356 Lisp_Object Vprocess_alist; |
578 | 357 |
358 /* Buffered-ahead input char from process, indexed by channel. | |
359 -1 means empty (no char is buffered). | |
360 Used on sys V where the only way to tell if there is any | |
361 output from the process is to read at least one char. | |
362 Always -1 on systems that support FIONREAD. */ | |
363 | |
9793
28267fcc61be
Use macros IS_ANY_SEP, IS_DIRECTORY_SEP,
Richard M. Stallman <rms@gnu.org>
parents:
9705
diff
changeset
|
364 /* Don't make static; need to access externally. */ |
28267fcc61be
Use macros IS_ANY_SEP, IS_DIRECTORY_SEP,
Richard M. Stallman <rms@gnu.org>
parents:
9705
diff
changeset
|
365 int proc_buffered_char[MAXDESC]; |
4682
c4d471244116
(keyboard_descriptor): New variable.
Richard M. Stallman <rms@gnu.org>
parents:
4639
diff
changeset
|
366 |
17041
b61cbe595be5
Include charset.h and coding.h.
Karl Heuer <kwzh@gnu.org>
parents:
16780
diff
changeset
|
367 /* Table of `struct coding-system' for each process. */ |
17110
3a348cbb354f
(Fstart_process, Fopen_network_stream): Do not perform
Kenichi Handa <handa@m17n.org>
parents:
17041
diff
changeset
|
368 static struct coding_system *proc_decode_coding_system[MAXDESC]; |
3a348cbb354f
(Fstart_process, Fopen_network_stream): Do not perform
Kenichi Handa <handa@m17n.org>
parents:
17041
diff
changeset
|
369 static struct coding_system *proc_encode_coding_system[MAXDESC]; |
17041
b61cbe595be5
Include charset.h and coding.h.
Karl Heuer <kwzh@gnu.org>
parents:
16780
diff
changeset
|
370 |
43968
7ec801358b7e
(Qlocal, QCname, QCbuffer, QChost, QCservice, QCfamily)
Kim F. Storm <storm@cua.dk>
parents:
43642
diff
changeset
|
371 #ifdef DATAGRAM_SOCKETS |
7ec801358b7e
(Qlocal, QCname, QCbuffer, QChost, QCservice, QCfamily)
Kim F. Storm <storm@cua.dk>
parents:
43642
diff
changeset
|
372 /* Table of `partner address' for datagram sockets. */ |
7ec801358b7e
(Qlocal, QCname, QCbuffer, QChost, QCservice, QCfamily)
Kim F. Storm <storm@cua.dk>
parents:
43642
diff
changeset
|
373 struct sockaddr_and_len { |
7ec801358b7e
(Qlocal, QCname, QCbuffer, QChost, QCservice, QCfamily)
Kim F. Storm <storm@cua.dk>
parents:
43642
diff
changeset
|
374 struct sockaddr *sa; |
7ec801358b7e
(Qlocal, QCname, QCbuffer, QChost, QCservice, QCfamily)
Kim F. Storm <storm@cua.dk>
parents:
43642
diff
changeset
|
375 int len; |
7ec801358b7e
(Qlocal, QCname, QCbuffer, QChost, QCservice, QCfamily)
Kim F. Storm <storm@cua.dk>
parents:
43642
diff
changeset
|
376 } datagram_address[MAXDESC]; |
7ec801358b7e
(Qlocal, QCname, QCbuffer, QChost, QCservice, QCfamily)
Kim F. Storm <storm@cua.dk>
parents:
43642
diff
changeset
|
377 #define DATAGRAM_CHAN_P(chan) (datagram_address[chan].sa != 0) |
81826
077a1e6fd3f2
(struct Lisp_Process): Turn slots infd, outfd, kill_without_query, pty_flag,
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
80984
diff
changeset
|
378 #define DATAGRAM_CONN_P(proc) (PROCESSP (proc) && datagram_address[XPROCESS (proc)->infd].sa != 0) |
43968
7ec801358b7e
(Qlocal, QCname, QCbuffer, QChost, QCservice, QCfamily)
Kim F. Storm <storm@cua.dk>
parents:
43642
diff
changeset
|
379 #else |
7ec801358b7e
(Qlocal, QCname, QCbuffer, QChost, QCservice, QCfamily)
Kim F. Storm <storm@cua.dk>
parents:
43642
diff
changeset
|
380 #define DATAGRAM_CHAN_P(chan) (0) |
7ec801358b7e
(Qlocal, QCname, QCbuffer, QChost, QCservice, QCfamily)
Kim F. Storm <storm@cua.dk>
parents:
43642
diff
changeset
|
381 #define DATAGRAM_CONN_P(proc) (0) |
7ec801358b7e
(Qlocal, QCname, QCbuffer, QChost, QCservice, QCfamily)
Kim F. Storm <storm@cua.dk>
parents:
43642
diff
changeset
|
382 #endif |
7ec801358b7e
(Qlocal, QCname, QCbuffer, QChost, QCservice, QCfamily)
Kim F. Storm <storm@cua.dk>
parents:
43642
diff
changeset
|
383 |
6158 | 384 /* Maximum number of bytes to send to a pty without an eof. */ |
385 static int pty_max_bytes; | |
9030
b14532c71632
(exec_sentinel_error_handler): New function.
Richard M. Stallman <rms@gnu.org>
parents:
8570
diff
changeset
|
386 |
72727
5f2a73453aa3
(inhibit_sentinels): New variable.
Richard M. Stallman <rms@gnu.org>
parents:
72277
diff
changeset
|
387 /* Nonzero means don't run process sentinels. This is used |
5f2a73453aa3
(inhibit_sentinels): New variable.
Richard M. Stallman <rms@gnu.org>
parents:
72277
diff
changeset
|
388 when exiting. */ |
5f2a73453aa3
(inhibit_sentinels): New variable.
Richard M. Stallman <rms@gnu.org>
parents:
72277
diff
changeset
|
389 int inhibit_sentinels; |
5f2a73453aa3
(inhibit_sentinels): New variable.
Richard M. Stallman <rms@gnu.org>
parents:
72277
diff
changeset
|
390 |
11609
3b2dacb1bfe9
(create_process): Don't reference pty_name if !HAVE_PTYS.
Karl Heuer <kwzh@gnu.org>
parents:
11514
diff
changeset
|
391 #ifdef HAVE_PTYS |
48088 | 392 #ifdef HAVE_PTY_H |
393 #include <pty.h> | |
394 #endif | |
11609
3b2dacb1bfe9
(create_process): Don't reference pty_name if !HAVE_PTYS.
Karl Heuer <kwzh@gnu.org>
parents:
11514
diff
changeset
|
395 /* The file name of the pty opened by allocate_pty. */ |
9030
b14532c71632
(exec_sentinel_error_handler): New function.
Richard M. Stallman <rms@gnu.org>
parents:
8570
diff
changeset
|
396 |
b14532c71632
(exec_sentinel_error_handler): New function.
Richard M. Stallman <rms@gnu.org>
parents:
8570
diff
changeset
|
397 static char pty_name[24]; |
11609
3b2dacb1bfe9
(create_process): Don't reference pty_name if !HAVE_PTYS.
Karl Heuer <kwzh@gnu.org>
parents:
11514
diff
changeset
|
398 #endif |
578 | 399 |
400 /* Compute the Lisp form of the process status, p->status, from | |
401 the numeric status that was returned by `wait'. */ | |
402 | |
96620
3bea8ede5bd0
* syswait.h: Remove old if 0 code. Do not define WAITTYPE, it was
Dan Nicolaescu <dann@ics.uci.edu>
parents:
96361
diff
changeset
|
403 static Lisp_Object status_convert (int); |
64977
d26871fb1b7b
(deactivate_process, status_notify, read_process_output)
Kim F. Storm <storm@cua.dk>
parents:
64770
diff
changeset
|
404 |
d26871fb1b7b
(deactivate_process, status_notify, read_process_output)
Kim F. Storm <storm@cua.dk>
parents:
64770
diff
changeset
|
405 static void |
578 | 406 update_status (p) |
407 struct Lisp_Process *p; | |
408 { | |
69873
2d844bbbccd4
* process.h (struct Lisp_Process): Replace Lisp_Objects `pid',
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
69634
diff
changeset
|
409 eassert (p->raw_status_new); |
96620
3bea8ede5bd0
* syswait.h: Remove old if 0 code. Do not define WAITTYPE, it was
Dan Nicolaescu <dann@ics.uci.edu>
parents:
96361
diff
changeset
|
410 p->status = status_convert (p->raw_status); |
69873
2d844bbbccd4
* process.h (struct Lisp_Process): Replace Lisp_Objects `pid',
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
69634
diff
changeset
|
411 p->raw_status_new = 0; |
578 | 412 } |
413 | |
49600
23a1cea22d13
Trailing whitespace deleted.
Juanma Barranquero <lekktu@gmail.com>
parents:
49281
diff
changeset
|
414 /* Convert a process status word in Unix format to |
578 | 415 the list that we use internally. */ |
416 | |
64977
d26871fb1b7b
(deactivate_process, status_notify, read_process_output)
Kim F. Storm <storm@cua.dk>
parents:
64770
diff
changeset
|
417 static Lisp_Object |
96620
3bea8ede5bd0
* syswait.h: Remove old if 0 code. Do not define WAITTYPE, it was
Dan Nicolaescu <dann@ics.uci.edu>
parents:
96361
diff
changeset
|
418 status_convert (int w) |
578 | 419 { |
420 if (WIFSTOPPED (w)) | |
421 return Fcons (Qstop, Fcons (make_number (WSTOPSIG (w)), Qnil)); | |
422 else if (WIFEXITED (w)) | |
423 return Fcons (Qexit, Fcons (make_number (WRETCODE (w)), | |
424 WCOREDUMP (w) ? Qt : Qnil)); | |
425 else if (WIFSIGNALED (w)) | |
426 return Fcons (Qsignal, Fcons (make_number (WTERMSIG (w)), | |
427 WCOREDUMP (w) ? Qt : Qnil)); | |
428 else | |
429 return Qrun; | |
430 } | |
431 | |
432 /* Given a status-list, extract the three pieces of information | |
433 and store them individually through the three pointers. */ | |
434 | |
64977
d26871fb1b7b
(deactivate_process, status_notify, read_process_output)
Kim F. Storm <storm@cua.dk>
parents:
64770
diff
changeset
|
435 static void |
578 | 436 decode_status (l, symbol, code, coredump) |
437 Lisp_Object l; | |
438 Lisp_Object *symbol; | |
439 int *code; | |
440 int *coredump; | |
441 { | |
442 Lisp_Object tem; | |
443 | |
9115
59bc2d010b5f
(decode_status, Fprocessp, Fget_process, Fget_buffer_process, Fprocess_status,
Karl Heuer <kwzh@gnu.org>
parents:
9034
diff
changeset
|
444 if (SYMBOLP (l)) |
578 | 445 { |
446 *symbol = l; | |
447 *code = 0; | |
448 *coredump = 0; | |
449 } | |
450 else | |
451 { | |
25645
a14111a2a100
Use XCAR, XCDR, XFLOAT_DATA instead of explicit member access.
Ken Raeburn <raeburn@raeburn.org>
parents:
25356
diff
changeset
|
452 *symbol = XCAR (l); |
a14111a2a100
Use XCAR, XCDR, XFLOAT_DATA instead of explicit member access.
Ken Raeburn <raeburn@raeburn.org>
parents:
25356
diff
changeset
|
453 tem = XCDR (l); |
a14111a2a100
Use XCAR, XCDR, XFLOAT_DATA instead of explicit member access.
Ken Raeburn <raeburn@raeburn.org>
parents:
25356
diff
changeset
|
454 *code = XFASTINT (XCAR (tem)); |
a14111a2a100
Use XCAR, XCDR, XFLOAT_DATA instead of explicit member access.
Ken Raeburn <raeburn@raeburn.org>
parents:
25356
diff
changeset
|
455 tem = XCDR (tem); |
578 | 456 *coredump = !NILP (tem); |
457 } | |
458 } | |
459 | |
460 /* Return a string describing a process status list. */ | |
461 | |
55962
8979bc3ade70
(Fdelete_process): Undo 2004-05-28 change.
Kim F. Storm <storm@cua.dk>
parents:
55810
diff
changeset
|
462 static Lisp_Object |
8979bc3ade70
(Fdelete_process): Undo 2004-05-28 change.
Kim F. Storm <storm@cua.dk>
parents:
55810
diff
changeset
|
463 status_message (p) |
8979bc3ade70
(Fdelete_process): Undo 2004-05-28 change.
Kim F. Storm <storm@cua.dk>
parents:
55810
diff
changeset
|
464 struct Lisp_Process *p; |
578 | 465 { |
55962
8979bc3ade70
(Fdelete_process): Undo 2004-05-28 change.
Kim F. Storm <storm@cua.dk>
parents:
55810
diff
changeset
|
466 Lisp_Object status = p->status; |
578 | 467 Lisp_Object symbol; |
468 int code, coredump; | |
469 Lisp_Object string, string2; | |
470 | |
471 decode_status (status, &symbol, &code, &coredump); | |
472 | |
473 if (EQ (symbol, Qsignal) || EQ (symbol, Qstop)) | |
474 { | |
26088
b7aa6ac26872
Add support for large files, 64-bit Solaris, system locale codings.
Paul Eggert <eggert@twinsun.com>
parents:
26019
diff
changeset
|
475 char *signame; |
26526
b7438760079b
* callproc.c (strerror): Remove decl.
Paul Eggert <eggert@twinsun.com>
parents:
26313
diff
changeset
|
476 synchronize_system_messages_locale (); |
26088
b7aa6ac26872
Add support for large files, 64-bit Solaris, system locale codings.
Paul Eggert <eggert@twinsun.com>
parents:
26019
diff
changeset
|
477 signame = strsignal (code); |
5579
466bc8ef8e21
(sigchld_handler, status_message): Handle a NULL in sys_siglist.
Richard M. Stallman <rms@gnu.org>
parents:
5561
diff
changeset
|
478 if (signame == 0) |
103432
c849cd055fab
(status_message): Fix previous change. Be sure to
Kenichi Handa <handa@m17n.org>
parents:
103363
diff
changeset
|
479 string = build_string ("unknown"); |
c849cd055fab
(status_message): Fix previous change. Be sure to
Kenichi Handa <handa@m17n.org>
parents:
103363
diff
changeset
|
480 else |
c849cd055fab
(status_message): Fix previous change. Be sure to
Kenichi Handa <handa@m17n.org>
parents:
103363
diff
changeset
|
481 { |
c849cd055fab
(status_message): Fix previous change. Be sure to
Kenichi Handa <handa@m17n.org>
parents:
103363
diff
changeset
|
482 int c1, c2; |
c849cd055fab
(status_message): Fix previous change. Be sure to
Kenichi Handa <handa@m17n.org>
parents:
103363
diff
changeset
|
483 |
c849cd055fab
(status_message): Fix previous change. Be sure to
Kenichi Handa <handa@m17n.org>
parents:
103363
diff
changeset
|
484 string = make_unibyte_string (signame, strlen (signame)); |
c849cd055fab
(status_message): Fix previous change. Be sure to
Kenichi Handa <handa@m17n.org>
parents:
103363
diff
changeset
|
485 if (! NILP (Vlocale_coding_system)) |
c849cd055fab
(status_message): Fix previous change. Be sure to
Kenichi Handa <handa@m17n.org>
parents:
103363
diff
changeset
|
486 string = (code_convert_string_norecord |
c849cd055fab
(status_message): Fix previous change. Be sure to
Kenichi Handa <handa@m17n.org>
parents:
103363
diff
changeset
|
487 (string, Vlocale_coding_system, 0)); |
106185
f2cea199b0c4
* character.h (STRING_CHAR, STRING_CHAR_AND_LENGTH): Remove
Andreas Schwab <schwab@linux-m68k.org>
parents:
105959
diff
changeset
|
488 c1 = STRING_CHAR ((char *) SDATA (string)); |
103432
c849cd055fab
(status_message): Fix previous change. Be sure to
Kenichi Handa <handa@m17n.org>
parents:
103363
diff
changeset
|
489 c2 = DOWNCASE (c1); |
c849cd055fab
(status_message): Fix previous change. Be sure to
Kenichi Handa <handa@m17n.org>
parents:
103363
diff
changeset
|
490 if (c1 != c2) |
103496
e13621e7689e
(status_message): Pass Faset index argument as a lisp object, so as to work
Ken Raeburn <raeburn@raeburn.org>
parents:
103432
diff
changeset
|
491 Faset (string, make_number (0), make_number (c2)); |
103432
c849cd055fab
(status_message): Fix previous change. Be sure to
Kenichi Handa <handa@m17n.org>
parents:
103363
diff
changeset
|
492 } |
578 | 493 string2 = build_string (coredump ? " (core dumped)\n" : "\n"); |
494 return concat2 (string, string2); | |
495 } | |
496 else if (EQ (symbol, Qexit)) | |
497 { | |
55962
8979bc3ade70
(Fdelete_process): Undo 2004-05-28 change.
Kim F. Storm <storm@cua.dk>
parents:
55810
diff
changeset
|
498 if (NETCONN1_P (p)) |
8979bc3ade70
(Fdelete_process): Undo 2004-05-28 change.
Kim F. Storm <storm@cua.dk>
parents:
55810
diff
changeset
|
499 return build_string (code == 0 ? "deleted\n" : "connection broken by remote peer\n"); |
578 | 500 if (code == 0) |
501 return build_string ("finished\n"); | |
2429
96b55f2f19cd
Rename int-to-string to number-to-string, since it can handle
Jim Blandy <jimb@redhat.com>
parents:
2357
diff
changeset
|
502 string = Fnumber_to_string (make_number (code)); |
578 | 503 string2 = build_string (coredump ? " (core dumped)\n" : "\n"); |
43968
7ec801358b7e
(Qlocal, QCname, QCbuffer, QChost, QCservice, QCfamily)
Kim F. Storm <storm@cua.dk>
parents:
43642
diff
changeset
|
504 return concat3 (build_string ("exited abnormally with code "), |
7ec801358b7e
(Qlocal, QCname, QCbuffer, QChost, QCservice, QCfamily)
Kim F. Storm <storm@cua.dk>
parents:
43642
diff
changeset
|
505 string, string2); |
578 | 506 } |
43598
f49377cf2e3c
(Qconnect, Qfailed): New variables.
Kim F. Storm <storm@cua.dk>
parents:
42600
diff
changeset
|
507 else if (EQ (symbol, Qfailed)) |
f49377cf2e3c
(Qconnect, Qfailed): New variables.
Kim F. Storm <storm@cua.dk>
parents:
42600
diff
changeset
|
508 { |
f49377cf2e3c
(Qconnect, Qfailed): New variables.
Kim F. Storm <storm@cua.dk>
parents:
42600
diff
changeset
|
509 string = Fnumber_to_string (make_number (code)); |
f49377cf2e3c
(Qconnect, Qfailed): New variables.
Kim F. Storm <storm@cua.dk>
parents:
42600
diff
changeset
|
510 string2 = build_string ("\n"); |
43968
7ec801358b7e
(Qlocal, QCname, QCbuffer, QChost, QCservice, QCfamily)
Kim F. Storm <storm@cua.dk>
parents:
43642
diff
changeset
|
511 return concat3 (build_string ("failed with code "), |
7ec801358b7e
(Qlocal, QCname, QCbuffer, QChost, QCservice, QCfamily)
Kim F. Storm <storm@cua.dk>
parents:
43642
diff
changeset
|
512 string, string2); |
43598
f49377cf2e3c
(Qconnect, Qfailed): New variables.
Kim F. Storm <storm@cua.dk>
parents:
42600
diff
changeset
|
513 } |
578 | 514 else |
515 return Fcopy_sequence (Fsymbol_name (symbol)); | |
516 } | |
517 | |
518 #ifdef HAVE_PTYS | |
519 | |
11609
3b2dacb1bfe9
(create_process): Don't reference pty_name if !HAVE_PTYS.
Karl Heuer <kwzh@gnu.org>
parents:
11514
diff
changeset
|
520 /* Open an available pty, returning a file descriptor. |
3b2dacb1bfe9
(create_process): Don't reference pty_name if !HAVE_PTYS.
Karl Heuer <kwzh@gnu.org>
parents:
11514
diff
changeset
|
521 Return -1 on failure. |
3b2dacb1bfe9
(create_process): Don't reference pty_name if !HAVE_PTYS.
Karl Heuer <kwzh@gnu.org>
parents:
11514
diff
changeset
|
522 The file name of the terminal corresponding to the pty |
3b2dacb1bfe9
(create_process): Don't reference pty_name if !HAVE_PTYS.
Karl Heuer <kwzh@gnu.org>
parents:
11514
diff
changeset
|
523 is left in the variable pty_name. */ |
3b2dacb1bfe9
(create_process): Don't reference pty_name if !HAVE_PTYS.
Karl Heuer <kwzh@gnu.org>
parents:
11514
diff
changeset
|
524 |
64977
d26871fb1b7b
(deactivate_process, status_notify, read_process_output)
Kim F. Storm <storm@cua.dk>
parents:
64770
diff
changeset
|
525 static int |
578 | 526 allocate_pty () |
527 { | |
21514 | 528 register int c, i; |
578 | 529 int fd; |
530 | |
531 #ifdef PTY_ITERATION | |
532 PTY_ITERATION | |
533 #else | |
534 for (c = FIRST_PTY_LETTER; c <= 'z'; c++) | |
535 for (i = 0; i < 16; i++) | |
536 #endif | |
537 { | |
51473
58061223557c
(allocate_pty): Revert part of the previous patch.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
51233
diff
changeset
|
538 struct stat stb; /* Used in some PTY_OPEN. */ |
578 | 539 #ifdef PTY_NAME_SPRINTF |
540 PTY_NAME_SPRINTF | |
541 #else | |
542 sprintf (pty_name, "/dev/pty%c%x", c, i); | |
543 #endif /* no PTY_NAME_SPRINTF */ | |
544 | |
822
c6e94e13926c
*** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents:
808
diff
changeset
|
545 #ifdef PTY_OPEN |
c6e94e13926c
*** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents:
808
diff
changeset
|
546 PTY_OPEN; |
c6e94e13926c
*** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents:
808
diff
changeset
|
547 #else /* no PTY_OPEN */ |
51233
41ed31a0fd49
(allocate_pty): Remove `unused var stb' and
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
51046
diff
changeset
|
548 { |
41ed31a0fd49
(allocate_pty): Remove `unused var stb' and
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
51046
diff
changeset
|
549 { /* Some systems name their pseudoterminals so that there are gaps in |
41ed31a0fd49
(allocate_pty): Remove `unused var stb' and
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
51046
diff
changeset
|
550 the usual sequence - for example, on HP9000/S700 systems, there |
41ed31a0fd49
(allocate_pty): Remove `unused var stb' and
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
51046
diff
changeset
|
551 are no pseudoterminals with names ending in 'f'. So we wait for |
41ed31a0fd49
(allocate_pty): Remove `unused var stb' and
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
51046
diff
changeset
|
552 three failures in a row before deciding that we've reached the |
41ed31a0fd49
(allocate_pty): Remove `unused var stb' and
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
51046
diff
changeset
|
553 end of the ptys. */ |
41ed31a0fd49
(allocate_pty): Remove `unused var stb' and
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
51046
diff
changeset
|
554 int failed_count = 0; |
55444
976d03256b41
(Fwaiting_for_user_input_p, Fmake_network_process)
Juanma Barranquero <lekktu@gmail.com>
parents:
53835
diff
changeset
|
555 |
51233
41ed31a0fd49
(allocate_pty): Remove `unused var stb' and
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
51046
diff
changeset
|
556 if (stat (pty_name, &stb) < 0) |
41ed31a0fd49
(allocate_pty): Remove `unused var stb' and
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
51046
diff
changeset
|
557 { |
41ed31a0fd49
(allocate_pty): Remove `unused var stb' and
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
51046
diff
changeset
|
558 failed_count++; |
41ed31a0fd49
(allocate_pty): Remove `unused var stb' and
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
51046
diff
changeset
|
559 if (failed_count >= 3) |
41ed31a0fd49
(allocate_pty): Remove `unused var stb' and
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
51046
diff
changeset
|
560 return -1; |
41ed31a0fd49
(allocate_pty): Remove `unused var stb' and
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
51046
diff
changeset
|
561 } |
41ed31a0fd49
(allocate_pty): Remove `unused var stb' and
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
51046
diff
changeset
|
562 else |
41ed31a0fd49
(allocate_pty): Remove `unused var stb' and
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
51046
diff
changeset
|
563 failed_count = 0; |
624 | 564 } |
51233
41ed31a0fd49
(allocate_pty): Remove `unused var stb' and
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
51046
diff
changeset
|
565 # ifdef O_NONBLOCK |
41ed31a0fd49
(allocate_pty): Remove `unused var stb' and
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
51046
diff
changeset
|
566 fd = emacs_open (pty_name, O_RDWR | O_NONBLOCK, 0); |
41ed31a0fd49
(allocate_pty): Remove `unused var stb' and
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
51046
diff
changeset
|
567 # else |
41ed31a0fd49
(allocate_pty): Remove `unused var stb' and
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
51046
diff
changeset
|
568 fd = emacs_open (pty_name, O_RDWR | O_NDELAY, 0); |
41ed31a0fd49
(allocate_pty): Remove `unused var stb' and
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
51046
diff
changeset
|
569 # endif |
41ed31a0fd49
(allocate_pty): Remove `unused var stb' and
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
51046
diff
changeset
|
570 } |
822
c6e94e13926c
*** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents:
808
diff
changeset
|
571 #endif /* no PTY_OPEN */ |
578 | 572 |
573 if (fd >= 0) | |
574 { | |
575 /* check to make certain that both sides are available | |
576 this avoids a nasty yet stupid bug in rlogins */ | |
577 #ifdef PTY_TTY_NAME_SPRINTF | |
578 PTY_TTY_NAME_SPRINTF | |
579 #else | |
100824
e5aa6a069f40
(conv_sockaddr_to_lisp): Add workaround for
Andreas Schwab <schwab@suse.de>
parents:
100573
diff
changeset
|
580 sprintf (pty_name, "/dev/tty%c%x", c, i); |
578 | 581 #endif /* no PTY_TTY_NAME_SPRINTF */ |
582 if (access (pty_name, 6) != 0) | |
583 { | |
26088
b7aa6ac26872
Add support for large files, 64-bit Solaris, system locale codings.
Paul Eggert <eggert@twinsun.com>
parents:
26019
diff
changeset
|
584 emacs_close (fd); |
96732
1e0b67e40d48
* systty.h: Remove code for Aix on 386, unsupported platform.
Dan Nicolaescu <dann@ics.uci.edu>
parents:
96675
diff
changeset
|
585 # ifndef __sgi |
578 | 586 continue; |
51233
41ed31a0fd49
(allocate_pty): Remove `unused var stb' and
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
51046
diff
changeset
|
587 # else |
578 | 588 return -1; |
96732
1e0b67e40d48
* systty.h: Remove code for Aix on 386, unsupported platform.
Dan Nicolaescu <dann@ics.uci.edu>
parents:
96675
diff
changeset
|
589 # endif /* __sgi */ |
578 | 590 } |
591 setup_pty (fd); | |
592 return fd; | |
593 } | |
594 } | |
595 return -1; | |
596 } | |
597 #endif /* HAVE_PTYS */ | |
598 | |
64977
d26871fb1b7b
(deactivate_process, status_notify, read_process_output)
Kim F. Storm <storm@cua.dk>
parents:
64770
diff
changeset
|
599 static Lisp_Object |
578 | 600 make_process (name) |
601 Lisp_Object name; | |
602 { | |
603 register Lisp_Object val, tem, name1; | |
604 register struct Lisp_Process *p; | |
605 char suffix[10]; | |
606 register int i; | |
607 | |
36434
40cfe4976f04
(make_process): Use allocate_process.
Gerd Moellmann <gerd@gnu.org>
parents:
35336
diff
changeset
|
608 p = allocate_process (); |
9969
007d93b04e1f
(make_process): Use allocate_vectorlike and VECSIZE.
Karl Heuer <kwzh@gnu.org>
parents:
9952
diff
changeset
|
609 |
81826
077a1e6fd3f2
(struct Lisp_Process): Turn slots infd, outfd, kill_without_query, pty_flag,
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
80984
diff
changeset
|
610 p->infd = -1; |
077a1e6fd3f2
(struct Lisp_Process): Turn slots infd, outfd, kill_without_query, pty_flag,
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
80984
diff
changeset
|
611 p->outfd = -1; |
077a1e6fd3f2
(struct Lisp_Process): Turn slots infd, outfd, kill_without_query, pty_flag,
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
80984
diff
changeset
|
612 p->tick = 0; |
077a1e6fd3f2
(struct Lisp_Process): Turn slots infd, outfd, kill_without_query, pty_flag,
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
80984
diff
changeset
|
613 p->update_tick = 0; |
69873
2d844bbbccd4
* process.h (struct Lisp_Process): Replace Lisp_Objects `pid',
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
69634
diff
changeset
|
614 p->pid = 0; |
87470 | 615 p->pty_flag = 0; |
69873
2d844bbbccd4
* process.h (struct Lisp_Process): Replace Lisp_Objects `pid',
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
69634
diff
changeset
|
616 p->raw_status_new = 0; |
578 | 617 p->status = Qrun; |
618 p->mark = Fmake_marker (); | |
97498
e4a1b306a650
(make_process): Initialize kill_without_query struct member.
Chong Yidong <cyd@stupidchicken.com>
parents:
97405
diff
changeset
|
619 p->kill_without_query = 0; |
578 | 620 |
53472
1a5fe79d27f3
(ADAPTIVE_READ_BUFFERING): New conditional.
Kim F. Storm <storm@cua.dk>
parents:
53072
diff
changeset
|
621 #ifdef ADAPTIVE_READ_BUFFERING |
81826
077a1e6fd3f2
(struct Lisp_Process): Turn slots infd, outfd, kill_without_query, pty_flag,
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
80984
diff
changeset
|
622 p->adaptive_read_buffering = 0; |
077a1e6fd3f2
(struct Lisp_Process): Turn slots infd, outfd, kill_without_query, pty_flag,
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
80984
diff
changeset
|
623 p->read_output_delay = 0; |
077a1e6fd3f2
(struct Lisp_Process): Turn slots infd, outfd, kill_without_query, pty_flag,
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
80984
diff
changeset
|
624 p->read_output_skip = 0; |
53472
1a5fe79d27f3
(ADAPTIVE_READ_BUFFERING): New conditional.
Kim F. Storm <storm@cua.dk>
parents:
53072
diff
changeset
|
625 #endif |
1a5fe79d27f3
(ADAPTIVE_READ_BUFFERING): New conditional.
Kim F. Storm <storm@cua.dk>
parents:
53072
diff
changeset
|
626 |
578 | 627 /* If name is already in use, modify it until it is unused. */ |
628 | |
629 name1 = name; | |
630 for (i = 1; ; i++) | |
631 { | |
632 tem = Fget_process (name1); | |
633 if (NILP (tem)) break; | |
634 sprintf (suffix, "<%d>", i); | |
635 name1 = concat2 (name, build_string (suffix)); | |
636 } | |
637 name = name1; | |
638 p->name = name; | |
9969
007d93b04e1f
(make_process): Use allocate_vectorlike and VECSIZE.
Karl Heuer <kwzh@gnu.org>
parents:
9952
diff
changeset
|
639 XSETPROCESS (val, p); |
578 | 640 Vprocess_alist = Fcons (Fcons (name, val), Vprocess_alist); |
641 return val; | |
642 } | |
643 | |
64977
d26871fb1b7b
(deactivate_process, status_notify, read_process_output)
Kim F. Storm <storm@cua.dk>
parents:
64770
diff
changeset
|
644 static void |
578 | 645 remove_process (proc) |
646 register Lisp_Object proc; | |
647 { | |
648 register Lisp_Object pair; | |
649 | |
650 pair = Frassq (proc, Vprocess_alist); | |
651 Vprocess_alist = Fdelq (pair, Vprocess_alist); | |
652 | |
653 deactivate_process (proc); | |
654 } | |
49667
cbec1327e2f1
(QCfilter_multibyte): New variable.
Kenichi Handa <handa@m17n.org>
parents:
49600
diff
changeset
|
655 |
cbec1327e2f1
(QCfilter_multibyte): New variable.
Kenichi Handa <handa@m17n.org>
parents:
49600
diff
changeset
|
656 /* Setup coding systems of PROCESS. */ |
cbec1327e2f1
(QCfilter_multibyte): New variable.
Kenichi Handa <handa@m17n.org>
parents:
49600
diff
changeset
|
657 |
cbec1327e2f1
(QCfilter_multibyte): New variable.
Kenichi Handa <handa@m17n.org>
parents:
49600
diff
changeset
|
658 void |
cbec1327e2f1
(QCfilter_multibyte): New variable.
Kenichi Handa <handa@m17n.org>
parents:
49600
diff
changeset
|
659 setup_process_coding_systems (process) |
cbec1327e2f1
(QCfilter_multibyte): New variable.
Kenichi Handa <handa@m17n.org>
parents:
49600
diff
changeset
|
660 Lisp_Object process; |
cbec1327e2f1
(QCfilter_multibyte): New variable.
Kenichi Handa <handa@m17n.org>
parents:
49600
diff
changeset
|
661 { |
cbec1327e2f1
(QCfilter_multibyte): New variable.
Kenichi Handa <handa@m17n.org>
parents:
49600
diff
changeset
|
662 struct Lisp_Process *p = XPROCESS (process); |
81826
077a1e6fd3f2
(struct Lisp_Process): Turn slots infd, outfd, kill_without_query, pty_flag,
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
80984
diff
changeset
|
663 int inch = p->infd; |
077a1e6fd3f2
(struct Lisp_Process): Turn slots infd, outfd, kill_without_query, pty_flag,
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
80984
diff
changeset
|
664 int outch = p->outfd; |
89483 | 665 Lisp_Object coding_system; |
49667
cbec1327e2f1
(QCfilter_multibyte): New variable.
Kenichi Handa <handa@m17n.org>
parents:
49600
diff
changeset
|
666 |
49872
012ced9cf144
(setup_process_coding_systems): If the process's
Kenichi Handa <handa@m17n.org>
parents:
49680
diff
changeset
|
667 if (inch < 0 || outch < 0) |
012ced9cf144
(setup_process_coding_systems): If the process's
Kenichi Handa <handa@m17n.org>
parents:
49680
diff
changeset
|
668 return; |
012ced9cf144
(setup_process_coding_systems): If the process's
Kenichi Handa <handa@m17n.org>
parents:
49680
diff
changeset
|
669 |
49667
cbec1327e2f1
(QCfilter_multibyte): New variable.
Kenichi Handa <handa@m17n.org>
parents:
49600
diff
changeset
|
670 if (!proc_decode_coding_system[inch]) |
cbec1327e2f1
(QCfilter_multibyte): New variable.
Kenichi Handa <handa@m17n.org>
parents:
49600
diff
changeset
|
671 proc_decode_coding_system[inch] |
cbec1327e2f1
(QCfilter_multibyte): New variable.
Kenichi Handa <handa@m17n.org>
parents:
49600
diff
changeset
|
672 = (struct coding_system *) xmalloc (sizeof (struct coding_system)); |
89483 | 673 coding_system = p->decode_coding_system; |
49667
cbec1327e2f1
(QCfilter_multibyte): New variable.
Kenichi Handa <handa@m17n.org>
parents:
49600
diff
changeset
|
674 if (! NILP (p->filter)) |
93201
5dbe361f12c2
* process.h (struct Lisp_Process): Remove filter_multibyte.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
92266
diff
changeset
|
675 ; |
49667
cbec1327e2f1
(QCfilter_multibyte): New variable.
Kenichi Handa <handa@m17n.org>
parents:
49600
diff
changeset
|
676 else if (BUFFERP (p->buffer)) |
cbec1327e2f1
(QCfilter_multibyte): New variable.
Kenichi Handa <handa@m17n.org>
parents:
49600
diff
changeset
|
677 { |
cbec1327e2f1
(QCfilter_multibyte): New variable.
Kenichi Handa <handa@m17n.org>
parents:
49600
diff
changeset
|
678 if (NILP (XBUFFER (p->buffer)->enable_multibyte_characters)) |
89483 | 679 coding_system = raw_text_coding_system (coding_system); |
49667
cbec1327e2f1
(QCfilter_multibyte): New variable.
Kenichi Handa <handa@m17n.org>
parents:
49600
diff
changeset
|
680 } |
89483 | 681 setup_coding_system (coding_system, proc_decode_coding_system[inch]); |
49667
cbec1327e2f1
(QCfilter_multibyte): New variable.
Kenichi Handa <handa@m17n.org>
parents:
49600
diff
changeset
|
682 |
cbec1327e2f1
(QCfilter_multibyte): New variable.
Kenichi Handa <handa@m17n.org>
parents:
49600
diff
changeset
|
683 if (!proc_encode_coding_system[outch]) |
cbec1327e2f1
(QCfilter_multibyte): New variable.
Kenichi Handa <handa@m17n.org>
parents:
49600
diff
changeset
|
684 proc_encode_coding_system[outch] |
cbec1327e2f1
(QCfilter_multibyte): New variable.
Kenichi Handa <handa@m17n.org>
parents:
49600
diff
changeset
|
685 = (struct coding_system *) xmalloc (sizeof (struct coding_system)); |
cbec1327e2f1
(QCfilter_multibyte): New variable.
Kenichi Handa <handa@m17n.org>
parents:
49600
diff
changeset
|
686 setup_coding_system (p->encode_coding_system, |
cbec1327e2f1
(QCfilter_multibyte): New variable.
Kenichi Handa <handa@m17n.org>
parents:
49600
diff
changeset
|
687 proc_encode_coding_system[outch]); |
cbec1327e2f1
(QCfilter_multibyte): New variable.
Kenichi Handa <handa@m17n.org>
parents:
49600
diff
changeset
|
688 } |
578 | 689 |
690 DEFUN ("processp", Fprocessp, Sprocessp, 1, 1, 0, | |
40103
6b389fb978bc
Change doc-string comments to `new style' [w/`doc:' keyword].
Pavel Janík <Pavel@Janik.cz>
parents:
39973
diff
changeset
|
691 doc: /* Return t if OBJECT is a process. */) |
6b389fb978bc
Change doc-string comments to `new style' [w/`doc:' keyword].
Pavel Janík <Pavel@Janik.cz>
parents:
39973
diff
changeset
|
692 (object) |
14085
85ce7bab31dc
(Fprocessp, Fget_buffer_process, Fdelete_process, Fprocess_status,
Erik Naggum <erik@naggum.no>
parents:
14036
diff
changeset
|
693 Lisp_Object object; |
578 | 694 { |
14085
85ce7bab31dc
(Fprocessp, Fget_buffer_process, Fdelete_process, Fprocess_status,
Erik Naggum <erik@naggum.no>
parents:
14036
diff
changeset
|
695 return PROCESSP (object) ? Qt : Qnil; |
578 | 696 } |
697 | |
698 DEFUN ("get-process", Fget_process, Sget_process, 1, 1, 0, | |
40103
6b389fb978bc
Change doc-string comments to `new style' [w/`doc:' keyword].
Pavel Janík <Pavel@Janik.cz>
parents:
39973
diff
changeset
|
699 doc: /* Return the process named NAME, or nil if there is none. */) |
6b389fb978bc
Change doc-string comments to `new style' [w/`doc:' keyword].
Pavel Janík <Pavel@Janik.cz>
parents:
39973
diff
changeset
|
700 (name) |
578 | 701 register Lisp_Object name; |
702 { | |
9115
59bc2d010b5f
(decode_status, Fprocessp, Fget_process, Fget_buffer_process, Fprocess_status,
Karl Heuer <kwzh@gnu.org>
parents:
9034
diff
changeset
|
703 if (PROCESSP (name)) |
578 | 704 return name; |
40656
cdfd4d09b79a
Update usage of CHECK_ macros (remove unused second argument).
Pavel Janík <Pavel@Janik.cz>
parents:
40641
diff
changeset
|
705 CHECK_STRING (name); |
578 | 706 return Fcdr (Fassoc (name, Vprocess_alist)); |
707 } | |
708 | |
709 DEFUN ("get-buffer-process", Fget_buffer_process, Sget_buffer_process, 1, 1, 0, | |
40103
6b389fb978bc
Change doc-string comments to `new style' [w/`doc:' keyword].
Pavel Janík <Pavel@Janik.cz>
parents:
39973
diff
changeset
|
710 doc: /* Return the (or a) process associated with BUFFER. |
6b389fb978bc
Change doc-string comments to `new style' [w/`doc:' keyword].
Pavel Janík <Pavel@Janik.cz>
parents:
39973
diff
changeset
|
711 BUFFER may be a buffer or the name of one. */) |
6b389fb978bc
Change doc-string comments to `new style' [w/`doc:' keyword].
Pavel Janík <Pavel@Janik.cz>
parents:
39973
diff
changeset
|
712 (buffer) |
14085
85ce7bab31dc
(Fprocessp, Fget_buffer_process, Fdelete_process, Fprocess_status,
Erik Naggum <erik@naggum.no>
parents:
14036
diff
changeset
|
713 register Lisp_Object buffer; |
578 | 714 { |
715 register Lisp_Object buf, tail, proc; | |
716 | |
14085
85ce7bab31dc
(Fprocessp, Fget_buffer_process, Fdelete_process, Fprocess_status,
Erik Naggum <erik@naggum.no>
parents:
14036
diff
changeset
|
717 if (NILP (buffer)) return Qnil; |
85ce7bab31dc
(Fprocessp, Fget_buffer_process, Fdelete_process, Fprocess_status,
Erik Naggum <erik@naggum.no>
parents:
14036
diff
changeset
|
718 buf = Fget_buffer (buffer); |
578 | 719 if (NILP (buf)) return Qnil; |
720 | |
85372
f7d19cfed7da
* xselect.c (x_own_selection, x_handle_selection_clear)
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
85362
diff
changeset
|
721 for (tail = Vprocess_alist; CONSP (tail); tail = XCDR (tail)) |
578 | 722 { |
85372
f7d19cfed7da
* xselect.c (x_own_selection, x_handle_selection_clear)
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
85362
diff
changeset
|
723 proc = Fcdr (XCAR (tail)); |
9115
59bc2d010b5f
(decode_status, Fprocessp, Fget_process, Fget_buffer_process, Fprocess_status,
Karl Heuer <kwzh@gnu.org>
parents:
9034
diff
changeset
|
724 if (PROCESSP (proc) && EQ (XPROCESS (proc)->buffer, buf)) |
578 | 725 return proc; |
726 } | |
727 return Qnil; | |
728 } | |
729 | |
808 | 730 /* This is how commands for the user decode process arguments. It |
731 accepts a process, a process name, a buffer, a buffer name, or nil. | |
732 Buffers denote the first process in the buffer, and nil denotes the | |
733 current buffer. */ | |
578 | 734 |
4994
4146a65b9f02
(get_process): Add `static' to definition.
Richard M. Stallman <rms@gnu.org>
parents:
4914
diff
changeset
|
735 static Lisp_Object |
578 | 736 get_process (name) |
737 register Lisp_Object name; | |
738 { | |
6313
9a6531e6de5d
(get_process): Allow arg to be a buffer object.
Karl Heuer <kwzh@gnu.org>
parents:
6253
diff
changeset
|
739 register Lisp_Object proc, obj; |
9a6531e6de5d
(get_process): Allow arg to be a buffer object.
Karl Heuer <kwzh@gnu.org>
parents:
6253
diff
changeset
|
740 if (STRINGP (name)) |
9a6531e6de5d
(get_process): Allow arg to be a buffer object.
Karl Heuer <kwzh@gnu.org>
parents:
6253
diff
changeset
|
741 { |
9a6531e6de5d
(get_process): Allow arg to be a buffer object.
Karl Heuer <kwzh@gnu.org>
parents:
6253
diff
changeset
|
742 obj = Fget_process (name); |
9a6531e6de5d
(get_process): Allow arg to be a buffer object.
Karl Heuer <kwzh@gnu.org>
parents:
6253
diff
changeset
|
743 if (NILP (obj)) |
9a6531e6de5d
(get_process): Allow arg to be a buffer object.
Karl Heuer <kwzh@gnu.org>
parents:
6253
diff
changeset
|
744 obj = Fget_buffer (name); |
9a6531e6de5d
(get_process): Allow arg to be a buffer object.
Karl Heuer <kwzh@gnu.org>
parents:
6253
diff
changeset
|
745 if (NILP (obj)) |
46370
40db0673e6f0
Most uses of XSTRING combined with STRING_BYTES or indirection changed to
Ken Raeburn <raeburn@raeburn.org>
parents:
46314
diff
changeset
|
746 error ("Process %s does not exist", SDATA (name)); |
6313
9a6531e6de5d
(get_process): Allow arg to be a buffer object.
Karl Heuer <kwzh@gnu.org>
parents:
6253
diff
changeset
|
747 } |
9a6531e6de5d
(get_process): Allow arg to be a buffer object.
Karl Heuer <kwzh@gnu.org>
parents:
6253
diff
changeset
|
748 else if (NILP (name)) |
9a6531e6de5d
(get_process): Allow arg to be a buffer object.
Karl Heuer <kwzh@gnu.org>
parents:
6253
diff
changeset
|
749 obj = Fcurrent_buffer (); |
9a6531e6de5d
(get_process): Allow arg to be a buffer object.
Karl Heuer <kwzh@gnu.org>
parents:
6253
diff
changeset
|
750 else |
9a6531e6de5d
(get_process): Allow arg to be a buffer object.
Karl Heuer <kwzh@gnu.org>
parents:
6253
diff
changeset
|
751 obj = name; |
9a6531e6de5d
(get_process): Allow arg to be a buffer object.
Karl Heuer <kwzh@gnu.org>
parents:
6253
diff
changeset
|
752 |
9a6531e6de5d
(get_process): Allow arg to be a buffer object.
Karl Heuer <kwzh@gnu.org>
parents:
6253
diff
changeset
|
753 /* Now obj should be either a buffer object or a process object. |
9a6531e6de5d
(get_process): Allow arg to be a buffer object.
Karl Heuer <kwzh@gnu.org>
parents:
6253
diff
changeset
|
754 */ |
9a6531e6de5d
(get_process): Allow arg to be a buffer object.
Karl Heuer <kwzh@gnu.org>
parents:
6253
diff
changeset
|
755 if (BUFFERP (obj)) |
9a6531e6de5d
(get_process): Allow arg to be a buffer object.
Karl Heuer <kwzh@gnu.org>
parents:
6253
diff
changeset
|
756 { |
9a6531e6de5d
(get_process): Allow arg to be a buffer object.
Karl Heuer <kwzh@gnu.org>
parents:
6253
diff
changeset
|
757 proc = Fget_buffer_process (obj); |
9a6531e6de5d
(get_process): Allow arg to be a buffer object.
Karl Heuer <kwzh@gnu.org>
parents:
6253
diff
changeset
|
758 if (NILP (proc)) |
46370
40db0673e6f0
Most uses of XSTRING combined with STRING_BYTES or indirection changed to
Ken Raeburn <raeburn@raeburn.org>
parents:
46314
diff
changeset
|
759 error ("Buffer %s has no process", SDATA (XBUFFER (obj)->name)); |
6313
9a6531e6de5d
(get_process): Allow arg to be a buffer object.
Karl Heuer <kwzh@gnu.org>
parents:
6253
diff
changeset
|
760 } |
578 | 761 else |
762 { | |
40656
cdfd4d09b79a
Update usage of CHECK_ macros (remove unused second argument).
Pavel Janík <Pavel@Janik.cz>
parents:
40641
diff
changeset
|
763 CHECK_PROCESS (obj); |
6313
9a6531e6de5d
(get_process): Allow arg to be a buffer object.
Karl Heuer <kwzh@gnu.org>
parents:
6253
diff
changeset
|
764 proc = obj; |
578 | 765 } |
6313
9a6531e6de5d
(get_process): Allow arg to be a buffer object.
Karl Heuer <kwzh@gnu.org>
parents:
6253
diff
changeset
|
766 return proc; |
578 | 767 } |
768 | |
71140
80310801887e
2006-06-01 Micha«³l Cadilhac <michael.cadilhac@lrde.org>
Kim F. Storm <storm@cua.dk>
parents:
71109
diff
changeset
|
769 |
80310801887e
2006-06-01 Micha«³l Cadilhac <michael.cadilhac@lrde.org>
Kim F. Storm <storm@cua.dk>
parents:
71109
diff
changeset
|
770 #ifdef SIGCHLD |
80310801887e
2006-06-01 Micha«³l Cadilhac <michael.cadilhac@lrde.org>
Kim F. Storm <storm@cua.dk>
parents:
71109
diff
changeset
|
771 /* Fdelete_process promises to immediately forget about the process, but in |
80310801887e
2006-06-01 Micha«³l Cadilhac <michael.cadilhac@lrde.org>
Kim F. Storm <storm@cua.dk>
parents:
71109
diff
changeset
|
772 reality, Emacs needs to remember those processes until they have been |
80310801887e
2006-06-01 Micha«³l Cadilhac <michael.cadilhac@lrde.org>
Kim F. Storm <storm@cua.dk>
parents:
71109
diff
changeset
|
773 treated by sigchld_handler; otherwise this handler would consider the |
80310801887e
2006-06-01 Micha«³l Cadilhac <michael.cadilhac@lrde.org>
Kim F. Storm <storm@cua.dk>
parents:
71109
diff
changeset
|
774 process as being synchronous and say that the synchronous process is |
80310801887e
2006-06-01 Micha«³l Cadilhac <michael.cadilhac@lrde.org>
Kim F. Storm <storm@cua.dk>
parents:
71109
diff
changeset
|
775 dead. */ |
80310801887e
2006-06-01 Micha«³l Cadilhac <michael.cadilhac@lrde.org>
Kim F. Storm <storm@cua.dk>
parents:
71109
diff
changeset
|
776 static Lisp_Object deleted_pid_list; |
80310801887e
2006-06-01 Micha«³l Cadilhac <michael.cadilhac@lrde.org>
Kim F. Storm <storm@cua.dk>
parents:
71109
diff
changeset
|
777 #endif |
80310801887e
2006-06-01 Micha«³l Cadilhac <michael.cadilhac@lrde.org>
Kim F. Storm <storm@cua.dk>
parents:
71109
diff
changeset
|
778 |
578 | 779 DEFUN ("delete-process", Fdelete_process, Sdelete_process, 1, 1, 0, |
40103
6b389fb978bc
Change doc-string comments to `new style' [w/`doc:' keyword].
Pavel Janík <Pavel@Janik.cz>
parents:
39973
diff
changeset
|
780 doc: /* Delete PROCESS: kill it and forget about it immediately. |
6b389fb978bc
Change doc-string comments to `new style' [w/`doc:' keyword].
Pavel Janík <Pavel@Janik.cz>
parents:
39973
diff
changeset
|
781 PROCESS may be a process, a buffer, the name of a process or buffer, or |
6b389fb978bc
Change doc-string comments to `new style' [w/`doc:' keyword].
Pavel Janík <Pavel@Janik.cz>
parents:
39973
diff
changeset
|
782 nil, indicating the current buffer's process. */) |
6b389fb978bc
Change doc-string comments to `new style' [w/`doc:' keyword].
Pavel Janík <Pavel@Janik.cz>
parents:
39973
diff
changeset
|
783 (process) |
14085
85ce7bab31dc
(Fprocessp, Fget_buffer_process, Fdelete_process, Fprocess_status,
Erik Naggum <erik@naggum.no>
parents:
14036
diff
changeset
|
784 register Lisp_Object process; |
578 | 785 { |
64977
d26871fb1b7b
(deactivate_process, status_notify, read_process_output)
Kim F. Storm <storm@cua.dk>
parents:
64770
diff
changeset
|
786 register struct Lisp_Process *p; |
d26871fb1b7b
(deactivate_process, status_notify, read_process_output)
Kim F. Storm <storm@cua.dk>
parents:
64770
diff
changeset
|
787 |
14085
85ce7bab31dc
(Fprocessp, Fget_buffer_process, Fdelete_process, Fprocess_status,
Erik Naggum <erik@naggum.no>
parents:
14036
diff
changeset
|
788 process = get_process (process); |
64977
d26871fb1b7b
(deactivate_process, status_notify, read_process_output)
Kim F. Storm <storm@cua.dk>
parents:
64770
diff
changeset
|
789 p = XPROCESS (process); |
d26871fb1b7b
(deactivate_process, status_notify, read_process_output)
Kim F. Storm <storm@cua.dk>
parents:
64770
diff
changeset
|
790 |
69873
2d844bbbccd4
* process.h (struct Lisp_Process): Replace Lisp_Objects `pid',
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
69634
diff
changeset
|
791 p->raw_status_new = 0; |
95884
d6a4488883dc
Daniel Engeler <engeler at gmail.com>
Glenn Morris <rgm@gnu.org>
parents:
95387
diff
changeset
|
792 if (NETCONN1_P (p) || SERIALCONN1_P (p)) |
578 | 793 { |
64977
d26871fb1b7b
(deactivate_process, status_notify, read_process_output)
Kim F. Storm <storm@cua.dk>
parents:
64770
diff
changeset
|
794 p->status = Fcons (Qexit, Fcons (make_number (0), Qnil)); |
81826
077a1e6fd3f2
(struct Lisp_Process): Turn slots infd, outfd, kill_without_query, pty_flag,
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
80984
diff
changeset
|
795 p->tick = ++process_tick; |
64977
d26871fb1b7b
(deactivate_process, status_notify, read_process_output)
Kim F. Storm <storm@cua.dk>
parents:
64770
diff
changeset
|
796 status_notify (p); |
104316
bb8ce3c842e7
* process.c (status_notify): Don't perform redisplay.
Chong Yidong <cyd@stupidchicken.com>
parents:
104265
diff
changeset
|
797 redisplay_preserve_echo_area (13); |
578 | 798 } |
81826
077a1e6fd3f2
(struct Lisp_Process): Turn slots infd, outfd, kill_without_query, pty_flag,
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
80984
diff
changeset
|
799 else if (p->infd >= 0) |
578 | 800 { |
71140
80310801887e
2006-06-01 Micha«³l Cadilhac <michael.cadilhac@lrde.org>
Kim F. Storm <storm@cua.dk>
parents:
71109
diff
changeset
|
801 #ifdef SIGCHLD |
80310801887e
2006-06-01 Micha«³l Cadilhac <michael.cadilhac@lrde.org>
Kim F. Storm <storm@cua.dk>
parents:
71109
diff
changeset
|
802 Lisp_Object symbol; |
75220
1b003fe28dfe
(Fdelete_process, Fprocess_id, sigchld_handler): Copy PID into EMACS_INT
Eli Zaretskii <eliz@gnu.org>
parents:
74946
diff
changeset
|
803 /* Assignment to EMACS_INT stops GCC whining about limited range |
1b003fe28dfe
(Fdelete_process, Fprocess_id, sigchld_handler): Copy PID into EMACS_INT
Eli Zaretskii <eliz@gnu.org>
parents:
74946
diff
changeset
|
804 of data type. */ |
76494
f0a25b5d3ba0
(Fdelete_process): Properly handle deletion of first element of
Chong Yidong <cyd@stupidchicken.com>
parents:
76493
diff
changeset
|
805 EMACS_INT pid = p->pid; |
71140
80310801887e
2006-06-01 Micha«³l Cadilhac <michael.cadilhac@lrde.org>
Kim F. Storm <storm@cua.dk>
parents:
71109
diff
changeset
|
806 |
80310801887e
2006-06-01 Micha«³l Cadilhac <michael.cadilhac@lrde.org>
Kim F. Storm <storm@cua.dk>
parents:
71109
diff
changeset
|
807 /* No problem storing the pid here, as it is still in Vprocess_alist. */ |
75220
1b003fe28dfe
(Fdelete_process, Fprocess_id, sigchld_handler): Copy PID into EMACS_INT
Eli Zaretskii <eliz@gnu.org>
parents:
74946
diff
changeset
|
808 deleted_pid_list = Fcons (make_fixnum_or_float (pid), |
71140
80310801887e
2006-06-01 Micha«³l Cadilhac <michael.cadilhac@lrde.org>
Kim F. Storm <storm@cua.dk>
parents:
71109
diff
changeset
|
809 /* GC treated elements set to nil. */ |
80310801887e
2006-06-01 Micha«³l Cadilhac <michael.cadilhac@lrde.org>
Kim F. Storm <storm@cua.dk>
parents:
71109
diff
changeset
|
810 Fdelq (Qnil, deleted_pid_list)); |
80310801887e
2006-06-01 Micha«³l Cadilhac <michael.cadilhac@lrde.org>
Kim F. Storm <storm@cua.dk>
parents:
71109
diff
changeset
|
811 /* If the process has already signaled, remove it from the list. */ |
80310801887e
2006-06-01 Micha«³l Cadilhac <michael.cadilhac@lrde.org>
Kim F. Storm <storm@cua.dk>
parents:
71109
diff
changeset
|
812 if (p->raw_status_new) |
80310801887e
2006-06-01 Micha«³l Cadilhac <michael.cadilhac@lrde.org>
Kim F. Storm <storm@cua.dk>
parents:
71109
diff
changeset
|
813 update_status (p); |
80310801887e
2006-06-01 Micha«³l Cadilhac <michael.cadilhac@lrde.org>
Kim F. Storm <storm@cua.dk>
parents:
71109
diff
changeset
|
814 symbol = p->status; |
80310801887e
2006-06-01 Micha«³l Cadilhac <michael.cadilhac@lrde.org>
Kim F. Storm <storm@cua.dk>
parents:
71109
diff
changeset
|
815 if (CONSP (p->status)) |
80310801887e
2006-06-01 Micha«³l Cadilhac <michael.cadilhac@lrde.org>
Kim F. Storm <storm@cua.dk>
parents:
71109
diff
changeset
|
816 symbol = XCAR (p->status); |
80310801887e
2006-06-01 Micha«³l Cadilhac <michael.cadilhac@lrde.org>
Kim F. Storm <storm@cua.dk>
parents:
71109
diff
changeset
|
817 if (EQ (symbol, Qsignal) || EQ (symbol, Qexit)) |
76494
f0a25b5d3ba0
(Fdelete_process): Properly handle deletion of first element of
Chong Yidong <cyd@stupidchicken.com>
parents:
76493
diff
changeset
|
818 deleted_pid_list |
f0a25b5d3ba0
(Fdelete_process): Properly handle deletion of first element of
Chong Yidong <cyd@stupidchicken.com>
parents:
76493
diff
changeset
|
819 = Fdelete (make_fixnum_or_float (pid), deleted_pid_list); |
71140
80310801887e
2006-06-01 Micha«³l Cadilhac <michael.cadilhac@lrde.org>
Kim F. Storm <storm@cua.dk>
parents:
71109
diff
changeset
|
820 else |
80310801887e
2006-06-01 Micha«³l Cadilhac <michael.cadilhac@lrde.org>
Kim F. Storm <storm@cua.dk>
parents:
71109
diff
changeset
|
821 #endif |
80310801887e
2006-06-01 Micha«³l Cadilhac <michael.cadilhac@lrde.org>
Kim F. Storm <storm@cua.dk>
parents:
71109
diff
changeset
|
822 { |
80310801887e
2006-06-01 Micha«³l Cadilhac <michael.cadilhac@lrde.org>
Kim F. Storm <storm@cua.dk>
parents:
71109
diff
changeset
|
823 Fkill_process (process, Qnil); |
80310801887e
2006-06-01 Micha«³l Cadilhac <michael.cadilhac@lrde.org>
Kim F. Storm <storm@cua.dk>
parents:
71109
diff
changeset
|
824 /* Do this now, since remove_process will make sigchld_handler do nothing. */ |
80310801887e
2006-06-01 Micha«³l Cadilhac <michael.cadilhac@lrde.org>
Kim F. Storm <storm@cua.dk>
parents:
71109
diff
changeset
|
825 p->status |
80310801887e
2006-06-01 Micha«³l Cadilhac <michael.cadilhac@lrde.org>
Kim F. Storm <storm@cua.dk>
parents:
71109
diff
changeset
|
826 = Fcons (Qsignal, Fcons (make_number (SIGKILL), Qnil)); |
81826
077a1e6fd3f2
(struct Lisp_Process): Turn slots infd, outfd, kill_without_query, pty_flag,
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
80984
diff
changeset
|
827 p->tick = ++process_tick; |
71140
80310801887e
2006-06-01 Micha«³l Cadilhac <michael.cadilhac@lrde.org>
Kim F. Storm <storm@cua.dk>
parents:
71109
diff
changeset
|
828 status_notify (p); |
104316
bb8ce3c842e7
* process.c (status_notify): Don't perform redisplay.
Chong Yidong <cyd@stupidchicken.com>
parents:
104265
diff
changeset
|
829 redisplay_preserve_echo_area (13); |
71140
80310801887e
2006-06-01 Micha«³l Cadilhac <michael.cadilhac@lrde.org>
Kim F. Storm <storm@cua.dk>
parents:
71109
diff
changeset
|
830 } |
578 | 831 } |
55962
8979bc3ade70
(Fdelete_process): Undo 2004-05-28 change.
Kim F. Storm <storm@cua.dk>
parents:
55810
diff
changeset
|
832 remove_process (process); |
578 | 833 return Qnil; |
834 } | |
835 | |
836 DEFUN ("process-status", Fprocess_status, Sprocess_status, 1, 1, 0, | |
40103
6b389fb978bc
Change doc-string comments to `new style' [w/`doc:' keyword].
Pavel Janík <Pavel@Janik.cz>
parents:
39973
diff
changeset
|
837 doc: /* Return the status of PROCESS. |
6b389fb978bc
Change doc-string comments to `new style' [w/`doc:' keyword].
Pavel Janík <Pavel@Janik.cz>
parents:
39973
diff
changeset
|
838 The returned value is one of the following symbols: |
6b389fb978bc
Change doc-string comments to `new style' [w/`doc:' keyword].
Pavel Janík <Pavel@Janik.cz>
parents:
39973
diff
changeset
|
839 run -- for a process that is running. |
6b389fb978bc
Change doc-string comments to `new style' [w/`doc:' keyword].
Pavel Janík <Pavel@Janik.cz>
parents:
39973
diff
changeset
|
840 stop -- for a process stopped but continuable. |
6b389fb978bc
Change doc-string comments to `new style' [w/`doc:' keyword].
Pavel Janík <Pavel@Janik.cz>
parents:
39973
diff
changeset
|
841 exit -- for a process that has exited. |
6b389fb978bc
Change doc-string comments to `new style' [w/`doc:' keyword].
Pavel Janík <Pavel@Janik.cz>
parents:
39973
diff
changeset
|
842 signal -- for a process that has got a fatal signal. |
6b389fb978bc
Change doc-string comments to `new style' [w/`doc:' keyword].
Pavel Janík <Pavel@Janik.cz>
parents:
39973
diff
changeset
|
843 open -- for a network stream connection that is open. |
43968
7ec801358b7e
(Qlocal, QCname, QCbuffer, QChost, QCservice, QCfamily)
Kim F. Storm <storm@cua.dk>
parents:
43642
diff
changeset
|
844 listen -- for a network stream server that is listening. |
40103
6b389fb978bc
Change doc-string comments to `new style' [w/`doc:' keyword].
Pavel Janík <Pavel@Janik.cz>
parents:
39973
diff
changeset
|
845 closed -- for a network stream connection that is closed. |
43600
f21620032428
(Fprocess_status): Document connect and failed return values.
Kim F. Storm <storm@cua.dk>
parents:
43598
diff
changeset
|
846 connect -- when waiting for a non-blocking connection to complete. |
f21620032428
(Fprocess_status): Document connect and failed return values.
Kim F. Storm <storm@cua.dk>
parents:
43598
diff
changeset
|
847 failed -- when a non-blocking connection has failed. |
40103
6b389fb978bc
Change doc-string comments to `new style' [w/`doc:' keyword].
Pavel Janík <Pavel@Janik.cz>
parents:
39973
diff
changeset
|
848 nil -- if arg is a process name and no such process exists. |
6b389fb978bc
Change doc-string comments to `new style' [w/`doc:' keyword].
Pavel Janík <Pavel@Janik.cz>
parents:
39973
diff
changeset
|
849 PROCESS may be a process, a buffer, the name of a process, or |
6b389fb978bc
Change doc-string comments to `new style' [w/`doc:' keyword].
Pavel Janík <Pavel@Janik.cz>
parents:
39973
diff
changeset
|
850 nil, indicating the current buffer's process. */) |
6b389fb978bc
Change doc-string comments to `new style' [w/`doc:' keyword].
Pavel Janík <Pavel@Janik.cz>
parents:
39973
diff
changeset
|
851 (process) |
14085
85ce7bab31dc
(Fprocessp, Fget_buffer_process, Fdelete_process, Fprocess_status,
Erik Naggum <erik@naggum.no>
parents:
14036
diff
changeset
|
852 register Lisp_Object process; |
578 | 853 { |
854 register struct Lisp_Process *p; | |
855 register Lisp_Object status; | |
7937
bf963799d8be
(Fprocess_status): Return nil for process name that has no process.
Richard M. Stallman <rms@gnu.org>
parents:
7893
diff
changeset
|
856 |
14085
85ce7bab31dc
(Fprocessp, Fget_buffer_process, Fdelete_process, Fprocess_status,
Erik Naggum <erik@naggum.no>
parents:
14036
diff
changeset
|
857 if (STRINGP (process)) |
85ce7bab31dc
(Fprocessp, Fget_buffer_process, Fdelete_process, Fprocess_status,
Erik Naggum <erik@naggum.no>
parents:
14036
diff
changeset
|
858 process = Fget_process (process); |
7937
bf963799d8be
(Fprocess_status): Return nil for process name that has no process.
Richard M. Stallman <rms@gnu.org>
parents:
7893
diff
changeset
|
859 else |
14085
85ce7bab31dc
(Fprocessp, Fget_buffer_process, Fdelete_process, Fprocess_status,
Erik Naggum <erik@naggum.no>
parents:
14036
diff
changeset
|
860 process = get_process (process); |
85ce7bab31dc
(Fprocessp, Fget_buffer_process, Fdelete_process, Fprocess_status,
Erik Naggum <erik@naggum.no>
parents:
14036
diff
changeset
|
861 |
85ce7bab31dc
(Fprocessp, Fget_buffer_process, Fdelete_process, Fprocess_status,
Erik Naggum <erik@naggum.no>
parents:
14036
diff
changeset
|
862 if (NILP (process)) |
85ce7bab31dc
(Fprocessp, Fget_buffer_process, Fdelete_process, Fprocess_status,
Erik Naggum <erik@naggum.no>
parents:
14036
diff
changeset
|
863 return process; |
85ce7bab31dc
(Fprocessp, Fget_buffer_process, Fdelete_process, Fprocess_status,
Erik Naggum <erik@naggum.no>
parents:
14036
diff
changeset
|
864 |
85ce7bab31dc
(Fprocessp, Fget_buffer_process, Fdelete_process, Fprocess_status,
Erik Naggum <erik@naggum.no>
parents:
14036
diff
changeset
|
865 p = XPROCESS (process); |
69873
2d844bbbccd4
* process.h (struct Lisp_Process): Replace Lisp_Objects `pid',
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
69634
diff
changeset
|
866 if (p->raw_status_new) |
578 | 867 update_status (p); |
868 status = p->status; | |
9115
59bc2d010b5f
(decode_status, Fprocessp, Fget_process, Fget_buffer_process, Fprocess_status,
Karl Heuer <kwzh@gnu.org>
parents:
9034
diff
changeset
|
869 if (CONSP (status)) |
25645
a14111a2a100
Use XCAR, XCDR, XFLOAT_DATA instead of explicit member access.
Ken Raeburn <raeburn@raeburn.org>
parents:
25356
diff
changeset
|
870 status = XCAR (status); |
95884
d6a4488883dc
Daniel Engeler <engeler at gmail.com>
Glenn Morris <rgm@gnu.org>
parents:
95387
diff
changeset
|
871 if (NETCONN1_P (p) || SERIALCONN1_P (p)) |
578 | 872 { |
43968
7ec801358b7e
(Qlocal, QCname, QCbuffer, QChost, QCservice, QCfamily)
Kim F. Storm <storm@cua.dk>
parents:
43642
diff
changeset
|
873 if (EQ (status, Qexit)) |
7ec801358b7e
(Qlocal, QCname, QCbuffer, QChost, QCservice, QCfamily)
Kim F. Storm <storm@cua.dk>
parents:
43642
diff
changeset
|
874 status = Qclosed; |
7ec801358b7e
(Qlocal, QCname, QCbuffer, QChost, QCservice, QCfamily)
Kim F. Storm <storm@cua.dk>
parents:
43642
diff
changeset
|
875 else if (EQ (p->command, Qt)) |
7ec801358b7e
(Qlocal, QCname, QCbuffer, QChost, QCservice, QCfamily)
Kim F. Storm <storm@cua.dk>
parents:
43642
diff
changeset
|
876 status = Qstop; |
7ec801358b7e
(Qlocal, QCname, QCbuffer, QChost, QCservice, QCfamily)
Kim F. Storm <storm@cua.dk>
parents:
43642
diff
changeset
|
877 else if (EQ (status, Qrun)) |
578 | 878 status = Qopen; |
879 } | |
880 return status; | |
881 } | |
882 | |
883 DEFUN ("process-exit-status", Fprocess_exit_status, Sprocess_exit_status, | |
884 1, 1, 0, | |
40103
6b389fb978bc
Change doc-string comments to `new style' [w/`doc:' keyword].
Pavel Janík <Pavel@Janik.cz>
parents:
39973
diff
changeset
|
885 doc: /* Return the exit status of PROCESS or the signal number that killed it. |
6b389fb978bc
Change doc-string comments to `new style' [w/`doc:' keyword].
Pavel Janík <Pavel@Janik.cz>
parents:
39973
diff
changeset
|
886 If PROCESS has not yet exited or died, return 0. */) |
6b389fb978bc
Change doc-string comments to `new style' [w/`doc:' keyword].
Pavel Janík <Pavel@Janik.cz>
parents:
39973
diff
changeset
|
887 (process) |
14085
85ce7bab31dc
(Fprocessp, Fget_buffer_process, Fdelete_process, Fprocess_status,
Erik Naggum <erik@naggum.no>
parents:
14036
diff
changeset
|
888 register Lisp_Object process; |
578 | 889 { |
40656
cdfd4d09b79a
Update usage of CHECK_ macros (remove unused second argument).
Pavel Janík <Pavel@Janik.cz>
parents:
40641
diff
changeset
|
890 CHECK_PROCESS (process); |
69873
2d844bbbccd4
* process.h (struct Lisp_Process): Replace Lisp_Objects `pid',
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
69634
diff
changeset
|
891 if (XPROCESS (process)->raw_status_new) |
14085
85ce7bab31dc
(Fprocessp, Fget_buffer_process, Fdelete_process, Fprocess_status,
Erik Naggum <erik@naggum.no>
parents:
14036
diff
changeset
|
892 update_status (XPROCESS (process)); |
85ce7bab31dc
(Fprocessp, Fget_buffer_process, Fdelete_process, Fprocess_status,
Erik Naggum <erik@naggum.no>
parents:
14036
diff
changeset
|
893 if (CONSP (XPROCESS (process)->status)) |
25645
a14111a2a100
Use XCAR, XCDR, XFLOAT_DATA instead of explicit member access.
Ken Raeburn <raeburn@raeburn.org>
parents:
25356
diff
changeset
|
894 return XCAR (XCDR (XPROCESS (process)->status)); |
578 | 895 return make_number (0); |
896 } | |
897 | |
898 DEFUN ("process-id", Fprocess_id, Sprocess_id, 1, 1, 0, | |
40103
6b389fb978bc
Change doc-string comments to `new style' [w/`doc:' keyword].
Pavel Janík <Pavel@Janik.cz>
parents:
39973
diff
changeset
|
899 doc: /* Return the process id of PROCESS. |
55444
976d03256b41
(Fwaiting_for_user_input_p, Fmake_network_process)
Juanma Barranquero <lekktu@gmail.com>
parents:
53835
diff
changeset
|
900 This is the pid of the external process which PROCESS uses or talks to. |
40103
6b389fb978bc
Change doc-string comments to `new style' [w/`doc:' keyword].
Pavel Janík <Pavel@Janik.cz>
parents:
39973
diff
changeset
|
901 For a network connection, this value is nil. */) |
6b389fb978bc
Change doc-string comments to `new style' [w/`doc:' keyword].
Pavel Janík <Pavel@Janik.cz>
parents:
39973
diff
changeset
|
902 (process) |
14085
85ce7bab31dc
(Fprocessp, Fget_buffer_process, Fdelete_process, Fprocess_status,
Erik Naggum <erik@naggum.no>
parents:
14036
diff
changeset
|
903 register Lisp_Object process; |
578 | 904 { |
75220
1b003fe28dfe
(Fdelete_process, Fprocess_id, sigchld_handler): Copy PID into EMACS_INT
Eli Zaretskii <eliz@gnu.org>
parents:
74946
diff
changeset
|
905 /* Assignment to EMACS_INT stops GCC whining about limited range of |
1b003fe28dfe
(Fdelete_process, Fprocess_id, sigchld_handler): Copy PID into EMACS_INT
Eli Zaretskii <eliz@gnu.org>
parents:
74946
diff
changeset
|
906 data type. */ |
1b003fe28dfe
(Fdelete_process, Fprocess_id, sigchld_handler): Copy PID into EMACS_INT
Eli Zaretskii <eliz@gnu.org>
parents:
74946
diff
changeset
|
907 EMACS_INT pid; |
1b003fe28dfe
(Fdelete_process, Fprocess_id, sigchld_handler): Copy PID into EMACS_INT
Eli Zaretskii <eliz@gnu.org>
parents:
74946
diff
changeset
|
908 |
40656
cdfd4d09b79a
Update usage of CHECK_ macros (remove unused second argument).
Pavel Janík <Pavel@Janik.cz>
parents:
40641
diff
changeset
|
909 CHECK_PROCESS (process); |
75220
1b003fe28dfe
(Fdelete_process, Fprocess_id, sigchld_handler): Copy PID into EMACS_INT
Eli Zaretskii <eliz@gnu.org>
parents:
74946
diff
changeset
|
910 pid = XPROCESS (process)->pid; |
1b003fe28dfe
(Fdelete_process, Fprocess_id, sigchld_handler): Copy PID into EMACS_INT
Eli Zaretskii <eliz@gnu.org>
parents:
74946
diff
changeset
|
911 return (pid ? make_fixnum_or_float (pid) : Qnil); |
578 | 912 } |
913 | |
914 DEFUN ("process-name", Fprocess_name, Sprocess_name, 1, 1, 0, | |
40103
6b389fb978bc
Change doc-string comments to `new style' [w/`doc:' keyword].
Pavel Janík <Pavel@Janik.cz>
parents:
39973
diff
changeset
|
915 doc: /* Return the name of PROCESS, as a string. |
6b389fb978bc
Change doc-string comments to `new style' [w/`doc:' keyword].
Pavel Janík <Pavel@Janik.cz>
parents:
39973
diff
changeset
|
916 This is the name of the program invoked in PROCESS, |
6b389fb978bc
Change doc-string comments to `new style' [w/`doc:' keyword].
Pavel Janík <Pavel@Janik.cz>
parents:
39973
diff
changeset
|
917 possibly modified to make it unique among process names. */) |
6b389fb978bc
Change doc-string comments to `new style' [w/`doc:' keyword].
Pavel Janík <Pavel@Janik.cz>
parents:
39973
diff
changeset
|
918 (process) |
14085
85ce7bab31dc
(Fprocessp, Fget_buffer_process, Fdelete_process, Fprocess_status,
Erik Naggum <erik@naggum.no>
parents:
14036
diff
changeset
|
919 register Lisp_Object process; |
578 | 920 { |
40656
cdfd4d09b79a
Update usage of CHECK_ macros (remove unused second argument).
Pavel Janík <Pavel@Janik.cz>
parents:
40641
diff
changeset
|
921 CHECK_PROCESS (process); |
14085
85ce7bab31dc
(Fprocessp, Fget_buffer_process, Fdelete_process, Fprocess_status,
Erik Naggum <erik@naggum.no>
parents:
14036
diff
changeset
|
922 return XPROCESS (process)->name; |
578 | 923 } |
924 | |
925 DEFUN ("process-command", Fprocess_command, Sprocess_command, 1, 1, 0, | |
40103
6b389fb978bc
Change doc-string comments to `new style' [w/`doc:' keyword].
Pavel Janík <Pavel@Janik.cz>
parents:
39973
diff
changeset
|
926 doc: /* Return the command that was executed to start PROCESS. |
6b389fb978bc
Change doc-string comments to `new style' [w/`doc:' keyword].
Pavel Janík <Pavel@Janik.cz>
parents:
39973
diff
changeset
|
927 This is a list of strings, the first string being the program executed |
6b389fb978bc
Change doc-string comments to `new style' [w/`doc:' keyword].
Pavel Janík <Pavel@Janik.cz>
parents:
39973
diff
changeset
|
928 and the rest of the strings being the arguments given to it. |
95884
d6a4488883dc
Daniel Engeler <engeler at gmail.com>
Glenn Morris <rgm@gnu.org>
parents:
95387
diff
changeset
|
929 For a network or serial process, this is nil (process is running) or t |
d6a4488883dc
Daniel Engeler <engeler at gmail.com>
Glenn Morris <rgm@gnu.org>
parents:
95387
diff
changeset
|
930 \(process is stopped). */) |
40103
6b389fb978bc
Change doc-string comments to `new style' [w/`doc:' keyword].
Pavel Janík <Pavel@Janik.cz>
parents:
39973
diff
changeset
|
931 (process) |
14085
85ce7bab31dc
(Fprocessp, Fget_buffer_process, Fdelete_process, Fprocess_status,
Erik Naggum <erik@naggum.no>
parents:
14036
diff
changeset
|
932 register Lisp_Object process; |
578 | 933 { |
40656
cdfd4d09b79a
Update usage of CHECK_ macros (remove unused second argument).
Pavel Janík <Pavel@Janik.cz>
parents:
40641
diff
changeset
|
934 CHECK_PROCESS (process); |
14085
85ce7bab31dc
(Fprocessp, Fget_buffer_process, Fdelete_process, Fprocess_status,
Erik Naggum <erik@naggum.no>
parents:
14036
diff
changeset
|
935 return XPROCESS (process)->command; |
578 | 936 } |
937 | |
9030
b14532c71632
(exec_sentinel_error_handler): New function.
Richard M. Stallman <rms@gnu.org>
parents:
8570
diff
changeset
|
938 DEFUN ("process-tty-name", Fprocess_tty_name, Sprocess_tty_name, 1, 1, 0, |
40103
6b389fb978bc
Change doc-string comments to `new style' [w/`doc:' keyword].
Pavel Janík <Pavel@Janik.cz>
parents:
39973
diff
changeset
|
939 doc: /* Return the name of the terminal PROCESS uses, or nil if none. |
6b389fb978bc
Change doc-string comments to `new style' [w/`doc:' keyword].
Pavel Janík <Pavel@Janik.cz>
parents:
39973
diff
changeset
|
940 This is the terminal that the process itself reads and writes on, |
6b389fb978bc
Change doc-string comments to `new style' [w/`doc:' keyword].
Pavel Janík <Pavel@Janik.cz>
parents:
39973
diff
changeset
|
941 not the name of the pty that Emacs uses to talk with that terminal. */) |
6b389fb978bc
Change doc-string comments to `new style' [w/`doc:' keyword].
Pavel Janík <Pavel@Janik.cz>
parents:
39973
diff
changeset
|
942 (process) |
14085
85ce7bab31dc
(Fprocessp, Fget_buffer_process, Fdelete_process, Fprocess_status,
Erik Naggum <erik@naggum.no>
parents:
14036
diff
changeset
|
943 register Lisp_Object process; |
9030
b14532c71632
(exec_sentinel_error_handler): New function.
Richard M. Stallman <rms@gnu.org>
parents:
8570
diff
changeset
|
944 { |
40656
cdfd4d09b79a
Update usage of CHECK_ macros (remove unused second argument).
Pavel Janík <Pavel@Janik.cz>
parents:
40641
diff
changeset
|
945 CHECK_PROCESS (process); |
14085
85ce7bab31dc
(Fprocessp, Fget_buffer_process, Fdelete_process, Fprocess_status,
Erik Naggum <erik@naggum.no>
parents:
14036
diff
changeset
|
946 return XPROCESS (process)->tty_name; |
9030
b14532c71632
(exec_sentinel_error_handler): New function.
Richard M. Stallman <rms@gnu.org>
parents:
8570
diff
changeset
|
947 } |
b14532c71632
(exec_sentinel_error_handler): New function.
Richard M. Stallman <rms@gnu.org>
parents:
8570
diff
changeset
|
948 |
578 | 949 DEFUN ("set-process-buffer", Fset_process_buffer, Sset_process_buffer, |
40103
6b389fb978bc
Change doc-string comments to `new style' [w/`doc:' keyword].
Pavel Janík <Pavel@Janik.cz>
parents:
39973
diff
changeset
|
950 2, 2, 0, |
6b389fb978bc
Change doc-string comments to `new style' [w/`doc:' keyword].
Pavel Janík <Pavel@Janik.cz>
parents:
39973
diff
changeset
|
951 doc: /* Set buffer associated with PROCESS to BUFFER (a buffer, or nil). */) |
6b389fb978bc
Change doc-string comments to `new style' [w/`doc:' keyword].
Pavel Janík <Pavel@Janik.cz>
parents:
39973
diff
changeset
|
952 (process, buffer) |
14085
85ce7bab31dc
(Fprocessp, Fget_buffer_process, Fdelete_process, Fprocess_status,
Erik Naggum <erik@naggum.no>
parents:
14036
diff
changeset
|
953 register Lisp_Object process, buffer; |
578 | 954 { |
43968
7ec801358b7e
(Qlocal, QCname, QCbuffer, QChost, QCservice, QCfamily)
Kim F. Storm <storm@cua.dk>
parents:
43642
diff
changeset
|
955 struct Lisp_Process *p; |
7ec801358b7e
(Qlocal, QCname, QCbuffer, QChost, QCservice, QCfamily)
Kim F. Storm <storm@cua.dk>
parents:
43642
diff
changeset
|
956 |
40656
cdfd4d09b79a
Update usage of CHECK_ macros (remove unused second argument).
Pavel Janík <Pavel@Janik.cz>
parents:
40641
diff
changeset
|
957 CHECK_PROCESS (process); |
578 | 958 if (!NILP (buffer)) |
40656
cdfd4d09b79a
Update usage of CHECK_ macros (remove unused second argument).
Pavel Janík <Pavel@Janik.cz>
parents:
40641
diff
changeset
|
959 CHECK_BUFFER (buffer); |
43968
7ec801358b7e
(Qlocal, QCname, QCbuffer, QChost, QCservice, QCfamily)
Kim F. Storm <storm@cua.dk>
parents:
43642
diff
changeset
|
960 p = XPROCESS (process); |
7ec801358b7e
(Qlocal, QCname, QCbuffer, QChost, QCservice, QCfamily)
Kim F. Storm <storm@cua.dk>
parents:
43642
diff
changeset
|
961 p->buffer = buffer; |
95884
d6a4488883dc
Daniel Engeler <engeler at gmail.com>
Glenn Morris <rgm@gnu.org>
parents:
95387
diff
changeset
|
962 if (NETCONN1_P (p) || SERIALCONN1_P (p)) |
43968
7ec801358b7e
(Qlocal, QCname, QCbuffer, QChost, QCservice, QCfamily)
Kim F. Storm <storm@cua.dk>
parents:
43642
diff
changeset
|
963 p->childp = Fplist_put (p->childp, QCbuffer, buffer); |
49667
cbec1327e2f1
(QCfilter_multibyte): New variable.
Kenichi Handa <handa@m17n.org>
parents:
49600
diff
changeset
|
964 setup_process_coding_systems (process); |
578 | 965 return buffer; |
966 } | |
967 | |
968 DEFUN ("process-buffer", Fprocess_buffer, Sprocess_buffer, | |
40103
6b389fb978bc
Change doc-string comments to `new style' [w/`doc:' keyword].
Pavel Janík <Pavel@Janik.cz>
parents:
39973
diff
changeset
|
969 1, 1, 0, |
6b389fb978bc
Change doc-string comments to `new style' [w/`doc:' keyword].
Pavel Janík <Pavel@Janik.cz>
parents:
39973
diff
changeset
|
970 doc: /* Return the buffer PROCESS is associated with. |
6b389fb978bc
Change doc-string comments to `new style' [w/`doc:' keyword].
Pavel Janík <Pavel@Janik.cz>
parents:
39973
diff
changeset
|
971 Output from PROCESS is inserted in this buffer unless PROCESS has a filter. */) |
6b389fb978bc
Change doc-string comments to `new style' [w/`doc:' keyword].
Pavel Janík <Pavel@Janik.cz>
parents:
39973
diff
changeset
|
972 (process) |
14085
85ce7bab31dc
(Fprocessp, Fget_buffer_process, Fdelete_process, Fprocess_status,
Erik Naggum <erik@naggum.no>
parents:
14036
diff
changeset
|
973 register Lisp_Object process; |
578 | 974 { |
40656
cdfd4d09b79a
Update usage of CHECK_ macros (remove unused second argument).
Pavel Janík <Pavel@Janik.cz>
parents:
40641
diff
changeset
|
975 CHECK_PROCESS (process); |
14085
85ce7bab31dc
(Fprocessp, Fget_buffer_process, Fdelete_process, Fprocess_status,
Erik Naggum <erik@naggum.no>
parents:
14036
diff
changeset
|
976 return XPROCESS (process)->buffer; |
578 | 977 } |
978 | |
979 DEFUN ("process-mark", Fprocess_mark, Sprocess_mark, | |
40103
6b389fb978bc
Change doc-string comments to `new style' [w/`doc:' keyword].
Pavel Janík <Pavel@Janik.cz>
parents:
39973
diff
changeset
|
980 1, 1, 0, |
6b389fb978bc
Change doc-string comments to `new style' [w/`doc:' keyword].
Pavel Janík <Pavel@Janik.cz>
parents:
39973
diff
changeset
|
981 doc: /* Return the marker for the end of the last output from PROCESS. */) |
6b389fb978bc
Change doc-string comments to `new style' [w/`doc:' keyword].
Pavel Janík <Pavel@Janik.cz>
parents:
39973
diff
changeset
|
982 (process) |
14085
85ce7bab31dc
(Fprocessp, Fget_buffer_process, Fdelete_process, Fprocess_status,
Erik Naggum <erik@naggum.no>
parents:
14036
diff
changeset
|
983 register Lisp_Object process; |
578 | 984 { |
40656
cdfd4d09b79a
Update usage of CHECK_ macros (remove unused second argument).
Pavel Janík <Pavel@Janik.cz>
parents:
40641
diff
changeset
|
985 CHECK_PROCESS (process); |
14085
85ce7bab31dc
(Fprocessp, Fget_buffer_process, Fdelete_process, Fprocess_status,
Erik Naggum <erik@naggum.no>
parents:
14036
diff
changeset
|
986 return XPROCESS (process)->mark; |
578 | 987 } |
988 | |
989 DEFUN ("set-process-filter", Fset_process_filter, Sset_process_filter, | |
40103
6b389fb978bc
Change doc-string comments to `new style' [w/`doc:' keyword].
Pavel Janík <Pavel@Janik.cz>
parents:
39973
diff
changeset
|
990 2, 2, 0, |
6b389fb978bc
Change doc-string comments to `new style' [w/`doc:' keyword].
Pavel Janík <Pavel@Janik.cz>
parents:
39973
diff
changeset
|
991 doc: /* Give PROCESS the filter function FILTER; nil means no filter. |
79147
f7416cac39e0
(Fset_process_filter): Doc fix.
Juanma Barranquero <lekktu@gmail.com>
parents:
78840
diff
changeset
|
992 A value of t means stop accepting output from the process. |
49281
f9e4999d3025
(set-process-filter): Document unibyte/multibyte-ness of string argument.
Kim F. Storm <storm@cua.dk>
parents:
49229
diff
changeset
|
993 |
f9e4999d3025
(set-process-filter): Document unibyte/multibyte-ness of string argument.
Kim F. Storm <storm@cua.dk>
parents:
49229
diff
changeset
|
994 When a process has a filter, its buffer is not used for output. |
f9e4999d3025
(set-process-filter): Document unibyte/multibyte-ness of string argument.
Kim F. Storm <storm@cua.dk>
parents:
49229
diff
changeset
|
995 Instead, each time it does output, the entire string of output is |
49600
23a1cea22d13
Trailing whitespace deleted.
Juanma Barranquero <lekktu@gmail.com>
parents:
49281
diff
changeset
|
996 passed to the filter. |
49281
f9e4999d3025
(set-process-filter): Document unibyte/multibyte-ness of string argument.
Kim F. Storm <storm@cua.dk>
parents:
49229
diff
changeset
|
997 |
40103
6b389fb978bc
Change doc-string comments to `new style' [w/`doc:' keyword].
Pavel Janík <Pavel@Janik.cz>
parents:
39973
diff
changeset
|
998 The filter gets two arguments: the process and the string of output. |
49281
f9e4999d3025
(set-process-filter): Document unibyte/multibyte-ness of string argument.
Kim F. Storm <storm@cua.dk>
parents:
49229
diff
changeset
|
999 The string argument is normally a multibyte string, except: |
f9e4999d3025
(set-process-filter): Document unibyte/multibyte-ness of string argument.
Kim F. Storm <storm@cua.dk>
parents:
49229
diff
changeset
|
1000 - if the process' input coding system is no-conversion or raw-text, |
f9e4999d3025
(set-process-filter): Document unibyte/multibyte-ness of string argument.
Kim F. Storm <storm@cua.dk>
parents:
49229
diff
changeset
|
1001 it is a unibyte string (the non-converted input), or else |
f9e4999d3025
(set-process-filter): Document unibyte/multibyte-ness of string argument.
Kim F. Storm <storm@cua.dk>
parents:
49229
diff
changeset
|
1002 - if `default-enable-multibyte-characters' is nil, it is a unibyte |
f9e4999d3025
(set-process-filter): Document unibyte/multibyte-ness of string argument.
Kim F. Storm <storm@cua.dk>
parents:
49229
diff
changeset
|
1003 string (the result of converting the decoded input multibyte |
f9e4999d3025
(set-process-filter): Document unibyte/multibyte-ness of string argument.
Kim F. Storm <storm@cua.dk>
parents:
49229
diff
changeset
|
1004 string to unibyte with `string-make-unibyte'). */) |
40103
6b389fb978bc
Change doc-string comments to `new style' [w/`doc:' keyword].
Pavel Janík <Pavel@Janik.cz>
parents:
39973
diff
changeset
|
1005 (process, filter) |
14085
85ce7bab31dc
(Fprocessp, Fget_buffer_process, Fdelete_process, Fprocess_status,
Erik Naggum <erik@naggum.no>
parents:
14036
diff
changeset
|
1006 register Lisp_Object process, filter; |
578 | 1007 { |
36623
9fde2182c68a
(Fset_process_filter): Don't crash if the input
Gerd Moellmann <gerd@gnu.org>
parents:
36434
diff
changeset
|
1008 struct Lisp_Process *p; |
49600
23a1cea22d13
Trailing whitespace deleted.
Juanma Barranquero <lekktu@gmail.com>
parents:
49281
diff
changeset
|
1009 |
40656
cdfd4d09b79a
Update usage of CHECK_ macros (remove unused second argument).
Pavel Janík <Pavel@Janik.cz>
parents:
40641
diff
changeset
|
1010 CHECK_PROCESS (process); |
36623
9fde2182c68a
(Fset_process_filter): Don't crash if the input
Gerd Moellmann <gerd@gnu.org>
parents:
36434
diff
changeset
|
1011 p = XPROCESS (process); |
9fde2182c68a
(Fset_process_filter): Don't crash if the input
Gerd Moellmann <gerd@gnu.org>
parents:
36434
diff
changeset
|
1012 |
9fde2182c68a
(Fset_process_filter): Don't crash if the input
Gerd Moellmann <gerd@gnu.org>
parents:
36434
diff
changeset
|
1013 /* Don't signal an error if the process' input file descriptor |
9fde2182c68a
(Fset_process_filter): Don't crash if the input
Gerd Moellmann <gerd@gnu.org>
parents:
36434
diff
changeset
|
1014 is closed. This could make debugging Lisp more difficult, |
9fde2182c68a
(Fset_process_filter): Don't crash if the input
Gerd Moellmann <gerd@gnu.org>
parents:
36434
diff
changeset
|
1015 for example when doing something like |
9fde2182c68a
(Fset_process_filter): Don't crash if the input
Gerd Moellmann <gerd@gnu.org>
parents:
36434
diff
changeset
|
1016 |
9fde2182c68a
(Fset_process_filter): Don't crash if the input
Gerd Moellmann <gerd@gnu.org>
parents:
36434
diff
changeset
|
1017 (setq process (start-process ...)) |
9fde2182c68a
(Fset_process_filter): Don't crash if the input
Gerd Moellmann <gerd@gnu.org>
parents:
36434
diff
changeset
|
1018 (debug) |
9fde2182c68a
(Fset_process_filter): Don't crash if the input
Gerd Moellmann <gerd@gnu.org>
parents:
36434
diff
changeset
|
1019 (set-process-filter process ...) */ |
49600
23a1cea22d13
Trailing whitespace deleted.
Juanma Barranquero <lekktu@gmail.com>
parents:
49281
diff
changeset
|
1020 |
81826
077a1e6fd3f2
(struct Lisp_Process): Turn slots infd, outfd, kill_without_query, pty_flag,
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
80984
diff
changeset
|
1021 if (p->infd >= 0) |
9686
cd788aa8cb2a
Handle multiple keyboard input descriptors.
Richard M. Stallman <rms@gnu.org>
parents:
9334
diff
changeset
|
1022 { |
43968
7ec801358b7e
(Qlocal, QCname, QCbuffer, QChost, QCservice, QCfamily)
Kim F. Storm <storm@cua.dk>
parents:
43642
diff
changeset
|
1023 if (EQ (filter, Qt) && !EQ (p->status, Qlisten)) |
36623
9fde2182c68a
(Fset_process_filter): Don't crash if the input
Gerd Moellmann <gerd@gnu.org>
parents:
36434
diff
changeset
|
1024 { |
81826
077a1e6fd3f2
(struct Lisp_Process): Turn slots infd, outfd, kill_without_query, pty_flag,
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
80984
diff
changeset
|
1025 FD_CLR (p->infd, &input_wait_mask); |
077a1e6fd3f2
(struct Lisp_Process): Turn slots infd, outfd, kill_without_query, pty_flag,
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
80984
diff
changeset
|
1026 FD_CLR (p->infd, &non_keyboard_wait_mask); |
36623
9fde2182c68a
(Fset_process_filter): Don't crash if the input
Gerd Moellmann <gerd@gnu.org>
parents:
36434
diff
changeset
|
1027 } |
43968
7ec801358b7e
(Qlocal, QCname, QCbuffer, QChost, QCservice, QCfamily)
Kim F. Storm <storm@cua.dk>
parents:
43642
diff
changeset
|
1028 else if (EQ (p->filter, Qt) |
95884
d6a4488883dc
Daniel Engeler <engeler at gmail.com>
Glenn Morris <rgm@gnu.org>
parents:
95387
diff
changeset
|
1029 /* Network or serial process not stopped: */ |
d6a4488883dc
Daniel Engeler <engeler at gmail.com>
Glenn Morris <rgm@gnu.org>
parents:
95387
diff
changeset
|
1030 && !EQ (p->command, Qt)) |
36623
9fde2182c68a
(Fset_process_filter): Don't crash if the input
Gerd Moellmann <gerd@gnu.org>
parents:
36434
diff
changeset
|
1031 { |
81826
077a1e6fd3f2
(struct Lisp_Process): Turn slots infd, outfd, kill_without_query, pty_flag,
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
80984
diff
changeset
|
1032 FD_SET (p->infd, &input_wait_mask); |
077a1e6fd3f2
(struct Lisp_Process): Turn slots infd, outfd, kill_without_query, pty_flag,
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
80984
diff
changeset
|
1033 FD_SET (p->infd, &non_keyboard_wait_mask); |
36623
9fde2182c68a
(Fset_process_filter): Don't crash if the input
Gerd Moellmann <gerd@gnu.org>
parents:
36434
diff
changeset
|
1034 } |
9686
cd788aa8cb2a
Handle multiple keyboard input descriptors.
Richard M. Stallman <rms@gnu.org>
parents:
9334
diff
changeset
|
1035 } |
49600
23a1cea22d13
Trailing whitespace deleted.
Juanma Barranquero <lekktu@gmail.com>
parents:
49281
diff
changeset
|
1036 |
36623
9fde2182c68a
(Fset_process_filter): Don't crash if the input
Gerd Moellmann <gerd@gnu.org>
parents:
36434
diff
changeset
|
1037 p->filter = filter; |
95884
d6a4488883dc
Daniel Engeler <engeler at gmail.com>
Glenn Morris <rgm@gnu.org>
parents:
95387
diff
changeset
|
1038 if (NETCONN1_P (p) || SERIALCONN1_P (p)) |
43968
7ec801358b7e
(Qlocal, QCname, QCbuffer, QChost, QCservice, QCfamily)
Kim F. Storm <storm@cua.dk>
parents:
43642
diff
changeset
|
1039 p->childp = Fplist_put (p->childp, QCfilter, filter); |
49667
cbec1327e2f1
(QCfilter_multibyte): New variable.
Kenichi Handa <handa@m17n.org>
parents:
49600
diff
changeset
|
1040 setup_process_coding_systems (process); |
578 | 1041 return filter; |
1042 } | |
1043 | |
1044 DEFUN ("process-filter", Fprocess_filter, Sprocess_filter, | |
40103
6b389fb978bc
Change doc-string comments to `new style' [w/`doc:' keyword].
Pavel Janík <Pavel@Janik.cz>
parents:
39973
diff
changeset
|
1045 1, 1, 0, |
6b389fb978bc
Change doc-string comments to `new style' [w/`doc:' keyword].
Pavel Janík <Pavel@Janik.cz>
parents:
39973
diff
changeset
|
1046 doc: /* Returns the filter function of PROCESS; nil if none. |
6b389fb978bc
Change doc-string comments to `new style' [w/`doc:' keyword].
Pavel Janík <Pavel@Janik.cz>
parents:
39973
diff
changeset
|
1047 See `set-process-filter' for more info on filter functions. */) |
6b389fb978bc
Change doc-string comments to `new style' [w/`doc:' keyword].
Pavel Janík <Pavel@Janik.cz>
parents:
39973
diff
changeset
|
1048 (process) |
14085
85ce7bab31dc
(Fprocessp, Fget_buffer_process, Fdelete_process, Fprocess_status,
Erik Naggum <erik@naggum.no>
parents:
14036
diff
changeset
|
1049 register Lisp_Object process; |
578 | 1050 { |
40656
cdfd4d09b79a
Update usage of CHECK_ macros (remove unused second argument).
Pavel Janík <Pavel@Janik.cz>
parents:
40641
diff
changeset
|
1051 CHECK_PROCESS (process); |
14085
85ce7bab31dc
(Fprocessp, Fget_buffer_process, Fdelete_process, Fprocess_status,
Erik Naggum <erik@naggum.no>
parents:
14036
diff
changeset
|
1052 return XPROCESS (process)->filter; |
578 | 1053 } |
1054 | |
1055 DEFUN ("set-process-sentinel", Fset_process_sentinel, Sset_process_sentinel, | |
40103
6b389fb978bc
Change doc-string comments to `new style' [w/`doc:' keyword].
Pavel Janík <Pavel@Janik.cz>
parents:
39973
diff
changeset
|
1056 2, 2, 0, |
6b389fb978bc
Change doc-string comments to `new style' [w/`doc:' keyword].
Pavel Janík <Pavel@Janik.cz>
parents:
39973
diff
changeset
|
1057 doc: /* Give PROCESS the sentinel SENTINEL; nil for none. |
6b389fb978bc
Change doc-string comments to `new style' [w/`doc:' keyword].
Pavel Janík <Pavel@Janik.cz>
parents:
39973
diff
changeset
|
1058 The sentinel is called as a function when the process changes state. |
6b389fb978bc
Change doc-string comments to `new style' [w/`doc:' keyword].
Pavel Janík <Pavel@Janik.cz>
parents:
39973
diff
changeset
|
1059 It gets two arguments: the process, and a string describing the change. */) |
6b389fb978bc
Change doc-string comments to `new style' [w/`doc:' keyword].
Pavel Janík <Pavel@Janik.cz>
parents:
39973
diff
changeset
|
1060 (process, sentinel) |
14085
85ce7bab31dc
(Fprocessp, Fget_buffer_process, Fdelete_process, Fprocess_status,
Erik Naggum <erik@naggum.no>
parents:
14036
diff
changeset
|
1061 register Lisp_Object process, sentinel; |
578 | 1062 { |
52516
0ca23eb697b9
(Fset_process_sentinel): Add sentinel to childp plist
Kim F. Storm <storm@cua.dk>
parents:
52503
diff
changeset
|
1063 struct Lisp_Process *p; |
0ca23eb697b9
(Fset_process_sentinel): Add sentinel to childp plist
Kim F. Storm <storm@cua.dk>
parents:
52503
diff
changeset
|
1064 |
40656
cdfd4d09b79a
Update usage of CHECK_ macros (remove unused second argument).
Pavel Janík <Pavel@Janik.cz>
parents:
40641
diff
changeset
|
1065 CHECK_PROCESS (process); |
52516
0ca23eb697b9
(Fset_process_sentinel): Add sentinel to childp plist
Kim F. Storm <storm@cua.dk>
parents:
52503
diff
changeset
|
1066 p = XPROCESS (process); |
0ca23eb697b9
(Fset_process_sentinel): Add sentinel to childp plist
Kim F. Storm <storm@cua.dk>
parents:
52503
diff
changeset
|
1067 |
0ca23eb697b9
(Fset_process_sentinel): Add sentinel to childp plist
Kim F. Storm <storm@cua.dk>
parents:
52503
diff
changeset
|
1068 p->sentinel = sentinel; |
95884
d6a4488883dc
Daniel Engeler <engeler at gmail.com>
Glenn Morris <rgm@gnu.org>
parents:
95387
diff
changeset
|
1069 if (NETCONN1_P (p) || SERIALCONN1_P (p)) |
52516
0ca23eb697b9
(Fset_process_sentinel): Add sentinel to childp plist
Kim F. Storm <storm@cua.dk>
parents:
52503
diff
changeset
|
1070 p->childp = Fplist_put (p->childp, QCsentinel, sentinel); |
578 | 1071 return sentinel; |
1072 } | |
1073 | |
1074 DEFUN ("process-sentinel", Fprocess_sentinel, Sprocess_sentinel, | |
40103
6b389fb978bc
Change doc-string comments to `new style' [w/`doc:' keyword].
Pavel Janík <Pavel@Janik.cz>
parents:
39973
diff
changeset
|
1075 1, 1, 0, |
6b389fb978bc
Change doc-string comments to `new style' [w/`doc:' keyword].
Pavel Janík <Pavel@Janik.cz>
parents:
39973
diff
changeset
|
1076 doc: /* Return the sentinel of PROCESS; nil if none. |
6b389fb978bc
Change doc-string comments to `new style' [w/`doc:' keyword].
Pavel Janík <Pavel@Janik.cz>
parents:
39973
diff
changeset
|
1077 See `set-process-sentinel' for more info on sentinels. */) |
6b389fb978bc
Change doc-string comments to `new style' [w/`doc:' keyword].
Pavel Janík <Pavel@Janik.cz>
parents:
39973
diff
changeset
|
1078 (process) |
14085
85ce7bab31dc
(Fprocessp, Fget_buffer_process, Fdelete_process, Fprocess_status,
Erik Naggum <erik@naggum.no>
parents:
14036
diff
changeset
|
1079 register Lisp_Object process; |
578 | 1080 { |
40656
cdfd4d09b79a
Update usage of CHECK_ macros (remove unused second argument).
Pavel Janík <Pavel@Janik.cz>
parents:
40641
diff
changeset
|
1081 CHECK_PROCESS (process); |
14085
85ce7bab31dc
(Fprocessp, Fget_buffer_process, Fdelete_process, Fprocess_status,
Erik Naggum <erik@naggum.no>
parents:
14036
diff
changeset
|
1082 return XPROCESS (process)->sentinel; |
578 | 1083 } |
1084 | |
6830
bcaddbe53068
(Fset_process_window_size): New function.
Richard M. Stallman <rms@gnu.org>
parents:
6823
diff
changeset
|
1085 DEFUN ("set-process-window-size", Fset_process_window_size, |
40103
6b389fb978bc
Change doc-string comments to `new style' [w/`doc:' keyword].
Pavel Janík <Pavel@Janik.cz>
parents:
39973
diff
changeset
|
1086 Sset_process_window_size, 3, 3, 0, |
6b389fb978bc
Change doc-string comments to `new style' [w/`doc:' keyword].
Pavel Janík <Pavel@Janik.cz>
parents:
39973
diff
changeset
|
1087 doc: /* Tell PROCESS that it has logical window size HEIGHT and WIDTH. */) |
6b389fb978bc
Change doc-string comments to `new style' [w/`doc:' keyword].
Pavel Janík <Pavel@Janik.cz>
parents:
39973
diff
changeset
|
1088 (process, height, width) |
14085
85ce7bab31dc
(Fprocessp, Fget_buffer_process, Fdelete_process, Fprocess_status,
Erik Naggum <erik@naggum.no>
parents:
14036
diff
changeset
|
1089 register Lisp_Object process, height, width; |
6830
bcaddbe53068
(Fset_process_window_size): New function.
Richard M. Stallman <rms@gnu.org>
parents:
6823
diff
changeset
|
1090 { |
40656
cdfd4d09b79a
Update usage of CHECK_ macros (remove unused second argument).
Pavel Janík <Pavel@Janik.cz>
parents:
40641
diff
changeset
|
1091 CHECK_PROCESS (process); |
cdfd4d09b79a
Update usage of CHECK_ macros (remove unused second argument).
Pavel Janík <Pavel@Janik.cz>
parents:
40641
diff
changeset
|
1092 CHECK_NATNUM (height); |
cdfd4d09b79a
Update usage of CHECK_ macros (remove unused second argument).
Pavel Janík <Pavel@Janik.cz>
parents:
40641
diff
changeset
|
1093 CHECK_NATNUM (width); |
49600
23a1cea22d13
Trailing whitespace deleted.
Juanma Barranquero <lekktu@gmail.com>
parents:
49281
diff
changeset
|
1094 |
81826
077a1e6fd3f2
(struct Lisp_Process): Turn slots infd, outfd, kill_without_query, pty_flag,
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
80984
diff
changeset
|
1095 if (XPROCESS (process)->infd < 0 |
077a1e6fd3f2
(struct Lisp_Process): Turn slots infd, outfd, kill_without_query, pty_flag,
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
80984
diff
changeset
|
1096 || set_window_size (XPROCESS (process)->infd, |
36623
9fde2182c68a
(Fset_process_filter): Don't crash if the input
Gerd Moellmann <gerd@gnu.org>
parents:
36434
diff
changeset
|
1097 XINT (height), XINT (width)) <= 0) |
6830
bcaddbe53068
(Fset_process_window_size): New function.
Richard M. Stallman <rms@gnu.org>
parents:
6823
diff
changeset
|
1098 return Qnil; |
bcaddbe53068
(Fset_process_window_size): New function.
Richard M. Stallman <rms@gnu.org>
parents:
6823
diff
changeset
|
1099 else |
bcaddbe53068
(Fset_process_window_size): New function.
Richard M. Stallman <rms@gnu.org>
parents:
6823
diff
changeset
|
1100 return Qt; |
bcaddbe53068
(Fset_process_window_size): New function.
Richard M. Stallman <rms@gnu.org>
parents:
6823
diff
changeset
|
1101 } |
bcaddbe53068
(Fset_process_window_size): New function.
Richard M. Stallman <rms@gnu.org>
parents:
6823
diff
changeset
|
1102 |
21656
bb39a5863a82
(Fset_process_inherit_coding_system_flag,
Eli Zaretskii <eliz@gnu.org>
parents:
21530
diff
changeset
|
1103 DEFUN ("set-process-inherit-coding-system-flag", |
40103
6b389fb978bc
Change doc-string comments to `new style' [w/`doc:' keyword].
Pavel Janík <Pavel@Janik.cz>
parents:
39973
diff
changeset
|
1104 Fset_process_inherit_coding_system_flag, |
6b389fb978bc
Change doc-string comments to `new style' [w/`doc:' keyword].
Pavel Janík <Pavel@Janik.cz>
parents:
39973
diff
changeset
|
1105 Sset_process_inherit_coding_system_flag, 2, 2, 0, |
6b389fb978bc
Change doc-string comments to `new style' [w/`doc:' keyword].
Pavel Janík <Pavel@Janik.cz>
parents:
39973
diff
changeset
|
1106 doc: /* Determine whether buffer of PROCESS will inherit coding-system. |
6b389fb978bc
Change doc-string comments to `new style' [w/`doc:' keyword].
Pavel Janík <Pavel@Janik.cz>
parents:
39973
diff
changeset
|
1107 If the second argument FLAG is non-nil, then the variable |
6b389fb978bc
Change doc-string comments to `new style' [w/`doc:' keyword].
Pavel Janík <Pavel@Janik.cz>
parents:
39973
diff
changeset
|
1108 `buffer-file-coding-system' of the buffer associated with PROCESS |
6b389fb978bc
Change doc-string comments to `new style' [w/`doc:' keyword].
Pavel Janík <Pavel@Janik.cz>
parents:
39973
diff
changeset
|
1109 will be bound to the value of the coding system used to decode |
6b389fb978bc
Change doc-string comments to `new style' [w/`doc:' keyword].
Pavel Janík <Pavel@Janik.cz>
parents:
39973
diff
changeset
|
1110 the process output. |
6b389fb978bc
Change doc-string comments to `new style' [w/`doc:' keyword].
Pavel Janík <Pavel@Janik.cz>
parents:
39973
diff
changeset
|
1111 |
6b389fb978bc
Change doc-string comments to `new style' [w/`doc:' keyword].
Pavel Janík <Pavel@Janik.cz>
parents:
39973
diff
changeset
|
1112 This is useful when the coding system specified for the process buffer |
6b389fb978bc
Change doc-string comments to `new style' [w/`doc:' keyword].
Pavel Janík <Pavel@Janik.cz>
parents:
39973
diff
changeset
|
1113 leaves either the character code conversion or the end-of-line conversion |
6b389fb978bc
Change doc-string comments to `new style' [w/`doc:' keyword].
Pavel Janík <Pavel@Janik.cz>
parents:
39973
diff
changeset
|
1114 unspecified, or if the coding system used to decode the process output |
6b389fb978bc
Change doc-string comments to `new style' [w/`doc:' keyword].
Pavel Janík <Pavel@Janik.cz>
parents:
39973
diff
changeset
|
1115 is more appropriate for saving the process buffer. |
6b389fb978bc
Change doc-string comments to `new style' [w/`doc:' keyword].
Pavel Janík <Pavel@Janik.cz>
parents:
39973
diff
changeset
|
1116 |
6b389fb978bc
Change doc-string comments to `new style' [w/`doc:' keyword].
Pavel Janík <Pavel@Janik.cz>
parents:
39973
diff
changeset
|
1117 Binding the variable `inherit-process-coding-system' to non-nil before |
6b389fb978bc
Change doc-string comments to `new style' [w/`doc:' keyword].
Pavel Janík <Pavel@Janik.cz>
parents:
39973
diff
changeset
|
1118 starting the process is an alternative way of setting the inherit flag |
6b389fb978bc
Change doc-string comments to `new style' [w/`doc:' keyword].
Pavel Janík <Pavel@Janik.cz>
parents:
39973
diff
changeset
|
1119 for the process which will run. */) |
6b389fb978bc
Change doc-string comments to `new style' [w/`doc:' keyword].
Pavel Janík <Pavel@Janik.cz>
parents:
39973
diff
changeset
|
1120 (process, flag) |
21656
bb39a5863a82
(Fset_process_inherit_coding_system_flag,
Eli Zaretskii <eliz@gnu.org>
parents:
21530
diff
changeset
|
1121 register Lisp_Object process, flag; |
bb39a5863a82
(Fset_process_inherit_coding_system_flag,
Eli Zaretskii <eliz@gnu.org>
parents:
21530
diff
changeset
|
1122 { |
40656
cdfd4d09b79a
Update usage of CHECK_ macros (remove unused second argument).
Pavel Janík <Pavel@Janik.cz>
parents:
40641
diff
changeset
|
1123 CHECK_PROCESS (process); |
81826
077a1e6fd3f2
(struct Lisp_Process): Turn slots infd, outfd, kill_without_query, pty_flag,
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
80984
diff
changeset
|
1124 XPROCESS (process)->inherit_coding_system_flag = !NILP (flag); |
21656
bb39a5863a82
(Fset_process_inherit_coding_system_flag,
Eli Zaretskii <eliz@gnu.org>
parents:
21530
diff
changeset
|
1125 return flag; |
bb39a5863a82
(Fset_process_inherit_coding_system_flag,
Eli Zaretskii <eliz@gnu.org>
parents:
21530
diff
changeset
|
1126 } |
bb39a5863a82
(Fset_process_inherit_coding_system_flag,
Eli Zaretskii <eliz@gnu.org>
parents:
21530
diff
changeset
|
1127 |
bb39a5863a82
(Fset_process_inherit_coding_system_flag,
Eli Zaretskii <eliz@gnu.org>
parents:
21530
diff
changeset
|
1128 DEFUN ("process-inherit-coding-system-flag", |
40103
6b389fb978bc
Change doc-string comments to `new style' [w/`doc:' keyword].
Pavel Janík <Pavel@Janik.cz>
parents:
39973
diff
changeset
|
1129 Fprocess_inherit_coding_system_flag, Sprocess_inherit_coding_system_flag, |
6b389fb978bc
Change doc-string comments to `new style' [w/`doc:' keyword].
Pavel Janík <Pavel@Janik.cz>
parents:
39973
diff
changeset
|
1130 1, 1, 0, |
6b389fb978bc
Change doc-string comments to `new style' [w/`doc:' keyword].
Pavel Janík <Pavel@Janik.cz>
parents:
39973
diff
changeset
|
1131 doc: /* Return the value of inherit-coding-system flag for PROCESS. |
6b389fb978bc
Change doc-string comments to `new style' [w/`doc:' keyword].
Pavel Janík <Pavel@Janik.cz>
parents:
39973
diff
changeset
|
1132 If this flag is t, `buffer-file-coding-system' of the buffer |
6b389fb978bc
Change doc-string comments to `new style' [w/`doc:' keyword].
Pavel Janík <Pavel@Janik.cz>
parents:
39973
diff
changeset
|
1133 associated with PROCESS will inherit the coding system used to decode |
6b389fb978bc
Change doc-string comments to `new style' [w/`doc:' keyword].
Pavel Janík <Pavel@Janik.cz>
parents:
39973
diff
changeset
|
1134 the process output. */) |
6b389fb978bc
Change doc-string comments to `new style' [w/`doc:' keyword].
Pavel Janík <Pavel@Janik.cz>
parents:
39973
diff
changeset
|
1135 (process) |
21656
bb39a5863a82
(Fset_process_inherit_coding_system_flag,
Eli Zaretskii <eliz@gnu.org>
parents:
21530
diff
changeset
|
1136 register Lisp_Object process; |
bb39a5863a82
(Fset_process_inherit_coding_system_flag,
Eli Zaretskii <eliz@gnu.org>
parents:
21530
diff
changeset
|
1137 { |
40656
cdfd4d09b79a
Update usage of CHECK_ macros (remove unused second argument).
Pavel Janík <Pavel@Janik.cz>
parents:
40641
diff
changeset
|
1138 CHECK_PROCESS (process); |
81826
077a1e6fd3f2
(struct Lisp_Process): Turn slots infd, outfd, kill_without_query, pty_flag,
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
80984
diff
changeset
|
1139 return XPROCESS (process)->inherit_coding_system_flag ? Qt : Qnil; |
21656
bb39a5863a82
(Fset_process_inherit_coding_system_flag,
Eli Zaretskii <eliz@gnu.org>
parents:
21530
diff
changeset
|
1140 } |
bb39a5863a82
(Fset_process_inherit_coding_system_flag,
Eli Zaretskii <eliz@gnu.org>
parents:
21530
diff
changeset
|
1141 |
43968
7ec801358b7e
(Qlocal, QCname, QCbuffer, QChost, QCservice, QCfamily)
Kim F. Storm <storm@cua.dk>
parents:
43642
diff
changeset
|
1142 DEFUN ("set-process-query-on-exit-flag", |
7ec801358b7e
(Qlocal, QCname, QCbuffer, QChost, QCservice, QCfamily)
Kim F. Storm <storm@cua.dk>
parents:
43642
diff
changeset
|
1143 Fset_process_query_on_exit_flag, Sset_process_query_on_exit_flag, |
7ec801358b7e
(Qlocal, QCname, QCbuffer, QChost, QCservice, QCfamily)
Kim F. Storm <storm@cua.dk>
parents:
43642
diff
changeset
|
1144 2, 2, 0, |
7ec801358b7e
(Qlocal, QCname, QCbuffer, QChost, QCservice, QCfamily)
Kim F. Storm <storm@cua.dk>
parents:
43642
diff
changeset
|
1145 doc: /* Specify if query is needed for PROCESS when Emacs is exited. |
55444
976d03256b41
(Fwaiting_for_user_input_p, Fmake_network_process)
Juanma Barranquero <lekktu@gmail.com>
parents:
53835
diff
changeset
|
1146 If the second argument FLAG is non-nil, Emacs will query the user before |
103972
2e99121a6895
(Fset_process_query_on_exit_flag): Mention killing
Juri Linkov <juri@jurta.org>
parents:
103621
diff
changeset
|
1147 exiting or killing a buffer if PROCESS is running. */) |
43968
7ec801358b7e
(Qlocal, QCname, QCbuffer, QChost, QCservice, QCfamily)
Kim F. Storm <storm@cua.dk>
parents:
43642
diff
changeset
|
1148 (process, flag) |
7ec801358b7e
(Qlocal, QCname, QCbuffer, QChost, QCservice, QCfamily)
Kim F. Storm <storm@cua.dk>
parents:
43642
diff
changeset
|
1149 register Lisp_Object process, flag; |
578 | 1150 { |
40656
cdfd4d09b79a
Update usage of CHECK_ macros (remove unused second argument).
Pavel Janík <Pavel@Janik.cz>
parents:
40641
diff
changeset
|
1151 CHECK_PROCESS (process); |
81826
077a1e6fd3f2
(struct Lisp_Process): Turn slots infd, outfd, kill_without_query, pty_flag,
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
80984
diff
changeset
|
1152 XPROCESS (process)->kill_without_query = NILP (flag); |
43968
7ec801358b7e
(Qlocal, QCname, QCbuffer, QChost, QCservice, QCfamily)
Kim F. Storm <storm@cua.dk>
parents:
43642
diff
changeset
|
1153 return flag; |
578 | 1154 } |
4231
91a883c56382
(Fget_buffer_process): Delete doc string from
Richard M. Stallman <rms@gnu.org>
parents:
4057
diff
changeset
|
1155 |
43968
7ec801358b7e
(Qlocal, QCname, QCbuffer, QChost, QCservice, QCfamily)
Kim F. Storm <storm@cua.dk>
parents:
43642
diff
changeset
|
1156 DEFUN ("process-query-on-exit-flag", |
7ec801358b7e
(Qlocal, QCname, QCbuffer, QChost, QCservice, QCfamily)
Kim F. Storm <storm@cua.dk>
parents:
43642
diff
changeset
|
1157 Fprocess_query_on_exit_flag, Sprocess_query_on_exit_flag, |
40103
6b389fb978bc
Change doc-string comments to `new style' [w/`doc:' keyword].
Pavel Janík <Pavel@Janik.cz>
parents:
39973
diff
changeset
|
1158 1, 1, 0, |
55444
976d03256b41
(Fwaiting_for_user_input_p, Fmake_network_process)
Juanma Barranquero <lekktu@gmail.com>
parents:
53835
diff
changeset
|
1159 doc: /* Return the current value of query-on-exit flag for PROCESS. */) |
40103
6b389fb978bc
Change doc-string comments to `new style' [w/`doc:' keyword].
Pavel Janík <Pavel@Janik.cz>
parents:
39973
diff
changeset
|
1160 (process) |
16058
924aeb9ed7c3
(Fprocess_contact): New function.
Richard M. Stallman <rms@gnu.org>
parents:
16053
diff
changeset
|
1161 register Lisp_Object process; |
924aeb9ed7c3
(Fprocess_contact): New function.
Richard M. Stallman <rms@gnu.org>
parents:
16053
diff
changeset
|
1162 { |
40656
cdfd4d09b79a
Update usage of CHECK_ macros (remove unused second argument).
Pavel Janík <Pavel@Janik.cz>
parents:
40641
diff
changeset
|
1163 CHECK_PROCESS (process); |
81826
077a1e6fd3f2
(struct Lisp_Process): Turn slots infd, outfd, kill_without_query, pty_flag,
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
80984
diff
changeset
|
1164 return (XPROCESS (process)->kill_without_query ? Qnil : Qt); |
43968
7ec801358b7e
(Qlocal, QCname, QCbuffer, QChost, QCservice, QCfamily)
Kim F. Storm <storm@cua.dk>
parents:
43642
diff
changeset
|
1165 } |
7ec801358b7e
(Qlocal, QCname, QCbuffer, QChost, QCservice, QCfamily)
Kim F. Storm <storm@cua.dk>
parents:
43642
diff
changeset
|
1166 |
7ec801358b7e
(Qlocal, QCname, QCbuffer, QChost, QCservice, QCfamily)
Kim F. Storm <storm@cua.dk>
parents:
43642
diff
changeset
|
1167 #ifdef DATAGRAM_SOCKETS |
7ec801358b7e
(Qlocal, QCname, QCbuffer, QChost, QCservice, QCfamily)
Kim F. Storm <storm@cua.dk>
parents:
43642
diff
changeset
|
1168 Lisp_Object Fprocess_datagram_address (); |
7ec801358b7e
(Qlocal, QCname, QCbuffer, QChost, QCservice, QCfamily)
Kim F. Storm <storm@cua.dk>
parents:
43642
diff
changeset
|
1169 #endif |
7ec801358b7e
(Qlocal, QCname, QCbuffer, QChost, QCservice, QCfamily)
Kim F. Storm <storm@cua.dk>
parents:
43642
diff
changeset
|
1170 |
7ec801358b7e
(Qlocal, QCname, QCbuffer, QChost, QCservice, QCfamily)
Kim F. Storm <storm@cua.dk>
parents:
43642
diff
changeset
|
1171 DEFUN ("process-contact", Fprocess_contact, Sprocess_contact, |
7ec801358b7e
(Qlocal, QCname, QCbuffer, QChost, QCservice, QCfamily)
Kim F. Storm <storm@cua.dk>
parents:
43642
diff
changeset
|
1172 1, 2, 0, |
7ec801358b7e
(Qlocal, QCname, QCbuffer, QChost, QCservice, QCfamily)
Kim F. Storm <storm@cua.dk>
parents:
43642
diff
changeset
|
1173 doc: /* Return the contact info of PROCESS; t for a real child. |
95884
d6a4488883dc
Daniel Engeler <engeler at gmail.com>
Glenn Morris <rgm@gnu.org>
parents:
95387
diff
changeset
|
1174 For a network or serial connection, the value depends on the optional |
d6a4488883dc
Daniel Engeler <engeler at gmail.com>
Glenn Morris <rgm@gnu.org>
parents:
95387
diff
changeset
|
1175 KEY arg. If KEY is nil, value is a cons cell of the form (HOST |
d6a4488883dc
Daniel Engeler <engeler at gmail.com>
Glenn Morris <rgm@gnu.org>
parents:
95387
diff
changeset
|
1176 SERVICE) for a network connection or (PORT SPEED) for a serial |
d6a4488883dc
Daniel Engeler <engeler at gmail.com>
Glenn Morris <rgm@gnu.org>
parents:
95387
diff
changeset
|
1177 connection. If KEY is t, the complete contact information for the |
d6a4488883dc
Daniel Engeler <engeler at gmail.com>
Glenn Morris <rgm@gnu.org>
parents:
95387
diff
changeset
|
1178 connection is returned, else the specific value for the keyword KEY is |
d6a4488883dc
Daniel Engeler <engeler at gmail.com>
Glenn Morris <rgm@gnu.org>
parents:
95387
diff
changeset
|
1179 returned. See `make-network-process' or `make-serial-process' for a |
d6a4488883dc
Daniel Engeler <engeler at gmail.com>
Glenn Morris <rgm@gnu.org>
parents:
95387
diff
changeset
|
1180 list of keywords. */) |
43968
7ec801358b7e
(Qlocal, QCname, QCbuffer, QChost, QCservice, QCfamily)
Kim F. Storm <storm@cua.dk>
parents:
43642
diff
changeset
|
1181 (process, key) |
7ec801358b7e
(Qlocal, QCname, QCbuffer, QChost, QCservice, QCfamily)
Kim F. Storm <storm@cua.dk>
parents:
43642
diff
changeset
|
1182 register Lisp_Object process, key; |
7ec801358b7e
(Qlocal, QCname, QCbuffer, QChost, QCservice, QCfamily)
Kim F. Storm <storm@cua.dk>
parents:
43642
diff
changeset
|
1183 { |
7ec801358b7e
(Qlocal, QCname, QCbuffer, QChost, QCservice, QCfamily)
Kim F. Storm <storm@cua.dk>
parents:
43642
diff
changeset
|
1184 Lisp_Object contact; |
7ec801358b7e
(Qlocal, QCname, QCbuffer, QChost, QCservice, QCfamily)
Kim F. Storm <storm@cua.dk>
parents:
43642
diff
changeset
|
1185 |
7ec801358b7e
(Qlocal, QCname, QCbuffer, QChost, QCservice, QCfamily)
Kim F. Storm <storm@cua.dk>
parents:
43642
diff
changeset
|
1186 CHECK_PROCESS (process); |
7ec801358b7e
(Qlocal, QCname, QCbuffer, QChost, QCservice, QCfamily)
Kim F. Storm <storm@cua.dk>
parents:
43642
diff
changeset
|
1187 contact = XPROCESS (process)->childp; |
7ec801358b7e
(Qlocal, QCname, QCbuffer, QChost, QCservice, QCfamily)
Kim F. Storm <storm@cua.dk>
parents:
43642
diff
changeset
|
1188 |
7ec801358b7e
(Qlocal, QCname, QCbuffer, QChost, QCservice, QCfamily)
Kim F. Storm <storm@cua.dk>
parents:
43642
diff
changeset
|
1189 #ifdef DATAGRAM_SOCKETS |
7ec801358b7e
(Qlocal, QCname, QCbuffer, QChost, QCservice, QCfamily)
Kim F. Storm <storm@cua.dk>
parents:
43642
diff
changeset
|
1190 if (DATAGRAM_CONN_P (process) |
7ec801358b7e
(Qlocal, QCname, QCbuffer, QChost, QCservice, QCfamily)
Kim F. Storm <storm@cua.dk>
parents:
43642
diff
changeset
|
1191 && (EQ (key, Qt) || EQ (key, QCremote))) |
49600
23a1cea22d13
Trailing whitespace deleted.
Juanma Barranquero <lekktu@gmail.com>
parents:
49281
diff
changeset
|
1192 contact = Fplist_put (contact, QCremote, |
43968
7ec801358b7e
(Qlocal, QCname, QCbuffer, QChost, QCservice, QCfamily)
Kim F. Storm <storm@cua.dk>
parents:
43642
diff
changeset
|
1193 Fprocess_datagram_address (process)); |
7ec801358b7e
(Qlocal, QCname, QCbuffer, QChost, QCservice, QCfamily)
Kim F. Storm <storm@cua.dk>
parents:
43642
diff
changeset
|
1194 #endif |
7ec801358b7e
(Qlocal, QCname, QCbuffer, QChost, QCservice, QCfamily)
Kim F. Storm <storm@cua.dk>
parents:
43642
diff
changeset
|
1195 |
95884
d6a4488883dc
Daniel Engeler <engeler at gmail.com>
Glenn Morris <rgm@gnu.org>
parents:
95387
diff
changeset
|
1196 if ((!NETCONN_P (process) && !SERIALCONN_P (process)) || EQ (key, Qt)) |
43968
7ec801358b7e
(Qlocal, QCname, QCbuffer, QChost, QCservice, QCfamily)
Kim F. Storm <storm@cua.dk>
parents:
43642
diff
changeset
|
1197 return contact; |
95884
d6a4488883dc
Daniel Engeler <engeler at gmail.com>
Glenn Morris <rgm@gnu.org>
parents:
95387
diff
changeset
|
1198 if (NILP (key) && NETCONN_P (process)) |
43968
7ec801358b7e
(Qlocal, QCname, QCbuffer, QChost, QCservice, QCfamily)
Kim F. Storm <storm@cua.dk>
parents:
43642
diff
changeset
|
1199 return Fcons (Fplist_get (contact, QChost), |
7ec801358b7e
(Qlocal, QCname, QCbuffer, QChost, QCservice, QCfamily)
Kim F. Storm <storm@cua.dk>
parents:
43642
diff
changeset
|
1200 Fcons (Fplist_get (contact, QCservice), Qnil)); |
95884
d6a4488883dc
Daniel Engeler <engeler at gmail.com>
Glenn Morris <rgm@gnu.org>
parents:
95387
diff
changeset
|
1201 if (NILP (key) && SERIALCONN_P (process)) |
d6a4488883dc
Daniel Engeler <engeler at gmail.com>
Glenn Morris <rgm@gnu.org>
parents:
95387
diff
changeset
|
1202 return Fcons (Fplist_get (contact, QCport), |
d6a4488883dc
Daniel Engeler <engeler at gmail.com>
Glenn Morris <rgm@gnu.org>
parents:
95387
diff
changeset
|
1203 Fcons (Fplist_get (contact, QCspeed), Qnil)); |
43968
7ec801358b7e
(Qlocal, QCname, QCbuffer, QChost, QCservice, QCfamily)
Kim F. Storm <storm@cua.dk>
parents:
43642
diff
changeset
|
1204 return Fplist_get (contact, key); |
16058
924aeb9ed7c3
(Fprocess_contact): New function.
Richard M. Stallman <rms@gnu.org>
parents:
16053
diff
changeset
|
1205 } |
924aeb9ed7c3
(Fprocess_contact): New function.
Richard M. Stallman <rms@gnu.org>
parents:
16053
diff
changeset
|
1206 |
49223
26622fa0d099
Reworked 2003-01-12 change -- call a plist a plist!
Kim F. Storm <storm@cua.dk>
parents:
49164
diff
changeset
|
1207 DEFUN ("process-plist", Fprocess_plist, Sprocess_plist, |
26622fa0d099
Reworked 2003-01-12 change -- call a plist a plist!
Kim F. Storm <storm@cua.dk>
parents:
49164
diff
changeset
|
1208 1, 1, 0, |
26622fa0d099
Reworked 2003-01-12 change -- call a plist a plist!
Kim F. Storm <storm@cua.dk>
parents:
49164
diff
changeset
|
1209 doc: /* Return the plist of PROCESS. */) |
26622fa0d099
Reworked 2003-01-12 change -- call a plist a plist!
Kim F. Storm <storm@cua.dk>
parents:
49164
diff
changeset
|
1210 (process) |
26622fa0d099
Reworked 2003-01-12 change -- call a plist a plist!
Kim F. Storm <storm@cua.dk>
parents:
49164
diff
changeset
|
1211 register Lisp_Object process; |
49164 | 1212 { |
1213 CHECK_PROCESS (process); | |
49223
26622fa0d099
Reworked 2003-01-12 change -- call a plist a plist!
Kim F. Storm <storm@cua.dk>
parents:
49164
diff
changeset
|
1214 return XPROCESS (process)->plist; |
49164 | 1215 } |
1216 | |
49223
26622fa0d099
Reworked 2003-01-12 change -- call a plist a plist!
Kim F. Storm <storm@cua.dk>
parents:
49164
diff
changeset
|
1217 DEFUN ("set-process-plist", Fset_process_plist, Sset_process_plist, |
26622fa0d099
Reworked 2003-01-12 change -- call a plist a plist!
Kim F. Storm <storm@cua.dk>
parents:
49164
diff
changeset
|
1218 2, 2, 0, |
49229
a3af03912e6f
(Fset_process_plist): Fixed return value.
Kim F. Storm <storm@cua.dk>
parents:
49223
diff
changeset
|
1219 doc: /* Replace the plist of PROCESS with PLIST. Returns PLIST. */) |
49223
26622fa0d099
Reworked 2003-01-12 change -- call a plist a plist!
Kim F. Storm <storm@cua.dk>
parents:
49164
diff
changeset
|
1220 (process, plist) |
26622fa0d099
Reworked 2003-01-12 change -- call a plist a plist!
Kim F. Storm <storm@cua.dk>
parents:
49164
diff
changeset
|
1221 register Lisp_Object process, plist; |
49142
8dca38bc0261
(Fset_process_contact): New function.
Kim F. Storm <storm@cua.dk>
parents:
49119
diff
changeset
|
1222 { |
8dca38bc0261
(Fset_process_contact): New function.
Kim F. Storm <storm@cua.dk>
parents:
49119
diff
changeset
|
1223 CHECK_PROCESS (process); |
49223
26622fa0d099
Reworked 2003-01-12 change -- call a plist a plist!
Kim F. Storm <storm@cua.dk>
parents:
49164
diff
changeset
|
1224 CHECK_LIST (plist); |
26622fa0d099
Reworked 2003-01-12 change -- call a plist a plist!
Kim F. Storm <storm@cua.dk>
parents:
49164
diff
changeset
|
1225 |
26622fa0d099
Reworked 2003-01-12 change -- call a plist a plist!
Kim F. Storm <storm@cua.dk>
parents:
49164
diff
changeset
|
1226 XPROCESS (process)->plist = plist; |
49229
a3af03912e6f
(Fset_process_plist): Fixed return value.
Kim F. Storm <storm@cua.dk>
parents:
49223
diff
changeset
|
1227 return plist; |
49142
8dca38bc0261
(Fset_process_contact): New function.
Kim F. Storm <storm@cua.dk>
parents:
49119
diff
changeset
|
1228 } |
8dca38bc0261
(Fset_process_contact): New function.
Kim F. Storm <storm@cua.dk>
parents:
49119
diff
changeset
|
1229 |
4231
91a883c56382
(Fget_buffer_process): Delete doc string from
Richard M. Stallman <rms@gnu.org>
parents:
4057
diff
changeset
|
1230 #if 0 /* Turned off because we don't currently record this info |
91a883c56382
(Fget_buffer_process): Delete doc string from
Richard M. Stallman <rms@gnu.org>
parents:
4057
diff
changeset
|
1231 in the process. Perhaps add it. */ |
91a883c56382
(Fget_buffer_process): Delete doc string from
Richard M. Stallman <rms@gnu.org>
parents:
4057
diff
changeset
|
1232 DEFUN ("process-connection", Fprocess_connection, Sprocess_connection, 1, 1, 0, |
40103
6b389fb978bc
Change doc-string comments to `new style' [w/`doc:' keyword].
Pavel Janík <Pavel@Janik.cz>
parents:
39973
diff
changeset
|
1233 doc: /* Return the connection type of PROCESS. |
6b389fb978bc
Change doc-string comments to `new style' [w/`doc:' keyword].
Pavel Janík <Pavel@Janik.cz>
parents:
39973
diff
changeset
|
1234 The value is nil for a pipe, t or `pty' for a pty, or `stream' for |
6b389fb978bc
Change doc-string comments to `new style' [w/`doc:' keyword].
Pavel Janík <Pavel@Janik.cz>
parents:
39973
diff
changeset
|
1235 a socket connection. */) |
6b389fb978bc
Change doc-string comments to `new style' [w/`doc:' keyword].
Pavel Janík <Pavel@Janik.cz>
parents:
39973
diff
changeset
|
1236 (process) |
4231
91a883c56382
(Fget_buffer_process): Delete doc string from
Richard M. Stallman <rms@gnu.org>
parents:
4057
diff
changeset
|
1237 Lisp_Object process; |
91a883c56382
(Fget_buffer_process): Delete doc string from
Richard M. Stallman <rms@gnu.org>
parents:
4057
diff
changeset
|
1238 { |
91a883c56382
(Fget_buffer_process): Delete doc string from
Richard M. Stallman <rms@gnu.org>
parents:
4057
diff
changeset
|
1239 return XPROCESS (process)->type; |
91a883c56382
(Fget_buffer_process): Delete doc string from
Richard M. Stallman <rms@gnu.org>
parents:
4057
diff
changeset
|
1240 } |
91a883c56382
(Fget_buffer_process): Delete doc string from
Richard M. Stallman <rms@gnu.org>
parents:
4057
diff
changeset
|
1241 #endif |
98456
a68b7a895cb6
(Faccept_process_output): Fix doc-string.
Martin Rudalics <rudalics@gmx.at>
parents:
98248
diff
changeset
|
1242 |
95884
d6a4488883dc
Daniel Engeler <engeler at gmail.com>
Glenn Morris <rgm@gnu.org>
parents:
95387
diff
changeset
|
1243 DEFUN ("process-type", Fprocess_type, Sprocess_type, 1, 1, 0, |
d6a4488883dc
Daniel Engeler <engeler at gmail.com>
Glenn Morris <rgm@gnu.org>
parents:
95387
diff
changeset
|
1244 doc: /* Return the connection type of PROCESS. |
d6a4488883dc
Daniel Engeler <engeler at gmail.com>
Glenn Morris <rgm@gnu.org>
parents:
95387
diff
changeset
|
1245 The value is either the symbol `real', `network', or `serial'. |
d6a4488883dc
Daniel Engeler <engeler at gmail.com>
Glenn Morris <rgm@gnu.org>
parents:
95387
diff
changeset
|
1246 PROCESS may be a process, a buffer, the name of a process or buffer, or |
d6a4488883dc
Daniel Engeler <engeler at gmail.com>
Glenn Morris <rgm@gnu.org>
parents:
95387
diff
changeset
|
1247 nil, indicating the current buffer's process. */) |
d6a4488883dc
Daniel Engeler <engeler at gmail.com>
Glenn Morris <rgm@gnu.org>
parents:
95387
diff
changeset
|
1248 (process) |
d6a4488883dc
Daniel Engeler <engeler at gmail.com>
Glenn Morris <rgm@gnu.org>
parents:
95387
diff
changeset
|
1249 Lisp_Object process; |
d6a4488883dc
Daniel Engeler <engeler at gmail.com>
Glenn Morris <rgm@gnu.org>
parents:
95387
diff
changeset
|
1250 { |
d6a4488883dc
Daniel Engeler <engeler at gmail.com>
Glenn Morris <rgm@gnu.org>
parents:
95387
diff
changeset
|
1251 Lisp_Object proc; |
d6a4488883dc
Daniel Engeler <engeler at gmail.com>
Glenn Morris <rgm@gnu.org>
parents:
95387
diff
changeset
|
1252 proc = get_process (process); |
d6a4488883dc
Daniel Engeler <engeler at gmail.com>
Glenn Morris <rgm@gnu.org>
parents:
95387
diff
changeset
|
1253 return XPROCESS (proc)->type; |
d6a4488883dc
Daniel Engeler <engeler at gmail.com>
Glenn Morris <rgm@gnu.org>
parents:
95387
diff
changeset
|
1254 } |
47987
b30942bd85f3
(Fformat_network_address): New function.
Kim F. Storm <storm@cua.dk>
parents:
47542
diff
changeset
|
1255 |
b30942bd85f3
(Fformat_network_address): New function.
Kim F. Storm <storm@cua.dk>
parents:
47542
diff
changeset
|
1256 #ifdef HAVE_SOCKETS |
b30942bd85f3
(Fformat_network_address): New function.
Kim F. Storm <storm@cua.dk>
parents:
47542
diff
changeset
|
1257 DEFUN ("format-network-address", Fformat_network_address, Sformat_network_address, |
49114
c87af62cc6b4
(format-network-address): Added optional OMIT-PORT arg. Callers changed.
Kim F. Storm <storm@cua.dk>
parents:
49111
diff
changeset
|
1258 1, 2, 0, |
47987
b30942bd85f3
(Fformat_network_address): New function.
Kim F. Storm <storm@cua.dk>
parents:
47542
diff
changeset
|
1259 doc: /* Convert network ADDRESS from internal format to a string. |
68008 | 1260 A 4 or 5 element vector represents an IPv4 address (with port number). |
1261 An 8 or 9 element vector represents an IPv6 address (with port number). | |
49114
c87af62cc6b4
(format-network-address): Added optional OMIT-PORT arg. Callers changed.
Kim F. Storm <storm@cua.dk>
parents:
49111
diff
changeset
|
1262 If optional second argument OMIT-PORT is non-nil, don't include a port |
68008 | 1263 number in the string, even when present in ADDRESS. |
1264 Returns nil if format of ADDRESS is invalid. */) | |
49114
c87af62cc6b4
(format-network-address): Added optional OMIT-PORT arg. Callers changed.
Kim F. Storm <storm@cua.dk>
parents:
49111
diff
changeset
|
1265 (address, omit_port) |
c87af62cc6b4
(format-network-address): Added optional OMIT-PORT arg. Callers changed.
Kim F. Storm <storm@cua.dk>
parents:
49111
diff
changeset
|
1266 Lisp_Object address, omit_port; |
47987
b30942bd85f3
(Fformat_network_address): New function.
Kim F. Storm <storm@cua.dk>
parents:
47542
diff
changeset
|
1267 { |
b30942bd85f3
(Fformat_network_address): New function.
Kim F. Storm <storm@cua.dk>
parents:
47542
diff
changeset
|
1268 if (NILP (address)) |
b30942bd85f3
(Fformat_network_address): New function.
Kim F. Storm <storm@cua.dk>
parents:
47542
diff
changeset
|
1269 return Qnil; |
b30942bd85f3
(Fformat_network_address): New function.
Kim F. Storm <storm@cua.dk>
parents:
47542
diff
changeset
|
1270 |
b30942bd85f3
(Fformat_network_address): New function.
Kim F. Storm <storm@cua.dk>
parents:
47542
diff
changeset
|
1271 if (STRINGP (address)) /* AF_LOCAL */ |
b30942bd85f3
(Fformat_network_address): New function.
Kim F. Storm <storm@cua.dk>
parents:
47542
diff
changeset
|
1272 return address; |
b30942bd85f3
(Fformat_network_address): New function.
Kim F. Storm <storm@cua.dk>
parents:
47542
diff
changeset
|
1273 |
68008 | 1274 if (VECTORP (address)) /* AF_INET or AF_INET6 */ |
47987
b30942bd85f3
(Fformat_network_address): New function.
Kim F. Storm <storm@cua.dk>
parents:
47542
diff
changeset
|
1275 { |
b30942bd85f3
(Fformat_network_address): New function.
Kim F. Storm <storm@cua.dk>
parents:
47542
diff
changeset
|
1276 register struct Lisp_Vector *p = XVECTOR (address); |
76760
c21bd0559ef9
(Fformat_network_address): Make room in args array to format IPv6 addresses.
Juanma Barranquero <lekktu@gmail.com>
parents:
76738
diff
changeset
|
1277 Lisp_Object args[10]; |
49114
c87af62cc6b4
(format-network-address): Added optional OMIT-PORT arg. Callers changed.
Kim F. Storm <storm@cua.dk>
parents:
49111
diff
changeset
|
1278 int nargs, i; |
c87af62cc6b4
(format-network-address): Added optional OMIT-PORT arg. Callers changed.
Kim F. Storm <storm@cua.dk>
parents:
49111
diff
changeset
|
1279 |
68008 | 1280 if (p->size == 4 || (p->size == 5 && !NILP (omit_port))) |
49114
c87af62cc6b4
(format-network-address): Added optional OMIT-PORT arg. Callers changed.
Kim F. Storm <storm@cua.dk>
parents:
49111
diff
changeset
|
1281 { |
c87af62cc6b4
(format-network-address): Added optional OMIT-PORT arg. Callers changed.
Kim F. Storm <storm@cua.dk>
parents:
49111
diff
changeset
|
1282 args[0] = build_string ("%d.%d.%d.%d"); |
c87af62cc6b4
(format-network-address): Added optional OMIT-PORT arg. Callers changed.
Kim F. Storm <storm@cua.dk>
parents:
49111
diff
changeset
|
1283 nargs = 4; |
c87af62cc6b4
(format-network-address): Added optional OMIT-PORT arg. Callers changed.
Kim F. Storm <storm@cua.dk>
parents:
49111
diff
changeset
|
1284 } |
c87af62cc6b4
(format-network-address): Added optional OMIT-PORT arg. Callers changed.
Kim F. Storm <storm@cua.dk>
parents:
49111
diff
changeset
|
1285 else if (p->size == 5) |
c87af62cc6b4
(format-network-address): Added optional OMIT-PORT arg. Callers changed.
Kim F. Storm <storm@cua.dk>
parents:
49111
diff
changeset
|
1286 { |
c87af62cc6b4
(format-network-address): Added optional OMIT-PORT arg. Callers changed.
Kim F. Storm <storm@cua.dk>
parents:
49111
diff
changeset
|
1287 args[0] = build_string ("%d.%d.%d.%d:%d"); |
c87af62cc6b4
(format-network-address): Added optional OMIT-PORT arg. Callers changed.
Kim F. Storm <storm@cua.dk>
parents:
49111
diff
changeset
|
1288 nargs = 5; |
c87af62cc6b4
(format-network-address): Added optional OMIT-PORT arg. Callers changed.
Kim F. Storm <storm@cua.dk>
parents:
49111
diff
changeset
|
1289 } |
68008 | 1290 else if (p->size == 8 || (p->size == 9 && !NILP (omit_port))) |
1291 { | |
1292 args[0] = build_string ("%x:%x:%x:%x:%x:%x:%x:%x"); | |
1293 nargs = 8; | |
1294 } | |
1295 else if (p->size == 9) | |
1296 { | |
1297 args[0] = build_string ("[%x:%x:%x:%x:%x:%x:%x:%x]:%d"); | |
1298 nargs = 9; | |
1299 } | |
49114
c87af62cc6b4
(format-network-address): Added optional OMIT-PORT arg. Callers changed.
Kim F. Storm <storm@cua.dk>
parents:
49111
diff
changeset
|
1300 else |
47987
b30942bd85f3
(Fformat_network_address): New function.
Kim F. Storm <storm@cua.dk>
parents:
47542
diff
changeset
|
1301 return Qnil; |
b30942bd85f3
(Fformat_network_address): New function.
Kim F. Storm <storm@cua.dk>
parents:
47542
diff
changeset
|
1302 |
49114
c87af62cc6b4
(format-network-address): Added optional OMIT-PORT arg. Callers changed.
Kim F. Storm <storm@cua.dk>
parents:
49111
diff
changeset
|
1303 for (i = 0; i < nargs; i++) |
76789
e3f8914e3f5e
(Fformat_network_address): Return nil when the
Juanma Barranquero <lekktu@gmail.com>
parents:
76760
diff
changeset
|
1304 { |
e3f8914e3f5e
(Fformat_network_address): Return nil when the
Juanma Barranquero <lekktu@gmail.com>
parents:
76760
diff
changeset
|
1305 EMACS_INT element = XINT (p->contents[i]); |
e3f8914e3f5e
(Fformat_network_address): Return nil when the
Juanma Barranquero <lekktu@gmail.com>
parents:
76760
diff
changeset
|
1306 |
e3f8914e3f5e
(Fformat_network_address): Return nil when the
Juanma Barranquero <lekktu@gmail.com>
parents:
76760
diff
changeset
|
1307 if (element < 0 || element > 65535) |
e3f8914e3f5e
(Fformat_network_address): Return nil when the
Juanma Barranquero <lekktu@gmail.com>
parents:
76760
diff
changeset
|
1308 return Qnil; |
e3f8914e3f5e
(Fformat_network_address): Return nil when the
Juanma Barranquero <lekktu@gmail.com>
parents:
76760
diff
changeset
|
1309 |
e3f8914e3f5e
(Fformat_network_address): Return nil when the
Juanma Barranquero <lekktu@gmail.com>
parents:
76760
diff
changeset
|
1310 if (nargs <= 5 /* IPv4 */ |
e3f8914e3f5e
(Fformat_network_address): Return nil when the
Juanma Barranquero <lekktu@gmail.com>
parents:
76760
diff
changeset
|
1311 && i < 4 /* host, not port */ |
e3f8914e3f5e
(Fformat_network_address): Return nil when the
Juanma Barranquero <lekktu@gmail.com>
parents:
76760
diff
changeset
|
1312 && element > 255) |
e3f8914e3f5e
(Fformat_network_address): Return nil when the
Juanma Barranquero <lekktu@gmail.com>
parents:
76760
diff
changeset
|
1313 return Qnil; |
e3f8914e3f5e
(Fformat_network_address): Return nil when the
Juanma Barranquero <lekktu@gmail.com>
parents:
76760
diff
changeset
|
1314 |
e3f8914e3f5e
(Fformat_network_address): Return nil when the
Juanma Barranquero <lekktu@gmail.com>
parents:
76760
diff
changeset
|
1315 args[i+1] = p->contents[i]; |
e3f8914e3f5e
(Fformat_network_address): Return nil when the
Juanma Barranquero <lekktu@gmail.com>
parents:
76760
diff
changeset
|
1316 } |
e3f8914e3f5e
(Fformat_network_address): Return nil when the
Juanma Barranquero <lekktu@gmail.com>
parents:
76760
diff
changeset
|
1317 |
49114
c87af62cc6b4
(format-network-address): Added optional OMIT-PORT arg. Callers changed.
Kim F. Storm <storm@cua.dk>
parents:
49111
diff
changeset
|
1318 return Fformat (nargs+1, args); |
47987
b30942bd85f3
(Fformat_network_address): New function.
Kim F. Storm <storm@cua.dk>
parents:
47542
diff
changeset
|
1319 } |
b30942bd85f3
(Fformat_network_address): New function.
Kim F. Storm <storm@cua.dk>
parents:
47542
diff
changeset
|
1320 |
b30942bd85f3
(Fformat_network_address): New function.
Kim F. Storm <storm@cua.dk>
parents:
47542
diff
changeset
|
1321 if (CONSP (address)) |
b30942bd85f3
(Fformat_network_address): New function.
Kim F. Storm <storm@cua.dk>
parents:
47542
diff
changeset
|
1322 { |
b30942bd85f3
(Fformat_network_address): New function.
Kim F. Storm <storm@cua.dk>
parents:
47542
diff
changeset
|
1323 Lisp_Object args[2]; |
b30942bd85f3
(Fformat_network_address): New function.
Kim F. Storm <storm@cua.dk>
parents:
47542
diff
changeset
|
1324 args[0] = build_string ("<Family %d>"); |
48097
21d7f2c18976
(Fformat_network_address): Fix int/Lisp_Object mixup.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
48088
diff
changeset
|
1325 args[1] = Fcar (address); |
47987
b30942bd85f3
(Fformat_network_address): New function.
Kim F. Storm <storm@cua.dk>
parents:
47542
diff
changeset
|
1326 return Fformat (2, args); |
b30942bd85f3
(Fformat_network_address): New function.
Kim F. Storm <storm@cua.dk>
parents:
47542
diff
changeset
|
1327 } |
b30942bd85f3
(Fformat_network_address): New function.
Kim F. Storm <storm@cua.dk>
parents:
47542
diff
changeset
|
1328 |
b30942bd85f3
(Fformat_network_address): New function.
Kim F. Storm <storm@cua.dk>
parents:
47542
diff
changeset
|
1329 return Qnil; |
b30942bd85f3
(Fformat_network_address): New function.
Kim F. Storm <storm@cua.dk>
parents:
47542
diff
changeset
|
1330 } |
b30942bd85f3
(Fformat_network_address): New function.
Kim F. Storm <storm@cua.dk>
parents:
47542
diff
changeset
|
1331 #endif |
578 | 1332 |
64977
d26871fb1b7b
(deactivate_process, status_notify, read_process_output)
Kim F. Storm <storm@cua.dk>
parents:
64770
diff
changeset
|
1333 static Lisp_Object |
43968
7ec801358b7e
(Qlocal, QCname, QCbuffer, QChost, QCservice, QCfamily)
Kim F. Storm <storm@cua.dk>
parents:
43642
diff
changeset
|
1334 list_processes_1 (query_only) |
7ec801358b7e
(Qlocal, QCname, QCbuffer, QChost, QCservice, QCfamily)
Kim F. Storm <storm@cua.dk>
parents:
43642
diff
changeset
|
1335 Lisp_Object query_only; |
578 | 1336 { |
1337 register Lisp_Object tail, tem; | |
1338 Lisp_Object proc, minspace, tem1; | |
1339 register struct Lisp_Process *p; | |
43968
7ec801358b7e
(Qlocal, QCname, QCbuffer, QChost, QCservice, QCfamily)
Kim F. Storm <storm@cua.dk>
parents:
43642
diff
changeset
|
1340 char tembuf[300]; |
7ec801358b7e
(Qlocal, QCname, QCbuffer, QChost, QCservice, QCfamily)
Kim F. Storm <storm@cua.dk>
parents:
43642
diff
changeset
|
1341 int w_proc, w_buffer, w_tty; |
73225
ff880e40efba
(list_processes_1): Run sentinels before removing dead
Kim F. Storm <storm@cua.dk>
parents:
72727
diff
changeset
|
1342 int exited = 0; |
43968
7ec801358b7e
(Qlocal, QCname, QCbuffer, QChost, QCservice, QCfamily)
Kim F. Storm <storm@cua.dk>
parents:
43642
diff
changeset
|
1343 Lisp_Object i_status, i_buffer, i_tty, i_command; |
7ec801358b7e
(Qlocal, QCname, QCbuffer, QChost, QCservice, QCfamily)
Kim F. Storm <storm@cua.dk>
parents:
43642
diff
changeset
|
1344 |
7ec801358b7e
(Qlocal, QCname, QCbuffer, QChost, QCservice, QCfamily)
Kim F. Storm <storm@cua.dk>
parents:
43642
diff
changeset
|
1345 w_proc = 4; /* Proc */ |
7ec801358b7e
(Qlocal, QCname, QCbuffer, QChost, QCservice, QCfamily)
Kim F. Storm <storm@cua.dk>
parents:
43642
diff
changeset
|
1346 w_buffer = 6; /* Buffer */ |
7ec801358b7e
(Qlocal, QCname, QCbuffer, QChost, QCservice, QCfamily)
Kim F. Storm <storm@cua.dk>
parents:
43642
diff
changeset
|
1347 w_tty = 0; /* Omit if no ttys */ |
7ec801358b7e
(Qlocal, QCname, QCbuffer, QChost, QCservice, QCfamily)
Kim F. Storm <storm@cua.dk>
parents:
43642
diff
changeset
|
1348 |
85372
f7d19cfed7da
* xselect.c (x_own_selection, x_handle_selection_clear)
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
85362
diff
changeset
|
1349 for (tail = Vprocess_alist; CONSP (tail); tail = XCDR (tail)) |
43968
7ec801358b7e
(Qlocal, QCname, QCbuffer, QChost, QCservice, QCfamily)
Kim F. Storm <storm@cua.dk>
parents:
43642
diff
changeset
|
1350 { |
7ec801358b7e
(Qlocal, QCname, QCbuffer, QChost, QCservice, QCfamily)
Kim F. Storm <storm@cua.dk>
parents:
43642
diff
changeset
|
1351 int i; |
7ec801358b7e
(Qlocal, QCname, QCbuffer, QChost, QCservice, QCfamily)
Kim F. Storm <storm@cua.dk>
parents:
43642
diff
changeset
|
1352 |
85372
f7d19cfed7da
* xselect.c (x_own_selection, x_handle_selection_clear)
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
85362
diff
changeset
|
1353 proc = Fcdr (XCAR (tail)); |
43968
7ec801358b7e
(Qlocal, QCname, QCbuffer, QChost, QCservice, QCfamily)
Kim F. Storm <storm@cua.dk>
parents:
43642
diff
changeset
|
1354 p = XPROCESS (proc); |
95884
d6a4488883dc
Daniel Engeler <engeler at gmail.com>
Glenn Morris <rgm@gnu.org>
parents:
95387
diff
changeset
|
1355 if (NILP (p->type)) |
43968
7ec801358b7e
(Qlocal, QCname, QCbuffer, QChost, QCservice, QCfamily)
Kim F. Storm <storm@cua.dk>
parents:
43642
diff
changeset
|
1356 continue; |
81826
077a1e6fd3f2
(struct Lisp_Process): Turn slots infd, outfd, kill_without_query, pty_flag,
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
80984
diff
changeset
|
1357 if (!NILP (query_only) && p->kill_without_query) |
43968
7ec801358b7e
(Qlocal, QCname, QCbuffer, QChost, QCservice, QCfamily)
Kim F. Storm <storm@cua.dk>
parents:
43642
diff
changeset
|
1358 continue; |
7ec801358b7e
(Qlocal, QCname, QCbuffer, QChost, QCservice, QCfamily)
Kim F. Storm <storm@cua.dk>
parents:
43642
diff
changeset
|
1359 if (STRINGP (p->name) |
46370
40db0673e6f0
Most uses of XSTRING combined with STRING_BYTES or indirection changed to
Ken Raeburn <raeburn@raeburn.org>
parents:
46314
diff
changeset
|
1360 && ( i = SCHARS (p->name), (i > w_proc))) |
43968
7ec801358b7e
(Qlocal, QCname, QCbuffer, QChost, QCservice, QCfamily)
Kim F. Storm <storm@cua.dk>
parents:
43642
diff
changeset
|
1361 w_proc = i; |
7ec801358b7e
(Qlocal, QCname, QCbuffer, QChost, QCservice, QCfamily)
Kim F. Storm <storm@cua.dk>
parents:
43642
diff
changeset
|
1362 if (!NILP (p->buffer)) |
7ec801358b7e
(Qlocal, QCname, QCbuffer, QChost, QCservice, QCfamily)
Kim F. Storm <storm@cua.dk>
parents:
43642
diff
changeset
|
1363 { |
87849
8f7e97005eef
(list_processes_1): Don't use SCHARS on a nil buffer name.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
87730
diff
changeset
|
1364 if (NILP (XBUFFER (p->buffer)->name)) |
8f7e97005eef
(list_processes_1): Don't use SCHARS on a nil buffer name.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
87730
diff
changeset
|
1365 { |
8f7e97005eef
(list_processes_1): Don't use SCHARS on a nil buffer name.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
87730
diff
changeset
|
1366 if (w_buffer < 8) |
8f7e97005eef
(list_processes_1): Don't use SCHARS on a nil buffer name.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
87730
diff
changeset
|
1367 w_buffer = 8; /* (Killed) */ |
8f7e97005eef
(list_processes_1): Don't use SCHARS on a nil buffer name.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
87730
diff
changeset
|
1368 } |
46370
40db0673e6f0
Most uses of XSTRING combined with STRING_BYTES or indirection changed to
Ken Raeburn <raeburn@raeburn.org>
parents:
46314
diff
changeset
|
1369 else if ((i = SCHARS (XBUFFER (p->buffer)->name), (i > w_buffer))) |
43968
7ec801358b7e
(Qlocal, QCname, QCbuffer, QChost, QCservice, QCfamily)
Kim F. Storm <storm@cua.dk>
parents:
43642
diff
changeset
|
1370 w_buffer = i; |
7ec801358b7e
(Qlocal, QCname, QCbuffer, QChost, QCservice, QCfamily)
Kim F. Storm <storm@cua.dk>
parents:
43642
diff
changeset
|
1371 } |
7ec801358b7e
(Qlocal, QCname, QCbuffer, QChost, QCservice, QCfamily)
Kim F. Storm <storm@cua.dk>
parents:
43642
diff
changeset
|
1372 if (STRINGP (p->tty_name) |
46370
40db0673e6f0
Most uses of XSTRING combined with STRING_BYTES or indirection changed to
Ken Raeburn <raeburn@raeburn.org>
parents:
46314
diff
changeset
|
1373 && (i = SCHARS (p->tty_name), (i > w_tty))) |
43968
7ec801358b7e
(Qlocal, QCname, QCbuffer, QChost, QCservice, QCfamily)
Kim F. Storm <storm@cua.dk>
parents:
43642
diff
changeset
|
1374 w_tty = i; |
7ec801358b7e
(Qlocal, QCname, QCbuffer, QChost, QCservice, QCfamily)
Kim F. Storm <storm@cua.dk>
parents:
43642
diff
changeset
|
1375 } |
7ec801358b7e
(Qlocal, QCname, QCbuffer, QChost, QCservice, QCfamily)
Kim F. Storm <storm@cua.dk>
parents:
43642
diff
changeset
|
1376 |
7ec801358b7e
(Qlocal, QCname, QCbuffer, QChost, QCservice, QCfamily)
Kim F. Storm <storm@cua.dk>
parents:
43642
diff
changeset
|
1377 XSETFASTINT (i_status, w_proc + 1); |
7ec801358b7e
(Qlocal, QCname, QCbuffer, QChost, QCservice, QCfamily)
Kim F. Storm <storm@cua.dk>
parents:
43642
diff
changeset
|
1378 XSETFASTINT (i_buffer, XFASTINT (i_status) + 9); |
7ec801358b7e
(Qlocal, QCname, QCbuffer, QChost, QCservice, QCfamily)
Kim F. Storm <storm@cua.dk>
parents:
43642
diff
changeset
|
1379 if (w_tty) |
7ec801358b7e
(Qlocal, QCname, QCbuffer, QChost, QCservice, QCfamily)
Kim F. Storm <storm@cua.dk>
parents:
43642
diff
changeset
|
1380 { |
7ec801358b7e
(Qlocal, QCname, QCbuffer, QChost, QCservice, QCfamily)
Kim F. Storm <storm@cua.dk>
parents:
43642
diff
changeset
|
1381 XSETFASTINT (i_tty, XFASTINT (i_buffer) + w_buffer + 1); |
79486
c2586e2e84d3
(list_processes_1): Fix indentation level of the
Andreas Schwab <schwab@suse.de>
parents:
79147
diff
changeset
|
1382 XSETFASTINT (i_command, XFASTINT (i_tty) + w_tty + 1); |
c2586e2e84d3
(list_processes_1): Fix indentation level of the
Andreas Schwab <schwab@suse.de>
parents:
79147
diff
changeset
|
1383 } |
c2586e2e84d3
(list_processes_1): Fix indentation level of the
Andreas Schwab <schwab@suse.de>
parents:
79147
diff
changeset
|
1384 else |
c2586e2e84d3
(list_processes_1): Fix indentation level of the
Andreas Schwab <schwab@suse.de>
parents:
79147
diff
changeset
|
1385 { |
43968
7ec801358b7e
(Qlocal, QCname, QCbuffer, QChost, QCservice, QCfamily)
Kim F. Storm <storm@cua.dk>
parents:
43642
diff
changeset
|
1386 i_tty = Qnil; |
7ec801358b7e
(Qlocal, QCname, QCbuffer, QChost, QCservice, QCfamily)
Kim F. Storm <storm@cua.dk>
parents:
43642
diff
changeset
|
1387 XSETFASTINT (i_command, XFASTINT (i_buffer) + w_buffer + 1); |
7ec801358b7e
(Qlocal, QCname, QCbuffer, QChost, QCservice, QCfamily)
Kim F. Storm <storm@cua.dk>
parents:
43642
diff
changeset
|
1388 } |
578 | 1389 |
9318
a14cc1712337
(make_process, list_processes_1, create_process, Faccept_process_output,
Karl Heuer <kwzh@gnu.org>
parents:
9277
diff
changeset
|
1390 XSETFASTINT (minspace, 1); |
578 | 1391 |
1392 set_buffer_internal (XBUFFER (Vstandard_output)); | |
59113
8cf8b4fa2543
(list_processes_1): Set undo_list instead of calling Fbuffer_undo_list.
Richard M. Stallman <rms@gnu.org>
parents:
58986
diff
changeset
|
1393 current_buffer->undo_list = Qt; |
578 | 1394 |
1395 current_buffer->truncate_lines = Qt; | |
1396 | |
43968
7ec801358b7e
(Qlocal, QCname, QCbuffer, QChost, QCservice, QCfamily)
Kim F. Storm <storm@cua.dk>
parents:
43642
diff
changeset
|
1397 write_string ("Proc", -1); |
7ec801358b7e
(Qlocal, QCname, QCbuffer, QChost, QCservice, QCfamily)
Kim F. Storm <storm@cua.dk>
parents:
43642
diff
changeset
|
1398 Findent_to (i_status, minspace); write_string ("Status", -1); |
7ec801358b7e
(Qlocal, QCname, QCbuffer, QChost, QCservice, QCfamily)
Kim F. Storm <storm@cua.dk>
parents:
43642
diff
changeset
|
1399 Findent_to (i_buffer, minspace); write_string ("Buffer", -1); |
7ec801358b7e
(Qlocal, QCname, QCbuffer, QChost, QCservice, QCfamily)
Kim F. Storm <storm@cua.dk>
parents:
43642
diff
changeset
|
1400 if (!NILP (i_tty)) |
7ec801358b7e
(Qlocal, QCname, QCbuffer, QChost, QCservice, QCfamily)
Kim F. Storm <storm@cua.dk>
parents:
43642
diff
changeset
|
1401 { |
7ec801358b7e
(Qlocal, QCname, QCbuffer, QChost, QCservice, QCfamily)
Kim F. Storm <storm@cua.dk>
parents:
43642
diff
changeset
|
1402 Findent_to (i_tty, minspace); write_string ("Tty", -1); |
7ec801358b7e
(Qlocal, QCname, QCbuffer, QChost, QCservice, QCfamily)
Kim F. Storm <storm@cua.dk>
parents:
43642
diff
changeset
|
1403 } |
7ec801358b7e
(Qlocal, QCname, QCbuffer, QChost, QCservice, QCfamily)
Kim F. Storm <storm@cua.dk>
parents:
43642
diff
changeset
|
1404 Findent_to (i_command, minspace); write_string ("Command", -1); |
7ec801358b7e
(Qlocal, QCname, QCbuffer, QChost, QCservice, QCfamily)
Kim F. Storm <storm@cua.dk>
parents:
43642
diff
changeset
|
1405 write_string ("\n", -1); |
7ec801358b7e
(Qlocal, QCname, QCbuffer, QChost, QCservice, QCfamily)
Kim F. Storm <storm@cua.dk>
parents:
43642
diff
changeset
|
1406 |
7ec801358b7e
(Qlocal, QCname, QCbuffer, QChost, QCservice, QCfamily)
Kim F. Storm <storm@cua.dk>
parents:
43642
diff
changeset
|
1407 write_string ("----", -1); |
7ec801358b7e
(Qlocal, QCname, QCbuffer, QChost, QCservice, QCfamily)
Kim F. Storm <storm@cua.dk>
parents:
43642
diff
changeset
|
1408 Findent_to (i_status, minspace); write_string ("------", -1); |
7ec801358b7e
(Qlocal, QCname, QCbuffer, QChost, QCservice, QCfamily)
Kim F. Storm <storm@cua.dk>
parents:
43642
diff
changeset
|
1409 Findent_to (i_buffer, minspace); write_string ("------", -1); |
7ec801358b7e
(Qlocal, QCname, QCbuffer, QChost, QCservice, QCfamily)
Kim F. Storm <storm@cua.dk>
parents:
43642
diff
changeset
|
1410 if (!NILP (i_tty)) |
7ec801358b7e
(Qlocal, QCname, QCbuffer, QChost, QCservice, QCfamily)
Kim F. Storm <storm@cua.dk>
parents:
43642
diff
changeset
|
1411 { |
7ec801358b7e
(Qlocal, QCname, QCbuffer, QChost, QCservice, QCfamily)
Kim F. Storm <storm@cua.dk>
parents:
43642
diff
changeset
|
1412 Findent_to (i_tty, minspace); write_string ("---", -1); |
7ec801358b7e
(Qlocal, QCname, QCbuffer, QChost, QCservice, QCfamily)
Kim F. Storm <storm@cua.dk>
parents:
43642
diff
changeset
|
1413 } |
7ec801358b7e
(Qlocal, QCname, QCbuffer, QChost, QCservice, QCfamily)
Kim F. Storm <storm@cua.dk>
parents:
43642
diff
changeset
|
1414 Findent_to (i_command, minspace); write_string ("-------", -1); |
7ec801358b7e
(Qlocal, QCname, QCbuffer, QChost, QCservice, QCfamily)
Kim F. Storm <storm@cua.dk>
parents:
43642
diff
changeset
|
1415 write_string ("\n", -1); |
578 | 1416 |
85372
f7d19cfed7da
* xselect.c (x_own_selection, x_handle_selection_clear)
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
85362
diff
changeset
|
1417 for (tail = Vprocess_alist; CONSP (tail); tail = XCDR (tail)) |
578 | 1418 { |
1419 Lisp_Object symbol; | |
1420 | |
85372
f7d19cfed7da
* xselect.c (x_own_selection, x_handle_selection_clear)
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
85362
diff
changeset
|
1421 proc = Fcdr (XCAR (tail)); |
578 | 1422 p = XPROCESS (proc); |
95884
d6a4488883dc
Daniel Engeler <engeler at gmail.com>
Glenn Morris <rgm@gnu.org>
parents:
95387
diff
changeset
|
1423 if (NILP (p->type)) |
578 | 1424 continue; |
81826
077a1e6fd3f2
(struct Lisp_Process): Turn slots infd, outfd, kill_without_query, pty_flag,
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
80984
diff
changeset
|
1425 if (!NILP (query_only) && p->kill_without_query) |
43968
7ec801358b7e
(Qlocal, QCname, QCbuffer, QChost, QCservice, QCfamily)
Kim F. Storm <storm@cua.dk>
parents:
43642
diff
changeset
|
1426 continue; |
578 | 1427 |
1428 Finsert (1, &p->name); | |
43968
7ec801358b7e
(Qlocal, QCname, QCbuffer, QChost, QCservice, QCfamily)
Kim F. Storm <storm@cua.dk>
parents:
43642
diff
changeset
|
1429 Findent_to (i_status, minspace); |
578 | 1430 |
69873
2d844bbbccd4
* process.h (struct Lisp_Process): Replace Lisp_Objects `pid',
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
69634
diff
changeset
|
1431 if (p->raw_status_new) |
578 | 1432 update_status (p); |
1433 symbol = p->status; | |
9115
59bc2d010b5f
(decode_status, Fprocessp, Fget_process, Fget_buffer_process, Fprocess_status,
Karl Heuer <kwzh@gnu.org>
parents:
9034
diff
changeset
|
1434 if (CONSP (p->status)) |
25645
a14111a2a100
Use XCAR, XCDR, XFLOAT_DATA instead of explicit member access.
Ken Raeburn <raeburn@raeburn.org>
parents:
25356
diff
changeset
|
1435 symbol = XCAR (p->status); |
578 | 1436 |
1437 if (EQ (symbol, Qsignal)) | |
1438 { | |
1439 Lisp_Object tem; | |
1440 tem = Fcar (Fcdr (p->status)); | |
97142 | 1441 Fprinc (symbol, Qnil); |
578 | 1442 } |
95884
d6a4488883dc
Daniel Engeler <engeler at gmail.com>
Glenn Morris <rgm@gnu.org>
parents:
95387
diff
changeset
|
1443 else if (NETCONN1_P (p) || SERIALCONN1_P (p)) |
578 | 1444 { |
43968
7ec801358b7e
(Qlocal, QCname, QCbuffer, QChost, QCservice, QCfamily)
Kim F. Storm <storm@cua.dk>
parents:
43642
diff
changeset
|
1445 if (EQ (symbol, Qexit)) |
7ec801358b7e
(Qlocal, QCname, QCbuffer, QChost, QCservice, QCfamily)
Kim F. Storm <storm@cua.dk>
parents:
43642
diff
changeset
|
1446 write_string ("closed", -1); |
7ec801358b7e
(Qlocal, QCname, QCbuffer, QChost, QCservice, QCfamily)
Kim F. Storm <storm@cua.dk>
parents:
43642
diff
changeset
|
1447 else if (EQ (p->command, Qt)) |
7ec801358b7e
(Qlocal, QCname, QCbuffer, QChost, QCservice, QCfamily)
Kim F. Storm <storm@cua.dk>
parents:
43642
diff
changeset
|
1448 write_string ("stopped", -1); |
7ec801358b7e
(Qlocal, QCname, QCbuffer, QChost, QCservice, QCfamily)
Kim F. Storm <storm@cua.dk>
parents:
43642
diff
changeset
|
1449 else if (EQ (symbol, Qrun)) |
578 | 1450 write_string ("open", -1); |
1451 else | |
1452 Fprinc (symbol, Qnil); | |
1453 } | |
95884
d6a4488883dc
Daniel Engeler <engeler at gmail.com>
Glenn Morris <rgm@gnu.org>
parents:
95387
diff
changeset
|
1454 else if (SERIALCONN1_P (p)) |
d6a4488883dc
Daniel Engeler <engeler at gmail.com>
Glenn Morris <rgm@gnu.org>
parents:
95387
diff
changeset
|
1455 { |
d6a4488883dc
Daniel Engeler <engeler at gmail.com>
Glenn Morris <rgm@gnu.org>
parents:
95387
diff
changeset
|
1456 write_string ("running", -1); |
d6a4488883dc
Daniel Engeler <engeler at gmail.com>
Glenn Morris <rgm@gnu.org>
parents:
95387
diff
changeset
|
1457 } |
578 | 1458 else |
1459 Fprinc (symbol, Qnil); | |
1460 | |
1461 if (EQ (symbol, Qexit)) | |
1462 { | |
1463 Lisp_Object tem; | |
1464 tem = Fcar (Fcdr (p->status)); | |
1465 if (XFASTINT (tem)) | |
1466 { | |
11695
0f9b9c375416
(list_processes_1): Cast XFASTINT for passing to sprintf.
Richard M. Stallman <rms@gnu.org>
parents:
11609
diff
changeset
|
1467 sprintf (tembuf, " %d", (int) XFASTINT (tem)); |
578 | 1468 write_string (tembuf, -1); |
1469 } | |
1470 } | |
1471 | |
73225
ff880e40efba
(list_processes_1): Run sentinels before removing dead
Kim F. Storm <storm@cua.dk>
parents:
72727
diff
changeset
|
1472 if (EQ (symbol, Qsignal) || EQ (symbol, Qexit) || EQ (symbol, Qclosed)) |
ff880e40efba
(list_processes_1): Run sentinels before removing dead
Kim F. Storm <storm@cua.dk>
parents:
72727
diff
changeset
|
1473 exited++; |
578 | 1474 |
43968
7ec801358b7e
(Qlocal, QCname, QCbuffer, QChost, QCservice, QCfamily)
Kim F. Storm <storm@cua.dk>
parents:
43642
diff
changeset
|
1475 Findent_to (i_buffer, minspace); |
578 | 1476 if (NILP (p->buffer)) |
1477 insert_string ("(none)"); | |
1478 else if (NILP (XBUFFER (p->buffer)->name)) | |
1479 insert_string ("(Killed)"); | |
1480 else | |
1481 Finsert (1, &XBUFFER (p->buffer)->name); | |
1482 | |
43968
7ec801358b7e
(Qlocal, QCname, QCbuffer, QChost, QCservice, QCfamily)
Kim F. Storm <storm@cua.dk>
parents:
43642
diff
changeset
|
1483 if (!NILP (i_tty)) |
7ec801358b7e
(Qlocal, QCname, QCbuffer, QChost, QCservice, QCfamily)
Kim F. Storm <storm@cua.dk>
parents:
43642
diff
changeset
|
1484 { |
7ec801358b7e
(Qlocal, QCname, QCbuffer, QChost, QCservice, QCfamily)
Kim F. Storm <storm@cua.dk>
parents:
43642
diff
changeset
|
1485 Findent_to (i_tty, minspace); |
7ec801358b7e
(Qlocal, QCname, QCbuffer, QChost, QCservice, QCfamily)
Kim F. Storm <storm@cua.dk>
parents:
43642
diff
changeset
|
1486 if (STRINGP (p->tty_name)) |
7ec801358b7e
(Qlocal, QCname, QCbuffer, QChost, QCservice, QCfamily)
Kim F. Storm <storm@cua.dk>
parents:
43642
diff
changeset
|
1487 Finsert (1, &p->tty_name); |
7ec801358b7e
(Qlocal, QCname, QCbuffer, QChost, QCservice, QCfamily)
Kim F. Storm <storm@cua.dk>
parents:
43642
diff
changeset
|
1488 } |
7ec801358b7e
(Qlocal, QCname, QCbuffer, QChost, QCservice, QCfamily)
Kim F. Storm <storm@cua.dk>
parents:
43642
diff
changeset
|
1489 |
7ec801358b7e
(Qlocal, QCname, QCbuffer, QChost, QCservice, QCfamily)
Kim F. Storm <storm@cua.dk>
parents:
43642
diff
changeset
|
1490 Findent_to (i_command, minspace); |
7ec801358b7e
(Qlocal, QCname, QCbuffer, QChost, QCservice, QCfamily)
Kim F. Storm <storm@cua.dk>
parents:
43642
diff
changeset
|
1491 |
7ec801358b7e
(Qlocal, QCname, QCbuffer, QChost, QCservice, QCfamily)
Kim F. Storm <storm@cua.dk>
parents:
43642
diff
changeset
|
1492 if (EQ (p->status, Qlisten)) |
7ec801358b7e
(Qlocal, QCname, QCbuffer, QChost, QCservice, QCfamily)
Kim F. Storm <storm@cua.dk>
parents:
43642
diff
changeset
|
1493 { |
7ec801358b7e
(Qlocal, QCname, QCbuffer, QChost, QCservice, QCfamily)
Kim F. Storm <storm@cua.dk>
parents:
43642
diff
changeset
|
1494 Lisp_Object port = Fplist_get (p->childp, QCservice); |
7ec801358b7e
(Qlocal, QCname, QCbuffer, QChost, QCservice, QCfamily)
Kim F. Storm <storm@cua.dk>
parents:
43642
diff
changeset
|
1495 if (INTEGERP (port)) |
7ec801358b7e
(Qlocal, QCname, QCbuffer, QChost, QCservice, QCfamily)
Kim F. Storm <storm@cua.dk>
parents:
43642
diff
changeset
|
1496 port = Fnumber_to_string (port); |
47987
b30942bd85f3
(Fformat_network_address): New function.
Kim F. Storm <storm@cua.dk>
parents:
47542
diff
changeset
|
1497 if (NILP (port)) |
49114
c87af62cc6b4
(format-network-address): Added optional OMIT-PORT arg. Callers changed.
Kim F. Storm <storm@cua.dk>
parents:
49111
diff
changeset
|
1498 port = Fformat_network_address (Fplist_get (p->childp, QClocal), Qnil); |
43968
7ec801358b7e
(Qlocal, QCname, QCbuffer, QChost, QCservice, QCfamily)
Kim F. Storm <storm@cua.dk>
parents:
43642
diff
changeset
|
1499 sprintf (tembuf, "(network %s server on %s)\n", |
81826
077a1e6fd3f2
(struct Lisp_Process): Turn slots infd, outfd, kill_without_query, pty_flag,
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
80984
diff
changeset
|
1500 (DATAGRAM_CHAN_P (p->infd) ? "datagram" : "stream"), |
47987
b30942bd85f3
(Fformat_network_address): New function.
Kim F. Storm <storm@cua.dk>
parents:
47542
diff
changeset
|
1501 (STRINGP (port) ? (char *)SDATA (port) : "?")); |
43968
7ec801358b7e
(Qlocal, QCname, QCbuffer, QChost, QCservice, QCfamily)
Kim F. Storm <storm@cua.dk>
parents:
43642
diff
changeset
|
1502 insert_string (tembuf); |
7ec801358b7e
(Qlocal, QCname, QCbuffer, QChost, QCservice, QCfamily)
Kim F. Storm <storm@cua.dk>
parents:
43642
diff
changeset
|
1503 } |
7ec801358b7e
(Qlocal, QCname, QCbuffer, QChost, QCservice, QCfamily)
Kim F. Storm <storm@cua.dk>
parents:
43642
diff
changeset
|
1504 else if (NETCONN1_P (p)) |
100824
e5aa6a069f40
(conv_sockaddr_to_lisp): Add workaround for
Andreas Schwab <schwab@suse.de>
parents:
100573
diff
changeset
|
1505 { |
43968
7ec801358b7e
(Qlocal, QCname, QCbuffer, QChost, QCservice, QCfamily)
Kim F. Storm <storm@cua.dk>
parents:
43642
diff
changeset
|
1506 /* For a local socket, there is no host name, |
7ec801358b7e
(Qlocal, QCname, QCbuffer, QChost, QCservice, QCfamily)
Kim F. Storm <storm@cua.dk>
parents:
43642
diff
changeset
|
1507 so display service instead. */ |
7ec801358b7e
(Qlocal, QCname, QCbuffer, QChost, QCservice, QCfamily)
Kim F. Storm <storm@cua.dk>
parents:
43642
diff
changeset
|
1508 Lisp_Object host = Fplist_get (p->childp, QChost); |
7ec801358b7e
(Qlocal, QCname, QCbuffer, QChost, QCservice, QCfamily)
Kim F. Storm <storm@cua.dk>
parents:
43642
diff
changeset
|
1509 if (!STRINGP (host)) |
7ec801358b7e
(Qlocal, QCname, QCbuffer, QChost, QCservice, QCfamily)
Kim F. Storm <storm@cua.dk>
parents:
43642
diff
changeset
|
1510 { |
7ec801358b7e
(Qlocal, QCname, QCbuffer, QChost, QCservice, QCfamily)
Kim F. Storm <storm@cua.dk>
parents:
43642
diff
changeset
|
1511 host = Fplist_get (p->childp, QCservice); |
7ec801358b7e
(Qlocal, QCname, QCbuffer, QChost, QCservice, QCfamily)
Kim F. Storm <storm@cua.dk>
parents:
43642
diff
changeset
|
1512 if (INTEGERP (host)) |
7ec801358b7e
(Qlocal, QCname, QCbuffer, QChost, QCservice, QCfamily)
Kim F. Storm <storm@cua.dk>
parents:
43642
diff
changeset
|
1513 host = Fnumber_to_string (host); |
7ec801358b7e
(Qlocal, QCname, QCbuffer, QChost, QCservice, QCfamily)
Kim F. Storm <storm@cua.dk>
parents:
43642
diff
changeset
|
1514 } |
47987
b30942bd85f3
(Fformat_network_address): New function.
Kim F. Storm <storm@cua.dk>
parents:
47542
diff
changeset
|
1515 if (NILP (host)) |
49114
c87af62cc6b4
(format-network-address): Added optional OMIT-PORT arg. Callers changed.
Kim F. Storm <storm@cua.dk>
parents:
49111
diff
changeset
|
1516 host = Fformat_network_address (Fplist_get (p->childp, QCremote), Qnil); |
43968
7ec801358b7e
(Qlocal, QCname, QCbuffer, QChost, QCservice, QCfamily)
Kim F. Storm <storm@cua.dk>
parents:
43642
diff
changeset
|
1517 sprintf (tembuf, "(network %s connection to %s)\n", |
81826
077a1e6fd3f2
(struct Lisp_Process): Turn slots infd, outfd, kill_without_query, pty_flag,
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
80984
diff
changeset
|
1518 (DATAGRAM_CHAN_P (p->infd) ? "datagram" : "stream"), |
47987
b30942bd85f3
(Fformat_network_address): New function.
Kim F. Storm <storm@cua.dk>
parents:
47542
diff
changeset
|
1519 (STRINGP (host) ? (char *)SDATA (host) : "?")); |
578 | 1520 insert_string (tembuf); |
100824
e5aa6a069f40
(conv_sockaddr_to_lisp): Add workaround for
Andreas Schwab <schwab@suse.de>
parents:
100573
diff
changeset
|
1521 } |
95884
d6a4488883dc
Daniel Engeler <engeler at gmail.com>
Glenn Morris <rgm@gnu.org>
parents:
95387
diff
changeset
|
1522 else if (SERIALCONN1_P (p)) |
d6a4488883dc
Daniel Engeler <engeler at gmail.com>
Glenn Morris <rgm@gnu.org>
parents:
95387
diff
changeset
|
1523 { |
d6a4488883dc
Daniel Engeler <engeler at gmail.com>
Glenn Morris <rgm@gnu.org>
parents:
95387
diff
changeset
|
1524 Lisp_Object port = Fplist_get (p->childp, QCport); |
d6a4488883dc
Daniel Engeler <engeler at gmail.com>
Glenn Morris <rgm@gnu.org>
parents:
95387
diff
changeset
|
1525 Lisp_Object speed = Fplist_get (p->childp, QCspeed); |
d6a4488883dc
Daniel Engeler <engeler at gmail.com>
Glenn Morris <rgm@gnu.org>
parents:
95387
diff
changeset
|
1526 insert_string ("(serial port "); |
d6a4488883dc
Daniel Engeler <engeler at gmail.com>
Glenn Morris <rgm@gnu.org>
parents:
95387
diff
changeset
|
1527 if (STRINGP (port)) |
d6a4488883dc
Daniel Engeler <engeler at gmail.com>
Glenn Morris <rgm@gnu.org>
parents:
95387
diff
changeset
|
1528 insert_string (SDATA (port)); |
d6a4488883dc
Daniel Engeler <engeler at gmail.com>
Glenn Morris <rgm@gnu.org>
parents:
95387
diff
changeset
|
1529 else |
d6a4488883dc
Daniel Engeler <engeler at gmail.com>
Glenn Morris <rgm@gnu.org>
parents:
95387
diff
changeset
|
1530 insert_string ("?"); |
d6a4488883dc
Daniel Engeler <engeler at gmail.com>
Glenn Morris <rgm@gnu.org>
parents:
95387
diff
changeset
|
1531 if (INTEGERP (speed)) |
d6a4488883dc
Daniel Engeler <engeler at gmail.com>
Glenn Morris <rgm@gnu.org>
parents:
95387
diff
changeset
|
1532 { |
105577
d6307924111b
(list_processes_1): Use long format in printf, and cast argument.
Adrian Robert <Adrian.B.Robert@gmail.com>
parents:
104724
diff
changeset
|
1533 sprintf (tembuf, " at %ld b/s", (long) XINT (speed)); |
95884
d6a4488883dc
Daniel Engeler <engeler at gmail.com>
Glenn Morris <rgm@gnu.org>
parents:
95387
diff
changeset
|
1534 insert_string (tembuf); |
d6a4488883dc
Daniel Engeler <engeler at gmail.com>
Glenn Morris <rgm@gnu.org>
parents:
95387
diff
changeset
|
1535 } |
d6a4488883dc
Daniel Engeler <engeler at gmail.com>
Glenn Morris <rgm@gnu.org>
parents:
95387
diff
changeset
|
1536 insert_string (")\n"); |
d6a4488883dc
Daniel Engeler <engeler at gmail.com>
Glenn Morris <rgm@gnu.org>
parents:
95387
diff
changeset
|
1537 } |
49600
23a1cea22d13
Trailing whitespace deleted.
Juanma Barranquero <lekktu@gmail.com>
parents:
49281
diff
changeset
|
1538 else |
578 | 1539 { |
1540 tem = p->command; | |
1541 while (1) | |
1542 { | |
1543 tem1 = Fcar (tem); | |
104257
a577041a0370
(create_pty): New function.
Nick Roberts <nickrob@snap.net.nz>
parents:
103972
diff
changeset
|
1544 if (NILP (tem1)) |
a577041a0370
(create_pty): New function.
Nick Roberts <nickrob@snap.net.nz>
parents:
103972
diff
changeset
|
1545 break; |
578 | 1546 Finsert (1, &tem1); |
1547 tem = Fcdr (tem); | |
1548 if (NILP (tem)) | |
1549 break; | |
1550 insert_string (" "); | |
1551 } | |
1552 insert_string ("\n"); | |
1553 } | |
1554 } | |
73225
ff880e40efba
(list_processes_1): Run sentinels before removing dead
Kim F. Storm <storm@cua.dk>
parents:
72727
diff
changeset
|
1555 if (exited) |
104316
bb8ce3c842e7
* process.c (status_notify): Don't perform redisplay.
Chong Yidong <cyd@stupidchicken.com>
parents:
104265
diff
changeset
|
1556 { |
bb8ce3c842e7
* process.c (status_notify): Don't perform redisplay.
Chong Yidong <cyd@stupidchicken.com>
parents:
104265
diff
changeset
|
1557 status_notify (NULL); |
bb8ce3c842e7
* process.c (status_notify): Don't perform redisplay.
Chong Yidong <cyd@stupidchicken.com>
parents:
104265
diff
changeset
|
1558 redisplay_preserve_echo_area (13); |
bb8ce3c842e7
* process.c (status_notify): Don't perform redisplay.
Chong Yidong <cyd@stupidchicken.com>
parents:
104265
diff
changeset
|
1559 } |
578 | 1560 return Qnil; |
1561 } | |
1562 | |
43968
7ec801358b7e
(Qlocal, QCname, QCbuffer, QChost, QCservice, QCfamily)
Kim F. Storm <storm@cua.dk>
parents:
43642
diff
changeset
|
1563 DEFUN ("list-processes", Flist_processes, Slist_processes, 0, 1, "P", |
40103
6b389fb978bc
Change doc-string comments to `new style' [w/`doc:' keyword].
Pavel Janík <Pavel@Janik.cz>
parents:
39973
diff
changeset
|
1564 doc: /* Display a list of all processes. |
43968
7ec801358b7e
(Qlocal, QCname, QCbuffer, QChost, QCservice, QCfamily)
Kim F. Storm <storm@cua.dk>
parents:
43642
diff
changeset
|
1565 If optional argument QUERY-ONLY is non-nil, only processes with |
7ec801358b7e
(Qlocal, QCname, QCbuffer, QChost, QCservice, QCfamily)
Kim F. Storm <storm@cua.dk>
parents:
43642
diff
changeset
|
1566 the query-on-exit flag set will be listed. |
40103
6b389fb978bc
Change doc-string comments to `new style' [w/`doc:' keyword].
Pavel Janík <Pavel@Janik.cz>
parents:
39973
diff
changeset
|
1567 Any process listed as exited or signaled is actually eliminated |
6b389fb978bc
Change doc-string comments to `new style' [w/`doc:' keyword].
Pavel Janík <Pavel@Janik.cz>
parents:
39973
diff
changeset
|
1568 after the listing is made. */) |
43968
7ec801358b7e
(Qlocal, QCname, QCbuffer, QChost, QCservice, QCfamily)
Kim F. Storm <storm@cua.dk>
parents:
43642
diff
changeset
|
1569 (query_only) |
7ec801358b7e
(Qlocal, QCname, QCbuffer, QChost, QCservice, QCfamily)
Kim F. Storm <storm@cua.dk>
parents:
43642
diff
changeset
|
1570 Lisp_Object query_only; |
578 | 1571 { |
1572 internal_with_output_to_temp_buffer ("*Process List*", | |
43968
7ec801358b7e
(Qlocal, QCname, QCbuffer, QChost, QCservice, QCfamily)
Kim F. Storm <storm@cua.dk>
parents:
43642
diff
changeset
|
1573 list_processes_1, query_only); |
578 | 1574 return Qnil; |
1575 } | |
1576 | |
1577 DEFUN ("process-list", Fprocess_list, Sprocess_list, 0, 0, 0, | |
40103
6b389fb978bc
Change doc-string comments to `new style' [w/`doc:' keyword].
Pavel Janík <Pavel@Janik.cz>
parents:
39973
diff
changeset
|
1578 doc: /* Return a list of all processes. */) |
6b389fb978bc
Change doc-string comments to `new style' [w/`doc:' keyword].
Pavel Janík <Pavel@Janik.cz>
parents:
39973
diff
changeset
|
1579 () |
578 | 1580 { |
1581 return Fmapcar (Qcdr, Vprocess_alist); | |
1582 } | |
1583 | |
1594
b476a97ad17e
* systty.h, process.c, buffer.h, callproc.c, sysdep.c, dired.c:
Jim Blandy <jimb@redhat.com>
parents:
1569
diff
changeset
|
1584 /* Starting asynchronous inferior processes. */ |
b476a97ad17e
* systty.h, process.c, buffer.h, callproc.c, sysdep.c, dired.c:
Jim Blandy <jimb@redhat.com>
parents:
1569
diff
changeset
|
1585 |
b476a97ad17e
* systty.h, process.c, buffer.h, callproc.c, sysdep.c, dired.c:
Jim Blandy <jimb@redhat.com>
parents:
1569
diff
changeset
|
1586 static Lisp_Object start_process_unwind (); |
b476a97ad17e
* systty.h, process.c, buffer.h, callproc.c, sysdep.c, dired.c:
Jim Blandy <jimb@redhat.com>
parents:
1569
diff
changeset
|
1587 |
578 | 1588 DEFUN ("start-process", Fstart_process, Sstart_process, 3, MANY, 0, |
40103
6b389fb978bc
Change doc-string comments to `new style' [w/`doc:' keyword].
Pavel Janík <Pavel@Janik.cz>
parents:
39973
diff
changeset
|
1589 doc: /* Start a program in a subprocess. Return the process object for it. |
6b389fb978bc
Change doc-string comments to `new style' [w/`doc:' keyword].
Pavel Janík <Pavel@Janik.cz>
parents:
39973
diff
changeset
|
1590 NAME is name for process. It is modified if necessary to make it unique. |
55504
05e8ea84c376
(Fstart_process): Fix docstring.
Juanma Barranquero <lekktu@gmail.com>
parents:
55444
diff
changeset
|
1591 BUFFER is the buffer (or buffer name) to associate with the process. |
77440 | 1592 |
1593 Process output (both standard output and standard error streams) goes | |
1594 at end of BUFFER, unless you specify an output stream or filter | |
1595 function to handle the output. BUFFER may also be nil, meaning that | |
77462
4f679f6070a0
(Fstart_process): Doc fix.
Richard M. Stallman <rms@gnu.org>
parents:
77440
diff
changeset
|
1596 this process is not associated with any buffer. |
4f679f6070a0
(Fstart_process): Doc fix.
Richard M. Stallman <rms@gnu.org>
parents:
77440
diff
changeset
|
1597 |
104257
a577041a0370
(create_pty): New function.
Nick Roberts <nickrob@snap.net.nz>
parents:
103972
diff
changeset
|
1598 PROGRAM is the program file name. It is searched for in PATH. If |
a577041a0370
(create_pty): New function.
Nick Roberts <nickrob@snap.net.nz>
parents:
103972
diff
changeset
|
1599 nil, just associate a pty with the buffer. Remaining arguments are |
a577041a0370
(create_pty): New function.
Nick Roberts <nickrob@snap.net.nz>
parents:
103972
diff
changeset
|
1600 strings to give program as arguments. |
77440 | 1601 |
1602 If you want to separate standard output from standard error, invoke | |
1603 the command through a shell and redirect one of them using the shell | |
1604 syntax. | |
44170
888d736c0e91
(set-network-process-options): Add usage.
Pavel Janík <Pavel@Janik.cz>
parents:
44073
diff
changeset
|
1605 |
40641
d94fc1022312
(Fstart_process): Add usage to doc-string.
Pavel Janík <Pavel@Janik.cz>
parents:
40231
diff
changeset
|
1606 usage: (start-process NAME BUFFER PROGRAM &rest PROGRAM-ARGS) */) |
40103
6b389fb978bc
Change doc-string comments to `new style' [w/`doc:' keyword].
Pavel Janík <Pavel@Janik.cz>
parents:
39973
diff
changeset
|
1607 (nargs, args) |
578 | 1608 int nargs; |
1609 register Lisp_Object *args; | |
1610 { | |
1683
a0a41de51400
Give subprocess creation a way to find a valid current directory
Jim Blandy <jimb@redhat.com>
parents:
1655
diff
changeset
|
1611 Lisp_Object buffer, name, program, proc, current_dir, tem; |
578 | 1612 register unsigned char **new_argv; |
1613 register int i; | |
46293
1fb8f75062c6
Use macro SPECPDL_INDEX.
Juanma Barranquero <lekktu@gmail.com>
parents:
45410
diff
changeset
|
1614 int count = SPECPDL_INDEX (); |
578 | 1615 |
1616 buffer = args[1]; | |
1617 if (!NILP (buffer)) | |
1618 buffer = Fget_buffer_create (buffer); | |
1619 | |
1683
a0a41de51400
Give subprocess creation a way to find a valid current directory
Jim Blandy <jimb@redhat.com>
parents:
1655
diff
changeset
|
1620 /* Make sure that the child will be able to chdir to the current |
a0a41de51400
Give subprocess creation a way to find a valid current directory
Jim Blandy <jimb@redhat.com>
parents:
1655
diff
changeset
|
1621 buffer's current directory, or its unhandled equivalent. We |
a0a41de51400
Give subprocess creation a way to find a valid current directory
Jim Blandy <jimb@redhat.com>
parents:
1655
diff
changeset
|
1622 can't just have the child check for an error when it does the |
a0a41de51400
Give subprocess creation a way to find a valid current directory
Jim Blandy <jimb@redhat.com>
parents:
1655
diff
changeset
|
1623 chdir, since it's in a vfork. |
a0a41de51400
Give subprocess creation a way to find a valid current directory
Jim Blandy <jimb@redhat.com>
parents:
1655
diff
changeset
|
1624 |
a0a41de51400
Give subprocess creation a way to find a valid current directory
Jim Blandy <jimb@redhat.com>
parents:
1655
diff
changeset
|
1625 We have to GCPRO around this because Fexpand_file_name and |
a0a41de51400
Give subprocess creation a way to find a valid current directory
Jim Blandy <jimb@redhat.com>
parents:
1655
diff
changeset
|
1626 Funhandled_file_name_directory might call a file name handling |
a0a41de51400
Give subprocess creation a way to find a valid current directory
Jim Blandy <jimb@redhat.com>
parents:
1655
diff
changeset
|
1627 function. The argument list is protected by the caller, so all |
a0a41de51400
Give subprocess creation a way to find a valid current directory
Jim Blandy <jimb@redhat.com>
parents:
1655
diff
changeset
|
1628 we really have to worry about is buffer. */ |
a0a41de51400
Give subprocess creation a way to find a valid current directory
Jim Blandy <jimb@redhat.com>
parents:
1655
diff
changeset
|
1629 { |
a0a41de51400
Give subprocess creation a way to find a valid current directory
Jim Blandy <jimb@redhat.com>
parents:
1655
diff
changeset
|
1630 struct gcpro gcpro1, gcpro2; |
a0a41de51400
Give subprocess creation a way to find a valid current directory
Jim Blandy <jimb@redhat.com>
parents:
1655
diff
changeset
|
1631 |
a0a41de51400
Give subprocess creation a way to find a valid current directory
Jim Blandy <jimb@redhat.com>
parents:
1655
diff
changeset
|
1632 current_dir = current_buffer->directory; |
a0a41de51400
Give subprocess creation a way to find a valid current directory
Jim Blandy <jimb@redhat.com>
parents:
1655
diff
changeset
|
1633 |
a0a41de51400
Give subprocess creation a way to find a valid current directory
Jim Blandy <jimb@redhat.com>
parents:
1655
diff
changeset
|
1634 GCPRO2 (buffer, current_dir); |
a0a41de51400
Give subprocess creation a way to find a valid current directory
Jim Blandy <jimb@redhat.com>
parents:
1655
diff
changeset
|
1635 |
91551
f14242124fd7
* process.c (Fstart_process):
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
91367
diff
changeset
|
1636 current_dir = Funhandled_file_name_directory (current_dir); |
f14242124fd7
* process.c (Fstart_process):
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
91367
diff
changeset
|
1637 if (NILP (current_dir)) |
f14242124fd7
* process.c (Fstart_process):
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
91367
diff
changeset
|
1638 /* If the file name handler says that current_dir is unreachable, use |
f14242124fd7
* process.c (Fstart_process):
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
91367
diff
changeset
|
1639 a sensible default. */ |
f14242124fd7
* process.c (Fstart_process):
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
91367
diff
changeset
|
1640 current_dir = build_string ("~/"); |
f14242124fd7
* process.c (Fstart_process):
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
91367
diff
changeset
|
1641 current_dir = expand_and_dir_to_file (current_dir, Qnil); |
1683
a0a41de51400
Give subprocess creation a way to find a valid current directory
Jim Blandy <jimb@redhat.com>
parents:
1655
diff
changeset
|
1642 if (NILP (Ffile_accessible_directory_p (current_dir))) |
a0a41de51400
Give subprocess creation a way to find a valid current directory
Jim Blandy <jimb@redhat.com>
parents:
1655
diff
changeset
|
1643 report_file_error ("Setting current directory", |
a0a41de51400
Give subprocess creation a way to find a valid current directory
Jim Blandy <jimb@redhat.com>
parents:
1655
diff
changeset
|
1644 Fcons (current_buffer->directory, Qnil)); |
a0a41de51400
Give subprocess creation a way to find a valid current directory
Jim Blandy <jimb@redhat.com>
parents:
1655
diff
changeset
|
1645 |
a0a41de51400
Give subprocess creation a way to find a valid current directory
Jim Blandy <jimb@redhat.com>
parents:
1655
diff
changeset
|
1646 UNGCPRO; |
a0a41de51400
Give subprocess creation a way to find a valid current directory
Jim Blandy <jimb@redhat.com>
parents:
1655
diff
changeset
|
1647 } |
a0a41de51400
Give subprocess creation a way to find a valid current directory
Jim Blandy <jimb@redhat.com>
parents:
1655
diff
changeset
|
1648 |
578 | 1649 name = args[0]; |
40656
cdfd4d09b79a
Update usage of CHECK_ macros (remove unused second argument).
Pavel Janík <Pavel@Janik.cz>
parents:
40641
diff
changeset
|
1650 CHECK_STRING (name); |
578 | 1651 |
1652 program = args[2]; | |
1653 | |
104257
a577041a0370
(create_pty): New function.
Nick Roberts <nickrob@snap.net.nz>
parents:
103972
diff
changeset
|
1654 if (!NILP (program)) |
a577041a0370
(create_pty): New function.
Nick Roberts <nickrob@snap.net.nz>
parents:
103972
diff
changeset
|
1655 CHECK_STRING (program); |
578 | 1656 |
29017
8f10362eb5ff
(Fstart_process): GCPRO current_dir before calling
Kenichi Handa <handa@m17n.org>
parents:
28157
diff
changeset
|
1657 proc = make_process (name); |
8f10362eb5ff
(Fstart_process): GCPRO current_dir before calling
Kenichi Handa <handa@m17n.org>
parents:
28157
diff
changeset
|
1658 /* If an error occurs and we can't start the process, we want to |
8f10362eb5ff
(Fstart_process): GCPRO current_dir before calling
Kenichi Handa <handa@m17n.org>
parents:
28157
diff
changeset
|
1659 remove it from the process list. This means that each error |
8f10362eb5ff
(Fstart_process): GCPRO current_dir before calling
Kenichi Handa <handa@m17n.org>
parents:
28157
diff
changeset
|
1660 check in create_process doesn't need to call remove_process |
8f10362eb5ff
(Fstart_process): GCPRO current_dir before calling
Kenichi Handa <handa@m17n.org>
parents:
28157
diff
changeset
|
1661 itself; it's all taken care of here. */ |
8f10362eb5ff
(Fstart_process): GCPRO current_dir before calling
Kenichi Handa <handa@m17n.org>
parents:
28157
diff
changeset
|
1662 record_unwind_protect (start_process_unwind, proc); |
8f10362eb5ff
(Fstart_process): GCPRO current_dir before calling
Kenichi Handa <handa@m17n.org>
parents:
28157
diff
changeset
|
1663 |
8f10362eb5ff
(Fstart_process): GCPRO current_dir before calling
Kenichi Handa <handa@m17n.org>
parents:
28157
diff
changeset
|
1664 XPROCESS (proc)->childp = Qt; |
49223
26622fa0d099
Reworked 2003-01-12 change -- call a plist a plist!
Kim F. Storm <storm@cua.dk>
parents:
49164
diff
changeset
|
1665 XPROCESS (proc)->plist = Qnil; |
95884
d6a4488883dc
Daniel Engeler <engeler at gmail.com>
Glenn Morris <rgm@gnu.org>
parents:
95387
diff
changeset
|
1666 XPROCESS (proc)->type = Qreal; |
29017
8f10362eb5ff
(Fstart_process): GCPRO current_dir before calling
Kenichi Handa <handa@m17n.org>
parents:
28157
diff
changeset
|
1667 XPROCESS (proc)->buffer = buffer; |
8f10362eb5ff
(Fstart_process): GCPRO current_dir before calling
Kenichi Handa <handa@m17n.org>
parents:
28157
diff
changeset
|
1668 XPROCESS (proc)->sentinel = Qnil; |
8f10362eb5ff
(Fstart_process): GCPRO current_dir before calling
Kenichi Handa <handa@m17n.org>
parents:
28157
diff
changeset
|
1669 XPROCESS (proc)->filter = Qnil; |
8f10362eb5ff
(Fstart_process): GCPRO current_dir before calling
Kenichi Handa <handa@m17n.org>
parents:
28157
diff
changeset
|
1670 XPROCESS (proc)->command = Flist (nargs - 2, args + 2); |
8f10362eb5ff
(Fstart_process): GCPRO current_dir before calling
Kenichi Handa <handa@m17n.org>
parents:
28157
diff
changeset
|
1671 |
53472
1a5fe79d27f3
(ADAPTIVE_READ_BUFFERING): New conditional.
Kim F. Storm <storm@cua.dk>
parents:
53072
diff
changeset
|
1672 #ifdef ADAPTIVE_READ_BUFFERING |
81826
077a1e6fd3f2
(struct Lisp_Process): Turn slots infd, outfd, kill_without_query, pty_flag,
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
80984
diff
changeset
|
1673 XPROCESS (proc)->adaptive_read_buffering |
077a1e6fd3f2
(struct Lisp_Process): Turn slots infd, outfd, kill_without_query, pty_flag,
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
80984
diff
changeset
|
1674 = (NILP (Vprocess_adaptive_read_buffering) ? 0 |
077a1e6fd3f2
(struct Lisp_Process): Turn slots infd, outfd, kill_without_query, pty_flag,
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
80984
diff
changeset
|
1675 : EQ (Vprocess_adaptive_read_buffering, Qt) ? 1 : 2); |
53472
1a5fe79d27f3
(ADAPTIVE_READ_BUFFERING): New conditional.
Kim F. Storm <storm@cua.dk>
parents:
53072
diff
changeset
|
1676 #endif |
1a5fe79d27f3
(ADAPTIVE_READ_BUFFERING): New conditional.
Kim F. Storm <storm@cua.dk>
parents:
53072
diff
changeset
|
1677 |
29017
8f10362eb5ff
(Fstart_process): GCPRO current_dir before calling
Kenichi Handa <handa@m17n.org>
parents:
28157
diff
changeset
|
1678 /* Make the process marker point into the process buffer (if any). */ |
69151
08c9c1760e1c
(Fmake_network_process): Init the process's mark.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
68651
diff
changeset
|
1679 if (BUFFERP (buffer)) |
29017
8f10362eb5ff
(Fstart_process): GCPRO current_dir before calling
Kenichi Handa <handa@m17n.org>
parents:
28157
diff
changeset
|
1680 set_marker_both (XPROCESS (proc)->mark, buffer, |
8f10362eb5ff
(Fstart_process): GCPRO current_dir before calling
Kenichi Handa <handa@m17n.org>
parents:
28157
diff
changeset
|
1681 BUF_ZV (XBUFFER (buffer)), |
8f10362eb5ff
(Fstart_process): GCPRO current_dir before calling
Kenichi Handa <handa@m17n.org>
parents:
28157
diff
changeset
|
1682 BUF_ZV_BYTE (XBUFFER (buffer))); |
8f10362eb5ff
(Fstart_process): GCPRO current_dir before calling
Kenichi Handa <handa@m17n.org>
parents:
28157
diff
changeset
|
1683 |
8f10362eb5ff
(Fstart_process): GCPRO current_dir before calling
Kenichi Handa <handa@m17n.org>
parents:
28157
diff
changeset
|
1684 { |
8f10362eb5ff
(Fstart_process): GCPRO current_dir before calling
Kenichi Handa <handa@m17n.org>
parents:
28157
diff
changeset
|
1685 /* Decide coding systems for communicating with the process. Here |
8f10362eb5ff
(Fstart_process): GCPRO current_dir before calling
Kenichi Handa <handa@m17n.org>
parents:
28157
diff
changeset
|
1686 we don't setup the structure coding_system nor pay attention to |
8f10362eb5ff
(Fstart_process): GCPRO current_dir before calling
Kenichi Handa <handa@m17n.org>
parents:
28157
diff
changeset
|
1687 unibyte mode. They are done in create_process. */ |
8f10362eb5ff
(Fstart_process): GCPRO current_dir before calling
Kenichi Handa <handa@m17n.org>
parents:
28157
diff
changeset
|
1688 |
8f10362eb5ff
(Fstart_process): GCPRO current_dir before calling
Kenichi Handa <handa@m17n.org>
parents:
28157
diff
changeset
|
1689 /* Qt denotes we have not yet called Ffind_operation_coding_system. */ |
8f10362eb5ff
(Fstart_process): GCPRO current_dir before calling
Kenichi Handa <handa@m17n.org>
parents:
28157
diff
changeset
|
1690 Lisp_Object coding_systems = Qt; |
8f10362eb5ff
(Fstart_process): GCPRO current_dir before calling
Kenichi Handa <handa@m17n.org>
parents:
28157
diff
changeset
|
1691 Lisp_Object val, *args2; |
8f10362eb5ff
(Fstart_process): GCPRO current_dir before calling
Kenichi Handa <handa@m17n.org>
parents:
28157
diff
changeset
|
1692 struct gcpro gcpro1, gcpro2; |
8f10362eb5ff
(Fstart_process): GCPRO current_dir before calling
Kenichi Handa <handa@m17n.org>
parents:
28157
diff
changeset
|
1693 |
8f10362eb5ff
(Fstart_process): GCPRO current_dir before calling
Kenichi Handa <handa@m17n.org>
parents:
28157
diff
changeset
|
1694 val = Vcoding_system_for_read; |
8f10362eb5ff
(Fstart_process): GCPRO current_dir before calling
Kenichi Handa <handa@m17n.org>
parents:
28157
diff
changeset
|
1695 if (NILP (val)) |
8f10362eb5ff
(Fstart_process): GCPRO current_dir before calling
Kenichi Handa <handa@m17n.org>
parents:
28157
diff
changeset
|
1696 { |
8f10362eb5ff
(Fstart_process): GCPRO current_dir before calling
Kenichi Handa <handa@m17n.org>
parents:
28157
diff
changeset
|
1697 args2 = (Lisp_Object *) alloca ((nargs + 1) * sizeof *args2); |
8f10362eb5ff
(Fstart_process): GCPRO current_dir before calling
Kenichi Handa <handa@m17n.org>
parents:
28157
diff
changeset
|
1698 args2[0] = Qstart_process; |
8f10362eb5ff
(Fstart_process): GCPRO current_dir before calling
Kenichi Handa <handa@m17n.org>
parents:
28157
diff
changeset
|
1699 for (i = 0; i < nargs; i++) args2[i + 1] = args[i]; |
8f10362eb5ff
(Fstart_process): GCPRO current_dir before calling
Kenichi Handa <handa@m17n.org>
parents:
28157
diff
changeset
|
1700 GCPRO2 (proc, current_dir); |
104257
a577041a0370
(create_pty): New function.
Nick Roberts <nickrob@snap.net.nz>
parents:
103972
diff
changeset
|
1701 if (!NILP (program)) |
a577041a0370
(create_pty): New function.
Nick Roberts <nickrob@snap.net.nz>
parents:
103972
diff
changeset
|
1702 coding_systems = Ffind_operation_coding_system (nargs + 1, args2); |
29017
8f10362eb5ff
(Fstart_process): GCPRO current_dir before calling
Kenichi Handa <handa@m17n.org>
parents:
28157
diff
changeset
|
1703 UNGCPRO; |
8f10362eb5ff
(Fstart_process): GCPRO current_dir before calling
Kenichi Handa <handa@m17n.org>
parents:
28157
diff
changeset
|
1704 if (CONSP (coding_systems)) |
8f10362eb5ff
(Fstart_process): GCPRO current_dir before calling
Kenichi Handa <handa@m17n.org>
parents:
28157
diff
changeset
|
1705 val = XCAR (coding_systems); |
8f10362eb5ff
(Fstart_process): GCPRO current_dir before calling
Kenichi Handa <handa@m17n.org>
parents:
28157
diff
changeset
|
1706 else if (CONSP (Vdefault_process_coding_system)) |
8f10362eb5ff
(Fstart_process): GCPRO current_dir before calling
Kenichi Handa <handa@m17n.org>
parents:
28157
diff
changeset
|
1707 val = XCAR (Vdefault_process_coding_system); |
8f10362eb5ff
(Fstart_process): GCPRO current_dir before calling
Kenichi Handa <handa@m17n.org>
parents:
28157
diff
changeset
|
1708 } |
8f10362eb5ff
(Fstart_process): GCPRO current_dir before calling
Kenichi Handa <handa@m17n.org>
parents:
28157
diff
changeset
|
1709 XPROCESS (proc)->decode_coding_system = val; |
8f10362eb5ff
(Fstart_process): GCPRO current_dir before calling
Kenichi Handa <handa@m17n.org>
parents:
28157
diff
changeset
|
1710 |
8f10362eb5ff
(Fstart_process): GCPRO current_dir before calling
Kenichi Handa <handa@m17n.org>
parents:
28157
diff
changeset
|
1711 val = Vcoding_system_for_write; |
8f10362eb5ff
(Fstart_process): GCPRO current_dir before calling
Kenichi Handa <handa@m17n.org>
parents:
28157
diff
changeset
|
1712 if (NILP (val)) |
8f10362eb5ff
(Fstart_process): GCPRO current_dir before calling
Kenichi Handa <handa@m17n.org>
parents:
28157
diff
changeset
|
1713 { |
8f10362eb5ff
(Fstart_process): GCPRO current_dir before calling
Kenichi Handa <handa@m17n.org>
parents:
28157
diff
changeset
|
1714 if (EQ (coding_systems, Qt)) |
8f10362eb5ff
(Fstart_process): GCPRO current_dir before calling
Kenichi Handa <handa@m17n.org>
parents:
28157
diff
changeset
|
1715 { |
8f10362eb5ff
(Fstart_process): GCPRO current_dir before calling
Kenichi Handa <handa@m17n.org>
parents:
28157
diff
changeset
|
1716 args2 = (Lisp_Object *) alloca ((nargs + 1) * sizeof args2); |
8f10362eb5ff
(Fstart_process): GCPRO current_dir before calling
Kenichi Handa <handa@m17n.org>
parents:
28157
diff
changeset
|
1717 args2[0] = Qstart_process; |
8f10362eb5ff
(Fstart_process): GCPRO current_dir before calling
Kenichi Handa <handa@m17n.org>
parents:
28157
diff
changeset
|
1718 for (i = 0; i < nargs; i++) args2[i + 1] = args[i]; |
8f10362eb5ff
(Fstart_process): GCPRO current_dir before calling
Kenichi Handa <handa@m17n.org>
parents:
28157
diff
changeset
|
1719 GCPRO2 (proc, current_dir); |
104257
a577041a0370
(create_pty): New function.
Nick Roberts <nickrob@snap.net.nz>
parents:
103972
diff
changeset
|
1720 if (!NILP (program)) |
a577041a0370
(create_pty): New function.
Nick Roberts <nickrob@snap.net.nz>
parents:
103972
diff
changeset
|
1721 coding_systems = Ffind_operation_coding_system (nargs + 1, args2); |
29017
8f10362eb5ff
(Fstart_process): GCPRO current_dir before calling
Kenichi Handa <handa@m17n.org>
parents:
28157
diff
changeset
|
1722 UNGCPRO; |
8f10362eb5ff
(Fstart_process): GCPRO current_dir before calling
Kenichi Handa <handa@m17n.org>
parents:
28157
diff
changeset
|
1723 } |
8f10362eb5ff
(Fstart_process): GCPRO current_dir before calling
Kenichi Handa <handa@m17n.org>
parents:
28157
diff
changeset
|
1724 if (CONSP (coding_systems)) |
8f10362eb5ff
(Fstart_process): GCPRO current_dir before calling
Kenichi Handa <handa@m17n.org>
parents:
28157
diff
changeset
|
1725 val = XCDR (coding_systems); |
8f10362eb5ff
(Fstart_process): GCPRO current_dir before calling
Kenichi Handa <handa@m17n.org>
parents:
28157
diff
changeset
|
1726 else if (CONSP (Vdefault_process_coding_system)) |
8f10362eb5ff
(Fstart_process): GCPRO current_dir before calling
Kenichi Handa <handa@m17n.org>
parents:
28157
diff
changeset
|
1727 val = XCDR (Vdefault_process_coding_system); |
8f10362eb5ff
(Fstart_process): GCPRO current_dir before calling
Kenichi Handa <handa@m17n.org>
parents:
28157
diff
changeset
|
1728 } |
8f10362eb5ff
(Fstart_process): GCPRO current_dir before calling
Kenichi Handa <handa@m17n.org>
parents:
28157
diff
changeset
|
1729 XPROCESS (proc)->encode_coding_system = val; |
110829
4d672e9d91bf
Complement a coding system for encoding arguments and input to a process.
Kenichi Handa <handa@m17n.org>
parents:
108935
diff
changeset
|
1730 /* Note: At this momemnt, the above coding system may leave |
4d672e9d91bf
Complement a coding system for encoding arguments and input to a process.
Kenichi Handa <handa@m17n.org>
parents:
108935
diff
changeset
|
1731 text-conversion or eol-conversion unspecified. They will be |
4d672e9d91bf
Complement a coding system for encoding arguments and input to a process.
Kenichi Handa <handa@m17n.org>
parents:
108935
diff
changeset
|
1732 decided after we read output from the process and decode it by |
4d672e9d91bf
Complement a coding system for encoding arguments and input to a process.
Kenichi Handa <handa@m17n.org>
parents:
108935
diff
changeset
|
1733 some coding system, or just before we actually send a text to |
4d672e9d91bf
Complement a coding system for encoding arguments and input to a process.
Kenichi Handa <handa@m17n.org>
parents:
108935
diff
changeset
|
1734 the process. */ |
29017
8f10362eb5ff
(Fstart_process): GCPRO current_dir before calling
Kenichi Handa <handa@m17n.org>
parents:
28157
diff
changeset
|
1735 } |
8f10362eb5ff
(Fstart_process): GCPRO current_dir before calling
Kenichi Handa <handa@m17n.org>
parents:
28157
diff
changeset
|
1736 |
578 | 1737 |
17041
b61cbe595be5
Include charset.h and coding.h.
Karl Heuer <kwzh@gnu.org>
parents:
16780
diff
changeset
|
1738 XPROCESS (proc)->decoding_buf = make_uninit_string (0); |
81826
077a1e6fd3f2
(struct Lisp_Process): Turn slots infd, outfd, kill_without_query, pty_flag,
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
80984
diff
changeset
|
1739 XPROCESS (proc)->decoding_carryover = 0; |
17041
b61cbe595be5
Include charset.h and coding.h.
Karl Heuer <kwzh@gnu.org>
parents:
16780
diff
changeset
|
1740 XPROCESS (proc)->encoding_buf = make_uninit_string (0); |
b61cbe595be5
Include charset.h and coding.h.
Karl Heuer <kwzh@gnu.org>
parents:
16780
diff
changeset
|
1741 |
21656
bb39a5863a82
(Fset_process_inherit_coding_system_flag,
Eli Zaretskii <eliz@gnu.org>
parents:
21530
diff
changeset
|
1742 XPROCESS (proc)->inherit_coding_system_flag |
81926
50da0700fc26
(Fstart_process, Fmake_network_process, read_process_output):
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
81876
diff
changeset
|
1743 = !(NILP (buffer) || !inherit_process_coding_system); |
21656
bb39a5863a82
(Fset_process_inherit_coding_system_flag,
Eli Zaretskii <eliz@gnu.org>
parents:
21530
diff
changeset
|
1744 |
104257
a577041a0370
(create_pty): New function.
Nick Roberts <nickrob@snap.net.nz>
parents:
103972
diff
changeset
|
1745 if (!NILP (program)) |
a577041a0370
(create_pty): New function.
Nick Roberts <nickrob@snap.net.nz>
parents:
103972
diff
changeset
|
1746 { |
a577041a0370
(create_pty): New function.
Nick Roberts <nickrob@snap.net.nz>
parents:
103972
diff
changeset
|
1747 /* If program file name is not absolute, search our path for it. |
a577041a0370
(create_pty): New function.
Nick Roberts <nickrob@snap.net.nz>
parents:
103972
diff
changeset
|
1748 Put the name we will really use in TEM. */ |
a577041a0370
(create_pty): New function.
Nick Roberts <nickrob@snap.net.nz>
parents:
103972
diff
changeset
|
1749 if (!IS_DIRECTORY_SEP (SREF (program, 0)) |
a577041a0370
(create_pty): New function.
Nick Roberts <nickrob@snap.net.nz>
parents:
103972
diff
changeset
|
1750 && !(SCHARS (program) > 1 |
a577041a0370
(create_pty): New function.
Nick Roberts <nickrob@snap.net.nz>
parents:
103972
diff
changeset
|
1751 && IS_DEVICE_SEP (SREF (program, 1)))) |
a577041a0370
(create_pty): New function.
Nick Roberts <nickrob@snap.net.nz>
parents:
103972
diff
changeset
|
1752 { |
a577041a0370
(create_pty): New function.
Nick Roberts <nickrob@snap.net.nz>
parents:
103972
diff
changeset
|
1753 struct gcpro gcpro1, gcpro2, gcpro3, gcpro4; |
a577041a0370
(create_pty): New function.
Nick Roberts <nickrob@snap.net.nz>
parents:
103972
diff
changeset
|
1754 |
a577041a0370
(create_pty): New function.
Nick Roberts <nickrob@snap.net.nz>
parents:
103972
diff
changeset
|
1755 tem = Qnil; |
a577041a0370
(create_pty): New function.
Nick Roberts <nickrob@snap.net.nz>
parents:
103972
diff
changeset
|
1756 GCPRO4 (name, program, buffer, current_dir); |
a577041a0370
(create_pty): New function.
Nick Roberts <nickrob@snap.net.nz>
parents:
103972
diff
changeset
|
1757 openp (Vexec_path, program, Vexec_suffixes, &tem, make_number (X_OK)); |
a577041a0370
(create_pty): New function.
Nick Roberts <nickrob@snap.net.nz>
parents:
103972
diff
changeset
|
1758 UNGCPRO; |
a577041a0370
(create_pty): New function.
Nick Roberts <nickrob@snap.net.nz>
parents:
103972
diff
changeset
|
1759 if (NILP (tem)) |
a577041a0370
(create_pty): New function.
Nick Roberts <nickrob@snap.net.nz>
parents:
103972
diff
changeset
|
1760 report_file_error ("Searching for program", Fcons (program, Qnil)); |
a577041a0370
(create_pty): New function.
Nick Roberts <nickrob@snap.net.nz>
parents:
103972
diff
changeset
|
1761 tem = Fexpand_file_name (tem, Qnil); |
a577041a0370
(create_pty): New function.
Nick Roberts <nickrob@snap.net.nz>
parents:
103972
diff
changeset
|
1762 } |
a577041a0370
(create_pty): New function.
Nick Roberts <nickrob@snap.net.nz>
parents:
103972
diff
changeset
|
1763 else |
a577041a0370
(create_pty): New function.
Nick Roberts <nickrob@snap.net.nz>
parents:
103972
diff
changeset
|
1764 { |
a577041a0370
(create_pty): New function.
Nick Roberts <nickrob@snap.net.nz>
parents:
103972
diff
changeset
|
1765 if (!NILP (Ffile_directory_p (program))) |
a577041a0370
(create_pty): New function.
Nick Roberts <nickrob@snap.net.nz>
parents:
103972
diff
changeset
|
1766 error ("Specified program for new process is a directory"); |
a577041a0370
(create_pty): New function.
Nick Roberts <nickrob@snap.net.nz>
parents:
103972
diff
changeset
|
1767 tem = program; |
a577041a0370
(create_pty): New function.
Nick Roberts <nickrob@snap.net.nz>
parents:
103972
diff
changeset
|
1768 } |
a577041a0370
(create_pty): New function.
Nick Roberts <nickrob@snap.net.nz>
parents:
103972
diff
changeset
|
1769 |
a577041a0370
(create_pty): New function.
Nick Roberts <nickrob@snap.net.nz>
parents:
103972
diff
changeset
|
1770 /* If program file name starts with /: for quoting a magic name, |
a577041a0370
(create_pty): New function.
Nick Roberts <nickrob@snap.net.nz>
parents:
103972
diff
changeset
|
1771 discard that. */ |
a577041a0370
(create_pty): New function.
Nick Roberts <nickrob@snap.net.nz>
parents:
103972
diff
changeset
|
1772 if (SBYTES (tem) > 2 && SREF (tem, 0) == '/' |
a577041a0370
(create_pty): New function.
Nick Roberts <nickrob@snap.net.nz>
parents:
103972
diff
changeset
|
1773 && SREF (tem, 1) == ':') |
a577041a0370
(create_pty): New function.
Nick Roberts <nickrob@snap.net.nz>
parents:
103972
diff
changeset
|
1774 tem = Fsubstring (tem, make_number (2), Qnil); |
a577041a0370
(create_pty): New function.
Nick Roberts <nickrob@snap.net.nz>
parents:
103972
diff
changeset
|
1775 |
a577041a0370
(create_pty): New function.
Nick Roberts <nickrob@snap.net.nz>
parents:
103972
diff
changeset
|
1776 { |
110829
4d672e9d91bf
Complement a coding system for encoding arguments and input to a process.
Kenichi Handa <handa@m17n.org>
parents:
108935
diff
changeset
|
1777 Lisp_Object arg_encoding = Qnil; |
104257
a577041a0370
(create_pty): New function.
Nick Roberts <nickrob@snap.net.nz>
parents:
103972
diff
changeset
|
1778 struct gcpro gcpro1; |
a577041a0370
(create_pty): New function.
Nick Roberts <nickrob@snap.net.nz>
parents:
103972
diff
changeset
|
1779 GCPRO1 (tem); |
a577041a0370
(create_pty): New function.
Nick Roberts <nickrob@snap.net.nz>
parents:
103972
diff
changeset
|
1780 |
a577041a0370
(create_pty): New function.
Nick Roberts <nickrob@snap.net.nz>
parents:
103972
diff
changeset
|
1781 /* Encode the file name and put it in NEW_ARGV. |
a577041a0370
(create_pty): New function.
Nick Roberts <nickrob@snap.net.nz>
parents:
103972
diff
changeset
|
1782 That's where the child will use it to execute the program. */ |
a577041a0370
(create_pty): New function.
Nick Roberts <nickrob@snap.net.nz>
parents:
103972
diff
changeset
|
1783 tem = Fcons (ENCODE_FILE (tem), Qnil); |
a577041a0370
(create_pty): New function.
Nick Roberts <nickrob@snap.net.nz>
parents:
103972
diff
changeset
|
1784 |
a577041a0370
(create_pty): New function.
Nick Roberts <nickrob@snap.net.nz>
parents:
103972
diff
changeset
|
1785 /* Here we encode arguments by the coding system used for sending |
a577041a0370
(create_pty): New function.
Nick Roberts <nickrob@snap.net.nz>
parents:
103972
diff
changeset
|
1786 data to the process. We don't support using different coding |
a577041a0370
(create_pty): New function.
Nick Roberts <nickrob@snap.net.nz>
parents:
103972
diff
changeset
|
1787 systems for encoding arguments and for encoding data sent to the |
a577041a0370
(create_pty): New function.
Nick Roberts <nickrob@snap.net.nz>
parents:
103972
diff
changeset
|
1788 process. */ |
a577041a0370
(create_pty): New function.
Nick Roberts <nickrob@snap.net.nz>
parents:
103972
diff
changeset
|
1789 |
a577041a0370
(create_pty): New function.
Nick Roberts <nickrob@snap.net.nz>
parents:
103972
diff
changeset
|
1790 for (i = 3; i < nargs; i++) |
a577041a0370
(create_pty): New function.
Nick Roberts <nickrob@snap.net.nz>
parents:
103972
diff
changeset
|
1791 { |
a577041a0370
(create_pty): New function.
Nick Roberts <nickrob@snap.net.nz>
parents:
103972
diff
changeset
|
1792 tem = Fcons (args[i], tem); |
a577041a0370
(create_pty): New function.
Nick Roberts <nickrob@snap.net.nz>
parents:
103972
diff
changeset
|
1793 CHECK_STRING (XCAR (tem)); |
a577041a0370
(create_pty): New function.
Nick Roberts <nickrob@snap.net.nz>
parents:
103972
diff
changeset
|
1794 if (STRING_MULTIBYTE (XCAR (tem))) |
110829
4d672e9d91bf
Complement a coding system for encoding arguments and input to a process.
Kenichi Handa <handa@m17n.org>
parents:
108935
diff
changeset
|
1795 { |
4d672e9d91bf
Complement a coding system for encoding arguments and input to a process.
Kenichi Handa <handa@m17n.org>
parents:
108935
diff
changeset
|
1796 if (NILP (arg_encoding)) |
4d672e9d91bf
Complement a coding system for encoding arguments and input to a process.
Kenichi Handa <handa@m17n.org>
parents:
108935
diff
changeset
|
1797 arg_encoding = (complement_process_encoding_system |
4d672e9d91bf
Complement a coding system for encoding arguments and input to a process.
Kenichi Handa <handa@m17n.org>
parents:
108935
diff
changeset
|
1798 (XPROCESS (proc)->encode_coding_system)); |
4d672e9d91bf
Complement a coding system for encoding arguments and input to a process.
Kenichi Handa <handa@m17n.org>
parents:
108935
diff
changeset
|
1799 XSETCAR (tem, |
4d672e9d91bf
Complement a coding system for encoding arguments and input to a process.
Kenichi Handa <handa@m17n.org>
parents:
108935
diff
changeset
|
1800 code_convert_string_norecord |
4d672e9d91bf
Complement a coding system for encoding arguments and input to a process.
Kenichi Handa <handa@m17n.org>
parents:
108935
diff
changeset
|
1801 (XCAR (tem), arg_encoding, 1)); |
4d672e9d91bf
Complement a coding system for encoding arguments and input to a process.
Kenichi Handa <handa@m17n.org>
parents:
108935
diff
changeset
|
1802 } |
104257
a577041a0370
(create_pty): New function.
Nick Roberts <nickrob@snap.net.nz>
parents:
103972
diff
changeset
|
1803 } |
a577041a0370
(create_pty): New function.
Nick Roberts <nickrob@snap.net.nz>
parents:
103972
diff
changeset
|
1804 |
a577041a0370
(create_pty): New function.
Nick Roberts <nickrob@snap.net.nz>
parents:
103972
diff
changeset
|
1805 UNGCPRO; |
a577041a0370
(create_pty): New function.
Nick Roberts <nickrob@snap.net.nz>
parents:
103972
diff
changeset
|
1806 } |
a577041a0370
(create_pty): New function.
Nick Roberts <nickrob@snap.net.nz>
parents:
103972
diff
changeset
|
1807 |
a577041a0370
(create_pty): New function.
Nick Roberts <nickrob@snap.net.nz>
parents:
103972
diff
changeset
|
1808 /* Now that everything is encoded we can collect the strings into |
a577041a0370
(create_pty): New function.
Nick Roberts <nickrob@snap.net.nz>
parents:
103972
diff
changeset
|
1809 NEW_ARGV. */ |
a577041a0370
(create_pty): New function.
Nick Roberts <nickrob@snap.net.nz>
parents:
103972
diff
changeset
|
1810 new_argv = (unsigned char **) alloca ((nargs - 1) * sizeof (char *)); |
a577041a0370
(create_pty): New function.
Nick Roberts <nickrob@snap.net.nz>
parents:
103972
diff
changeset
|
1811 new_argv[nargs - 2] = 0; |
a577041a0370
(create_pty): New function.
Nick Roberts <nickrob@snap.net.nz>
parents:
103972
diff
changeset
|
1812 |
a577041a0370
(create_pty): New function.
Nick Roberts <nickrob@snap.net.nz>
parents:
103972
diff
changeset
|
1813 for (i = nargs - 3; i >= 0; i--) |
a577041a0370
(create_pty): New function.
Nick Roberts <nickrob@snap.net.nz>
parents:
103972
diff
changeset
|
1814 { |
a577041a0370
(create_pty): New function.
Nick Roberts <nickrob@snap.net.nz>
parents:
103972
diff
changeset
|
1815 new_argv[i] = SDATA (XCAR (tem)); |
a577041a0370
(create_pty): New function.
Nick Roberts <nickrob@snap.net.nz>
parents:
103972
diff
changeset
|
1816 tem = XCDR (tem); |
a577041a0370
(create_pty): New function.
Nick Roberts <nickrob@snap.net.nz>
parents:
103972
diff
changeset
|
1817 } |
a577041a0370
(create_pty): New function.
Nick Roberts <nickrob@snap.net.nz>
parents:
103972
diff
changeset
|
1818 |
a577041a0370
(create_pty): New function.
Nick Roberts <nickrob@snap.net.nz>
parents:
103972
diff
changeset
|
1819 create_process (proc, (char **) new_argv, current_dir); |
a577041a0370
(create_pty): New function.
Nick Roberts <nickrob@snap.net.nz>
parents:
103972
diff
changeset
|
1820 } |
a577041a0370
(create_pty): New function.
Nick Roberts <nickrob@snap.net.nz>
parents:
103972
diff
changeset
|
1821 else |
a577041a0370
(create_pty): New function.
Nick Roberts <nickrob@snap.net.nz>
parents:
103972
diff
changeset
|
1822 create_pty (proc); |
578 | 1823 |
1594
b476a97ad17e
* systty.h, process.c, buffer.h, callproc.c, sysdep.c, dired.c:
Jim Blandy <jimb@redhat.com>
parents:
1569
diff
changeset
|
1824 return unbind_to (count, proc); |
578 | 1825 } |
1826 | |
1594
b476a97ad17e
* systty.h, process.c, buffer.h, callproc.c, sysdep.c, dired.c:
Jim Blandy <jimb@redhat.com>
parents:
1569
diff
changeset
|
1827 /* This function is the unwind_protect form for Fstart_process. If |
14036 | 1828 PROC doesn't have its pid set, then we know someone has signaled |
1594
b476a97ad17e
* systty.h, process.c, buffer.h, callproc.c, sysdep.c, dired.c:
Jim Blandy <jimb@redhat.com>
parents:
1569
diff
changeset
|
1829 an error and the process wasn't started successfully, so we should |
b476a97ad17e
* systty.h, process.c, buffer.h, callproc.c, sysdep.c, dired.c:
Jim Blandy <jimb@redhat.com>
parents:
1569
diff
changeset
|
1830 remove it from the process list. */ |
b476a97ad17e
* systty.h, process.c, buffer.h, callproc.c, sysdep.c, dired.c:
Jim Blandy <jimb@redhat.com>
parents:
1569
diff
changeset
|
1831 static Lisp_Object |
b476a97ad17e
* systty.h, process.c, buffer.h, callproc.c, sysdep.c, dired.c:
Jim Blandy <jimb@redhat.com>
parents:
1569
diff
changeset
|
1832 start_process_unwind (proc) |
b476a97ad17e
* systty.h, process.c, buffer.h, callproc.c, sysdep.c, dired.c:
Jim Blandy <jimb@redhat.com>
parents:
1569
diff
changeset
|
1833 Lisp_Object proc; |
b476a97ad17e
* systty.h, process.c, buffer.h, callproc.c, sysdep.c, dired.c:
Jim Blandy <jimb@redhat.com>
parents:
1569
diff
changeset
|
1834 { |
9115
59bc2d010b5f
(decode_status, Fprocessp, Fget_process, Fget_buffer_process, Fprocess_status,
Karl Heuer <kwzh@gnu.org>
parents:
9034
diff
changeset
|
1835 if (!PROCESSP (proc)) |
1594
b476a97ad17e
* systty.h, process.c, buffer.h, callproc.c, sysdep.c, dired.c:
Jim Blandy <jimb@redhat.com>
parents:
1569
diff
changeset
|
1836 abort (); |
b476a97ad17e
* systty.h, process.c, buffer.h, callproc.c, sysdep.c, dired.c:
Jim Blandy <jimb@redhat.com>
parents:
1569
diff
changeset
|
1837 |
b476a97ad17e
* systty.h, process.c, buffer.h, callproc.c, sysdep.c, dired.c:
Jim Blandy <jimb@redhat.com>
parents:
1569
diff
changeset
|
1838 /* Was PROC started successfully? */ |
104257
a577041a0370
(create_pty): New function.
Nick Roberts <nickrob@snap.net.nz>
parents:
103972
diff
changeset
|
1839 if (XPROCESS (proc)->pid == -1) |
1594
b476a97ad17e
* systty.h, process.c, buffer.h, callproc.c, sysdep.c, dired.c:
Jim Blandy <jimb@redhat.com>
parents:
1569
diff
changeset
|
1840 remove_process (proc); |
b476a97ad17e
* systty.h, process.c, buffer.h, callproc.c, sysdep.c, dired.c:
Jim Blandy <jimb@redhat.com>
parents:
1569
diff
changeset
|
1841 |
b476a97ad17e
* systty.h, process.c, buffer.h, callproc.c, sysdep.c, dired.c:
Jim Blandy <jimb@redhat.com>
parents:
1569
diff
changeset
|
1842 return Qnil; |
b476a97ad17e
* systty.h, process.c, buffer.h, callproc.c, sysdep.c, dired.c:
Jim Blandy <jimb@redhat.com>
parents:
1569
diff
changeset
|
1843 } |
b476a97ad17e
* systty.h, process.c, buffer.h, callproc.c, sysdep.c, dired.c:
Jim Blandy <jimb@redhat.com>
parents:
1569
diff
changeset
|
1844 |
64977
d26871fb1b7b
(deactivate_process, status_notify, read_process_output)
Kim F. Storm <storm@cua.dk>
parents:
64770
diff
changeset
|
1845 static void |
27430
1aa71680fe50
(toplevel): Include atimer.h.
Gerd Moellmann <gerd@gnu.org>
parents:
27028
diff
changeset
|
1846 create_process_1 (timer) |
1aa71680fe50
(toplevel): Include atimer.h.
Gerd Moellmann <gerd@gnu.org>
parents:
27028
diff
changeset
|
1847 struct atimer *timer; |
578 | 1848 { |
27430
1aa71680fe50
(toplevel): Include atimer.h.
Gerd Moellmann <gerd@gnu.org>
parents:
27028
diff
changeset
|
1849 /* Nothing to do. */ |
578 | 1850 } |
1851 | |
27430
1aa71680fe50
(toplevel): Include atimer.h.
Gerd Moellmann <gerd@gnu.org>
parents:
27028
diff
changeset
|
1852 |
578 | 1853 #if 0 /* This doesn't work; see the note before sigchld_handler. */ |
1854 #ifdef USG | |
1855 #ifdef SIGCHLD | |
1856 /* Mimic blocking of signals on system V, which doesn't really have it. */ | |
1857 | |
1858 /* Nonzero means we got a SIGCHLD when it was supposed to be blocked. */ | |
1859 int sigchld_deferred; | |
1860 | |
1861 SIGTYPE | |
1862 create_process_sigchld () | |
1863 { | |
1864 signal (SIGCHLD, create_process_sigchld); | |
1865 | |
1866 sigchld_deferred = 1; | |
1867 } | |
1868 #endif | |
1869 #endif | |
1870 #endif | |
1871 | |
20382
dbad9367d232
(create_process, deactivate_process, close_process_descs):
Andreas Schwab <schwab@suse.de>
parents:
20225
diff
changeset
|
1872 void |
1683
a0a41de51400
Give subprocess creation a way to find a valid current directory
Jim Blandy <jimb@redhat.com>
parents:
1655
diff
changeset
|
1873 create_process (process, new_argv, current_dir) |
578 | 1874 Lisp_Object process; |
1875 char **new_argv; | |
1683
a0a41de51400
Give subprocess creation a way to find a valid current directory
Jim Blandy <jimb@redhat.com>
parents:
1655
diff
changeset
|
1876 Lisp_Object current_dir; |
578 | 1877 { |
76494
f0a25b5d3ba0
(Fdelete_process): Properly handle deletion of first element of
Chong Yidong <cyd@stupidchicken.com>
parents:
76493
diff
changeset
|
1878 int inchannel, outchannel; |
f0a25b5d3ba0
(Fdelete_process): Properly handle deletion of first element of
Chong Yidong <cyd@stupidchicken.com>
parents:
76493
diff
changeset
|
1879 pid_t pid; |
578 | 1880 int sv[2]; |
80610
a6adb4611f10
(create_process) [!WINDOWSNT && FD_CLOEXEC]: Wait for
YAMAMOTO Mitsuharu <mituharu@math.s.chiba-u.ac.jp>
parents:
80225
diff
changeset
|
1881 #if !defined (WINDOWSNT) && defined (FD_CLOEXEC) |
a6adb4611f10
(create_process) [!WINDOWSNT && FD_CLOEXEC]: Wait for
YAMAMOTO Mitsuharu <mituharu@math.s.chiba-u.ac.jp>
parents:
80225
diff
changeset
|
1882 int wait_child_setup[2]; |
a6adb4611f10
(create_process) [!WINDOWSNT && FD_CLOEXEC]: Wait for
YAMAMOTO Mitsuharu <mituharu@math.s.chiba-u.ac.jp>
parents:
80225
diff
changeset
|
1883 #endif |
13709
d16f31ae8adf
(create_process): Use Posix signal handling to
Karl Heuer <kwzh@gnu.org>
parents:
13414
diff
changeset
|
1884 #ifdef POSIX_SIGNALS |
d16f31ae8adf
(create_process): Use Posix signal handling to
Karl Heuer <kwzh@gnu.org>
parents:
13414
diff
changeset
|
1885 sigset_t procmask; |
d16f31ae8adf
(create_process): Use Posix signal handling to
Karl Heuer <kwzh@gnu.org>
parents:
13414
diff
changeset
|
1886 sigset_t blocked; |
d16f31ae8adf
(create_process): Use Posix signal handling to
Karl Heuer <kwzh@gnu.org>
parents:
13414
diff
changeset
|
1887 struct sigaction sigint_action; |
d16f31ae8adf
(create_process): Use Posix signal handling to
Karl Heuer <kwzh@gnu.org>
parents:
13414
diff
changeset
|
1888 struct sigaction sigquit_action; |
d16f31ae8adf
(create_process): Use Posix signal handling to
Karl Heuer <kwzh@gnu.org>
parents:
13414
diff
changeset
|
1889 #ifdef AIX |
d16f31ae8adf
(create_process): Use Posix signal handling to
Karl Heuer <kwzh@gnu.org>
parents:
13414
diff
changeset
|
1890 struct sigaction sighup_action; |
d16f31ae8adf
(create_process): Use Posix signal handling to
Karl Heuer <kwzh@gnu.org>
parents:
13414
diff
changeset
|
1891 #endif |
d16f31ae8adf
(create_process): Use Posix signal handling to
Karl Heuer <kwzh@gnu.org>
parents:
13414
diff
changeset
|
1892 #else /* !POSIX_SIGNALS */ |
25770
3a44b5298cd5
(list_processes_1): Remove unused variables.
Gerd Moellmann <gerd@gnu.org>
parents:
25760
diff
changeset
|
1893 #if 0 |
578 | 1894 #ifdef SIGCHLD |
1895 SIGTYPE (*sigchld)(); | |
1896 #endif | |
25770
3a44b5298cd5
(list_processes_1): Remove unused variables.
Gerd Moellmann <gerd@gnu.org>
parents:
25760
diff
changeset
|
1897 #endif /* 0 */ |
13709
d16f31ae8adf
(create_process): Use Posix signal handling to
Karl Heuer <kwzh@gnu.org>
parents:
13414
diff
changeset
|
1898 #endif /* !POSIX_SIGNALS */ |
11926
40d7e6f04ebe
(create_process, send_process): Add volatile qualifiers.
Karl Heuer <kwzh@gnu.org>
parents:
11845
diff
changeset
|
1899 /* Use volatile to protect variables from being clobbered by longjmp. */ |
40d7e6f04ebe
(create_process, send_process): Add volatile qualifiers.
Karl Heuer <kwzh@gnu.org>
parents:
11845
diff
changeset
|
1900 volatile int forkin, forkout; |
40d7e6f04ebe
(create_process, send_process): Add volatile qualifiers.
Karl Heuer <kwzh@gnu.org>
parents:
11845
diff
changeset
|
1901 volatile int pty_flag = 0; |
31099
0fe5afca71e4
Include keyboard.h before frame.h.
Andrew Innes <andrewi@gnu.org>
parents:
30582
diff
changeset
|
1902 #ifndef USE_CRT_DLL |
578 | 1903 extern char **environ; |
31099
0fe5afca71e4
Include keyboard.h before frame.h.
Andrew Innes <andrewi@gnu.org>
parents:
30582
diff
changeset
|
1904 #endif |
578 | 1905 |
1906 inchannel = outchannel = -1; | |
1907 | |
1908 #ifdef HAVE_PTYS | |
7748
9a9c8372af80
(create_process): Get a pty for any non-nil Vprocess_connection_type value.
Richard M. Stallman <rms@gnu.org>
parents:
7605
diff
changeset
|
1909 if (!NILP (Vprocess_connection_type)) |
578 | 1910 outchannel = inchannel = allocate_pty (); |
1911 | |
1912 if (inchannel >= 0) | |
1913 { | |
46411
d17e7d2c1766
(create_process): Test USG_SUBTTY_WORKS.
Richard M. Stallman <rms@gnu.org>
parents:
46370
diff
changeset
|
1914 #if ! defined (USG) || defined (USG_SUBTTY_WORKS) |
d17e7d2c1766
(create_process): Test USG_SUBTTY_WORKS.
Richard M. Stallman <rms@gnu.org>
parents:
46370
diff
changeset
|
1915 /* On most USG systems it does not work to open the pty's tty here, |
d17e7d2c1766
(create_process): Test USG_SUBTTY_WORKS.
Richard M. Stallman <rms@gnu.org>
parents:
46370
diff
changeset
|
1916 then close it and reopen it in the child. */ |
578 | 1917 #ifdef O_NOCTTY |
1918 /* Don't let this terminal become our controlling terminal | |
1919 (in case we don't have one). */ | |
26088
b7aa6ac26872
Add support for large files, 64-bit Solaris, system locale codings.
Paul Eggert <eggert@twinsun.com>
parents:
26019
diff
changeset
|
1920 forkout = forkin = emacs_open (pty_name, O_RDWR | O_NOCTTY, 0); |
578 | 1921 #else |
26088
b7aa6ac26872
Add support for large files, 64-bit Solaris, system locale codings.
Paul Eggert <eggert@twinsun.com>
parents:
26019
diff
changeset
|
1922 forkout = forkin = emacs_open (pty_name, O_RDWR, 0); |
578 | 1923 #endif |
1924 if (forkin < 0) | |
1925 report_file_error ("Opening pty", Qnil); | |
1926 #else | |
1927 forkin = forkout = -1; | |
46411
d17e7d2c1766
(create_process): Test USG_SUBTTY_WORKS.
Richard M. Stallman <rms@gnu.org>
parents:
46370
diff
changeset
|
1928 #endif /* not USG, or USG_SUBTTY_WORKS */ |
578 | 1929 pty_flag = 1; |
1930 } | |
1931 else | |
1932 #endif /* HAVE_PTYS */ | |
1933 { | |
25129
4f3c8f1cec96
(create_process): Detect failure of `pipe'.
Karl Heuer <kwzh@gnu.org>
parents:
25009
diff
changeset
|
1934 int tem; |
4f3c8f1cec96
(create_process): Detect failure of `pipe'.
Karl Heuer <kwzh@gnu.org>
parents:
25009
diff
changeset
|
1935 tem = pipe (sv); |
4f3c8f1cec96
(create_process): Detect failure of `pipe'.
Karl Heuer <kwzh@gnu.org>
parents:
25009
diff
changeset
|
1936 if (tem < 0) |
4f3c8f1cec96
(create_process): Detect failure of `pipe'.
Karl Heuer <kwzh@gnu.org>
parents:
25009
diff
changeset
|
1937 report_file_error ("Creating pipe", Qnil); |
578 | 1938 inchannel = sv[0]; |
1939 forkout = sv[1]; | |
25129
4f3c8f1cec96
(create_process): Detect failure of `pipe'.
Karl Heuer <kwzh@gnu.org>
parents:
25009
diff
changeset
|
1940 tem = pipe (sv); |
4f3c8f1cec96
(create_process): Detect failure of `pipe'.
Karl Heuer <kwzh@gnu.org>
parents:
25009
diff
changeset
|
1941 if (tem < 0) |
4f3c8f1cec96
(create_process): Detect failure of `pipe'.
Karl Heuer <kwzh@gnu.org>
parents:
25009
diff
changeset
|
1942 { |
26088
b7aa6ac26872
Add support for large files, 64-bit Solaris, system locale codings.
Paul Eggert <eggert@twinsun.com>
parents:
26019
diff
changeset
|
1943 emacs_close (inchannel); |
b7aa6ac26872
Add support for large files, 64-bit Solaris, system locale codings.
Paul Eggert <eggert@twinsun.com>
parents:
26019
diff
changeset
|
1944 emacs_close (forkout); |
25129
4f3c8f1cec96
(create_process): Detect failure of `pipe'.
Karl Heuer <kwzh@gnu.org>
parents:
25009
diff
changeset
|
1945 report_file_error ("Creating pipe", Qnil); |
4f3c8f1cec96
(create_process): Detect failure of `pipe'.
Karl Heuer <kwzh@gnu.org>
parents:
25009
diff
changeset
|
1946 } |
578 | 1947 outchannel = sv[1]; |
1948 forkin = sv[0]; | |
1949 } | |
1950 | |
80610
a6adb4611f10
(create_process) [!WINDOWSNT && FD_CLOEXEC]: Wait for
YAMAMOTO Mitsuharu <mituharu@math.s.chiba-u.ac.jp>
parents:
80225
diff
changeset
|
1951 #if !defined (WINDOWSNT) && defined (FD_CLOEXEC) |
a6adb4611f10
(create_process) [!WINDOWSNT && FD_CLOEXEC]: Wait for
YAMAMOTO Mitsuharu <mituharu@math.s.chiba-u.ac.jp>
parents:
80225
diff
changeset
|
1952 { |
a6adb4611f10
(create_process) [!WINDOWSNT && FD_CLOEXEC]: Wait for
YAMAMOTO Mitsuharu <mituharu@math.s.chiba-u.ac.jp>
parents:
80225
diff
changeset
|
1953 int tem; |
a6adb4611f10
(create_process) [!WINDOWSNT && FD_CLOEXEC]: Wait for
YAMAMOTO Mitsuharu <mituharu@math.s.chiba-u.ac.jp>
parents:
80225
diff
changeset
|
1954 |
a6adb4611f10
(create_process) [!WINDOWSNT && FD_CLOEXEC]: Wait for
YAMAMOTO Mitsuharu <mituharu@math.s.chiba-u.ac.jp>
parents:
80225
diff
changeset
|
1955 tem = pipe (wait_child_setup); |
a6adb4611f10
(create_process) [!WINDOWSNT && FD_CLOEXEC]: Wait for
YAMAMOTO Mitsuharu <mituharu@math.s.chiba-u.ac.jp>
parents:
80225
diff
changeset
|
1956 if (tem < 0) |
a6adb4611f10
(create_process) [!WINDOWSNT && FD_CLOEXEC]: Wait for
YAMAMOTO Mitsuharu <mituharu@math.s.chiba-u.ac.jp>
parents:
80225
diff
changeset
|
1957 report_file_error ("Creating pipe", Qnil); |
a6adb4611f10
(create_process) [!WINDOWSNT && FD_CLOEXEC]: Wait for
YAMAMOTO Mitsuharu <mituharu@math.s.chiba-u.ac.jp>
parents:
80225
diff
changeset
|
1958 tem = fcntl (wait_child_setup[1], F_GETFD, 0); |
a6adb4611f10
(create_process) [!WINDOWSNT && FD_CLOEXEC]: Wait for
YAMAMOTO Mitsuharu <mituharu@math.s.chiba-u.ac.jp>
parents:
80225
diff
changeset
|
1959 if (tem >= 0) |
a6adb4611f10
(create_process) [!WINDOWSNT && FD_CLOEXEC]: Wait for
YAMAMOTO Mitsuharu <mituharu@math.s.chiba-u.ac.jp>
parents:
80225
diff
changeset
|
1960 tem = fcntl (wait_child_setup[1], F_SETFD, tem | FD_CLOEXEC); |
a6adb4611f10
(create_process) [!WINDOWSNT && FD_CLOEXEC]: Wait for
YAMAMOTO Mitsuharu <mituharu@math.s.chiba-u.ac.jp>
parents:
80225
diff
changeset
|
1961 if (tem < 0) |
a6adb4611f10
(create_process) [!WINDOWSNT && FD_CLOEXEC]: Wait for
YAMAMOTO Mitsuharu <mituharu@math.s.chiba-u.ac.jp>
parents:
80225
diff
changeset
|
1962 { |
a6adb4611f10
(create_process) [!WINDOWSNT && FD_CLOEXEC]: Wait for
YAMAMOTO Mitsuharu <mituharu@math.s.chiba-u.ac.jp>
parents:
80225
diff
changeset
|
1963 emacs_close (wait_child_setup[0]); |
a6adb4611f10
(create_process) [!WINDOWSNT && FD_CLOEXEC]: Wait for
YAMAMOTO Mitsuharu <mituharu@math.s.chiba-u.ac.jp>
parents:
80225
diff
changeset
|
1964 emacs_close (wait_child_setup[1]); |
a6adb4611f10
(create_process) [!WINDOWSNT && FD_CLOEXEC]: Wait for
YAMAMOTO Mitsuharu <mituharu@math.s.chiba-u.ac.jp>
parents:
80225
diff
changeset
|
1965 report_file_error ("Setting file descriptor flags", Qnil); |
a6adb4611f10
(create_process) [!WINDOWSNT && FD_CLOEXEC]: Wait for
YAMAMOTO Mitsuharu <mituharu@math.s.chiba-u.ac.jp>
parents:
80225
diff
changeset
|
1966 } |
a6adb4611f10
(create_process) [!WINDOWSNT && FD_CLOEXEC]: Wait for
YAMAMOTO Mitsuharu <mituharu@math.s.chiba-u.ac.jp>
parents:
80225
diff
changeset
|
1967 } |
a6adb4611f10
(create_process) [!WINDOWSNT && FD_CLOEXEC]: Wait for
YAMAMOTO Mitsuharu <mituharu@math.s.chiba-u.ac.jp>
parents:
80225
diff
changeset
|
1968 #endif |
a6adb4611f10
(create_process) [!WINDOWSNT && FD_CLOEXEC]: Wait for
YAMAMOTO Mitsuharu <mituharu@math.s.chiba-u.ac.jp>
parents:
80225
diff
changeset
|
1969 |
578 | 1970 #if 0 |
1971 /* Replaced by close_process_descs */ | |
1972 set_exclusive_use (inchannel); | |
1973 set_exclusive_use (outchannel); | |
1974 #endif | |
1975 | |
1976 #ifdef O_NONBLOCK | |
1977 fcntl (inchannel, F_SETFL, O_NONBLOCK); | |
14405
4aa693528ee3
(create_process): Set outchannel to be non-blocking.
Richard M. Stallman <rms@gnu.org>
parents:
14404
diff
changeset
|
1978 fcntl (outchannel, F_SETFL, O_NONBLOCK); |
578 | 1979 #else |
1980 #ifdef O_NDELAY | |
1981 fcntl (inchannel, F_SETFL, O_NDELAY); | |
14405
4aa693528ee3
(create_process): Set outchannel to be non-blocking.
Richard M. Stallman <rms@gnu.org>
parents:
14404
diff
changeset
|
1982 fcntl (outchannel, F_SETFL, O_NDELAY); |
578 | 1983 #endif |
1984 #endif | |
1985 | |
1986 /* Record this as an active process, with its channels. | |
1987 As a result, child_setup will close Emacs's side of the pipes. */ | |
1988 chan_process[inchannel] = process; | |
81826
077a1e6fd3f2
(struct Lisp_Process): Turn slots infd, outfd, kill_without_query, pty_flag,
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
80984
diff
changeset
|
1989 XPROCESS (process)->infd = inchannel; |
077a1e6fd3f2
(struct Lisp_Process): Turn slots infd, outfd, kill_without_query, pty_flag,
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
80984
diff
changeset
|
1990 XPROCESS (process)->outfd = outchannel; |
49903
6dc5bfe9589b
Removed subtty, workaround for when TIOCSIGSEND fails.
Jan Djärv <jan.h.d@swipnet.se>
parents:
49894
diff
changeset
|
1991 |
6dc5bfe9589b
Removed subtty, workaround for when TIOCSIGSEND fails.
Jan Djärv <jan.h.d@swipnet.se>
parents:
49894
diff
changeset
|
1992 /* Previously we recorded the tty descriptor used in the subprocess. |
6dc5bfe9589b
Removed subtty, workaround for when TIOCSIGSEND fails.
Jan Djärv <jan.h.d@swipnet.se>
parents:
49894
diff
changeset
|
1993 It was only used for getting the foreground tty process, so now |
6dc5bfe9589b
Removed subtty, workaround for when TIOCSIGSEND fails.
Jan Djärv <jan.h.d@swipnet.se>
parents:
49894
diff
changeset
|
1994 we just reopen the device (see emacs_get_tty_pgrp) as this is |
6dc5bfe9589b
Removed subtty, workaround for when TIOCSIGSEND fails.
Jan Djärv <jan.h.d@swipnet.se>
parents:
49894
diff
changeset
|
1995 more portable (see USG_SUBTTY_WORKS above). */ |
6dc5bfe9589b
Removed subtty, workaround for when TIOCSIGSEND fails.
Jan Djärv <jan.h.d@swipnet.se>
parents:
49894
diff
changeset
|
1996 |
81826
077a1e6fd3f2
(struct Lisp_Process): Turn slots infd, outfd, kill_without_query, pty_flag,
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
80984
diff
changeset
|
1997 XPROCESS (process)->pty_flag = pty_flag; |
578 | 1998 XPROCESS (process)->status = Qrun; |
49667
cbec1327e2f1
(QCfilter_multibyte): New variable.
Kenichi Handa <handa@m17n.org>
parents:
49600
diff
changeset
|
1999 setup_process_coding_systems (process); |
578 | 2000 |
2001 /* Delay interrupts until we have a chance to store | |
2002 the new fork's pid in its process structure */ | |
13709
d16f31ae8adf
(create_process): Use Posix signal handling to
Karl Heuer <kwzh@gnu.org>
parents:
13414
diff
changeset
|
2003 #ifdef POSIX_SIGNALS |
d16f31ae8adf
(create_process): Use Posix signal handling to
Karl Heuer <kwzh@gnu.org>
parents:
13414
diff
changeset
|
2004 sigemptyset (&blocked); |
d16f31ae8adf
(create_process): Use Posix signal handling to
Karl Heuer <kwzh@gnu.org>
parents:
13414
diff
changeset
|
2005 #ifdef SIGCHLD |
d16f31ae8adf
(create_process): Use Posix signal handling to
Karl Heuer <kwzh@gnu.org>
parents:
13414
diff
changeset
|
2006 sigaddset (&blocked, SIGCHLD); |
d16f31ae8adf
(create_process): Use Posix signal handling to
Karl Heuer <kwzh@gnu.org>
parents:
13414
diff
changeset
|
2007 #endif |
41856
0028402ed7d1
(create_process): Use HAVE_WORKING_VFORK, not HAVE_VFORK.
Paul Eggert <eggert@twinsun.com>
parents:
40656
diff
changeset
|
2008 #ifdef HAVE_WORKING_VFORK |
13709
d16f31ae8adf
(create_process): Use Posix signal handling to
Karl Heuer <kwzh@gnu.org>
parents:
13414
diff
changeset
|
2009 /* On many hosts (e.g. Solaris 2.4), if a vforked child calls `signal', |
d16f31ae8adf
(create_process): Use Posix signal handling to
Karl Heuer <kwzh@gnu.org>
parents:
13414
diff
changeset
|
2010 this sets the parent's signal handlers as well as the child's. |
d16f31ae8adf
(create_process): Use Posix signal handling to
Karl Heuer <kwzh@gnu.org>
parents:
13414
diff
changeset
|
2011 So delay all interrupts whose handlers the child might munge, |
d16f31ae8adf
(create_process): Use Posix signal handling to
Karl Heuer <kwzh@gnu.org>
parents:
13414
diff
changeset
|
2012 and record the current handlers so they can be restored later. */ |
d16f31ae8adf
(create_process): Use Posix signal handling to
Karl Heuer <kwzh@gnu.org>
parents:
13414
diff
changeset
|
2013 sigaddset (&blocked, SIGINT ); sigaction (SIGINT , 0, &sigint_action ); |
d16f31ae8adf
(create_process): Use Posix signal handling to
Karl Heuer <kwzh@gnu.org>
parents:
13414
diff
changeset
|
2014 sigaddset (&blocked, SIGQUIT); sigaction (SIGQUIT, 0, &sigquit_action); |
d16f31ae8adf
(create_process): Use Posix signal handling to
Karl Heuer <kwzh@gnu.org>
parents:
13414
diff
changeset
|
2015 #ifdef AIX |
d16f31ae8adf
(create_process): Use Posix signal handling to
Karl Heuer <kwzh@gnu.org>
parents:
13414
diff
changeset
|
2016 sigaddset (&blocked, SIGHUP ); sigaction (SIGHUP , 0, &sighup_action ); |
d16f31ae8adf
(create_process): Use Posix signal handling to
Karl Heuer <kwzh@gnu.org>
parents:
13414
diff
changeset
|
2017 #endif |
41856
0028402ed7d1
(create_process): Use HAVE_WORKING_VFORK, not HAVE_VFORK.
Paul Eggert <eggert@twinsun.com>
parents:
40656
diff
changeset
|
2018 #endif /* HAVE_WORKING_VFORK */ |
13709
d16f31ae8adf
(create_process): Use Posix signal handling to
Karl Heuer <kwzh@gnu.org>
parents:
13414
diff
changeset
|
2019 sigprocmask (SIG_BLOCK, &blocked, &procmask); |
d16f31ae8adf
(create_process): Use Posix signal handling to
Karl Heuer <kwzh@gnu.org>
parents:
13414
diff
changeset
|
2020 #else /* !POSIX_SIGNALS */ |
578 | 2021 #ifdef SIGCHLD |
87730 | 2022 #if defined (BSD_SYSTEM) || defined (HPUX) |
578 | 2023 sigsetmask (sigmask (SIGCHLD)); |
2024 #else /* ordinary USG */ | |
2025 #if 0 | |
2026 sigchld_deferred = 0; | |
2027 sigchld = signal (SIGCHLD, create_process_sigchld); | |
2028 #endif | |
2029 #endif /* ordinary USG */ | |
2030 #endif /* SIGCHLD */ | |
13709
d16f31ae8adf
(create_process): Use Posix signal handling to
Karl Heuer <kwzh@gnu.org>
parents:
13414
diff
changeset
|
2031 #endif /* !POSIX_SIGNALS */ |
578 | 2032 |
7893
e54617027a47
(create_process): Set input_wait_mask before forking.
Karl Heuer <kwzh@gnu.org>
parents:
7884
diff
changeset
|
2033 FD_SET (inchannel, &input_wait_mask); |
9686
cd788aa8cb2a
Handle multiple keyboard input descriptors.
Richard M. Stallman <rms@gnu.org>
parents:
9334
diff
changeset
|
2034 FD_SET (inchannel, &non_keyboard_wait_mask); |
7893
e54617027a47
(create_process): Set input_wait_mask before forking.
Karl Heuer <kwzh@gnu.org>
parents:
7884
diff
changeset
|
2035 if (inchannel > max_process_desc) |
e54617027a47
(create_process): Set input_wait_mask before forking.
Karl Heuer <kwzh@gnu.org>
parents:
7884
diff
changeset
|
2036 max_process_desc = inchannel; |
e54617027a47
(create_process): Set input_wait_mask before forking.
Karl Heuer <kwzh@gnu.org>
parents:
7884
diff
changeset
|
2037 |
578 | 2038 /* Until we store the proper pid, enable sigchld_handler |
2039 to recognize an unknown pid as standing for this process. | |
2040 It is very important not to let this `marker' value stay | |
2041 in the table after this function has returned; if it does | |
2042 it might cause call-process to hang and subsequent asynchronous | |
2043 processes to get their return values scrambled. */ | |
69873
2d844bbbccd4
* process.h (struct Lisp_Process): Replace Lisp_Objects `pid',
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
69634
diff
changeset
|
2044 XPROCESS (process)->pid = -1; |
578 | 2045 |
16780 | 2046 BLOCK_INPUT; |
49600
23a1cea22d13
Trailing whitespace deleted.
Juanma Barranquero <lekktu@gmail.com>
parents:
49281
diff
changeset
|
2047 |
578 | 2048 { |
2049 /* child_setup must clobber environ on systems with true vfork. | |
2050 Protect it from permanent change. */ | |
2051 char **save_environ = environ; | |
2052 | |
21049
01e626b0a624
(Vdefault_file_name_coding_system): Extern it.
Kenichi Handa <handa@m17n.org>
parents:
20715
diff
changeset
|
2053 current_dir = ENCODE_FILE (current_dir); |
19837
3bee81323f73
(create_process): Encode the new current dir.
Richard M. Stallman <rms@gnu.org>
parents:
19642
diff
changeset
|
2054 |
9793
28267fcc61be
Use macros IS_ANY_SEP, IS_DIRECTORY_SEP,
Richard M. Stallman <rms@gnu.org>
parents:
9705
diff
changeset
|
2055 #ifndef WINDOWSNT |
578 | 2056 pid = vfork (); |
2057 if (pid == 0) | |
9793
28267fcc61be
Use macros IS_ANY_SEP, IS_DIRECTORY_SEP,
Richard M. Stallman <rms@gnu.org>
parents:
9705
diff
changeset
|
2058 #endif /* not WINDOWSNT */ |
578 | 2059 { |
2060 int xforkin = forkin; | |
2061 int xforkout = forkout; | |
2062 | |
2063 #if 0 /* This was probably a mistake--it duplicates code later on, | |
2064 but fails to handle all the cases. */ | |
2065 /* Make sure SIGCHLD is not blocked in the child. */ | |
2066 sigsetmask (SIGEMPTYMASK); | |
2067 #endif | |
2068 | |
2069 /* Make the pty be the controlling terminal of the process. */ | |
2070 #ifdef HAVE_PTYS | |
2071 /* First, disconnect its current controlling terminal. */ | |
2072 #ifdef HAVE_SETSID | |
7266
f87808bd90e9
(create_process): Undo April 19 setsid change.
Richard M. Stallman <rms@gnu.org>
parents:
7238
diff
changeset
|
2073 /* We tried doing setsid only if pty_flag, but it caused |
f87808bd90e9
(create_process): Undo April 19 setsid change.
Richard M. Stallman <rms@gnu.org>
parents:
7238
diff
changeset
|
2074 process_set_signal to fail on SGI when using a pipe. */ |
f87808bd90e9
(create_process): Undo April 19 setsid change.
Richard M. Stallman <rms@gnu.org>
parents:
7238
diff
changeset
|
2075 setsid (); |
1030
9934251d8219
(WCOREDUMP): Define only if not defined.
Richard M. Stallman <rms@gnu.org>
parents:
1012
diff
changeset
|
2076 /* Make the pty's terminal the controlling terminal. */ |
3023
cfd999700613
(create_process): Ignore retval from TIOCSTTY.
Richard M. Stallman <rms@gnu.org>
parents:
2961
diff
changeset
|
2077 if (pty_flag) |
6975
b7411e378b65
(create_process): Call setsid only if pty_flag.
Richard M. Stallman <rms@gnu.org>
parents:
6947
diff
changeset
|
2078 { |
b7411e378b65
(create_process): Call setsid only if pty_flag.
Richard M. Stallman <rms@gnu.org>
parents:
6947
diff
changeset
|
2079 #ifdef TIOCSCTTY |
b7411e378b65
(create_process): Call setsid only if pty_flag.
Richard M. Stallman <rms@gnu.org>
parents:
6947
diff
changeset
|
2080 /* We ignore the return value |
b7411e378b65
(create_process): Call setsid only if pty_flag.
Richard M. Stallman <rms@gnu.org>
parents:
6947
diff
changeset
|
2081 because faith@cs.unc.edu says that is necessary on Linux. */ |
b7411e378b65
(create_process): Call setsid only if pty_flag.
Richard M. Stallman <rms@gnu.org>
parents:
6947
diff
changeset
|
2082 ioctl (xforkin, TIOCSCTTY, 0); |
1030
9934251d8219
(WCOREDUMP): Define only if not defined.
Richard M. Stallman <rms@gnu.org>
parents:
1012
diff
changeset
|
2083 #endif |
6975
b7411e378b65
(create_process): Call setsid only if pty_flag.
Richard M. Stallman <rms@gnu.org>
parents:
6947
diff
changeset
|
2084 } |
578 | 2085 #else /* not HAVE_SETSID */ |
5181
31874690939f
(create_process): Do setpgrp for USG regardless of IRIX.
Richard M. Stallman <rms@gnu.org>
parents:
5161
diff
changeset
|
2086 #ifdef USG |
5347
21bffe027a7d
(create_process) [NTTYDISC]: Set the tty line discipline.
Richard M. Stallman <rms@gnu.org>
parents:
5332
diff
changeset
|
2087 /* It's very important to call setpgrp here and no time |
578 | 2088 afterwards. Otherwise, we lose our controlling tty which |
2089 is set when we open the pty. */ | |
2090 setpgrp (); | |
2091 #endif /* USG */ | |
2092 #endif /* not HAVE_SETSID */ | |
7116
d35b11eed89f
(create_process) [HAVE_TERMIOS && LDISC1]: Use tcsetattr.
Karl Heuer <kwzh@gnu.org>
parents:
7059
diff
changeset
|
2093 #if defined (HAVE_TERMIOS) && defined (LDISC1) |
d35b11eed89f
(create_process) [HAVE_TERMIOS && LDISC1]: Use tcsetattr.
Karl Heuer <kwzh@gnu.org>
parents:
7059
diff
changeset
|
2094 if (pty_flag && xforkin >= 0) |
d35b11eed89f
(create_process) [HAVE_TERMIOS && LDISC1]: Use tcsetattr.
Karl Heuer <kwzh@gnu.org>
parents:
7059
diff
changeset
|
2095 { |
d35b11eed89f
(create_process) [HAVE_TERMIOS && LDISC1]: Use tcsetattr.
Karl Heuer <kwzh@gnu.org>
parents:
7059
diff
changeset
|
2096 struct termios t; |
d35b11eed89f
(create_process) [HAVE_TERMIOS && LDISC1]: Use tcsetattr.
Karl Heuer <kwzh@gnu.org>
parents:
7059
diff
changeset
|
2097 tcgetattr (xforkin, &t); |
d35b11eed89f
(create_process) [HAVE_TERMIOS && LDISC1]: Use tcsetattr.
Karl Heuer <kwzh@gnu.org>
parents:
7059
diff
changeset
|
2098 t.c_lflag = LDISC1; |
d35b11eed89f
(create_process) [HAVE_TERMIOS && LDISC1]: Use tcsetattr.
Karl Heuer <kwzh@gnu.org>
parents:
7059
diff
changeset
|
2099 if (tcsetattr (xforkin, TCSANOW, &t) < 0) |
26088
b7aa6ac26872
Add support for large files, 64-bit Solaris, system locale codings.
Paul Eggert <eggert@twinsun.com>
parents:
26019
diff
changeset
|
2100 emacs_write (1, "create_process/tcsetattr LDISC1 failed\n", 39); |
7116
d35b11eed89f
(create_process) [HAVE_TERMIOS && LDISC1]: Use tcsetattr.
Karl Heuer <kwzh@gnu.org>
parents:
7059
diff
changeset
|
2101 } |
d35b11eed89f
(create_process) [HAVE_TERMIOS && LDISC1]: Use tcsetattr.
Karl Heuer <kwzh@gnu.org>
parents:
7059
diff
changeset
|
2102 #else |
6947
c5f990fad6bb
(create_process): Fix previous change.
Richard M. Stallman <rms@gnu.org>
parents:
6928
diff
changeset
|
2103 #if defined (NTTYDISC) && defined (TIOCSETD) |
6393
7de1d288460e
(create_process): Skip the ioctl if fd is -1.
Karl Heuer <kwzh@gnu.org>
parents:
6390
diff
changeset
|
2104 if (pty_flag && xforkin >= 0) |
5548
36d2fd17f833
(create_process): Set line discipline only if pty_flag.
Richard M. Stallman <rms@gnu.org>
parents:
5543
diff
changeset
|
2105 { |
36d2fd17f833
(create_process): Set line discipline only if pty_flag.
Richard M. Stallman <rms@gnu.org>
parents:
5543
diff
changeset
|
2106 /* Use new line discipline. */ |
36d2fd17f833
(create_process): Set line discipline only if pty_flag.
Richard M. Stallman <rms@gnu.org>
parents:
5543
diff
changeset
|
2107 int ldisc = NTTYDISC; |
7605
53186c2698e5
(create_process): Don't complain about error from TIOCSETD.
Richard M. Stallman <rms@gnu.org>
parents:
7486
diff
changeset
|
2108 ioctl (xforkin, TIOCSETD, &ldisc); |
5548
36d2fd17f833
(create_process): Set line discipline only if pty_flag.
Richard M. Stallman <rms@gnu.org>
parents:
5543
diff
changeset
|
2109 } |
5347
21bffe027a7d
(create_process) [NTTYDISC]: Set the tty line discipline.
Richard M. Stallman <rms@gnu.org>
parents:
5332
diff
changeset
|
2110 #endif |
7116
d35b11eed89f
(create_process) [HAVE_TERMIOS && LDISC1]: Use tcsetattr.
Karl Heuer <kwzh@gnu.org>
parents:
7059
diff
changeset
|
2111 #endif |
49600
23a1cea22d13
Trailing whitespace deleted.
Juanma Barranquero <lekktu@gmail.com>
parents:
49281
diff
changeset
|
2112 #ifdef TIOCNOTTY |
578 | 2113 /* In 4.3BSD, the TIOCSPGRP bug has been fixed, and now you |
2114 can do TIOCSPGRP only to the process's controlling tty. */ | |
2115 if (pty_flag) | |
2116 { | |
49600
23a1cea22d13
Trailing whitespace deleted.
Juanma Barranquero <lekktu@gmail.com>
parents:
49281
diff
changeset
|
2117 /* I wonder: would just ioctl (0, TIOCNOTTY, 0) work here? |
578 | 2118 I can't test it since I don't have 4.3. */ |
26088
b7aa6ac26872
Add support for large files, 64-bit Solaris, system locale codings.
Paul Eggert <eggert@twinsun.com>
parents:
26019
diff
changeset
|
2119 int j = emacs_open ("/dev/tty", O_RDWR, 0); |
578 | 2120 ioctl (j, TIOCNOTTY, 0); |
26088
b7aa6ac26872
Add support for large files, 64-bit Solaris, system locale codings.
Paul Eggert <eggert@twinsun.com>
parents:
26019
diff
changeset
|
2121 emacs_close (j); |
3826
647bef18618f
Changes for Irix 4.0, tested this time:
Jim Blandy <jimb@redhat.com>
parents:
3810
diff
changeset
|
2122 #ifndef USG |
578 | 2123 /* In order to get a controlling terminal on some versions |
2124 of BSD, it is necessary to put the process in pgrp 0 | |
2125 before it opens the terminal. */ | |
16127
8d6d35b486c0
(create_process): Test HAVE_SETPGID for using setpgid.
Richard M. Stallman <rms@gnu.org>
parents:
16116
diff
changeset
|
2126 #ifdef HAVE_SETPGID |
9882
ccc5562a7194
(create_process) [OSF1]: Use setpgid, not setpgrp.
Richard M. Stallman <rms@gnu.org>
parents:
9793
diff
changeset
|
2127 setpgid (0, 0); |
ccc5562a7194
(create_process) [OSF1]: Use setpgid, not setpgrp.
Richard M. Stallman <rms@gnu.org>
parents:
9793
diff
changeset
|
2128 #else |
578 | 2129 setpgrp (0, 0); |
2130 #endif | |
9882
ccc5562a7194
(create_process) [OSF1]: Use setpgid, not setpgrp.
Richard M. Stallman <rms@gnu.org>
parents:
9793
diff
changeset
|
2131 #endif |
578 | 2132 } |
2133 #endif /* TIOCNOTTY */ | |
2134 | |
87730 | 2135 #if !defined (DONT_REOPEN_PTY) |
578 | 2136 /*** There is a suggestion that this ought to be a |
16076
5d1e0290bbd0
(create_process): Undo previous change.
Richard M. Stallman <rms@gnu.org>
parents:
16058
diff
changeset
|
2137 conditional on TIOCSPGRP, |
5d1e0290bbd0
(create_process): Undo previous change.
Richard M. Stallman <rms@gnu.org>
parents:
16058
diff
changeset
|
2138 or !(defined (HAVE_SETSID) && defined (TIOCSCTTY)). |
5d1e0290bbd0
(create_process): Undo previous change.
Richard M. Stallman <rms@gnu.org>
parents:
16058
diff
changeset
|
2139 Trying the latter gave the wrong results on Debian GNU/Linux 1.1; |
5d1e0290bbd0
(create_process): Undo previous change.
Richard M. Stallman <rms@gnu.org>
parents:
16058
diff
changeset
|
2140 that system does seem to need this code, even though |
5d1e0290bbd0
(create_process): Undo previous change.
Richard M. Stallman <rms@gnu.org>
parents:
16058
diff
changeset
|
2141 both HAVE_SETSID and TIOCSCTTY are defined. */ |
578 | 2142 /* Now close the pty (if we had it open) and reopen it. |
2143 This makes the pty the controlling terminal of the subprocess. */ | |
2144 if (pty_flag) | |
2145 { | |
5240
eed870591987
(Fprocess_status): Use get_process, not Fget_process.
Richard M. Stallman <rms@gnu.org>
parents:
5239
diff
changeset
|
2146 |
26088
b7aa6ac26872
Add support for large files, 64-bit Solaris, system locale codings.
Paul Eggert <eggert@twinsun.com>
parents:
26019
diff
changeset
|
2147 /* I wonder if emacs_close (emacs_open (pty_name, ...)) |
b7aa6ac26872
Add support for large files, 64-bit Solaris, system locale codings.
Paul Eggert <eggert@twinsun.com>
parents:
26019
diff
changeset
|
2148 would work? */ |
578 | 2149 if (xforkin >= 0) |
26088
b7aa6ac26872
Add support for large files, 64-bit Solaris, system locale codings.
Paul Eggert <eggert@twinsun.com>
parents:
26019
diff
changeset
|
2150 emacs_close (xforkin); |
b7aa6ac26872
Add support for large files, 64-bit Solaris, system locale codings.
Paul Eggert <eggert@twinsun.com>
parents:
26019
diff
changeset
|
2151 xforkout = xforkin = emacs_open (pty_name, O_RDWR, 0); |
578 | 2152 |
11514
321726163a65
(create_process): Don't abort if can't reopen
Richard M. Stallman <rms@gnu.org>
parents:
11376
diff
changeset
|
2153 if (xforkin < 0) |
321726163a65
(create_process): Don't abort if can't reopen
Richard M. Stallman <rms@gnu.org>
parents:
11376
diff
changeset
|
2154 { |
26088
b7aa6ac26872
Add support for large files, 64-bit Solaris, system locale codings.
Paul Eggert <eggert@twinsun.com>
parents:
26019
diff
changeset
|
2155 emacs_write (1, "Couldn't open the pty terminal ", 31); |
b7aa6ac26872
Add support for large files, 64-bit Solaris, system locale codings.
Paul Eggert <eggert@twinsun.com>
parents:
26019
diff
changeset
|
2156 emacs_write (1, pty_name, strlen (pty_name)); |
b7aa6ac26872
Add support for large files, 64-bit Solaris, system locale codings.
Paul Eggert <eggert@twinsun.com>
parents:
26019
diff
changeset
|
2157 emacs_write (1, "\n", 1); |
11514
321726163a65
(create_process): Don't abort if can't reopen
Richard M. Stallman <rms@gnu.org>
parents:
11376
diff
changeset
|
2158 _exit (1); |
321726163a65
(create_process): Don't abort if can't reopen
Richard M. Stallman <rms@gnu.org>
parents:
11376
diff
changeset
|
2159 } |
321726163a65
(create_process): Don't abort if can't reopen
Richard M. Stallman <rms@gnu.org>
parents:
11376
diff
changeset
|
2160 |
578 | 2161 } |
87730 | 2162 #endif /* not DONT_REOPEN_PTY */ |
15368
6229fb866493
(create_process): Add DONT_OPEN_PTY conditional.
Richard M. Stallman <rms@gnu.org>
parents:
15355
diff
changeset
|
2163 |
578 | 2164 #ifdef SETUP_SLAVE_PTY |
7058
1855e568a9b8
(create_process): Use SETUP_SLAVE_PTY only if pty_flag.
Richard M. Stallman <rms@gnu.org>
parents:
7044
diff
changeset
|
2165 if (pty_flag) |
1855e568a9b8
(create_process): Use SETUP_SLAVE_PTY only if pty_flag.
Richard M. Stallman <rms@gnu.org>
parents:
7044
diff
changeset
|
2166 { |
1855e568a9b8
(create_process): Use SETUP_SLAVE_PTY only if pty_flag.
Richard M. Stallman <rms@gnu.org>
parents:
7044
diff
changeset
|
2167 SETUP_SLAVE_PTY; |
1855e568a9b8
(create_process): Use SETUP_SLAVE_PTY only if pty_flag.
Richard M. Stallman <rms@gnu.org>
parents:
7044
diff
changeset
|
2168 } |
578 | 2169 #endif /* SETUP_SLAVE_PTY */ |
2170 #ifdef AIX | |
2171 /* On AIX, we've disabled SIGHUP above once we start a child on a pty. | |
2172 Now reenable it in the child, so it will die when we want it to. */ | |
2173 if (pty_flag) | |
2174 signal (SIGHUP, SIG_DFL); | |
2175 #endif | |
2176 #endif /* HAVE_PTYS */ | |
2177 | |
13709
d16f31ae8adf
(create_process): Use Posix signal handling to
Karl Heuer <kwzh@gnu.org>
parents:
13414
diff
changeset
|
2178 signal (SIGINT, SIG_DFL); |
d16f31ae8adf
(create_process): Use Posix signal handling to
Karl Heuer <kwzh@gnu.org>
parents:
13414
diff
changeset
|
2179 signal (SIGQUIT, SIG_DFL); |
d16f31ae8adf
(create_process): Use Posix signal handling to
Karl Heuer <kwzh@gnu.org>
parents:
13414
diff
changeset
|
2180 |
d16f31ae8adf
(create_process): Use Posix signal handling to
Karl Heuer <kwzh@gnu.org>
parents:
13414
diff
changeset
|
2181 /* Stop blocking signals in the child. */ |
d16f31ae8adf
(create_process): Use Posix signal handling to
Karl Heuer <kwzh@gnu.org>
parents:
13414
diff
changeset
|
2182 #ifdef POSIX_SIGNALS |
d16f31ae8adf
(create_process): Use Posix signal handling to
Karl Heuer <kwzh@gnu.org>
parents:
13414
diff
changeset
|
2183 sigprocmask (SIG_SETMASK, &procmask, 0); |
d16f31ae8adf
(create_process): Use Posix signal handling to
Karl Heuer <kwzh@gnu.org>
parents:
13414
diff
changeset
|
2184 #else /* !POSIX_SIGNALS */ |
578 | 2185 #ifdef SIGCHLD |
87730 | 2186 #if defined (BSD_SYSTEM) || defined (HPUX) |
578 | 2187 sigsetmask (SIGEMPTYMASK); |
2188 #else /* ordinary USG */ | |
1207
af619d68a576
* process.c [SIGCHLD && !BSD && !UNIPLUS && !HPUX]
Jim Blandy <jimb@redhat.com>
parents:
1180
diff
changeset
|
2189 #if 0 |
578 | 2190 signal (SIGCHLD, sigchld); |
1207
af619d68a576
* process.c [SIGCHLD && !BSD && !UNIPLUS && !HPUX]
Jim Blandy <jimb@redhat.com>
parents:
1180
diff
changeset
|
2191 #endif |
578 | 2192 #endif /* ordinary USG */ |
2193 #endif /* SIGCHLD */ | |
13709
d16f31ae8adf
(create_process): Use Posix signal handling to
Karl Heuer <kwzh@gnu.org>
parents:
13414
diff
changeset
|
2194 #endif /* !POSIX_SIGNALS */ |
8390
ee13e8728666
(create_process): Set default handling for SIGINT, etc.
Richard M. Stallman <rms@gnu.org>
parents:
8354
diff
changeset
|
2195 |
7059
6a55de48ade5
(create_process): Use child_setup_tty only if pty_flag.
Richard M. Stallman <rms@gnu.org>
parents:
7058
diff
changeset
|
2196 if (pty_flag) |
6a55de48ade5
(create_process): Use child_setup_tty only if pty_flag.
Richard M. Stallman <rms@gnu.org>
parents:
7058
diff
changeset
|
2197 child_setup_tty (xforkout); |
9793
28267fcc61be
Use macros IS_ANY_SEP, IS_DIRECTORY_SEP,
Richard M. Stallman <rms@gnu.org>
parents:
9705
diff
changeset
|
2198 #ifdef WINDOWSNT |
28267fcc61be
Use macros IS_ANY_SEP, IS_DIRECTORY_SEP,
Richard M. Stallman <rms@gnu.org>
parents:
9705
diff
changeset
|
2199 pid = child_setup (xforkin, xforkout, xforkout, |
28267fcc61be
Use macros IS_ANY_SEP, IS_DIRECTORY_SEP,
Richard M. Stallman <rms@gnu.org>
parents:
9705
diff
changeset
|
2200 new_argv, 1, current_dir); |
49600
23a1cea22d13
Trailing whitespace deleted.
Juanma Barranquero <lekktu@gmail.com>
parents:
49281
diff
changeset
|
2201 #else /* not WINDOWSNT */ |
80610
a6adb4611f10
(create_process) [!WINDOWSNT && FD_CLOEXEC]: Wait for
YAMAMOTO Mitsuharu <mituharu@math.s.chiba-u.ac.jp>
parents:
80225
diff
changeset
|
2202 #ifdef FD_CLOEXEC |
a6adb4611f10
(create_process) [!WINDOWSNT && FD_CLOEXEC]: Wait for
YAMAMOTO Mitsuharu <mituharu@math.s.chiba-u.ac.jp>
parents:
80225
diff
changeset
|
2203 emacs_close (wait_child_setup[0]); |
a6adb4611f10
(create_process) [!WINDOWSNT && FD_CLOEXEC]: Wait for
YAMAMOTO Mitsuharu <mituharu@math.s.chiba-u.ac.jp>
parents:
80225
diff
changeset
|
2204 #endif |
578 | 2205 child_setup (xforkin, xforkout, xforkout, |
638 | 2206 new_argv, 1, current_dir); |
9793
28267fcc61be
Use macros IS_ANY_SEP, IS_DIRECTORY_SEP,
Richard M. Stallman <rms@gnu.org>
parents:
9705
diff
changeset
|
2207 #endif /* not WINDOWSNT */ |
578 | 2208 } |
2209 environ = save_environ; | |
2210 } | |
2211 | |
16780 | 2212 UNBLOCK_INPUT; |
2213 | |
14131
7717b68abd2e
(create_process): Restore the signal state
Karl Heuer <kwzh@gnu.org>
parents:
14085
diff
changeset
|
2214 /* This runs in the Emacs process. */ |
578 | 2215 if (pid < 0) |
7157
3f4fc9d682b4
(create_process): If vfork fails, close forkin and forkout.
Richard M. Stallman <rms@gnu.org>
parents:
7116
diff
changeset
|
2216 { |
3f4fc9d682b4
(create_process): If vfork fails, close forkin and forkout.
Richard M. Stallman <rms@gnu.org>
parents:
7116
diff
changeset
|
2217 if (forkin >= 0) |
26088
b7aa6ac26872
Add support for large files, 64-bit Solaris, system locale codings.
Paul Eggert <eggert@twinsun.com>
parents:
26019
diff
changeset
|
2218 emacs_close (forkin); |
7157
3f4fc9d682b4
(create_process): If vfork fails, close forkin and forkout.
Richard M. Stallman <rms@gnu.org>
parents:
7116
diff
changeset
|
2219 if (forkin != forkout && forkout >= 0) |
26088
b7aa6ac26872
Add support for large files, 64-bit Solaris, system locale codings.
Paul Eggert <eggert@twinsun.com>
parents:
26019
diff
changeset
|
2220 emacs_close (forkout); |
7157
3f4fc9d682b4
(create_process): If vfork fails, close forkin and forkout.
Richard M. Stallman <rms@gnu.org>
parents:
7116
diff
changeset
|
2221 } |
14131
7717b68abd2e
(create_process): Restore the signal state
Karl Heuer <kwzh@gnu.org>
parents:
14085
diff
changeset
|
2222 else |
7717b68abd2e
(create_process): Restore the signal state
Karl Heuer <kwzh@gnu.org>
parents:
14085
diff
changeset
|
2223 { |
7717b68abd2e
(create_process): Restore the signal state
Karl Heuer <kwzh@gnu.org>
parents:
14085
diff
changeset
|
2224 /* vfork succeeded. */ |
69873
2d844bbbccd4
* process.h (struct Lisp_Process): Replace Lisp_Objects `pid',
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
69634
diff
changeset
|
2225 XPROCESS (process)->pid = pid; |
578 | 2226 |
9793
28267fcc61be
Use macros IS_ANY_SEP, IS_DIRECTORY_SEP,
Richard M. Stallman <rms@gnu.org>
parents:
9705
diff
changeset
|
2227 #ifdef WINDOWSNT |
14131
7717b68abd2e
(create_process): Restore the signal state
Karl Heuer <kwzh@gnu.org>
parents:
14085
diff
changeset
|
2228 register_child (pid, inchannel); |
9793
28267fcc61be
Use macros IS_ANY_SEP, IS_DIRECTORY_SEP,
Richard M. Stallman <rms@gnu.org>
parents:
9705
diff
changeset
|
2229 #endif /* WINDOWSNT */ |
28267fcc61be
Use macros IS_ANY_SEP, IS_DIRECTORY_SEP,
Richard M. Stallman <rms@gnu.org>
parents:
9705
diff
changeset
|
2230 |
14131
7717b68abd2e
(create_process): Restore the signal state
Karl Heuer <kwzh@gnu.org>
parents:
14085
diff
changeset
|
2231 /* If the subfork execv fails, and it exits, |
7717b68abd2e
(create_process): Restore the signal state
Karl Heuer <kwzh@gnu.org>
parents:
14085
diff
changeset
|
2232 this close hangs. I don't know why. |
7717b68abd2e
(create_process): Restore the signal state
Karl Heuer <kwzh@gnu.org>
parents:
14085
diff
changeset
|
2233 So have an interrupt jar it loose. */ |
27430
1aa71680fe50
(toplevel): Include atimer.h.
Gerd Moellmann <gerd@gnu.org>
parents:
27028
diff
changeset
|
2234 { |
1aa71680fe50
(toplevel): Include atimer.h.
Gerd Moellmann <gerd@gnu.org>
parents:
27028
diff
changeset
|
2235 struct atimer *timer; |
1aa71680fe50
(toplevel): Include atimer.h.
Gerd Moellmann <gerd@gnu.org>
parents:
27028
diff
changeset
|
2236 EMACS_TIME offset; |
49600
23a1cea22d13
Trailing whitespace deleted.
Juanma Barranquero <lekktu@gmail.com>
parents:
49281
diff
changeset
|
2237 |
27430
1aa71680fe50
(toplevel): Include atimer.h.
Gerd Moellmann <gerd@gnu.org>
parents:
27028
diff
changeset
|
2238 stop_polling (); |
1aa71680fe50
(toplevel): Include atimer.h.
Gerd Moellmann <gerd@gnu.org>
parents:
27028
diff
changeset
|
2239 EMACS_SET_SECS_USECS (offset, 1, 0); |
1aa71680fe50
(toplevel): Include atimer.h.
Gerd Moellmann <gerd@gnu.org>
parents:
27028
diff
changeset
|
2240 timer = start_atimer (ATIMER_RELATIVE, offset, create_process_1, 0); |
49600
23a1cea22d13
Trailing whitespace deleted.
Juanma Barranquero <lekktu@gmail.com>
parents:
49281
diff
changeset
|
2241 |
27430
1aa71680fe50
(toplevel): Include atimer.h.
Gerd Moellmann <gerd@gnu.org>
parents:
27028
diff
changeset
|
2242 if (forkin >= 0) |
1aa71680fe50
(toplevel): Include atimer.h.
Gerd Moellmann <gerd@gnu.org>
parents:
27028
diff
changeset
|
2243 emacs_close (forkin); |
1aa71680fe50
(toplevel): Include atimer.h.
Gerd Moellmann <gerd@gnu.org>
parents:
27028
diff
changeset
|
2244 |
1aa71680fe50
(toplevel): Include atimer.h.
Gerd Moellmann <gerd@gnu.org>
parents:
27028
diff
changeset
|
2245 cancel_atimer (timer); |
1aa71680fe50
(toplevel): Include atimer.h.
Gerd Moellmann <gerd@gnu.org>
parents:
27028
diff
changeset
|
2246 start_polling (); |
1aa71680fe50
(toplevel): Include atimer.h.
Gerd Moellmann <gerd@gnu.org>
parents:
27028
diff
changeset
|
2247 } |
49600
23a1cea22d13
Trailing whitespace deleted.
Juanma Barranquero <lekktu@gmail.com>
parents:
49281
diff
changeset
|
2248 |
14131
7717b68abd2e
(create_process): Restore the signal state
Karl Heuer <kwzh@gnu.org>
parents:
14085
diff
changeset
|
2249 if (forkin != forkout && forkout >= 0) |
26088
b7aa6ac26872
Add support for large files, 64-bit Solaris, system locale codings.
Paul Eggert <eggert@twinsun.com>
parents:
26019
diff
changeset
|
2250 emacs_close (forkout); |
578 | 2251 |
11609
3b2dacb1bfe9
(create_process): Don't reference pty_name if !HAVE_PTYS.
Karl Heuer <kwzh@gnu.org>
parents:
11514
diff
changeset
|
2252 #ifdef HAVE_PTYS |
14131
7717b68abd2e
(create_process): Restore the signal state
Karl Heuer <kwzh@gnu.org>
parents:
14085
diff
changeset
|
2253 if (pty_flag) |
7717b68abd2e
(create_process): Restore the signal state
Karl Heuer <kwzh@gnu.org>
parents:
14085
diff
changeset
|
2254 XPROCESS (process)->tty_name = build_string (pty_name); |
7717b68abd2e
(create_process): Restore the signal state
Karl Heuer <kwzh@gnu.org>
parents:
14085
diff
changeset
|
2255 else |
11609
3b2dacb1bfe9
(create_process): Don't reference pty_name if !HAVE_PTYS.
Karl Heuer <kwzh@gnu.org>
parents:
11514
diff
changeset
|
2256 #endif |
14131
7717b68abd2e
(create_process): Restore the signal state
Karl Heuer <kwzh@gnu.org>
parents:
14085
diff
changeset
|
2257 XPROCESS (process)->tty_name = Qnil; |
80610
a6adb4611f10
(create_process) [!WINDOWSNT && FD_CLOEXEC]: Wait for
YAMAMOTO Mitsuharu <mituharu@math.s.chiba-u.ac.jp>
parents:
80225
diff
changeset
|
2258 |
a6adb4611f10
(create_process) [!WINDOWSNT && FD_CLOEXEC]: Wait for
YAMAMOTO Mitsuharu <mituharu@math.s.chiba-u.ac.jp>
parents:
80225
diff
changeset
|
2259 #if !defined (WINDOWSNT) && defined (FD_CLOEXEC) |
a6adb4611f10
(create_process) [!WINDOWSNT && FD_CLOEXEC]: Wait for
YAMAMOTO Mitsuharu <mituharu@math.s.chiba-u.ac.jp>
parents:
80225
diff
changeset
|
2260 /* Wait for child_setup to complete in case that vfork is |
a6adb4611f10
(create_process) [!WINDOWSNT && FD_CLOEXEC]: Wait for
YAMAMOTO Mitsuharu <mituharu@math.s.chiba-u.ac.jp>
parents:
80225
diff
changeset
|
2261 actually defined as fork. The descriptor wait_child_setup[1] |
a6adb4611f10
(create_process) [!WINDOWSNT && FD_CLOEXEC]: Wait for
YAMAMOTO Mitsuharu <mituharu@math.s.chiba-u.ac.jp>
parents:
80225
diff
changeset
|
2262 of a pipe is closed at the child side either by close-on-exec |
a6adb4611f10
(create_process) [!WINDOWSNT && FD_CLOEXEC]: Wait for
YAMAMOTO Mitsuharu <mituharu@math.s.chiba-u.ac.jp>
parents:
80225
diff
changeset
|
2263 on successful execvp or the _exit call in child_setup. */ |
a6adb4611f10
(create_process) [!WINDOWSNT && FD_CLOEXEC]: Wait for
YAMAMOTO Mitsuharu <mituharu@math.s.chiba-u.ac.jp>
parents:
80225
diff
changeset
|
2264 { |
a6adb4611f10
(create_process) [!WINDOWSNT && FD_CLOEXEC]: Wait for
YAMAMOTO Mitsuharu <mituharu@math.s.chiba-u.ac.jp>
parents:
80225
diff
changeset
|
2265 char dummy; |
a6adb4611f10
(create_process) [!WINDOWSNT && FD_CLOEXEC]: Wait for
YAMAMOTO Mitsuharu <mituharu@math.s.chiba-u.ac.jp>
parents:
80225
diff
changeset
|
2266 |
a6adb4611f10
(create_process) [!WINDOWSNT && FD_CLOEXEC]: Wait for
YAMAMOTO Mitsuharu <mituharu@math.s.chiba-u.ac.jp>
parents:
80225
diff
changeset
|
2267 emacs_close (wait_child_setup[1]); |
a6adb4611f10
(create_process) [!WINDOWSNT && FD_CLOEXEC]: Wait for
YAMAMOTO Mitsuharu <mituharu@math.s.chiba-u.ac.jp>
parents:
80225
diff
changeset
|
2268 emacs_read (wait_child_setup[0], &dummy, 1); |
a6adb4611f10
(create_process) [!WINDOWSNT && FD_CLOEXEC]: Wait for
YAMAMOTO Mitsuharu <mituharu@math.s.chiba-u.ac.jp>
parents:
80225
diff
changeset
|
2269 emacs_close (wait_child_setup[0]); |
a6adb4611f10
(create_process) [!WINDOWSNT && FD_CLOEXEC]: Wait for
YAMAMOTO Mitsuharu <mituharu@math.s.chiba-u.ac.jp>
parents:
80225
diff
changeset
|
2270 } |
a6adb4611f10
(create_process) [!WINDOWSNT && FD_CLOEXEC]: Wait for
YAMAMOTO Mitsuharu <mituharu@math.s.chiba-u.ac.jp>
parents:
80225
diff
changeset
|
2271 #endif |
14131
7717b68abd2e
(create_process): Restore the signal state
Karl Heuer <kwzh@gnu.org>
parents:
14085
diff
changeset
|
2272 } |
7717b68abd2e
(create_process): Restore the signal state
Karl Heuer <kwzh@gnu.org>
parents:
14085
diff
changeset
|
2273 |
7717b68abd2e
(create_process): Restore the signal state
Karl Heuer <kwzh@gnu.org>
parents:
14085
diff
changeset
|
2274 /* Restore the signal state whether vfork succeeded or not. |
7717b68abd2e
(create_process): Restore the signal state
Karl Heuer <kwzh@gnu.org>
parents:
14085
diff
changeset
|
2275 (We will signal an error, below, if it failed.) */ |
13709
d16f31ae8adf
(create_process): Use Posix signal handling to
Karl Heuer <kwzh@gnu.org>
parents:
13414
diff
changeset
|
2276 #ifdef POSIX_SIGNALS |
41856
0028402ed7d1
(create_process): Use HAVE_WORKING_VFORK, not HAVE_VFORK.
Paul Eggert <eggert@twinsun.com>
parents:
40656
diff
changeset
|
2277 #ifdef HAVE_WORKING_VFORK |
13709
d16f31ae8adf
(create_process): Use Posix signal handling to
Karl Heuer <kwzh@gnu.org>
parents:
13414
diff
changeset
|
2278 /* Restore the parent's signal handlers. */ |
d16f31ae8adf
(create_process): Use Posix signal handling to
Karl Heuer <kwzh@gnu.org>
parents:
13414
diff
changeset
|
2279 sigaction (SIGINT, &sigint_action, 0); |
d16f31ae8adf
(create_process): Use Posix signal handling to
Karl Heuer <kwzh@gnu.org>
parents:
13414
diff
changeset
|
2280 sigaction (SIGQUIT, &sigquit_action, 0); |
d16f31ae8adf
(create_process): Use Posix signal handling to
Karl Heuer <kwzh@gnu.org>
parents:
13414
diff
changeset
|
2281 #ifdef AIX |
d16f31ae8adf
(create_process): Use Posix signal handling to
Karl Heuer <kwzh@gnu.org>
parents:
13414
diff
changeset
|
2282 sigaction (SIGHUP, &sighup_action, 0); |
d16f31ae8adf
(create_process): Use Posix signal handling to
Karl Heuer <kwzh@gnu.org>
parents:
13414
diff
changeset
|
2283 #endif |
41856
0028402ed7d1
(create_process): Use HAVE_WORKING_VFORK, not HAVE_VFORK.
Paul Eggert <eggert@twinsun.com>
parents:
40656
diff
changeset
|
2284 #endif /* HAVE_WORKING_VFORK */ |
13709
d16f31ae8adf
(create_process): Use Posix signal handling to
Karl Heuer <kwzh@gnu.org>
parents:
13414
diff
changeset
|
2285 /* Stop blocking signals in the parent. */ |
d16f31ae8adf
(create_process): Use Posix signal handling to
Karl Heuer <kwzh@gnu.org>
parents:
13414
diff
changeset
|
2286 sigprocmask (SIG_SETMASK, &procmask, 0); |
d16f31ae8adf
(create_process): Use Posix signal handling to
Karl Heuer <kwzh@gnu.org>
parents:
13414
diff
changeset
|
2287 #else /* !POSIX_SIGNALS */ |
578 | 2288 #ifdef SIGCHLD |
87730 | 2289 #if defined (BSD_SYSTEM) || defined (HPUX) |
578 | 2290 sigsetmask (SIGEMPTYMASK); |
2291 #else /* ordinary USG */ | |
2292 #if 0 | |
2293 signal (SIGCHLD, sigchld); | |
2294 /* Now really handle any of these signals | |
2295 that came in during this function. */ | |
2296 if (sigchld_deferred) | |
2297 kill (getpid (), SIGCHLD); | |
2298 #endif | |
2299 #endif /* ordinary USG */ | |
2300 #endif /* SIGCHLD */ | |
13709
d16f31ae8adf
(create_process): Use Posix signal handling to
Karl Heuer <kwzh@gnu.org>
parents:
13414
diff
changeset
|
2301 #endif /* !POSIX_SIGNALS */ |
14131
7717b68abd2e
(create_process): Restore the signal state
Karl Heuer <kwzh@gnu.org>
parents:
14085
diff
changeset
|
2302 |
7717b68abd2e
(create_process): Restore the signal state
Karl Heuer <kwzh@gnu.org>
parents:
14085
diff
changeset
|
2303 /* Now generate the error if vfork failed. */ |
7717b68abd2e
(create_process): Restore the signal state
Karl Heuer <kwzh@gnu.org>
parents:
14085
diff
changeset
|
2304 if (pid < 0) |
7717b68abd2e
(create_process): Restore the signal state
Karl Heuer <kwzh@gnu.org>
parents:
14085
diff
changeset
|
2305 report_file_error ("Doing vfork", Qnil); |
578 | 2306 } |
2307 | |
104257
a577041a0370
(create_pty): New function.
Nick Roberts <nickrob@snap.net.nz>
parents:
103972
diff
changeset
|
2308 void |
a577041a0370
(create_pty): New function.
Nick Roberts <nickrob@snap.net.nz>
parents:
103972
diff
changeset
|
2309 create_pty (process) |
a577041a0370
(create_pty): New function.
Nick Roberts <nickrob@snap.net.nz>
parents:
103972
diff
changeset
|
2310 Lisp_Object process; |
a577041a0370
(create_pty): New function.
Nick Roberts <nickrob@snap.net.nz>
parents:
103972
diff
changeset
|
2311 { |
a577041a0370
(create_pty): New function.
Nick Roberts <nickrob@snap.net.nz>
parents:
103972
diff
changeset
|
2312 int inchannel, outchannel; |
a577041a0370
(create_pty): New function.
Nick Roberts <nickrob@snap.net.nz>
parents:
103972
diff
changeset
|
2313 |
a577041a0370
(create_pty): New function.
Nick Roberts <nickrob@snap.net.nz>
parents:
103972
diff
changeset
|
2314 /* Use volatile to protect variables from being clobbered by longjmp. */ |
a577041a0370
(create_pty): New function.
Nick Roberts <nickrob@snap.net.nz>
parents:
103972
diff
changeset
|
2315 volatile int forkin, forkout; |
a577041a0370
(create_pty): New function.
Nick Roberts <nickrob@snap.net.nz>
parents:
103972
diff
changeset
|
2316 volatile int pty_flag = 0; |
a577041a0370
(create_pty): New function.
Nick Roberts <nickrob@snap.net.nz>
parents:
103972
diff
changeset
|
2317 |
a577041a0370
(create_pty): New function.
Nick Roberts <nickrob@snap.net.nz>
parents:
103972
diff
changeset
|
2318 inchannel = outchannel = -1; |
a577041a0370
(create_pty): New function.
Nick Roberts <nickrob@snap.net.nz>
parents:
103972
diff
changeset
|
2319 |
a577041a0370
(create_pty): New function.
Nick Roberts <nickrob@snap.net.nz>
parents:
103972
diff
changeset
|
2320 #ifdef HAVE_PTYS |
a577041a0370
(create_pty): New function.
Nick Roberts <nickrob@snap.net.nz>
parents:
103972
diff
changeset
|
2321 if (!NILP (Vprocess_connection_type)) |
a577041a0370
(create_pty): New function.
Nick Roberts <nickrob@snap.net.nz>
parents:
103972
diff
changeset
|
2322 outchannel = inchannel = allocate_pty (); |
a577041a0370
(create_pty): New function.
Nick Roberts <nickrob@snap.net.nz>
parents:
103972
diff
changeset
|
2323 |
a577041a0370
(create_pty): New function.
Nick Roberts <nickrob@snap.net.nz>
parents:
103972
diff
changeset
|
2324 if (inchannel >= 0) |
a577041a0370
(create_pty): New function.
Nick Roberts <nickrob@snap.net.nz>
parents:
103972
diff
changeset
|
2325 { |
a577041a0370
(create_pty): New function.
Nick Roberts <nickrob@snap.net.nz>
parents:
103972
diff
changeset
|
2326 #if ! defined (USG) || defined (USG_SUBTTY_WORKS) |
a577041a0370
(create_pty): New function.
Nick Roberts <nickrob@snap.net.nz>
parents:
103972
diff
changeset
|
2327 /* On most USG systems it does not work to open the pty's tty here, |
a577041a0370
(create_pty): New function.
Nick Roberts <nickrob@snap.net.nz>
parents:
103972
diff
changeset
|
2328 then close it and reopen it in the child. */ |
a577041a0370
(create_pty): New function.
Nick Roberts <nickrob@snap.net.nz>
parents:
103972
diff
changeset
|
2329 #ifdef O_NOCTTY |
a577041a0370
(create_pty): New function.
Nick Roberts <nickrob@snap.net.nz>
parents:
103972
diff
changeset
|
2330 /* Don't let this terminal become our controlling terminal |
a577041a0370
(create_pty): New function.
Nick Roberts <nickrob@snap.net.nz>
parents:
103972
diff
changeset
|
2331 (in case we don't have one). */ |
a577041a0370
(create_pty): New function.
Nick Roberts <nickrob@snap.net.nz>
parents:
103972
diff
changeset
|
2332 forkout = forkin = emacs_open (pty_name, O_RDWR | O_NOCTTY, 0); |
a577041a0370
(create_pty): New function.
Nick Roberts <nickrob@snap.net.nz>
parents:
103972
diff
changeset
|
2333 #else |
a577041a0370
(create_pty): New function.
Nick Roberts <nickrob@snap.net.nz>
parents:
103972
diff
changeset
|
2334 forkout = forkin = emacs_open (pty_name, O_RDWR, 0); |
a577041a0370
(create_pty): New function.
Nick Roberts <nickrob@snap.net.nz>
parents:
103972
diff
changeset
|
2335 #endif |
a577041a0370
(create_pty): New function.
Nick Roberts <nickrob@snap.net.nz>
parents:
103972
diff
changeset
|
2336 if (forkin < 0) |
a577041a0370
(create_pty): New function.
Nick Roberts <nickrob@snap.net.nz>
parents:
103972
diff
changeset
|
2337 report_file_error ("Opening pty", Qnil); |
105672
715324003204
* process.c (create_pty): Remove conditionals for no longer
Dan Nicolaescu <dann@ics.uci.edu>
parents:
105669
diff
changeset
|
2338 #if defined (DONT_REOPEN_PTY) |
104257
a577041a0370
(create_pty): New function.
Nick Roberts <nickrob@snap.net.nz>
parents:
103972
diff
changeset
|
2339 /* In the case that vfork is defined as fork, the parent process |
a577041a0370
(create_pty): New function.
Nick Roberts <nickrob@snap.net.nz>
parents:
103972
diff
changeset
|
2340 (Emacs) may send some data before the child process completes |
a577041a0370
(create_pty): New function.
Nick Roberts <nickrob@snap.net.nz>
parents:
103972
diff
changeset
|
2341 tty options setup. So we setup tty before forking. */ |
a577041a0370
(create_pty): New function.
Nick Roberts <nickrob@snap.net.nz>
parents:
103972
diff
changeset
|
2342 child_setup_tty (forkout); |
105672
715324003204
* process.c (create_pty): Remove conditionals for no longer
Dan Nicolaescu <dann@ics.uci.edu>
parents:
105669
diff
changeset
|
2343 #endif /* DONT_REOPEN_PTY */ |
104257
a577041a0370
(create_pty): New function.
Nick Roberts <nickrob@snap.net.nz>
parents:
103972
diff
changeset
|
2344 #else |
a577041a0370
(create_pty): New function.
Nick Roberts <nickrob@snap.net.nz>
parents:
103972
diff
changeset
|
2345 forkin = forkout = -1; |
a577041a0370
(create_pty): New function.
Nick Roberts <nickrob@snap.net.nz>
parents:
103972
diff
changeset
|
2346 #endif /* not USG, or USG_SUBTTY_WORKS */ |
a577041a0370
(create_pty): New function.
Nick Roberts <nickrob@snap.net.nz>
parents:
103972
diff
changeset
|
2347 pty_flag = 1; |
a577041a0370
(create_pty): New function.
Nick Roberts <nickrob@snap.net.nz>
parents:
103972
diff
changeset
|
2348 } |
a577041a0370
(create_pty): New function.
Nick Roberts <nickrob@snap.net.nz>
parents:
103972
diff
changeset
|
2349 #endif /* HAVE_PTYS */ |
a577041a0370
(create_pty): New function.
Nick Roberts <nickrob@snap.net.nz>
parents:
103972
diff
changeset
|
2350 |
a577041a0370
(create_pty): New function.
Nick Roberts <nickrob@snap.net.nz>
parents:
103972
diff
changeset
|
2351 #ifdef O_NONBLOCK |
a577041a0370
(create_pty): New function.
Nick Roberts <nickrob@snap.net.nz>
parents:
103972
diff
changeset
|
2352 fcntl (inchannel, F_SETFL, O_NONBLOCK); |
a577041a0370
(create_pty): New function.
Nick Roberts <nickrob@snap.net.nz>
parents:
103972
diff
changeset
|
2353 fcntl (outchannel, F_SETFL, O_NONBLOCK); |
a577041a0370
(create_pty): New function.
Nick Roberts <nickrob@snap.net.nz>
parents:
103972
diff
changeset
|
2354 #else |
a577041a0370
(create_pty): New function.
Nick Roberts <nickrob@snap.net.nz>
parents:
103972
diff
changeset
|
2355 #ifdef O_NDELAY |
a577041a0370
(create_pty): New function.
Nick Roberts <nickrob@snap.net.nz>
parents:
103972
diff
changeset
|
2356 fcntl (inchannel, F_SETFL, O_NDELAY); |
a577041a0370
(create_pty): New function.
Nick Roberts <nickrob@snap.net.nz>
parents:
103972
diff
changeset
|
2357 fcntl (outchannel, F_SETFL, O_NDELAY); |
a577041a0370
(create_pty): New function.
Nick Roberts <nickrob@snap.net.nz>
parents:
103972
diff
changeset
|
2358 #endif |
a577041a0370
(create_pty): New function.
Nick Roberts <nickrob@snap.net.nz>
parents:
103972
diff
changeset
|
2359 #endif |
a577041a0370
(create_pty): New function.
Nick Roberts <nickrob@snap.net.nz>
parents:
103972
diff
changeset
|
2360 |
a577041a0370
(create_pty): New function.
Nick Roberts <nickrob@snap.net.nz>
parents:
103972
diff
changeset
|
2361 /* Record this as an active process, with its channels. |
a577041a0370
(create_pty): New function.
Nick Roberts <nickrob@snap.net.nz>
parents:
103972
diff
changeset
|
2362 As a result, child_setup will close Emacs's side of the pipes. */ |
a577041a0370
(create_pty): New function.
Nick Roberts <nickrob@snap.net.nz>
parents:
103972
diff
changeset
|
2363 chan_process[inchannel] = process; |
a577041a0370
(create_pty): New function.
Nick Roberts <nickrob@snap.net.nz>
parents:
103972
diff
changeset
|
2364 XPROCESS (process)->infd = inchannel; |
a577041a0370
(create_pty): New function.
Nick Roberts <nickrob@snap.net.nz>
parents:
103972
diff
changeset
|
2365 XPROCESS (process)->outfd = outchannel; |
a577041a0370
(create_pty): New function.
Nick Roberts <nickrob@snap.net.nz>
parents:
103972
diff
changeset
|
2366 |
a577041a0370
(create_pty): New function.
Nick Roberts <nickrob@snap.net.nz>
parents:
103972
diff
changeset
|
2367 /* Previously we recorded the tty descriptor used in the subprocess. |
a577041a0370
(create_pty): New function.
Nick Roberts <nickrob@snap.net.nz>
parents:
103972
diff
changeset
|
2368 It was only used for getting the foreground tty process, so now |
a577041a0370
(create_pty): New function.
Nick Roberts <nickrob@snap.net.nz>
parents:
103972
diff
changeset
|
2369 we just reopen the device (see emacs_get_tty_pgrp) as this is |
a577041a0370
(create_pty): New function.
Nick Roberts <nickrob@snap.net.nz>
parents:
103972
diff
changeset
|
2370 more portable (see USG_SUBTTY_WORKS above). */ |
a577041a0370
(create_pty): New function.
Nick Roberts <nickrob@snap.net.nz>
parents:
103972
diff
changeset
|
2371 |
a577041a0370
(create_pty): New function.
Nick Roberts <nickrob@snap.net.nz>
parents:
103972
diff
changeset
|
2372 XPROCESS (process)->pty_flag = pty_flag; |
a577041a0370
(create_pty): New function.
Nick Roberts <nickrob@snap.net.nz>
parents:
103972
diff
changeset
|
2373 XPROCESS (process)->status = Qrun; |
a577041a0370
(create_pty): New function.
Nick Roberts <nickrob@snap.net.nz>
parents:
103972
diff
changeset
|
2374 setup_process_coding_systems (process); |
a577041a0370
(create_pty): New function.
Nick Roberts <nickrob@snap.net.nz>
parents:
103972
diff
changeset
|
2375 |
a577041a0370
(create_pty): New function.
Nick Roberts <nickrob@snap.net.nz>
parents:
103972
diff
changeset
|
2376 FD_SET (inchannel, &input_wait_mask); |
a577041a0370
(create_pty): New function.
Nick Roberts <nickrob@snap.net.nz>
parents:
103972
diff
changeset
|
2377 FD_SET (inchannel, &non_keyboard_wait_mask); |
a577041a0370
(create_pty): New function.
Nick Roberts <nickrob@snap.net.nz>
parents:
103972
diff
changeset
|
2378 if (inchannel > max_process_desc) |
a577041a0370
(create_pty): New function.
Nick Roberts <nickrob@snap.net.nz>
parents:
103972
diff
changeset
|
2379 max_process_desc = inchannel; |
a577041a0370
(create_pty): New function.
Nick Roberts <nickrob@snap.net.nz>
parents:
103972
diff
changeset
|
2380 |
a577041a0370
(create_pty): New function.
Nick Roberts <nickrob@snap.net.nz>
parents:
103972
diff
changeset
|
2381 XPROCESS (process)->pid = -2; |
104265
a812c049e63c
(create_pty): Fix last change.
Eli Zaretskii <eliz@gnu.org>
parents:
104257
diff
changeset
|
2382 #ifdef HAVE_PTYS |
a812c049e63c
(create_pty): Fix last change.
Eli Zaretskii <eliz@gnu.org>
parents:
104257
diff
changeset
|
2383 if (pty_flag) |
a812c049e63c
(create_pty): Fix last change.
Eli Zaretskii <eliz@gnu.org>
parents:
104257
diff
changeset
|
2384 XPROCESS (process)->tty_name = build_string (pty_name); |
a812c049e63c
(create_pty): Fix last change.
Eli Zaretskii <eliz@gnu.org>
parents:
104257
diff
changeset
|
2385 else |
a812c049e63c
(create_pty): Fix last change.
Eli Zaretskii <eliz@gnu.org>
parents:
104257
diff
changeset
|
2386 #endif |
a812c049e63c
(create_pty): Fix last change.
Eli Zaretskii <eliz@gnu.org>
parents:
104257
diff
changeset
|
2387 XPROCESS (process)->tty_name = Qnil; |
104257
a577041a0370
(create_pty): New function.
Nick Roberts <nickrob@snap.net.nz>
parents:
103972
diff
changeset
|
2388 } |
a577041a0370
(create_pty): New function.
Nick Roberts <nickrob@snap.net.nz>
parents:
103972
diff
changeset
|
2389 |
43968
7ec801358b7e
(Qlocal, QCname, QCbuffer, QChost, QCservice, QCfamily)
Kim F. Storm <storm@cua.dk>
parents:
43642
diff
changeset
|
2390 |
578 | 2391 #ifdef HAVE_SOCKETS |
2392 | |
43968
7ec801358b7e
(Qlocal, QCname, QCbuffer, QChost, QCservice, QCfamily)
Kim F. Storm <storm@cua.dk>
parents:
43642
diff
changeset
|
2393 /* Convert an internal struct sockaddr to a lisp object (vector or string). |
7ec801358b7e
(Qlocal, QCname, QCbuffer, QChost, QCservice, QCfamily)
Kim F. Storm <storm@cua.dk>
parents:
43642
diff
changeset
|
2394 The address family of sa is not included in the result. */ |
7ec801358b7e
(Qlocal, QCname, QCbuffer, QChost, QCservice, QCfamily)
Kim F. Storm <storm@cua.dk>
parents:
43642
diff
changeset
|
2395 |
7ec801358b7e
(Qlocal, QCname, QCbuffer, QChost, QCservice, QCfamily)
Kim F. Storm <storm@cua.dk>
parents:
43642
diff
changeset
|
2396 static Lisp_Object |
7ec801358b7e
(Qlocal, QCname, QCbuffer, QChost, QCservice, QCfamily)
Kim F. Storm <storm@cua.dk>
parents:
43642
diff
changeset
|
2397 conv_sockaddr_to_lisp (sa, len) |
7ec801358b7e
(Qlocal, QCname, QCbuffer, QChost, QCservice, QCfamily)
Kim F. Storm <storm@cua.dk>
parents:
43642
diff
changeset
|
2398 struct sockaddr *sa; |
7ec801358b7e
(Qlocal, QCname, QCbuffer, QChost, QCservice, QCfamily)
Kim F. Storm <storm@cua.dk>
parents:
43642
diff
changeset
|
2399 int len; |
7ec801358b7e
(Qlocal, QCname, QCbuffer, QChost, QCservice, QCfamily)
Kim F. Storm <storm@cua.dk>
parents:
43642
diff
changeset
|
2400 { |
7ec801358b7e
(Qlocal, QCname, QCbuffer, QChost, QCservice, QCfamily)
Kim F. Storm <storm@cua.dk>
parents:
43642
diff
changeset
|
2401 Lisp_Object address; |
7ec801358b7e
(Qlocal, QCname, QCbuffer, QChost, QCservice, QCfamily)
Kim F. Storm <storm@cua.dk>
parents:
43642
diff
changeset
|
2402 int i; |
7ec801358b7e
(Qlocal, QCname, QCbuffer, QChost, QCservice, QCfamily)
Kim F. Storm <storm@cua.dk>
parents:
43642
diff
changeset
|
2403 unsigned char *cp; |
7ec801358b7e
(Qlocal, QCname, QCbuffer, QChost, QCservice, QCfamily)
Kim F. Storm <storm@cua.dk>
parents:
43642
diff
changeset
|
2404 register struct Lisp_Vector *p; |
7ec801358b7e
(Qlocal, QCname, QCbuffer, QChost, QCservice, QCfamily)
Kim F. Storm <storm@cua.dk>
parents:
43642
diff
changeset
|
2405 |
100824
e5aa6a069f40
(conv_sockaddr_to_lisp): Add workaround for
Andreas Schwab <schwab@suse.de>
parents:
100573
diff
changeset
|
2406 /* Workaround for a bug in getsockname on BSD: Names bound to |
e5aa6a069f40
(conv_sockaddr_to_lisp): Add workaround for
Andreas Schwab <schwab@suse.de>
parents:
100573
diff
changeset
|
2407 sockets in the UNIX domain are inaccessible; getsockname returns |
e5aa6a069f40
(conv_sockaddr_to_lisp): Add workaround for
Andreas Schwab <schwab@suse.de>
parents:
100573
diff
changeset
|
2408 a zero length name. */ |
e5aa6a069f40
(conv_sockaddr_to_lisp): Add workaround for
Andreas Schwab <schwab@suse.de>
parents:
100573
diff
changeset
|
2409 if (len < OFFSETOF (struct sockaddr, sa_family) + sizeof (sa->sa_family)) |
101276
dd95cb42c0aa
* dbusbind.c (Fdbus_register_signal):
Juanma Barranquero <lekktu@gmail.com>
parents:
100860
diff
changeset
|
2410 return empty_unibyte_string; |
100824
e5aa6a069f40
(conv_sockaddr_to_lisp): Add workaround for
Andreas Schwab <schwab@suse.de>
parents:
100573
diff
changeset
|
2411 |
43968
7ec801358b7e
(Qlocal, QCname, QCbuffer, QChost, QCservice, QCfamily)
Kim F. Storm <storm@cua.dk>
parents:
43642
diff
changeset
|
2412 switch (sa->sa_family) |
7ec801358b7e
(Qlocal, QCname, QCbuffer, QChost, QCservice, QCfamily)
Kim F. Storm <storm@cua.dk>
parents:
43642
diff
changeset
|
2413 { |
7ec801358b7e
(Qlocal, QCname, QCbuffer, QChost, QCservice, QCfamily)
Kim F. Storm <storm@cua.dk>
parents:
43642
diff
changeset
|
2414 case AF_INET: |
7ec801358b7e
(Qlocal, QCname, QCbuffer, QChost, QCservice, QCfamily)
Kim F. Storm <storm@cua.dk>
parents:
43642
diff
changeset
|
2415 { |
7ec801358b7e
(Qlocal, QCname, QCbuffer, QChost, QCservice, QCfamily)
Kim F. Storm <storm@cua.dk>
parents:
43642
diff
changeset
|
2416 struct sockaddr_in *sin = (struct sockaddr_in *) sa; |
7ec801358b7e
(Qlocal, QCname, QCbuffer, QChost, QCservice, QCfamily)
Kim F. Storm <storm@cua.dk>
parents:
43642
diff
changeset
|
2417 len = sizeof (sin->sin_addr) + 1; |
7ec801358b7e
(Qlocal, QCname, QCbuffer, QChost, QCservice, QCfamily)
Kim F. Storm <storm@cua.dk>
parents:
43642
diff
changeset
|
2418 address = Fmake_vector (make_number (len), Qnil); |
7ec801358b7e
(Qlocal, QCname, QCbuffer, QChost, QCservice, QCfamily)
Kim F. Storm <storm@cua.dk>
parents:
43642
diff
changeset
|
2419 p = XVECTOR (address); |
7ec801358b7e
(Qlocal, QCname, QCbuffer, QChost, QCservice, QCfamily)
Kim F. Storm <storm@cua.dk>
parents:
43642
diff
changeset
|
2420 p->contents[--len] = make_number (ntohs (sin->sin_port)); |
100824
e5aa6a069f40
(conv_sockaddr_to_lisp): Add workaround for
Andreas Schwab <schwab@suse.de>
parents:
100573
diff
changeset
|
2421 cp = (unsigned char *) &sin->sin_addr; |
43968
7ec801358b7e
(Qlocal, QCname, QCbuffer, QChost, QCservice, QCfamily)
Kim F. Storm <storm@cua.dk>
parents:
43642
diff
changeset
|
2422 break; |
7ec801358b7e
(Qlocal, QCname, QCbuffer, QChost, QCservice, QCfamily)
Kim F. Storm <storm@cua.dk>
parents:
43642
diff
changeset
|
2423 } |
68008 | 2424 #ifdef AF_INET6 |
2425 case AF_INET6: | |
2426 { | |
2427 struct sockaddr_in6 *sin6 = (struct sockaddr_in6 *) sa; | |
100824
e5aa6a069f40
(conv_sockaddr_to_lisp): Add workaround for
Andreas Schwab <schwab@suse.de>
parents:
100573
diff
changeset
|
2428 uint16_t *ip6 = (uint16_t *) &sin6->sin6_addr; |
68008 | 2429 len = sizeof (sin6->sin6_addr)/2 + 1; |
2430 address = Fmake_vector (make_number (len), Qnil); | |
2431 p = XVECTOR (address); | |
2432 p->contents[--len] = make_number (ntohs (sin6->sin6_port)); | |
2433 for (i = 0; i < len; i++) | |
2434 p->contents[i] = make_number (ntohs (ip6[i])); | |
2435 return address; | |
2436 } | |
2437 #endif | |
43968
7ec801358b7e
(Qlocal, QCname, QCbuffer, QChost, QCservice, QCfamily)
Kim F. Storm <storm@cua.dk>
parents:
43642
diff
changeset
|
2438 #ifdef HAVE_LOCAL_SOCKETS |
7ec801358b7e
(Qlocal, QCname, QCbuffer, QChost, QCservice, QCfamily)
Kim F. Storm <storm@cua.dk>
parents:
43642
diff
changeset
|
2439 case AF_LOCAL: |
7ec801358b7e
(Qlocal, QCname, QCbuffer, QChost, QCservice, QCfamily)
Kim F. Storm <storm@cua.dk>
parents:
43642
diff
changeset
|
2440 { |
44038
e2339254ba48
(conv_sockaddr_to_lisp, conv_lisp_to_sockaddr): Don't
Eli Zaretskii <eliz@gnu.org>
parents:
44013
diff
changeset
|
2441 struct sockaddr_un *sockun = (struct sockaddr_un *) sa; |
e2339254ba48
(conv_sockaddr_to_lisp, conv_lisp_to_sockaddr): Don't
Eli Zaretskii <eliz@gnu.org>
parents:
44013
diff
changeset
|
2442 for (i = 0; i < sizeof (sockun->sun_path); i++) |
e2339254ba48
(conv_sockaddr_to_lisp, conv_lisp_to_sockaddr): Don't
Eli Zaretskii <eliz@gnu.org>
parents:
44013
diff
changeset
|
2443 if (sockun->sun_path[i] == 0) |
43968
7ec801358b7e
(Qlocal, QCname, QCbuffer, QChost, QCservice, QCfamily)
Kim F. Storm <storm@cua.dk>
parents:
43642
diff
changeset
|
2444 break; |
44038
e2339254ba48
(conv_sockaddr_to_lisp, conv_lisp_to_sockaddr): Don't
Eli Zaretskii <eliz@gnu.org>
parents:
44013
diff
changeset
|
2445 return make_unibyte_string (sockun->sun_path, i); |
43968
7ec801358b7e
(Qlocal, QCname, QCbuffer, QChost, QCservice, QCfamily)
Kim F. Storm <storm@cua.dk>
parents:
43642
diff
changeset
|
2446 } |
7ec801358b7e
(Qlocal, QCname, QCbuffer, QChost, QCservice, QCfamily)
Kim F. Storm <storm@cua.dk>
parents:
43642
diff
changeset
|
2447 #endif |
7ec801358b7e
(Qlocal, QCname, QCbuffer, QChost, QCservice, QCfamily)
Kim F. Storm <storm@cua.dk>
parents:
43642
diff
changeset
|
2448 default: |
100824
e5aa6a069f40
(conv_sockaddr_to_lisp): Add workaround for
Andreas Schwab <schwab@suse.de>
parents:
100573
diff
changeset
|
2449 len -= OFFSETOF (struct sockaddr, sa_family) + sizeof (sa->sa_family); |
43968
7ec801358b7e
(Qlocal, QCname, QCbuffer, QChost, QCservice, QCfamily)
Kim F. Storm <storm@cua.dk>
parents:
43642
diff
changeset
|
2450 address = Fcons (make_number (sa->sa_family), |
7ec801358b7e
(Qlocal, QCname, QCbuffer, QChost, QCservice, QCfamily)
Kim F. Storm <storm@cua.dk>
parents:
43642
diff
changeset
|
2451 Fmake_vector (make_number (len), Qnil)); |
7ec801358b7e
(Qlocal, QCname, QCbuffer, QChost, QCservice, QCfamily)
Kim F. Storm <storm@cua.dk>
parents:
43642
diff
changeset
|
2452 p = XVECTOR (XCDR (address)); |
100824
e5aa6a069f40
(conv_sockaddr_to_lisp): Add workaround for
Andreas Schwab <schwab@suse.de>
parents:
100573
diff
changeset
|
2453 cp = (unsigned char *) &sa->sa_family + sizeof (sa->sa_family); |
43968
7ec801358b7e
(Qlocal, QCname, QCbuffer, QChost, QCservice, QCfamily)
Kim F. Storm <storm@cua.dk>
parents:
43642
diff
changeset
|
2454 break; |
7ec801358b7e
(Qlocal, QCname, QCbuffer, QChost, QCservice, QCfamily)
Kim F. Storm <storm@cua.dk>
parents:
43642
diff
changeset
|
2455 } |
7ec801358b7e
(Qlocal, QCname, QCbuffer, QChost, QCservice, QCfamily)
Kim F. Storm <storm@cua.dk>
parents:
43642
diff
changeset
|
2456 |
7ec801358b7e
(Qlocal, QCname, QCbuffer, QChost, QCservice, QCfamily)
Kim F. Storm <storm@cua.dk>
parents:
43642
diff
changeset
|
2457 i = 0; |
7ec801358b7e
(Qlocal, QCname, QCbuffer, QChost, QCservice, QCfamily)
Kim F. Storm <storm@cua.dk>
parents:
43642
diff
changeset
|
2458 while (i < len) |
7ec801358b7e
(Qlocal, QCname, QCbuffer, QChost, QCservice, QCfamily)
Kim F. Storm <storm@cua.dk>
parents:
43642
diff
changeset
|
2459 p->contents[i++] = make_number (*cp++); |
7ec801358b7e
(Qlocal, QCname, QCbuffer, QChost, QCservice, QCfamily)
Kim F. Storm <storm@cua.dk>
parents:
43642
diff
changeset
|
2460 |
7ec801358b7e
(Qlocal, QCname, QCbuffer, QChost, QCservice, QCfamily)
Kim F. Storm <storm@cua.dk>
parents:
43642
diff
changeset
|
2461 return address; |
7ec801358b7e
(Qlocal, QCname, QCbuffer, QChost, QCservice, QCfamily)
Kim F. Storm <storm@cua.dk>
parents:
43642
diff
changeset
|
2462 } |
7ec801358b7e
(Qlocal, QCname, QCbuffer, QChost, QCservice, QCfamily)
Kim F. Storm <storm@cua.dk>
parents:
43642
diff
changeset
|
2463 |
7ec801358b7e
(Qlocal, QCname, QCbuffer, QChost, QCservice, QCfamily)
Kim F. Storm <storm@cua.dk>
parents:
43642
diff
changeset
|
2464 |
7ec801358b7e
(Qlocal, QCname, QCbuffer, QChost, QCservice, QCfamily)
Kim F. Storm <storm@cua.dk>
parents:
43642
diff
changeset
|
2465 /* Get family and required size for sockaddr structure to hold ADDRESS. */ |
7ec801358b7e
(Qlocal, QCname, QCbuffer, QChost, QCservice, QCfamily)
Kim F. Storm <storm@cua.dk>
parents:
43642
diff
changeset
|
2466 |
7ec801358b7e
(Qlocal, QCname, QCbuffer, QChost, QCservice, QCfamily)
Kim F. Storm <storm@cua.dk>
parents:
43642
diff
changeset
|
2467 static int |
7ec801358b7e
(Qlocal, QCname, QCbuffer, QChost, QCservice, QCfamily)
Kim F. Storm <storm@cua.dk>
parents:
43642
diff
changeset
|
2468 get_lisp_to_sockaddr_size (address, familyp) |
7ec801358b7e
(Qlocal, QCname, QCbuffer, QChost, QCservice, QCfamily)
Kim F. Storm <storm@cua.dk>
parents:
43642
diff
changeset
|
2469 Lisp_Object address; |
7ec801358b7e
(Qlocal, QCname, QCbuffer, QChost, QCservice, QCfamily)
Kim F. Storm <storm@cua.dk>
parents:
43642
diff
changeset
|
2470 int *familyp; |
7ec801358b7e
(Qlocal, QCname, QCbuffer, QChost, QCservice, QCfamily)
Kim F. Storm <storm@cua.dk>
parents:
43642
diff
changeset
|
2471 { |
7ec801358b7e
(Qlocal, QCname, QCbuffer, QChost, QCservice, QCfamily)
Kim F. Storm <storm@cua.dk>
parents:
43642
diff
changeset
|
2472 register struct Lisp_Vector *p; |
7ec801358b7e
(Qlocal, QCname, QCbuffer, QChost, QCservice, QCfamily)
Kim F. Storm <storm@cua.dk>
parents:
43642
diff
changeset
|
2473 |
7ec801358b7e
(Qlocal, QCname, QCbuffer, QChost, QCservice, QCfamily)
Kim F. Storm <storm@cua.dk>
parents:
43642
diff
changeset
|
2474 if (VECTORP (address)) |
7ec801358b7e
(Qlocal, QCname, QCbuffer, QChost, QCservice, QCfamily)
Kim F. Storm <storm@cua.dk>
parents:
43642
diff
changeset
|
2475 { |
7ec801358b7e
(Qlocal, QCname, QCbuffer, QChost, QCservice, QCfamily)
Kim F. Storm <storm@cua.dk>
parents:
43642
diff
changeset
|
2476 p = XVECTOR (address); |
7ec801358b7e
(Qlocal, QCname, QCbuffer, QChost, QCservice, QCfamily)
Kim F. Storm <storm@cua.dk>
parents:
43642
diff
changeset
|
2477 if (p->size == 5) |
7ec801358b7e
(Qlocal, QCname, QCbuffer, QChost, QCservice, QCfamily)
Kim F. Storm <storm@cua.dk>
parents:
43642
diff
changeset
|
2478 { |
7ec801358b7e
(Qlocal, QCname, QCbuffer, QChost, QCservice, QCfamily)
Kim F. Storm <storm@cua.dk>
parents:
43642
diff
changeset
|
2479 *familyp = AF_INET; |
7ec801358b7e
(Qlocal, QCname, QCbuffer, QChost, QCservice, QCfamily)
Kim F. Storm <storm@cua.dk>
parents:
43642
diff
changeset
|
2480 return sizeof (struct sockaddr_in); |
7ec801358b7e
(Qlocal, QCname, QCbuffer, QChost, QCservice, QCfamily)
Kim F. Storm <storm@cua.dk>
parents:
43642
diff
changeset
|
2481 } |
68008 | 2482 #ifdef AF_INET6 |
2483 else if (p->size == 9) | |
2484 { | |
2485 *familyp = AF_INET6; | |
2486 return sizeof (struct sockaddr_in6); | |
2487 } | |
2488 #endif | |
43968
7ec801358b7e
(Qlocal, QCname, QCbuffer, QChost, QCservice, QCfamily)
Kim F. Storm <storm@cua.dk>
parents:
43642
diff
changeset
|
2489 } |
7ec801358b7e
(Qlocal, QCname, QCbuffer, QChost, QCservice, QCfamily)
Kim F. Storm <storm@cua.dk>
parents:
43642
diff
changeset
|
2490 #ifdef HAVE_LOCAL_SOCKETS |
7ec801358b7e
(Qlocal, QCname, QCbuffer, QChost, QCservice, QCfamily)
Kim F. Storm <storm@cua.dk>
parents:
43642
diff
changeset
|
2491 else if (STRINGP (address)) |
7ec801358b7e
(Qlocal, QCname, QCbuffer, QChost, QCservice, QCfamily)
Kim F. Storm <storm@cua.dk>
parents:
43642
diff
changeset
|
2492 { |
7ec801358b7e
(Qlocal, QCname, QCbuffer, QChost, QCservice, QCfamily)
Kim F. Storm <storm@cua.dk>
parents:
43642
diff
changeset
|
2493 *familyp = AF_LOCAL; |
7ec801358b7e
(Qlocal, QCname, QCbuffer, QChost, QCservice, QCfamily)
Kim F. Storm <storm@cua.dk>
parents:
43642
diff
changeset
|
2494 return sizeof (struct sockaddr_un); |
7ec801358b7e
(Qlocal, QCname, QCbuffer, QChost, QCservice, QCfamily)
Kim F. Storm <storm@cua.dk>
parents:
43642
diff
changeset
|
2495 } |
7ec801358b7e
(Qlocal, QCname, QCbuffer, QChost, QCservice, QCfamily)
Kim F. Storm <storm@cua.dk>
parents:
43642
diff
changeset
|
2496 #endif |
7ec801358b7e
(Qlocal, QCname, QCbuffer, QChost, QCservice, QCfamily)
Kim F. Storm <storm@cua.dk>
parents:
43642
diff
changeset
|
2497 else if (CONSP (address) && INTEGERP (XCAR (address)) && VECTORP (XCDR (address))) |
7ec801358b7e
(Qlocal, QCname, QCbuffer, QChost, QCservice, QCfamily)
Kim F. Storm <storm@cua.dk>
parents:
43642
diff
changeset
|
2498 { |
7ec801358b7e
(Qlocal, QCname, QCbuffer, QChost, QCservice, QCfamily)
Kim F. Storm <storm@cua.dk>
parents:
43642
diff
changeset
|
2499 struct sockaddr *sa; |
7ec801358b7e
(Qlocal, QCname, QCbuffer, QChost, QCservice, QCfamily)
Kim F. Storm <storm@cua.dk>
parents:
43642
diff
changeset
|
2500 *familyp = XINT (XCAR (address)); |
7ec801358b7e
(Qlocal, QCname, QCbuffer, QChost, QCservice, QCfamily)
Kim F. Storm <storm@cua.dk>
parents:
43642
diff
changeset
|
2501 p = XVECTOR (XCDR (address)); |
7ec801358b7e
(Qlocal, QCname, QCbuffer, QChost, QCservice, QCfamily)
Kim F. Storm <storm@cua.dk>
parents:
43642
diff
changeset
|
2502 return p->size + sizeof (sa->sa_family); |
7ec801358b7e
(Qlocal, QCname, QCbuffer, QChost, QCservice, QCfamily)
Kim F. Storm <storm@cua.dk>
parents:
43642
diff
changeset
|
2503 } |
7ec801358b7e
(Qlocal, QCname, QCbuffer, QChost, QCservice, QCfamily)
Kim F. Storm <storm@cua.dk>
parents:
43642
diff
changeset
|
2504 return 0; |
7ec801358b7e
(Qlocal, QCname, QCbuffer, QChost, QCservice, QCfamily)
Kim F. Storm <storm@cua.dk>
parents:
43642
diff
changeset
|
2505 } |
7ec801358b7e
(Qlocal, QCname, QCbuffer, QChost, QCservice, QCfamily)
Kim F. Storm <storm@cua.dk>
parents:
43642
diff
changeset
|
2506 |
7ec801358b7e
(Qlocal, QCname, QCbuffer, QChost, QCservice, QCfamily)
Kim F. Storm <storm@cua.dk>
parents:
43642
diff
changeset
|
2507 /* Convert an address object (vector or string) to an internal sockaddr. |
69981
9fb9e33ecf2d
(conv_lisp_to_sockaddr): Fix previous change.
Richard M. Stallman <rms@gnu.org>
parents:
69974
diff
changeset
|
2508 |
9fb9e33ecf2d
(conv_lisp_to_sockaddr): Fix previous change.
Richard M. Stallman <rms@gnu.org>
parents:
69974
diff
changeset
|
2509 The address format has been basically validated by |
9fb9e33ecf2d
(conv_lisp_to_sockaddr): Fix previous change.
Richard M. Stallman <rms@gnu.org>
parents:
69974
diff
changeset
|
2510 get_lisp_to_sockaddr_size, but this does not mean FAMILY is valid; |
9fb9e33ecf2d
(conv_lisp_to_sockaddr): Fix previous change.
Richard M. Stallman <rms@gnu.org>
parents:
69974
diff
changeset
|
2511 it could have come from user data. So if FAMILY is not valid, |
9fb9e33ecf2d
(conv_lisp_to_sockaddr): Fix previous change.
Richard M. Stallman <rms@gnu.org>
parents:
69974
diff
changeset
|
2512 we return after zeroing *SA. */ |
43968
7ec801358b7e
(Qlocal, QCname, QCbuffer, QChost, QCservice, QCfamily)
Kim F. Storm <storm@cua.dk>
parents:
43642
diff
changeset
|
2513 |
7ec801358b7e
(Qlocal, QCname, QCbuffer, QChost, QCservice, QCfamily)
Kim F. Storm <storm@cua.dk>
parents:
43642
diff
changeset
|
2514 static void |
7ec801358b7e
(Qlocal, QCname, QCbuffer, QChost, QCservice, QCfamily)
Kim F. Storm <storm@cua.dk>
parents:
43642
diff
changeset
|
2515 conv_lisp_to_sockaddr (family, address, sa, len) |
7ec801358b7e
(Qlocal, QCname, QCbuffer, QChost, QCservice, QCfamily)
Kim F. Storm <storm@cua.dk>
parents:
43642
diff
changeset
|
2516 int family; |
7ec801358b7e
(Qlocal, QCname, QCbuffer, QChost, QCservice, QCfamily)
Kim F. Storm <storm@cua.dk>
parents:
43642
diff
changeset
|
2517 Lisp_Object address; |
7ec801358b7e
(Qlocal, QCname, QCbuffer, QChost, QCservice, QCfamily)
Kim F. Storm <storm@cua.dk>
parents:
43642
diff
changeset
|
2518 struct sockaddr *sa; |
7ec801358b7e
(Qlocal, QCname, QCbuffer, QChost, QCservice, QCfamily)
Kim F. Storm <storm@cua.dk>
parents:
43642
diff
changeset
|
2519 int len; |
7ec801358b7e
(Qlocal, QCname, QCbuffer, QChost, QCservice, QCfamily)
Kim F. Storm <storm@cua.dk>
parents:
43642
diff
changeset
|
2520 { |
7ec801358b7e
(Qlocal, QCname, QCbuffer, QChost, QCservice, QCfamily)
Kim F. Storm <storm@cua.dk>
parents:
43642
diff
changeset
|
2521 register struct Lisp_Vector *p; |
51233
41ed31a0fd49
(allocate_pty): Remove `unused var stb' and
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
51046
diff
changeset
|
2522 register unsigned char *cp = NULL; |
43968
7ec801358b7e
(Qlocal, QCname, QCbuffer, QChost, QCservice, QCfamily)
Kim F. Storm <storm@cua.dk>
parents:
43642
diff
changeset
|
2523 register int i; |
7ec801358b7e
(Qlocal, QCname, QCbuffer, QChost, QCservice, QCfamily)
Kim F. Storm <storm@cua.dk>
parents:
43642
diff
changeset
|
2524 |
7ec801358b7e
(Qlocal, QCname, QCbuffer, QChost, QCservice, QCfamily)
Kim F. Storm <storm@cua.dk>
parents:
43642
diff
changeset
|
2525 bzero (sa, len); |
7ec801358b7e
(Qlocal, QCname, QCbuffer, QChost, QCservice, QCfamily)
Kim F. Storm <storm@cua.dk>
parents:
43642
diff
changeset
|
2526 |
7ec801358b7e
(Qlocal, QCname, QCbuffer, QChost, QCservice, QCfamily)
Kim F. Storm <storm@cua.dk>
parents:
43642
diff
changeset
|
2527 if (VECTORP (address)) |
7ec801358b7e
(Qlocal, QCname, QCbuffer, QChost, QCservice, QCfamily)
Kim F. Storm <storm@cua.dk>
parents:
43642
diff
changeset
|
2528 { |
7ec801358b7e
(Qlocal, QCname, QCbuffer, QChost, QCservice, QCfamily)
Kim F. Storm <storm@cua.dk>
parents:
43642
diff
changeset
|
2529 p = XVECTOR (address); |
7ec801358b7e
(Qlocal, QCname, QCbuffer, QChost, QCservice, QCfamily)
Kim F. Storm <storm@cua.dk>
parents:
43642
diff
changeset
|
2530 if (family == AF_INET) |
7ec801358b7e
(Qlocal, QCname, QCbuffer, QChost, QCservice, QCfamily)
Kim F. Storm <storm@cua.dk>
parents:
43642
diff
changeset
|
2531 { |
7ec801358b7e
(Qlocal, QCname, QCbuffer, QChost, QCservice, QCfamily)
Kim F. Storm <storm@cua.dk>
parents:
43642
diff
changeset
|
2532 struct sockaddr_in *sin = (struct sockaddr_in *) sa; |
7ec801358b7e
(Qlocal, QCname, QCbuffer, QChost, QCservice, QCfamily)
Kim F. Storm <storm@cua.dk>
parents:
43642
diff
changeset
|
2533 len = sizeof (sin->sin_addr) + 1; |
7ec801358b7e
(Qlocal, QCname, QCbuffer, QChost, QCservice, QCfamily)
Kim F. Storm <storm@cua.dk>
parents:
43642
diff
changeset
|
2534 i = XINT (p->contents[--len]); |
7ec801358b7e
(Qlocal, QCname, QCbuffer, QChost, QCservice, QCfamily)
Kim F. Storm <storm@cua.dk>
parents:
43642
diff
changeset
|
2535 sin->sin_port = htons (i); |
7ec801358b7e
(Qlocal, QCname, QCbuffer, QChost, QCservice, QCfamily)
Kim F. Storm <storm@cua.dk>
parents:
43642
diff
changeset
|
2536 cp = (unsigned char *)&sin->sin_addr; |
69981
9fb9e33ecf2d
(conv_lisp_to_sockaddr): Fix previous change.
Richard M. Stallman <rms@gnu.org>
parents:
69974
diff
changeset
|
2537 sa->sa_family = family; |
43968
7ec801358b7e
(Qlocal, QCname, QCbuffer, QChost, QCservice, QCfamily)
Kim F. Storm <storm@cua.dk>
parents:
43642
diff
changeset
|
2538 } |
68008 | 2539 #ifdef AF_INET6 |
2540 else if (family == AF_INET6) | |
2541 { | |
2542 struct sockaddr_in6 *sin6 = (struct sockaddr_in6 *) sa; | |
2543 uint16_t *ip6 = (uint16_t *)&sin6->sin6_addr; | |
2544 len = sizeof (sin6->sin6_addr) + 1; | |
2545 i = XINT (p->contents[--len]); | |
2546 sin6->sin6_port = htons (i); | |
2547 for (i = 0; i < len; i++) | |
2548 if (INTEGERP (p->contents[i])) | |
2549 { | |
2550 int j = XFASTINT (p->contents[i]) & 0xffff; | |
2551 ip6[i] = ntohs (j); | |
2552 } | |
69981
9fb9e33ecf2d
(conv_lisp_to_sockaddr): Fix previous change.
Richard M. Stallman <rms@gnu.org>
parents:
69974
diff
changeset
|
2553 sa->sa_family = family; |
108935
44a0c766b765
* process.c (conv_lisp_to_sockaddr): Fix conversion of IPv4
Andreas Schwab <schwab@linux-m68k.org>
parents:
106815
diff
changeset
|
2554 return; |
68008 | 2555 } |
2556 #endif | |
108935
44a0c766b765
* process.c (conv_lisp_to_sockaddr): Fix conversion of IPv4
Andreas Schwab <schwab@linux-m68k.org>
parents:
106815
diff
changeset
|
2557 else |
44a0c766b765
* process.c (conv_lisp_to_sockaddr): Fix conversion of IPv4
Andreas Schwab <schwab@linux-m68k.org>
parents:
106815
diff
changeset
|
2558 return; |
43968
7ec801358b7e
(Qlocal, QCname, QCbuffer, QChost, QCservice, QCfamily)
Kim F. Storm <storm@cua.dk>
parents:
43642
diff
changeset
|
2559 } |
7ec801358b7e
(Qlocal, QCname, QCbuffer, QChost, QCservice, QCfamily)
Kim F. Storm <storm@cua.dk>
parents:
43642
diff
changeset
|
2560 else if (STRINGP (address)) |
7ec801358b7e
(Qlocal, QCname, QCbuffer, QChost, QCservice, QCfamily)
Kim F. Storm <storm@cua.dk>
parents:
43642
diff
changeset
|
2561 { |
7ec801358b7e
(Qlocal, QCname, QCbuffer, QChost, QCservice, QCfamily)
Kim F. Storm <storm@cua.dk>
parents:
43642
diff
changeset
|
2562 #ifdef HAVE_LOCAL_SOCKETS |
7ec801358b7e
(Qlocal, QCname, QCbuffer, QChost, QCservice, QCfamily)
Kim F. Storm <storm@cua.dk>
parents:
43642
diff
changeset
|
2563 if (family == AF_LOCAL) |
7ec801358b7e
(Qlocal, QCname, QCbuffer, QChost, QCservice, QCfamily)
Kim F. Storm <storm@cua.dk>
parents:
43642
diff
changeset
|
2564 { |
44038
e2339254ba48
(conv_sockaddr_to_lisp, conv_lisp_to_sockaddr): Don't
Eli Zaretskii <eliz@gnu.org>
parents:
44013
diff
changeset
|
2565 struct sockaddr_un *sockun = (struct sockaddr_un *) sa; |
46370
40db0673e6f0
Most uses of XSTRING combined with STRING_BYTES or indirection changed to
Ken Raeburn <raeburn@raeburn.org>
parents:
46314
diff
changeset
|
2566 cp = SDATA (address); |
44038
e2339254ba48
(conv_sockaddr_to_lisp, conv_lisp_to_sockaddr): Don't
Eli Zaretskii <eliz@gnu.org>
parents:
44013
diff
changeset
|
2567 for (i = 0; i < sizeof (sockun->sun_path) && *cp; i++) |
e2339254ba48
(conv_sockaddr_to_lisp, conv_lisp_to_sockaddr): Don't
Eli Zaretskii <eliz@gnu.org>
parents:
44013
diff
changeset
|
2568 sockun->sun_path[i] = *cp++; |
69981
9fb9e33ecf2d
(conv_lisp_to_sockaddr): Fix previous change.
Richard M. Stallman <rms@gnu.org>
parents:
69974
diff
changeset
|
2569 sa->sa_family = family; |
43968
7ec801358b7e
(Qlocal, QCname, QCbuffer, QChost, QCservice, QCfamily)
Kim F. Storm <storm@cua.dk>
parents:
43642
diff
changeset
|
2570 } |
7ec801358b7e
(Qlocal, QCname, QCbuffer, QChost, QCservice, QCfamily)
Kim F. Storm <storm@cua.dk>
parents:
43642
diff
changeset
|
2571 #endif |
7ec801358b7e
(Qlocal, QCname, QCbuffer, QChost, QCservice, QCfamily)
Kim F. Storm <storm@cua.dk>
parents:
43642
diff
changeset
|
2572 return; |
7ec801358b7e
(Qlocal, QCname, QCbuffer, QChost, QCservice, QCfamily)
Kim F. Storm <storm@cua.dk>
parents:
43642
diff
changeset
|
2573 } |
7ec801358b7e
(Qlocal, QCname, QCbuffer, QChost, QCservice, QCfamily)
Kim F. Storm <storm@cua.dk>
parents:
43642
diff
changeset
|
2574 else |
7ec801358b7e
(Qlocal, QCname, QCbuffer, QChost, QCservice, QCfamily)
Kim F. Storm <storm@cua.dk>
parents:
43642
diff
changeset
|
2575 { |
7ec801358b7e
(Qlocal, QCname, QCbuffer, QChost, QCservice, QCfamily)
Kim F. Storm <storm@cua.dk>
parents:
43642
diff
changeset
|
2576 p = XVECTOR (XCDR (address)); |
7ec801358b7e
(Qlocal, QCname, QCbuffer, QChost, QCservice, QCfamily)
Kim F. Storm <storm@cua.dk>
parents:
43642
diff
changeset
|
2577 cp = (unsigned char *)sa + sizeof (sa->sa_family); |
7ec801358b7e
(Qlocal, QCname, QCbuffer, QChost, QCservice, QCfamily)
Kim F. Storm <storm@cua.dk>
parents:
43642
diff
changeset
|
2578 } |
7ec801358b7e
(Qlocal, QCname, QCbuffer, QChost, QCservice, QCfamily)
Kim F. Storm <storm@cua.dk>
parents:
43642
diff
changeset
|
2579 |
7ec801358b7e
(Qlocal, QCname, QCbuffer, QChost, QCservice, QCfamily)
Kim F. Storm <storm@cua.dk>
parents:
43642
diff
changeset
|
2580 for (i = 0; i < len; i++) |
7ec801358b7e
(Qlocal, QCname, QCbuffer, QChost, QCservice, QCfamily)
Kim F. Storm <storm@cua.dk>
parents:
43642
diff
changeset
|
2581 if (INTEGERP (p->contents[i])) |
7ec801358b7e
(Qlocal, QCname, QCbuffer, QChost, QCservice, QCfamily)
Kim F. Storm <storm@cua.dk>
parents:
43642
diff
changeset
|
2582 *cp++ = XFASTINT (p->contents[i]) & 0xff; |
7ec801358b7e
(Qlocal, QCname, QCbuffer, QChost, QCservice, QCfamily)
Kim F. Storm <storm@cua.dk>
parents:
43642
diff
changeset
|
2583 } |
7ec801358b7e
(Qlocal, QCname, QCbuffer, QChost, QCservice, QCfamily)
Kim F. Storm <storm@cua.dk>
parents:
43642
diff
changeset
|
2584 |
7ec801358b7e
(Qlocal, QCname, QCbuffer, QChost, QCservice, QCfamily)
Kim F. Storm <storm@cua.dk>
parents:
43642
diff
changeset
|
2585 #ifdef DATAGRAM_SOCKETS |
7ec801358b7e
(Qlocal, QCname, QCbuffer, QChost, QCservice, QCfamily)
Kim F. Storm <storm@cua.dk>
parents:
43642
diff
changeset
|
2586 DEFUN ("process-datagram-address", Fprocess_datagram_address, Sprocess_datagram_address, |
7ec801358b7e
(Qlocal, QCname, QCbuffer, QChost, QCservice, QCfamily)
Kim F. Storm <storm@cua.dk>
parents:
43642
diff
changeset
|
2587 1, 1, 0, |
7ec801358b7e
(Qlocal, QCname, QCbuffer, QChost, QCservice, QCfamily)
Kim F. Storm <storm@cua.dk>
parents:
43642
diff
changeset
|
2588 doc: /* Get the current datagram address associated with PROCESS. */) |
7ec801358b7e
(Qlocal, QCname, QCbuffer, QChost, QCservice, QCfamily)
Kim F. Storm <storm@cua.dk>
parents:
43642
diff
changeset
|
2589 (process) |
7ec801358b7e
(Qlocal, QCname, QCbuffer, QChost, QCservice, QCfamily)
Kim F. Storm <storm@cua.dk>
parents:
43642
diff
changeset
|
2590 Lisp_Object process; |
7ec801358b7e
(Qlocal, QCname, QCbuffer, QChost, QCservice, QCfamily)
Kim F. Storm <storm@cua.dk>
parents:
43642
diff
changeset
|
2591 { |
7ec801358b7e
(Qlocal, QCname, QCbuffer, QChost, QCservice, QCfamily)
Kim F. Storm <storm@cua.dk>
parents:
43642
diff
changeset
|
2592 int channel; |
7ec801358b7e
(Qlocal, QCname, QCbuffer, QChost, QCservice, QCfamily)
Kim F. Storm <storm@cua.dk>
parents:
43642
diff
changeset
|
2593 |
7ec801358b7e
(Qlocal, QCname, QCbuffer, QChost, QCservice, QCfamily)
Kim F. Storm <storm@cua.dk>
parents:
43642
diff
changeset
|
2594 CHECK_PROCESS (process); |
7ec801358b7e
(Qlocal, QCname, QCbuffer, QChost, QCservice, QCfamily)
Kim F. Storm <storm@cua.dk>
parents:
43642
diff
changeset
|
2595 |
7ec801358b7e
(Qlocal, QCname, QCbuffer, QChost, QCservice, QCfamily)
Kim F. Storm <storm@cua.dk>
parents:
43642
diff
changeset
|
2596 if (!DATAGRAM_CONN_P (process)) |
7ec801358b7e
(Qlocal, QCname, QCbuffer, QChost, QCservice, QCfamily)
Kim F. Storm <storm@cua.dk>
parents:
43642
diff
changeset
|
2597 return Qnil; |
7ec801358b7e
(Qlocal, QCname, QCbuffer, QChost, QCservice, QCfamily)
Kim F. Storm <storm@cua.dk>
parents:
43642
diff
changeset
|
2598 |
81826
077a1e6fd3f2
(struct Lisp_Process): Turn slots infd, outfd, kill_without_query, pty_flag,
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
80984
diff
changeset
|
2599 channel = XPROCESS (process)->infd; |
43968
7ec801358b7e
(Qlocal, QCname, QCbuffer, QChost, QCservice, QCfamily)
Kim F. Storm <storm@cua.dk>
parents:
43642
diff
changeset
|
2600 return conv_sockaddr_to_lisp (datagram_address[channel].sa, |
7ec801358b7e
(Qlocal, QCname, QCbuffer, QChost, QCservice, QCfamily)
Kim F. Storm <storm@cua.dk>
parents:
43642
diff
changeset
|
2601 datagram_address[channel].len); |
7ec801358b7e
(Qlocal, QCname, QCbuffer, QChost, QCservice, QCfamily)
Kim F. Storm <storm@cua.dk>
parents:
43642
diff
changeset
|
2602 } |
7ec801358b7e
(Qlocal, QCname, QCbuffer, QChost, QCservice, QCfamily)
Kim F. Storm <storm@cua.dk>
parents:
43642
diff
changeset
|
2603 |
7ec801358b7e
(Qlocal, QCname, QCbuffer, QChost, QCservice, QCfamily)
Kim F. Storm <storm@cua.dk>
parents:
43642
diff
changeset
|
2604 DEFUN ("set-process-datagram-address", Fset_process_datagram_address, Sset_process_datagram_address, |
7ec801358b7e
(Qlocal, QCname, QCbuffer, QChost, QCservice, QCfamily)
Kim F. Storm <storm@cua.dk>
parents:
43642
diff
changeset
|
2605 2, 2, 0, |
7ec801358b7e
(Qlocal, QCname, QCbuffer, QChost, QCservice, QCfamily)
Kim F. Storm <storm@cua.dk>
parents:
43642
diff
changeset
|
2606 doc: /* Set the datagram address for PROCESS to ADDRESS. |
7ec801358b7e
(Qlocal, QCname, QCbuffer, QChost, QCservice, QCfamily)
Kim F. Storm <storm@cua.dk>
parents:
43642
diff
changeset
|
2607 Returns nil upon error setting address, ADDRESS otherwise. */) |
7ec801358b7e
(Qlocal, QCname, QCbuffer, QChost, QCservice, QCfamily)
Kim F. Storm <storm@cua.dk>
parents:
43642
diff
changeset
|
2608 (process, address) |
7ec801358b7e
(Qlocal, QCname, QCbuffer, QChost, QCservice, QCfamily)
Kim F. Storm <storm@cua.dk>
parents:
43642
diff
changeset
|
2609 Lisp_Object process, address; |
7ec801358b7e
(Qlocal, QCname, QCbuffer, QChost, QCservice, QCfamily)
Kim F. Storm <storm@cua.dk>
parents:
43642
diff
changeset
|
2610 { |
7ec801358b7e
(Qlocal, QCname, QCbuffer, QChost, QCservice, QCfamily)
Kim F. Storm <storm@cua.dk>
parents:
43642
diff
changeset
|
2611 int channel; |
7ec801358b7e
(Qlocal, QCname, QCbuffer, QChost, QCservice, QCfamily)
Kim F. Storm <storm@cua.dk>
parents:
43642
diff
changeset
|
2612 int family, len; |
7ec801358b7e
(Qlocal, QCname, QCbuffer, QChost, QCservice, QCfamily)
Kim F. Storm <storm@cua.dk>
parents:
43642
diff
changeset
|
2613 |
7ec801358b7e
(Qlocal, QCname, QCbuffer, QChost, QCservice, QCfamily)
Kim F. Storm <storm@cua.dk>
parents:
43642
diff
changeset
|
2614 CHECK_PROCESS (process); |
7ec801358b7e
(Qlocal, QCname, QCbuffer, QChost, QCservice, QCfamily)
Kim F. Storm <storm@cua.dk>
parents:
43642
diff
changeset
|
2615 |
7ec801358b7e
(Qlocal, QCname, QCbuffer, QChost, QCservice, QCfamily)
Kim F. Storm <storm@cua.dk>
parents:
43642
diff
changeset
|
2616 if (!DATAGRAM_CONN_P (process)) |
7ec801358b7e
(Qlocal, QCname, QCbuffer, QChost, QCservice, QCfamily)
Kim F. Storm <storm@cua.dk>
parents:
43642
diff
changeset
|
2617 return Qnil; |
7ec801358b7e
(Qlocal, QCname, QCbuffer, QChost, QCservice, QCfamily)
Kim F. Storm <storm@cua.dk>
parents:
43642
diff
changeset
|
2618 |
81826
077a1e6fd3f2
(struct Lisp_Process): Turn slots infd, outfd, kill_without_query, pty_flag,
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
80984
diff
changeset
|
2619 channel = XPROCESS (process)->infd; |
43968
7ec801358b7e
(Qlocal, QCname, QCbuffer, QChost, QCservice, QCfamily)
Kim F. Storm <storm@cua.dk>
parents:
43642
diff
changeset
|
2620 |
7ec801358b7e
(Qlocal, QCname, QCbuffer, QChost, QCservice, QCfamily)
Kim F. Storm <storm@cua.dk>
parents:
43642
diff
changeset
|
2621 len = get_lisp_to_sockaddr_size (address, &family); |
7ec801358b7e
(Qlocal, QCname, QCbuffer, QChost, QCservice, QCfamily)
Kim F. Storm <storm@cua.dk>
parents:
43642
diff
changeset
|
2622 if (datagram_address[channel].len != len) |
7ec801358b7e
(Qlocal, QCname, QCbuffer, QChost, QCservice, QCfamily)
Kim F. Storm <storm@cua.dk>
parents:
43642
diff
changeset
|
2623 return Qnil; |
7ec801358b7e
(Qlocal, QCname, QCbuffer, QChost, QCservice, QCfamily)
Kim F. Storm <storm@cua.dk>
parents:
43642
diff
changeset
|
2624 conv_lisp_to_sockaddr (family, address, datagram_address[channel].sa, len); |
7ec801358b7e
(Qlocal, QCname, QCbuffer, QChost, QCservice, QCfamily)
Kim F. Storm <storm@cua.dk>
parents:
43642
diff
changeset
|
2625 return address; |
7ec801358b7e
(Qlocal, QCname, QCbuffer, QChost, QCservice, QCfamily)
Kim F. Storm <storm@cua.dk>
parents:
43642
diff
changeset
|
2626 } |
7ec801358b7e
(Qlocal, QCname, QCbuffer, QChost, QCservice, QCfamily)
Kim F. Storm <storm@cua.dk>
parents:
43642
diff
changeset
|
2627 #endif |
7ec801358b7e
(Qlocal, QCname, QCbuffer, QChost, QCservice, QCfamily)
Kim F. Storm <storm@cua.dk>
parents:
43642
diff
changeset
|
2628 |
7ec801358b7e
(Qlocal, QCname, QCbuffer, QChost, QCservice, QCfamily)
Kim F. Storm <storm@cua.dk>
parents:
43642
diff
changeset
|
2629 |
105872
89183b6f6e9d
* process.c (socket_options): Make it const.
Dan Nicolaescu <dann@ics.uci.edu>
parents:
105672
diff
changeset
|
2630 static const struct socket_options { |
43968
7ec801358b7e
(Qlocal, QCname, QCbuffer, QChost, QCservice, QCfamily)
Kim F. Storm <storm@cua.dk>
parents:
43642
diff
changeset
|
2631 /* The name of this option. Should be lowercase version of option |
49600
23a1cea22d13
Trailing whitespace deleted.
Juanma Barranquero <lekktu@gmail.com>
parents:
49281
diff
changeset
|
2632 name without SO_ prefix. */ |
43968
7ec801358b7e
(Qlocal, QCname, QCbuffer, QChost, QCservice, QCfamily)
Kim F. Storm <storm@cua.dk>
parents:
43642
diff
changeset
|
2633 char *name; |
7ec801358b7e
(Qlocal, QCname, QCbuffer, QChost, QCservice, QCfamily)
Kim F. Storm <storm@cua.dk>
parents:
43642
diff
changeset
|
2634 /* Option level SOL_... */ |
7ec801358b7e
(Qlocal, QCname, QCbuffer, QChost, QCservice, QCfamily)
Kim F. Storm <storm@cua.dk>
parents:
43642
diff
changeset
|
2635 int optlevel; |
7ec801358b7e
(Qlocal, QCname, QCbuffer, QChost, QCservice, QCfamily)
Kim F. Storm <storm@cua.dk>
parents:
43642
diff
changeset
|
2636 /* Option number SO_... */ |
7ec801358b7e
(Qlocal, QCname, QCbuffer, QChost, QCservice, QCfamily)
Kim F. Storm <storm@cua.dk>
parents:
43642
diff
changeset
|
2637 int optnum; |
52594
d03629d1d293
(set_socket_option): Fix :bindtodevice option.
Kim F. Storm <storm@cua.dk>
parents:
52591
diff
changeset
|
2638 enum { SOPT_UNKNOWN, SOPT_BOOL, SOPT_INT, SOPT_IFNAME, SOPT_LINGER } opttype; |
52516
0ca23eb697b9
(Fset_process_sentinel): Add sentinel to childp plist
Kim F. Storm <storm@cua.dk>
parents:
52503
diff
changeset
|
2639 enum { OPIX_NONE=0, OPIX_MISC=1, OPIX_REUSEADDR=2 } optbit; |
43968
7ec801358b7e
(Qlocal, QCname, QCbuffer, QChost, QCservice, QCfamily)
Kim F. Storm <storm@cua.dk>
parents:
43642
diff
changeset
|
2640 } socket_options[] = |
7ec801358b7e
(Qlocal, QCname, QCbuffer, QChost, QCservice, QCfamily)
Kim F. Storm <storm@cua.dk>
parents:
43642
diff
changeset
|
2641 { |
7ec801358b7e
(Qlocal, QCname, QCbuffer, QChost, QCservice, QCfamily)
Kim F. Storm <storm@cua.dk>
parents:
43642
diff
changeset
|
2642 #ifdef SO_BINDTODEVICE |
52594
d03629d1d293
(set_socket_option): Fix :bindtodevice option.
Kim F. Storm <storm@cua.dk>
parents:
52591
diff
changeset
|
2643 { ":bindtodevice", SOL_SOCKET, SO_BINDTODEVICE, SOPT_IFNAME, OPIX_MISC }, |
43968
7ec801358b7e
(Qlocal, QCname, QCbuffer, QChost, QCservice, QCfamily)
Kim F. Storm <storm@cua.dk>
parents:
43642
diff
changeset
|
2644 #endif |
7ec801358b7e
(Qlocal, QCname, QCbuffer, QChost, QCservice, QCfamily)
Kim F. Storm <storm@cua.dk>
parents:
43642
diff
changeset
|
2645 #ifdef SO_BROADCAST |
52516
0ca23eb697b9
(Fset_process_sentinel): Add sentinel to childp plist
Kim F. Storm <storm@cua.dk>
parents:
52503
diff
changeset
|
2646 { ":broadcast", SOL_SOCKET, SO_BROADCAST, SOPT_BOOL, OPIX_MISC }, |
43968
7ec801358b7e
(Qlocal, QCname, QCbuffer, QChost, QCservice, QCfamily)
Kim F. Storm <storm@cua.dk>
parents:
43642
diff
changeset
|
2647 #endif |
7ec801358b7e
(Qlocal, QCname, QCbuffer, QChost, QCservice, QCfamily)
Kim F. Storm <storm@cua.dk>
parents:
43642
diff
changeset
|
2648 #ifdef SO_DONTROUTE |
52516
0ca23eb697b9
(Fset_process_sentinel): Add sentinel to childp plist
Kim F. Storm <storm@cua.dk>
parents:
52503
diff
changeset
|
2649 { ":dontroute", SOL_SOCKET, SO_DONTROUTE, SOPT_BOOL, OPIX_MISC }, |
43968
7ec801358b7e
(Qlocal, QCname, QCbuffer, QChost, QCservice, QCfamily)
Kim F. Storm <storm@cua.dk>
parents:
43642
diff
changeset
|
2650 #endif |
7ec801358b7e
(Qlocal, QCname, QCbuffer, QChost, QCservice, QCfamily)
Kim F. Storm <storm@cua.dk>
parents:
43642
diff
changeset
|
2651 #ifdef SO_KEEPALIVE |
52516
0ca23eb697b9
(Fset_process_sentinel): Add sentinel to childp plist
Kim F. Storm <storm@cua.dk>
parents:
52503
diff
changeset
|
2652 { ":keepalive", SOL_SOCKET, SO_KEEPALIVE, SOPT_BOOL, OPIX_MISC }, |
43968
7ec801358b7e
(Qlocal, QCname, QCbuffer, QChost, QCservice, QCfamily)
Kim F. Storm <storm@cua.dk>
parents:
43642
diff
changeset
|
2653 #endif |
7ec801358b7e
(Qlocal, QCname, QCbuffer, QChost, QCservice, QCfamily)
Kim F. Storm <storm@cua.dk>
parents:
43642
diff
changeset
|
2654 #ifdef SO_LINGER |
52516
0ca23eb697b9
(Fset_process_sentinel): Add sentinel to childp plist
Kim F. Storm <storm@cua.dk>
parents:
52503
diff
changeset
|
2655 { ":linger", SOL_SOCKET, SO_LINGER, SOPT_LINGER, OPIX_MISC }, |
43968
7ec801358b7e
(Qlocal, QCname, QCbuffer, QChost, QCservice, QCfamily)
Kim F. Storm <storm@cua.dk>
parents:
43642
diff
changeset
|
2656 #endif |
7ec801358b7e
(Qlocal, QCname, QCbuffer, QChost, QCservice, QCfamily)
Kim F. Storm <storm@cua.dk>
parents:
43642
diff
changeset
|
2657 #ifdef SO_OOBINLINE |
52516
0ca23eb697b9
(Fset_process_sentinel): Add sentinel to childp plist
Kim F. Storm <storm@cua.dk>
parents:
52503
diff
changeset
|
2658 { ":oobinline", SOL_SOCKET, SO_OOBINLINE, SOPT_BOOL, OPIX_MISC }, |
43968
7ec801358b7e
(Qlocal, QCname, QCbuffer, QChost, QCservice, QCfamily)
Kim F. Storm <storm@cua.dk>
parents:
43642
diff
changeset
|
2659 #endif |
7ec801358b7e
(Qlocal, QCname, QCbuffer, QChost, QCservice, QCfamily)
Kim F. Storm <storm@cua.dk>
parents:
43642
diff
changeset
|
2660 #ifdef SO_PRIORITY |
52516
0ca23eb697b9
(Fset_process_sentinel): Add sentinel to childp plist
Kim F. Storm <storm@cua.dk>
parents:
52503
diff
changeset
|
2661 { ":priority", SOL_SOCKET, SO_PRIORITY, SOPT_INT, OPIX_MISC }, |
43968
7ec801358b7e
(Qlocal, QCname, QCbuffer, QChost, QCservice, QCfamily)
Kim F. Storm <storm@cua.dk>
parents:
43642
diff
changeset
|
2662 #endif |
7ec801358b7e
(Qlocal, QCname, QCbuffer, QChost, QCservice, QCfamily)
Kim F. Storm <storm@cua.dk>
parents:
43642
diff
changeset
|
2663 #ifdef SO_REUSEADDR |
52516
0ca23eb697b9
(Fset_process_sentinel): Add sentinel to childp plist
Kim F. Storm <storm@cua.dk>
parents:
52503
diff
changeset
|
2664 { ":reuseaddr", SOL_SOCKET, SO_REUSEADDR, SOPT_BOOL, OPIX_REUSEADDR }, |
0ca23eb697b9
(Fset_process_sentinel): Add sentinel to childp plist
Kim F. Storm <storm@cua.dk>
parents:
52503
diff
changeset
|
2665 #endif |
0ca23eb697b9
(Fset_process_sentinel): Add sentinel to childp plist
Kim F. Storm <storm@cua.dk>
parents:
52503
diff
changeset
|
2666 { 0, 0, 0, SOPT_UNKNOWN, OPIX_NONE } |
43968
7ec801358b7e
(Qlocal, QCname, QCbuffer, QChost, QCservice, QCfamily)
Kim F. Storm <storm@cua.dk>
parents:
43642
diff
changeset
|
2667 }; |
7ec801358b7e
(Qlocal, QCname, QCbuffer, QChost, QCservice, QCfamily)
Kim F. Storm <storm@cua.dk>
parents:
43642
diff
changeset
|
2668 |
52516
0ca23eb697b9
(Fset_process_sentinel): Add sentinel to childp plist
Kim F. Storm <storm@cua.dk>
parents:
52503
diff
changeset
|
2669 /* Set option OPT to value VAL on socket S. |
0ca23eb697b9
(Fset_process_sentinel): Add sentinel to childp plist
Kim F. Storm <storm@cua.dk>
parents:
52503
diff
changeset
|
2670 |
0ca23eb697b9
(Fset_process_sentinel): Add sentinel to childp plist
Kim F. Storm <storm@cua.dk>
parents:
52503
diff
changeset
|
2671 Returns (1<<socket_options[OPT].optbit) if option is known, 0 otherwise. |
0ca23eb697b9
(Fset_process_sentinel): Add sentinel to childp plist
Kim F. Storm <storm@cua.dk>
parents:
52503
diff
changeset
|
2672 Signals an error if setting a known option fails. |
0ca23eb697b9
(Fset_process_sentinel): Add sentinel to childp plist
Kim F. Storm <storm@cua.dk>
parents:
52503
diff
changeset
|
2673 */ |
43968
7ec801358b7e
(Qlocal, QCname, QCbuffer, QChost, QCservice, QCfamily)
Kim F. Storm <storm@cua.dk>
parents:
43642
diff
changeset
|
2674 |
7ec801358b7e
(Qlocal, QCname, QCbuffer, QChost, QCservice, QCfamily)
Kim F. Storm <storm@cua.dk>
parents:
43642
diff
changeset
|
2675 static int |
52516
0ca23eb697b9
(Fset_process_sentinel): Add sentinel to childp plist
Kim F. Storm <storm@cua.dk>
parents:
52503
diff
changeset
|
2676 set_socket_option (s, opt, val) |
43968
7ec801358b7e
(Qlocal, QCname, QCbuffer, QChost, QCservice, QCfamily)
Kim F. Storm <storm@cua.dk>
parents:
43642
diff
changeset
|
2677 int s; |
52516
0ca23eb697b9
(Fset_process_sentinel): Add sentinel to childp plist
Kim F. Storm <storm@cua.dk>
parents:
52503
diff
changeset
|
2678 Lisp_Object opt, val; |
43968
7ec801358b7e
(Qlocal, QCname, QCbuffer, QChost, QCservice, QCfamily)
Kim F. Storm <storm@cua.dk>
parents:
43642
diff
changeset
|
2679 { |
52516
0ca23eb697b9
(Fset_process_sentinel): Add sentinel to childp plist
Kim F. Storm <storm@cua.dk>
parents:
52503
diff
changeset
|
2680 char *name; |
105872
89183b6f6e9d
* process.c (socket_options): Make it const.
Dan Nicolaescu <dann@ics.uci.edu>
parents:
105672
diff
changeset
|
2681 const struct socket_options *sopt; |
52516
0ca23eb697b9
(Fset_process_sentinel): Add sentinel to childp plist
Kim F. Storm <storm@cua.dk>
parents:
52503
diff
changeset
|
2682 int ret = 0; |
0ca23eb697b9
(Fset_process_sentinel): Add sentinel to childp plist
Kim F. Storm <storm@cua.dk>
parents:
52503
diff
changeset
|
2683 |
0ca23eb697b9
(Fset_process_sentinel): Add sentinel to childp plist
Kim F. Storm <storm@cua.dk>
parents:
52503
diff
changeset
|
2684 CHECK_SYMBOL (opt); |
0ca23eb697b9
(Fset_process_sentinel): Add sentinel to childp plist
Kim F. Storm <storm@cua.dk>
parents:
52503
diff
changeset
|
2685 |
0ca23eb697b9
(Fset_process_sentinel): Add sentinel to childp plist
Kim F. Storm <storm@cua.dk>
parents:
52503
diff
changeset
|
2686 name = (char *) SDATA (SYMBOL_NAME (opt)); |
0ca23eb697b9
(Fset_process_sentinel): Add sentinel to childp plist
Kim F. Storm <storm@cua.dk>
parents:
52503
diff
changeset
|
2687 for (sopt = socket_options; sopt->name; sopt++) |
0ca23eb697b9
(Fset_process_sentinel): Add sentinel to childp plist
Kim F. Storm <storm@cua.dk>
parents:
52503
diff
changeset
|
2688 if (strcmp (name, sopt->name) == 0) |
0ca23eb697b9
(Fset_process_sentinel): Add sentinel to childp plist
Kim F. Storm <storm@cua.dk>
parents:
52503
diff
changeset
|
2689 break; |
0ca23eb697b9
(Fset_process_sentinel): Add sentinel to childp plist
Kim F. Storm <storm@cua.dk>
parents:
52503
diff
changeset
|
2690 |
0ca23eb697b9
(Fset_process_sentinel): Add sentinel to childp plist
Kim F. Storm <storm@cua.dk>
parents:
52503
diff
changeset
|
2691 switch (sopt->opttype) |
43968
7ec801358b7e
(Qlocal, QCname, QCbuffer, QChost, QCservice, QCfamily)
Kim F. Storm <storm@cua.dk>
parents:
43642
diff
changeset
|
2692 { |
52516
0ca23eb697b9
(Fset_process_sentinel): Add sentinel to childp plist
Kim F. Storm <storm@cua.dk>
parents:
52503
diff
changeset
|
2693 case SOPT_BOOL: |
0ca23eb697b9
(Fset_process_sentinel): Add sentinel to childp plist
Kim F. Storm <storm@cua.dk>
parents:
52503
diff
changeset
|
2694 { |
0ca23eb697b9
(Fset_process_sentinel): Add sentinel to childp plist
Kim F. Storm <storm@cua.dk>
parents:
52503
diff
changeset
|
2695 int optval; |
0ca23eb697b9
(Fset_process_sentinel): Add sentinel to childp plist
Kim F. Storm <storm@cua.dk>
parents:
52503
diff
changeset
|
2696 optval = NILP (val) ? 0 : 1; |
0ca23eb697b9
(Fset_process_sentinel): Add sentinel to childp plist
Kim F. Storm <storm@cua.dk>
parents:
52503
diff
changeset
|
2697 ret = setsockopt (s, sopt->optlevel, sopt->optnum, |
0ca23eb697b9
(Fset_process_sentinel): Add sentinel to childp plist
Kim F. Storm <storm@cua.dk>
parents:
52503
diff
changeset
|
2698 &optval, sizeof (optval)); |
0ca23eb697b9
(Fset_process_sentinel): Add sentinel to childp plist
Kim F. Storm <storm@cua.dk>
parents:
52503
diff
changeset
|
2699 break; |
43968
7ec801358b7e
(Qlocal, QCname, QCbuffer, QChost, QCservice, QCfamily)
Kim F. Storm <storm@cua.dk>
parents:
43642
diff
changeset
|
2700 } |
7ec801358b7e
(Qlocal, QCname, QCbuffer, QChost, QCservice, QCfamily)
Kim F. Storm <storm@cua.dk>
parents:
43642
diff
changeset
|
2701 |
52516
0ca23eb697b9
(Fset_process_sentinel): Add sentinel to childp plist
Kim F. Storm <storm@cua.dk>
parents:
52503
diff
changeset
|
2702 case SOPT_INT: |
0ca23eb697b9
(Fset_process_sentinel): Add sentinel to childp plist
Kim F. Storm <storm@cua.dk>
parents:
52503
diff
changeset
|
2703 { |
0ca23eb697b9
(Fset_process_sentinel): Add sentinel to childp plist
Kim F. Storm <storm@cua.dk>
parents:
52503
diff
changeset
|
2704 int optval; |
0ca23eb697b9
(Fset_process_sentinel): Add sentinel to childp plist
Kim F. Storm <storm@cua.dk>
parents:
52503
diff
changeset
|
2705 if (INTEGERP (val)) |
0ca23eb697b9
(Fset_process_sentinel): Add sentinel to childp plist
Kim F. Storm <storm@cua.dk>
parents:
52503
diff
changeset
|
2706 optval = XINT (val); |
0ca23eb697b9
(Fset_process_sentinel): Add sentinel to childp plist
Kim F. Storm <storm@cua.dk>
parents:
52503
diff
changeset
|
2707 else |
0ca23eb697b9
(Fset_process_sentinel): Add sentinel to childp plist
Kim F. Storm <storm@cua.dk>
parents:
52503
diff
changeset
|
2708 error ("Bad option value for %s", name); |
0ca23eb697b9
(Fset_process_sentinel): Add sentinel to childp plist
Kim F. Storm <storm@cua.dk>
parents:
52503
diff
changeset
|
2709 ret = setsockopt (s, sopt->optlevel, sopt->optnum, |
0ca23eb697b9
(Fset_process_sentinel): Add sentinel to childp plist
Kim F. Storm <storm@cua.dk>
parents:
52503
diff
changeset
|
2710 &optval, sizeof (optval)); |
0ca23eb697b9
(Fset_process_sentinel): Add sentinel to childp plist
Kim F. Storm <storm@cua.dk>
parents:
52503
diff
changeset
|
2711 break; |
0ca23eb697b9
(Fset_process_sentinel): Add sentinel to childp plist
Kim F. Storm <storm@cua.dk>
parents:
52503
diff
changeset
|
2712 } |
0ca23eb697b9
(Fset_process_sentinel): Add sentinel to childp plist
Kim F. Storm <storm@cua.dk>
parents:
52503
diff
changeset
|
2713 |
52594
d03629d1d293
(set_socket_option): Fix :bindtodevice option.
Kim F. Storm <storm@cua.dk>
parents:
52591
diff
changeset
|
2714 #ifdef SO_BINDTODEVICE |
d03629d1d293
(set_socket_option): Fix :bindtodevice option.
Kim F. Storm <storm@cua.dk>
parents:
52591
diff
changeset
|
2715 case SOPT_IFNAME: |
52516
0ca23eb697b9
(Fset_process_sentinel): Add sentinel to childp plist
Kim F. Storm <storm@cua.dk>
parents:
52503
diff
changeset
|
2716 { |
52594
d03629d1d293
(set_socket_option): Fix :bindtodevice option.
Kim F. Storm <storm@cua.dk>
parents:
52591
diff
changeset
|
2717 char devname[IFNAMSIZ+1]; |
d03629d1d293
(set_socket_option): Fix :bindtodevice option.
Kim F. Storm <storm@cua.dk>
parents:
52591
diff
changeset
|
2718 |
d03629d1d293
(set_socket_option): Fix :bindtodevice option.
Kim F. Storm <storm@cua.dk>
parents:
52591
diff
changeset
|
2719 /* This is broken, at least in the Linux 2.4 kernel. |
d03629d1d293
(set_socket_option): Fix :bindtodevice option.
Kim F. Storm <storm@cua.dk>
parents:
52591
diff
changeset
|
2720 To unbind, the arg must be a zero integer, not the empty string. |
d03629d1d293
(set_socket_option): Fix :bindtodevice option.
Kim F. Storm <storm@cua.dk>
parents:
52591
diff
changeset
|
2721 This should work on all systems. KFS. 2003-09-23. */ |
d03629d1d293
(set_socket_option): Fix :bindtodevice option.
Kim F. Storm <storm@cua.dk>
parents:
52591
diff
changeset
|
2722 bzero (devname, sizeof devname); |
d03629d1d293
(set_socket_option): Fix :bindtodevice option.
Kim F. Storm <storm@cua.dk>
parents:
52591
diff
changeset
|
2723 if (STRINGP (val)) |
d03629d1d293
(set_socket_option): Fix :bindtodevice option.
Kim F. Storm <storm@cua.dk>
parents:
52591
diff
changeset
|
2724 { |
d03629d1d293
(set_socket_option): Fix :bindtodevice option.
Kim F. Storm <storm@cua.dk>
parents:
52591
diff
changeset
|
2725 char *arg = (char *) SDATA (val); |
d03629d1d293
(set_socket_option): Fix :bindtodevice option.
Kim F. Storm <storm@cua.dk>
parents:
52591
diff
changeset
|
2726 int len = min (strlen (arg), IFNAMSIZ); |
d03629d1d293
(set_socket_option): Fix :bindtodevice option.
Kim F. Storm <storm@cua.dk>
parents:
52591
diff
changeset
|
2727 bcopy (arg, devname, len); |
d03629d1d293
(set_socket_option): Fix :bindtodevice option.
Kim F. Storm <storm@cua.dk>
parents:
52591
diff
changeset
|
2728 } |
d03629d1d293
(set_socket_option): Fix :bindtodevice option.
Kim F. Storm <storm@cua.dk>
parents:
52591
diff
changeset
|
2729 else if (!NILP (val)) |
52516
0ca23eb697b9
(Fset_process_sentinel): Add sentinel to childp plist
Kim F. Storm <storm@cua.dk>
parents:
52503
diff
changeset
|
2730 error ("Bad option value for %s", name); |
0ca23eb697b9
(Fset_process_sentinel): Add sentinel to childp plist
Kim F. Storm <storm@cua.dk>
parents:
52503
diff
changeset
|
2731 ret = setsockopt (s, sopt->optlevel, sopt->optnum, |
52594
d03629d1d293
(set_socket_option): Fix :bindtodevice option.
Kim F. Storm <storm@cua.dk>
parents:
52591
diff
changeset
|
2732 devname, IFNAMSIZ); |
d03629d1d293
(set_socket_option): Fix :bindtodevice option.
Kim F. Storm <storm@cua.dk>
parents:
52591
diff
changeset
|
2733 break; |
52516
0ca23eb697b9
(Fset_process_sentinel): Add sentinel to childp plist
Kim F. Storm <storm@cua.dk>
parents:
52503
diff
changeset
|
2734 } |
52594
d03629d1d293
(set_socket_option): Fix :bindtodevice option.
Kim F. Storm <storm@cua.dk>
parents:
52591
diff
changeset
|
2735 #endif |
43968
7ec801358b7e
(Qlocal, QCname, QCbuffer, QChost, QCservice, QCfamily)
Kim F. Storm <storm@cua.dk>
parents:
43642
diff
changeset
|
2736 |
49600
23a1cea22d13
Trailing whitespace deleted.
Juanma Barranquero <lekktu@gmail.com>
parents:
49281
diff
changeset
|
2737 #ifdef SO_LINGER |
52516
0ca23eb697b9
(Fset_process_sentinel): Add sentinel to childp plist
Kim F. Storm <storm@cua.dk>
parents:
52503
diff
changeset
|
2738 case SOPT_LINGER: |
0ca23eb697b9
(Fset_process_sentinel): Add sentinel to childp plist
Kim F. Storm <storm@cua.dk>
parents:
52503
diff
changeset
|
2739 { |
0ca23eb697b9
(Fset_process_sentinel): Add sentinel to childp plist
Kim F. Storm <storm@cua.dk>
parents:
52503
diff
changeset
|
2740 struct linger linger; |
0ca23eb697b9
(Fset_process_sentinel): Add sentinel to childp plist
Kim F. Storm <storm@cua.dk>
parents:
52503
diff
changeset
|
2741 |
0ca23eb697b9
(Fset_process_sentinel): Add sentinel to childp plist
Kim F. Storm <storm@cua.dk>
parents:
52503
diff
changeset
|
2742 linger.l_onoff = 1; |
0ca23eb697b9
(Fset_process_sentinel): Add sentinel to childp plist
Kim F. Storm <storm@cua.dk>
parents:
52503
diff
changeset
|
2743 linger.l_linger = 0; |
0ca23eb697b9
(Fset_process_sentinel): Add sentinel to childp plist
Kim F. Storm <storm@cua.dk>
parents:
52503
diff
changeset
|
2744 if (INTEGERP (val)) |
0ca23eb697b9
(Fset_process_sentinel): Add sentinel to childp plist
Kim F. Storm <storm@cua.dk>
parents:
52503
diff
changeset
|
2745 linger.l_linger = XINT (val); |
0ca23eb697b9
(Fset_process_sentinel): Add sentinel to childp plist
Kim F. Storm <storm@cua.dk>
parents:
52503
diff
changeset
|
2746 else |
0ca23eb697b9
(Fset_process_sentinel): Add sentinel to childp plist
Kim F. Storm <storm@cua.dk>
parents:
52503
diff
changeset
|
2747 linger.l_onoff = NILP (val) ? 0 : 1; |
0ca23eb697b9
(Fset_process_sentinel): Add sentinel to childp plist
Kim F. Storm <storm@cua.dk>
parents:
52503
diff
changeset
|
2748 ret = setsockopt (s, sopt->optlevel, sopt->optnum, |
0ca23eb697b9
(Fset_process_sentinel): Add sentinel to childp plist
Kim F. Storm <storm@cua.dk>
parents:
52503
diff
changeset
|
2749 &linger, sizeof (linger)); |
0ca23eb697b9
(Fset_process_sentinel): Add sentinel to childp plist
Kim F. Storm <storm@cua.dk>
parents:
52503
diff
changeset
|
2750 break; |
0ca23eb697b9
(Fset_process_sentinel): Add sentinel to childp plist
Kim F. Storm <storm@cua.dk>
parents:
52503
diff
changeset
|
2751 } |
0ca23eb697b9
(Fset_process_sentinel): Add sentinel to childp plist
Kim F. Storm <storm@cua.dk>
parents:
52503
diff
changeset
|
2752 #endif |
0ca23eb697b9
(Fset_process_sentinel): Add sentinel to childp plist
Kim F. Storm <storm@cua.dk>
parents:
52503
diff
changeset
|
2753 |
0ca23eb697b9
(Fset_process_sentinel): Add sentinel to childp plist
Kim F. Storm <storm@cua.dk>
parents:
52503
diff
changeset
|
2754 default: |
0ca23eb697b9
(Fset_process_sentinel): Add sentinel to childp plist
Kim F. Storm <storm@cua.dk>
parents:
52503
diff
changeset
|
2755 return 0; |
43968
7ec801358b7e
(Qlocal, QCname, QCbuffer, QChost, QCservice, QCfamily)
Kim F. Storm <storm@cua.dk>
parents:
43642
diff
changeset
|
2756 } |
52516
0ca23eb697b9
(Fset_process_sentinel): Add sentinel to childp plist
Kim F. Storm <storm@cua.dk>
parents:
52503
diff
changeset
|
2757 |
0ca23eb697b9
(Fset_process_sentinel): Add sentinel to childp plist
Kim F. Storm <storm@cua.dk>
parents:
52503
diff
changeset
|
2758 if (ret < 0) |
0ca23eb697b9
(Fset_process_sentinel): Add sentinel to childp plist
Kim F. Storm <storm@cua.dk>
parents:
52503
diff
changeset
|
2759 report_file_error ("Cannot set network option", |
0ca23eb697b9
(Fset_process_sentinel): Add sentinel to childp plist
Kim F. Storm <storm@cua.dk>
parents:
52503
diff
changeset
|
2760 Fcons (opt, Fcons (val, Qnil))); |
0ca23eb697b9
(Fset_process_sentinel): Add sentinel to childp plist
Kim F. Storm <storm@cua.dk>
parents:
52503
diff
changeset
|
2761 return (1 << sopt->optbit); |
43968
7ec801358b7e
(Qlocal, QCname, QCbuffer, QChost, QCservice, QCfamily)
Kim F. Storm <storm@cua.dk>
parents:
43642
diff
changeset
|
2762 } |
7ec801358b7e
(Qlocal, QCname, QCbuffer, QChost, QCservice, QCfamily)
Kim F. Storm <storm@cua.dk>
parents:
43642
diff
changeset
|
2763 |
52516
0ca23eb697b9
(Fset_process_sentinel): Add sentinel to childp plist
Kim F. Storm <storm@cua.dk>
parents:
52503
diff
changeset
|
2764 |
0ca23eb697b9
(Fset_process_sentinel): Add sentinel to childp plist
Kim F. Storm <storm@cua.dk>
parents:
52503
diff
changeset
|
2765 DEFUN ("set-network-process-option", |
0ca23eb697b9
(Fset_process_sentinel): Add sentinel to childp plist
Kim F. Storm <storm@cua.dk>
parents:
52503
diff
changeset
|
2766 Fset_network_process_option, Sset_network_process_option, |
0ca23eb697b9
(Fset_process_sentinel): Add sentinel to childp plist
Kim F. Storm <storm@cua.dk>
parents:
52503
diff
changeset
|
2767 3, 4, 0, |
0ca23eb697b9
(Fset_process_sentinel): Add sentinel to childp plist
Kim F. Storm <storm@cua.dk>
parents:
52503
diff
changeset
|
2768 doc: /* For network process PROCESS set option OPTION to value VALUE. |
0ca23eb697b9
(Fset_process_sentinel): Add sentinel to childp plist
Kim F. Storm <storm@cua.dk>
parents:
52503
diff
changeset
|
2769 See `make-network-process' for a list of options and values. |
0ca23eb697b9
(Fset_process_sentinel): Add sentinel to childp plist
Kim F. Storm <storm@cua.dk>
parents:
52503
diff
changeset
|
2770 If optional fourth arg NO-ERROR is non-nil, don't signal an error if |
0ca23eb697b9
(Fset_process_sentinel): Add sentinel to childp plist
Kim F. Storm <storm@cua.dk>
parents:
52503
diff
changeset
|
2771 OPTION is not a supported option, return nil instead; otherwise return t. */) |
0ca23eb697b9
(Fset_process_sentinel): Add sentinel to childp plist
Kim F. Storm <storm@cua.dk>
parents:
52503
diff
changeset
|
2772 (process, option, value, no_error) |
0ca23eb697b9
(Fset_process_sentinel): Add sentinel to childp plist
Kim F. Storm <storm@cua.dk>
parents:
52503
diff
changeset
|
2773 Lisp_Object process, option, value; |
0ca23eb697b9
(Fset_process_sentinel): Add sentinel to childp plist
Kim F. Storm <storm@cua.dk>
parents:
52503
diff
changeset
|
2774 Lisp_Object no_error; |
43968
7ec801358b7e
(Qlocal, QCname, QCbuffer, QChost, QCservice, QCfamily)
Kim F. Storm <storm@cua.dk>
parents:
43642
diff
changeset
|
2775 { |
52527
3ea59ac8dfa5
(Fnetwork_interface_info): Fix type error.
Dave Love <fx@gnu.org>
parents:
52525
diff
changeset
|
2776 int s; |
52594
d03629d1d293
(set_socket_option): Fix :bindtodevice option.
Kim F. Storm <storm@cua.dk>
parents:
52591
diff
changeset
|
2777 struct Lisp_Process *p; |
52516
0ca23eb697b9
(Fset_process_sentinel): Add sentinel to childp plist
Kim F. Storm <storm@cua.dk>
parents:
52503
diff
changeset
|
2778 |
43968
7ec801358b7e
(Qlocal, QCname, QCbuffer, QChost, QCservice, QCfamily)
Kim F. Storm <storm@cua.dk>
parents:
43642
diff
changeset
|
2779 CHECK_PROCESS (process); |
52594
d03629d1d293
(set_socket_option): Fix :bindtodevice option.
Kim F. Storm <storm@cua.dk>
parents:
52591
diff
changeset
|
2780 p = XPROCESS (process); |
d03629d1d293
(set_socket_option): Fix :bindtodevice option.
Kim F. Storm <storm@cua.dk>
parents:
52591
diff
changeset
|
2781 if (!NETCONN1_P (p)) |
d03629d1d293
(set_socket_option): Fix :bindtodevice option.
Kim F. Storm <storm@cua.dk>
parents:
52591
diff
changeset
|
2782 error ("Process is not a network process"); |
d03629d1d293
(set_socket_option): Fix :bindtodevice option.
Kim F. Storm <storm@cua.dk>
parents:
52591
diff
changeset
|
2783 |
81826
077a1e6fd3f2
(struct Lisp_Process): Turn slots infd, outfd, kill_without_query, pty_flag,
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
80984
diff
changeset
|
2784 s = p->infd; |
52516
0ca23eb697b9
(Fset_process_sentinel): Add sentinel to childp plist
Kim F. Storm <storm@cua.dk>
parents:
52503
diff
changeset
|
2785 if (s < 0) |
0ca23eb697b9
(Fset_process_sentinel): Add sentinel to childp plist
Kim F. Storm <storm@cua.dk>
parents:
52503
diff
changeset
|
2786 error ("Process is not running"); |
0ca23eb697b9
(Fset_process_sentinel): Add sentinel to childp plist
Kim F. Storm <storm@cua.dk>
parents:
52503
diff
changeset
|
2787 |
0ca23eb697b9
(Fset_process_sentinel): Add sentinel to childp plist
Kim F. Storm <storm@cua.dk>
parents:
52503
diff
changeset
|
2788 if (set_socket_option (s, option, value)) |
52594
d03629d1d293
(set_socket_option): Fix :bindtodevice option.
Kim F. Storm <storm@cua.dk>
parents:
52591
diff
changeset
|
2789 { |
d03629d1d293
(set_socket_option): Fix :bindtodevice option.
Kim F. Storm <storm@cua.dk>
parents:
52591
diff
changeset
|
2790 p->childp = Fplist_put (p->childp, option, value); |
d03629d1d293
(set_socket_option): Fix :bindtodevice option.
Kim F. Storm <storm@cua.dk>
parents:
52591
diff
changeset
|
2791 return Qt; |
d03629d1d293
(set_socket_option): Fix :bindtodevice option.
Kim F. Storm <storm@cua.dk>
parents:
52591
diff
changeset
|
2792 } |
52516
0ca23eb697b9
(Fset_process_sentinel): Add sentinel to childp plist
Kim F. Storm <storm@cua.dk>
parents:
52503
diff
changeset
|
2793 |
0ca23eb697b9
(Fset_process_sentinel): Add sentinel to childp plist
Kim F. Storm <storm@cua.dk>
parents:
52503
diff
changeset
|
2794 if (NILP (no_error)) |
0ca23eb697b9
(Fset_process_sentinel): Add sentinel to childp plist
Kim F. Storm <storm@cua.dk>
parents:
52503
diff
changeset
|
2795 error ("Unknown or unsupported option"); |
0ca23eb697b9
(Fset_process_sentinel): Add sentinel to childp plist
Kim F. Storm <storm@cua.dk>
parents:
52503
diff
changeset
|
2796 |
0ca23eb697b9
(Fset_process_sentinel): Add sentinel to childp plist
Kim F. Storm <storm@cua.dk>
parents:
52503
diff
changeset
|
2797 return Qnil; |
43968
7ec801358b7e
(Qlocal, QCname, QCbuffer, QChost, QCservice, QCfamily)
Kim F. Storm <storm@cua.dk>
parents:
43642
diff
changeset
|
2798 } |
52516
0ca23eb697b9
(Fset_process_sentinel): Add sentinel to childp plist
Kim F. Storm <storm@cua.dk>
parents:
52503
diff
changeset
|
2799 |
43968
7ec801358b7e
(Qlocal, QCname, QCbuffer, QChost, QCservice, QCfamily)
Kim F. Storm <storm@cua.dk>
parents:
43642
diff
changeset
|
2800 |
95884
d6a4488883dc
Daniel Engeler <engeler at gmail.com>
Glenn Morris <rgm@gnu.org>
parents:
95387
diff
changeset
|
2801 #ifdef HAVE_SERIAL |
d6a4488883dc
Daniel Engeler <engeler at gmail.com>
Glenn Morris <rgm@gnu.org>
parents:
95387
diff
changeset
|
2802 DEFUN ("serial-process-configure", |
d6a4488883dc
Daniel Engeler <engeler at gmail.com>
Glenn Morris <rgm@gnu.org>
parents:
95387
diff
changeset
|
2803 Fserial_process_configure, |
d6a4488883dc
Daniel Engeler <engeler at gmail.com>
Glenn Morris <rgm@gnu.org>
parents:
95387
diff
changeset
|
2804 Sserial_process_configure, |
d6a4488883dc
Daniel Engeler <engeler at gmail.com>
Glenn Morris <rgm@gnu.org>
parents:
95387
diff
changeset
|
2805 0, MANY, 0, |
d6a4488883dc
Daniel Engeler <engeler at gmail.com>
Glenn Morris <rgm@gnu.org>
parents:
95387
diff
changeset
|
2806 doc: /* Configure speed, bytesize, etc. of a serial process. |
d6a4488883dc
Daniel Engeler <engeler at gmail.com>
Glenn Morris <rgm@gnu.org>
parents:
95387
diff
changeset
|
2807 |
d6a4488883dc
Daniel Engeler <engeler at gmail.com>
Glenn Morris <rgm@gnu.org>
parents:
95387
diff
changeset
|
2808 Arguments are specified as keyword/argument pairs. Attributes that |
d6a4488883dc
Daniel Engeler <engeler at gmail.com>
Glenn Morris <rgm@gnu.org>
parents:
95387
diff
changeset
|
2809 are not given are re-initialized from the process's current |
d6a4488883dc
Daniel Engeler <engeler at gmail.com>
Glenn Morris <rgm@gnu.org>
parents:
95387
diff
changeset
|
2810 configuration (available via the function `process-contact') or set to |
d6a4488883dc
Daniel Engeler <engeler at gmail.com>
Glenn Morris <rgm@gnu.org>
parents:
95387
diff
changeset
|
2811 reasonable default values. The following arguments are defined: |
d6a4488883dc
Daniel Engeler <engeler at gmail.com>
Glenn Morris <rgm@gnu.org>
parents:
95387
diff
changeset
|
2812 |
d6a4488883dc
Daniel Engeler <engeler at gmail.com>
Glenn Morris <rgm@gnu.org>
parents:
95387
diff
changeset
|
2813 :process PROCESS |
d6a4488883dc
Daniel Engeler <engeler at gmail.com>
Glenn Morris <rgm@gnu.org>
parents:
95387
diff
changeset
|
2814 :name NAME |
d6a4488883dc
Daniel Engeler <engeler at gmail.com>
Glenn Morris <rgm@gnu.org>
parents:
95387
diff
changeset
|
2815 :buffer BUFFER |
d6a4488883dc
Daniel Engeler <engeler at gmail.com>
Glenn Morris <rgm@gnu.org>
parents:
95387
diff
changeset
|
2816 :port PORT |
d6a4488883dc
Daniel Engeler <engeler at gmail.com>
Glenn Morris <rgm@gnu.org>
parents:
95387
diff
changeset
|
2817 -- Any of these arguments can be given to identify the process that is |
d6a4488883dc
Daniel Engeler <engeler at gmail.com>
Glenn Morris <rgm@gnu.org>
parents:
95387
diff
changeset
|
2818 to be configured. If none of these arguments is given, the current |
d6a4488883dc
Daniel Engeler <engeler at gmail.com>
Glenn Morris <rgm@gnu.org>
parents:
95387
diff
changeset
|
2819 buffer's process is used. |
d6a4488883dc
Daniel Engeler <engeler at gmail.com>
Glenn Morris <rgm@gnu.org>
parents:
95387
diff
changeset
|
2820 |
d6a4488883dc
Daniel Engeler <engeler at gmail.com>
Glenn Morris <rgm@gnu.org>
parents:
95387
diff
changeset
|
2821 :speed SPEED -- SPEED is the speed of the serial port in bits per |
d6a4488883dc
Daniel Engeler <engeler at gmail.com>
Glenn Morris <rgm@gnu.org>
parents:
95387
diff
changeset
|
2822 second, also called baud rate. Any value can be given for SPEED, but |
d6a4488883dc
Daniel Engeler <engeler at gmail.com>
Glenn Morris <rgm@gnu.org>
parents:
95387
diff
changeset
|
2823 most serial ports work only at a few defined values between 1200 and |
d6a4488883dc
Daniel Engeler <engeler at gmail.com>
Glenn Morris <rgm@gnu.org>
parents:
95387
diff
changeset
|
2824 115200, with 9600 being the most common value. If SPEED is nil, the |
d6a4488883dc
Daniel Engeler <engeler at gmail.com>
Glenn Morris <rgm@gnu.org>
parents:
95387
diff
changeset
|
2825 serial port is not configured any further, i.e., all other arguments |
d6a4488883dc
Daniel Engeler <engeler at gmail.com>
Glenn Morris <rgm@gnu.org>
parents:
95387
diff
changeset
|
2826 are ignored. This may be useful for special serial ports such as |
d6a4488883dc
Daniel Engeler <engeler at gmail.com>
Glenn Morris <rgm@gnu.org>
parents:
95387
diff
changeset
|
2827 Bluetooth-to-serial converters which can only be configured through AT |
d6a4488883dc
Daniel Engeler <engeler at gmail.com>
Glenn Morris <rgm@gnu.org>
parents:
95387
diff
changeset
|
2828 commands. A value of nil for SPEED can be used only when passed |
d6a4488883dc
Daniel Engeler <engeler at gmail.com>
Glenn Morris <rgm@gnu.org>
parents:
95387
diff
changeset
|
2829 through `make-serial-process' or `serial-term'. |
d6a4488883dc
Daniel Engeler <engeler at gmail.com>
Glenn Morris <rgm@gnu.org>
parents:
95387
diff
changeset
|
2830 |
d6a4488883dc
Daniel Engeler <engeler at gmail.com>
Glenn Morris <rgm@gnu.org>
parents:
95387
diff
changeset
|
2831 :bytesize BYTESIZE -- BYTESIZE is the number of bits per byte, which |
d6a4488883dc
Daniel Engeler <engeler at gmail.com>
Glenn Morris <rgm@gnu.org>
parents:
95387
diff
changeset
|
2832 can be 7 or 8. If BYTESIZE is not given or nil, a value of 8 is used. |
d6a4488883dc
Daniel Engeler <engeler at gmail.com>
Glenn Morris <rgm@gnu.org>
parents:
95387
diff
changeset
|
2833 |
d6a4488883dc
Daniel Engeler <engeler at gmail.com>
Glenn Morris <rgm@gnu.org>
parents:
95387
diff
changeset
|
2834 :parity PARITY -- PARITY can be nil (don't use parity), the symbol |
d6a4488883dc
Daniel Engeler <engeler at gmail.com>
Glenn Morris <rgm@gnu.org>
parents:
95387
diff
changeset
|
2835 `odd' (use odd parity), or the symbol `even' (use even parity). If |
d6a4488883dc
Daniel Engeler <engeler at gmail.com>
Glenn Morris <rgm@gnu.org>
parents:
95387
diff
changeset
|
2836 PARITY is not given, no parity is used. |
d6a4488883dc
Daniel Engeler <engeler at gmail.com>
Glenn Morris <rgm@gnu.org>
parents:
95387
diff
changeset
|
2837 |
d6a4488883dc
Daniel Engeler <engeler at gmail.com>
Glenn Morris <rgm@gnu.org>
parents:
95387
diff
changeset
|
2838 :stopbits STOPBITS -- STOPBITS is the number of stopbits used to |
d6a4488883dc
Daniel Engeler <engeler at gmail.com>
Glenn Morris <rgm@gnu.org>
parents:
95387
diff
changeset
|
2839 terminate a byte transmission. STOPBITS can be 1 or 2. If STOPBITS |
d6a4488883dc
Daniel Engeler <engeler at gmail.com>
Glenn Morris <rgm@gnu.org>
parents:
95387
diff
changeset
|
2840 is not given or nil, 1 stopbit is used. |
d6a4488883dc
Daniel Engeler <engeler at gmail.com>
Glenn Morris <rgm@gnu.org>
parents:
95387
diff
changeset
|
2841 |
d6a4488883dc
Daniel Engeler <engeler at gmail.com>
Glenn Morris <rgm@gnu.org>
parents:
95387
diff
changeset
|
2842 :flowcontrol FLOWCONTROL -- FLOWCONTROL determines the type of |
d6a4488883dc
Daniel Engeler <engeler at gmail.com>
Glenn Morris <rgm@gnu.org>
parents:
95387
diff
changeset
|
2843 flowcontrol to be used, which is either nil (don't use flowcontrol), |
d6a4488883dc
Daniel Engeler <engeler at gmail.com>
Glenn Morris <rgm@gnu.org>
parents:
95387
diff
changeset
|
2844 the symbol `hw' (use RTS/CTS hardware flowcontrol), or the symbol `sw' |
d6a4488883dc
Daniel Engeler <engeler at gmail.com>
Glenn Morris <rgm@gnu.org>
parents:
95387
diff
changeset
|
2845 \(use XON/XOFF software flowcontrol). If FLOWCONTROL is not given, no |
d6a4488883dc
Daniel Engeler <engeler at gmail.com>
Glenn Morris <rgm@gnu.org>
parents:
95387
diff
changeset
|
2846 flowcontrol is used. |
d6a4488883dc
Daniel Engeler <engeler at gmail.com>
Glenn Morris <rgm@gnu.org>
parents:
95387
diff
changeset
|
2847 |
d6a4488883dc
Daniel Engeler <engeler at gmail.com>
Glenn Morris <rgm@gnu.org>
parents:
95387
diff
changeset
|
2848 `serial-process-configure' is called by `make-serial-process' for the |
d6a4488883dc
Daniel Engeler <engeler at gmail.com>
Glenn Morris <rgm@gnu.org>
parents:
95387
diff
changeset
|
2849 initial configuration of the serial port. |
d6a4488883dc
Daniel Engeler <engeler at gmail.com>
Glenn Morris <rgm@gnu.org>
parents:
95387
diff
changeset
|
2850 |
d6a4488883dc
Daniel Engeler <engeler at gmail.com>
Glenn Morris <rgm@gnu.org>
parents:
95387
diff
changeset
|
2851 Examples: |
d6a4488883dc
Daniel Engeler <engeler at gmail.com>
Glenn Morris <rgm@gnu.org>
parents:
95387
diff
changeset
|
2852 |
d6a4488883dc
Daniel Engeler <engeler at gmail.com>
Glenn Morris <rgm@gnu.org>
parents:
95387
diff
changeset
|
2853 \(serial-process-configure :process "/dev/ttyS0" :speed 1200) |
d6a4488883dc
Daniel Engeler <engeler at gmail.com>
Glenn Morris <rgm@gnu.org>
parents:
95387
diff
changeset
|
2854 |
d6a4488883dc
Daniel Engeler <engeler at gmail.com>
Glenn Morris <rgm@gnu.org>
parents:
95387
diff
changeset
|
2855 \(serial-process-configure |
d6a4488883dc
Daniel Engeler <engeler at gmail.com>
Glenn Morris <rgm@gnu.org>
parents:
95387
diff
changeset
|
2856 :buffer "COM1" :stopbits 1 :parity 'odd :flowcontrol 'hw) |
d6a4488883dc
Daniel Engeler <engeler at gmail.com>
Glenn Morris <rgm@gnu.org>
parents:
95387
diff
changeset
|
2857 |
d6a4488883dc
Daniel Engeler <engeler at gmail.com>
Glenn Morris <rgm@gnu.org>
parents:
95387
diff
changeset
|
2858 \(serial-process-configure :port "\\\\.\\COM13" :bytesize 7) |
d6a4488883dc
Daniel Engeler <engeler at gmail.com>
Glenn Morris <rgm@gnu.org>
parents:
95387
diff
changeset
|
2859 |
d6a4488883dc
Daniel Engeler <engeler at gmail.com>
Glenn Morris <rgm@gnu.org>
parents:
95387
diff
changeset
|
2860 usage: (serial-process-configure &rest ARGS) */) |
d6a4488883dc
Daniel Engeler <engeler at gmail.com>
Glenn Morris <rgm@gnu.org>
parents:
95387
diff
changeset
|
2861 (nargs, args) |
d6a4488883dc
Daniel Engeler <engeler at gmail.com>
Glenn Morris <rgm@gnu.org>
parents:
95387
diff
changeset
|
2862 int nargs; |
d6a4488883dc
Daniel Engeler <engeler at gmail.com>
Glenn Morris <rgm@gnu.org>
parents:
95387
diff
changeset
|
2863 Lisp_Object *args; |
43968
7ec801358b7e
(Qlocal, QCname, QCbuffer, QChost, QCservice, QCfamily)
Kim F. Storm <storm@cua.dk>
parents:
43642
diff
changeset
|
2864 { |
95884
d6a4488883dc
Daniel Engeler <engeler at gmail.com>
Glenn Morris <rgm@gnu.org>
parents:
95387
diff
changeset
|
2865 struct Lisp_Process *p; |
d6a4488883dc
Daniel Engeler <engeler at gmail.com>
Glenn Morris <rgm@gnu.org>
parents:
95387
diff
changeset
|
2866 Lisp_Object contact = Qnil; |
d6a4488883dc
Daniel Engeler <engeler at gmail.com>
Glenn Morris <rgm@gnu.org>
parents:
95387
diff
changeset
|
2867 Lisp_Object proc = Qnil; |
d6a4488883dc
Daniel Engeler <engeler at gmail.com>
Glenn Morris <rgm@gnu.org>
parents:
95387
diff
changeset
|
2868 struct gcpro gcpro1; |
d6a4488883dc
Daniel Engeler <engeler at gmail.com>
Glenn Morris <rgm@gnu.org>
parents:
95387
diff
changeset
|
2869 |
d6a4488883dc
Daniel Engeler <engeler at gmail.com>
Glenn Morris <rgm@gnu.org>
parents:
95387
diff
changeset
|
2870 contact = Flist (nargs, args); |
d6a4488883dc
Daniel Engeler <engeler at gmail.com>
Glenn Morris <rgm@gnu.org>
parents:
95387
diff
changeset
|
2871 GCPRO1 (contact); |
d6a4488883dc
Daniel Engeler <engeler at gmail.com>
Glenn Morris <rgm@gnu.org>
parents:
95387
diff
changeset
|
2872 |
d6a4488883dc
Daniel Engeler <engeler at gmail.com>
Glenn Morris <rgm@gnu.org>
parents:
95387
diff
changeset
|
2873 proc = Fplist_get (contact, QCprocess); |
d6a4488883dc
Daniel Engeler <engeler at gmail.com>
Glenn Morris <rgm@gnu.org>
parents:
95387
diff
changeset
|
2874 if (NILP (proc)) |
d6a4488883dc
Daniel Engeler <engeler at gmail.com>
Glenn Morris <rgm@gnu.org>
parents:
95387
diff
changeset
|
2875 proc = Fplist_get (contact, QCname); |
d6a4488883dc
Daniel Engeler <engeler at gmail.com>
Glenn Morris <rgm@gnu.org>
parents:
95387
diff
changeset
|
2876 if (NILP (proc)) |
d6a4488883dc
Daniel Engeler <engeler at gmail.com>
Glenn Morris <rgm@gnu.org>
parents:
95387
diff
changeset
|
2877 proc = Fplist_get (contact, QCbuffer); |
d6a4488883dc
Daniel Engeler <engeler at gmail.com>
Glenn Morris <rgm@gnu.org>
parents:
95387
diff
changeset
|
2878 if (NILP (proc)) |
d6a4488883dc
Daniel Engeler <engeler at gmail.com>
Glenn Morris <rgm@gnu.org>
parents:
95387
diff
changeset
|
2879 proc = Fplist_get (contact, QCport); |
d6a4488883dc
Daniel Engeler <engeler at gmail.com>
Glenn Morris <rgm@gnu.org>
parents:
95387
diff
changeset
|
2880 proc = get_process (proc); |
d6a4488883dc
Daniel Engeler <engeler at gmail.com>
Glenn Morris <rgm@gnu.org>
parents:
95387
diff
changeset
|
2881 p = XPROCESS (proc); |
95900
99342636fa96
(Fserial_process_configure, Fprocess_send_eof):
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
95884
diff
changeset
|
2882 if (!EQ (p->type, Qserial)) |
95884
d6a4488883dc
Daniel Engeler <engeler at gmail.com>
Glenn Morris <rgm@gnu.org>
parents:
95387
diff
changeset
|
2883 error ("Not a serial process"); |
d6a4488883dc
Daniel Engeler <engeler at gmail.com>
Glenn Morris <rgm@gnu.org>
parents:
95387
diff
changeset
|
2884 |
d6a4488883dc
Daniel Engeler <engeler at gmail.com>
Glenn Morris <rgm@gnu.org>
parents:
95387
diff
changeset
|
2885 if (NILP (Fplist_get (p->childp, QCspeed))) |
d6a4488883dc
Daniel Engeler <engeler at gmail.com>
Glenn Morris <rgm@gnu.org>
parents:
95387
diff
changeset
|
2886 { |
d6a4488883dc
Daniel Engeler <engeler at gmail.com>
Glenn Morris <rgm@gnu.org>
parents:
95387
diff
changeset
|
2887 UNGCPRO; |
d6a4488883dc
Daniel Engeler <engeler at gmail.com>
Glenn Morris <rgm@gnu.org>
parents:
95387
diff
changeset
|
2888 return Qnil; |
d6a4488883dc
Daniel Engeler <engeler at gmail.com>
Glenn Morris <rgm@gnu.org>
parents:
95387
diff
changeset
|
2889 } |
d6a4488883dc
Daniel Engeler <engeler at gmail.com>
Glenn Morris <rgm@gnu.org>
parents:
95387
diff
changeset
|
2890 |
d6a4488883dc
Daniel Engeler <engeler at gmail.com>
Glenn Morris <rgm@gnu.org>
parents:
95387
diff
changeset
|
2891 serial_configure (p, contact); |
d6a4488883dc
Daniel Engeler <engeler at gmail.com>
Glenn Morris <rgm@gnu.org>
parents:
95387
diff
changeset
|
2892 |
d6a4488883dc
Daniel Engeler <engeler at gmail.com>
Glenn Morris <rgm@gnu.org>
parents:
95387
diff
changeset
|
2893 UNGCPRO; |
d6a4488883dc
Daniel Engeler <engeler at gmail.com>
Glenn Morris <rgm@gnu.org>
parents:
95387
diff
changeset
|
2894 return Qnil; |
d6a4488883dc
Daniel Engeler <engeler at gmail.com>
Glenn Morris <rgm@gnu.org>
parents:
95387
diff
changeset
|
2895 } |
96833
c06568fd3844
* s/usg5-4.h (LIBS_SYSTEM): Remove, system for which this was
Dan Nicolaescu <dann@ics.uci.edu>
parents:
96774
diff
changeset
|
2896 |
95884
d6a4488883dc
Daniel Engeler <engeler at gmail.com>
Glenn Morris <rgm@gnu.org>
parents:
95387
diff
changeset
|
2897 /* Used by make-serial-process to recover from errors. */ |
d6a4488883dc
Daniel Engeler <engeler at gmail.com>
Glenn Morris <rgm@gnu.org>
parents:
95387
diff
changeset
|
2898 Lisp_Object make_serial_process_unwind (Lisp_Object proc) |
d6a4488883dc
Daniel Engeler <engeler at gmail.com>
Glenn Morris <rgm@gnu.org>
parents:
95387
diff
changeset
|
2899 { |
d6a4488883dc
Daniel Engeler <engeler at gmail.com>
Glenn Morris <rgm@gnu.org>
parents:
95387
diff
changeset
|
2900 if (!PROCESSP (proc)) |
d6a4488883dc
Daniel Engeler <engeler at gmail.com>
Glenn Morris <rgm@gnu.org>
parents:
95387
diff
changeset
|
2901 abort (); |
d6a4488883dc
Daniel Engeler <engeler at gmail.com>
Glenn Morris <rgm@gnu.org>
parents:
95387
diff
changeset
|
2902 remove_process (proc); |
43968
7ec801358b7e
(Qlocal, QCname, QCbuffer, QChost, QCservice, QCfamily)
Kim F. Storm <storm@cua.dk>
parents:
43642
diff
changeset
|
2903 return Qnil; |
7ec801358b7e
(Qlocal, QCname, QCbuffer, QChost, QCservice, QCfamily)
Kim F. Storm <storm@cua.dk>
parents:
43642
diff
changeset
|
2904 } |
96833
c06568fd3844
* s/usg5-4.h (LIBS_SYSTEM): Remove, system for which this was
Dan Nicolaescu <dann@ics.uci.edu>
parents:
96774
diff
changeset
|
2905 |
95884
d6a4488883dc
Daniel Engeler <engeler at gmail.com>
Glenn Morris <rgm@gnu.org>
parents:
95387
diff
changeset
|
2906 DEFUN ("make-serial-process", Fmake_serial_process, Smake_serial_process, |
d6a4488883dc
Daniel Engeler <engeler at gmail.com>
Glenn Morris <rgm@gnu.org>
parents:
95387
diff
changeset
|
2907 0, MANY, 0, |
d6a4488883dc
Daniel Engeler <engeler at gmail.com>
Glenn Morris <rgm@gnu.org>
parents:
95387
diff
changeset
|
2908 doc: /* Create and return a serial port process. |
d6a4488883dc
Daniel Engeler <engeler at gmail.com>
Glenn Morris <rgm@gnu.org>
parents:
95387
diff
changeset
|
2909 |
d6a4488883dc
Daniel Engeler <engeler at gmail.com>
Glenn Morris <rgm@gnu.org>
parents:
95387
diff
changeset
|
2910 In Emacs, serial port connections are represented by process objects, |
d6a4488883dc
Daniel Engeler <engeler at gmail.com>
Glenn Morris <rgm@gnu.org>
parents:
95387
diff
changeset
|
2911 so input and output work as for subprocesses, and `delete-process' |
d6a4488883dc
Daniel Engeler <engeler at gmail.com>
Glenn Morris <rgm@gnu.org>
parents:
95387
diff
changeset
|
2912 closes a serial port connection. However, a serial process has no |
d6a4488883dc
Daniel Engeler <engeler at gmail.com>
Glenn Morris <rgm@gnu.org>
parents:
95387
diff
changeset
|
2913 process id, it cannot be signaled, and the status codes are different |
d6a4488883dc
Daniel Engeler <engeler at gmail.com>
Glenn Morris <rgm@gnu.org>
parents:
95387
diff
changeset
|
2914 from normal processes. |
d6a4488883dc
Daniel Engeler <engeler at gmail.com>
Glenn Morris <rgm@gnu.org>
parents:
95387
diff
changeset
|
2915 |
d6a4488883dc
Daniel Engeler <engeler at gmail.com>
Glenn Morris <rgm@gnu.org>
parents:
95387
diff
changeset
|
2916 `make-serial-process' creates a process and a buffer, on which you |
d6a4488883dc
Daniel Engeler <engeler at gmail.com>
Glenn Morris <rgm@gnu.org>
parents:
95387
diff
changeset
|
2917 probably want to use `process-send-string'. Try \\[serial-term] for |
d6a4488883dc
Daniel Engeler <engeler at gmail.com>
Glenn Morris <rgm@gnu.org>
parents:
95387
diff
changeset
|
2918 an interactive terminal. See below for examples. |
d6a4488883dc
Daniel Engeler <engeler at gmail.com>
Glenn Morris <rgm@gnu.org>
parents:
95387
diff
changeset
|
2919 |
d6a4488883dc
Daniel Engeler <engeler at gmail.com>
Glenn Morris <rgm@gnu.org>
parents:
95387
diff
changeset
|
2920 Arguments are specified as keyword/argument pairs. The following |
d6a4488883dc
Daniel Engeler <engeler at gmail.com>
Glenn Morris <rgm@gnu.org>
parents:
95387
diff
changeset
|
2921 arguments are defined: |
d6a4488883dc
Daniel Engeler <engeler at gmail.com>
Glenn Morris <rgm@gnu.org>
parents:
95387
diff
changeset
|
2922 |
d6a4488883dc
Daniel Engeler <engeler at gmail.com>
Glenn Morris <rgm@gnu.org>
parents:
95387
diff
changeset
|
2923 :port PORT -- (mandatory) PORT is the path or name of the serial port. |
d6a4488883dc
Daniel Engeler <engeler at gmail.com>
Glenn Morris <rgm@gnu.org>
parents:
95387
diff
changeset
|
2924 For example, this could be "/dev/ttyS0" on Unix. On Windows, this |
d6a4488883dc
Daniel Engeler <engeler at gmail.com>
Glenn Morris <rgm@gnu.org>
parents:
95387
diff
changeset
|
2925 could be "COM1", or "\\\\.\\COM10" for ports higher than COM9 (double |
d6a4488883dc
Daniel Engeler <engeler at gmail.com>
Glenn Morris <rgm@gnu.org>
parents:
95387
diff
changeset
|
2926 the backslashes in strings). |
d6a4488883dc
Daniel Engeler <engeler at gmail.com>
Glenn Morris <rgm@gnu.org>
parents:
95387
diff
changeset
|
2927 |
d6a4488883dc
Daniel Engeler <engeler at gmail.com>
Glenn Morris <rgm@gnu.org>
parents:
95387
diff
changeset
|
2928 :speed SPEED -- (mandatory) is handled by `serial-process-configure', |
d6a4488883dc
Daniel Engeler <engeler at gmail.com>
Glenn Morris <rgm@gnu.org>
parents:
95387
diff
changeset
|
2929 which is called by `make-serial-process'. |
d6a4488883dc
Daniel Engeler <engeler at gmail.com>
Glenn Morris <rgm@gnu.org>
parents:
95387
diff
changeset
|
2930 |
d6a4488883dc
Daniel Engeler <engeler at gmail.com>
Glenn Morris <rgm@gnu.org>
parents:
95387
diff
changeset
|
2931 :name NAME -- NAME is the name of the process. If NAME is not given, |
d6a4488883dc
Daniel Engeler <engeler at gmail.com>
Glenn Morris <rgm@gnu.org>
parents:
95387
diff
changeset
|
2932 the value of PORT is used. |
d6a4488883dc
Daniel Engeler <engeler at gmail.com>
Glenn Morris <rgm@gnu.org>
parents:
95387
diff
changeset
|
2933 |
d6a4488883dc
Daniel Engeler <engeler at gmail.com>
Glenn Morris <rgm@gnu.org>
parents:
95387
diff
changeset
|
2934 :buffer BUFFER -- BUFFER is the buffer (or buffer-name) to associate |
d6a4488883dc
Daniel Engeler <engeler at gmail.com>
Glenn Morris <rgm@gnu.org>
parents:
95387
diff
changeset
|
2935 with the process. Process output goes at the end of that buffer, |
d6a4488883dc
Daniel Engeler <engeler at gmail.com>
Glenn Morris <rgm@gnu.org>
parents:
95387
diff
changeset
|
2936 unless you specify an output stream or filter function to handle the |
d6a4488883dc
Daniel Engeler <engeler at gmail.com>
Glenn Morris <rgm@gnu.org>
parents:
95387
diff
changeset
|
2937 output. If BUFFER is not given, the value of NAME is used. |
d6a4488883dc
Daniel Engeler <engeler at gmail.com>
Glenn Morris <rgm@gnu.org>
parents:
95387
diff
changeset
|
2938 |
d6a4488883dc
Daniel Engeler <engeler at gmail.com>
Glenn Morris <rgm@gnu.org>
parents:
95387
diff
changeset
|
2939 :coding CODING -- If CODING is a symbol, it specifies the coding |
d6a4488883dc
Daniel Engeler <engeler at gmail.com>
Glenn Morris <rgm@gnu.org>
parents:
95387
diff
changeset
|
2940 system used for both reading and writing for this process. If CODING |
d6a4488883dc
Daniel Engeler <engeler at gmail.com>
Glenn Morris <rgm@gnu.org>
parents:
95387
diff
changeset
|
2941 is a cons (DECODING . ENCODING), DECODING is used for reading, and |
d6a4488883dc
Daniel Engeler <engeler at gmail.com>
Glenn Morris <rgm@gnu.org>
parents:
95387
diff
changeset
|
2942 ENCODING is used for writing. |
d6a4488883dc
Daniel Engeler <engeler at gmail.com>
Glenn Morris <rgm@gnu.org>
parents:
95387
diff
changeset
|
2943 |
d6a4488883dc
Daniel Engeler <engeler at gmail.com>
Glenn Morris <rgm@gnu.org>
parents:
95387
diff
changeset
|
2944 :noquery BOOL -- When exiting Emacs, query the user if BOOL is nil and |
d6a4488883dc
Daniel Engeler <engeler at gmail.com>
Glenn Morris <rgm@gnu.org>
parents:
95387
diff
changeset
|
2945 the process is running. If BOOL is not given, query before exiting. |
d6a4488883dc
Daniel Engeler <engeler at gmail.com>
Glenn Morris <rgm@gnu.org>
parents:
95387
diff
changeset
|
2946 |
d6a4488883dc
Daniel Engeler <engeler at gmail.com>
Glenn Morris <rgm@gnu.org>
parents:
95387
diff
changeset
|
2947 :stop BOOL -- Start process in the `stopped' state if BOOL is non-nil. |
d6a4488883dc
Daniel Engeler <engeler at gmail.com>
Glenn Morris <rgm@gnu.org>
parents:
95387
diff
changeset
|
2948 In the stopped state, a serial process does not accept incoming data, |
d6a4488883dc
Daniel Engeler <engeler at gmail.com>
Glenn Morris <rgm@gnu.org>
parents:
95387
diff
changeset
|
2949 but you can send outgoing data. The stopped state is cleared by |
d6a4488883dc
Daniel Engeler <engeler at gmail.com>
Glenn Morris <rgm@gnu.org>
parents:
95387
diff
changeset
|
2950 `continue-process' and set by `stop-process'. |
d6a4488883dc
Daniel Engeler <engeler at gmail.com>
Glenn Morris <rgm@gnu.org>
parents:
95387
diff
changeset
|
2951 |
d6a4488883dc
Daniel Engeler <engeler at gmail.com>
Glenn Morris <rgm@gnu.org>
parents:
95387
diff
changeset
|
2952 :filter FILTER -- Install FILTER as the process filter. |
d6a4488883dc
Daniel Engeler <engeler at gmail.com>
Glenn Morris <rgm@gnu.org>
parents:
95387
diff
changeset
|
2953 |
d6a4488883dc
Daniel Engeler <engeler at gmail.com>
Glenn Morris <rgm@gnu.org>
parents:
95387
diff
changeset
|
2954 :sentinel SENTINEL -- Install SENTINEL as the process sentinel. |
d6a4488883dc
Daniel Engeler <engeler at gmail.com>
Glenn Morris <rgm@gnu.org>
parents:
95387
diff
changeset
|
2955 |
d6a4488883dc
Daniel Engeler <engeler at gmail.com>
Glenn Morris <rgm@gnu.org>
parents:
95387
diff
changeset
|
2956 :plist PLIST -- Install PLIST as the initial plist of the process. |
d6a4488883dc
Daniel Engeler <engeler at gmail.com>
Glenn Morris <rgm@gnu.org>
parents:
95387
diff
changeset
|
2957 |
d6a4488883dc
Daniel Engeler <engeler at gmail.com>
Glenn Morris <rgm@gnu.org>
parents:
95387
diff
changeset
|
2958 :speed |
d6a4488883dc
Daniel Engeler <engeler at gmail.com>
Glenn Morris <rgm@gnu.org>
parents:
95387
diff
changeset
|
2959 :bytesize |
d6a4488883dc
Daniel Engeler <engeler at gmail.com>
Glenn Morris <rgm@gnu.org>
parents:
95387
diff
changeset
|
2960 :parity |
d6a4488883dc
Daniel Engeler <engeler at gmail.com>
Glenn Morris <rgm@gnu.org>
parents:
95387
diff
changeset
|
2961 :stopbits |
d6a4488883dc
Daniel Engeler <engeler at gmail.com>
Glenn Morris <rgm@gnu.org>
parents:
95387
diff
changeset
|
2962 :flowcontrol |
d6a4488883dc
Daniel Engeler <engeler at gmail.com>
Glenn Morris <rgm@gnu.org>
parents:
95387
diff
changeset
|
2963 -- These arguments are handled by `serial-process-configure', which is |
d6a4488883dc
Daniel Engeler <engeler at gmail.com>
Glenn Morris <rgm@gnu.org>
parents:
95387
diff
changeset
|
2964 called by `make-serial-process'. |
d6a4488883dc
Daniel Engeler <engeler at gmail.com>
Glenn Morris <rgm@gnu.org>
parents:
95387
diff
changeset
|
2965 |
d6a4488883dc
Daniel Engeler <engeler at gmail.com>
Glenn Morris <rgm@gnu.org>
parents:
95387
diff
changeset
|
2966 The original argument list, possibly modified by later configuration, |
d6a4488883dc
Daniel Engeler <engeler at gmail.com>
Glenn Morris <rgm@gnu.org>
parents:
95387
diff
changeset
|
2967 is available via the function `process-contact'. |
d6a4488883dc
Daniel Engeler <engeler at gmail.com>
Glenn Morris <rgm@gnu.org>
parents:
95387
diff
changeset
|
2968 |
d6a4488883dc
Daniel Engeler <engeler at gmail.com>
Glenn Morris <rgm@gnu.org>
parents:
95387
diff
changeset
|
2969 Examples: |
d6a4488883dc
Daniel Engeler <engeler at gmail.com>
Glenn Morris <rgm@gnu.org>
parents:
95387
diff
changeset
|
2970 |
d6a4488883dc
Daniel Engeler <engeler at gmail.com>
Glenn Morris <rgm@gnu.org>
parents:
95387
diff
changeset
|
2971 \(make-serial-process :port "/dev/ttyS0" :speed 9600) |
d6a4488883dc
Daniel Engeler <engeler at gmail.com>
Glenn Morris <rgm@gnu.org>
parents:
95387
diff
changeset
|
2972 |
d6a4488883dc
Daniel Engeler <engeler at gmail.com>
Glenn Morris <rgm@gnu.org>
parents:
95387
diff
changeset
|
2973 \(make-serial-process :port "COM1" :speed 115200 :stopbits 2) |
d6a4488883dc
Daniel Engeler <engeler at gmail.com>
Glenn Morris <rgm@gnu.org>
parents:
95387
diff
changeset
|
2974 |
d6a4488883dc
Daniel Engeler <engeler at gmail.com>
Glenn Morris <rgm@gnu.org>
parents:
95387
diff
changeset
|
2975 \(make-serial-process :port "\\\\.\\COM13" :speed 1200 :bytesize 7 :parity 'odd) |
d6a4488883dc
Daniel Engeler <engeler at gmail.com>
Glenn Morris <rgm@gnu.org>
parents:
95387
diff
changeset
|
2976 |
d6a4488883dc
Daniel Engeler <engeler at gmail.com>
Glenn Morris <rgm@gnu.org>
parents:
95387
diff
changeset
|
2977 \(make-serial-process :port "/dev/tty.BlueConsole-SPP-1" :speed nil) |
d6a4488883dc
Daniel Engeler <engeler at gmail.com>
Glenn Morris <rgm@gnu.org>
parents:
95387
diff
changeset
|
2978 |
d6a4488883dc
Daniel Engeler <engeler at gmail.com>
Glenn Morris <rgm@gnu.org>
parents:
95387
diff
changeset
|
2979 usage: (make-serial-process &rest ARGS) */) |
d6a4488883dc
Daniel Engeler <engeler at gmail.com>
Glenn Morris <rgm@gnu.org>
parents:
95387
diff
changeset
|
2980 (nargs, args) |
d6a4488883dc
Daniel Engeler <engeler at gmail.com>
Glenn Morris <rgm@gnu.org>
parents:
95387
diff
changeset
|
2981 int nargs; |
d6a4488883dc
Daniel Engeler <engeler at gmail.com>
Glenn Morris <rgm@gnu.org>
parents:
95387
diff
changeset
|
2982 Lisp_Object *args; |
d6a4488883dc
Daniel Engeler <engeler at gmail.com>
Glenn Morris <rgm@gnu.org>
parents:
95387
diff
changeset
|
2983 { |
d6a4488883dc
Daniel Engeler <engeler at gmail.com>
Glenn Morris <rgm@gnu.org>
parents:
95387
diff
changeset
|
2984 int fd = -1; |
d6a4488883dc
Daniel Engeler <engeler at gmail.com>
Glenn Morris <rgm@gnu.org>
parents:
95387
diff
changeset
|
2985 Lisp_Object proc, contact, port; |
d6a4488883dc
Daniel Engeler <engeler at gmail.com>
Glenn Morris <rgm@gnu.org>
parents:
95387
diff
changeset
|
2986 struct Lisp_Process *p; |
d6a4488883dc
Daniel Engeler <engeler at gmail.com>
Glenn Morris <rgm@gnu.org>
parents:
95387
diff
changeset
|
2987 struct gcpro gcpro1; |
d6a4488883dc
Daniel Engeler <engeler at gmail.com>
Glenn Morris <rgm@gnu.org>
parents:
95387
diff
changeset
|
2988 Lisp_Object name, buffer; |
d6a4488883dc
Daniel Engeler <engeler at gmail.com>
Glenn Morris <rgm@gnu.org>
parents:
95387
diff
changeset
|
2989 Lisp_Object tem, val; |
d6a4488883dc
Daniel Engeler <engeler at gmail.com>
Glenn Morris <rgm@gnu.org>
parents:
95387
diff
changeset
|
2990 int specpdl_count = -1; |
d6a4488883dc
Daniel Engeler <engeler at gmail.com>
Glenn Morris <rgm@gnu.org>
parents:
95387
diff
changeset
|
2991 |
d6a4488883dc
Daniel Engeler <engeler at gmail.com>
Glenn Morris <rgm@gnu.org>
parents:
95387
diff
changeset
|
2992 if (nargs == 0) |
d6a4488883dc
Daniel Engeler <engeler at gmail.com>
Glenn Morris <rgm@gnu.org>
parents:
95387
diff
changeset
|
2993 return Qnil; |
d6a4488883dc
Daniel Engeler <engeler at gmail.com>
Glenn Morris <rgm@gnu.org>
parents:
95387
diff
changeset
|
2994 |
d6a4488883dc
Daniel Engeler <engeler at gmail.com>
Glenn Morris <rgm@gnu.org>
parents:
95387
diff
changeset
|
2995 contact = Flist (nargs, args); |
d6a4488883dc
Daniel Engeler <engeler at gmail.com>
Glenn Morris <rgm@gnu.org>
parents:
95387
diff
changeset
|
2996 GCPRO1 (contact); |
d6a4488883dc
Daniel Engeler <engeler at gmail.com>
Glenn Morris <rgm@gnu.org>
parents:
95387
diff
changeset
|
2997 |
d6a4488883dc
Daniel Engeler <engeler at gmail.com>
Glenn Morris <rgm@gnu.org>
parents:
95387
diff
changeset
|
2998 port = Fplist_get (contact, QCport); |
d6a4488883dc
Daniel Engeler <engeler at gmail.com>
Glenn Morris <rgm@gnu.org>
parents:
95387
diff
changeset
|
2999 if (NILP (port)) |
d6a4488883dc
Daniel Engeler <engeler at gmail.com>
Glenn Morris <rgm@gnu.org>
parents:
95387
diff
changeset
|
3000 error ("No port specified"); |
d6a4488883dc
Daniel Engeler <engeler at gmail.com>
Glenn Morris <rgm@gnu.org>
parents:
95387
diff
changeset
|
3001 CHECK_STRING (port); |
d6a4488883dc
Daniel Engeler <engeler at gmail.com>
Glenn Morris <rgm@gnu.org>
parents:
95387
diff
changeset
|
3002 |
d6a4488883dc
Daniel Engeler <engeler at gmail.com>
Glenn Morris <rgm@gnu.org>
parents:
95387
diff
changeset
|
3003 if (NILP (Fplist_member (contact, QCspeed))) |
d6a4488883dc
Daniel Engeler <engeler at gmail.com>
Glenn Morris <rgm@gnu.org>
parents:
95387
diff
changeset
|
3004 error (":speed not specified"); |
d6a4488883dc
Daniel Engeler <engeler at gmail.com>
Glenn Morris <rgm@gnu.org>
parents:
95387
diff
changeset
|
3005 if (!NILP (Fplist_get (contact, QCspeed))) |
d6a4488883dc
Daniel Engeler <engeler at gmail.com>
Glenn Morris <rgm@gnu.org>
parents:
95387
diff
changeset
|
3006 CHECK_NUMBER (Fplist_get (contact, QCspeed)); |
d6a4488883dc
Daniel Engeler <engeler at gmail.com>
Glenn Morris <rgm@gnu.org>
parents:
95387
diff
changeset
|
3007 |
d6a4488883dc
Daniel Engeler <engeler at gmail.com>
Glenn Morris <rgm@gnu.org>
parents:
95387
diff
changeset
|
3008 name = Fplist_get (contact, QCname); |
d6a4488883dc
Daniel Engeler <engeler at gmail.com>
Glenn Morris <rgm@gnu.org>
parents:
95387
diff
changeset
|
3009 if (NILP (name)) |
d6a4488883dc
Daniel Engeler <engeler at gmail.com>
Glenn Morris <rgm@gnu.org>
parents:
95387
diff
changeset
|
3010 name = port; |
d6a4488883dc
Daniel Engeler <engeler at gmail.com>
Glenn Morris <rgm@gnu.org>
parents:
95387
diff
changeset
|
3011 CHECK_STRING (name); |
d6a4488883dc
Daniel Engeler <engeler at gmail.com>
Glenn Morris <rgm@gnu.org>
parents:
95387
diff
changeset
|
3012 proc = make_process (name); |
d6a4488883dc
Daniel Engeler <engeler at gmail.com>
Glenn Morris <rgm@gnu.org>
parents:
95387
diff
changeset
|
3013 specpdl_count = SPECPDL_INDEX (); |
d6a4488883dc
Daniel Engeler <engeler at gmail.com>
Glenn Morris <rgm@gnu.org>
parents:
95387
diff
changeset
|
3014 record_unwind_protect (make_serial_process_unwind, proc); |
d6a4488883dc
Daniel Engeler <engeler at gmail.com>
Glenn Morris <rgm@gnu.org>
parents:
95387
diff
changeset
|
3015 p = XPROCESS (proc); |
d6a4488883dc
Daniel Engeler <engeler at gmail.com>
Glenn Morris <rgm@gnu.org>
parents:
95387
diff
changeset
|
3016 |
d6a4488883dc
Daniel Engeler <engeler at gmail.com>
Glenn Morris <rgm@gnu.org>
parents:
95387
diff
changeset
|
3017 fd = serial_open ((char*) SDATA (port)); |
d6a4488883dc
Daniel Engeler <engeler at gmail.com>
Glenn Morris <rgm@gnu.org>
parents:
95387
diff
changeset
|
3018 p->infd = fd; |
d6a4488883dc
Daniel Engeler <engeler at gmail.com>
Glenn Morris <rgm@gnu.org>
parents:
95387
diff
changeset
|
3019 p->outfd = fd; |
d6a4488883dc
Daniel Engeler <engeler at gmail.com>
Glenn Morris <rgm@gnu.org>
parents:
95387
diff
changeset
|
3020 if (fd > max_process_desc) |
d6a4488883dc
Daniel Engeler <engeler at gmail.com>
Glenn Morris <rgm@gnu.org>
parents:
95387
diff
changeset
|
3021 max_process_desc = fd; |
d6a4488883dc
Daniel Engeler <engeler at gmail.com>
Glenn Morris <rgm@gnu.org>
parents:
95387
diff
changeset
|
3022 chan_process[fd] = proc; |
d6a4488883dc
Daniel Engeler <engeler at gmail.com>
Glenn Morris <rgm@gnu.org>
parents:
95387
diff
changeset
|
3023 |
d6a4488883dc
Daniel Engeler <engeler at gmail.com>
Glenn Morris <rgm@gnu.org>
parents:
95387
diff
changeset
|
3024 buffer = Fplist_get (contact, QCbuffer); |
d6a4488883dc
Daniel Engeler <engeler at gmail.com>
Glenn Morris <rgm@gnu.org>
parents:
95387
diff
changeset
|
3025 if (NILP (buffer)) |
d6a4488883dc
Daniel Engeler <engeler at gmail.com>
Glenn Morris <rgm@gnu.org>
parents:
95387
diff
changeset
|
3026 buffer = name; |
d6a4488883dc
Daniel Engeler <engeler at gmail.com>
Glenn Morris <rgm@gnu.org>
parents:
95387
diff
changeset
|
3027 buffer = Fget_buffer_create (buffer); |
d6a4488883dc
Daniel Engeler <engeler at gmail.com>
Glenn Morris <rgm@gnu.org>
parents:
95387
diff
changeset
|
3028 p->buffer = buffer; |
d6a4488883dc
Daniel Engeler <engeler at gmail.com>
Glenn Morris <rgm@gnu.org>
parents:
95387
diff
changeset
|
3029 |
d6a4488883dc
Daniel Engeler <engeler at gmail.com>
Glenn Morris <rgm@gnu.org>
parents:
95387
diff
changeset
|
3030 p->childp = contact; |
d6a4488883dc
Daniel Engeler <engeler at gmail.com>
Glenn Morris <rgm@gnu.org>
parents:
95387
diff
changeset
|
3031 p->plist = Fcopy_sequence (Fplist_get (contact, QCplist)); |
d6a4488883dc
Daniel Engeler <engeler at gmail.com>
Glenn Morris <rgm@gnu.org>
parents:
95387
diff
changeset
|
3032 p->type = Qserial; |
d6a4488883dc
Daniel Engeler <engeler at gmail.com>
Glenn Morris <rgm@gnu.org>
parents:
95387
diff
changeset
|
3033 p->sentinel = Fplist_get (contact, QCsentinel); |
d6a4488883dc
Daniel Engeler <engeler at gmail.com>
Glenn Morris <rgm@gnu.org>
parents:
95387
diff
changeset
|
3034 p->filter = Fplist_get (contact, QCfilter); |
d6a4488883dc
Daniel Engeler <engeler at gmail.com>
Glenn Morris <rgm@gnu.org>
parents:
95387
diff
changeset
|
3035 p->log = Qnil; |
d6a4488883dc
Daniel Engeler <engeler at gmail.com>
Glenn Morris <rgm@gnu.org>
parents:
95387
diff
changeset
|
3036 if (tem = Fplist_get (contact, QCnoquery), !NILP (tem)) |
d6a4488883dc
Daniel Engeler <engeler at gmail.com>
Glenn Morris <rgm@gnu.org>
parents:
95387
diff
changeset
|
3037 p->kill_without_query = 1; |
d6a4488883dc
Daniel Engeler <engeler at gmail.com>
Glenn Morris <rgm@gnu.org>
parents:
95387
diff
changeset
|
3038 if (tem = Fplist_get (contact, QCstop), !NILP (tem)) |
d6a4488883dc
Daniel Engeler <engeler at gmail.com>
Glenn Morris <rgm@gnu.org>
parents:
95387
diff
changeset
|
3039 p->command = Qt; |
d6a4488883dc
Daniel Engeler <engeler at gmail.com>
Glenn Morris <rgm@gnu.org>
parents:
95387
diff
changeset
|
3040 p->pty_flag = 0; |
d6a4488883dc
Daniel Engeler <engeler at gmail.com>
Glenn Morris <rgm@gnu.org>
parents:
95387
diff
changeset
|
3041 |
d6a4488883dc
Daniel Engeler <engeler at gmail.com>
Glenn Morris <rgm@gnu.org>
parents:
95387
diff
changeset
|
3042 if (!EQ (p->command, Qt)) |
d6a4488883dc
Daniel Engeler <engeler at gmail.com>
Glenn Morris <rgm@gnu.org>
parents:
95387
diff
changeset
|
3043 { |
d6a4488883dc
Daniel Engeler <engeler at gmail.com>
Glenn Morris <rgm@gnu.org>
parents:
95387
diff
changeset
|
3044 FD_SET (fd, &input_wait_mask); |
d6a4488883dc
Daniel Engeler <engeler at gmail.com>
Glenn Morris <rgm@gnu.org>
parents:
95387
diff
changeset
|
3045 FD_SET (fd, &non_keyboard_wait_mask); |
d6a4488883dc
Daniel Engeler <engeler at gmail.com>
Glenn Morris <rgm@gnu.org>
parents:
95387
diff
changeset
|
3046 } |
d6a4488883dc
Daniel Engeler <engeler at gmail.com>
Glenn Morris <rgm@gnu.org>
parents:
95387
diff
changeset
|
3047 |
d6a4488883dc
Daniel Engeler <engeler at gmail.com>
Glenn Morris <rgm@gnu.org>
parents:
95387
diff
changeset
|
3048 if (BUFFERP (buffer)) |
d6a4488883dc
Daniel Engeler <engeler at gmail.com>
Glenn Morris <rgm@gnu.org>
parents:
95387
diff
changeset
|
3049 { |
d6a4488883dc
Daniel Engeler <engeler at gmail.com>
Glenn Morris <rgm@gnu.org>
parents:
95387
diff
changeset
|
3050 set_marker_both (p->mark, buffer, |
d6a4488883dc
Daniel Engeler <engeler at gmail.com>
Glenn Morris <rgm@gnu.org>
parents:
95387
diff
changeset
|
3051 BUF_ZV (XBUFFER (buffer)), |
d6a4488883dc
Daniel Engeler <engeler at gmail.com>
Glenn Morris <rgm@gnu.org>
parents:
95387
diff
changeset
|
3052 BUF_ZV_BYTE (XBUFFER (buffer))); |
d6a4488883dc
Daniel Engeler <engeler at gmail.com>
Glenn Morris <rgm@gnu.org>
parents:
95387
diff
changeset
|
3053 } |
d6a4488883dc
Daniel Engeler <engeler at gmail.com>
Glenn Morris <rgm@gnu.org>
parents:
95387
diff
changeset
|
3054 |
d6a4488883dc
Daniel Engeler <engeler at gmail.com>
Glenn Morris <rgm@gnu.org>
parents:
95387
diff
changeset
|
3055 tem = Fplist_member (contact, QCcoding); |
d6a4488883dc
Daniel Engeler <engeler at gmail.com>
Glenn Morris <rgm@gnu.org>
parents:
95387
diff
changeset
|
3056 if (!NILP (tem) && (!CONSP (tem) || !CONSP (XCDR (tem)))) |
d6a4488883dc
Daniel Engeler <engeler at gmail.com>
Glenn Morris <rgm@gnu.org>
parents:
95387
diff
changeset
|
3057 tem = Qnil; |
d6a4488883dc
Daniel Engeler <engeler at gmail.com>
Glenn Morris <rgm@gnu.org>
parents:
95387
diff
changeset
|
3058 |
d6a4488883dc
Daniel Engeler <engeler at gmail.com>
Glenn Morris <rgm@gnu.org>
parents:
95387
diff
changeset
|
3059 val = Qnil; |
d6a4488883dc
Daniel Engeler <engeler at gmail.com>
Glenn Morris <rgm@gnu.org>
parents:
95387
diff
changeset
|
3060 if (!NILP (tem)) |
d6a4488883dc
Daniel Engeler <engeler at gmail.com>
Glenn Morris <rgm@gnu.org>
parents:
95387
diff
changeset
|
3061 { |
d6a4488883dc
Daniel Engeler <engeler at gmail.com>
Glenn Morris <rgm@gnu.org>
parents:
95387
diff
changeset
|
3062 val = XCAR (XCDR (tem)); |
d6a4488883dc
Daniel Engeler <engeler at gmail.com>
Glenn Morris <rgm@gnu.org>
parents:
95387
diff
changeset
|
3063 if (CONSP (val)) |
d6a4488883dc
Daniel Engeler <engeler at gmail.com>
Glenn Morris <rgm@gnu.org>
parents:
95387
diff
changeset
|
3064 val = XCAR (val); |
d6a4488883dc
Daniel Engeler <engeler at gmail.com>
Glenn Morris <rgm@gnu.org>
parents:
95387
diff
changeset
|
3065 } |
d6a4488883dc
Daniel Engeler <engeler at gmail.com>
Glenn Morris <rgm@gnu.org>
parents:
95387
diff
changeset
|
3066 else if (!NILP (Vcoding_system_for_read)) |
d6a4488883dc
Daniel Engeler <engeler at gmail.com>
Glenn Morris <rgm@gnu.org>
parents:
95387
diff
changeset
|
3067 val = Vcoding_system_for_read; |
d6a4488883dc
Daniel Engeler <engeler at gmail.com>
Glenn Morris <rgm@gnu.org>
parents:
95387
diff
changeset
|
3068 else if ((!NILP (buffer) && NILP (XBUFFER (buffer)->enable_multibyte_characters)) |
d6a4488883dc
Daniel Engeler <engeler at gmail.com>
Glenn Morris <rgm@gnu.org>
parents:
95387
diff
changeset
|
3069 || (NILP (buffer) && NILP (buffer_defaults.enable_multibyte_characters))) |
d6a4488883dc
Daniel Engeler <engeler at gmail.com>
Glenn Morris <rgm@gnu.org>
parents:
95387
diff
changeset
|
3070 val = Qnil; |
d6a4488883dc
Daniel Engeler <engeler at gmail.com>
Glenn Morris <rgm@gnu.org>
parents:
95387
diff
changeset
|
3071 p->decode_coding_system = val; |
d6a4488883dc
Daniel Engeler <engeler at gmail.com>
Glenn Morris <rgm@gnu.org>
parents:
95387
diff
changeset
|
3072 |
d6a4488883dc
Daniel Engeler <engeler at gmail.com>
Glenn Morris <rgm@gnu.org>
parents:
95387
diff
changeset
|
3073 val = Qnil; |
d6a4488883dc
Daniel Engeler <engeler at gmail.com>
Glenn Morris <rgm@gnu.org>
parents:
95387
diff
changeset
|
3074 if (!NILP (tem)) |
d6a4488883dc
Daniel Engeler <engeler at gmail.com>
Glenn Morris <rgm@gnu.org>
parents:
95387
diff
changeset
|
3075 { |
d6a4488883dc
Daniel Engeler <engeler at gmail.com>
Glenn Morris <rgm@gnu.org>
parents:
95387
diff
changeset
|
3076 val = XCAR (XCDR (tem)); |
d6a4488883dc
Daniel Engeler <engeler at gmail.com>
Glenn Morris <rgm@gnu.org>
parents:
95387
diff
changeset
|
3077 if (CONSP (val)) |
d6a4488883dc
Daniel Engeler <engeler at gmail.com>
Glenn Morris <rgm@gnu.org>
parents:
95387
diff
changeset
|
3078 val = XCDR (val); |
d6a4488883dc
Daniel Engeler <engeler at gmail.com>
Glenn Morris <rgm@gnu.org>
parents:
95387
diff
changeset
|
3079 } |
d6a4488883dc
Daniel Engeler <engeler at gmail.com>
Glenn Morris <rgm@gnu.org>
parents:
95387
diff
changeset
|
3080 else if (!NILP (Vcoding_system_for_write)) |
d6a4488883dc
Daniel Engeler <engeler at gmail.com>
Glenn Morris <rgm@gnu.org>
parents:
95387
diff
changeset
|
3081 val = Vcoding_system_for_write; |
d6a4488883dc
Daniel Engeler <engeler at gmail.com>
Glenn Morris <rgm@gnu.org>
parents:
95387
diff
changeset
|
3082 else if ((!NILP (buffer) && NILP (XBUFFER (buffer)->enable_multibyte_characters)) |
d6a4488883dc
Daniel Engeler <engeler at gmail.com>
Glenn Morris <rgm@gnu.org>
parents:
95387
diff
changeset
|
3083 || (NILP (buffer) && NILP (buffer_defaults.enable_multibyte_characters))) |
d6a4488883dc
Daniel Engeler <engeler at gmail.com>
Glenn Morris <rgm@gnu.org>
parents:
95387
diff
changeset
|
3084 val = Qnil; |
d6a4488883dc
Daniel Engeler <engeler at gmail.com>
Glenn Morris <rgm@gnu.org>
parents:
95387
diff
changeset
|
3085 p->encode_coding_system = val; |
d6a4488883dc
Daniel Engeler <engeler at gmail.com>
Glenn Morris <rgm@gnu.org>
parents:
95387
diff
changeset
|
3086 |
d6a4488883dc
Daniel Engeler <engeler at gmail.com>
Glenn Morris <rgm@gnu.org>
parents:
95387
diff
changeset
|
3087 setup_process_coding_systems (proc); |
d6a4488883dc
Daniel Engeler <engeler at gmail.com>
Glenn Morris <rgm@gnu.org>
parents:
95387
diff
changeset
|
3088 p->decoding_buf = make_uninit_string (0); |
d6a4488883dc
Daniel Engeler <engeler at gmail.com>
Glenn Morris <rgm@gnu.org>
parents:
95387
diff
changeset
|
3089 p->decoding_carryover = 0; |
d6a4488883dc
Daniel Engeler <engeler at gmail.com>
Glenn Morris <rgm@gnu.org>
parents:
95387
diff
changeset
|
3090 p->encoding_buf = make_uninit_string (0); |
d6a4488883dc
Daniel Engeler <engeler at gmail.com>
Glenn Morris <rgm@gnu.org>
parents:
95387
diff
changeset
|
3091 p->inherit_coding_system_flag |
d6a4488883dc
Daniel Engeler <engeler at gmail.com>
Glenn Morris <rgm@gnu.org>
parents:
95387
diff
changeset
|
3092 = !(!NILP (tem) || NILP (buffer) || !inherit_process_coding_system); |
d6a4488883dc
Daniel Engeler <engeler at gmail.com>
Glenn Morris <rgm@gnu.org>
parents:
95387
diff
changeset
|
3093 |
d6a4488883dc
Daniel Engeler <engeler at gmail.com>
Glenn Morris <rgm@gnu.org>
parents:
95387
diff
changeset
|
3094 Fserial_process_configure(nargs, args); |
d6a4488883dc
Daniel Engeler <engeler at gmail.com>
Glenn Morris <rgm@gnu.org>
parents:
95387
diff
changeset
|
3095 |
d6a4488883dc
Daniel Engeler <engeler at gmail.com>
Glenn Morris <rgm@gnu.org>
parents:
95387
diff
changeset
|
3096 specpdl_ptr = specpdl + specpdl_count; |
d6a4488883dc
Daniel Engeler <engeler at gmail.com>
Glenn Morris <rgm@gnu.org>
parents:
95387
diff
changeset
|
3097 |
d6a4488883dc
Daniel Engeler <engeler at gmail.com>
Glenn Morris <rgm@gnu.org>
parents:
95387
diff
changeset
|
3098 UNGCPRO; |
d6a4488883dc
Daniel Engeler <engeler at gmail.com>
Glenn Morris <rgm@gnu.org>
parents:
95387
diff
changeset
|
3099 return proc; |
d6a4488883dc
Daniel Engeler <engeler at gmail.com>
Glenn Morris <rgm@gnu.org>
parents:
95387
diff
changeset
|
3100 } |
d6a4488883dc
Daniel Engeler <engeler at gmail.com>
Glenn Morris <rgm@gnu.org>
parents:
95387
diff
changeset
|
3101 #endif /* HAVE_SERIAL */ |
43968
7ec801358b7e
(Qlocal, QCname, QCbuffer, QChost, QCservice, QCfamily)
Kim F. Storm <storm@cua.dk>
parents:
43642
diff
changeset
|
3102 |
7ec801358b7e
(Qlocal, QCname, QCbuffer, QChost, QCservice, QCfamily)
Kim F. Storm <storm@cua.dk>
parents:
43642
diff
changeset
|
3103 /* Create a network stream/datagram client/server process. Treated |
7ec801358b7e
(Qlocal, QCname, QCbuffer, QChost, QCservice, QCfamily)
Kim F. Storm <storm@cua.dk>
parents:
43642
diff
changeset
|
3104 exactly like a normal process when reading and writing. Primary |
578 | 3105 differences are in status display and process deletion. A network |
3106 connection has no PID; you cannot signal it. All you can do is | |
43968
7ec801358b7e
(Qlocal, QCname, QCbuffer, QChost, QCservice, QCfamily)
Kim F. Storm <storm@cua.dk>
parents:
43642
diff
changeset
|
3107 stop/continue it and deactivate/close it via delete-process */ |
7ec801358b7e
(Qlocal, QCname, QCbuffer, QChost, QCservice, QCfamily)
Kim F. Storm <storm@cua.dk>
parents:
43642
diff
changeset
|
3108 |
49600
23a1cea22d13
Trailing whitespace deleted.
Juanma Barranquero <lekktu@gmail.com>
parents:
49281
diff
changeset
|
3109 DEFUN ("make-network-process", Fmake_network_process, Smake_network_process, |
23a1cea22d13
Trailing whitespace deleted.
Juanma Barranquero <lekktu@gmail.com>
parents:
49281
diff
changeset
|
3110 0, MANY, 0, |
43968
7ec801358b7e
(Qlocal, QCname, QCbuffer, QChost, QCservice, QCfamily)
Kim F. Storm <storm@cua.dk>
parents:
43642
diff
changeset
|
3111 doc: /* Create and return a network server or client process. |
7ec801358b7e
(Qlocal, QCname, QCbuffer, QChost, QCservice, QCfamily)
Kim F. Storm <storm@cua.dk>
parents:
43642
diff
changeset
|
3112 |
43995
110955214222
(Fmake_network_process): Remove unused variable `sa'.
Pavel Janík <Pavel@Janik.cz>
parents:
43968
diff
changeset
|
3113 In Emacs, network connections are represented by process objects, so |
43968
7ec801358b7e
(Qlocal, QCname, QCbuffer, QChost, QCservice, QCfamily)
Kim F. Storm <storm@cua.dk>
parents:
43642
diff
changeset
|
3114 input and output work as for subprocesses and `delete-process' closes |
7ec801358b7e
(Qlocal, QCname, QCbuffer, QChost, QCservice, QCfamily)
Kim F. Storm <storm@cua.dk>
parents:
43642
diff
changeset
|
3115 a network connection. However, a network process has no process id, |
63615
be4c8c1258c1
(Fmake_network_process): Fix spellings.
Juanma Barranquero <lekktu@gmail.com>
parents:
63278
diff
changeset
|
3116 it cannot be signaled, and the status codes are different from normal |
43968
7ec801358b7e
(Qlocal, QCname, QCbuffer, QChost, QCservice, QCfamily)
Kim F. Storm <storm@cua.dk>
parents:
43642
diff
changeset
|
3117 processes. |
7ec801358b7e
(Qlocal, QCname, QCbuffer, QChost, QCservice, QCfamily)
Kim F. Storm <storm@cua.dk>
parents:
43642
diff
changeset
|
3118 |
7ec801358b7e
(Qlocal, QCname, QCbuffer, QChost, QCservice, QCfamily)
Kim F. Storm <storm@cua.dk>
parents:
43642
diff
changeset
|
3119 Arguments are specified as keyword/argument pairs. The following |
7ec801358b7e
(Qlocal, QCname, QCbuffer, QChost, QCservice, QCfamily)
Kim F. Storm <storm@cua.dk>
parents:
43642
diff
changeset
|
3120 arguments are defined: |
7ec801358b7e
(Qlocal, QCname, QCbuffer, QChost, QCservice, QCfamily)
Kim F. Storm <storm@cua.dk>
parents:
43642
diff
changeset
|
3121 |
7ec801358b7e
(Qlocal, QCname, QCbuffer, QChost, QCservice, QCfamily)
Kim F. Storm <storm@cua.dk>
parents:
43642
diff
changeset
|
3122 :name NAME -- NAME is name for process. It is modified if necessary |
7ec801358b7e
(Qlocal, QCname, QCbuffer, QChost, QCservice, QCfamily)
Kim F. Storm <storm@cua.dk>
parents:
43642
diff
changeset
|
3123 to make it unique. |
7ec801358b7e
(Qlocal, QCname, QCbuffer, QChost, QCservice, QCfamily)
Kim F. Storm <storm@cua.dk>
parents:
43642
diff
changeset
|
3124 |
7ec801358b7e
(Qlocal, QCname, QCbuffer, QChost, QCservice, QCfamily)
Kim F. Storm <storm@cua.dk>
parents:
43642
diff
changeset
|
3125 :buffer BUFFER -- BUFFER is the buffer (or buffer-name) to associate |
7ec801358b7e
(Qlocal, QCname, QCbuffer, QChost, QCservice, QCfamily)
Kim F. Storm <storm@cua.dk>
parents:
43642
diff
changeset
|
3126 with the process. Process output goes at end of that buffer, unless |
7ec801358b7e
(Qlocal, QCname, QCbuffer, QChost, QCservice, QCfamily)
Kim F. Storm <storm@cua.dk>
parents:
43642
diff
changeset
|
3127 you specify an output stream or filter function to handle the output. |
7ec801358b7e
(Qlocal, QCname, QCbuffer, QChost, QCservice, QCfamily)
Kim F. Storm <storm@cua.dk>
parents:
43642
diff
changeset
|
3128 BUFFER may be also nil, meaning that this process is not associated |
7ec801358b7e
(Qlocal, QCname, QCbuffer, QChost, QCservice, QCfamily)
Kim F. Storm <storm@cua.dk>
parents:
43642
diff
changeset
|
3129 with any buffer. |
7ec801358b7e
(Qlocal, QCname, QCbuffer, QChost, QCservice, QCfamily)
Kim F. Storm <storm@cua.dk>
parents:
43642
diff
changeset
|
3130 |
7ec801358b7e
(Qlocal, QCname, QCbuffer, QChost, QCservice, QCfamily)
Kim F. Storm <storm@cua.dk>
parents:
43642
diff
changeset
|
3131 :host HOST -- HOST is name of the host to connect to, or its IP |
7ec801358b7e
(Qlocal, QCname, QCbuffer, QChost, QCservice, QCfamily)
Kim F. Storm <storm@cua.dk>
parents:
43642
diff
changeset
|
3132 address. The symbol `local' specifies the local host. If specified |
7ec801358b7e
(Qlocal, QCname, QCbuffer, QChost, QCservice, QCfamily)
Kim F. Storm <storm@cua.dk>
parents:
43642
diff
changeset
|
3133 for a server process, it must be a valid name or address for the local |
7ec801358b7e
(Qlocal, QCname, QCbuffer, QChost, QCservice, QCfamily)
Kim F. Storm <storm@cua.dk>
parents:
43642
diff
changeset
|
3134 host, and only clients connecting to that address will be accepted. |
7ec801358b7e
(Qlocal, QCname, QCbuffer, QChost, QCservice, QCfamily)
Kim F. Storm <storm@cua.dk>
parents:
43642
diff
changeset
|
3135 |
7ec801358b7e
(Qlocal, QCname, QCbuffer, QChost, QCservice, QCfamily)
Kim F. Storm <storm@cua.dk>
parents:
43642
diff
changeset
|
3136 :service SERVICE -- SERVICE is name of the service desired, or an |
7ec801358b7e
(Qlocal, QCname, QCbuffer, QChost, QCservice, QCfamily)
Kim F. Storm <storm@cua.dk>
parents:
43642
diff
changeset
|
3137 integer specifying a port number to connect to. If SERVICE is t, |
78840
b0f2d245629d
(Fmake_network_process): Doc fix.
Glenn Morris <rgm@gnu.org>
parents:
78501
diff
changeset
|
3138 a random port number is selected for the server. (If Emacs was |
b0f2d245629d
(Fmake_network_process): Doc fix.
Glenn Morris <rgm@gnu.org>
parents:
78501
diff
changeset
|
3139 compiled with getaddrinfo, a port number can also be specified as a |
b0f2d245629d
(Fmake_network_process): Doc fix.
Glenn Morris <rgm@gnu.org>
parents:
78501
diff
changeset
|
3140 string, e.g. "80", as well as an integer. This is not portable.) |
43968
7ec801358b7e
(Qlocal, QCname, QCbuffer, QChost, QCservice, QCfamily)
Kim F. Storm <storm@cua.dk>
parents:
43642
diff
changeset
|
3141 |
44067
e8a136850817
(QCfeature, QCdatagram): Removed variables.
Kim F. Storm <storm@cua.dk>
parents:
44041
diff
changeset
|
3142 :type TYPE -- TYPE is the type of connection. The default (nil) is a |
106397
210af1fb2669
(Qseqpacket): New symbol.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
106186
diff
changeset
|
3143 stream type connection, `datagram' creates a datagram type connection, |
210af1fb2669
(Qseqpacket): New symbol.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
106186
diff
changeset
|
3144 `seqpacket' creates a reliable datagram connection. |
44067
e8a136850817
(QCfeature, QCdatagram): Removed variables.
Kim F. Storm <storm@cua.dk>
parents:
44041
diff
changeset
|
3145 |
43968
7ec801358b7e
(Qlocal, QCname, QCbuffer, QChost, QCservice, QCfamily)
Kim F. Storm <storm@cua.dk>
parents:
43642
diff
changeset
|
3146 :family FAMILY -- FAMILY is the address (and protocol) family for the |
68008 | 3147 service specified by HOST and SERVICE. The default (nil) is to use |
3148 whatever address family (IPv4 or IPv6) that is defined for the host | |
3149 and port number specified by HOST and SERVICE. Other address families | |
3150 supported are: | |
43968
7ec801358b7e
(Qlocal, QCname, QCbuffer, QChost, QCservice, QCfamily)
Kim F. Storm <storm@cua.dk>
parents:
43642
diff
changeset
|
3151 local -- for a local (i.e. UNIX) address specified by SERVICE. |
68008 | 3152 ipv4 -- use IPv4 address family only. |
3153 ipv6 -- use IPv6 address family only. | |
43968
7ec801358b7e
(Qlocal, QCname, QCbuffer, QChost, QCservice, QCfamily)
Kim F. Storm <storm@cua.dk>
parents:
43642
diff
changeset
|
3154 |
7ec801358b7e
(Qlocal, QCname, QCbuffer, QChost, QCservice, QCfamily)
Kim F. Storm <storm@cua.dk>
parents:
43642
diff
changeset
|
3155 :local ADDRESS -- ADDRESS is the local address used for the connection. |
7ec801358b7e
(Qlocal, QCname, QCbuffer, QChost, QCservice, QCfamily)
Kim F. Storm <storm@cua.dk>
parents:
43642
diff
changeset
|
3156 This parameter is ignored when opening a client process. When specified |
7ec801358b7e
(Qlocal, QCname, QCbuffer, QChost, QCservice, QCfamily)
Kim F. Storm <storm@cua.dk>
parents:
43642
diff
changeset
|
3157 for a server process, the FAMILY, HOST and SERVICE args are ignored. |
7ec801358b7e
(Qlocal, QCname, QCbuffer, QChost, QCservice, QCfamily)
Kim F. Storm <storm@cua.dk>
parents:
43642
diff
changeset
|
3158 |
7ec801358b7e
(Qlocal, QCname, QCbuffer, QChost, QCservice, QCfamily)
Kim F. Storm <storm@cua.dk>
parents:
43642
diff
changeset
|
3159 :remote ADDRESS -- ADDRESS is the remote partner's address for the |
7ec801358b7e
(Qlocal, QCname, QCbuffer, QChost, QCservice, QCfamily)
Kim F. Storm <storm@cua.dk>
parents:
43642
diff
changeset
|
3160 connection. This parameter is ignored when opening a stream server |
7ec801358b7e
(Qlocal, QCname, QCbuffer, QChost, QCservice, QCfamily)
Kim F. Storm <storm@cua.dk>
parents:
43642
diff
changeset
|
3161 process. For a datagram server process, it specifies the initial |
7ec801358b7e
(Qlocal, QCname, QCbuffer, QChost, QCservice, QCfamily)
Kim F. Storm <storm@cua.dk>
parents:
43642
diff
changeset
|
3162 setting of the remote datagram address. When specified for a client |
7ec801358b7e
(Qlocal, QCname, QCbuffer, QChost, QCservice, QCfamily)
Kim F. Storm <storm@cua.dk>
parents:
43642
diff
changeset
|
3163 process, the FAMILY, HOST, and SERVICE args are ignored. |
7ec801358b7e
(Qlocal, QCname, QCbuffer, QChost, QCservice, QCfamily)
Kim F. Storm <storm@cua.dk>
parents:
43642
diff
changeset
|
3164 |
7ec801358b7e
(Qlocal, QCname, QCbuffer, QChost, QCservice, QCfamily)
Kim F. Storm <storm@cua.dk>
parents:
43642
diff
changeset
|
3165 The format of ADDRESS depends on the address family: |
7ec801358b7e
(Qlocal, QCname, QCbuffer, QChost, QCservice, QCfamily)
Kim F. Storm <storm@cua.dk>
parents:
43642
diff
changeset
|
3166 - An IPv4 address is represented as an vector of integers [A B C D P] |
7ec801358b7e
(Qlocal, QCname, QCbuffer, QChost, QCservice, QCfamily)
Kim F. Storm <storm@cua.dk>
parents:
43642
diff
changeset
|
3167 corresponding to numeric IP address A.B.C.D and port number P. |
7ec801358b7e
(Qlocal, QCname, QCbuffer, QChost, QCservice, QCfamily)
Kim F. Storm <storm@cua.dk>
parents:
43642
diff
changeset
|
3168 - A local address is represented as a string with the address in the |
7ec801358b7e
(Qlocal, QCname, QCbuffer, QChost, QCservice, QCfamily)
Kim F. Storm <storm@cua.dk>
parents:
43642
diff
changeset
|
3169 local address space. |
7ec801358b7e
(Qlocal, QCname, QCbuffer, QChost, QCservice, QCfamily)
Kim F. Storm <storm@cua.dk>
parents:
43642
diff
changeset
|
3170 - An "unsupported family" address is represented by a cons (F . AV) |
7ec801358b7e
(Qlocal, QCname, QCbuffer, QChost, QCservice, QCfamily)
Kim F. Storm <storm@cua.dk>
parents:
43642
diff
changeset
|
3171 where F is the family number and AV is a vector containing the socket |
7ec801358b7e
(Qlocal, QCname, QCbuffer, QChost, QCservice, QCfamily)
Kim F. Storm <storm@cua.dk>
parents:
43642
diff
changeset
|
3172 address data with one element per address data byte. Do not rely on |
7ec801358b7e
(Qlocal, QCname, QCbuffer, QChost, QCservice, QCfamily)
Kim F. Storm <storm@cua.dk>
parents:
43642
diff
changeset
|
3173 this format in portable code, as it may depend on implementation |
7ec801358b7e
(Qlocal, QCname, QCbuffer, QChost, QCservice, QCfamily)
Kim F. Storm <storm@cua.dk>
parents:
43642
diff
changeset
|
3174 defined constants, data sizes, and data structure alignment. |
7ec801358b7e
(Qlocal, QCname, QCbuffer, QChost, QCservice, QCfamily)
Kim F. Storm <storm@cua.dk>
parents:
43642
diff
changeset
|
3175 |
52516
0ca23eb697b9
(Fset_process_sentinel): Add sentinel to childp plist
Kim F. Storm <storm@cua.dk>
parents:
52503
diff
changeset
|
3176 :coding CODING -- If CODING is a symbol, it specifies the coding |
0ca23eb697b9
(Fset_process_sentinel): Add sentinel to childp plist
Kim F. Storm <storm@cua.dk>
parents:
52503
diff
changeset
|
3177 system used for both reading and writing for this process. If CODING |
0ca23eb697b9
(Fset_process_sentinel): Add sentinel to childp plist
Kim F. Storm <storm@cua.dk>
parents:
52503
diff
changeset
|
3178 is a cons (DECODING . ENCODING), DECODING is used for reading, and |
0ca23eb697b9
(Fset_process_sentinel): Add sentinel to childp plist
Kim F. Storm <storm@cua.dk>
parents:
52503
diff
changeset
|
3179 ENCODING is used for writing. |
43968
7ec801358b7e
(Qlocal, QCname, QCbuffer, QChost, QCservice, QCfamily)
Kim F. Storm <storm@cua.dk>
parents:
43642
diff
changeset
|
3180 |
7ec801358b7e
(Qlocal, QCname, QCbuffer, QChost, QCservice, QCfamily)
Kim F. Storm <storm@cua.dk>
parents:
43642
diff
changeset
|
3181 :nowait BOOL -- If BOOL is non-nil for a stream type client process, |
7ec801358b7e
(Qlocal, QCname, QCbuffer, QChost, QCservice, QCfamily)
Kim F. Storm <storm@cua.dk>
parents:
43642
diff
changeset
|
3182 return without waiting for the connection to complete; instead, the |
7ec801358b7e
(Qlocal, QCname, QCbuffer, QChost, QCservice, QCfamily)
Kim F. Storm <storm@cua.dk>
parents:
43642
diff
changeset
|
3183 sentinel function will be called with second arg matching "open" (if |
7ec801358b7e
(Qlocal, QCname, QCbuffer, QChost, QCservice, QCfamily)
Kim F. Storm <storm@cua.dk>
parents:
43642
diff
changeset
|
3184 successful) or "failed" when the connect completes. Default is to use |
7ec801358b7e
(Qlocal, QCname, QCbuffer, QChost, QCservice, QCfamily)
Kim F. Storm <storm@cua.dk>
parents:
43642
diff
changeset
|
3185 a blocking connect (i.e. wait) for stream type connections. |
7ec801358b7e
(Qlocal, QCname, QCbuffer, QChost, QCservice, QCfamily)
Kim F. Storm <storm@cua.dk>
parents:
43642
diff
changeset
|
3186 |
7ec801358b7e
(Qlocal, QCname, QCbuffer, QChost, QCservice, QCfamily)
Kim F. Storm <storm@cua.dk>
parents:
43642
diff
changeset
|
3187 :noquery BOOL -- Query the user unless BOOL is non-nil, and process is |
55444
976d03256b41
(Fwaiting_for_user_input_p, Fmake_network_process)
Juanma Barranquero <lekktu@gmail.com>
parents:
53835
diff
changeset
|
3188 running when Emacs is exited. |
43968
7ec801358b7e
(Qlocal, QCname, QCbuffer, QChost, QCservice, QCfamily)
Kim F. Storm <storm@cua.dk>
parents:
43642
diff
changeset
|
3189 |
7ec801358b7e
(Qlocal, QCname, QCbuffer, QChost, QCservice, QCfamily)
Kim F. Storm <storm@cua.dk>
parents:
43642
diff
changeset
|
3190 :stop BOOL -- Start process in the `stopped' state if BOOL non-nil. |
7ec801358b7e
(Qlocal, QCname, QCbuffer, QChost, QCservice, QCfamily)
Kim F. Storm <storm@cua.dk>
parents:
43642
diff
changeset
|
3191 In the stopped state, a server process does not accept new |
7ec801358b7e
(Qlocal, QCname, QCbuffer, QChost, QCservice, QCfamily)
Kim F. Storm <storm@cua.dk>
parents:
43642
diff
changeset
|
3192 connections, and a client process does not handle incoming traffic. |
7ec801358b7e
(Qlocal, QCname, QCbuffer, QChost, QCservice, QCfamily)
Kim F. Storm <storm@cua.dk>
parents:
43642
diff
changeset
|
3193 The stopped state is cleared by `continue-process' and set by |
7ec801358b7e
(Qlocal, QCname, QCbuffer, QChost, QCservice, QCfamily)
Kim F. Storm <storm@cua.dk>
parents:
43642
diff
changeset
|
3194 `stop-process'. |
7ec801358b7e
(Qlocal, QCname, QCbuffer, QChost, QCservice, QCfamily)
Kim F. Storm <storm@cua.dk>
parents:
43642
diff
changeset
|
3195 |
7ec801358b7e
(Qlocal, QCname, QCbuffer, QChost, QCservice, QCfamily)
Kim F. Storm <storm@cua.dk>
parents:
43642
diff
changeset
|
3196 :filter FILTER -- Install FILTER as the process filter. |
7ec801358b7e
(Qlocal, QCname, QCbuffer, QChost, QCservice, QCfamily)
Kim F. Storm <storm@cua.dk>
parents:
43642
diff
changeset
|
3197 |
49680 | 3198 :filter-multibyte BOOL -- If BOOL is non-nil, strings given to the |
3199 process filter are multibyte, otherwise they are unibyte. | |
78501 | 3200 If this keyword is not specified, the strings are multibyte if |
49667
cbec1327e2f1
(QCfilter_multibyte): New variable.
Kenichi Handa <handa@m17n.org>
parents:
49600
diff
changeset
|
3201 `default-enable-multibyte-characters' is non-nil. |
cbec1327e2f1
(QCfilter_multibyte): New variable.
Kenichi Handa <handa@m17n.org>
parents:
49600
diff
changeset
|
3202 |
43968
7ec801358b7e
(Qlocal, QCname, QCbuffer, QChost, QCservice, QCfamily)
Kim F. Storm <storm@cua.dk>
parents:
43642
diff
changeset
|
3203 :sentinel SENTINEL -- Install SENTINEL as the process sentinel. |
7ec801358b7e
(Qlocal, QCname, QCbuffer, QChost, QCservice, QCfamily)
Kim F. Storm <storm@cua.dk>
parents:
43642
diff
changeset
|
3204 |
7ec801358b7e
(Qlocal, QCname, QCbuffer, QChost, QCservice, QCfamily)
Kim F. Storm <storm@cua.dk>
parents:
43642
diff
changeset
|
3205 :log LOG -- Install LOG as the server process log function. This |
47987
b30942bd85f3
(Fformat_network_address): New function.
Kim F. Storm <storm@cua.dk>
parents:
47542
diff
changeset
|
3206 function is called when the server accepts a network connection from a |
43968
7ec801358b7e
(Qlocal, QCname, QCbuffer, QChost, QCservice, QCfamily)
Kim F. Storm <storm@cua.dk>
parents:
43642
diff
changeset
|
3207 client. The arguments are SERVER, CLIENT, and MESSAGE, where SERVER |
7ec801358b7e
(Qlocal, QCname, QCbuffer, QChost, QCservice, QCfamily)
Kim F. Storm <storm@cua.dk>
parents:
43642
diff
changeset
|
3208 is the server process, CLIENT is the new process for the connection, |
7ec801358b7e
(Qlocal, QCname, QCbuffer, QChost, QCservice, QCfamily)
Kim F. Storm <storm@cua.dk>
parents:
43642
diff
changeset
|
3209 and MESSAGE is a string. |
7ec801358b7e
(Qlocal, QCname, QCbuffer, QChost, QCservice, QCfamily)
Kim F. Storm <storm@cua.dk>
parents:
43642
diff
changeset
|
3210 |
49223
26622fa0d099
Reworked 2003-01-12 change -- call a plist a plist!
Kim F. Storm <storm@cua.dk>
parents:
49164
diff
changeset
|
3211 :plist PLIST -- Install PLIST as the new process' initial plist. |
49600
23a1cea22d13
Trailing whitespace deleted.
Juanma Barranquero <lekktu@gmail.com>
parents:
49281
diff
changeset
|
3212 |
52516
0ca23eb697b9
(Fset_process_sentinel): Add sentinel to childp plist
Kim F. Storm <storm@cua.dk>
parents:
52503
diff
changeset
|
3213 :server QLEN -- if QLEN is non-nil, create a server process for the |
43968
7ec801358b7e
(Qlocal, QCname, QCbuffer, QChost, QCservice, QCfamily)
Kim F. Storm <storm@cua.dk>
parents:
43642
diff
changeset
|
3214 specified FAMILY, SERVICE, and connection type (stream or datagram). |
52516
0ca23eb697b9
(Fset_process_sentinel): Add sentinel to childp plist
Kim F. Storm <storm@cua.dk>
parents:
52503
diff
changeset
|
3215 If QLEN is an integer, it is used as the max. length of the server's |
0ca23eb697b9
(Fset_process_sentinel): Add sentinel to childp plist
Kim F. Storm <storm@cua.dk>
parents:
52503
diff
changeset
|
3216 pending connection queue (also known as the backlog); the default |
0ca23eb697b9
(Fset_process_sentinel): Add sentinel to childp plist
Kim F. Storm <storm@cua.dk>
parents:
52503
diff
changeset
|
3217 queue length is 5. Default is to create a client process. |
0ca23eb697b9
(Fset_process_sentinel): Add sentinel to childp plist
Kim F. Storm <storm@cua.dk>
parents:
52503
diff
changeset
|
3218 |
0ca23eb697b9
(Fset_process_sentinel): Add sentinel to childp plist
Kim F. Storm <storm@cua.dk>
parents:
52503
diff
changeset
|
3219 The following network options can be specified for this connection: |
0ca23eb697b9
(Fset_process_sentinel): Add sentinel to childp plist
Kim F. Storm <storm@cua.dk>
parents:
52503
diff
changeset
|
3220 |
0ca23eb697b9
(Fset_process_sentinel): Add sentinel to childp plist
Kim F. Storm <storm@cua.dk>
parents:
52503
diff
changeset
|
3221 :broadcast BOOL -- Allow send and receive of datagram broadcasts. |
0ca23eb697b9
(Fset_process_sentinel): Add sentinel to childp plist
Kim F. Storm <storm@cua.dk>
parents:
52503
diff
changeset
|
3222 :dontroute BOOL -- Only send to directly connected hosts. |
0ca23eb697b9
(Fset_process_sentinel): Add sentinel to childp plist
Kim F. Storm <storm@cua.dk>
parents:
52503
diff
changeset
|
3223 :keepalive BOOL -- Send keep-alive messages on network stream. |
0ca23eb697b9
(Fset_process_sentinel): Add sentinel to childp plist
Kim F. Storm <storm@cua.dk>
parents:
52503
diff
changeset
|
3224 :linger BOOL or TIMEOUT -- Send queued messages before closing. |
0ca23eb697b9
(Fset_process_sentinel): Add sentinel to childp plist
Kim F. Storm <storm@cua.dk>
parents:
52503
diff
changeset
|
3225 :oobinline BOOL -- Place out-of-band data in receive data stream. |
0ca23eb697b9
(Fset_process_sentinel): Add sentinel to childp plist
Kim F. Storm <storm@cua.dk>
parents:
52503
diff
changeset
|
3226 :priority INT -- Set protocol defined priority for sent packets. |
0ca23eb697b9
(Fset_process_sentinel): Add sentinel to childp plist
Kim F. Storm <storm@cua.dk>
parents:
52503
diff
changeset
|
3227 :reuseaddr BOOL -- Allow reusing a recently used local address |
0ca23eb697b9
(Fset_process_sentinel): Add sentinel to childp plist
Kim F. Storm <storm@cua.dk>
parents:
52503
diff
changeset
|
3228 (this is allowed by default for a server process). |
52594
d03629d1d293
(set_socket_option): Fix :bindtodevice option.
Kim F. Storm <storm@cua.dk>
parents:
52591
diff
changeset
|
3229 :bindtodevice NAME -- bind to interface NAME. Using this may require |
d03629d1d293
(set_socket_option): Fix :bindtodevice option.
Kim F. Storm <storm@cua.dk>
parents:
52591
diff
changeset
|
3230 special privileges on some systems. |
52516
0ca23eb697b9
(Fset_process_sentinel): Add sentinel to childp plist
Kim F. Storm <storm@cua.dk>
parents:
52503
diff
changeset
|
3231 |
0ca23eb697b9
(Fset_process_sentinel): Add sentinel to childp plist
Kim F. Storm <storm@cua.dk>
parents:
52503
diff
changeset
|
3232 Consult the relevant system programmer's manual pages for more |
0ca23eb697b9
(Fset_process_sentinel): Add sentinel to childp plist
Kim F. Storm <storm@cua.dk>
parents:
52503
diff
changeset
|
3233 information on using these options. |
0ca23eb697b9
(Fset_process_sentinel): Add sentinel to childp plist
Kim F. Storm <storm@cua.dk>
parents:
52503
diff
changeset
|
3234 |
0ca23eb697b9
(Fset_process_sentinel): Add sentinel to childp plist
Kim F. Storm <storm@cua.dk>
parents:
52503
diff
changeset
|
3235 |
0ca23eb697b9
(Fset_process_sentinel): Add sentinel to childp plist
Kim F. Storm <storm@cua.dk>
parents:
52503
diff
changeset
|
3236 A server process will listen for and accept connections from clients. |
0ca23eb697b9
(Fset_process_sentinel): Add sentinel to childp plist
Kim F. Storm <storm@cua.dk>
parents:
52503
diff
changeset
|
3237 When a client connection is accepted, a new network process is created |
0ca23eb697b9
(Fset_process_sentinel): Add sentinel to childp plist
Kim F. Storm <storm@cua.dk>
parents:
52503
diff
changeset
|
3238 for the connection with the following parameters: |
0ca23eb697b9
(Fset_process_sentinel): Add sentinel to childp plist
Kim F. Storm <storm@cua.dk>
parents:
52503
diff
changeset
|
3239 |
43968
7ec801358b7e
(Qlocal, QCname, QCbuffer, QChost, QCservice, QCfamily)
Kim F. Storm <storm@cua.dk>
parents:
43642
diff
changeset
|
3240 - The client's process name is constructed by concatenating the server |
7ec801358b7e
(Qlocal, QCname, QCbuffer, QChost, QCservice, QCfamily)
Kim F. Storm <storm@cua.dk>
parents:
43642
diff
changeset
|
3241 process' NAME and a client identification string. |
7ec801358b7e
(Qlocal, QCname, QCbuffer, QChost, QCservice, QCfamily)
Kim F. Storm <storm@cua.dk>
parents:
43642
diff
changeset
|
3242 - If the FILTER argument is non-nil, the client process will not get a |
7ec801358b7e
(Qlocal, QCname, QCbuffer, QChost, QCservice, QCfamily)
Kim F. Storm <storm@cua.dk>
parents:
43642
diff
changeset
|
3243 separate process buffer; otherwise, the client's process buffer is a newly |
7ec801358b7e
(Qlocal, QCname, QCbuffer, QChost, QCservice, QCfamily)
Kim F. Storm <storm@cua.dk>
parents:
43642
diff
changeset
|
3244 created buffer named after the server process' BUFFER name or process |
49600
23a1cea22d13
Trailing whitespace deleted.
Juanma Barranquero <lekktu@gmail.com>
parents:
49281
diff
changeset
|
3245 NAME concatenated with the client identification string. |
43968
7ec801358b7e
(Qlocal, QCname, QCbuffer, QChost, QCservice, QCfamily)
Kim F. Storm <storm@cua.dk>
parents:
43642
diff
changeset
|
3246 - The connection type and the process filter and sentinel parameters are |
7ec801358b7e
(Qlocal, QCname, QCbuffer, QChost, QCservice, QCfamily)
Kim F. Storm <storm@cua.dk>
parents:
43642
diff
changeset
|
3247 inherited from the server process' TYPE, FILTER and SENTINEL. |
7ec801358b7e
(Qlocal, QCname, QCbuffer, QChost, QCservice, QCfamily)
Kim F. Storm <storm@cua.dk>
parents:
43642
diff
changeset
|
3248 - The client process' contact info is set according to the client's |
7ec801358b7e
(Qlocal, QCname, QCbuffer, QChost, QCservice, QCfamily)
Kim F. Storm <storm@cua.dk>
parents:
43642
diff
changeset
|
3249 addressing information (typically an IP address and a port number). |
49223
26622fa0d099
Reworked 2003-01-12 change -- call a plist a plist!
Kim F. Storm <storm@cua.dk>
parents:
49164
diff
changeset
|
3250 - The client process' plist is initialized from the server's plist. |
43968
7ec801358b7e
(Qlocal, QCname, QCbuffer, QChost, QCservice, QCfamily)
Kim F. Storm <storm@cua.dk>
parents:
43642
diff
changeset
|
3251 |
7ec801358b7e
(Qlocal, QCname, QCbuffer, QChost, QCservice, QCfamily)
Kim F. Storm <storm@cua.dk>
parents:
43642
diff
changeset
|
3252 Notice that the FILTER and SENTINEL args are never used directly by |
7ec801358b7e
(Qlocal, QCname, QCbuffer, QChost, QCservice, QCfamily)
Kim F. Storm <storm@cua.dk>
parents:
43642
diff
changeset
|
3253 the server process. Also, the BUFFER argument is not used directly by |
47542
62a08cd28e83
(make-network-process): Doc fix (there is no network-server-log-function hook).
Kim F. Storm <storm@cua.dk>
parents:
47431
diff
changeset
|
3254 the server process, but via the optional :log function, accepted (and |
62a08cd28e83
(make-network-process): Doc fix (there is no network-server-log-function hook).
Kim F. Storm <storm@cua.dk>
parents:
47431
diff
changeset
|
3255 failed) connections may be logged in the server process' buffer. |
43968
7ec801358b7e
(Qlocal, QCname, QCbuffer, QChost, QCservice, QCfamily)
Kim F. Storm <storm@cua.dk>
parents:
43642
diff
changeset
|
3256 |
49142
8dca38bc0261
(Fset_process_contact): New function.
Kim F. Storm <storm@cua.dk>
parents:
49119
diff
changeset
|
3257 The original argument list, modified with the actual connection |
8dca38bc0261
(Fset_process_contact): New function.
Kim F. Storm <storm@cua.dk>
parents:
49119
diff
changeset
|
3258 information, is available via the `process-contact' function. |
8dca38bc0261
(Fset_process_contact): New function.
Kim F. Storm <storm@cua.dk>
parents:
49119
diff
changeset
|
3259 |
43995
110955214222
(Fmake_network_process): Remove unused variable `sa'.
Pavel Janík <Pavel@Janik.cz>
parents:
43968
diff
changeset
|
3260 usage: (make-network-process &rest ARGS) */) |
43968
7ec801358b7e
(Qlocal, QCname, QCbuffer, QChost, QCservice, QCfamily)
Kim F. Storm <storm@cua.dk>
parents:
43642
diff
changeset
|
3261 (nargs, args) |
7ec801358b7e
(Qlocal, QCname, QCbuffer, QChost, QCservice, QCfamily)
Kim F. Storm <storm@cua.dk>
parents:
43642
diff
changeset
|
3262 int nargs; |
7ec801358b7e
(Qlocal, QCname, QCbuffer, QChost, QCservice, QCfamily)
Kim F. Storm <storm@cua.dk>
parents:
43642
diff
changeset
|
3263 Lisp_Object *args; |
578 | 3264 { |
3265 Lisp_Object proc; | |
43968
7ec801358b7e
(Qlocal, QCname, QCbuffer, QChost, QCservice, QCfamily)
Kim F. Storm <storm@cua.dk>
parents:
43642
diff
changeset
|
3266 Lisp_Object contact; |
7ec801358b7e
(Qlocal, QCname, QCbuffer, QChost, QCservice, QCfamily)
Kim F. Storm <storm@cua.dk>
parents:
43642
diff
changeset
|
3267 struct Lisp_Process *p; |
32032
633b826a56f3
(Fopen_network_stream) [HAVE_GETADDRINFO]: Use
Gerd Moellmann <gerd@gnu.org>
parents:
31806
diff
changeset
|
3268 #ifdef HAVE_GETADDRINFO |
43968
7ec801358b7e
(Qlocal, QCname, QCbuffer, QChost, QCservice, QCfamily)
Kim F. Storm <storm@cua.dk>
parents:
43642
diff
changeset
|
3269 struct addrinfo ai, *res, *lres; |
68008 | 3270 struct addrinfo hints; |
3271 char *portstring, portbuf[128]; | |
32032
633b826a56f3
(Fopen_network_stream) [HAVE_GETADDRINFO]: Use
Gerd Moellmann <gerd@gnu.org>
parents:
31806
diff
changeset
|
3272 #else /* HAVE_GETADDRINFO */ |
43598
f49377cf2e3c
(Qconnect, Qfailed): New variables.
Kim F. Storm <storm@cua.dk>
parents:
42600
diff
changeset
|
3273 struct _emacs_addrinfo |
f49377cf2e3c
(Qconnect, Qfailed): New variables.
Kim F. Storm <storm@cua.dk>
parents:
42600
diff
changeset
|
3274 { |
f49377cf2e3c
(Qconnect, Qfailed): New variables.
Kim F. Storm <storm@cua.dk>
parents:
42600
diff
changeset
|
3275 int ai_family; |
f49377cf2e3c
(Qconnect, Qfailed): New variables.
Kim F. Storm <storm@cua.dk>
parents:
42600
diff
changeset
|
3276 int ai_socktype; |
f49377cf2e3c
(Qconnect, Qfailed): New variables.
Kim F. Storm <storm@cua.dk>
parents:
42600
diff
changeset
|
3277 int ai_protocol; |
f49377cf2e3c
(Qconnect, Qfailed): New variables.
Kim F. Storm <storm@cua.dk>
parents:
42600
diff
changeset
|
3278 int ai_addrlen; |
f49377cf2e3c
(Qconnect, Qfailed): New variables.
Kim F. Storm <storm@cua.dk>
parents:
42600
diff
changeset
|
3279 struct sockaddr *ai_addr; |
f49377cf2e3c
(Qconnect, Qfailed): New variables.
Kim F. Storm <storm@cua.dk>
parents:
42600
diff
changeset
|
3280 struct _emacs_addrinfo *ai_next; |
f49377cf2e3c
(Qconnect, Qfailed): New variables.
Kim F. Storm <storm@cua.dk>
parents:
42600
diff
changeset
|
3281 } ai, *res, *lres; |
25262
ccf83ed7326a
(Fopen_network_stream): Fix previous change.
Karl Heuer <kwzh@gnu.org>
parents:
25248
diff
changeset
|
3282 #endif /* HAVE_GETADDRINFO */ |
43968
7ec801358b7e
(Qlocal, QCname, QCbuffer, QChost, QCservice, QCfamily)
Kim F. Storm <storm@cua.dk>
parents:
43642
diff
changeset
|
3283 struct sockaddr_in address_in; |
7ec801358b7e
(Qlocal, QCname, QCbuffer, QChost, QCservice, QCfamily)
Kim F. Storm <storm@cua.dk>
parents:
43642
diff
changeset
|
3284 #ifdef HAVE_LOCAL_SOCKETS |
7ec801358b7e
(Qlocal, QCname, QCbuffer, QChost, QCservice, QCfamily)
Kim F. Storm <storm@cua.dk>
parents:
43642
diff
changeset
|
3285 struct sockaddr_un address_un; |
7ec801358b7e
(Qlocal, QCname, QCbuffer, QChost, QCservice, QCfamily)
Kim F. Storm <storm@cua.dk>
parents:
43642
diff
changeset
|
3286 #endif |
7ec801358b7e
(Qlocal, QCname, QCbuffer, QChost, QCservice, QCfamily)
Kim F. Storm <storm@cua.dk>
parents:
43642
diff
changeset
|
3287 int port; |
43598
f49377cf2e3c
(Qconnect, Qfailed): New variables.
Kim F. Storm <storm@cua.dk>
parents:
42600
diff
changeset
|
3288 int ret = 0; |
f49377cf2e3c
(Qconnect, Qfailed): New variables.
Kim F. Storm <storm@cua.dk>
parents:
42600
diff
changeset
|
3289 int xerrno = 0; |
25262
ccf83ed7326a
(Fopen_network_stream): Fix previous change.
Karl Heuer <kwzh@gnu.org>
parents:
25248
diff
changeset
|
3290 int s = -1, outch, inch; |
43968
7ec801358b7e
(Qlocal, QCname, QCbuffer, QChost, QCservice, QCfamily)
Kim F. Storm <storm@cua.dk>
parents:
43642
diff
changeset
|
3291 struct gcpro gcpro1; |
46293
1fb8f75062c6
Use macro SPECPDL_INDEX.
Juanma Barranquero <lekktu@gmail.com>
parents:
45410
diff
changeset
|
3292 int count = SPECPDL_INDEX (); |
25705
1f109108fa7e
(Fopen_network_stream): Avoid socket decriptor leak.
Andreas Schwab <schwab@suse.de>
parents:
25645
diff
changeset
|
3293 int count1; |
43968
7ec801358b7e
(Qlocal, QCname, QCbuffer, QChost, QCservice, QCfamily)
Kim F. Storm <storm@cua.dk>
parents:
43642
diff
changeset
|
3294 Lisp_Object QCaddress; /* one of QClocal or QCremote */ |
7ec801358b7e
(Qlocal, QCname, QCbuffer, QChost, QCservice, QCfamily)
Kim F. Storm <storm@cua.dk>
parents:
43642
diff
changeset
|
3295 Lisp_Object tem; |
7ec801358b7e
(Qlocal, QCname, QCbuffer, QChost, QCservice, QCfamily)
Kim F. Storm <storm@cua.dk>
parents:
43642
diff
changeset
|
3296 Lisp_Object name, buffer, host, service, address; |
7ec801358b7e
(Qlocal, QCname, QCbuffer, QChost, QCservice, QCfamily)
Kim F. Storm <storm@cua.dk>
parents:
43642
diff
changeset
|
3297 Lisp_Object filter, sentinel; |
7ec801358b7e
(Qlocal, QCname, QCbuffer, QChost, QCservice, QCfamily)
Kim F. Storm <storm@cua.dk>
parents:
43642
diff
changeset
|
3298 int is_non_blocking_client = 0; |
52516
0ca23eb697b9
(Fset_process_sentinel): Add sentinel to childp plist
Kim F. Storm <storm@cua.dk>
parents:
52503
diff
changeset
|
3299 int is_server = 0, backlog = 5; |
44067
e8a136850817
(QCfeature, QCdatagram): Removed variables.
Kim F. Storm <storm@cua.dk>
parents:
44041
diff
changeset
|
3300 int socktype; |
43968
7ec801358b7e
(Qlocal, QCname, QCbuffer, QChost, QCservice, QCfamily)
Kim F. Storm <storm@cua.dk>
parents:
43642
diff
changeset
|
3301 int family = -1; |
7ec801358b7e
(Qlocal, QCname, QCbuffer, QChost, QCservice, QCfamily)
Kim F. Storm <storm@cua.dk>
parents:
43642
diff
changeset
|
3302 |
7ec801358b7e
(Qlocal, QCname, QCbuffer, QChost, QCservice, QCfamily)
Kim F. Storm <storm@cua.dk>
parents:
43642
diff
changeset
|
3303 if (nargs == 0) |
7ec801358b7e
(Qlocal, QCname, QCbuffer, QChost, QCservice, QCfamily)
Kim F. Storm <storm@cua.dk>
parents:
43642
diff
changeset
|
3304 return Qnil; |
7ec801358b7e
(Qlocal, QCname, QCbuffer, QChost, QCservice, QCfamily)
Kim F. Storm <storm@cua.dk>
parents:
43642
diff
changeset
|
3305 |
7ec801358b7e
(Qlocal, QCname, QCbuffer, QChost, QCservice, QCfamily)
Kim F. Storm <storm@cua.dk>
parents:
43642
diff
changeset
|
3306 /* Save arguments for process-contact and clone-process. */ |
7ec801358b7e
(Qlocal, QCname, QCbuffer, QChost, QCservice, QCfamily)
Kim F. Storm <storm@cua.dk>
parents:
43642
diff
changeset
|
3307 contact = Flist (nargs, args); |
7ec801358b7e
(Qlocal, QCname, QCbuffer, QChost, QCservice, QCfamily)
Kim F. Storm <storm@cua.dk>
parents:
43642
diff
changeset
|
3308 GCPRO1 (contact); |
7ec801358b7e
(Qlocal, QCname, QCbuffer, QChost, QCservice, QCfamily)
Kim F. Storm <storm@cua.dk>
parents:
43642
diff
changeset
|
3309 |
15355
6bb377ef707f
(Fopen_network_stream)[WINDOWSNT]: Ensure Windows
Richard M. Stallman <rms@gnu.org>
parents:
15092
diff
changeset
|
3310 #ifdef WINDOWSNT |
6bb377ef707f
(Fopen_network_stream)[WINDOWSNT]: Ensure Windows
Richard M. Stallman <rms@gnu.org>
parents:
15092
diff
changeset
|
3311 /* Ensure socket support is loaded if available. */ |
6bb377ef707f
(Fopen_network_stream)[WINDOWSNT]: Ensure Windows
Richard M. Stallman <rms@gnu.org>
parents:
15092
diff
changeset
|
3312 init_winsock (TRUE); |
6bb377ef707f
(Fopen_network_stream)[WINDOWSNT]: Ensure Windows
Richard M. Stallman <rms@gnu.org>
parents:
15092
diff
changeset
|
3313 #endif |
6bb377ef707f
(Fopen_network_stream)[WINDOWSNT]: Ensure Windows
Richard M. Stallman <rms@gnu.org>
parents:
15092
diff
changeset
|
3314 |
44067
e8a136850817
(QCfeature, QCdatagram): Removed variables.
Kim F. Storm <storm@cua.dk>
parents:
44041
diff
changeset
|
3315 /* :type TYPE (nil: stream, datagram */ |
e8a136850817
(QCfeature, QCdatagram): Removed variables.
Kim F. Storm <storm@cua.dk>
parents:
44041
diff
changeset
|
3316 tem = Fplist_get (contact, QCtype); |
e8a136850817
(QCfeature, QCdatagram): Removed variables.
Kim F. Storm <storm@cua.dk>
parents:
44041
diff
changeset
|
3317 if (NILP (tem)) |
e8a136850817
(QCfeature, QCdatagram): Removed variables.
Kim F. Storm <storm@cua.dk>
parents:
44041
diff
changeset
|
3318 socktype = SOCK_STREAM; |
e8a136850817
(QCfeature, QCdatagram): Removed variables.
Kim F. Storm <storm@cua.dk>
parents:
44041
diff
changeset
|
3319 #ifdef DATAGRAM_SOCKETS |
e8a136850817
(QCfeature, QCdatagram): Removed variables.
Kim F. Storm <storm@cua.dk>
parents:
44041
diff
changeset
|
3320 else if (EQ (tem, Qdatagram)) |
e8a136850817
(QCfeature, QCdatagram): Removed variables.
Kim F. Storm <storm@cua.dk>
parents:
44041
diff
changeset
|
3321 socktype = SOCK_DGRAM; |
e8a136850817
(QCfeature, QCdatagram): Removed variables.
Kim F. Storm <storm@cua.dk>
parents:
44041
diff
changeset
|
3322 #endif |
106397
210af1fb2669
(Qseqpacket): New symbol.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
106186
diff
changeset
|
3323 #ifdef HAVE_SEQPACKET |
210af1fb2669
(Qseqpacket): New symbol.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
106186
diff
changeset
|
3324 else if (EQ (tem, Qseqpacket)) |
210af1fb2669
(Qseqpacket): New symbol.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
106186
diff
changeset
|
3325 socktype = SOCK_SEQPACKET; |
210af1fb2669
(Qseqpacket): New symbol.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
106186
diff
changeset
|
3326 #endif |
44067
e8a136850817
(QCfeature, QCdatagram): Removed variables.
Kim F. Storm <storm@cua.dk>
parents:
44041
diff
changeset
|
3327 else |
e8a136850817
(QCfeature, QCdatagram): Removed variables.
Kim F. Storm <storm@cua.dk>
parents:
44041
diff
changeset
|
3328 error ("Unsupported connection type"); |
43968
7ec801358b7e
(Qlocal, QCname, QCbuffer, QChost, QCservice, QCfamily)
Kim F. Storm <storm@cua.dk>
parents:
43642
diff
changeset
|
3329 |
7ec801358b7e
(Qlocal, QCname, QCbuffer, QChost, QCservice, QCfamily)
Kim F. Storm <storm@cua.dk>
parents:
43642
diff
changeset
|
3330 /* :server BOOL */ |
7ec801358b7e
(Qlocal, QCname, QCbuffer, QChost, QCservice, QCfamily)
Kim F. Storm <storm@cua.dk>
parents:
43642
diff
changeset
|
3331 tem = Fplist_get (contact, QCserver); |
7ec801358b7e
(Qlocal, QCname, QCbuffer, QChost, QCservice, QCfamily)
Kim F. Storm <storm@cua.dk>
parents:
43642
diff
changeset
|
3332 if (!NILP (tem)) |
25248
f0fc8443bdbb
(Fopen_network_stream): Use getaddrinfo.
Karl Heuer <kwzh@gnu.org>
parents:
25129
diff
changeset
|
3333 { |
45099
8a33d836b6fb
(Fmake_network_process): Only support server sockets
Jason Rumney <jasonr@gnu.org>
parents:
45005
diff
changeset
|
3334 /* Don't support network sockets when non-blocking mode is |
8a33d836b6fb
(Fmake_network_process): Only support server sockets
Jason Rumney <jasonr@gnu.org>
parents:
45005
diff
changeset
|
3335 not available, since a blocked Emacs is not useful. */ |
96732
1e0b67e40d48
* systty.h: Remove code for Aix on 386, unsupported platform.
Dan Nicolaescu <dann@ics.uci.edu>
parents:
96675
diff
changeset
|
3336 #if !defined(O_NONBLOCK) && !defined(O_NDELAY) |
43968
7ec801358b7e
(Qlocal, QCname, QCbuffer, QChost, QCservice, QCfamily)
Kim F. Storm <storm@cua.dk>
parents:
43642
diff
changeset
|
3337 error ("Network servers not supported"); |
7ec801358b7e
(Qlocal, QCname, QCbuffer, QChost, QCservice, QCfamily)
Kim F. Storm <storm@cua.dk>
parents:
43642
diff
changeset
|
3338 #else |
7ec801358b7e
(Qlocal, QCname, QCbuffer, QChost, QCservice, QCfamily)
Kim F. Storm <storm@cua.dk>
parents:
43642
diff
changeset
|
3339 is_server = 1; |
52516
0ca23eb697b9
(Fset_process_sentinel): Add sentinel to childp plist
Kim F. Storm <storm@cua.dk>
parents:
52503
diff
changeset
|
3340 if (INTEGERP (tem)) |
0ca23eb697b9
(Fset_process_sentinel): Add sentinel to childp plist
Kim F. Storm <storm@cua.dk>
parents:
52503
diff
changeset
|
3341 backlog = XINT (tem); |
43968
7ec801358b7e
(Qlocal, QCname, QCbuffer, QChost, QCservice, QCfamily)
Kim F. Storm <storm@cua.dk>
parents:
43642
diff
changeset
|
3342 #endif |
25248
f0fc8443bdbb
(Fopen_network_stream): Use getaddrinfo.
Karl Heuer <kwzh@gnu.org>
parents:
25129
diff
changeset
|
3343 } |
43968
7ec801358b7e
(Qlocal, QCname, QCbuffer, QChost, QCservice, QCfamily)
Kim F. Storm <storm@cua.dk>
parents:
43642
diff
changeset
|
3344 |
7ec801358b7e
(Qlocal, QCname, QCbuffer, QChost, QCservice, QCfamily)
Kim F. Storm <storm@cua.dk>
parents:
43642
diff
changeset
|
3345 /* Make QCaddress an alias for :local (server) or :remote (client). */ |
7ec801358b7e
(Qlocal, QCname, QCbuffer, QChost, QCservice, QCfamily)
Kim F. Storm <storm@cua.dk>
parents:
43642
diff
changeset
|
3346 QCaddress = is_server ? QClocal : QCremote; |
7ec801358b7e
(Qlocal, QCname, QCbuffer, QChost, QCservice, QCfamily)
Kim F. Storm <storm@cua.dk>
parents:
43642
diff
changeset
|
3347 |
74946 | 3348 /* :nowait BOOL */ |
106398
31424b91531a
(Fmake_network_process): Fix up the tests for
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
106397
diff
changeset
|
3349 if (!is_server && socktype != SOCK_DGRAM |
43968
7ec801358b7e
(Qlocal, QCname, QCbuffer, QChost, QCservice, QCfamily)
Kim F. Storm <storm@cua.dk>
parents:
43642
diff
changeset
|
3350 && (tem = Fplist_get (contact, QCnowait), !NILP (tem))) |
25248
f0fc8443bdbb
(Fopen_network_stream): Use getaddrinfo.
Karl Heuer <kwzh@gnu.org>
parents:
25129
diff
changeset
|
3351 { |
43968
7ec801358b7e
(Qlocal, QCname, QCbuffer, QChost, QCservice, QCfamily)
Kim F. Storm <storm@cua.dk>
parents:
43642
diff
changeset
|
3352 #ifndef NON_BLOCKING_CONNECT |
7ec801358b7e
(Qlocal, QCname, QCbuffer, QChost, QCservice, QCfamily)
Kim F. Storm <storm@cua.dk>
parents:
43642
diff
changeset
|
3353 error ("Non-blocking connect not supported"); |
7ec801358b7e
(Qlocal, QCname, QCbuffer, QChost, QCservice, QCfamily)
Kim F. Storm <storm@cua.dk>
parents:
43642
diff
changeset
|
3354 #else |
7ec801358b7e
(Qlocal, QCname, QCbuffer, QChost, QCservice, QCfamily)
Kim F. Storm <storm@cua.dk>
parents:
43642
diff
changeset
|
3355 is_non_blocking_client = 1; |
7ec801358b7e
(Qlocal, QCname, QCbuffer, QChost, QCservice, QCfamily)
Kim F. Storm <storm@cua.dk>
parents:
43642
diff
changeset
|
3356 #endif |
25248
f0fc8443bdbb
(Fopen_network_stream): Use getaddrinfo.
Karl Heuer <kwzh@gnu.org>
parents:
25129
diff
changeset
|
3357 } |
43968
7ec801358b7e
(Qlocal, QCname, QCbuffer, QChost, QCservice, QCfamily)
Kim F. Storm <storm@cua.dk>
parents:
43642
diff
changeset
|
3358 |
7ec801358b7e
(Qlocal, QCname, QCbuffer, QChost, QCservice, QCfamily)
Kim F. Storm <storm@cua.dk>
parents:
43642
diff
changeset
|
3359 name = Fplist_get (contact, QCname); |
7ec801358b7e
(Qlocal, QCname, QCbuffer, QChost, QCservice, QCfamily)
Kim F. Storm <storm@cua.dk>
parents:
43642
diff
changeset
|
3360 buffer = Fplist_get (contact, QCbuffer); |
7ec801358b7e
(Qlocal, QCname, QCbuffer, QChost, QCservice, QCfamily)
Kim F. Storm <storm@cua.dk>
parents:
43642
diff
changeset
|
3361 filter = Fplist_get (contact, QCfilter); |
7ec801358b7e
(Qlocal, QCname, QCbuffer, QChost, QCservice, QCfamily)
Kim F. Storm <storm@cua.dk>
parents:
43642
diff
changeset
|
3362 sentinel = Fplist_get (contact, QCsentinel); |
7ec801358b7e
(Qlocal, QCname, QCbuffer, QChost, QCservice, QCfamily)
Kim F. Storm <storm@cua.dk>
parents:
43642
diff
changeset
|
3363 |
7ec801358b7e
(Qlocal, QCname, QCbuffer, QChost, QCservice, QCfamily)
Kim F. Storm <storm@cua.dk>
parents:
43642
diff
changeset
|
3364 CHECK_STRING (name); |
7ec801358b7e
(Qlocal, QCname, QCbuffer, QChost, QCservice, QCfamily)
Kim F. Storm <storm@cua.dk>
parents:
43642
diff
changeset
|
3365 |
7ec801358b7e
(Qlocal, QCname, QCbuffer, QChost, QCservice, QCfamily)
Kim F. Storm <storm@cua.dk>
parents:
43642
diff
changeset
|
3366 /* Initialize addrinfo structure in case we don't use getaddrinfo. */ |
7ec801358b7e
(Qlocal, QCname, QCbuffer, QChost, QCservice, QCfamily)
Kim F. Storm <storm@cua.dk>
parents:
43642
diff
changeset
|
3367 ai.ai_socktype = socktype; |
7ec801358b7e
(Qlocal, QCname, QCbuffer, QChost, QCservice, QCfamily)
Kim F. Storm <storm@cua.dk>
parents:
43642
diff
changeset
|
3368 ai.ai_protocol = 0; |
7ec801358b7e
(Qlocal, QCname, QCbuffer, QChost, QCservice, QCfamily)
Kim F. Storm <storm@cua.dk>
parents:
43642
diff
changeset
|
3369 ai.ai_next = NULL; |
7ec801358b7e
(Qlocal, QCname, QCbuffer, QChost, QCservice, QCfamily)
Kim F. Storm <storm@cua.dk>
parents:
43642
diff
changeset
|
3370 res = &ai; |
7ec801358b7e
(Qlocal, QCname, QCbuffer, QChost, QCservice, QCfamily)
Kim F. Storm <storm@cua.dk>
parents:
43642
diff
changeset
|
3371 |
7ec801358b7e
(Qlocal, QCname, QCbuffer, QChost, QCservice, QCfamily)
Kim F. Storm <storm@cua.dk>
parents:
43642
diff
changeset
|
3372 /* :local ADDRESS or :remote ADDRESS */ |
7ec801358b7e
(Qlocal, QCname, QCbuffer, QChost, QCservice, QCfamily)
Kim F. Storm <storm@cua.dk>
parents:
43642
diff
changeset
|
3373 address = Fplist_get (contact, QCaddress); |
7ec801358b7e
(Qlocal, QCname, QCbuffer, QChost, QCservice, QCfamily)
Kim F. Storm <storm@cua.dk>
parents:
43642
diff
changeset
|
3374 if (!NILP (address)) |
7ec801358b7e
(Qlocal, QCname, QCbuffer, QChost, QCservice, QCfamily)
Kim F. Storm <storm@cua.dk>
parents:
43642
diff
changeset
|
3375 { |
7ec801358b7e
(Qlocal, QCname, QCbuffer, QChost, QCservice, QCfamily)
Kim F. Storm <storm@cua.dk>
parents:
43642
diff
changeset
|
3376 host = service = Qnil; |
7ec801358b7e
(Qlocal, QCname, QCbuffer, QChost, QCservice, QCfamily)
Kim F. Storm <storm@cua.dk>
parents:
43642
diff
changeset
|
3377 |
7ec801358b7e
(Qlocal, QCname, QCbuffer, QChost, QCservice, QCfamily)
Kim F. Storm <storm@cua.dk>
parents:
43642
diff
changeset
|
3378 if (!(ai.ai_addrlen = get_lisp_to_sockaddr_size (address, &family))) |
7ec801358b7e
(Qlocal, QCname, QCbuffer, QChost, QCservice, QCfamily)
Kim F. Storm <storm@cua.dk>
parents:
43642
diff
changeset
|
3379 error ("Malformed :address"); |
7ec801358b7e
(Qlocal, QCname, QCbuffer, QChost, QCservice, QCfamily)
Kim F. Storm <storm@cua.dk>
parents:
43642
diff
changeset
|
3380 ai.ai_family = family; |
7ec801358b7e
(Qlocal, QCname, QCbuffer, QChost, QCservice, QCfamily)
Kim F. Storm <storm@cua.dk>
parents:
43642
diff
changeset
|
3381 ai.ai_addr = alloca (ai.ai_addrlen); |
7ec801358b7e
(Qlocal, QCname, QCbuffer, QChost, QCservice, QCfamily)
Kim F. Storm <storm@cua.dk>
parents:
43642
diff
changeset
|
3382 conv_lisp_to_sockaddr (family, address, ai.ai_addr, ai.ai_addrlen); |
7ec801358b7e
(Qlocal, QCname, QCbuffer, QChost, QCservice, QCfamily)
Kim F. Storm <storm@cua.dk>
parents:
43642
diff
changeset
|
3383 goto open_socket; |
7ec801358b7e
(Qlocal, QCname, QCbuffer, QChost, QCservice, QCfamily)
Kim F. Storm <storm@cua.dk>
parents:
43642
diff
changeset
|
3384 } |
7ec801358b7e
(Qlocal, QCname, QCbuffer, QChost, QCservice, QCfamily)
Kim F. Storm <storm@cua.dk>
parents:
43642
diff
changeset
|
3385 |
7ec801358b7e
(Qlocal, QCname, QCbuffer, QChost, QCservice, QCfamily)
Kim F. Storm <storm@cua.dk>
parents:
43642
diff
changeset
|
3386 /* :family FAMILY -- nil (for Inet), local, or integer. */ |
7ec801358b7e
(Qlocal, QCname, QCbuffer, QChost, QCservice, QCfamily)
Kim F. Storm <storm@cua.dk>
parents:
43642
diff
changeset
|
3387 tem = Fplist_get (contact, QCfamily); |
68008 | 3388 if (NILP (tem)) |
3389 { | |
68041
b7409cbd6d99
(Fmake_network_process): Use AF_INET instead of
Kim F. Storm <storm@cua.dk>
parents:
68022
diff
changeset
|
3390 #if defined(HAVE_GETADDRINFO) && defined(AF_INET6) |
68008 | 3391 family = AF_UNSPEC; |
3392 #else | |
3393 family = AF_INET; | |
3394 #endif | |
3395 } | |
3396 #ifdef HAVE_LOCAL_SOCKETS | |
3397 else if (EQ (tem, Qlocal)) | |
3398 family = AF_LOCAL; | |
3399 #endif | |
3400 #ifdef AF_INET6 | |
3401 else if (EQ (tem, Qipv6)) | |
3402 family = AF_INET6; | |
3403 #endif | |
3404 else if (EQ (tem, Qipv4)) | |
3405 family = AF_INET; | |
3406 else if (INTEGERP (tem)) | |
43968
7ec801358b7e
(Qlocal, QCname, QCbuffer, QChost, QCservice, QCfamily)
Kim F. Storm <storm@cua.dk>
parents:
43642
diff
changeset
|
3407 family = XINT (tem); |
7ec801358b7e
(Qlocal, QCname, QCbuffer, QChost, QCservice, QCfamily)
Kim F. Storm <storm@cua.dk>
parents:
43642
diff
changeset
|
3408 else |
7ec801358b7e
(Qlocal, QCname, QCbuffer, QChost, QCservice, QCfamily)
Kim F. Storm <storm@cua.dk>
parents:
43642
diff
changeset
|
3409 error ("Unknown address family"); |
68008 | 3410 |
43968
7ec801358b7e
(Qlocal, QCname, QCbuffer, QChost, QCservice, QCfamily)
Kim F. Storm <storm@cua.dk>
parents:
43642
diff
changeset
|
3411 ai.ai_family = family; |
7ec801358b7e
(Qlocal, QCname, QCbuffer, QChost, QCservice, QCfamily)
Kim F. Storm <storm@cua.dk>
parents:
43642
diff
changeset
|
3412 |
7ec801358b7e
(Qlocal, QCname, QCbuffer, QChost, QCservice, QCfamily)
Kim F. Storm <storm@cua.dk>
parents:
43642
diff
changeset
|
3413 /* :service SERVICE -- string, integer (port number), or t (random port). */ |
7ec801358b7e
(Qlocal, QCname, QCbuffer, QChost, QCservice, QCfamily)
Kim F. Storm <storm@cua.dk>
parents:
43642
diff
changeset
|
3414 service = Fplist_get (contact, QCservice); |
7ec801358b7e
(Qlocal, QCname, QCbuffer, QChost, QCservice, QCfamily)
Kim F. Storm <storm@cua.dk>
parents:
43642
diff
changeset
|
3415 |
7ec801358b7e
(Qlocal, QCname, QCbuffer, QChost, QCservice, QCfamily)
Kim F. Storm <storm@cua.dk>
parents:
43642
diff
changeset
|
3416 #ifdef HAVE_LOCAL_SOCKETS |
7ec801358b7e
(Qlocal, QCname, QCbuffer, QChost, QCservice, QCfamily)
Kim F. Storm <storm@cua.dk>
parents:
43642
diff
changeset
|
3417 if (family == AF_LOCAL) |
7ec801358b7e
(Qlocal, QCname, QCbuffer, QChost, QCservice, QCfamily)
Kim F. Storm <storm@cua.dk>
parents:
43642
diff
changeset
|
3418 { |
7ec801358b7e
(Qlocal, QCname, QCbuffer, QChost, QCservice, QCfamily)
Kim F. Storm <storm@cua.dk>
parents:
43642
diff
changeset
|
3419 /* Host is not used. */ |
7ec801358b7e
(Qlocal, QCname, QCbuffer, QChost, QCservice, QCfamily)
Kim F. Storm <storm@cua.dk>
parents:
43642
diff
changeset
|
3420 host = Qnil; |
7ec801358b7e
(Qlocal, QCname, QCbuffer, QChost, QCservice, QCfamily)
Kim F. Storm <storm@cua.dk>
parents:
43642
diff
changeset
|
3421 CHECK_STRING (service); |
7ec801358b7e
(Qlocal, QCname, QCbuffer, QChost, QCservice, QCfamily)
Kim F. Storm <storm@cua.dk>
parents:
43642
diff
changeset
|
3422 bzero (&address_un, sizeof address_un); |
7ec801358b7e
(Qlocal, QCname, QCbuffer, QChost, QCservice, QCfamily)
Kim F. Storm <storm@cua.dk>
parents:
43642
diff
changeset
|
3423 address_un.sun_family = AF_LOCAL; |
46370
40db0673e6f0
Most uses of XSTRING combined with STRING_BYTES or indirection changed to
Ken Raeburn <raeburn@raeburn.org>
parents:
46314
diff
changeset
|
3424 strncpy (address_un.sun_path, SDATA (service), sizeof address_un.sun_path); |
43968
7ec801358b7e
(Qlocal, QCname, QCbuffer, QChost, QCservice, QCfamily)
Kim F. Storm <storm@cua.dk>
parents:
43642
diff
changeset
|
3425 ai.ai_addr = (struct sockaddr *) &address_un; |
7ec801358b7e
(Qlocal, QCname, QCbuffer, QChost, QCservice, QCfamily)
Kim F. Storm <storm@cua.dk>
parents:
43642
diff
changeset
|
3426 ai.ai_addrlen = sizeof address_un; |
7ec801358b7e
(Qlocal, QCname, QCbuffer, QChost, QCservice, QCfamily)
Kim F. Storm <storm@cua.dk>
parents:
43642
diff
changeset
|
3427 goto open_socket; |
7ec801358b7e
(Qlocal, QCname, QCbuffer, QChost, QCservice, QCfamily)
Kim F. Storm <storm@cua.dk>
parents:
43642
diff
changeset
|
3428 } |
7ec801358b7e
(Qlocal, QCname, QCbuffer, QChost, QCservice, QCfamily)
Kim F. Storm <storm@cua.dk>
parents:
43642
diff
changeset
|
3429 #endif |
7ec801358b7e
(Qlocal, QCname, QCbuffer, QChost, QCservice, QCfamily)
Kim F. Storm <storm@cua.dk>
parents:
43642
diff
changeset
|
3430 |
7ec801358b7e
(Qlocal, QCname, QCbuffer, QChost, QCservice, QCfamily)
Kim F. Storm <storm@cua.dk>
parents:
43642
diff
changeset
|
3431 /* :host HOST -- hostname, ip address, or 'local for localhost. */ |
7ec801358b7e
(Qlocal, QCname, QCbuffer, QChost, QCservice, QCfamily)
Kim F. Storm <storm@cua.dk>
parents:
43642
diff
changeset
|
3432 host = Fplist_get (contact, QChost); |
7ec801358b7e
(Qlocal, QCname, QCbuffer, QChost, QCservice, QCfamily)
Kim F. Storm <storm@cua.dk>
parents:
43642
diff
changeset
|
3433 if (!NILP (host)) |
7ec801358b7e
(Qlocal, QCname, QCbuffer, QChost, QCservice, QCfamily)
Kim F. Storm <storm@cua.dk>
parents:
43642
diff
changeset
|
3434 { |
7ec801358b7e
(Qlocal, QCname, QCbuffer, QChost, QCservice, QCfamily)
Kim F. Storm <storm@cua.dk>
parents:
43642
diff
changeset
|
3435 if (EQ (host, Qlocal)) |
7ec801358b7e
(Qlocal, QCname, QCbuffer, QChost, QCservice, QCfamily)
Kim F. Storm <storm@cua.dk>
parents:
43642
diff
changeset
|
3436 host = build_string ("localhost"); |
7ec801358b7e
(Qlocal, QCname, QCbuffer, QChost, QCservice, QCfamily)
Kim F. Storm <storm@cua.dk>
parents:
43642
diff
changeset
|
3437 CHECK_STRING (host); |
7ec801358b7e
(Qlocal, QCname, QCbuffer, QChost, QCservice, QCfamily)
Kim F. Storm <storm@cua.dk>
parents:
43642
diff
changeset
|
3438 } |
578 | 3439 |
13777
5e0cbd5fcb46
(Fopen_network_stream): Call bind_polling_period earlier.
Karl Heuer <kwzh@gnu.org>
parents:
13709
diff
changeset
|
3440 /* Slow down polling to every ten seconds. |
5e0cbd5fcb46
(Fopen_network_stream): Call bind_polling_period earlier.
Karl Heuer <kwzh@gnu.org>
parents:
13709
diff
changeset
|
3441 Some kernels have a bug which causes retrying connect to fail |
5e0cbd5fcb46
(Fopen_network_stream): Call bind_polling_period earlier.
Karl Heuer <kwzh@gnu.org>
parents:
13709
diff
changeset
|
3442 after a connect. Polling can interfere with gethostbyname too. */ |
5e0cbd5fcb46
(Fopen_network_stream): Call bind_polling_period earlier.
Karl Heuer <kwzh@gnu.org>
parents:
13709
diff
changeset
|
3443 #ifdef POLL_FOR_INPUT |
106398
31424b91531a
(Fmake_network_process): Fix up the tests for
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
106397
diff
changeset
|
3444 if (socktype != SOCK_DGRAM) |
43968
7ec801358b7e
(Qlocal, QCname, QCbuffer, QChost, QCservice, QCfamily)
Kim F. Storm <storm@cua.dk>
parents:
43642
diff
changeset
|
3445 { |
7ec801358b7e
(Qlocal, QCname, QCbuffer, QChost, QCservice, QCfamily)
Kim F. Storm <storm@cua.dk>
parents:
43642
diff
changeset
|
3446 record_unwind_protect (unwind_stop_other_atimers, Qnil); |
7ec801358b7e
(Qlocal, QCname, QCbuffer, QChost, QCservice, QCfamily)
Kim F. Storm <storm@cua.dk>
parents:
43642
diff
changeset
|
3447 bind_polling_period (10); |
7ec801358b7e
(Qlocal, QCname, QCbuffer, QChost, QCservice, QCfamily)
Kim F. Storm <storm@cua.dk>
parents:
43642
diff
changeset
|
3448 } |
7ec801358b7e
(Qlocal, QCname, QCbuffer, QChost, QCservice, QCfamily)
Kim F. Storm <storm@cua.dk>
parents:
43642
diff
changeset
|
3449 #endif |
7ec801358b7e
(Qlocal, QCname, QCbuffer, QChost, QCservice, QCfamily)
Kim F. Storm <storm@cua.dk>
parents:
43642
diff
changeset
|
3450 |
25248
f0fc8443bdbb
(Fopen_network_stream): Use getaddrinfo.
Karl Heuer <kwzh@gnu.org>
parents:
25129
diff
changeset
|
3451 #ifdef HAVE_GETADDRINFO |
43968
7ec801358b7e
(Qlocal, QCname, QCbuffer, QChost, QCservice, QCfamily)
Kim F. Storm <storm@cua.dk>
parents:
43642
diff
changeset
|
3452 /* If we have a host, use getaddrinfo to resolve both host and service. |
7ec801358b7e
(Qlocal, QCname, QCbuffer, QChost, QCservice, QCfamily)
Kim F. Storm <storm@cua.dk>
parents:
43642
diff
changeset
|
3453 Otherwise, use getservbyname to lookup the service. */ |
7ec801358b7e
(Qlocal, QCname, QCbuffer, QChost, QCservice, QCfamily)
Kim F. Storm <storm@cua.dk>
parents:
43642
diff
changeset
|
3454 if (!NILP (host)) |
7ec801358b7e
(Qlocal, QCname, QCbuffer, QChost, QCservice, QCfamily)
Kim F. Storm <storm@cua.dk>
parents:
43642
diff
changeset
|
3455 { |
7ec801358b7e
(Qlocal, QCname, QCbuffer, QChost, QCservice, QCfamily)
Kim F. Storm <storm@cua.dk>
parents:
43642
diff
changeset
|
3456 |
7ec801358b7e
(Qlocal, QCname, QCbuffer, QChost, QCservice, QCfamily)
Kim F. Storm <storm@cua.dk>
parents:
43642
diff
changeset
|
3457 /* SERVICE can either be a string or int. |
7ec801358b7e
(Qlocal, QCname, QCbuffer, QChost, QCservice, QCfamily)
Kim F. Storm <storm@cua.dk>
parents:
43642
diff
changeset
|
3458 Convert to a C string for later use by getaddrinfo. */ |
7ec801358b7e
(Qlocal, QCname, QCbuffer, QChost, QCservice, QCfamily)
Kim F. Storm <storm@cua.dk>
parents:
43642
diff
changeset
|
3459 if (EQ (service, Qt)) |
7ec801358b7e
(Qlocal, QCname, QCbuffer, QChost, QCservice, QCfamily)
Kim F. Storm <storm@cua.dk>
parents:
43642
diff
changeset
|
3460 portstring = "0"; |
7ec801358b7e
(Qlocal, QCname, QCbuffer, QChost, QCservice, QCfamily)
Kim F. Storm <storm@cua.dk>
parents:
43642
diff
changeset
|
3461 else if (INTEGERP (service)) |
7ec801358b7e
(Qlocal, QCname, QCbuffer, QChost, QCservice, QCfamily)
Kim F. Storm <storm@cua.dk>
parents:
43642
diff
changeset
|
3462 { |
7ec801358b7e
(Qlocal, QCname, QCbuffer, QChost, QCservice, QCfamily)
Kim F. Storm <storm@cua.dk>
parents:
43642
diff
changeset
|
3463 sprintf (portbuf, "%ld", (long) XINT (service)); |
7ec801358b7e
(Qlocal, QCname, QCbuffer, QChost, QCservice, QCfamily)
Kim F. Storm <storm@cua.dk>
parents:
43642
diff
changeset
|
3464 portstring = portbuf; |
7ec801358b7e
(Qlocal, QCname, QCbuffer, QChost, QCservice, QCfamily)
Kim F. Storm <storm@cua.dk>
parents:
43642
diff
changeset
|
3465 } |
7ec801358b7e
(Qlocal, QCname, QCbuffer, QChost, QCservice, QCfamily)
Kim F. Storm <storm@cua.dk>
parents:
43642
diff
changeset
|
3466 else |
7ec801358b7e
(Qlocal, QCname, QCbuffer, QChost, QCservice, QCfamily)
Kim F. Storm <storm@cua.dk>
parents:
43642
diff
changeset
|
3467 { |
7ec801358b7e
(Qlocal, QCname, QCbuffer, QChost, QCservice, QCfamily)
Kim F. Storm <storm@cua.dk>
parents:
43642
diff
changeset
|
3468 CHECK_STRING (service); |
46370
40db0673e6f0
Most uses of XSTRING combined with STRING_BYTES or indirection changed to
Ken Raeburn <raeburn@raeburn.org>
parents:
46314
diff
changeset
|
3469 portstring = SDATA (service); |
43968
7ec801358b7e
(Qlocal, QCname, QCbuffer, QChost, QCservice, QCfamily)
Kim F. Storm <storm@cua.dk>
parents:
43642
diff
changeset
|
3470 } |
7ec801358b7e
(Qlocal, QCname, QCbuffer, QChost, QCservice, QCfamily)
Kim F. Storm <storm@cua.dk>
parents:
43642
diff
changeset
|
3471 |
7ec801358b7e
(Qlocal, QCname, QCbuffer, QChost, QCservice, QCfamily)
Kim F. Storm <storm@cua.dk>
parents:
43642
diff
changeset
|
3472 immediate_quit = 1; |
7ec801358b7e
(Qlocal, QCname, QCbuffer, QChost, QCservice, QCfamily)
Kim F. Storm <storm@cua.dk>
parents:
43642
diff
changeset
|
3473 QUIT; |
7ec801358b7e
(Qlocal, QCname, QCbuffer, QChost, QCservice, QCfamily)
Kim F. Storm <storm@cua.dk>
parents:
43642
diff
changeset
|
3474 memset (&hints, 0, sizeof (hints)); |
7ec801358b7e
(Qlocal, QCname, QCbuffer, QChost, QCservice, QCfamily)
Kim F. Storm <storm@cua.dk>
parents:
43642
diff
changeset
|
3475 hints.ai_flags = 0; |
68008 | 3476 hints.ai_family = family; |
43968
7ec801358b7e
(Qlocal, QCname, QCbuffer, QChost, QCservice, QCfamily)
Kim F. Storm <storm@cua.dk>
parents:
43642
diff
changeset
|
3477 hints.ai_socktype = socktype; |
7ec801358b7e
(Qlocal, QCname, QCbuffer, QChost, QCservice, QCfamily)
Kim F. Storm <storm@cua.dk>
parents:
43642
diff
changeset
|
3478 hints.ai_protocol = 0; |
85362
b949ffc47cba
Link to libs for calling res_init() if available.
Chong Yidong <cyd@stupidchicken.com>
parents:
84668
diff
changeset
|
3479 |
b949ffc47cba
Link to libs for calling res_init() if available.
Chong Yidong <cyd@stupidchicken.com>
parents:
84668
diff
changeset
|
3480 #ifdef HAVE_RES_INIT |
b949ffc47cba
Link to libs for calling res_init() if available.
Chong Yidong <cyd@stupidchicken.com>
parents:
84668
diff
changeset
|
3481 res_init (); |
b949ffc47cba
Link to libs for calling res_init() if available.
Chong Yidong <cyd@stupidchicken.com>
parents:
84668
diff
changeset
|
3482 #endif |
b949ffc47cba
Link to libs for calling res_init() if available.
Chong Yidong <cyd@stupidchicken.com>
parents:
84668
diff
changeset
|
3483 |
46370
40db0673e6f0
Most uses of XSTRING combined with STRING_BYTES or indirection changed to
Ken Raeburn <raeburn@raeburn.org>
parents:
46314
diff
changeset
|
3484 ret = getaddrinfo (SDATA (host), portstring, &hints, &res); |
43968
7ec801358b7e
(Qlocal, QCname, QCbuffer, QChost, QCservice, QCfamily)
Kim F. Storm <storm@cua.dk>
parents:
43642
diff
changeset
|
3485 if (ret) |
32074
a889f9fc59a7
(Fopen_network_stream): Use HAVE_GAI_STRERROR.
Dave Love <fx@gnu.org>
parents:
32032
diff
changeset
|
3486 #ifdef HAVE_GAI_STRERROR |
46370
40db0673e6f0
Most uses of XSTRING combined with STRING_BYTES or indirection changed to
Ken Raeburn <raeburn@raeburn.org>
parents:
46314
diff
changeset
|
3487 error ("%s/%s %s", SDATA (host), portstring, gai_strerror(ret)); |
32074
a889f9fc59a7
(Fopen_network_stream): Use HAVE_GAI_STRERROR.
Dave Love <fx@gnu.org>
parents:
32032
diff
changeset
|
3488 #else |
100824
e5aa6a069f40
(conv_sockaddr_to_lisp): Add workaround for
Andreas Schwab <schwab@suse.de>
parents:
100573
diff
changeset
|
3489 error ("%s/%s getaddrinfo error %d", SDATA (host), portstring, ret); |
43968
7ec801358b7e
(Qlocal, QCname, QCbuffer, QChost, QCservice, QCfamily)
Kim F. Storm <storm@cua.dk>
parents:
43642
diff
changeset
|
3490 #endif |
7ec801358b7e
(Qlocal, QCname, QCbuffer, QChost, QCservice, QCfamily)
Kim F. Storm <storm@cua.dk>
parents:
43642
diff
changeset
|
3491 immediate_quit = 0; |
7ec801358b7e
(Qlocal, QCname, QCbuffer, QChost, QCservice, QCfamily)
Kim F. Storm <storm@cua.dk>
parents:
43642
diff
changeset
|
3492 |
7ec801358b7e
(Qlocal, QCname, QCbuffer, QChost, QCservice, QCfamily)
Kim F. Storm <storm@cua.dk>
parents:
43642
diff
changeset
|
3493 goto open_socket; |
7ec801358b7e
(Qlocal, QCname, QCbuffer, QChost, QCservice, QCfamily)
Kim F. Storm <storm@cua.dk>
parents:
43642
diff
changeset
|
3494 } |
7ec801358b7e
(Qlocal, QCname, QCbuffer, QChost, QCservice, QCfamily)
Kim F. Storm <storm@cua.dk>
parents:
43642
diff
changeset
|
3495 #endif /* HAVE_GETADDRINFO */ |
7ec801358b7e
(Qlocal, QCname, QCbuffer, QChost, QCservice, QCfamily)
Kim F. Storm <storm@cua.dk>
parents:
43642
diff
changeset
|
3496 |
7ec801358b7e
(Qlocal, QCname, QCbuffer, QChost, QCservice, QCfamily)
Kim F. Storm <storm@cua.dk>
parents:
43642
diff
changeset
|
3497 /* We end up here if getaddrinfo is not defined, or in case no hostname |
7ec801358b7e
(Qlocal, QCname, QCbuffer, QChost, QCservice, QCfamily)
Kim F. Storm <storm@cua.dk>
parents:
43642
diff
changeset
|
3498 has been specified (e.g. for a local server process). */ |
7ec801358b7e
(Qlocal, QCname, QCbuffer, QChost, QCservice, QCfamily)
Kim F. Storm <storm@cua.dk>
parents:
43642
diff
changeset
|
3499 |
7ec801358b7e
(Qlocal, QCname, QCbuffer, QChost, QCservice, QCfamily)
Kim F. Storm <storm@cua.dk>
parents:
43642
diff
changeset
|
3500 if (EQ (service, Qt)) |
7ec801358b7e
(Qlocal, QCname, QCbuffer, QChost, QCservice, QCfamily)
Kim F. Storm <storm@cua.dk>
parents:
43642
diff
changeset
|
3501 port = 0; |
7ec801358b7e
(Qlocal, QCname, QCbuffer, QChost, QCservice, QCfamily)
Kim F. Storm <storm@cua.dk>
parents:
43642
diff
changeset
|
3502 else if (INTEGERP (service)) |
7ec801358b7e
(Qlocal, QCname, QCbuffer, QChost, QCservice, QCfamily)
Kim F. Storm <storm@cua.dk>
parents:
43642
diff
changeset
|
3503 port = htons ((unsigned short) XINT (service)); |
7ec801358b7e
(Qlocal, QCname, QCbuffer, QChost, QCservice, QCfamily)
Kim F. Storm <storm@cua.dk>
parents:
43642
diff
changeset
|
3504 else |
8287
97c2535b7f37
(Fopen_network_stream): Retry gethostbyname after TRY_AGAIN failure.
Richard M. Stallman <rms@gnu.org>
parents:
8231
diff
changeset
|
3505 { |
43968
7ec801358b7e
(Qlocal, QCname, QCbuffer, QChost, QCservice, QCfamily)
Kim F. Storm <storm@cua.dk>
parents:
43642
diff
changeset
|
3506 struct servent *svc_info; |
7ec801358b7e
(Qlocal, QCname, QCbuffer, QChost, QCservice, QCfamily)
Kim F. Storm <storm@cua.dk>
parents:
43642
diff
changeset
|
3507 CHECK_STRING (service); |
49600
23a1cea22d13
Trailing whitespace deleted.
Juanma Barranquero <lekktu@gmail.com>
parents:
49281
diff
changeset
|
3508 svc_info = getservbyname (SDATA (service), |
43968
7ec801358b7e
(Qlocal, QCname, QCbuffer, QChost, QCservice, QCfamily)
Kim F. Storm <storm@cua.dk>
parents:
43642
diff
changeset
|
3509 (socktype == SOCK_DGRAM ? "udp" : "tcp")); |
7ec801358b7e
(Qlocal, QCname, QCbuffer, QChost, QCservice, QCfamily)
Kim F. Storm <storm@cua.dk>
parents:
43642
diff
changeset
|
3510 if (svc_info == 0) |
46370
40db0673e6f0
Most uses of XSTRING combined with STRING_BYTES or indirection changed to
Ken Raeburn <raeburn@raeburn.org>
parents:
46314
diff
changeset
|
3511 error ("Unknown service: %s", SDATA (service)); |
43968
7ec801358b7e
(Qlocal, QCname, QCbuffer, QChost, QCservice, QCfamily)
Kim F. Storm <storm@cua.dk>
parents:
43642
diff
changeset
|
3512 port = svc_info->s_port; |
7ec801358b7e
(Qlocal, QCname, QCbuffer, QChost, QCservice, QCfamily)
Kim F. Storm <storm@cua.dk>
parents:
43642
diff
changeset
|
3513 } |
7ec801358b7e
(Qlocal, QCname, QCbuffer, QChost, QCservice, QCfamily)
Kim F. Storm <storm@cua.dk>
parents:
43642
diff
changeset
|
3514 |
7ec801358b7e
(Qlocal, QCname, QCbuffer, QChost, QCservice, QCfamily)
Kim F. Storm <storm@cua.dk>
parents:
43642
diff
changeset
|
3515 bzero (&address_in, sizeof address_in); |
7ec801358b7e
(Qlocal, QCname, QCbuffer, QChost, QCservice, QCfamily)
Kim F. Storm <storm@cua.dk>
parents:
43642
diff
changeset
|
3516 address_in.sin_family = family; |
7ec801358b7e
(Qlocal, QCname, QCbuffer, QChost, QCservice, QCfamily)
Kim F. Storm <storm@cua.dk>
parents:
43642
diff
changeset
|
3517 address_in.sin_addr.s_addr = INADDR_ANY; |
7ec801358b7e
(Qlocal, QCname, QCbuffer, QChost, QCservice, QCfamily)
Kim F. Storm <storm@cua.dk>
parents:
43642
diff
changeset
|
3518 address_in.sin_port = port; |
7ec801358b7e
(Qlocal, QCname, QCbuffer, QChost, QCservice, QCfamily)
Kim F. Storm <storm@cua.dk>
parents:
43642
diff
changeset
|
3519 |
7ec801358b7e
(Qlocal, QCname, QCbuffer, QChost, QCservice, QCfamily)
Kim F. Storm <storm@cua.dk>
parents:
43642
diff
changeset
|
3520 #ifndef HAVE_GETADDRINFO |
7ec801358b7e
(Qlocal, QCname, QCbuffer, QChost, QCservice, QCfamily)
Kim F. Storm <storm@cua.dk>
parents:
43642
diff
changeset
|
3521 if (!NILP (host)) |
7ec801358b7e
(Qlocal, QCname, QCbuffer, QChost, QCservice, QCfamily)
Kim F. Storm <storm@cua.dk>
parents:
43642
diff
changeset
|
3522 { |
7ec801358b7e
(Qlocal, QCname, QCbuffer, QChost, QCservice, QCfamily)
Kim F. Storm <storm@cua.dk>
parents:
43642
diff
changeset
|
3523 struct hostent *host_info_ptr; |
7ec801358b7e
(Qlocal, QCname, QCbuffer, QChost, QCservice, QCfamily)
Kim F. Storm <storm@cua.dk>
parents:
43642
diff
changeset
|
3524 |
7ec801358b7e
(Qlocal, QCname, QCbuffer, QChost, QCservice, QCfamily)
Kim F. Storm <storm@cua.dk>
parents:
43642
diff
changeset
|
3525 /* gethostbyname may fail with TRY_AGAIN, but we don't honour that, |
55444
976d03256b41
(Fwaiting_for_user_input_p, Fmake_network_process)
Juanma Barranquero <lekktu@gmail.com>
parents:
53835
diff
changeset
|
3526 as it may `hang' Emacs for a very long time. */ |
14758
849458c13c0c
(wait_reading_process_input):
Richard M. Stallman <rms@gnu.org>
parents:
14736
diff
changeset
|
3527 immediate_quit = 1; |
849458c13c0c
(wait_reading_process_input):
Richard M. Stallman <rms@gnu.org>
parents:
14736
diff
changeset
|
3528 QUIT; |
85362
b949ffc47cba
Link to libs for calling res_init() if available.
Chong Yidong <cyd@stupidchicken.com>
parents:
84668
diff
changeset
|
3529 |
b949ffc47cba
Link to libs for calling res_init() if available.
Chong Yidong <cyd@stupidchicken.com>
parents:
84668
diff
changeset
|
3530 #ifdef HAVE_RES_INIT |
b949ffc47cba
Link to libs for calling res_init() if available.
Chong Yidong <cyd@stupidchicken.com>
parents:
84668
diff
changeset
|
3531 res_init (); |
b949ffc47cba
Link to libs for calling res_init() if available.
Chong Yidong <cyd@stupidchicken.com>
parents:
84668
diff
changeset
|
3532 #endif |
b949ffc47cba
Link to libs for calling res_init() if available.
Chong Yidong <cyd@stupidchicken.com>
parents:
84668
diff
changeset
|
3533 |
46370
40db0673e6f0
Most uses of XSTRING combined with STRING_BYTES or indirection changed to
Ken Raeburn <raeburn@raeburn.org>
parents:
46314
diff
changeset
|
3534 host_info_ptr = gethostbyname (SDATA (host)); |
14758
849458c13c0c
(wait_reading_process_input):
Richard M. Stallman <rms@gnu.org>
parents:
14736
diff
changeset
|
3535 immediate_quit = 0; |
49600
23a1cea22d13
Trailing whitespace deleted.
Juanma Barranquero <lekktu@gmail.com>
parents:
49281
diff
changeset
|
3536 |
43968
7ec801358b7e
(Qlocal, QCname, QCbuffer, QChost, QCservice, QCfamily)
Kim F. Storm <storm@cua.dk>
parents:
43642
diff
changeset
|
3537 if (host_info_ptr) |
7ec801358b7e
(Qlocal, QCname, QCbuffer, QChost, QCservice, QCfamily)
Kim F. Storm <storm@cua.dk>
parents:
43642
diff
changeset
|
3538 { |
7ec801358b7e
(Qlocal, QCname, QCbuffer, QChost, QCservice, QCfamily)
Kim F. Storm <storm@cua.dk>
parents:
43642
diff
changeset
|
3539 bcopy (host_info_ptr->h_addr, (char *) &address_in.sin_addr, |
7ec801358b7e
(Qlocal, QCname, QCbuffer, QChost, QCservice, QCfamily)
Kim F. Storm <storm@cua.dk>
parents:
43642
diff
changeset
|
3540 host_info_ptr->h_length); |
7ec801358b7e
(Qlocal, QCname, QCbuffer, QChost, QCservice, QCfamily)
Kim F. Storm <storm@cua.dk>
parents:
43642
diff
changeset
|
3541 family = host_info_ptr->h_addrtype; |
7ec801358b7e
(Qlocal, QCname, QCbuffer, QChost, QCservice, QCfamily)
Kim F. Storm <storm@cua.dk>
parents:
43642
diff
changeset
|
3542 address_in.sin_family = family; |
7ec801358b7e
(Qlocal, QCname, QCbuffer, QChost, QCservice, QCfamily)
Kim F. Storm <storm@cua.dk>
parents:
43642
diff
changeset
|
3543 } |
7ec801358b7e
(Qlocal, QCname, QCbuffer, QChost, QCservice, QCfamily)
Kim F. Storm <storm@cua.dk>
parents:
43642
diff
changeset
|
3544 else |
7ec801358b7e
(Qlocal, QCname, QCbuffer, QChost, QCservice, QCfamily)
Kim F. Storm <storm@cua.dk>
parents:
43642
diff
changeset
|
3545 /* Attempt to interpret host as numeric inet address */ |
7ec801358b7e
(Qlocal, QCname, QCbuffer, QChost, QCservice, QCfamily)
Kim F. Storm <storm@cua.dk>
parents:
43642
diff
changeset
|
3546 { |
91702
b7a5a89054dc
* configure.in (LIBX11_MACHINE, HAVE_XFREE386): Remove code
Dan Nicolaescu <dann@ics.uci.edu>
parents:
91551
diff
changeset
|
3547 unsigned long numeric_addr; |
46370
40db0673e6f0
Most uses of XSTRING combined with STRING_BYTES or indirection changed to
Ken Raeburn <raeburn@raeburn.org>
parents:
46314
diff
changeset
|
3548 numeric_addr = inet_addr ((char *) SDATA (host)); |
91702
b7a5a89054dc
* configure.in (LIBX11_MACHINE, HAVE_XFREE386): Remove code
Dan Nicolaescu <dann@ics.uci.edu>
parents:
91551
diff
changeset
|
3549 if (numeric_addr == -1) |
46370
40db0673e6f0
Most uses of XSTRING combined with STRING_BYTES or indirection changed to
Ken Raeburn <raeburn@raeburn.org>
parents:
46314
diff
changeset
|
3550 error ("Unknown host \"%s\"", SDATA (host)); |
43968
7ec801358b7e
(Qlocal, QCname, QCbuffer, QChost, QCservice, QCfamily)
Kim F. Storm <storm@cua.dk>
parents:
43642
diff
changeset
|
3551 |
7ec801358b7e
(Qlocal, QCname, QCbuffer, QChost, QCservice, QCfamily)
Kim F. Storm <storm@cua.dk>
parents:
43642
diff
changeset
|
3552 bcopy ((char *)&numeric_addr, (char *) &address_in.sin_addr, |
7ec801358b7e
(Qlocal, QCname, QCbuffer, QChost, QCservice, QCfamily)
Kim F. Storm <storm@cua.dk>
parents:
43642
diff
changeset
|
3553 sizeof (address_in.sin_addr)); |
7ec801358b7e
(Qlocal, QCname, QCbuffer, QChost, QCservice, QCfamily)
Kim F. Storm <storm@cua.dk>
parents:
43642
diff
changeset
|
3554 } |
7ec801358b7e
(Qlocal, QCname, QCbuffer, QChost, QCservice, QCfamily)
Kim F. Storm <storm@cua.dk>
parents:
43642
diff
changeset
|
3555 |
8287
97c2535b7f37
(Fopen_network_stream): Retry gethostbyname after TRY_AGAIN failure.
Richard M. Stallman <rms@gnu.org>
parents:
8231
diff
changeset
|
3556 } |
43968
7ec801358b7e
(Qlocal, QCname, QCbuffer, QChost, QCservice, QCfamily)
Kim F. Storm <storm@cua.dk>
parents:
43642
diff
changeset
|
3557 #endif /* not HAVE_GETADDRINFO */ |
7ec801358b7e
(Qlocal, QCname, QCbuffer, QChost, QCservice, QCfamily)
Kim F. Storm <storm@cua.dk>
parents:
43642
diff
changeset
|
3558 |
7ec801358b7e
(Qlocal, QCname, QCbuffer, QChost, QCservice, QCfamily)
Kim F. Storm <storm@cua.dk>
parents:
43642
diff
changeset
|
3559 ai.ai_family = family; |
7ec801358b7e
(Qlocal, QCname, QCbuffer, QChost, QCservice, QCfamily)
Kim F. Storm <storm@cua.dk>
parents:
43642
diff
changeset
|
3560 ai.ai_addr = (struct sockaddr *) &address_in; |
7ec801358b7e
(Qlocal, QCname, QCbuffer, QChost, QCservice, QCfamily)
Kim F. Storm <storm@cua.dk>
parents:
43642
diff
changeset
|
3561 ai.ai_addrlen = sizeof address_in; |
7ec801358b7e
(Qlocal, QCname, QCbuffer, QChost, QCservice, QCfamily)
Kim F. Storm <storm@cua.dk>
parents:
43642
diff
changeset
|
3562 |
7ec801358b7e
(Qlocal, QCname, QCbuffer, QChost, QCservice, QCfamily)
Kim F. Storm <storm@cua.dk>
parents:
43642
diff
changeset
|
3563 open_socket: |
7ec801358b7e
(Qlocal, QCname, QCbuffer, QChost, QCservice, QCfamily)
Kim F. Storm <storm@cua.dk>
parents:
43642
diff
changeset
|
3564 |
43598
f49377cf2e3c
(Qconnect, Qfailed): New variables.
Kim F. Storm <storm@cua.dk>
parents:
42600
diff
changeset
|
3565 /* Do this in case we never enter the for-loop below. */ |
46293
1fb8f75062c6
Use macro SPECPDL_INDEX.
Juanma Barranquero <lekktu@gmail.com>
parents:
45410
diff
changeset
|
3566 count1 = SPECPDL_INDEX (); |
43598
f49377cf2e3c
(Qconnect, Qfailed): New variables.
Kim F. Storm <storm@cua.dk>
parents:
42600
diff
changeset
|
3567 s = -1; |
f49377cf2e3c
(Qconnect, Qfailed): New variables.
Kim F. Storm <storm@cua.dk>
parents:
42600
diff
changeset
|
3568 |
f49377cf2e3c
(Qconnect, Qfailed): New variables.
Kim F. Storm <storm@cua.dk>
parents:
42600
diff
changeset
|
3569 for (lres = res; lres; lres = lres->ai_next) |
578 | 3570 { |
52516
0ca23eb697b9
(Fset_process_sentinel): Add sentinel to childp plist
Kim F. Storm <storm@cua.dk>
parents:
52503
diff
changeset
|
3571 int optn, optbits; |
0ca23eb697b9
(Fset_process_sentinel): Add sentinel to childp plist
Kim F. Storm <storm@cua.dk>
parents:
52503
diff
changeset
|
3572 |
58072
4ebc52bf6429
(Fmake_network_process): Remove kludge for interrupted
Kim F. Storm <storm@cua.dk>
parents:
57840
diff
changeset
|
3573 retry_connect: |
4ebc52bf6429
(Fmake_network_process): Remove kludge for interrupted
Kim F. Storm <storm@cua.dk>
parents:
57840
diff
changeset
|
3574 |
43598
f49377cf2e3c
(Qconnect, Qfailed): New variables.
Kim F. Storm <storm@cua.dk>
parents:
42600
diff
changeset
|
3575 s = socket (lres->ai_family, lres->ai_socktype, lres->ai_protocol); |
f49377cf2e3c
(Qconnect, Qfailed): New variables.
Kim F. Storm <storm@cua.dk>
parents:
42600
diff
changeset
|
3576 if (s < 0) |
f49377cf2e3c
(Qconnect, Qfailed): New variables.
Kim F. Storm <storm@cua.dk>
parents:
42600
diff
changeset
|
3577 { |
f49377cf2e3c
(Qconnect, Qfailed): New variables.
Kim F. Storm <storm@cua.dk>
parents:
42600
diff
changeset
|
3578 xerrno = errno; |
f49377cf2e3c
(Qconnect, Qfailed): New variables.
Kim F. Storm <storm@cua.dk>
parents:
42600
diff
changeset
|
3579 continue; |
f49377cf2e3c
(Qconnect, Qfailed): New variables.
Kim F. Storm <storm@cua.dk>
parents:
42600
diff
changeset
|
3580 } |
f49377cf2e3c
(Qconnect, Qfailed): New variables.
Kim F. Storm <storm@cua.dk>
parents:
42600
diff
changeset
|
3581 |
43968
7ec801358b7e
(Qlocal, QCname, QCbuffer, QChost, QCservice, QCfamily)
Kim F. Storm <storm@cua.dk>
parents:
43642
diff
changeset
|
3582 #ifdef DATAGRAM_SOCKETS |
7ec801358b7e
(Qlocal, QCname, QCbuffer, QChost, QCservice, QCfamily)
Kim F. Storm <storm@cua.dk>
parents:
43642
diff
changeset
|
3583 if (!is_server && socktype == SOCK_DGRAM) |
7ec801358b7e
(Qlocal, QCname, QCbuffer, QChost, QCservice, QCfamily)
Kim F. Storm <storm@cua.dk>
parents:
43642
diff
changeset
|
3584 break; |
7ec801358b7e
(Qlocal, QCname, QCbuffer, QChost, QCservice, QCfamily)
Kim F. Storm <storm@cua.dk>
parents:
43642
diff
changeset
|
3585 #endif /* DATAGRAM_SOCKETS */ |
7ec801358b7e
(Qlocal, QCname, QCbuffer, QChost, QCservice, QCfamily)
Kim F. Storm <storm@cua.dk>
parents:
43642
diff
changeset
|
3586 |
43598
f49377cf2e3c
(Qconnect, Qfailed): New variables.
Kim F. Storm <storm@cua.dk>
parents:
42600
diff
changeset
|
3587 #ifdef NON_BLOCKING_CONNECT |
43968
7ec801358b7e
(Qlocal, QCname, QCbuffer, QChost, QCservice, QCfamily)
Kim F. Storm <storm@cua.dk>
parents:
43642
diff
changeset
|
3588 if (is_non_blocking_client) |
43598
f49377cf2e3c
(Qconnect, Qfailed): New variables.
Kim F. Storm <storm@cua.dk>
parents:
42600
diff
changeset
|
3589 { |
f49377cf2e3c
(Qconnect, Qfailed): New variables.
Kim F. Storm <storm@cua.dk>
parents:
42600
diff
changeset
|
3590 #ifdef O_NONBLOCK |
f49377cf2e3c
(Qconnect, Qfailed): New variables.
Kim F. Storm <storm@cua.dk>
parents:
42600
diff
changeset
|
3591 ret = fcntl (s, F_SETFL, O_NONBLOCK); |
f49377cf2e3c
(Qconnect, Qfailed): New variables.
Kim F. Storm <storm@cua.dk>
parents:
42600
diff
changeset
|
3592 #else |
f49377cf2e3c
(Qconnect, Qfailed): New variables.
Kim F. Storm <storm@cua.dk>
parents:
42600
diff
changeset
|
3593 ret = fcntl (s, F_SETFL, O_NDELAY); |
f49377cf2e3c
(Qconnect, Qfailed): New variables.
Kim F. Storm <storm@cua.dk>
parents:
42600
diff
changeset
|
3594 #endif |
f49377cf2e3c
(Qconnect, Qfailed): New variables.
Kim F. Storm <storm@cua.dk>
parents:
42600
diff
changeset
|
3595 if (ret < 0) |
f49377cf2e3c
(Qconnect, Qfailed): New variables.
Kim F. Storm <storm@cua.dk>
parents:
42600
diff
changeset
|
3596 { |
f49377cf2e3c
(Qconnect, Qfailed): New variables.
Kim F. Storm <storm@cua.dk>
parents:
42600
diff
changeset
|
3597 xerrno = errno; |
f49377cf2e3c
(Qconnect, Qfailed): New variables.
Kim F. Storm <storm@cua.dk>
parents:
42600
diff
changeset
|
3598 emacs_close (s); |
f49377cf2e3c
(Qconnect, Qfailed): New variables.
Kim F. Storm <storm@cua.dk>
parents:
42600
diff
changeset
|
3599 s = -1; |
f49377cf2e3c
(Qconnect, Qfailed): New variables.
Kim F. Storm <storm@cua.dk>
parents:
42600
diff
changeset
|
3600 continue; |
f49377cf2e3c
(Qconnect, Qfailed): New variables.
Kim F. Storm <storm@cua.dk>
parents:
42600
diff
changeset
|
3601 } |
f49377cf2e3c
(Qconnect, Qfailed): New variables.
Kim F. Storm <storm@cua.dk>
parents:
42600
diff
changeset
|
3602 } |
f49377cf2e3c
(Qconnect, Qfailed): New variables.
Kim F. Storm <storm@cua.dk>
parents:
42600
diff
changeset
|
3603 #endif |
49600
23a1cea22d13
Trailing whitespace deleted.
Juanma Barranquero <lekktu@gmail.com>
parents:
49281
diff
changeset
|
3604 |
43598
f49377cf2e3c
(Qconnect, Qfailed): New variables.
Kim F. Storm <storm@cua.dk>
parents:
42600
diff
changeset
|
3605 /* Make us close S if quit. */ |
f49377cf2e3c
(Qconnect, Qfailed): New variables.
Kim F. Storm <storm@cua.dk>
parents:
42600
diff
changeset
|
3606 record_unwind_protect (close_file_unwind, make_number (s)); |
f49377cf2e3c
(Qconnect, Qfailed): New variables.
Kim F. Storm <storm@cua.dk>
parents:
42600
diff
changeset
|
3607 |
52516
0ca23eb697b9
(Fset_process_sentinel): Add sentinel to childp plist
Kim F. Storm <storm@cua.dk>
parents:
52503
diff
changeset
|
3608 /* Parse network options in the arg list. |
0ca23eb697b9
(Fset_process_sentinel): Add sentinel to childp plist
Kim F. Storm <storm@cua.dk>
parents:
52503
diff
changeset
|
3609 We simply ignore anything which isn't a known option (including other keywords). |
100824
e5aa6a069f40
(conv_sockaddr_to_lisp): Add workaround for
Andreas Schwab <schwab@suse.de>
parents:
100573
diff
changeset
|
3610 An error is signaled if setting a known option fails. */ |
52516
0ca23eb697b9
(Fset_process_sentinel): Add sentinel to childp plist
Kim F. Storm <storm@cua.dk>
parents:
52503
diff
changeset
|
3611 for (optn = optbits = 0; optn < nargs-1; optn += 2) |
0ca23eb697b9
(Fset_process_sentinel): Add sentinel to childp plist
Kim F. Storm <storm@cua.dk>
parents:
52503
diff
changeset
|
3612 optbits |= set_socket_option (s, args[optn], args[optn+1]); |
0ca23eb697b9
(Fset_process_sentinel): Add sentinel to childp plist
Kim F. Storm <storm@cua.dk>
parents:
52503
diff
changeset
|
3613 |
43968
7ec801358b7e
(Qlocal, QCname, QCbuffer, QChost, QCservice, QCfamily)
Kim F. Storm <storm@cua.dk>
parents:
43642
diff
changeset
|
3614 if (is_server) |
7ec801358b7e
(Qlocal, QCname, QCbuffer, QChost, QCservice, QCfamily)
Kim F. Storm <storm@cua.dk>
parents:
43642
diff
changeset
|
3615 { |
7ec801358b7e
(Qlocal, QCname, QCbuffer, QChost, QCservice, QCfamily)
Kim F. Storm <storm@cua.dk>
parents:
43642
diff
changeset
|
3616 /* Configure as a server socket. */ |
52516
0ca23eb697b9
(Fset_process_sentinel): Add sentinel to childp plist
Kim F. Storm <storm@cua.dk>
parents:
52503
diff
changeset
|
3617 |
0ca23eb697b9
(Fset_process_sentinel): Add sentinel to childp plist
Kim F. Storm <storm@cua.dk>
parents:
52503
diff
changeset
|
3618 /* SO_REUSEADDR = 1 is default for server sockets; must specify |
0ca23eb697b9
(Fset_process_sentinel): Add sentinel to childp plist
Kim F. Storm <storm@cua.dk>
parents:
52503
diff
changeset
|
3619 explicit :reuseaddr key to override this. */ |
43968
7ec801358b7e
(Qlocal, QCname, QCbuffer, QChost, QCservice, QCfamily)
Kim F. Storm <storm@cua.dk>
parents:
43642
diff
changeset
|
3620 #ifdef HAVE_LOCAL_SOCKETS |
7ec801358b7e
(Qlocal, QCname, QCbuffer, QChost, QCservice, QCfamily)
Kim F. Storm <storm@cua.dk>
parents:
43642
diff
changeset
|
3621 if (family != AF_LOCAL) |
7ec801358b7e
(Qlocal, QCname, QCbuffer, QChost, QCservice, QCfamily)
Kim F. Storm <storm@cua.dk>
parents:
43642
diff
changeset
|
3622 #endif |
52516
0ca23eb697b9
(Fset_process_sentinel): Add sentinel to childp plist
Kim F. Storm <storm@cua.dk>
parents:
52503
diff
changeset
|
3623 if (!(optbits & (1 << OPIX_REUSEADDR))) |
0ca23eb697b9
(Fset_process_sentinel): Add sentinel to childp plist
Kim F. Storm <storm@cua.dk>
parents:
52503
diff
changeset
|
3624 { |
0ca23eb697b9
(Fset_process_sentinel): Add sentinel to childp plist
Kim F. Storm <storm@cua.dk>
parents:
52503
diff
changeset
|
3625 int optval = 1; |
0ca23eb697b9
(Fset_process_sentinel): Add sentinel to childp plist
Kim F. Storm <storm@cua.dk>
parents:
52503
diff
changeset
|
3626 if (setsockopt (s, SOL_SOCKET, SO_REUSEADDR, &optval, sizeof optval)) |
53072
8787289602d1
Remove period at end of error message.
Jan Djärv <jan.h.d@swipnet.se>
parents:
52633
diff
changeset
|
3627 report_file_error ("Cannot set reuse option on server socket", Qnil); |
52516
0ca23eb697b9
(Fset_process_sentinel): Add sentinel to childp plist
Kim F. Storm <storm@cua.dk>
parents:
52503
diff
changeset
|
3628 } |
49600
23a1cea22d13
Trailing whitespace deleted.
Juanma Barranquero <lekktu@gmail.com>
parents:
49281
diff
changeset
|
3629 |
43968
7ec801358b7e
(Qlocal, QCname, QCbuffer, QChost, QCservice, QCfamily)
Kim F. Storm <storm@cua.dk>
parents:
43642
diff
changeset
|
3630 if (bind (s, lres->ai_addr, lres->ai_addrlen)) |
7ec801358b7e
(Qlocal, QCname, QCbuffer, QChost, QCservice, QCfamily)
Kim F. Storm <storm@cua.dk>
parents:
43642
diff
changeset
|
3631 report_file_error ("Cannot bind server socket", Qnil); |
7ec801358b7e
(Qlocal, QCname, QCbuffer, QChost, QCservice, QCfamily)
Kim F. Storm <storm@cua.dk>
parents:
43642
diff
changeset
|
3632 |
7ec801358b7e
(Qlocal, QCname, QCbuffer, QChost, QCservice, QCfamily)
Kim F. Storm <storm@cua.dk>
parents:
43642
diff
changeset
|
3633 #ifdef HAVE_GETSOCKNAME |
7ec801358b7e
(Qlocal, QCname, QCbuffer, QChost, QCservice, QCfamily)
Kim F. Storm <storm@cua.dk>
parents:
43642
diff
changeset
|
3634 if (EQ (service, Qt)) |
7ec801358b7e
(Qlocal, QCname, QCbuffer, QChost, QCservice, QCfamily)
Kim F. Storm <storm@cua.dk>
parents:
43642
diff
changeset
|
3635 { |
7ec801358b7e
(Qlocal, QCname, QCbuffer, QChost, QCservice, QCfamily)
Kim F. Storm <storm@cua.dk>
parents:
43642
diff
changeset
|
3636 struct sockaddr_in sa1; |
7ec801358b7e
(Qlocal, QCname, QCbuffer, QChost, QCservice, QCfamily)
Kim F. Storm <storm@cua.dk>
parents:
43642
diff
changeset
|
3637 int len1 = sizeof (sa1); |
7ec801358b7e
(Qlocal, QCname, QCbuffer, QChost, QCservice, QCfamily)
Kim F. Storm <storm@cua.dk>
parents:
43642
diff
changeset
|
3638 if (getsockname (s, (struct sockaddr *)&sa1, &len1) == 0) |
7ec801358b7e
(Qlocal, QCname, QCbuffer, QChost, QCservice, QCfamily)
Kim F. Storm <storm@cua.dk>
parents:
43642
diff
changeset
|
3639 { |
7ec801358b7e
(Qlocal, QCname, QCbuffer, QChost, QCservice, QCfamily)
Kim F. Storm <storm@cua.dk>
parents:
43642
diff
changeset
|
3640 ((struct sockaddr_in *)(lres->ai_addr))->sin_port = sa1.sin_port; |
49119
938f153410ae
(Fmake_network_process): Convert new port number
Kim F. Storm <storm@cua.dk>
parents:
49114
diff
changeset
|
3641 service = make_number (ntohs (sa1.sin_port)); |
43968
7ec801358b7e
(Qlocal, QCname, QCbuffer, QChost, QCservice, QCfamily)
Kim F. Storm <storm@cua.dk>
parents:
43642
diff
changeset
|
3642 contact = Fplist_put (contact, QCservice, service); |
7ec801358b7e
(Qlocal, QCname, QCbuffer, QChost, QCservice, QCfamily)
Kim F. Storm <storm@cua.dk>
parents:
43642
diff
changeset
|
3643 } |
7ec801358b7e
(Qlocal, QCname, QCbuffer, QChost, QCservice, QCfamily)
Kim F. Storm <storm@cua.dk>
parents:
43642
diff
changeset
|
3644 } |
7ec801358b7e
(Qlocal, QCname, QCbuffer, QChost, QCservice, QCfamily)
Kim F. Storm <storm@cua.dk>
parents:
43642
diff
changeset
|
3645 #endif |
7ec801358b7e
(Qlocal, QCname, QCbuffer, QChost, QCservice, QCfamily)
Kim F. Storm <storm@cua.dk>
parents:
43642
diff
changeset
|
3646 |
106398
31424b91531a
(Fmake_network_process): Fix up the tests for
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
106397
diff
changeset
|
3647 if (socktype != SOCK_DGRAM && listen (s, backlog)) |
43968
7ec801358b7e
(Qlocal, QCname, QCbuffer, QChost, QCservice, QCfamily)
Kim F. Storm <storm@cua.dk>
parents:
43642
diff
changeset
|
3648 report_file_error ("Cannot listen on server socket", Qnil); |
7ec801358b7e
(Qlocal, QCname, QCbuffer, QChost, QCservice, QCfamily)
Kim F. Storm <storm@cua.dk>
parents:
43642
diff
changeset
|
3649 |
7ec801358b7e
(Qlocal, QCname, QCbuffer, QChost, QCservice, QCfamily)
Kim F. Storm <storm@cua.dk>
parents:
43642
diff
changeset
|
3650 break; |
7ec801358b7e
(Qlocal, QCname, QCbuffer, QChost, QCservice, QCfamily)
Kim F. Storm <storm@cua.dk>
parents:
43642
diff
changeset
|
3651 } |
7ec801358b7e
(Qlocal, QCname, QCbuffer, QChost, QCservice, QCfamily)
Kim F. Storm <storm@cua.dk>
parents:
43642
diff
changeset
|
3652 |
43598
f49377cf2e3c
(Qconnect, Qfailed): New variables.
Kim F. Storm <storm@cua.dk>
parents:
42600
diff
changeset
|
3653 immediate_quit = 1; |
f49377cf2e3c
(Qconnect, Qfailed): New variables.
Kim F. Storm <storm@cua.dk>
parents:
42600
diff
changeset
|
3654 QUIT; |
f49377cf2e3c
(Qconnect, Qfailed): New variables.
Kim F. Storm <storm@cua.dk>
parents:
42600
diff
changeset
|
3655 |
f49377cf2e3c
(Qconnect, Qfailed): New variables.
Kim F. Storm <storm@cua.dk>
parents:
42600
diff
changeset
|
3656 /* This turns off all alarm-based interrupts; the |
f49377cf2e3c
(Qconnect, Qfailed): New variables.
Kim F. Storm <storm@cua.dk>
parents:
42600
diff
changeset
|
3657 bind_polling_period call above doesn't always turn all the |
f49377cf2e3c
(Qconnect, Qfailed): New variables.
Kim F. Storm <storm@cua.dk>
parents:
42600
diff
changeset
|
3658 short-interval ones off, especially if interrupt_input is |
f49377cf2e3c
(Qconnect, Qfailed): New variables.
Kim F. Storm <storm@cua.dk>
parents:
42600
diff
changeset
|
3659 set. |
f49377cf2e3c
(Qconnect, Qfailed): New variables.
Kim F. Storm <storm@cua.dk>
parents:
42600
diff
changeset
|
3660 |
f49377cf2e3c
(Qconnect, Qfailed): New variables.
Kim F. Storm <storm@cua.dk>
parents:
42600
diff
changeset
|
3661 It'd be nice to be able to control the connect timeout |
49600
23a1cea22d13
Trailing whitespace deleted.
Juanma Barranquero <lekktu@gmail.com>
parents:
49281
diff
changeset
|
3662 though. Would non-blocking connect calls be portable? |
43598
f49377cf2e3c
(Qconnect, Qfailed): New variables.
Kim F. Storm <storm@cua.dk>
parents:
42600
diff
changeset
|
3663 |
f49377cf2e3c
(Qconnect, Qfailed): New variables.
Kim F. Storm <storm@cua.dk>
parents:
42600
diff
changeset
|
3664 This used to be conditioned by HAVE_GETADDRINFO. Why? */ |
f49377cf2e3c
(Qconnect, Qfailed): New variables.
Kim F. Storm <storm@cua.dk>
parents:
42600
diff
changeset
|
3665 |
43642
bfd9fa0143d9
(Fopen_network_stream): Always call turn_on_atimers around connect.
Kim F. Storm <storm@cua.dk>
parents:
43617
diff
changeset
|
3666 turn_on_atimers (0); |
43598
f49377cf2e3c
(Qconnect, Qfailed): New variables.
Kim F. Storm <storm@cua.dk>
parents:
42600
diff
changeset
|
3667 |
f49377cf2e3c
(Qconnect, Qfailed): New variables.
Kim F. Storm <storm@cua.dk>
parents:
42600
diff
changeset
|
3668 ret = connect (s, lres->ai_addr, lres->ai_addrlen); |
f49377cf2e3c
(Qconnect, Qfailed): New variables.
Kim F. Storm <storm@cua.dk>
parents:
42600
diff
changeset
|
3669 xerrno = errno; |
f49377cf2e3c
(Qconnect, Qfailed): New variables.
Kim F. Storm <storm@cua.dk>
parents:
42600
diff
changeset
|
3670 |
43642
bfd9fa0143d9
(Fopen_network_stream): Always call turn_on_atimers around connect.
Kim F. Storm <storm@cua.dk>
parents:
43617
diff
changeset
|
3671 turn_on_atimers (1); |
43598
f49377cf2e3c
(Qconnect, Qfailed): New variables.
Kim F. Storm <storm@cua.dk>
parents:
42600
diff
changeset
|
3672 |
f49377cf2e3c
(Qconnect, Qfailed): New variables.
Kim F. Storm <storm@cua.dk>
parents:
42600
diff
changeset
|
3673 if (ret == 0 || xerrno == EISCONN) |
f49377cf2e3c
(Qconnect, Qfailed): New variables.
Kim F. Storm <storm@cua.dk>
parents:
42600
diff
changeset
|
3674 { |
f49377cf2e3c
(Qconnect, Qfailed): New variables.
Kim F. Storm <storm@cua.dk>
parents:
42600
diff
changeset
|
3675 /* The unwind-protect will be discarded afterwards. |
f49377cf2e3c
(Qconnect, Qfailed): New variables.
Kim F. Storm <storm@cua.dk>
parents:
42600
diff
changeset
|
3676 Likewise for immediate_quit. */ |
f49377cf2e3c
(Qconnect, Qfailed): New variables.
Kim F. Storm <storm@cua.dk>
parents:
42600
diff
changeset
|
3677 break; |
f49377cf2e3c
(Qconnect, Qfailed): New variables.
Kim F. Storm <storm@cua.dk>
parents:
42600
diff
changeset
|
3678 } |
f49377cf2e3c
(Qconnect, Qfailed): New variables.
Kim F. Storm <storm@cua.dk>
parents:
42600
diff
changeset
|
3679 |
f49377cf2e3c
(Qconnect, Qfailed): New variables.
Kim F. Storm <storm@cua.dk>
parents:
42600
diff
changeset
|
3680 #ifdef NON_BLOCKING_CONNECT |
f49377cf2e3c
(Qconnect, Qfailed): New variables.
Kim F. Storm <storm@cua.dk>
parents:
42600
diff
changeset
|
3681 #ifdef EINPROGRESS |
43968
7ec801358b7e
(Qlocal, QCname, QCbuffer, QChost, QCservice, QCfamily)
Kim F. Storm <storm@cua.dk>
parents:
43642
diff
changeset
|
3682 if (is_non_blocking_client && xerrno == EINPROGRESS) |
43598
f49377cf2e3c
(Qconnect, Qfailed): New variables.
Kim F. Storm <storm@cua.dk>
parents:
42600
diff
changeset
|
3683 break; |
f49377cf2e3c
(Qconnect, Qfailed): New variables.
Kim F. Storm <storm@cua.dk>
parents:
42600
diff
changeset
|
3684 #else |
f49377cf2e3c
(Qconnect, Qfailed): New variables.
Kim F. Storm <storm@cua.dk>
parents:
42600
diff
changeset
|
3685 #ifdef EWOULDBLOCK |
43968
7ec801358b7e
(Qlocal, QCname, QCbuffer, QChost, QCservice, QCfamily)
Kim F. Storm <storm@cua.dk>
parents:
43642
diff
changeset
|
3686 if (is_non_blocking_client && xerrno == EWOULDBLOCK) |
43598
f49377cf2e3c
(Qconnect, Qfailed): New variables.
Kim F. Storm <storm@cua.dk>
parents:
42600
diff
changeset
|
3687 break; |
f49377cf2e3c
(Qconnect, Qfailed): New variables.
Kim F. Storm <storm@cua.dk>
parents:
42600
diff
changeset
|
3688 #endif |
f49377cf2e3c
(Qconnect, Qfailed): New variables.
Kim F. Storm <storm@cua.dk>
parents:
42600
diff
changeset
|
3689 #endif |
f49377cf2e3c
(Qconnect, Qfailed): New variables.
Kim F. Storm <storm@cua.dk>
parents:
42600
diff
changeset
|
3690 #endif |
7220
a33eb16cab9d
(Fopen_network_stream): Retry the connect if EADDRINUSE. Ignore EISCONN.
Richard M. Stallman <rms@gnu.org>
parents:
7157
diff
changeset
|
3691 |
14671
0493e857a13b
(Fopen_network_stream): Set immediate_quit for the connect.
Richard M. Stallman <rms@gnu.org>
parents:
14613
diff
changeset
|
3692 immediate_quit = 0; |
0493e857a13b
(Fopen_network_stream): Set immediate_quit for the connect.
Richard M. Stallman <rms@gnu.org>
parents:
14613
diff
changeset
|
3693 |
43598
f49377cf2e3c
(Qconnect, Qfailed): New variables.
Kim F. Storm <storm@cua.dk>
parents:
42600
diff
changeset
|
3694 /* Discard the unwind protect closing S. */ |
25705
1f109108fa7e
(Fopen_network_stream): Avoid socket decriptor leak.
Andreas Schwab <schwab@suse.de>
parents:
25645
diff
changeset
|
3695 specpdl_ptr = specpdl + count1; |
26088
b7aa6ac26872
Add support for large files, 64-bit Solaris, system locale codings.
Paul Eggert <eggert@twinsun.com>
parents:
26019
diff
changeset
|
3696 emacs_close (s); |
43598
f49377cf2e3c
(Qconnect, Qfailed): New variables.
Kim F. Storm <storm@cua.dk>
parents:
42600
diff
changeset
|
3697 s = -1; |
58072
4ebc52bf6429
(Fmake_network_process): Remove kludge for interrupted
Kim F. Storm <storm@cua.dk>
parents:
57840
diff
changeset
|
3698 |
4ebc52bf6429
(Fmake_network_process): Remove kludge for interrupted
Kim F. Storm <storm@cua.dk>
parents:
57840
diff
changeset
|
3699 if (xerrno == EINTR) |
4ebc52bf6429
(Fmake_network_process): Remove kludge for interrupted
Kim F. Storm <storm@cua.dk>
parents:
57840
diff
changeset
|
3700 goto retry_connect; |
43598
f49377cf2e3c
(Qconnect, Qfailed): New variables.
Kim F. Storm <storm@cua.dk>
parents:
42600
diff
changeset
|
3701 } |
f49377cf2e3c
(Qconnect, Qfailed): New variables.
Kim F. Storm <storm@cua.dk>
parents:
42600
diff
changeset
|
3702 |
43968
7ec801358b7e
(Qlocal, QCname, QCbuffer, QChost, QCservice, QCfamily)
Kim F. Storm <storm@cua.dk>
parents:
43642
diff
changeset
|
3703 if (s >= 0) |
7ec801358b7e
(Qlocal, QCname, QCbuffer, QChost, QCservice, QCfamily)
Kim F. Storm <storm@cua.dk>
parents:
43642
diff
changeset
|
3704 { |
7ec801358b7e
(Qlocal, QCname, QCbuffer, QChost, QCservice, QCfamily)
Kim F. Storm <storm@cua.dk>
parents:
43642
diff
changeset
|
3705 #ifdef DATAGRAM_SOCKETS |
7ec801358b7e
(Qlocal, QCname, QCbuffer, QChost, QCservice, QCfamily)
Kim F. Storm <storm@cua.dk>
parents:
43642
diff
changeset
|
3706 if (socktype == SOCK_DGRAM) |
7ec801358b7e
(Qlocal, QCname, QCbuffer, QChost, QCservice, QCfamily)
Kim F. Storm <storm@cua.dk>
parents:
43642
diff
changeset
|
3707 { |
7ec801358b7e
(Qlocal, QCname, QCbuffer, QChost, QCservice, QCfamily)
Kim F. Storm <storm@cua.dk>
parents:
43642
diff
changeset
|
3708 if (datagram_address[s].sa) |
7ec801358b7e
(Qlocal, QCname, QCbuffer, QChost, QCservice, QCfamily)
Kim F. Storm <storm@cua.dk>
parents:
43642
diff
changeset
|
3709 abort (); |
7ec801358b7e
(Qlocal, QCname, QCbuffer, QChost, QCservice, QCfamily)
Kim F. Storm <storm@cua.dk>
parents:
43642
diff
changeset
|
3710 datagram_address[s].sa = (struct sockaddr *) xmalloc (lres->ai_addrlen); |
7ec801358b7e
(Qlocal, QCname, QCbuffer, QChost, QCservice, QCfamily)
Kim F. Storm <storm@cua.dk>
parents:
43642
diff
changeset
|
3711 datagram_address[s].len = lres->ai_addrlen; |
7ec801358b7e
(Qlocal, QCname, QCbuffer, QChost, QCservice, QCfamily)
Kim F. Storm <storm@cua.dk>
parents:
43642
diff
changeset
|
3712 if (is_server) |
7ec801358b7e
(Qlocal, QCname, QCbuffer, QChost, QCservice, QCfamily)
Kim F. Storm <storm@cua.dk>
parents:
43642
diff
changeset
|
3713 { |
7ec801358b7e
(Qlocal, QCname, QCbuffer, QChost, QCservice, QCfamily)
Kim F. Storm <storm@cua.dk>
parents:
43642
diff
changeset
|
3714 Lisp_Object remote; |
7ec801358b7e
(Qlocal, QCname, QCbuffer, QChost, QCservice, QCfamily)
Kim F. Storm <storm@cua.dk>
parents:
43642
diff
changeset
|
3715 bzero (datagram_address[s].sa, lres->ai_addrlen); |
7ec801358b7e
(Qlocal, QCname, QCbuffer, QChost, QCservice, QCfamily)
Kim F. Storm <storm@cua.dk>
parents:
43642
diff
changeset
|
3716 if (remote = Fplist_get (contact, QCremote), !NILP (remote)) |
7ec801358b7e
(Qlocal, QCname, QCbuffer, QChost, QCservice, QCfamily)
Kim F. Storm <storm@cua.dk>
parents:
43642
diff
changeset
|
3717 { |
7ec801358b7e
(Qlocal, QCname, QCbuffer, QChost, QCservice, QCfamily)
Kim F. Storm <storm@cua.dk>
parents:
43642
diff
changeset
|
3718 int rfamily, rlen; |
7ec801358b7e
(Qlocal, QCname, QCbuffer, QChost, QCservice, QCfamily)
Kim F. Storm <storm@cua.dk>
parents:
43642
diff
changeset
|
3719 rlen = get_lisp_to_sockaddr_size (remote, &rfamily); |
7ec801358b7e
(Qlocal, QCname, QCbuffer, QChost, QCservice, QCfamily)
Kim F. Storm <storm@cua.dk>
parents:
43642
diff
changeset
|
3720 if (rfamily == lres->ai_family && rlen == lres->ai_addrlen) |
7ec801358b7e
(Qlocal, QCname, QCbuffer, QChost, QCservice, QCfamily)
Kim F. Storm <storm@cua.dk>
parents:
43642
diff
changeset
|
3721 conv_lisp_to_sockaddr (rfamily, remote, |
7ec801358b7e
(Qlocal, QCname, QCbuffer, QChost, QCservice, QCfamily)
Kim F. Storm <storm@cua.dk>
parents:
43642
diff
changeset
|
3722 datagram_address[s].sa, rlen); |
7ec801358b7e
(Qlocal, QCname, QCbuffer, QChost, QCservice, QCfamily)
Kim F. Storm <storm@cua.dk>
parents:
43642
diff
changeset
|
3723 } |
7ec801358b7e
(Qlocal, QCname, QCbuffer, QChost, QCservice, QCfamily)
Kim F. Storm <storm@cua.dk>
parents:
43642
diff
changeset
|
3724 } |
7ec801358b7e
(Qlocal, QCname, QCbuffer, QChost, QCservice, QCfamily)
Kim F. Storm <storm@cua.dk>
parents:
43642
diff
changeset
|
3725 else |
7ec801358b7e
(Qlocal, QCname, QCbuffer, QChost, QCservice, QCfamily)
Kim F. Storm <storm@cua.dk>
parents:
43642
diff
changeset
|
3726 bcopy (lres->ai_addr, datagram_address[s].sa, lres->ai_addrlen); |
7ec801358b7e
(Qlocal, QCname, QCbuffer, QChost, QCservice, QCfamily)
Kim F. Storm <storm@cua.dk>
parents:
43642
diff
changeset
|
3727 } |
7ec801358b7e
(Qlocal, QCname, QCbuffer, QChost, QCservice, QCfamily)
Kim F. Storm <storm@cua.dk>
parents:
43642
diff
changeset
|
3728 #endif |
49600
23a1cea22d13
Trailing whitespace deleted.
Juanma Barranquero <lekktu@gmail.com>
parents:
49281
diff
changeset
|
3729 contact = Fplist_put (contact, QCaddress, |
43968
7ec801358b7e
(Qlocal, QCname, QCbuffer, QChost, QCservice, QCfamily)
Kim F. Storm <storm@cua.dk>
parents:
43642
diff
changeset
|
3730 conv_sockaddr_to_lisp (lres->ai_addr, lres->ai_addrlen)); |
49111
32c767302a23
(server_accept_connection): Fixed recording of new
Kim F. Storm <storm@cua.dk>
parents:
48424
diff
changeset
|
3731 #ifdef HAVE_GETSOCKNAME |
32c767302a23
(server_accept_connection): Fixed recording of new
Kim F. Storm <storm@cua.dk>
parents:
48424
diff
changeset
|
3732 if (!is_server) |
32c767302a23
(server_accept_connection): Fixed recording of new
Kim F. Storm <storm@cua.dk>
parents:
48424
diff
changeset
|
3733 { |
32c767302a23
(server_accept_connection): Fixed recording of new
Kim F. Storm <storm@cua.dk>
parents:
48424
diff
changeset
|
3734 struct sockaddr_in sa1; |
32c767302a23
(server_accept_connection): Fixed recording of new
Kim F. Storm <storm@cua.dk>
parents:
48424
diff
changeset
|
3735 int len1 = sizeof (sa1); |
32c767302a23
(server_accept_connection): Fixed recording of new
Kim F. Storm <storm@cua.dk>
parents:
48424
diff
changeset
|
3736 if (getsockname (s, (struct sockaddr *)&sa1, &len1) == 0) |
32c767302a23
(server_accept_connection): Fixed recording of new
Kim F. Storm <storm@cua.dk>
parents:
48424
diff
changeset
|
3737 contact = Fplist_put (contact, QClocal, |
32c767302a23
(server_accept_connection): Fixed recording of new
Kim F. Storm <storm@cua.dk>
parents:
48424
diff
changeset
|
3738 conv_sockaddr_to_lisp (&sa1, len1)); |
32c767302a23
(server_accept_connection): Fixed recording of new
Kim F. Storm <storm@cua.dk>
parents:
48424
diff
changeset
|
3739 } |
32c767302a23
(server_accept_connection): Fixed recording of new
Kim F. Storm <storm@cua.dk>
parents:
48424
diff
changeset
|
3740 #endif |
43968
7ec801358b7e
(Qlocal, QCname, QCbuffer, QChost, QCservice, QCfamily)
Kim F. Storm <storm@cua.dk>
parents:
43642
diff
changeset
|
3741 } |
7ec801358b7e
(Qlocal, QCname, QCbuffer, QChost, QCservice, QCfamily)
Kim F. Storm <storm@cua.dk>
parents:
43642
diff
changeset
|
3742 |
76626
2fb8fb4a9bab
(Fmake_network_process) [HAVE_GETADDRINFO]: Clear
YAMAMOTO Mitsuharu <mituharu@math.s.chiba-u.ac.jp>
parents:
76494
diff
changeset
|
3743 immediate_quit = 0; |
2fb8fb4a9bab
(Fmake_network_process) [HAVE_GETADDRINFO]: Clear
YAMAMOTO Mitsuharu <mituharu@math.s.chiba-u.ac.jp>
parents:
76494
diff
changeset
|
3744 |
43598
f49377cf2e3c
(Qconnect, Qfailed): New variables.
Kim F. Storm <storm@cua.dk>
parents:
42600
diff
changeset
|
3745 #ifdef HAVE_GETADDRINFO |
43968
7ec801358b7e
(Qlocal, QCname, QCbuffer, QChost, QCservice, QCfamily)
Kim F. Storm <storm@cua.dk>
parents:
43642
diff
changeset
|
3746 if (res != &ai) |
76626
2fb8fb4a9bab
(Fmake_network_process) [HAVE_GETADDRINFO]: Clear
YAMAMOTO Mitsuharu <mituharu@math.s.chiba-u.ac.jp>
parents:
76494
diff
changeset
|
3747 { |
2fb8fb4a9bab
(Fmake_network_process) [HAVE_GETADDRINFO]: Clear
YAMAMOTO Mitsuharu <mituharu@math.s.chiba-u.ac.jp>
parents:
76494
diff
changeset
|
3748 BLOCK_INPUT; |
2fb8fb4a9bab
(Fmake_network_process) [HAVE_GETADDRINFO]: Clear
YAMAMOTO Mitsuharu <mituharu@math.s.chiba-u.ac.jp>
parents:
76494
diff
changeset
|
3749 freeaddrinfo (res); |
2fb8fb4a9bab
(Fmake_network_process) [HAVE_GETADDRINFO]: Clear
YAMAMOTO Mitsuharu <mituharu@math.s.chiba-u.ac.jp>
parents:
76494
diff
changeset
|
3750 UNBLOCK_INPUT; |
2fb8fb4a9bab
(Fmake_network_process) [HAVE_GETADDRINFO]: Clear
YAMAMOTO Mitsuharu <mituharu@math.s.chiba-u.ac.jp>
parents:
76494
diff
changeset
|
3751 } |
2fb8fb4a9bab
(Fmake_network_process) [HAVE_GETADDRINFO]: Clear
YAMAMOTO Mitsuharu <mituharu@math.s.chiba-u.ac.jp>
parents:
76494
diff
changeset
|
3752 #endif |
43968
7ec801358b7e
(Qlocal, QCname, QCbuffer, QChost, QCservice, QCfamily)
Kim F. Storm <storm@cua.dk>
parents:
43642
diff
changeset
|
3753 |
7ec801358b7e
(Qlocal, QCname, QCbuffer, QChost, QCservice, QCfamily)
Kim F. Storm <storm@cua.dk>
parents:
43642
diff
changeset
|
3754 /* Discard the unwind protect for closing S, if any. */ |
7ec801358b7e
(Qlocal, QCname, QCbuffer, QChost, QCservice, QCfamily)
Kim F. Storm <storm@cua.dk>
parents:
43642
diff
changeset
|
3755 specpdl_ptr = specpdl + count1; |
7ec801358b7e
(Qlocal, QCname, QCbuffer, QChost, QCservice, QCfamily)
Kim F. Storm <storm@cua.dk>
parents:
43642
diff
changeset
|
3756 |
7ec801358b7e
(Qlocal, QCname, QCbuffer, QChost, QCservice, QCfamily)
Kim F. Storm <storm@cua.dk>
parents:
43642
diff
changeset
|
3757 /* Unwind bind_polling_period and request_sigio. */ |
7ec801358b7e
(Qlocal, QCname, QCbuffer, QChost, QCservice, QCfamily)
Kim F. Storm <storm@cua.dk>
parents:
43642
diff
changeset
|
3758 unbind_to (count, Qnil); |
43598
f49377cf2e3c
(Qconnect, Qfailed): New variables.
Kim F. Storm <storm@cua.dk>
parents:
42600
diff
changeset
|
3759 |
f49377cf2e3c
(Qconnect, Qfailed): New variables.
Kim F. Storm <storm@cua.dk>
parents:
42600
diff
changeset
|
3760 if (s < 0) |
f49377cf2e3c
(Qconnect, Qfailed): New variables.
Kim F. Storm <storm@cua.dk>
parents:
42600
diff
changeset
|
3761 { |
f49377cf2e3c
(Qconnect, Qfailed): New variables.
Kim F. Storm <storm@cua.dk>
parents:
42600
diff
changeset
|
3762 /* If non-blocking got this far - and failed - assume non-blocking is |
f49377cf2e3c
(Qconnect, Qfailed): New variables.
Kim F. Storm <storm@cua.dk>
parents:
42600
diff
changeset
|
3763 not supported after all. This is probably a wrong assumption, but |
43968
7ec801358b7e
(Qlocal, QCname, QCbuffer, QChost, QCservice, QCfamily)
Kim F. Storm <storm@cua.dk>
parents:
43642
diff
changeset
|
3764 the normal blocking calls to open-network-stream handles this error |
7ec801358b7e
(Qlocal, QCname, QCbuffer, QChost, QCservice, QCfamily)
Kim F. Storm <storm@cua.dk>
parents:
43642
diff
changeset
|
3765 better. */ |
7ec801358b7e
(Qlocal, QCname, QCbuffer, QChost, QCservice, QCfamily)
Kim F. Storm <storm@cua.dk>
parents:
43642
diff
changeset
|
3766 if (is_non_blocking_client) |
43598
f49377cf2e3c
(Qconnect, Qfailed): New variables.
Kim F. Storm <storm@cua.dk>
parents:
42600
diff
changeset
|
3767 return Qnil; |
f49377cf2e3c
(Qconnect, Qfailed): New variables.
Kim F. Storm <storm@cua.dk>
parents:
42600
diff
changeset
|
3768 |
578 | 3769 errno = xerrno; |
43968
7ec801358b7e
(Qlocal, QCname, QCbuffer, QChost, QCservice, QCfamily)
Kim F. Storm <storm@cua.dk>
parents:
43642
diff
changeset
|
3770 if (is_server) |
7ec801358b7e
(Qlocal, QCname, QCbuffer, QChost, QCservice, QCfamily)
Kim F. Storm <storm@cua.dk>
parents:
43642
diff
changeset
|
3771 report_file_error ("make server process failed", contact); |
7ec801358b7e
(Qlocal, QCname, QCbuffer, QChost, QCservice, QCfamily)
Kim F. Storm <storm@cua.dk>
parents:
43642
diff
changeset
|
3772 else |
7ec801358b7e
(Qlocal, QCname, QCbuffer, QChost, QCservice, QCfamily)
Kim F. Storm <storm@cua.dk>
parents:
43642
diff
changeset
|
3773 report_file_error ("make client process failed", contact); |
578 | 3774 } |
43968
7ec801358b7e
(Qlocal, QCname, QCbuffer, QChost, QCservice, QCfamily)
Kim F. Storm <storm@cua.dk>
parents:
43642
diff
changeset
|
3775 |
578 | 3776 inch = s; |
17247
351006378b51
(Fopen_network_stream): Use same socket for in and out.
Richard M. Stallman <rms@gnu.org>
parents:
17224
diff
changeset
|
3777 outch = s; |
578 | 3778 |
3779 if (!NILP (buffer)) | |
3780 buffer = Fget_buffer_create (buffer); | |
3781 proc = make_process (name); | |
3782 | |
3783 chan_process[inch] = proc; | |
3784 | |
3785 #ifdef O_NONBLOCK | |
3786 fcntl (inch, F_SETFL, O_NONBLOCK); | |
3787 #else | |
3788 #ifdef O_NDELAY | |
3789 fcntl (inch, F_SETFL, O_NDELAY); | |
3790 #endif | |
3791 #endif | |
3792 | |
43968
7ec801358b7e
(Qlocal, QCname, QCbuffer, QChost, QCservice, QCfamily)
Kim F. Storm <storm@cua.dk>
parents:
43642
diff
changeset
|
3793 p = XPROCESS (proc); |
7ec801358b7e
(Qlocal, QCname, QCbuffer, QChost, QCservice, QCfamily)
Kim F. Storm <storm@cua.dk>
parents:
43642
diff
changeset
|
3794 |
7ec801358b7e
(Qlocal, QCname, QCbuffer, QChost, QCservice, QCfamily)
Kim F. Storm <storm@cua.dk>
parents:
43642
diff
changeset
|
3795 p->childp = contact; |
49223
26622fa0d099
Reworked 2003-01-12 change -- call a plist a plist!
Kim F. Storm <storm@cua.dk>
parents:
49164
diff
changeset
|
3796 p->plist = Fcopy_sequence (Fplist_get (contact, QCplist)); |
95884
d6a4488883dc
Daniel Engeler <engeler at gmail.com>
Glenn Morris <rgm@gnu.org>
parents:
95387
diff
changeset
|
3797 p->type = Qnetwork; |
49600
23a1cea22d13
Trailing whitespace deleted.
Juanma Barranquero <lekktu@gmail.com>
parents:
49281
diff
changeset
|
3798 |
43968
7ec801358b7e
(Qlocal, QCname, QCbuffer, QChost, QCservice, QCfamily)
Kim F. Storm <storm@cua.dk>
parents:
43642
diff
changeset
|
3799 p->buffer = buffer; |
7ec801358b7e
(Qlocal, QCname, QCbuffer, QChost, QCservice, QCfamily)
Kim F. Storm <storm@cua.dk>
parents:
43642
diff
changeset
|
3800 p->sentinel = sentinel; |
7ec801358b7e
(Qlocal, QCname, QCbuffer, QChost, QCservice, QCfamily)
Kim F. Storm <storm@cua.dk>
parents:
43642
diff
changeset
|
3801 p->filter = filter; |
7ec801358b7e
(Qlocal, QCname, QCbuffer, QChost, QCservice, QCfamily)
Kim F. Storm <storm@cua.dk>
parents:
43642
diff
changeset
|
3802 p->log = Fplist_get (contact, QClog); |
7ec801358b7e
(Qlocal, QCname, QCbuffer, QChost, QCservice, QCfamily)
Kim F. Storm <storm@cua.dk>
parents:
43642
diff
changeset
|
3803 if (tem = Fplist_get (contact, QCnoquery), !NILP (tem)) |
81826
077a1e6fd3f2
(struct Lisp_Process): Turn slots infd, outfd, kill_without_query, pty_flag,
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
80984
diff
changeset
|
3804 p->kill_without_query = 1; |
43968
7ec801358b7e
(Qlocal, QCname, QCbuffer, QChost, QCservice, QCfamily)
Kim F. Storm <storm@cua.dk>
parents:
43642
diff
changeset
|
3805 if ((tem = Fplist_get (contact, QCstop), !NILP (tem))) |
7ec801358b7e
(Qlocal, QCname, QCbuffer, QChost, QCservice, QCfamily)
Kim F. Storm <storm@cua.dk>
parents:
43642
diff
changeset
|
3806 p->command = Qt; |
69873
2d844bbbccd4
* process.h (struct Lisp_Process): Replace Lisp_Objects `pid',
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
69634
diff
changeset
|
3807 p->pid = 0; |
81826
077a1e6fd3f2
(struct Lisp_Process): Turn slots infd, outfd, kill_without_query, pty_flag,
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
80984
diff
changeset
|
3808 p->infd = inch; |
077a1e6fd3f2
(struct Lisp_Process): Turn slots infd, outfd, kill_without_query, pty_flag,
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
80984
diff
changeset
|
3809 p->outfd = outch; |
106398
31424b91531a
(Fmake_network_process): Fix up the tests for
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
106397
diff
changeset
|
3810 if (is_server && socktype != SOCK_DGRAM) |
43968
7ec801358b7e
(Qlocal, QCname, QCbuffer, QChost, QCservice, QCfamily)
Kim F. Storm <storm@cua.dk>
parents:
43642
diff
changeset
|
3811 p->status = Qlisten; |
43598
f49377cf2e3c
(Qconnect, Qfailed): New variables.
Kim F. Storm <storm@cua.dk>
parents:
42600
diff
changeset
|
3812 |
69151
08c9c1760e1c
(Fmake_network_process): Init the process's mark.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
68651
diff
changeset
|
3813 /* Make the process marker point into the process buffer (if any). */ |
08c9c1760e1c
(Fmake_network_process): Init the process's mark.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
68651
diff
changeset
|
3814 if (BUFFERP (buffer)) |
08c9c1760e1c
(Fmake_network_process): Init the process's mark.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
68651
diff
changeset
|
3815 set_marker_both (p->mark, buffer, |
08c9c1760e1c
(Fmake_network_process): Init the process's mark.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
68651
diff
changeset
|
3816 BUF_ZV (XBUFFER (buffer)), |
08c9c1760e1c
(Fmake_network_process): Init the process's mark.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
68651
diff
changeset
|
3817 BUF_ZV_BYTE (XBUFFER (buffer))); |
08c9c1760e1c
(Fmake_network_process): Init the process's mark.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
68651
diff
changeset
|
3818 |
43598
f49377cf2e3c
(Qconnect, Qfailed): New variables.
Kim F. Storm <storm@cua.dk>
parents:
42600
diff
changeset
|
3819 #ifdef NON_BLOCKING_CONNECT |
43968
7ec801358b7e
(Qlocal, QCname, QCbuffer, QChost, QCservice, QCfamily)
Kim F. Storm <storm@cua.dk>
parents:
43642
diff
changeset
|
3820 if (is_non_blocking_client) |
43598
f49377cf2e3c
(Qconnect, Qfailed): New variables.
Kim F. Storm <storm@cua.dk>
parents:
42600
diff
changeset
|
3821 { |
f49377cf2e3c
(Qconnect, Qfailed): New variables.
Kim F. Storm <storm@cua.dk>
parents:
42600
diff
changeset
|
3822 /* We may get here if connect did succeed immediately. However, |
f49377cf2e3c
(Qconnect, Qfailed): New variables.
Kim F. Storm <storm@cua.dk>
parents:
42600
diff
changeset
|
3823 in that case, we still need to signal this like a non-blocking |
f49377cf2e3c
(Qconnect, Qfailed): New variables.
Kim F. Storm <storm@cua.dk>
parents:
42600
diff
changeset
|
3824 connection. */ |
43968
7ec801358b7e
(Qlocal, QCname, QCbuffer, QChost, QCservice, QCfamily)
Kim F. Storm <storm@cua.dk>
parents:
43642
diff
changeset
|
3825 p->status = Qconnect; |
43598
f49377cf2e3c
(Qconnect, Qfailed): New variables.
Kim F. Storm <storm@cua.dk>
parents:
42600
diff
changeset
|
3826 if (!FD_ISSET (inch, &connect_wait_mask)) |
f49377cf2e3c
(Qconnect, Qfailed): New variables.
Kim F. Storm <storm@cua.dk>
parents:
42600
diff
changeset
|
3827 { |
f49377cf2e3c
(Qconnect, Qfailed): New variables.
Kim F. Storm <storm@cua.dk>
parents:
42600
diff
changeset
|
3828 FD_SET (inch, &connect_wait_mask); |
f49377cf2e3c
(Qconnect, Qfailed): New variables.
Kim F. Storm <storm@cua.dk>
parents:
42600
diff
changeset
|
3829 num_pending_connects++; |
f49377cf2e3c
(Qconnect, Qfailed): New variables.
Kim F. Storm <storm@cua.dk>
parents:
42600
diff
changeset
|
3830 } |
f49377cf2e3c
(Qconnect, Qfailed): New variables.
Kim F. Storm <storm@cua.dk>
parents:
42600
diff
changeset
|
3831 } |
f49377cf2e3c
(Qconnect, Qfailed): New variables.
Kim F. Storm <storm@cua.dk>
parents:
42600
diff
changeset
|
3832 else |
f49377cf2e3c
(Qconnect, Qfailed): New variables.
Kim F. Storm <storm@cua.dk>
parents:
42600
diff
changeset
|
3833 #endif |
43968
7ec801358b7e
(Qlocal, QCname, QCbuffer, QChost, QCservice, QCfamily)
Kim F. Storm <storm@cua.dk>
parents:
43642
diff
changeset
|
3834 /* A server may have a client filter setting of Qt, but it must |
7ec801358b7e
(Qlocal, QCname, QCbuffer, QChost, QCservice, QCfamily)
Kim F. Storm <storm@cua.dk>
parents:
43642
diff
changeset
|
3835 still listen for incoming connects unless it is stopped. */ |
7ec801358b7e
(Qlocal, QCname, QCbuffer, QChost, QCservice, QCfamily)
Kim F. Storm <storm@cua.dk>
parents:
43642
diff
changeset
|
3836 if ((!EQ (p->filter, Qt) && !EQ (p->command, Qt)) |
7ec801358b7e
(Qlocal, QCname, QCbuffer, QChost, QCservice, QCfamily)
Kim F. Storm <storm@cua.dk>
parents:
43642
diff
changeset
|
3837 || (EQ (p->status, Qlisten) && NILP (p->command))) |
43598
f49377cf2e3c
(Qconnect, Qfailed): New variables.
Kim F. Storm <storm@cua.dk>
parents:
42600
diff
changeset
|
3838 { |
f49377cf2e3c
(Qconnect, Qfailed): New variables.
Kim F. Storm <storm@cua.dk>
parents:
42600
diff
changeset
|
3839 FD_SET (inch, &input_wait_mask); |
f49377cf2e3c
(Qconnect, Qfailed): New variables.
Kim F. Storm <storm@cua.dk>
parents:
42600
diff
changeset
|
3840 FD_SET (inch, &non_keyboard_wait_mask); |
f49377cf2e3c
(Qconnect, Qfailed): New variables.
Kim F. Storm <storm@cua.dk>
parents:
42600
diff
changeset
|
3841 } |
f49377cf2e3c
(Qconnect, Qfailed): New variables.
Kim F. Storm <storm@cua.dk>
parents:
42600
diff
changeset
|
3842 |
7044
7032d07f5ad9
(max_process_desc): New variable.
Richard M. Stallman <rms@gnu.org>
parents:
7013
diff
changeset
|
3843 if (inch > max_process_desc) |
7032d07f5ad9
(max_process_desc): New variable.
Richard M. Stallman <rms@gnu.org>
parents:
7013
diff
changeset
|
3844 max_process_desc = inch; |
578 | 3845 |
43968
7ec801358b7e
(Qlocal, QCname, QCbuffer, QChost, QCservice, QCfamily)
Kim F. Storm <storm@cua.dk>
parents:
43642
diff
changeset
|
3846 tem = Fplist_member (contact, QCcoding); |
7ec801358b7e
(Qlocal, QCname, QCbuffer, QChost, QCservice, QCfamily)
Kim F. Storm <storm@cua.dk>
parents:
43642
diff
changeset
|
3847 if (!NILP (tem) && (!CONSP (tem) || !CONSP (XCDR (tem)))) |
7ec801358b7e
(Qlocal, QCname, QCbuffer, QChost, QCservice, QCfamily)
Kim F. Storm <storm@cua.dk>
parents:
43642
diff
changeset
|
3848 tem = Qnil; /* No error message (too late!). */ |
7ec801358b7e
(Qlocal, QCname, QCbuffer, QChost, QCservice, QCfamily)
Kim F. Storm <storm@cua.dk>
parents:
43642
diff
changeset
|
3849 |
22019
bb9dd4758e7e
(Fstart_process): Remove the special case for
Richard M. Stallman <rms@gnu.org>
parents:
21978
diff
changeset
|
3850 { |
bb9dd4758e7e
(Fstart_process): Remove the special case for
Richard M. Stallman <rms@gnu.org>
parents:
21978
diff
changeset
|
3851 /* Setup coding systems for communicating with the network stream. */ |
bb9dd4758e7e
(Fstart_process): Remove the special case for
Richard M. Stallman <rms@gnu.org>
parents:
21978
diff
changeset
|
3852 struct gcpro gcpro1; |
bb9dd4758e7e
(Fstart_process): Remove the special case for
Richard M. Stallman <rms@gnu.org>
parents:
21978
diff
changeset
|
3853 /* Qt denotes we have not yet called Ffind_operation_coding_system. */ |
bb9dd4758e7e
(Fstart_process): Remove the special case for
Richard M. Stallman <rms@gnu.org>
parents:
21978
diff
changeset
|
3854 Lisp_Object coding_systems = Qt; |
bb9dd4758e7e
(Fstart_process): Remove the special case for
Richard M. Stallman <rms@gnu.org>
parents:
21978
diff
changeset
|
3855 Lisp_Object args[5], val; |
bb9dd4758e7e
(Fstart_process): Remove the special case for
Richard M. Stallman <rms@gnu.org>
parents:
21978
diff
changeset
|
3856 |
43968
7ec801358b7e
(Qlocal, QCname, QCbuffer, QChost, QCservice, QCfamily)
Kim F. Storm <storm@cua.dk>
parents:
43642
diff
changeset
|
3857 if (!NILP (tem)) |
52516
0ca23eb697b9
(Fset_process_sentinel): Add sentinel to childp plist
Kim F. Storm <storm@cua.dk>
parents:
52503
diff
changeset
|
3858 { |
0ca23eb697b9
(Fset_process_sentinel): Add sentinel to childp plist
Kim F. Storm <storm@cua.dk>
parents:
52503
diff
changeset
|
3859 val = XCAR (XCDR (tem)); |
0ca23eb697b9
(Fset_process_sentinel): Add sentinel to childp plist
Kim F. Storm <storm@cua.dk>
parents:
52503
diff
changeset
|
3860 if (CONSP (val)) |
0ca23eb697b9
(Fset_process_sentinel): Add sentinel to childp plist
Kim F. Storm <storm@cua.dk>
parents:
52503
diff
changeset
|
3861 val = XCAR (val); |
0ca23eb697b9
(Fset_process_sentinel): Add sentinel to childp plist
Kim F. Storm <storm@cua.dk>
parents:
52503
diff
changeset
|
3862 } |
43968
7ec801358b7e
(Qlocal, QCname, QCbuffer, QChost, QCservice, QCfamily)
Kim F. Storm <storm@cua.dk>
parents:
43642
diff
changeset
|
3863 else if (!NILP (Vcoding_system_for_read)) |
22019
bb9dd4758e7e
(Fstart_process): Remove the special case for
Richard M. Stallman <rms@gnu.org>
parents:
21978
diff
changeset
|
3864 val = Vcoding_system_for_read; |
25770
3a44b5298cd5
(list_processes_1): Remove unused variables.
Gerd Moellmann <gerd@gnu.org>
parents:
25760
diff
changeset
|
3865 else if ((!NILP (buffer) && NILP (XBUFFER (buffer)->enable_multibyte_characters)) |
3a44b5298cd5
(list_processes_1): Remove unused variables.
Gerd Moellmann <gerd@gnu.org>
parents:
25760
diff
changeset
|
3866 || (NILP (buffer) && NILP (buffer_defaults.enable_multibyte_characters))) |
22019
bb9dd4758e7e
(Fstart_process): Remove the special case for
Richard M. Stallman <rms@gnu.org>
parents:
21978
diff
changeset
|
3867 /* We dare not decode end-of-line format by setting VAL to |
bb9dd4758e7e
(Fstart_process): Remove the special case for
Richard M. Stallman <rms@gnu.org>
parents:
21978
diff
changeset
|
3868 Qraw_text, because the existing Emacs Lisp libraries |
bb9dd4758e7e
(Fstart_process): Remove the special case for
Richard M. Stallman <rms@gnu.org>
parents:
21978
diff
changeset
|
3869 assume that they receive bare code including a sequene of |
bb9dd4758e7e
(Fstart_process): Remove the special case for
Richard M. Stallman <rms@gnu.org>
parents:
21978
diff
changeset
|
3870 CR LF. */ |
bb9dd4758e7e
(Fstart_process): Remove the special case for
Richard M. Stallman <rms@gnu.org>
parents:
21978
diff
changeset
|
3871 val = Qnil; |
bb9dd4758e7e
(Fstart_process): Remove the special case for
Richard M. Stallman <rms@gnu.org>
parents:
21978
diff
changeset
|
3872 else |
bb9dd4758e7e
(Fstart_process): Remove the special case for
Richard M. Stallman <rms@gnu.org>
parents:
21978
diff
changeset
|
3873 { |
47987
b30942bd85f3
(Fformat_network_address): New function.
Kim F. Storm <storm@cua.dk>
parents:
47542
diff
changeset
|
3874 if (NILP (host) || NILP (service)) |
b30942bd85f3
(Fformat_network_address): New function.
Kim F. Storm <storm@cua.dk>
parents:
47542
diff
changeset
|
3875 coding_systems = Qnil; |
b30942bd85f3
(Fformat_network_address): New function.
Kim F. Storm <storm@cua.dk>
parents:
47542
diff
changeset
|
3876 else |
b30942bd85f3
(Fformat_network_address): New function.
Kim F. Storm <storm@cua.dk>
parents:
47542
diff
changeset
|
3877 { |
b30942bd85f3
(Fformat_network_address): New function.
Kim F. Storm <storm@cua.dk>
parents:
47542
diff
changeset
|
3878 args[0] = Qopen_network_stream, args[1] = name, |
b30942bd85f3
(Fformat_network_address): New function.
Kim F. Storm <storm@cua.dk>
parents:
47542
diff
changeset
|
3879 args[2] = buffer, args[3] = host, args[4] = service; |
b30942bd85f3
(Fformat_network_address): New function.
Kim F. Storm <storm@cua.dk>
parents:
47542
diff
changeset
|
3880 GCPRO1 (proc); |
b30942bd85f3
(Fformat_network_address): New function.
Kim F. Storm <storm@cua.dk>
parents:
47542
diff
changeset
|
3881 coding_systems = Ffind_operation_coding_system (5, args); |
b30942bd85f3
(Fformat_network_address): New function.
Kim F. Storm <storm@cua.dk>
parents:
47542
diff
changeset
|
3882 UNGCPRO; |
b30942bd85f3
(Fformat_network_address): New function.
Kim F. Storm <storm@cua.dk>
parents:
47542
diff
changeset
|
3883 } |
22019
bb9dd4758e7e
(Fstart_process): Remove the special case for
Richard M. Stallman <rms@gnu.org>
parents:
21978
diff
changeset
|
3884 if (CONSP (coding_systems)) |
25645
a14111a2a100
Use XCAR, XCDR, XFLOAT_DATA instead of explicit member access.
Ken Raeburn <raeburn@raeburn.org>
parents:
25356
diff
changeset
|
3885 val = XCAR (coding_systems); |
22019
bb9dd4758e7e
(Fstart_process): Remove the special case for
Richard M. Stallman <rms@gnu.org>
parents:
21978
diff
changeset
|
3886 else if (CONSP (Vdefault_process_coding_system)) |
25645
a14111a2a100
Use XCAR, XCDR, XFLOAT_DATA instead of explicit member access.
Ken Raeburn <raeburn@raeburn.org>
parents:
25356
diff
changeset
|
3887 val = XCAR (Vdefault_process_coding_system); |
22019
bb9dd4758e7e
(Fstart_process): Remove the special case for
Richard M. Stallman <rms@gnu.org>
parents:
21978
diff
changeset
|
3888 else |
bb9dd4758e7e
(Fstart_process): Remove the special case for
Richard M. Stallman <rms@gnu.org>
parents:
21978
diff
changeset
|
3889 val = Qnil; |
bb9dd4758e7e
(Fstart_process): Remove the special case for
Richard M. Stallman <rms@gnu.org>
parents:
21978
diff
changeset
|
3890 } |
43968
7ec801358b7e
(Qlocal, QCname, QCbuffer, QChost, QCservice, QCfamily)
Kim F. Storm <storm@cua.dk>
parents:
43642
diff
changeset
|
3891 p->decode_coding_system = val; |
7ec801358b7e
(Qlocal, QCname, QCbuffer, QChost, QCservice, QCfamily)
Kim F. Storm <storm@cua.dk>
parents:
43642
diff
changeset
|
3892 |
7ec801358b7e
(Qlocal, QCname, QCbuffer, QChost, QCservice, QCfamily)
Kim F. Storm <storm@cua.dk>
parents:
43642
diff
changeset
|
3893 if (!NILP (tem)) |
52516
0ca23eb697b9
(Fset_process_sentinel): Add sentinel to childp plist
Kim F. Storm <storm@cua.dk>
parents:
52503
diff
changeset
|
3894 { |
0ca23eb697b9
(Fset_process_sentinel): Add sentinel to childp plist
Kim F. Storm <storm@cua.dk>
parents:
52503
diff
changeset
|
3895 val = XCAR (XCDR (tem)); |
0ca23eb697b9
(Fset_process_sentinel): Add sentinel to childp plist
Kim F. Storm <storm@cua.dk>
parents:
52503
diff
changeset
|
3896 if (CONSP (val)) |
0ca23eb697b9
(Fset_process_sentinel): Add sentinel to childp plist
Kim F. Storm <storm@cua.dk>
parents:
52503
diff
changeset
|
3897 val = XCDR (val); |
0ca23eb697b9
(Fset_process_sentinel): Add sentinel to childp plist
Kim F. Storm <storm@cua.dk>
parents:
52503
diff
changeset
|
3898 } |
43968
7ec801358b7e
(Qlocal, QCname, QCbuffer, QChost, QCservice, QCfamily)
Kim F. Storm <storm@cua.dk>
parents:
43642
diff
changeset
|
3899 else if (!NILP (Vcoding_system_for_write)) |
22019
bb9dd4758e7e
(Fstart_process): Remove the special case for
Richard M. Stallman <rms@gnu.org>
parents:
21978
diff
changeset
|
3900 val = Vcoding_system_for_write; |
bb9dd4758e7e
(Fstart_process): Remove the special case for
Richard M. Stallman <rms@gnu.org>
parents:
21978
diff
changeset
|
3901 else if (NILP (current_buffer->enable_multibyte_characters)) |
bb9dd4758e7e
(Fstart_process): Remove the special case for
Richard M. Stallman <rms@gnu.org>
parents:
21978
diff
changeset
|
3902 val = Qnil; |
bb9dd4758e7e
(Fstart_process): Remove the special case for
Richard M. Stallman <rms@gnu.org>
parents:
21978
diff
changeset
|
3903 else |
bb9dd4758e7e
(Fstart_process): Remove the special case for
Richard M. Stallman <rms@gnu.org>
parents:
21978
diff
changeset
|
3904 { |
bb9dd4758e7e
(Fstart_process): Remove the special case for
Richard M. Stallman <rms@gnu.org>
parents:
21978
diff
changeset
|
3905 if (EQ (coding_systems, Qt)) |
bb9dd4758e7e
(Fstart_process): Remove the special case for
Richard M. Stallman <rms@gnu.org>
parents:
21978
diff
changeset
|
3906 { |
47987
b30942bd85f3
(Fformat_network_address): New function.
Kim F. Storm <storm@cua.dk>
parents:
47542
diff
changeset
|
3907 if (NILP (host) || NILP (service)) |
b30942bd85f3
(Fformat_network_address): New function.
Kim F. Storm <storm@cua.dk>
parents:
47542
diff
changeset
|
3908 coding_systems = Qnil; |
b30942bd85f3
(Fformat_network_address): New function.
Kim F. Storm <storm@cua.dk>
parents:
47542
diff
changeset
|
3909 else |
b30942bd85f3
(Fformat_network_address): New function.
Kim F. Storm <storm@cua.dk>
parents:
47542
diff
changeset
|
3910 { |
b30942bd85f3
(Fformat_network_address): New function.
Kim F. Storm <storm@cua.dk>
parents:
47542
diff
changeset
|
3911 args[0] = Qopen_network_stream, args[1] = name, |
b30942bd85f3
(Fformat_network_address): New function.
Kim F. Storm <storm@cua.dk>
parents:
47542
diff
changeset
|
3912 args[2] = buffer, args[3] = host, args[4] = service; |
b30942bd85f3
(Fformat_network_address): New function.
Kim F. Storm <storm@cua.dk>
parents:
47542
diff
changeset
|
3913 GCPRO1 (proc); |
b30942bd85f3
(Fformat_network_address): New function.
Kim F. Storm <storm@cua.dk>
parents:
47542
diff
changeset
|
3914 coding_systems = Ffind_operation_coding_system (5, args); |
b30942bd85f3
(Fformat_network_address): New function.
Kim F. Storm <storm@cua.dk>
parents:
47542
diff
changeset
|
3915 UNGCPRO; |
b30942bd85f3
(Fformat_network_address): New function.
Kim F. Storm <storm@cua.dk>
parents:
47542
diff
changeset
|
3916 } |
22019
bb9dd4758e7e
(Fstart_process): Remove the special case for
Richard M. Stallman <rms@gnu.org>
parents:
21978
diff
changeset
|
3917 } |
bb9dd4758e7e
(Fstart_process): Remove the special case for
Richard M. Stallman <rms@gnu.org>
parents:
21978
diff
changeset
|
3918 if (CONSP (coding_systems)) |
25645
a14111a2a100
Use XCAR, XCDR, XFLOAT_DATA instead of explicit member access.
Ken Raeburn <raeburn@raeburn.org>
parents:
25356
diff
changeset
|
3919 val = XCDR (coding_systems); |
22019
bb9dd4758e7e
(Fstart_process): Remove the special case for
Richard M. Stallman <rms@gnu.org>
parents:
21978
diff
changeset
|
3920 else if (CONSP (Vdefault_process_coding_system)) |
25645
a14111a2a100
Use XCAR, XCDR, XFLOAT_DATA instead of explicit member access.
Ken Raeburn <raeburn@raeburn.org>
parents:
25356
diff
changeset
|
3921 val = XCDR (Vdefault_process_coding_system); |
22019
bb9dd4758e7e
(Fstart_process): Remove the special case for
Richard M. Stallman <rms@gnu.org>
parents:
21978
diff
changeset
|
3922 else |
bb9dd4758e7e
(Fstart_process): Remove the special case for
Richard M. Stallman <rms@gnu.org>
parents:
21978
diff
changeset
|
3923 val = Qnil; |
bb9dd4758e7e
(Fstart_process): Remove the special case for
Richard M. Stallman <rms@gnu.org>
parents:
21978
diff
changeset
|
3924 } |
43968
7ec801358b7e
(Qlocal, QCname, QCbuffer, QChost, QCservice, QCfamily)
Kim F. Storm <storm@cua.dk>
parents:
43642
diff
changeset
|
3925 p->encode_coding_system = val; |
22019
bb9dd4758e7e
(Fstart_process): Remove the special case for
Richard M. Stallman <rms@gnu.org>
parents:
21978
diff
changeset
|
3926 } |
49667
cbec1327e2f1
(QCfilter_multibyte): New variable.
Kenichi Handa <handa@m17n.org>
parents:
49600
diff
changeset
|
3927 setup_process_coding_systems (proc); |
17041
b61cbe595be5
Include charset.h and coding.h.
Karl Heuer <kwzh@gnu.org>
parents:
16780
diff
changeset
|
3928 |
43968
7ec801358b7e
(Qlocal, QCname, QCbuffer, QChost, QCservice, QCfamily)
Kim F. Storm <storm@cua.dk>
parents:
43642
diff
changeset
|
3929 p->decoding_buf = make_uninit_string (0); |
81826
077a1e6fd3f2
(struct Lisp_Process): Turn slots infd, outfd, kill_without_query, pty_flag,
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
80984
diff
changeset
|
3930 p->decoding_carryover = 0; |
43968
7ec801358b7e
(Qlocal, QCname, QCbuffer, QChost, QCservice, QCfamily)
Kim F. Storm <storm@cua.dk>
parents:
43642
diff
changeset
|
3931 p->encoding_buf = make_uninit_string (0); |
7ec801358b7e
(Qlocal, QCname, QCbuffer, QChost, QCservice, QCfamily)
Kim F. Storm <storm@cua.dk>
parents:
43642
diff
changeset
|
3932 |
7ec801358b7e
(Qlocal, QCname, QCbuffer, QChost, QCservice, QCfamily)
Kim F. Storm <storm@cua.dk>
parents:
43642
diff
changeset
|
3933 p->inherit_coding_system_flag |
81926
50da0700fc26
(Fstart_process, Fmake_network_process, read_process_output):
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
81876
diff
changeset
|
3934 = !(!NILP (tem) || NILP (buffer) || !inherit_process_coding_system); |
21656
bb39a5863a82
(Fset_process_inherit_coding_system_flag,
Eli Zaretskii <eliz@gnu.org>
parents:
21530
diff
changeset
|
3935 |
578 | 3936 UNGCPRO; |
3937 return proc; | |
3938 } | |
3939 #endif /* HAVE_SOCKETS */ | |
3940 | |
52503
256a27a47af1
[HAVE_SOCKETS]: Include sys/ioctl.h and net/if.h.
Kim F. Storm <storm@cua.dk>
parents:
52401
diff
changeset
|
3941 |
52525
fd2be6cea0e7
(Fnetwork_interface_list, Fnetwork_interface_info):
Kim F. Storm <storm@cua.dk>
parents:
52516
diff
changeset
|
3942 #if defined(HAVE_SOCKETS) && defined(HAVE_NET_IF_H) && defined(HAVE_SYS_IOCTL_H) |
52503
256a27a47af1
[HAVE_SOCKETS]: Include sys/ioctl.h and net/if.h.
Kim F. Storm <storm@cua.dk>
parents:
52401
diff
changeset
|
3943 |
256a27a47af1
[HAVE_SOCKETS]: Include sys/ioctl.h and net/if.h.
Kim F. Storm <storm@cua.dk>
parents:
52401
diff
changeset
|
3944 #ifdef SIOCGIFCONF |
256a27a47af1
[HAVE_SOCKETS]: Include sys/ioctl.h and net/if.h.
Kim F. Storm <storm@cua.dk>
parents:
52401
diff
changeset
|
3945 DEFUN ("network-interface-list", Fnetwork_interface_list, Snetwork_interface_list, 0, 0, 0, |
256a27a47af1
[HAVE_SOCKETS]: Include sys/ioctl.h and net/if.h.
Kim F. Storm <storm@cua.dk>
parents:
52401
diff
changeset
|
3946 doc: /* Return an alist of all network interfaces and their network address. |
256a27a47af1
[HAVE_SOCKETS]: Include sys/ioctl.h and net/if.h.
Kim F. Storm <storm@cua.dk>
parents:
52401
diff
changeset
|
3947 Each element is a cons, the car of which is a string containing the |
256a27a47af1
[HAVE_SOCKETS]: Include sys/ioctl.h and net/if.h.
Kim F. Storm <storm@cua.dk>
parents:
52401
diff
changeset
|
3948 interface name, and the cdr is the network address in internal |
52527
3ea59ac8dfa5
(Fnetwork_interface_info): Fix type error.
Dave Love <fx@gnu.org>
parents:
52525
diff
changeset
|
3949 format; see the description of ADDRESS in `make-network-process'. */) |
52503
256a27a47af1
[HAVE_SOCKETS]: Include sys/ioctl.h and net/if.h.
Kim F. Storm <storm@cua.dk>
parents:
52401
diff
changeset
|
3950 () |
256a27a47af1
[HAVE_SOCKETS]: Include sys/ioctl.h and net/if.h.
Kim F. Storm <storm@cua.dk>
parents:
52401
diff
changeset
|
3951 { |
256a27a47af1
[HAVE_SOCKETS]: Include sys/ioctl.h and net/if.h.
Kim F. Storm <storm@cua.dk>
parents:
52401
diff
changeset
|
3952 struct ifconf ifconf; |
256a27a47af1
[HAVE_SOCKETS]: Include sys/ioctl.h and net/if.h.
Kim F. Storm <storm@cua.dk>
parents:
52401
diff
changeset
|
3953 struct ifreq *ifreqs = NULL; |
256a27a47af1
[HAVE_SOCKETS]: Include sys/ioctl.h and net/if.h.
Kim F. Storm <storm@cua.dk>
parents:
52401
diff
changeset
|
3954 int ifaces = 0; |
256a27a47af1
[HAVE_SOCKETS]: Include sys/ioctl.h and net/if.h.
Kim F. Storm <storm@cua.dk>
parents:
52401
diff
changeset
|
3955 int buf_size, s; |
256a27a47af1
[HAVE_SOCKETS]: Include sys/ioctl.h and net/if.h.
Kim F. Storm <storm@cua.dk>
parents:
52401
diff
changeset
|
3956 Lisp_Object res; |
256a27a47af1
[HAVE_SOCKETS]: Include sys/ioctl.h and net/if.h.
Kim F. Storm <storm@cua.dk>
parents:
52401
diff
changeset
|
3957 |
256a27a47af1
[HAVE_SOCKETS]: Include sys/ioctl.h and net/if.h.
Kim F. Storm <storm@cua.dk>
parents:
52401
diff
changeset
|
3958 s = socket (AF_INET, SOCK_STREAM, 0); |
256a27a47af1
[HAVE_SOCKETS]: Include sys/ioctl.h and net/if.h.
Kim F. Storm <storm@cua.dk>
parents:
52401
diff
changeset
|
3959 if (s < 0) |
256a27a47af1
[HAVE_SOCKETS]: Include sys/ioctl.h and net/if.h.
Kim F. Storm <storm@cua.dk>
parents:
52401
diff
changeset
|
3960 return Qnil; |
256a27a47af1
[HAVE_SOCKETS]: Include sys/ioctl.h and net/if.h.
Kim F. Storm <storm@cua.dk>
parents:
52401
diff
changeset
|
3961 |
256a27a47af1
[HAVE_SOCKETS]: Include sys/ioctl.h and net/if.h.
Kim F. Storm <storm@cua.dk>
parents:
52401
diff
changeset
|
3962 again: |
256a27a47af1
[HAVE_SOCKETS]: Include sys/ioctl.h and net/if.h.
Kim F. Storm <storm@cua.dk>
parents:
52401
diff
changeset
|
3963 ifaces += 25; |
256a27a47af1
[HAVE_SOCKETS]: Include sys/ioctl.h and net/if.h.
Kim F. Storm <storm@cua.dk>
parents:
52401
diff
changeset
|
3964 buf_size = ifaces * sizeof(ifreqs[0]); |
256a27a47af1
[HAVE_SOCKETS]: Include sys/ioctl.h and net/if.h.
Kim F. Storm <storm@cua.dk>
parents:
52401
diff
changeset
|
3965 ifreqs = (struct ifreq *)xrealloc(ifreqs, buf_size); |
256a27a47af1
[HAVE_SOCKETS]: Include sys/ioctl.h and net/if.h.
Kim F. Storm <storm@cua.dk>
parents:
52401
diff
changeset
|
3966 if (!ifreqs) |
256a27a47af1
[HAVE_SOCKETS]: Include sys/ioctl.h and net/if.h.
Kim F. Storm <storm@cua.dk>
parents:
52401
diff
changeset
|
3967 { |
256a27a47af1
[HAVE_SOCKETS]: Include sys/ioctl.h and net/if.h.
Kim F. Storm <storm@cua.dk>
parents:
52401
diff
changeset
|
3968 close (s); |
256a27a47af1
[HAVE_SOCKETS]: Include sys/ioctl.h and net/if.h.
Kim F. Storm <storm@cua.dk>
parents:
52401
diff
changeset
|
3969 return Qnil; |
256a27a47af1
[HAVE_SOCKETS]: Include sys/ioctl.h and net/if.h.
Kim F. Storm <storm@cua.dk>
parents:
52401
diff
changeset
|
3970 } |
256a27a47af1
[HAVE_SOCKETS]: Include sys/ioctl.h and net/if.h.
Kim F. Storm <storm@cua.dk>
parents:
52401
diff
changeset
|
3971 |
256a27a47af1
[HAVE_SOCKETS]: Include sys/ioctl.h and net/if.h.
Kim F. Storm <storm@cua.dk>
parents:
52401
diff
changeset
|
3972 ifconf.ifc_len = buf_size; |
256a27a47af1
[HAVE_SOCKETS]: Include sys/ioctl.h and net/if.h.
Kim F. Storm <storm@cua.dk>
parents:
52401
diff
changeset
|
3973 ifconf.ifc_req = ifreqs; |
256a27a47af1
[HAVE_SOCKETS]: Include sys/ioctl.h and net/if.h.
Kim F. Storm <storm@cua.dk>
parents:
52401
diff
changeset
|
3974 if (ioctl (s, SIOCGIFCONF, &ifconf)) |
256a27a47af1
[HAVE_SOCKETS]: Include sys/ioctl.h and net/if.h.
Kim F. Storm <storm@cua.dk>
parents:
52401
diff
changeset
|
3975 { |
256a27a47af1
[HAVE_SOCKETS]: Include sys/ioctl.h and net/if.h.
Kim F. Storm <storm@cua.dk>
parents:
52401
diff
changeset
|
3976 close (s); |
256a27a47af1
[HAVE_SOCKETS]: Include sys/ioctl.h and net/if.h.
Kim F. Storm <storm@cua.dk>
parents:
52401
diff
changeset
|
3977 return Qnil; |
256a27a47af1
[HAVE_SOCKETS]: Include sys/ioctl.h and net/if.h.
Kim F. Storm <storm@cua.dk>
parents:
52401
diff
changeset
|
3978 } |
256a27a47af1
[HAVE_SOCKETS]: Include sys/ioctl.h and net/if.h.
Kim F. Storm <storm@cua.dk>
parents:
52401
diff
changeset
|
3979 |
256a27a47af1
[HAVE_SOCKETS]: Include sys/ioctl.h and net/if.h.
Kim F. Storm <storm@cua.dk>
parents:
52401
diff
changeset
|
3980 if (ifconf.ifc_len == buf_size) |
256a27a47af1
[HAVE_SOCKETS]: Include sys/ioctl.h and net/if.h.
Kim F. Storm <storm@cua.dk>
parents:
52401
diff
changeset
|
3981 goto again; |
256a27a47af1
[HAVE_SOCKETS]: Include sys/ioctl.h and net/if.h.
Kim F. Storm <storm@cua.dk>
parents:
52401
diff
changeset
|
3982 |
256a27a47af1
[HAVE_SOCKETS]: Include sys/ioctl.h and net/if.h.
Kim F. Storm <storm@cua.dk>
parents:
52401
diff
changeset
|
3983 close (s); |
256a27a47af1
[HAVE_SOCKETS]: Include sys/ioctl.h and net/if.h.
Kim F. Storm <storm@cua.dk>
parents:
52401
diff
changeset
|
3984 ifaces = ifconf.ifc_len / sizeof (ifreqs[0]); |
256a27a47af1
[HAVE_SOCKETS]: Include sys/ioctl.h and net/if.h.
Kim F. Storm <storm@cua.dk>
parents:
52401
diff
changeset
|
3985 |
256a27a47af1
[HAVE_SOCKETS]: Include sys/ioctl.h and net/if.h.
Kim F. Storm <storm@cua.dk>
parents:
52401
diff
changeset
|
3986 res = Qnil; |
256a27a47af1
[HAVE_SOCKETS]: Include sys/ioctl.h and net/if.h.
Kim F. Storm <storm@cua.dk>
parents:
52401
diff
changeset
|
3987 while (--ifaces >= 0) |
256a27a47af1
[HAVE_SOCKETS]: Include sys/ioctl.h and net/if.h.
Kim F. Storm <storm@cua.dk>
parents:
52401
diff
changeset
|
3988 { |
256a27a47af1
[HAVE_SOCKETS]: Include sys/ioctl.h and net/if.h.
Kim F. Storm <storm@cua.dk>
parents:
52401
diff
changeset
|
3989 struct ifreq *ifq = &ifreqs[ifaces]; |
256a27a47af1
[HAVE_SOCKETS]: Include sys/ioctl.h and net/if.h.
Kim F. Storm <storm@cua.dk>
parents:
52401
diff
changeset
|
3990 char namebuf[sizeof (ifq->ifr_name) + 1]; |
256a27a47af1
[HAVE_SOCKETS]: Include sys/ioctl.h and net/if.h.
Kim F. Storm <storm@cua.dk>
parents:
52401
diff
changeset
|
3991 if (ifq->ifr_addr.sa_family != AF_INET) |
256a27a47af1
[HAVE_SOCKETS]: Include sys/ioctl.h and net/if.h.
Kim F. Storm <storm@cua.dk>
parents:
52401
diff
changeset
|
3992 continue; |
256a27a47af1
[HAVE_SOCKETS]: Include sys/ioctl.h and net/if.h.
Kim F. Storm <storm@cua.dk>
parents:
52401
diff
changeset
|
3993 bcopy (ifq->ifr_name, namebuf, sizeof (ifq->ifr_name)); |
256a27a47af1
[HAVE_SOCKETS]: Include sys/ioctl.h and net/if.h.
Kim F. Storm <storm@cua.dk>
parents:
52401
diff
changeset
|
3994 namebuf[sizeof (ifq->ifr_name)] = 0; |
256a27a47af1
[HAVE_SOCKETS]: Include sys/ioctl.h and net/if.h.
Kim F. Storm <storm@cua.dk>
parents:
52401
diff
changeset
|
3995 res = Fcons (Fcons (build_string (namebuf), |
256a27a47af1
[HAVE_SOCKETS]: Include sys/ioctl.h and net/if.h.
Kim F. Storm <storm@cua.dk>
parents:
52401
diff
changeset
|
3996 conv_sockaddr_to_lisp (&ifq->ifr_addr, |
256a27a47af1
[HAVE_SOCKETS]: Include sys/ioctl.h and net/if.h.
Kim F. Storm <storm@cua.dk>
parents:
52401
diff
changeset
|
3997 sizeof (struct sockaddr))), |
256a27a47af1
[HAVE_SOCKETS]: Include sys/ioctl.h and net/if.h.
Kim F. Storm <storm@cua.dk>
parents:
52401
diff
changeset
|
3998 res); |
256a27a47af1
[HAVE_SOCKETS]: Include sys/ioctl.h and net/if.h.
Kim F. Storm <storm@cua.dk>
parents:
52401
diff
changeset
|
3999 } |
256a27a47af1
[HAVE_SOCKETS]: Include sys/ioctl.h and net/if.h.
Kim F. Storm <storm@cua.dk>
parents:
52401
diff
changeset
|
4000 |
256a27a47af1
[HAVE_SOCKETS]: Include sys/ioctl.h and net/if.h.
Kim F. Storm <storm@cua.dk>
parents:
52401
diff
changeset
|
4001 return res; |
256a27a47af1
[HAVE_SOCKETS]: Include sys/ioctl.h and net/if.h.
Kim F. Storm <storm@cua.dk>
parents:
52401
diff
changeset
|
4002 } |
52525
fd2be6cea0e7
(Fnetwork_interface_list, Fnetwork_interface_info):
Kim F. Storm <storm@cua.dk>
parents:
52516
diff
changeset
|
4003 #endif /* SIOCGIFCONF */ |
52503
256a27a47af1
[HAVE_SOCKETS]: Include sys/ioctl.h and net/if.h.
Kim F. Storm <storm@cua.dk>
parents:
52401
diff
changeset
|
4004 |
256a27a47af1
[HAVE_SOCKETS]: Include sys/ioctl.h and net/if.h.
Kim F. Storm <storm@cua.dk>
parents:
52401
diff
changeset
|
4005 #if defined(SIOCGIFADDR) || defined(SIOCGIFHWADDR) || defined(SIOCGIFFLAGS) |
256a27a47af1
[HAVE_SOCKETS]: Include sys/ioctl.h and net/if.h.
Kim F. Storm <storm@cua.dk>
parents:
52401
diff
changeset
|
4006 |
256a27a47af1
[HAVE_SOCKETS]: Include sys/ioctl.h and net/if.h.
Kim F. Storm <storm@cua.dk>
parents:
52401
diff
changeset
|
4007 struct ifflag_def { |
256a27a47af1
[HAVE_SOCKETS]: Include sys/ioctl.h and net/if.h.
Kim F. Storm <storm@cua.dk>
parents:
52401
diff
changeset
|
4008 int flag_bit; |
105959
ba3ffbd9c422
* process.c (ifflag_def): Make flag_sym constant.
Dan Nicolaescu <dann@ics.uci.edu>
parents:
105936
diff
changeset
|
4009 const char *flag_sym; |
52503
256a27a47af1
[HAVE_SOCKETS]: Include sys/ioctl.h and net/if.h.
Kim F. Storm <storm@cua.dk>
parents:
52401
diff
changeset
|
4010 }; |
256a27a47af1
[HAVE_SOCKETS]: Include sys/ioctl.h and net/if.h.
Kim F. Storm <storm@cua.dk>
parents:
52401
diff
changeset
|
4011 |
105959
ba3ffbd9c422
* process.c (ifflag_def): Make flag_sym constant.
Dan Nicolaescu <dann@ics.uci.edu>
parents:
105936
diff
changeset
|
4012 static const struct ifflag_def ifflag_table[] = { |
52503
256a27a47af1
[HAVE_SOCKETS]: Include sys/ioctl.h and net/if.h.
Kim F. Storm <storm@cua.dk>
parents:
52401
diff
changeset
|
4013 #ifdef IFF_UP |
256a27a47af1
[HAVE_SOCKETS]: Include sys/ioctl.h and net/if.h.
Kim F. Storm <storm@cua.dk>
parents:
52401
diff
changeset
|
4014 { IFF_UP, "up" }, |
256a27a47af1
[HAVE_SOCKETS]: Include sys/ioctl.h and net/if.h.
Kim F. Storm <storm@cua.dk>
parents:
52401
diff
changeset
|
4015 #endif |
256a27a47af1
[HAVE_SOCKETS]: Include sys/ioctl.h and net/if.h.
Kim F. Storm <storm@cua.dk>
parents:
52401
diff
changeset
|
4016 #ifdef IFF_BROADCAST |
256a27a47af1
[HAVE_SOCKETS]: Include sys/ioctl.h and net/if.h.
Kim F. Storm <storm@cua.dk>
parents:
52401
diff
changeset
|
4017 { IFF_BROADCAST, "broadcast" }, |
256a27a47af1
[HAVE_SOCKETS]: Include sys/ioctl.h and net/if.h.
Kim F. Storm <storm@cua.dk>
parents:
52401
diff
changeset
|
4018 #endif |
256a27a47af1
[HAVE_SOCKETS]: Include sys/ioctl.h and net/if.h.
Kim F. Storm <storm@cua.dk>
parents:
52401
diff
changeset
|
4019 #ifdef IFF_DEBUG |
256a27a47af1
[HAVE_SOCKETS]: Include sys/ioctl.h and net/if.h.
Kim F. Storm <storm@cua.dk>
parents:
52401
diff
changeset
|
4020 { IFF_DEBUG, "debug" }, |
256a27a47af1
[HAVE_SOCKETS]: Include sys/ioctl.h and net/if.h.
Kim F. Storm <storm@cua.dk>
parents:
52401
diff
changeset
|
4021 #endif |
256a27a47af1
[HAVE_SOCKETS]: Include sys/ioctl.h and net/if.h.
Kim F. Storm <storm@cua.dk>
parents:
52401
diff
changeset
|
4022 #ifdef IFF_LOOPBACK |
256a27a47af1
[HAVE_SOCKETS]: Include sys/ioctl.h and net/if.h.
Kim F. Storm <storm@cua.dk>
parents:
52401
diff
changeset
|
4023 { IFF_LOOPBACK, "loopback" }, |
256a27a47af1
[HAVE_SOCKETS]: Include sys/ioctl.h and net/if.h.
Kim F. Storm <storm@cua.dk>
parents:
52401
diff
changeset
|
4024 #endif |
256a27a47af1
[HAVE_SOCKETS]: Include sys/ioctl.h and net/if.h.
Kim F. Storm <storm@cua.dk>
parents:
52401
diff
changeset
|
4025 #ifdef IFF_POINTOPOINT |
256a27a47af1
[HAVE_SOCKETS]: Include sys/ioctl.h and net/if.h.
Kim F. Storm <storm@cua.dk>
parents:
52401
diff
changeset
|
4026 { IFF_POINTOPOINT, "pointopoint" }, |
256a27a47af1
[HAVE_SOCKETS]: Include sys/ioctl.h and net/if.h.
Kim F. Storm <storm@cua.dk>
parents:
52401
diff
changeset
|
4027 #endif |
256a27a47af1
[HAVE_SOCKETS]: Include sys/ioctl.h and net/if.h.
Kim F. Storm <storm@cua.dk>
parents:
52401
diff
changeset
|
4028 #ifdef IFF_RUNNING |
256a27a47af1
[HAVE_SOCKETS]: Include sys/ioctl.h and net/if.h.
Kim F. Storm <storm@cua.dk>
parents:
52401
diff
changeset
|
4029 { IFF_RUNNING, "running" }, |
256a27a47af1
[HAVE_SOCKETS]: Include sys/ioctl.h and net/if.h.
Kim F. Storm <storm@cua.dk>
parents:
52401
diff
changeset
|
4030 #endif |
256a27a47af1
[HAVE_SOCKETS]: Include sys/ioctl.h and net/if.h.
Kim F. Storm <storm@cua.dk>
parents:
52401
diff
changeset
|
4031 #ifdef IFF_NOARP |
256a27a47af1
[HAVE_SOCKETS]: Include sys/ioctl.h and net/if.h.
Kim F. Storm <storm@cua.dk>
parents:
52401
diff
changeset
|
4032 { IFF_NOARP, "noarp" }, |
256a27a47af1
[HAVE_SOCKETS]: Include sys/ioctl.h and net/if.h.
Kim F. Storm <storm@cua.dk>
parents:
52401
diff
changeset
|
4033 #endif |
256a27a47af1
[HAVE_SOCKETS]: Include sys/ioctl.h and net/if.h.
Kim F. Storm <storm@cua.dk>
parents:
52401
diff
changeset
|
4034 #ifdef IFF_PROMISC |
256a27a47af1
[HAVE_SOCKETS]: Include sys/ioctl.h and net/if.h.
Kim F. Storm <storm@cua.dk>
parents:
52401
diff
changeset
|
4035 { IFF_PROMISC, "promisc" }, |
256a27a47af1
[HAVE_SOCKETS]: Include sys/ioctl.h and net/if.h.
Kim F. Storm <storm@cua.dk>
parents:
52401
diff
changeset
|
4036 #endif |
256a27a47af1
[HAVE_SOCKETS]: Include sys/ioctl.h and net/if.h.
Kim F. Storm <storm@cua.dk>
parents:
52401
diff
changeset
|
4037 #ifdef IFF_NOTRAILERS |
256a27a47af1
[HAVE_SOCKETS]: Include sys/ioctl.h and net/if.h.
Kim F. Storm <storm@cua.dk>
parents:
52401
diff
changeset
|
4038 { IFF_NOTRAILERS, "notrailers" }, |
256a27a47af1
[HAVE_SOCKETS]: Include sys/ioctl.h and net/if.h.
Kim F. Storm <storm@cua.dk>
parents:
52401
diff
changeset
|
4039 #endif |
256a27a47af1
[HAVE_SOCKETS]: Include sys/ioctl.h and net/if.h.
Kim F. Storm <storm@cua.dk>
parents:
52401
diff
changeset
|
4040 #ifdef IFF_ALLMULTI |
256a27a47af1
[HAVE_SOCKETS]: Include sys/ioctl.h and net/if.h.
Kim F. Storm <storm@cua.dk>
parents:
52401
diff
changeset
|
4041 { IFF_ALLMULTI, "allmulti" }, |
256a27a47af1
[HAVE_SOCKETS]: Include sys/ioctl.h and net/if.h.
Kim F. Storm <storm@cua.dk>
parents:
52401
diff
changeset
|
4042 #endif |
256a27a47af1
[HAVE_SOCKETS]: Include sys/ioctl.h and net/if.h.
Kim F. Storm <storm@cua.dk>
parents:
52401
diff
changeset
|
4043 #ifdef IFF_MASTER |
256a27a47af1
[HAVE_SOCKETS]: Include sys/ioctl.h and net/if.h.
Kim F. Storm <storm@cua.dk>
parents:
52401
diff
changeset
|
4044 { IFF_MASTER, "master" }, |
256a27a47af1
[HAVE_SOCKETS]: Include sys/ioctl.h and net/if.h.
Kim F. Storm <storm@cua.dk>
parents:
52401
diff
changeset
|
4045 #endif |
256a27a47af1
[HAVE_SOCKETS]: Include sys/ioctl.h and net/if.h.
Kim F. Storm <storm@cua.dk>
parents:
52401
diff
changeset
|
4046 #ifdef IFF_SLAVE |
256a27a47af1
[HAVE_SOCKETS]: Include sys/ioctl.h and net/if.h.
Kim F. Storm <storm@cua.dk>
parents:
52401
diff
changeset
|
4047 { IFF_SLAVE, "slave" }, |
256a27a47af1
[HAVE_SOCKETS]: Include sys/ioctl.h and net/if.h.
Kim F. Storm <storm@cua.dk>
parents:
52401
diff
changeset
|
4048 #endif |
256a27a47af1
[HAVE_SOCKETS]: Include sys/ioctl.h and net/if.h.
Kim F. Storm <storm@cua.dk>
parents:
52401
diff
changeset
|
4049 #ifdef IFF_MULTICAST |
256a27a47af1
[HAVE_SOCKETS]: Include sys/ioctl.h and net/if.h.
Kim F. Storm <storm@cua.dk>
parents:
52401
diff
changeset
|
4050 { IFF_MULTICAST, "multicast" }, |
256a27a47af1
[HAVE_SOCKETS]: Include sys/ioctl.h and net/if.h.
Kim F. Storm <storm@cua.dk>
parents:
52401
diff
changeset
|
4051 #endif |
256a27a47af1
[HAVE_SOCKETS]: Include sys/ioctl.h and net/if.h.
Kim F. Storm <storm@cua.dk>
parents:
52401
diff
changeset
|
4052 #ifdef IFF_PORTSEL |
256a27a47af1
[HAVE_SOCKETS]: Include sys/ioctl.h and net/if.h.
Kim F. Storm <storm@cua.dk>
parents:
52401
diff
changeset
|
4053 { IFF_PORTSEL, "portsel" }, |
256a27a47af1
[HAVE_SOCKETS]: Include sys/ioctl.h and net/if.h.
Kim F. Storm <storm@cua.dk>
parents:
52401
diff
changeset
|
4054 #endif |
256a27a47af1
[HAVE_SOCKETS]: Include sys/ioctl.h and net/if.h.
Kim F. Storm <storm@cua.dk>
parents:
52401
diff
changeset
|
4055 #ifdef IFF_AUTOMEDIA |
256a27a47af1
[HAVE_SOCKETS]: Include sys/ioctl.h and net/if.h.
Kim F. Storm <storm@cua.dk>
parents:
52401
diff
changeset
|
4056 { IFF_AUTOMEDIA, "automedia" }, |
256a27a47af1
[HAVE_SOCKETS]: Include sys/ioctl.h and net/if.h.
Kim F. Storm <storm@cua.dk>
parents:
52401
diff
changeset
|
4057 #endif |
256a27a47af1
[HAVE_SOCKETS]: Include sys/ioctl.h and net/if.h.
Kim F. Storm <storm@cua.dk>
parents:
52401
diff
changeset
|
4058 #ifdef IFF_DYNAMIC |
256a27a47af1
[HAVE_SOCKETS]: Include sys/ioctl.h and net/if.h.
Kim F. Storm <storm@cua.dk>
parents:
52401
diff
changeset
|
4059 { IFF_DYNAMIC, "dynamic" }, |
256a27a47af1
[HAVE_SOCKETS]: Include sys/ioctl.h and net/if.h.
Kim F. Storm <storm@cua.dk>
parents:
52401
diff
changeset
|
4060 #endif |
68146
e5c85a134e67
[HAVE_INTTYPES_H]: Include inttypes.h.
YAMAMOTO Mitsuharu <mituharu@math.s.chiba-u.ac.jp>
parents:
68041
diff
changeset
|
4061 #ifdef IFF_OACTIVE |
e5c85a134e67
[HAVE_INTTYPES_H]: Include inttypes.h.
YAMAMOTO Mitsuharu <mituharu@math.s.chiba-u.ac.jp>
parents:
68041
diff
changeset
|
4062 { IFF_OACTIVE, "oactive" }, /* OpenBSD: transmission in progress */ |
68008 | 4063 #endif |
4064 #ifdef IFF_SIMPLEX | |
4065 { IFF_SIMPLEX, "simplex" }, /* OpenBSD: can't hear own transmissions */ | |
4066 #endif | |
4067 #ifdef IFF_LINK0 | |
4068 { IFF_LINK0, "link0" }, /* OpenBSD: per link layer defined bit */ | |
4069 #endif | |
4070 #ifdef IFF_LINK1 | |
4071 { IFF_LINK1, "link1" }, /* OpenBSD: per link layer defined bit */ | |
4072 #endif | |
4073 #ifdef IFF_LINK2 | |
4074 { IFF_LINK2, "link2" }, /* OpenBSD: per link layer defined bit */ | |
4075 #endif | |
52503
256a27a47af1
[HAVE_SOCKETS]: Include sys/ioctl.h and net/if.h.
Kim F. Storm <storm@cua.dk>
parents:
52401
diff
changeset
|
4076 { 0, 0 } |
256a27a47af1
[HAVE_SOCKETS]: Include sys/ioctl.h and net/if.h.
Kim F. Storm <storm@cua.dk>
parents:
52401
diff
changeset
|
4077 }; |
256a27a47af1
[HAVE_SOCKETS]: Include sys/ioctl.h and net/if.h.
Kim F. Storm <storm@cua.dk>
parents:
52401
diff
changeset
|
4078 |
52516
0ca23eb697b9
(Fset_process_sentinel): Add sentinel to childp plist
Kim F. Storm <storm@cua.dk>
parents:
52503
diff
changeset
|
4079 DEFUN ("network-interface-info", Fnetwork_interface_info, Snetwork_interface_info, 1, 1, 0, |
52503
256a27a47af1
[HAVE_SOCKETS]: Include sys/ioctl.h and net/if.h.
Kim F. Storm <storm@cua.dk>
parents:
52401
diff
changeset
|
4080 doc: /* Return information about network interface named IFNAME. |
256a27a47af1
[HAVE_SOCKETS]: Include sys/ioctl.h and net/if.h.
Kim F. Storm <storm@cua.dk>
parents:
52401
diff
changeset
|
4081 The return value is a list (ADDR BCAST NETMASK HWADDR FLAGS), |
256a27a47af1
[HAVE_SOCKETS]: Include sys/ioctl.h and net/if.h.
Kim F. Storm <storm@cua.dk>
parents:
52401
diff
changeset
|
4082 where ADDR is the layer 3 address, BCAST is the layer 3 broadcast address, |
256a27a47af1
[HAVE_SOCKETS]: Include sys/ioctl.h and net/if.h.
Kim F. Storm <storm@cua.dk>
parents:
52401
diff
changeset
|
4083 NETMASK is the layer 3 network mask, HWADDR is the layer 2 addres, and |
256a27a47af1
[HAVE_SOCKETS]: Include sys/ioctl.h and net/if.h.
Kim F. Storm <storm@cua.dk>
parents:
52401
diff
changeset
|
4084 FLAGS is the current flags of the interface. */) |
256a27a47af1
[HAVE_SOCKETS]: Include sys/ioctl.h and net/if.h.
Kim F. Storm <storm@cua.dk>
parents:
52401
diff
changeset
|
4085 (ifname) |
256a27a47af1
[HAVE_SOCKETS]: Include sys/ioctl.h and net/if.h.
Kim F. Storm <storm@cua.dk>
parents:
52401
diff
changeset
|
4086 Lisp_Object ifname; |
256a27a47af1
[HAVE_SOCKETS]: Include sys/ioctl.h and net/if.h.
Kim F. Storm <storm@cua.dk>
parents:
52401
diff
changeset
|
4087 { |
256a27a47af1
[HAVE_SOCKETS]: Include sys/ioctl.h and net/if.h.
Kim F. Storm <storm@cua.dk>
parents:
52401
diff
changeset
|
4088 struct ifreq rq; |
256a27a47af1
[HAVE_SOCKETS]: Include sys/ioctl.h and net/if.h.
Kim F. Storm <storm@cua.dk>
parents:
52401
diff
changeset
|
4089 Lisp_Object res = Qnil; |
256a27a47af1
[HAVE_SOCKETS]: Include sys/ioctl.h and net/if.h.
Kim F. Storm <storm@cua.dk>
parents:
52401
diff
changeset
|
4090 Lisp_Object elt; |
256a27a47af1
[HAVE_SOCKETS]: Include sys/ioctl.h and net/if.h.
Kim F. Storm <storm@cua.dk>
parents:
52401
diff
changeset
|
4091 int s; |
256a27a47af1
[HAVE_SOCKETS]: Include sys/ioctl.h and net/if.h.
Kim F. Storm <storm@cua.dk>
parents:
52401
diff
changeset
|
4092 int any = 0; |
256a27a47af1
[HAVE_SOCKETS]: Include sys/ioctl.h and net/if.h.
Kim F. Storm <storm@cua.dk>
parents:
52401
diff
changeset
|
4093 |
256a27a47af1
[HAVE_SOCKETS]: Include sys/ioctl.h and net/if.h.
Kim F. Storm <storm@cua.dk>
parents:
52401
diff
changeset
|
4094 CHECK_STRING (ifname); |
256a27a47af1
[HAVE_SOCKETS]: Include sys/ioctl.h and net/if.h.
Kim F. Storm <storm@cua.dk>
parents:
52401
diff
changeset
|
4095 |
256a27a47af1
[HAVE_SOCKETS]: Include sys/ioctl.h and net/if.h.
Kim F. Storm <storm@cua.dk>
parents:
52401
diff
changeset
|
4096 bzero (rq.ifr_name, sizeof rq.ifr_name); |
256a27a47af1
[HAVE_SOCKETS]: Include sys/ioctl.h and net/if.h.
Kim F. Storm <storm@cua.dk>
parents:
52401
diff
changeset
|
4097 strncpy (rq.ifr_name, SDATA (ifname), sizeof (rq.ifr_name)); |
256a27a47af1
[HAVE_SOCKETS]: Include sys/ioctl.h and net/if.h.
Kim F. Storm <storm@cua.dk>
parents:
52401
diff
changeset
|
4098 |
256a27a47af1
[HAVE_SOCKETS]: Include sys/ioctl.h and net/if.h.
Kim F. Storm <storm@cua.dk>
parents:
52401
diff
changeset
|
4099 s = socket (AF_INET, SOCK_STREAM, 0); |
256a27a47af1
[HAVE_SOCKETS]: Include sys/ioctl.h and net/if.h.
Kim F. Storm <storm@cua.dk>
parents:
52401
diff
changeset
|
4100 if (s < 0) |
256a27a47af1
[HAVE_SOCKETS]: Include sys/ioctl.h and net/if.h.
Kim F. Storm <storm@cua.dk>
parents:
52401
diff
changeset
|
4101 return Qnil; |
256a27a47af1
[HAVE_SOCKETS]: Include sys/ioctl.h and net/if.h.
Kim F. Storm <storm@cua.dk>
parents:
52401
diff
changeset
|
4102 |
256a27a47af1
[HAVE_SOCKETS]: Include sys/ioctl.h and net/if.h.
Kim F. Storm <storm@cua.dk>
parents:
52401
diff
changeset
|
4103 elt = Qnil; |
52591 | 4104 #if defined(SIOCGIFFLAGS) && defined(HAVE_STRUCT_IFREQ_IFR_FLAGS) |
52503
256a27a47af1
[HAVE_SOCKETS]: Include sys/ioctl.h and net/if.h.
Kim F. Storm <storm@cua.dk>
parents:
52401
diff
changeset
|
4105 if (ioctl (s, SIOCGIFFLAGS, &rq) == 0) |
256a27a47af1
[HAVE_SOCKETS]: Include sys/ioctl.h and net/if.h.
Kim F. Storm <storm@cua.dk>
parents:
52401
diff
changeset
|
4106 { |
256a27a47af1
[HAVE_SOCKETS]: Include sys/ioctl.h and net/if.h.
Kim F. Storm <storm@cua.dk>
parents:
52401
diff
changeset
|
4107 int flags = rq.ifr_flags; |
105959
ba3ffbd9c422
* process.c (ifflag_def): Make flag_sym constant.
Dan Nicolaescu <dann@ics.uci.edu>
parents:
105936
diff
changeset
|
4108 const struct ifflag_def *fp; |
52503
256a27a47af1
[HAVE_SOCKETS]: Include sys/ioctl.h and net/if.h.
Kim F. Storm <storm@cua.dk>
parents:
52401
diff
changeset
|
4109 int fnum; |
256a27a47af1
[HAVE_SOCKETS]: Include sys/ioctl.h and net/if.h.
Kim F. Storm <storm@cua.dk>
parents:
52401
diff
changeset
|
4110 |
256a27a47af1
[HAVE_SOCKETS]: Include sys/ioctl.h and net/if.h.
Kim F. Storm <storm@cua.dk>
parents:
52401
diff
changeset
|
4111 any++; |
67920
8f3c10fea90b
(Fnetwork_interface_info): Correctly terminate the
Andreas Schwab <schwab@suse.de>
parents:
66752
diff
changeset
|
4112 for (fp = ifflag_table; flags != 0 && fp->flag_sym; fp++) |
52503
256a27a47af1
[HAVE_SOCKETS]: Include sys/ioctl.h and net/if.h.
Kim F. Storm <storm@cua.dk>
parents:
52401
diff
changeset
|
4113 { |
256a27a47af1
[HAVE_SOCKETS]: Include sys/ioctl.h and net/if.h.
Kim F. Storm <storm@cua.dk>
parents:
52401
diff
changeset
|
4114 if (flags & fp->flag_bit) |
256a27a47af1
[HAVE_SOCKETS]: Include sys/ioctl.h and net/if.h.
Kim F. Storm <storm@cua.dk>
parents:
52401
diff
changeset
|
4115 { |
256a27a47af1
[HAVE_SOCKETS]: Include sys/ioctl.h and net/if.h.
Kim F. Storm <storm@cua.dk>
parents:
52401
diff
changeset
|
4116 elt = Fcons (intern (fp->flag_sym), elt); |
256a27a47af1
[HAVE_SOCKETS]: Include sys/ioctl.h and net/if.h.
Kim F. Storm <storm@cua.dk>
parents:
52401
diff
changeset
|
4117 flags -= fp->flag_bit; |
256a27a47af1
[HAVE_SOCKETS]: Include sys/ioctl.h and net/if.h.
Kim F. Storm <storm@cua.dk>
parents:
52401
diff
changeset
|
4118 } |
256a27a47af1
[HAVE_SOCKETS]: Include sys/ioctl.h and net/if.h.
Kim F. Storm <storm@cua.dk>
parents:
52401
diff
changeset
|
4119 } |
256a27a47af1
[HAVE_SOCKETS]: Include sys/ioctl.h and net/if.h.
Kim F. Storm <storm@cua.dk>
parents:
52401
diff
changeset
|
4120 for (fnum = 0; flags && fnum < 32; fnum++) |
256a27a47af1
[HAVE_SOCKETS]: Include sys/ioctl.h and net/if.h.
Kim F. Storm <storm@cua.dk>
parents:
52401
diff
changeset
|
4121 { |
256a27a47af1
[HAVE_SOCKETS]: Include sys/ioctl.h and net/if.h.
Kim F. Storm <storm@cua.dk>
parents:
52401
diff
changeset
|
4122 if (flags & (1 << fnum)) |
256a27a47af1
[HAVE_SOCKETS]: Include sys/ioctl.h and net/if.h.
Kim F. Storm <storm@cua.dk>
parents:
52401
diff
changeset
|
4123 { |
256a27a47af1
[HAVE_SOCKETS]: Include sys/ioctl.h and net/if.h.
Kim F. Storm <storm@cua.dk>
parents:
52401
diff
changeset
|
4124 elt = Fcons (make_number (fnum), elt); |
256a27a47af1
[HAVE_SOCKETS]: Include sys/ioctl.h and net/if.h.
Kim F. Storm <storm@cua.dk>
parents:
52401
diff
changeset
|
4125 } |
256a27a47af1
[HAVE_SOCKETS]: Include sys/ioctl.h and net/if.h.
Kim F. Storm <storm@cua.dk>
parents:
52401
diff
changeset
|
4126 } |
256a27a47af1
[HAVE_SOCKETS]: Include sys/ioctl.h and net/if.h.
Kim F. Storm <storm@cua.dk>
parents:
52401
diff
changeset
|
4127 } |
256a27a47af1
[HAVE_SOCKETS]: Include sys/ioctl.h and net/if.h.
Kim F. Storm <storm@cua.dk>
parents:
52401
diff
changeset
|
4128 #endif |
256a27a47af1
[HAVE_SOCKETS]: Include sys/ioctl.h and net/if.h.
Kim F. Storm <storm@cua.dk>
parents:
52401
diff
changeset
|
4129 res = Fcons (elt, res); |
256a27a47af1
[HAVE_SOCKETS]: Include sys/ioctl.h and net/if.h.
Kim F. Storm <storm@cua.dk>
parents:
52401
diff
changeset
|
4130 |
256a27a47af1
[HAVE_SOCKETS]: Include sys/ioctl.h and net/if.h.
Kim F. Storm <storm@cua.dk>
parents:
52401
diff
changeset
|
4131 elt = Qnil; |
52591 | 4132 #if defined(SIOCGIFHWADDR) && defined(HAVE_STRUCT_IFREQ_IFR_HWADDR) |
52503
256a27a47af1
[HAVE_SOCKETS]: Include sys/ioctl.h and net/if.h.
Kim F. Storm <storm@cua.dk>
parents:
52401
diff
changeset
|
4133 if (ioctl (s, SIOCGIFHWADDR, &rq) == 0) |
256a27a47af1
[HAVE_SOCKETS]: Include sys/ioctl.h and net/if.h.
Kim F. Storm <storm@cua.dk>
parents:
52401
diff
changeset
|
4134 { |
52525
fd2be6cea0e7
(Fnetwork_interface_list, Fnetwork_interface_info):
Kim F. Storm <storm@cua.dk>
parents:
52516
diff
changeset
|
4135 Lisp_Object hwaddr = Fmake_vector (make_number (6), Qnil); |
52503
256a27a47af1
[HAVE_SOCKETS]: Include sys/ioctl.h and net/if.h.
Kim F. Storm <storm@cua.dk>
parents:
52401
diff
changeset
|
4136 register struct Lisp_Vector *p = XVECTOR (hwaddr); |
256a27a47af1
[HAVE_SOCKETS]: Include sys/ioctl.h and net/if.h.
Kim F. Storm <storm@cua.dk>
parents:
52401
diff
changeset
|
4137 int n; |
256a27a47af1
[HAVE_SOCKETS]: Include sys/ioctl.h and net/if.h.
Kim F. Storm <storm@cua.dk>
parents:
52401
diff
changeset
|
4138 |
256a27a47af1
[HAVE_SOCKETS]: Include sys/ioctl.h and net/if.h.
Kim F. Storm <storm@cua.dk>
parents:
52401
diff
changeset
|
4139 any++; |
256a27a47af1
[HAVE_SOCKETS]: Include sys/ioctl.h and net/if.h.
Kim F. Storm <storm@cua.dk>
parents:
52401
diff
changeset
|
4140 for (n = 0; n < 6; n++) |
256a27a47af1
[HAVE_SOCKETS]: Include sys/ioctl.h and net/if.h.
Kim F. Storm <storm@cua.dk>
parents:
52401
diff
changeset
|
4141 p->contents[n] = make_number (((unsigned char *)&rq.ifr_hwaddr.sa_data[0])[n]); |
52527
3ea59ac8dfa5
(Fnetwork_interface_info): Fix type error.
Dave Love <fx@gnu.org>
parents:
52525
diff
changeset
|
4142 elt = Fcons (make_number (rq.ifr_hwaddr.sa_family), hwaddr); |
52503
256a27a47af1
[HAVE_SOCKETS]: Include sys/ioctl.h and net/if.h.
Kim F. Storm <storm@cua.dk>
parents:
52401
diff
changeset
|
4143 } |
256a27a47af1
[HAVE_SOCKETS]: Include sys/ioctl.h and net/if.h.
Kim F. Storm <storm@cua.dk>
parents:
52401
diff
changeset
|
4144 #endif |
256a27a47af1
[HAVE_SOCKETS]: Include sys/ioctl.h and net/if.h.
Kim F. Storm <storm@cua.dk>
parents:
52401
diff
changeset
|
4145 res = Fcons (elt, res); |
256a27a47af1
[HAVE_SOCKETS]: Include sys/ioctl.h and net/if.h.
Kim F. Storm <storm@cua.dk>
parents:
52401
diff
changeset
|
4146 |
256a27a47af1
[HAVE_SOCKETS]: Include sys/ioctl.h and net/if.h.
Kim F. Storm <storm@cua.dk>
parents:
52401
diff
changeset
|
4147 elt = Qnil; |
68146
e5c85a134e67
[HAVE_INTTYPES_H]: Include inttypes.h.
YAMAMOTO Mitsuharu <mituharu@math.s.chiba-u.ac.jp>
parents:
68041
diff
changeset
|
4148 #if defined(SIOCGIFNETMASK) && (defined(HAVE_STRUCT_IFREQ_IFR_NETMASK) || defined(HAVE_STRUCT_IFREQ_IFR_ADDR)) |
52503
256a27a47af1
[HAVE_SOCKETS]: Include sys/ioctl.h and net/if.h.
Kim F. Storm <storm@cua.dk>
parents:
52401
diff
changeset
|
4149 if (ioctl (s, SIOCGIFNETMASK, &rq) == 0) |
256a27a47af1
[HAVE_SOCKETS]: Include sys/ioctl.h and net/if.h.
Kim F. Storm <storm@cua.dk>
parents:
52401
diff
changeset
|
4150 { |
256a27a47af1
[HAVE_SOCKETS]: Include sys/ioctl.h and net/if.h.
Kim F. Storm <storm@cua.dk>
parents:
52401
diff
changeset
|
4151 any++; |
68146
e5c85a134e67
[HAVE_INTTYPES_H]: Include inttypes.h.
YAMAMOTO Mitsuharu <mituharu@math.s.chiba-u.ac.jp>
parents:
68041
diff
changeset
|
4152 #ifdef HAVE_STRUCT_IFREQ_IFR_NETMASK |
52503
256a27a47af1
[HAVE_SOCKETS]: Include sys/ioctl.h and net/if.h.
Kim F. Storm <storm@cua.dk>
parents:
52401
diff
changeset
|
4153 elt = conv_sockaddr_to_lisp (&rq.ifr_netmask, sizeof (rq.ifr_netmask)); |
68146
e5c85a134e67
[HAVE_INTTYPES_H]: Include inttypes.h.
YAMAMOTO Mitsuharu <mituharu@math.s.chiba-u.ac.jp>
parents:
68041
diff
changeset
|
4154 #else |
e5c85a134e67
[HAVE_INTTYPES_H]: Include inttypes.h.
YAMAMOTO Mitsuharu <mituharu@math.s.chiba-u.ac.jp>
parents:
68041
diff
changeset
|
4155 elt = conv_sockaddr_to_lisp (&rq.ifr_addr, sizeof (rq.ifr_addr)); |
e5c85a134e67
[HAVE_INTTYPES_H]: Include inttypes.h.
YAMAMOTO Mitsuharu <mituharu@math.s.chiba-u.ac.jp>
parents:
68041
diff
changeset
|
4156 #endif |
52503
256a27a47af1
[HAVE_SOCKETS]: Include sys/ioctl.h and net/if.h.
Kim F. Storm <storm@cua.dk>
parents:
52401
diff
changeset
|
4157 } |
256a27a47af1
[HAVE_SOCKETS]: Include sys/ioctl.h and net/if.h.
Kim F. Storm <storm@cua.dk>
parents:
52401
diff
changeset
|
4158 #endif |
256a27a47af1
[HAVE_SOCKETS]: Include sys/ioctl.h and net/if.h.
Kim F. Storm <storm@cua.dk>
parents:
52401
diff
changeset
|
4159 res = Fcons (elt, res); |
256a27a47af1
[HAVE_SOCKETS]: Include sys/ioctl.h and net/if.h.
Kim F. Storm <storm@cua.dk>
parents:
52401
diff
changeset
|
4160 |
256a27a47af1
[HAVE_SOCKETS]: Include sys/ioctl.h and net/if.h.
Kim F. Storm <storm@cua.dk>
parents:
52401
diff
changeset
|
4161 elt = Qnil; |
52591 | 4162 #if defined(SIOCGIFBRDADDR) && defined(HAVE_STRUCT_IFREQ_IFR_BROADADDR) |
52503
256a27a47af1
[HAVE_SOCKETS]: Include sys/ioctl.h and net/if.h.
Kim F. Storm <storm@cua.dk>
parents:
52401
diff
changeset
|
4163 if (ioctl (s, SIOCGIFBRDADDR, &rq) == 0) |
256a27a47af1
[HAVE_SOCKETS]: Include sys/ioctl.h and net/if.h.
Kim F. Storm <storm@cua.dk>
parents:
52401
diff
changeset
|
4164 { |
256a27a47af1
[HAVE_SOCKETS]: Include sys/ioctl.h and net/if.h.
Kim F. Storm <storm@cua.dk>
parents:
52401
diff
changeset
|
4165 any++; |
256a27a47af1
[HAVE_SOCKETS]: Include sys/ioctl.h and net/if.h.
Kim F. Storm <storm@cua.dk>
parents:
52401
diff
changeset
|
4166 elt = conv_sockaddr_to_lisp (&rq.ifr_broadaddr, sizeof (rq.ifr_broadaddr)); |
256a27a47af1
[HAVE_SOCKETS]: Include sys/ioctl.h and net/if.h.
Kim F. Storm <storm@cua.dk>
parents:
52401
diff
changeset
|
4167 } |
256a27a47af1
[HAVE_SOCKETS]: Include sys/ioctl.h and net/if.h.
Kim F. Storm <storm@cua.dk>
parents:
52401
diff
changeset
|
4168 #endif |
256a27a47af1
[HAVE_SOCKETS]: Include sys/ioctl.h and net/if.h.
Kim F. Storm <storm@cua.dk>
parents:
52401
diff
changeset
|
4169 res = Fcons (elt, res); |
256a27a47af1
[HAVE_SOCKETS]: Include sys/ioctl.h and net/if.h.
Kim F. Storm <storm@cua.dk>
parents:
52401
diff
changeset
|
4170 |
256a27a47af1
[HAVE_SOCKETS]: Include sys/ioctl.h and net/if.h.
Kim F. Storm <storm@cua.dk>
parents:
52401
diff
changeset
|
4171 elt = Qnil; |
52591 | 4172 #if defined(SIOCGIFADDR) && defined(HAVE_STRUCT_IFREQ_IFR_ADDR) |
52503
256a27a47af1
[HAVE_SOCKETS]: Include sys/ioctl.h and net/if.h.
Kim F. Storm <storm@cua.dk>
parents:
52401
diff
changeset
|
4173 if (ioctl (s, SIOCGIFADDR, &rq) == 0) |
256a27a47af1
[HAVE_SOCKETS]: Include sys/ioctl.h and net/if.h.
Kim F. Storm <storm@cua.dk>
parents:
52401
diff
changeset
|
4174 { |
256a27a47af1
[HAVE_SOCKETS]: Include sys/ioctl.h and net/if.h.
Kim F. Storm <storm@cua.dk>
parents:
52401
diff
changeset
|
4175 any++; |
256a27a47af1
[HAVE_SOCKETS]: Include sys/ioctl.h and net/if.h.
Kim F. Storm <storm@cua.dk>
parents:
52401
diff
changeset
|
4176 elt = conv_sockaddr_to_lisp (&rq.ifr_addr, sizeof (rq.ifr_addr)); |
256a27a47af1
[HAVE_SOCKETS]: Include sys/ioctl.h and net/if.h.
Kim F. Storm <storm@cua.dk>
parents:
52401
diff
changeset
|
4177 } |
256a27a47af1
[HAVE_SOCKETS]: Include sys/ioctl.h and net/if.h.
Kim F. Storm <storm@cua.dk>
parents:
52401
diff
changeset
|
4178 #endif |
256a27a47af1
[HAVE_SOCKETS]: Include sys/ioctl.h and net/if.h.
Kim F. Storm <storm@cua.dk>
parents:
52401
diff
changeset
|
4179 res = Fcons (elt, res); |
256a27a47af1
[HAVE_SOCKETS]: Include sys/ioctl.h and net/if.h.
Kim F. Storm <storm@cua.dk>
parents:
52401
diff
changeset
|
4180 |
256a27a47af1
[HAVE_SOCKETS]: Include sys/ioctl.h and net/if.h.
Kim F. Storm <storm@cua.dk>
parents:
52401
diff
changeset
|
4181 close (s); |
256a27a47af1
[HAVE_SOCKETS]: Include sys/ioctl.h and net/if.h.
Kim F. Storm <storm@cua.dk>
parents:
52401
diff
changeset
|
4182 |
256a27a47af1
[HAVE_SOCKETS]: Include sys/ioctl.h and net/if.h.
Kim F. Storm <storm@cua.dk>
parents:
52401
diff
changeset
|
4183 return any ? res : Qnil; |
256a27a47af1
[HAVE_SOCKETS]: Include sys/ioctl.h and net/if.h.
Kim F. Storm <storm@cua.dk>
parents:
52401
diff
changeset
|
4184 } |
256a27a47af1
[HAVE_SOCKETS]: Include sys/ioctl.h and net/if.h.
Kim F. Storm <storm@cua.dk>
parents:
52401
diff
changeset
|
4185 #endif |
256a27a47af1
[HAVE_SOCKETS]: Include sys/ioctl.h and net/if.h.
Kim F. Storm <storm@cua.dk>
parents:
52401
diff
changeset
|
4186 #endif /* HAVE_SOCKETS */ |
256a27a47af1
[HAVE_SOCKETS]: Include sys/ioctl.h and net/if.h.
Kim F. Storm <storm@cua.dk>
parents:
52401
diff
changeset
|
4187 |
56092 | 4188 /* Turn off input and output for process PROC. */ |
4189 | |
20382
dbad9367d232
(create_process, deactivate_process, close_process_descs):
Andreas Schwab <schwab@suse.de>
parents:
20225
diff
changeset
|
4190 void |
578 | 4191 deactivate_process (proc) |
4192 Lisp_Object proc; | |
4193 { | |
4194 register int inchannel, outchannel; | |
4195 register struct Lisp_Process *p = XPROCESS (proc); | |
4196 | |
81826
077a1e6fd3f2
(struct Lisp_Process): Turn slots infd, outfd, kill_without_query, pty_flag,
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
80984
diff
changeset
|
4197 inchannel = p->infd; |
077a1e6fd3f2
(struct Lisp_Process): Turn slots infd, outfd, kill_without_query, pty_flag,
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
80984
diff
changeset
|
4198 outchannel = p->outfd; |
5134
0a4e46e15304
(wait_reading_process_input):
Richard M. Stallman <rms@gnu.org>
parents:
4998
diff
changeset
|
4199 |
53472
1a5fe79d27f3
(ADAPTIVE_READ_BUFFERING): New conditional.
Kim F. Storm <storm@cua.dk>
parents:
53072
diff
changeset
|
4200 #ifdef ADAPTIVE_READ_BUFFERING |
81826
077a1e6fd3f2
(struct Lisp_Process): Turn slots infd, outfd, kill_without_query, pty_flag,
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
80984
diff
changeset
|
4201 if (p->read_output_delay > 0) |
53472
1a5fe79d27f3
(ADAPTIVE_READ_BUFFERING): New conditional.
Kim F. Storm <storm@cua.dk>
parents:
53072
diff
changeset
|
4202 { |
1a5fe79d27f3
(ADAPTIVE_READ_BUFFERING): New conditional.
Kim F. Storm <storm@cua.dk>
parents:
53072
diff
changeset
|
4203 if (--process_output_delay_count < 0) |
1a5fe79d27f3
(ADAPTIVE_READ_BUFFERING): New conditional.
Kim F. Storm <storm@cua.dk>
parents:
53072
diff
changeset
|
4204 process_output_delay_count = 0; |
81826
077a1e6fd3f2
(struct Lisp_Process): Turn slots infd, outfd, kill_without_query, pty_flag,
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
80984
diff
changeset
|
4205 p->read_output_delay = 0; |
077a1e6fd3f2
(struct Lisp_Process): Turn slots infd, outfd, kill_without_query, pty_flag,
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
80984
diff
changeset
|
4206 p->read_output_skip = 0; |
53472
1a5fe79d27f3
(ADAPTIVE_READ_BUFFERING): New conditional.
Kim F. Storm <storm@cua.dk>
parents:
53072
diff
changeset
|
4207 } |
1a5fe79d27f3
(ADAPTIVE_READ_BUFFERING): New conditional.
Kim F. Storm <storm@cua.dk>
parents:
53072
diff
changeset
|
4208 #endif |
55444
976d03256b41
(Fwaiting_for_user_input_p, Fmake_network_process)
Juanma Barranquero <lekktu@gmail.com>
parents:
53835
diff
changeset
|
4209 |
5134
0a4e46e15304
(wait_reading_process_input):
Richard M. Stallman <rms@gnu.org>
parents:
4998
diff
changeset
|
4210 if (inchannel >= 0) |
578 | 4211 { |
4212 /* Beware SIGCHLD hereabouts. */ | |
4213 flush_pending_output (inchannel); | |
26088
b7aa6ac26872
Add support for large files, 64-bit Solaris, system locale codings.
Paul Eggert <eggert@twinsun.com>
parents:
26019
diff
changeset
|
4214 emacs_close (inchannel); |
5134
0a4e46e15304
(wait_reading_process_input):
Richard M. Stallman <rms@gnu.org>
parents:
4998
diff
changeset
|
4215 if (outchannel >= 0 && outchannel != inchannel) |
26088
b7aa6ac26872
Add support for large files, 64-bit Solaris, system locale codings.
Paul Eggert <eggert@twinsun.com>
parents:
26019
diff
changeset
|
4216 emacs_close (outchannel); |
578 | 4217 |
81826
077a1e6fd3f2
(struct Lisp_Process): Turn slots infd, outfd, kill_without_query, pty_flag,
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
80984
diff
changeset
|
4218 p->infd = -1; |
077a1e6fd3f2
(struct Lisp_Process): Turn slots infd, outfd, kill_without_query, pty_flag,
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
80984
diff
changeset
|
4219 p->outfd = -1; |
43968
7ec801358b7e
(Qlocal, QCname, QCbuffer, QChost, QCservice, QCfamily)
Kim F. Storm <storm@cua.dk>
parents:
43642
diff
changeset
|
4220 #ifdef DATAGRAM_SOCKETS |
7ec801358b7e
(Qlocal, QCname, QCbuffer, QChost, QCservice, QCfamily)
Kim F. Storm <storm@cua.dk>
parents:
43642
diff
changeset
|
4221 if (DATAGRAM_CHAN_P (inchannel)) |
7ec801358b7e
(Qlocal, QCname, QCbuffer, QChost, QCservice, QCfamily)
Kim F. Storm <storm@cua.dk>
parents:
43642
diff
changeset
|
4222 { |
7ec801358b7e
(Qlocal, QCname, QCbuffer, QChost, QCservice, QCfamily)
Kim F. Storm <storm@cua.dk>
parents:
43642
diff
changeset
|
4223 xfree (datagram_address[inchannel].sa); |
7ec801358b7e
(Qlocal, QCname, QCbuffer, QChost, QCservice, QCfamily)
Kim F. Storm <storm@cua.dk>
parents:
43642
diff
changeset
|
4224 datagram_address[inchannel].sa = 0; |
7ec801358b7e
(Qlocal, QCname, QCbuffer, QChost, QCservice, QCfamily)
Kim F. Storm <storm@cua.dk>
parents:
43642
diff
changeset
|
4225 datagram_address[inchannel].len = 0; |
7ec801358b7e
(Qlocal, QCname, QCbuffer, QChost, QCservice, QCfamily)
Kim F. Storm <storm@cua.dk>
parents:
43642
diff
changeset
|
4226 } |
7ec801358b7e
(Qlocal, QCname, QCbuffer, QChost, QCservice, QCfamily)
Kim F. Storm <storm@cua.dk>
parents:
43642
diff
changeset
|
4227 #endif |
578 | 4228 chan_process[inchannel] = Qnil; |
4229 FD_CLR (inchannel, &input_wait_mask); | |
9686
cd788aa8cb2a
Handle multiple keyboard input descriptors.
Richard M. Stallman <rms@gnu.org>
parents:
9334
diff
changeset
|
4230 FD_CLR (inchannel, &non_keyboard_wait_mask); |
57840
8abbe69dfdb2
(connect_wait_mask, num_pending_connects): Only
Kim F. Storm <storm@cua.dk>
parents:
57287
diff
changeset
|
4231 #ifdef NON_BLOCKING_CONNECT |
43598
f49377cf2e3c
(Qconnect, Qfailed): New variables.
Kim F. Storm <storm@cua.dk>
parents:
42600
diff
changeset
|
4232 if (FD_ISSET (inchannel, &connect_wait_mask)) |
f49377cf2e3c
(Qconnect, Qfailed): New variables.
Kim F. Storm <storm@cua.dk>
parents:
42600
diff
changeset
|
4233 { |
f49377cf2e3c
(Qconnect, Qfailed): New variables.
Kim F. Storm <storm@cua.dk>
parents:
42600
diff
changeset
|
4234 FD_CLR (inchannel, &connect_wait_mask); |
f49377cf2e3c
(Qconnect, Qfailed): New variables.
Kim F. Storm <storm@cua.dk>
parents:
42600
diff
changeset
|
4235 if (--num_pending_connects < 0) |
f49377cf2e3c
(Qconnect, Qfailed): New variables.
Kim F. Storm <storm@cua.dk>
parents:
42600
diff
changeset
|
4236 abort (); |
f49377cf2e3c
(Qconnect, Qfailed): New variables.
Kim F. Storm <storm@cua.dk>
parents:
42600
diff
changeset
|
4237 } |
57840
8abbe69dfdb2
(connect_wait_mask, num_pending_connects): Only
Kim F. Storm <storm@cua.dk>
parents:
57287
diff
changeset
|
4238 #endif |
7044
7032d07f5ad9
(max_process_desc): New variable.
Richard M. Stallman <rms@gnu.org>
parents:
7013
diff
changeset
|
4239 if (inchannel == max_process_desc) |
7032d07f5ad9
(max_process_desc): New variable.
Richard M. Stallman <rms@gnu.org>
parents:
7013
diff
changeset
|
4240 { |
7032d07f5ad9
(max_process_desc): New variable.
Richard M. Stallman <rms@gnu.org>
parents:
7013
diff
changeset
|
4241 int i; |
7032d07f5ad9
(max_process_desc): New variable.
Richard M. Stallman <rms@gnu.org>
parents:
7013
diff
changeset
|
4242 /* We just closed the highest-numbered process input descriptor, |
7032d07f5ad9
(max_process_desc): New variable.
Richard M. Stallman <rms@gnu.org>
parents:
7013
diff
changeset
|
4243 so recompute the highest-numbered one now. */ |
7032d07f5ad9
(max_process_desc): New variable.
Richard M. Stallman <rms@gnu.org>
parents:
7013
diff
changeset
|
4244 max_process_desc = 0; |
7032d07f5ad9
(max_process_desc): New variable.
Richard M. Stallman <rms@gnu.org>
parents:
7013
diff
changeset
|
4245 for (i = 0; i < MAXDESC; i++) |
7032d07f5ad9
(max_process_desc): New variable.
Richard M. Stallman <rms@gnu.org>
parents:
7013
diff
changeset
|
4246 if (!NILP (chan_process[i])) |
7032d07f5ad9
(max_process_desc): New variable.
Richard M. Stallman <rms@gnu.org>
parents:
7013
diff
changeset
|
4247 max_process_desc = i; |
7032d07f5ad9
(max_process_desc): New variable.
Richard M. Stallman <rms@gnu.org>
parents:
7013
diff
changeset
|
4248 } |
578 | 4249 } |
4250 } | |
4251 | |
4252 /* Close all descriptors currently in use for communication | |
4253 with subprocess. This is used in a newly-forked subprocess | |
4254 to get rid of irrelevant descriptors. */ | |
4255 | |
20382
dbad9367d232
(create_process, deactivate_process, close_process_descs):
Andreas Schwab <schwab@suse.de>
parents:
20225
diff
changeset
|
4256 void |
578 | 4257 close_process_descs () |
4258 { | |
9793
28267fcc61be
Use macros IS_ANY_SEP, IS_DIRECTORY_SEP,
Richard M. Stallman <rms@gnu.org>
parents:
9705
diff
changeset
|
4259 #ifndef WINDOWSNT |
578 | 4260 int i; |
4261 for (i = 0; i < MAXDESC; i++) | |
4262 { | |
4263 Lisp_Object process; | |
4264 process = chan_process[i]; | |
4265 if (!NILP (process)) | |
4266 { | |
81826
077a1e6fd3f2
(struct Lisp_Process): Turn slots infd, outfd, kill_without_query, pty_flag,
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
80984
diff
changeset
|
4267 int in = XPROCESS (process)->infd; |
077a1e6fd3f2
(struct Lisp_Process): Turn slots infd, outfd, kill_without_query, pty_flag,
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
80984
diff
changeset
|
4268 int out = XPROCESS (process)->outfd; |
5134
0a4e46e15304
(wait_reading_process_input):
Richard M. Stallman <rms@gnu.org>
parents:
4998
diff
changeset
|
4269 if (in >= 0) |
26088
b7aa6ac26872
Add support for large files, 64-bit Solaris, system locale codings.
Paul Eggert <eggert@twinsun.com>
parents:
26019
diff
changeset
|
4270 emacs_close (in); |
5134
0a4e46e15304
(wait_reading_process_input):
Richard M. Stallman <rms@gnu.org>
parents:
4998
diff
changeset
|
4271 if (out >= 0 && in != out) |
26088
b7aa6ac26872
Add support for large files, 64-bit Solaris, system locale codings.
Paul Eggert <eggert@twinsun.com>
parents:
26019
diff
changeset
|
4272 emacs_close (out); |
578 | 4273 } |
4274 } | |
9793
28267fcc61be
Use macros IS_ANY_SEP, IS_DIRECTORY_SEP,
Richard M. Stallman <rms@gnu.org>
parents:
9705
diff
changeset
|
4275 #endif |
578 | 4276 } |
4277 | |
4278 DEFUN ("accept-process-output", Faccept_process_output, Saccept_process_output, | |
56701
e327231e4361
(Faccept_process_output): Add arg JUST-THIS-ONE;
Kim F. Storm <storm@cua.dk>
parents:
56700
diff
changeset
|
4279 0, 4, 0, |
40103
6b389fb978bc
Change doc-string comments to `new style' [w/`doc:' keyword].
Pavel Janík <Pavel@Janik.cz>
parents:
39973
diff
changeset
|
4280 doc: /* Allow any pending output from subprocesses to be read by Emacs. |
6b389fb978bc
Change doc-string comments to `new style' [w/`doc:' keyword].
Pavel Janík <Pavel@Janik.cz>
parents:
39973
diff
changeset
|
4281 It is read into the process' buffers or given to their filter functions. |
6b389fb978bc
Change doc-string comments to `new style' [w/`doc:' keyword].
Pavel Janík <Pavel@Janik.cz>
parents:
39973
diff
changeset
|
4282 Non-nil arg PROCESS means do not return until some output has been received |
6b389fb978bc
Change doc-string comments to `new style' [w/`doc:' keyword].
Pavel Janík <Pavel@Janik.cz>
parents:
39973
diff
changeset
|
4283 from PROCESS. |
69634
5633a1931272
(Faccept_process_output): Fix to comply with lisp reference.
Kim F. Storm <storm@cua.dk>
parents:
69376
diff
changeset
|
4284 |
98456
a68b7a895cb6
(Faccept_process_output): Fix doc-string.
Martin Rudalics <rudalics@gmx.at>
parents:
98248
diff
changeset
|
4285 Non-nil second arg SECONDS and third arg MILLISEC are number of seconds |
a68b7a895cb6
(Faccept_process_output): Fix doc-string.
Martin Rudalics <rudalics@gmx.at>
parents:
98248
diff
changeset
|
4286 and milliseconds to wait; return after that much time whether or not |
a68b7a895cb6
(Faccept_process_output): Fix doc-string.
Martin Rudalics <rudalics@gmx.at>
parents:
98248
diff
changeset
|
4287 there is any subprocess output. If SECONDS is a floating point number, |
69634
5633a1931272
(Faccept_process_output): Fix to comply with lisp reference.
Kim F. Storm <storm@cua.dk>
parents:
69376
diff
changeset
|
4288 it specifies a fractional number of seconds to wait. |
95387
be7d86474ead
(Faccept_process_output): If `millisec' is non-nil, `seconds' default to 0.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
95216
diff
changeset
|
4289 The MILLISEC argument is obsolete and should be avoided. |
69634
5633a1931272
(Faccept_process_output): Fix to comply with lisp reference.
Kim F. Storm <storm@cua.dk>
parents:
69376
diff
changeset
|
4290 |
56701
e327231e4361
(Faccept_process_output): Add arg JUST-THIS-ONE;
Kim F. Storm <storm@cua.dk>
parents:
56700
diff
changeset
|
4291 If optional fourth arg JUST-THIS-ONE is non-nil, only accept output |
e327231e4361
(Faccept_process_output): Add arg JUST-THIS-ONE;
Kim F. Storm <storm@cua.dk>
parents:
56700
diff
changeset
|
4292 from PROCESS, suspending reading output from other processes. |
e327231e4361
(Faccept_process_output): Add arg JUST-THIS-ONE;
Kim F. Storm <storm@cua.dk>
parents:
56700
diff
changeset
|
4293 If JUST-THIS-ONE is an integer, don't run any timers either. |
78501 | 4294 Return non-nil if we received any output before the timeout expired. */) |
77654 | 4295 (process, seconds, millisec, just_this_one) |
4296 register Lisp_Object process, seconds, millisec, just_this_one; | |
578 | 4297 { |
69634
5633a1931272
(Faccept_process_output): Fix to comply with lisp reference.
Kim F. Storm <storm@cua.dk>
parents:
69376
diff
changeset
|
4298 int secs, usecs = 0; |
578 | 4299 |
24598
078d53377010
(Faccept_process_output): Check validity of PROCESS.
Richard M. Stallman <rms@gnu.org>
parents:
24352
diff
changeset
|
4300 if (! NILP (process)) |
40656
cdfd4d09b79a
Update usage of CHECK_ macros (remove unused second argument).
Pavel Janík <Pavel@Janik.cz>
parents:
40641
diff
changeset
|
4301 CHECK_PROCESS (process); |
56701
e327231e4361
(Faccept_process_output): Add arg JUST-THIS-ONE;
Kim F. Storm <storm@cua.dk>
parents:
56700
diff
changeset
|
4302 else |
e327231e4361
(Faccept_process_output): Add arg JUST-THIS-ONE;
Kim F. Storm <storm@cua.dk>
parents:
56700
diff
changeset
|
4303 just_this_one = Qnil; |
24598
078d53377010
(Faccept_process_output): Check validity of PROCESS.
Richard M. Stallman <rms@gnu.org>
parents:
24352
diff
changeset
|
4304 |
95387
be7d86474ead
(Faccept_process_output): If `millisec' is non-nil, `seconds' default to 0.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
95216
diff
changeset
|
4305 if (!NILP (millisec)) |
be7d86474ead
(Faccept_process_output): If `millisec' is non-nil, `seconds' default to 0.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
95216
diff
changeset
|
4306 { /* Obsolete calling convention using integers rather than floats. */ |
be7d86474ead
(Faccept_process_output): If `millisec' is non-nil, `seconds' default to 0.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
95216
diff
changeset
|
4307 CHECK_NUMBER (millisec); |
be7d86474ead
(Faccept_process_output): If `millisec' is non-nil, `seconds' default to 0.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
95216
diff
changeset
|
4308 if (NILP (seconds)) |
be7d86474ead
(Faccept_process_output): If `millisec' is non-nil, `seconds' default to 0.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
95216
diff
changeset
|
4309 seconds = make_float (XINT (millisec) / 1000.0); |
be7d86474ead
(Faccept_process_output): If `millisec' is non-nil, `seconds' default to 0.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
95216
diff
changeset
|
4310 else |
be7d86474ead
(Faccept_process_output): If `millisec' is non-nil, `seconds' default to 0.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
95216
diff
changeset
|
4311 { |
be7d86474ead
(Faccept_process_output): If `millisec' is non-nil, `seconds' default to 0.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
95216
diff
changeset
|
4312 CHECK_NUMBER (seconds); |
be7d86474ead
(Faccept_process_output): If `millisec' is non-nil, `seconds' default to 0.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
95216
diff
changeset
|
4313 seconds = make_float (XINT (millisec) / 1000.0 + XINT (seconds)); |
be7d86474ead
(Faccept_process_output): If `millisec' is non-nil, `seconds' default to 0.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
95216
diff
changeset
|
4314 } |
be7d86474ead
(Faccept_process_output): If `millisec' is non-nil, `seconds' default to 0.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
95216
diff
changeset
|
4315 } |
be7d86474ead
(Faccept_process_output): If `millisec' is non-nil, `seconds' default to 0.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
95216
diff
changeset
|
4316 |
69634
5633a1931272
(Faccept_process_output): Fix to comply with lisp reference.
Kim F. Storm <storm@cua.dk>
parents:
69376
diff
changeset
|
4317 if (!NILP (seconds)) |
578 | 4318 { |
69634
5633a1931272
(Faccept_process_output): Fix to comply with lisp reference.
Kim F. Storm <storm@cua.dk>
parents:
69376
diff
changeset
|
4319 if (INTEGERP (seconds)) |
5633a1931272
(Faccept_process_output): Fix to comply with lisp reference.
Kim F. Storm <storm@cua.dk>
parents:
69376
diff
changeset
|
4320 secs = XINT (seconds); |
5633a1931272
(Faccept_process_output): Fix to comply with lisp reference.
Kim F. Storm <storm@cua.dk>
parents:
69376
diff
changeset
|
4321 else if (FLOATP (seconds)) |
5633a1931272
(Faccept_process_output): Fix to comply with lisp reference.
Kim F. Storm <storm@cua.dk>
parents:
69376
diff
changeset
|
4322 { |
5633a1931272
(Faccept_process_output): Fix to comply with lisp reference.
Kim F. Storm <storm@cua.dk>
parents:
69376
diff
changeset
|
4323 double timeout = XFLOAT_DATA (seconds); |
5633a1931272
(Faccept_process_output): Fix to comply with lisp reference.
Kim F. Storm <storm@cua.dk>
parents:
69376
diff
changeset
|
4324 secs = (int) timeout; |
5633a1931272
(Faccept_process_output): Fix to comply with lisp reference.
Kim F. Storm <storm@cua.dk>
parents:
69376
diff
changeset
|
4325 usecs = (int) ((timeout - (double) secs) * 1000000); |
5633a1931272
(Faccept_process_output): Fix to comply with lisp reference.
Kim F. Storm <storm@cua.dk>
parents:
69376
diff
changeset
|
4326 } |
5633a1931272
(Faccept_process_output): Fix to comply with lisp reference.
Kim F. Storm <storm@cua.dk>
parents:
69376
diff
changeset
|
4327 else |
5633a1931272
(Faccept_process_output): Fix to comply with lisp reference.
Kim F. Storm <storm@cua.dk>
parents:
69376
diff
changeset
|
4328 wrong_type_argument (Qnumberp, seconds); |
5633a1931272
(Faccept_process_output): Fix to comply with lisp reference.
Kim F. Storm <storm@cua.dk>
parents:
69376
diff
changeset
|
4329 |
5633a1931272
(Faccept_process_output): Fix to comply with lisp reference.
Kim F. Storm <storm@cua.dk>
parents:
69376
diff
changeset
|
4330 if (secs < 0 || (secs == 0 && usecs == 0)) |
5633a1931272
(Faccept_process_output): Fix to comply with lisp reference.
Kim F. Storm <storm@cua.dk>
parents:
69376
diff
changeset
|
4331 secs = -1, usecs = 0; |
578 | 4332 } |
1180
9bf82484415d
(Faccept_process_output): Initialize useconds.
Richard M. Stallman <rms@gnu.org>
parents:
1047
diff
changeset
|
4333 else |
69634
5633a1931272
(Faccept_process_output): Fix to comply with lisp reference.
Kim F. Storm <storm@cua.dk>
parents:
69376
diff
changeset
|
4334 secs = NILP (process) ? -1 : 0; |
578 | 4335 |
4336 return | |
69634
5633a1931272
(Faccept_process_output): Fix to comply with lisp reference.
Kim F. Storm <storm@cua.dk>
parents:
69376
diff
changeset
|
4337 (wait_reading_process_output (secs, usecs, 0, 0, |
56728
1686b397ef16
(wait_reading_process_output): Rename from
Kim F. Storm <storm@cua.dk>
parents:
56716
diff
changeset
|
4338 Qnil, |
1686b397ef16
(wait_reading_process_output): Rename from
Kim F. Storm <storm@cua.dk>
parents:
56716
diff
changeset
|
4339 !NILP (process) ? XPROCESS (process) : NULL, |
1686b397ef16
(wait_reading_process_output): Rename from
Kim F. Storm <storm@cua.dk>
parents:
56716
diff
changeset
|
4340 NILP (just_this_one) ? 0 : |
1686b397ef16
(wait_reading_process_output): Rename from
Kim F. Storm <storm@cua.dk>
parents:
56716
diff
changeset
|
4341 !INTEGERP (just_this_one) ? 1 : -1) |
578 | 4342 ? Qt : Qnil); |
4343 } | |
4344 | |
43968
7ec801358b7e
(Qlocal, QCname, QCbuffer, QChost, QCservice, QCfamily)
Kim F. Storm <storm@cua.dk>
parents:
43642
diff
changeset
|
4345 /* Accept a connection for server process SERVER on CHANNEL. */ |
7ec801358b7e
(Qlocal, QCname, QCbuffer, QChost, QCservice, QCfamily)
Kim F. Storm <storm@cua.dk>
parents:
43642
diff
changeset
|
4346 |
7ec801358b7e
(Qlocal, QCname, QCbuffer, QChost, QCservice, QCfamily)
Kim F. Storm <storm@cua.dk>
parents:
43642
diff
changeset
|
4347 static int connect_counter = 0; |
7ec801358b7e
(Qlocal, QCname, QCbuffer, QChost, QCservice, QCfamily)
Kim F. Storm <storm@cua.dk>
parents:
43642
diff
changeset
|
4348 |
7ec801358b7e
(Qlocal, QCname, QCbuffer, QChost, QCservice, QCfamily)
Kim F. Storm <storm@cua.dk>
parents:
43642
diff
changeset
|
4349 static void |
7ec801358b7e
(Qlocal, QCname, QCbuffer, QChost, QCservice, QCfamily)
Kim F. Storm <storm@cua.dk>
parents:
43642
diff
changeset
|
4350 server_accept_connection (server, channel) |
7ec801358b7e
(Qlocal, QCname, QCbuffer, QChost, QCservice, QCfamily)
Kim F. Storm <storm@cua.dk>
parents:
43642
diff
changeset
|
4351 Lisp_Object server; |
7ec801358b7e
(Qlocal, QCname, QCbuffer, QChost, QCservice, QCfamily)
Kim F. Storm <storm@cua.dk>
parents:
43642
diff
changeset
|
4352 int channel; |
7ec801358b7e
(Qlocal, QCname, QCbuffer, QChost, QCservice, QCfamily)
Kim F. Storm <storm@cua.dk>
parents:
43642
diff
changeset
|
4353 { |
7ec801358b7e
(Qlocal, QCname, QCbuffer, QChost, QCservice, QCfamily)
Kim F. Storm <storm@cua.dk>
parents:
43642
diff
changeset
|
4354 Lisp_Object proc, caller, name, buffer; |
7ec801358b7e
(Qlocal, QCname, QCbuffer, QChost, QCservice, QCfamily)
Kim F. Storm <storm@cua.dk>
parents:
43642
diff
changeset
|
4355 Lisp_Object contact, host, service; |
7ec801358b7e
(Qlocal, QCname, QCbuffer, QChost, QCservice, QCfamily)
Kim F. Storm <storm@cua.dk>
parents:
43642
diff
changeset
|
4356 struct Lisp_Process *ps= XPROCESS (server); |
7ec801358b7e
(Qlocal, QCname, QCbuffer, QChost, QCservice, QCfamily)
Kim F. Storm <storm@cua.dk>
parents:
43642
diff
changeset
|
4357 struct Lisp_Process *p; |
7ec801358b7e
(Qlocal, QCname, QCbuffer, QChost, QCservice, QCfamily)
Kim F. Storm <storm@cua.dk>
parents:
43642
diff
changeset
|
4358 int s; |
7ec801358b7e
(Qlocal, QCname, QCbuffer, QChost, QCservice, QCfamily)
Kim F. Storm <storm@cua.dk>
parents:
43642
diff
changeset
|
4359 union u_sockaddr { |
7ec801358b7e
(Qlocal, QCname, QCbuffer, QChost, QCservice, QCfamily)
Kim F. Storm <storm@cua.dk>
parents:
43642
diff
changeset
|
4360 struct sockaddr sa; |
7ec801358b7e
(Qlocal, QCname, QCbuffer, QChost, QCservice, QCfamily)
Kim F. Storm <storm@cua.dk>
parents:
43642
diff
changeset
|
4361 struct sockaddr_in in; |
68008 | 4362 #ifdef AF_INET6 |
4363 struct sockaddr_in6 in6; | |
4364 #endif | |
43968
7ec801358b7e
(Qlocal, QCname, QCbuffer, QChost, QCservice, QCfamily)
Kim F. Storm <storm@cua.dk>
parents:
43642
diff
changeset
|
4365 #ifdef HAVE_LOCAL_SOCKETS |
7ec801358b7e
(Qlocal, QCname, QCbuffer, QChost, QCservice, QCfamily)
Kim F. Storm <storm@cua.dk>
parents:
43642
diff
changeset
|
4366 struct sockaddr_un un; |
7ec801358b7e
(Qlocal, QCname, QCbuffer, QChost, QCservice, QCfamily)
Kim F. Storm <storm@cua.dk>
parents:
43642
diff
changeset
|
4367 #endif |
7ec801358b7e
(Qlocal, QCname, QCbuffer, QChost, QCservice, QCfamily)
Kim F. Storm <storm@cua.dk>
parents:
43642
diff
changeset
|
4368 } saddr; |
7ec801358b7e
(Qlocal, QCname, QCbuffer, QChost, QCservice, QCfamily)
Kim F. Storm <storm@cua.dk>
parents:
43642
diff
changeset
|
4369 int len = sizeof saddr; |
7ec801358b7e
(Qlocal, QCname, QCbuffer, QChost, QCservice, QCfamily)
Kim F. Storm <storm@cua.dk>
parents:
43642
diff
changeset
|
4370 |
7ec801358b7e
(Qlocal, QCname, QCbuffer, QChost, QCservice, QCfamily)
Kim F. Storm <storm@cua.dk>
parents:
43642
diff
changeset
|
4371 s = accept (channel, &saddr.sa, &len); |
7ec801358b7e
(Qlocal, QCname, QCbuffer, QChost, QCservice, QCfamily)
Kim F. Storm <storm@cua.dk>
parents:
43642
diff
changeset
|
4372 |
7ec801358b7e
(Qlocal, QCname, QCbuffer, QChost, QCservice, QCfamily)
Kim F. Storm <storm@cua.dk>
parents:
43642
diff
changeset
|
4373 if (s < 0) |
7ec801358b7e
(Qlocal, QCname, QCbuffer, QChost, QCservice, QCfamily)
Kim F. Storm <storm@cua.dk>
parents:
43642
diff
changeset
|
4374 { |
7ec801358b7e
(Qlocal, QCname, QCbuffer, QChost, QCservice, QCfamily)
Kim F. Storm <storm@cua.dk>
parents:
43642
diff
changeset
|
4375 int code = errno; |
7ec801358b7e
(Qlocal, QCname, QCbuffer, QChost, QCservice, QCfamily)
Kim F. Storm <storm@cua.dk>
parents:
43642
diff
changeset
|
4376 |
7ec801358b7e
(Qlocal, QCname, QCbuffer, QChost, QCservice, QCfamily)
Kim F. Storm <storm@cua.dk>
parents:
43642
diff
changeset
|
4377 if (code == EAGAIN) |
7ec801358b7e
(Qlocal, QCname, QCbuffer, QChost, QCservice, QCfamily)
Kim F. Storm <storm@cua.dk>
parents:
43642
diff
changeset
|
4378 return; |
7ec801358b7e
(Qlocal, QCname, QCbuffer, QChost, QCservice, QCfamily)
Kim F. Storm <storm@cua.dk>
parents:
43642
diff
changeset
|
4379 #ifdef EWOULDBLOCK |
7ec801358b7e
(Qlocal, QCname, QCbuffer, QChost, QCservice, QCfamily)
Kim F. Storm <storm@cua.dk>
parents:
43642
diff
changeset
|
4380 if (code == EWOULDBLOCK) |
7ec801358b7e
(Qlocal, QCname, QCbuffer, QChost, QCservice, QCfamily)
Kim F. Storm <storm@cua.dk>
parents:
43642
diff
changeset
|
4381 return; |
7ec801358b7e
(Qlocal, QCname, QCbuffer, QChost, QCservice, QCfamily)
Kim F. Storm <storm@cua.dk>
parents:
43642
diff
changeset
|
4382 #endif |
7ec801358b7e
(Qlocal, QCname, QCbuffer, QChost, QCservice, QCfamily)
Kim F. Storm <storm@cua.dk>
parents:
43642
diff
changeset
|
4383 |
7ec801358b7e
(Qlocal, QCname, QCbuffer, QChost, QCservice, QCfamily)
Kim F. Storm <storm@cua.dk>
parents:
43642
diff
changeset
|
4384 if (!NILP (ps->log)) |
7ec801358b7e
(Qlocal, QCname, QCbuffer, QChost, QCservice, QCfamily)
Kim F. Storm <storm@cua.dk>
parents:
43642
diff
changeset
|
4385 call3 (ps->log, server, Qnil, |
7ec801358b7e
(Qlocal, QCname, QCbuffer, QChost, QCservice, QCfamily)
Kim F. Storm <storm@cua.dk>
parents:
43642
diff
changeset
|
4386 concat3 (build_string ("accept failed with code"), |
7ec801358b7e
(Qlocal, QCname, QCbuffer, QChost, QCservice, QCfamily)
Kim F. Storm <storm@cua.dk>
parents:
43642
diff
changeset
|
4387 Fnumber_to_string (make_number (code)), |
7ec801358b7e
(Qlocal, QCname, QCbuffer, QChost, QCservice, QCfamily)
Kim F. Storm <storm@cua.dk>
parents:
43642
diff
changeset
|
4388 build_string ("\n"))); |
7ec801358b7e
(Qlocal, QCname, QCbuffer, QChost, QCservice, QCfamily)
Kim F. Storm <storm@cua.dk>
parents:
43642
diff
changeset
|
4389 return; |
7ec801358b7e
(Qlocal, QCname, QCbuffer, QChost, QCservice, QCfamily)
Kim F. Storm <storm@cua.dk>
parents:
43642
diff
changeset
|
4390 } |
7ec801358b7e
(Qlocal, QCname, QCbuffer, QChost, QCservice, QCfamily)
Kim F. Storm <storm@cua.dk>
parents:
43642
diff
changeset
|
4391 |
7ec801358b7e
(Qlocal, QCname, QCbuffer, QChost, QCservice, QCfamily)
Kim F. Storm <storm@cua.dk>
parents:
43642
diff
changeset
|
4392 connect_counter++; |
7ec801358b7e
(Qlocal, QCname, QCbuffer, QChost, QCservice, QCfamily)
Kim F. Storm <storm@cua.dk>
parents:
43642
diff
changeset
|
4393 |
7ec801358b7e
(Qlocal, QCname, QCbuffer, QChost, QCservice, QCfamily)
Kim F. Storm <storm@cua.dk>
parents:
43642
diff
changeset
|
4394 /* Setup a new process to handle the connection. */ |
7ec801358b7e
(Qlocal, QCname, QCbuffer, QChost, QCservice, QCfamily)
Kim F. Storm <storm@cua.dk>
parents:
43642
diff
changeset
|
4395 |
7ec801358b7e
(Qlocal, QCname, QCbuffer, QChost, QCservice, QCfamily)
Kim F. Storm <storm@cua.dk>
parents:
43642
diff
changeset
|
4396 /* Generate a unique identification of the caller, and build contact |
7ec801358b7e
(Qlocal, QCname, QCbuffer, QChost, QCservice, QCfamily)
Kim F. Storm <storm@cua.dk>
parents:
43642
diff
changeset
|
4397 information for this process. */ |
7ec801358b7e
(Qlocal, QCname, QCbuffer, QChost, QCservice, QCfamily)
Kim F. Storm <storm@cua.dk>
parents:
43642
diff
changeset
|
4398 host = Qt; |
7ec801358b7e
(Qlocal, QCname, QCbuffer, QChost, QCservice, QCfamily)
Kim F. Storm <storm@cua.dk>
parents:
43642
diff
changeset
|
4399 service = Qnil; |
7ec801358b7e
(Qlocal, QCname, QCbuffer, QChost, QCservice, QCfamily)
Kim F. Storm <storm@cua.dk>
parents:
43642
diff
changeset
|
4400 switch (saddr.sa.sa_family) |
7ec801358b7e
(Qlocal, QCname, QCbuffer, QChost, QCservice, QCfamily)
Kim F. Storm <storm@cua.dk>
parents:
43642
diff
changeset
|
4401 { |
7ec801358b7e
(Qlocal, QCname, QCbuffer, QChost, QCservice, QCfamily)
Kim F. Storm <storm@cua.dk>
parents:
43642
diff
changeset
|
4402 case AF_INET: |
7ec801358b7e
(Qlocal, QCname, QCbuffer, QChost, QCservice, QCfamily)
Kim F. Storm <storm@cua.dk>
parents:
43642
diff
changeset
|
4403 { |
7ec801358b7e
(Qlocal, QCname, QCbuffer, QChost, QCservice, QCfamily)
Kim F. Storm <storm@cua.dk>
parents:
43642
diff
changeset
|
4404 Lisp_Object args[5]; |
7ec801358b7e
(Qlocal, QCname, QCbuffer, QChost, QCservice, QCfamily)
Kim F. Storm <storm@cua.dk>
parents:
43642
diff
changeset
|
4405 unsigned char *ip = (unsigned char *)&saddr.in.sin_addr.s_addr; |
7ec801358b7e
(Qlocal, QCname, QCbuffer, QChost, QCservice, QCfamily)
Kim F. Storm <storm@cua.dk>
parents:
43642
diff
changeset
|
4406 args[0] = build_string ("%d.%d.%d.%d"); |
7ec801358b7e
(Qlocal, QCname, QCbuffer, QChost, QCservice, QCfamily)
Kim F. Storm <storm@cua.dk>
parents:
43642
diff
changeset
|
4407 args[1] = make_number (*ip++); |
7ec801358b7e
(Qlocal, QCname, QCbuffer, QChost, QCservice, QCfamily)
Kim F. Storm <storm@cua.dk>
parents:
43642
diff
changeset
|
4408 args[2] = make_number (*ip++); |
7ec801358b7e
(Qlocal, QCname, QCbuffer, QChost, QCservice, QCfamily)
Kim F. Storm <storm@cua.dk>
parents:
43642
diff
changeset
|
4409 args[3] = make_number (*ip++); |
7ec801358b7e
(Qlocal, QCname, QCbuffer, QChost, QCservice, QCfamily)
Kim F. Storm <storm@cua.dk>
parents:
43642
diff
changeset
|
4410 args[4] = make_number (*ip++); |
7ec801358b7e
(Qlocal, QCname, QCbuffer, QChost, QCservice, QCfamily)
Kim F. Storm <storm@cua.dk>
parents:
43642
diff
changeset
|
4411 host = Fformat (5, args); |
7ec801358b7e
(Qlocal, QCname, QCbuffer, QChost, QCservice, QCfamily)
Kim F. Storm <storm@cua.dk>
parents:
43642
diff
changeset
|
4412 service = make_number (ntohs (saddr.in.sin_port)); |
7ec801358b7e
(Qlocal, QCname, QCbuffer, QChost, QCservice, QCfamily)
Kim F. Storm <storm@cua.dk>
parents:
43642
diff
changeset
|
4413 |
7ec801358b7e
(Qlocal, QCname, QCbuffer, QChost, QCservice, QCfamily)
Kim F. Storm <storm@cua.dk>
parents:
43642
diff
changeset
|
4414 args[0] = build_string (" <%s:%d>"); |
7ec801358b7e
(Qlocal, QCname, QCbuffer, QChost, QCservice, QCfamily)
Kim F. Storm <storm@cua.dk>
parents:
43642
diff
changeset
|
4415 args[1] = host; |
7ec801358b7e
(Qlocal, QCname, QCbuffer, QChost, QCservice, QCfamily)
Kim F. Storm <storm@cua.dk>
parents:
43642
diff
changeset
|
4416 args[2] = service; |
7ec801358b7e
(Qlocal, QCname, QCbuffer, QChost, QCservice, QCfamily)
Kim F. Storm <storm@cua.dk>
parents:
43642
diff
changeset
|
4417 caller = Fformat (3, args); |
7ec801358b7e
(Qlocal, QCname, QCbuffer, QChost, QCservice, QCfamily)
Kim F. Storm <storm@cua.dk>
parents:
43642
diff
changeset
|
4418 } |
7ec801358b7e
(Qlocal, QCname, QCbuffer, QChost, QCservice, QCfamily)
Kim F. Storm <storm@cua.dk>
parents:
43642
diff
changeset
|
4419 break; |
7ec801358b7e
(Qlocal, QCname, QCbuffer, QChost, QCservice, QCfamily)
Kim F. Storm <storm@cua.dk>
parents:
43642
diff
changeset
|
4420 |
68008 | 4421 #ifdef AF_INET6 |
4422 case AF_INET6: | |
4423 { | |
4424 Lisp_Object args[9]; | |
4425 uint16_t *ip6 = (uint16_t *)&saddr.in6.sin6_addr; | |
4426 int i; | |
4427 args[0] = build_string ("%x:%x:%x:%x:%x:%x:%x:%x"); | |
4428 for (i = 0; i < 8; i++) | |
4429 args[i+1] = make_number (ntohs(ip6[i])); | |
4430 host = Fformat (9, args); | |
4431 service = make_number (ntohs (saddr.in.sin_port)); | |
4432 | |
4433 args[0] = build_string (" <[%s]:%d>"); | |
4434 args[1] = host; | |
4435 args[2] = service; | |
4436 caller = Fformat (3, args); | |
4437 } | |
4438 break; | |
4439 #endif | |
4440 | |
43968
7ec801358b7e
(Qlocal, QCname, QCbuffer, QChost, QCservice, QCfamily)
Kim F. Storm <storm@cua.dk>
parents:
43642
diff
changeset
|
4441 #ifdef HAVE_LOCAL_SOCKETS |
7ec801358b7e
(Qlocal, QCname, QCbuffer, QChost, QCservice, QCfamily)
Kim F. Storm <storm@cua.dk>
parents:
43642
diff
changeset
|
4442 case AF_LOCAL: |
7ec801358b7e
(Qlocal, QCname, QCbuffer, QChost, QCservice, QCfamily)
Kim F. Storm <storm@cua.dk>
parents:
43642
diff
changeset
|
4443 #endif |
7ec801358b7e
(Qlocal, QCname, QCbuffer, QChost, QCservice, QCfamily)
Kim F. Storm <storm@cua.dk>
parents:
43642
diff
changeset
|
4444 default: |
7ec801358b7e
(Qlocal, QCname, QCbuffer, QChost, QCservice, QCfamily)
Kim F. Storm <storm@cua.dk>
parents:
43642
diff
changeset
|
4445 caller = Fnumber_to_string (make_number (connect_counter)); |
93324
41f9d37301a2
(server_accept_connection): Simplify naming.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
93201
diff
changeset
|
4446 caller = concat3 (build_string (" <"), caller, build_string (">")); |
43968
7ec801358b7e
(Qlocal, QCname, QCbuffer, QChost, QCservice, QCfamily)
Kim F. Storm <storm@cua.dk>
parents:
43642
diff
changeset
|
4447 break; |
7ec801358b7e
(Qlocal, QCname, QCbuffer, QChost, QCservice, QCfamily)
Kim F. Storm <storm@cua.dk>
parents:
43642
diff
changeset
|
4448 } |
7ec801358b7e
(Qlocal, QCname, QCbuffer, QChost, QCservice, QCfamily)
Kim F. Storm <storm@cua.dk>
parents:
43642
diff
changeset
|
4449 |
7ec801358b7e
(Qlocal, QCname, QCbuffer, QChost, QCservice, QCfamily)
Kim F. Storm <storm@cua.dk>
parents:
43642
diff
changeset
|
4450 /* Create a new buffer name for this process if it doesn't have a |
7ec801358b7e
(Qlocal, QCname, QCbuffer, QChost, QCservice, QCfamily)
Kim F. Storm <storm@cua.dk>
parents:
43642
diff
changeset
|
4451 filter. The new buffer name is based on the buffer name or |
7ec801358b7e
(Qlocal, QCname, QCbuffer, QChost, QCservice, QCfamily)
Kim F. Storm <storm@cua.dk>
parents:
43642
diff
changeset
|
4452 process name of the server process concatenated with the caller |
7ec801358b7e
(Qlocal, QCname, QCbuffer, QChost, QCservice, QCfamily)
Kim F. Storm <storm@cua.dk>
parents:
43642
diff
changeset
|
4453 identification. */ |
7ec801358b7e
(Qlocal, QCname, QCbuffer, QChost, QCservice, QCfamily)
Kim F. Storm <storm@cua.dk>
parents:
43642
diff
changeset
|
4454 |
7ec801358b7e
(Qlocal, QCname, QCbuffer, QChost, QCservice, QCfamily)
Kim F. Storm <storm@cua.dk>
parents:
43642
diff
changeset
|
4455 if (!NILP (ps->filter) && !EQ (ps->filter, Qt)) |
7ec801358b7e
(Qlocal, QCname, QCbuffer, QChost, QCservice, QCfamily)
Kim F. Storm <storm@cua.dk>
parents:
43642
diff
changeset
|
4456 buffer = Qnil; |
7ec801358b7e
(Qlocal, QCname, QCbuffer, QChost, QCservice, QCfamily)
Kim F. Storm <storm@cua.dk>
parents:
43642
diff
changeset
|
4457 else |
7ec801358b7e
(Qlocal, QCname, QCbuffer, QChost, QCservice, QCfamily)
Kim F. Storm <storm@cua.dk>
parents:
43642
diff
changeset
|
4458 { |
7ec801358b7e
(Qlocal, QCname, QCbuffer, QChost, QCservice, QCfamily)
Kim F. Storm <storm@cua.dk>
parents:
43642
diff
changeset
|
4459 buffer = ps->buffer; |
7ec801358b7e
(Qlocal, QCname, QCbuffer, QChost, QCservice, QCfamily)
Kim F. Storm <storm@cua.dk>
parents:
43642
diff
changeset
|
4460 if (!NILP (buffer)) |
7ec801358b7e
(Qlocal, QCname, QCbuffer, QChost, QCservice, QCfamily)
Kim F. Storm <storm@cua.dk>
parents:
43642
diff
changeset
|
4461 buffer = Fbuffer_name (buffer); |
7ec801358b7e
(Qlocal, QCname, QCbuffer, QChost, QCservice, QCfamily)
Kim F. Storm <storm@cua.dk>
parents:
43642
diff
changeset
|
4462 else |
7ec801358b7e
(Qlocal, QCname, QCbuffer, QChost, QCservice, QCfamily)
Kim F. Storm <storm@cua.dk>
parents:
43642
diff
changeset
|
4463 buffer = ps->name; |
7ec801358b7e
(Qlocal, QCname, QCbuffer, QChost, QCservice, QCfamily)
Kim F. Storm <storm@cua.dk>
parents:
43642
diff
changeset
|
4464 if (!NILP (buffer)) |
7ec801358b7e
(Qlocal, QCname, QCbuffer, QChost, QCservice, QCfamily)
Kim F. Storm <storm@cua.dk>
parents:
43642
diff
changeset
|
4465 { |
7ec801358b7e
(Qlocal, QCname, QCbuffer, QChost, QCservice, QCfamily)
Kim F. Storm <storm@cua.dk>
parents:
43642
diff
changeset
|
4466 buffer = concat2 (buffer, caller); |
7ec801358b7e
(Qlocal, QCname, QCbuffer, QChost, QCservice, QCfamily)
Kim F. Storm <storm@cua.dk>
parents:
43642
diff
changeset
|
4467 buffer = Fget_buffer_create (buffer); |
7ec801358b7e
(Qlocal, QCname, QCbuffer, QChost, QCservice, QCfamily)
Kim F. Storm <storm@cua.dk>
parents:
43642
diff
changeset
|
4468 } |
7ec801358b7e
(Qlocal, QCname, QCbuffer, QChost, QCservice, QCfamily)
Kim F. Storm <storm@cua.dk>
parents:
43642
diff
changeset
|
4469 } |
7ec801358b7e
(Qlocal, QCname, QCbuffer, QChost, QCservice, QCfamily)
Kim F. Storm <storm@cua.dk>
parents:
43642
diff
changeset
|
4470 |
7ec801358b7e
(Qlocal, QCname, QCbuffer, QChost, QCservice, QCfamily)
Kim F. Storm <storm@cua.dk>
parents:
43642
diff
changeset
|
4471 /* Generate a unique name for the new server process. Combine the |
7ec801358b7e
(Qlocal, QCname, QCbuffer, QChost, QCservice, QCfamily)
Kim F. Storm <storm@cua.dk>
parents:
43642
diff
changeset
|
4472 server process name with the caller identification. */ |
7ec801358b7e
(Qlocal, QCname, QCbuffer, QChost, QCservice, QCfamily)
Kim F. Storm <storm@cua.dk>
parents:
43642
diff
changeset
|
4473 |
7ec801358b7e
(Qlocal, QCname, QCbuffer, QChost, QCservice, QCfamily)
Kim F. Storm <storm@cua.dk>
parents:
43642
diff
changeset
|
4474 name = concat2 (ps->name, caller); |
7ec801358b7e
(Qlocal, QCname, QCbuffer, QChost, QCservice, QCfamily)
Kim F. Storm <storm@cua.dk>
parents:
43642
diff
changeset
|
4475 proc = make_process (name); |
7ec801358b7e
(Qlocal, QCname, QCbuffer, QChost, QCservice, QCfamily)
Kim F. Storm <storm@cua.dk>
parents:
43642
diff
changeset
|
4476 |
7ec801358b7e
(Qlocal, QCname, QCbuffer, QChost, QCservice, QCfamily)
Kim F. Storm <storm@cua.dk>
parents:
43642
diff
changeset
|
4477 chan_process[s] = proc; |
7ec801358b7e
(Qlocal, QCname, QCbuffer, QChost, QCservice, QCfamily)
Kim F. Storm <storm@cua.dk>
parents:
43642
diff
changeset
|
4478 |
7ec801358b7e
(Qlocal, QCname, QCbuffer, QChost, QCservice, QCfamily)
Kim F. Storm <storm@cua.dk>
parents:
43642
diff
changeset
|
4479 #ifdef O_NONBLOCK |
7ec801358b7e
(Qlocal, QCname, QCbuffer, QChost, QCservice, QCfamily)
Kim F. Storm <storm@cua.dk>
parents:
43642
diff
changeset
|
4480 fcntl (s, F_SETFL, O_NONBLOCK); |
7ec801358b7e
(Qlocal, QCname, QCbuffer, QChost, QCservice, QCfamily)
Kim F. Storm <storm@cua.dk>
parents:
43642
diff
changeset
|
4481 #else |
7ec801358b7e
(Qlocal, QCname, QCbuffer, QChost, QCservice, QCfamily)
Kim F. Storm <storm@cua.dk>
parents:
43642
diff
changeset
|
4482 #ifdef O_NDELAY |
7ec801358b7e
(Qlocal, QCname, QCbuffer, QChost, QCservice, QCfamily)
Kim F. Storm <storm@cua.dk>
parents:
43642
diff
changeset
|
4483 fcntl (s, F_SETFL, O_NDELAY); |
7ec801358b7e
(Qlocal, QCname, QCbuffer, QChost, QCservice, QCfamily)
Kim F. Storm <storm@cua.dk>
parents:
43642
diff
changeset
|
4484 #endif |
7ec801358b7e
(Qlocal, QCname, QCbuffer, QChost, QCservice, QCfamily)
Kim F. Storm <storm@cua.dk>
parents:
43642
diff
changeset
|
4485 #endif |
7ec801358b7e
(Qlocal, QCname, QCbuffer, QChost, QCservice, QCfamily)
Kim F. Storm <storm@cua.dk>
parents:
43642
diff
changeset
|
4486 |
7ec801358b7e
(Qlocal, QCname, QCbuffer, QChost, QCservice, QCfamily)
Kim F. Storm <storm@cua.dk>
parents:
43642
diff
changeset
|
4487 p = XPROCESS (proc); |
7ec801358b7e
(Qlocal, QCname, QCbuffer, QChost, QCservice, QCfamily)
Kim F. Storm <storm@cua.dk>
parents:
43642
diff
changeset
|
4488 |
7ec801358b7e
(Qlocal, QCname, QCbuffer, QChost, QCservice, QCfamily)
Kim F. Storm <storm@cua.dk>
parents:
43642
diff
changeset
|
4489 /* Build new contact information for this setup. */ |
7ec801358b7e
(Qlocal, QCname, QCbuffer, QChost, QCservice, QCfamily)
Kim F. Storm <storm@cua.dk>
parents:
43642
diff
changeset
|
4490 contact = Fcopy_sequence (ps->childp); |
7ec801358b7e
(Qlocal, QCname, QCbuffer, QChost, QCservice, QCfamily)
Kim F. Storm <storm@cua.dk>
parents:
43642
diff
changeset
|
4491 contact = Fplist_put (contact, QCserver, Qnil); |
7ec801358b7e
(Qlocal, QCname, QCbuffer, QChost, QCservice, QCfamily)
Kim F. Storm <storm@cua.dk>
parents:
43642
diff
changeset
|
4492 contact = Fplist_put (contact, QChost, host); |
7ec801358b7e
(Qlocal, QCname, QCbuffer, QChost, QCservice, QCfamily)
Kim F. Storm <storm@cua.dk>
parents:
43642
diff
changeset
|
4493 if (!NILP (service)) |
7ec801358b7e
(Qlocal, QCname, QCbuffer, QChost, QCservice, QCfamily)
Kim F. Storm <storm@cua.dk>
parents:
43642
diff
changeset
|
4494 contact = Fplist_put (contact, QCservice, service); |
49600
23a1cea22d13
Trailing whitespace deleted.
Juanma Barranquero <lekktu@gmail.com>
parents:
49281
diff
changeset
|
4495 contact = Fplist_put (contact, QCremote, |
43968
7ec801358b7e
(Qlocal, QCname, QCbuffer, QChost, QCservice, QCfamily)
Kim F. Storm <storm@cua.dk>
parents:
43642
diff
changeset
|
4496 conv_sockaddr_to_lisp (&saddr.sa, len)); |
7ec801358b7e
(Qlocal, QCname, QCbuffer, QChost, QCservice, QCfamily)
Kim F. Storm <storm@cua.dk>
parents:
43642
diff
changeset
|
4497 #ifdef HAVE_GETSOCKNAME |
7ec801358b7e
(Qlocal, QCname, QCbuffer, QChost, QCservice, QCfamily)
Kim F. Storm <storm@cua.dk>
parents:
43642
diff
changeset
|
4498 len = sizeof saddr; |
49111
32c767302a23
(server_accept_connection): Fixed recording of new
Kim F. Storm <storm@cua.dk>
parents:
48424
diff
changeset
|
4499 if (getsockname (s, &saddr.sa, &len) == 0) |
49600
23a1cea22d13
Trailing whitespace deleted.
Juanma Barranquero <lekktu@gmail.com>
parents:
49281
diff
changeset
|
4500 contact = Fplist_put (contact, QClocal, |
43968
7ec801358b7e
(Qlocal, QCname, QCbuffer, QChost, QCservice, QCfamily)
Kim F. Storm <storm@cua.dk>
parents:
43642
diff
changeset
|
4501 conv_sockaddr_to_lisp (&saddr.sa, len)); |
7ec801358b7e
(Qlocal, QCname, QCbuffer, QChost, QCservice, QCfamily)
Kim F. Storm <storm@cua.dk>
parents:
43642
diff
changeset
|
4502 #endif |
7ec801358b7e
(Qlocal, QCname, QCbuffer, QChost, QCservice, QCfamily)
Kim F. Storm <storm@cua.dk>
parents:
43642
diff
changeset
|
4503 |
7ec801358b7e
(Qlocal, QCname, QCbuffer, QChost, QCservice, QCfamily)
Kim F. Storm <storm@cua.dk>
parents:
43642
diff
changeset
|
4504 p->childp = contact; |
49223
26622fa0d099
Reworked 2003-01-12 change -- call a plist a plist!
Kim F. Storm <storm@cua.dk>
parents:
49164
diff
changeset
|
4505 p->plist = Fcopy_sequence (ps->plist); |
95884
d6a4488883dc
Daniel Engeler <engeler at gmail.com>
Glenn Morris <rgm@gnu.org>
parents:
95387
diff
changeset
|
4506 p->type = Qnetwork; |
49164 | 4507 |
43968
7ec801358b7e
(Qlocal, QCname, QCbuffer, QChost, QCservice, QCfamily)
Kim F. Storm <storm@cua.dk>
parents:
43642
diff
changeset
|
4508 p->buffer = buffer; |
7ec801358b7e
(Qlocal, QCname, QCbuffer, QChost, QCservice, QCfamily)
Kim F. Storm <storm@cua.dk>
parents:
43642
diff
changeset
|
4509 p->sentinel = ps->sentinel; |
7ec801358b7e
(Qlocal, QCname, QCbuffer, QChost, QCservice, QCfamily)
Kim F. Storm <storm@cua.dk>
parents:
43642
diff
changeset
|
4510 p->filter = ps->filter; |
7ec801358b7e
(Qlocal, QCname, QCbuffer, QChost, QCservice, QCfamily)
Kim F. Storm <storm@cua.dk>
parents:
43642
diff
changeset
|
4511 p->command = Qnil; |
69873
2d844bbbccd4
* process.h (struct Lisp_Process): Replace Lisp_Objects `pid',
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
69634
diff
changeset
|
4512 p->pid = 0; |
81826
077a1e6fd3f2
(struct Lisp_Process): Turn slots infd, outfd, kill_without_query, pty_flag,
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
80984
diff
changeset
|
4513 p->infd = s; |
077a1e6fd3f2
(struct Lisp_Process): Turn slots infd, outfd, kill_without_query, pty_flag,
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
80984
diff
changeset
|
4514 p->outfd = s; |
43968
7ec801358b7e
(Qlocal, QCname, QCbuffer, QChost, QCservice, QCfamily)
Kim F. Storm <storm@cua.dk>
parents:
43642
diff
changeset
|
4515 p->status = Qrun; |
7ec801358b7e
(Qlocal, QCname, QCbuffer, QChost, QCservice, QCfamily)
Kim F. Storm <storm@cua.dk>
parents:
43642
diff
changeset
|
4516 |
7ec801358b7e
(Qlocal, QCname, QCbuffer, QChost, QCservice, QCfamily)
Kim F. Storm <storm@cua.dk>
parents:
43642
diff
changeset
|
4517 /* Client processes for accepted connections are not stopped initially. */ |
7ec801358b7e
(Qlocal, QCname, QCbuffer, QChost, QCservice, QCfamily)
Kim F. Storm <storm@cua.dk>
parents:
43642
diff
changeset
|
4518 if (!EQ (p->filter, Qt)) |
7ec801358b7e
(Qlocal, QCname, QCbuffer, QChost, QCservice, QCfamily)
Kim F. Storm <storm@cua.dk>
parents:
43642
diff
changeset
|
4519 { |
7ec801358b7e
(Qlocal, QCname, QCbuffer, QChost, QCservice, QCfamily)
Kim F. Storm <storm@cua.dk>
parents:
43642
diff
changeset
|
4520 FD_SET (s, &input_wait_mask); |
7ec801358b7e
(Qlocal, QCname, QCbuffer, QChost, QCservice, QCfamily)
Kim F. Storm <storm@cua.dk>
parents:
43642
diff
changeset
|
4521 FD_SET (s, &non_keyboard_wait_mask); |
7ec801358b7e
(Qlocal, QCname, QCbuffer, QChost, QCservice, QCfamily)
Kim F. Storm <storm@cua.dk>
parents:
43642
diff
changeset
|
4522 } |
7ec801358b7e
(Qlocal, QCname, QCbuffer, QChost, QCservice, QCfamily)
Kim F. Storm <storm@cua.dk>
parents:
43642
diff
changeset
|
4523 |
7ec801358b7e
(Qlocal, QCname, QCbuffer, QChost, QCservice, QCfamily)
Kim F. Storm <storm@cua.dk>
parents:
43642
diff
changeset
|
4524 if (s > max_process_desc) |
7ec801358b7e
(Qlocal, QCname, QCbuffer, QChost, QCservice, QCfamily)
Kim F. Storm <storm@cua.dk>
parents:
43642
diff
changeset
|
4525 max_process_desc = s; |
7ec801358b7e
(Qlocal, QCname, QCbuffer, QChost, QCservice, QCfamily)
Kim F. Storm <storm@cua.dk>
parents:
43642
diff
changeset
|
4526 |
49600
23a1cea22d13
Trailing whitespace deleted.
Juanma Barranquero <lekktu@gmail.com>
parents:
49281
diff
changeset
|
4527 /* Setup coding system for new process based on server process. |
43968
7ec801358b7e
(Qlocal, QCname, QCbuffer, QChost, QCservice, QCfamily)
Kim F. Storm <storm@cua.dk>
parents:
43642
diff
changeset
|
4528 This seems to be the proper thing to do, as the coding system |
7ec801358b7e
(Qlocal, QCname, QCbuffer, QChost, QCservice, QCfamily)
Kim F. Storm <storm@cua.dk>
parents:
43642
diff
changeset
|
4529 of the new process should reflect the settings at the time the |
7ec801358b7e
(Qlocal, QCname, QCbuffer, QChost, QCservice, QCfamily)
Kim F. Storm <storm@cua.dk>
parents:
43642
diff
changeset
|
4530 server socket was opened; not the current settings. */ |
7ec801358b7e
(Qlocal, QCname, QCbuffer, QChost, QCservice, QCfamily)
Kim F. Storm <storm@cua.dk>
parents:
43642
diff
changeset
|
4531 |
7ec801358b7e
(Qlocal, QCname, QCbuffer, QChost, QCservice, QCfamily)
Kim F. Storm <storm@cua.dk>
parents:
43642
diff
changeset
|
4532 p->decode_coding_system = ps->decode_coding_system; |
7ec801358b7e
(Qlocal, QCname, QCbuffer, QChost, QCservice, QCfamily)
Kim F. Storm <storm@cua.dk>
parents:
43642
diff
changeset
|
4533 p->encode_coding_system = ps->encode_coding_system; |
49667
cbec1327e2f1
(QCfilter_multibyte): New variable.
Kenichi Handa <handa@m17n.org>
parents:
49600
diff
changeset
|
4534 setup_process_coding_systems (proc); |
43968
7ec801358b7e
(Qlocal, QCname, QCbuffer, QChost, QCservice, QCfamily)
Kim F. Storm <storm@cua.dk>
parents:
43642
diff
changeset
|
4535 |
7ec801358b7e
(Qlocal, QCname, QCbuffer, QChost, QCservice, QCfamily)
Kim F. Storm <storm@cua.dk>
parents:
43642
diff
changeset
|
4536 p->decoding_buf = make_uninit_string (0); |
81826
077a1e6fd3f2
(struct Lisp_Process): Turn slots infd, outfd, kill_without_query, pty_flag,
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
80984
diff
changeset
|
4537 p->decoding_carryover = 0; |
43968
7ec801358b7e
(Qlocal, QCname, QCbuffer, QChost, QCservice, QCfamily)
Kim F. Storm <storm@cua.dk>
parents:
43642
diff
changeset
|
4538 p->encoding_buf = make_uninit_string (0); |
7ec801358b7e
(Qlocal, QCname, QCbuffer, QChost, QCservice, QCfamily)
Kim F. Storm <storm@cua.dk>
parents:
43642
diff
changeset
|
4539 |
7ec801358b7e
(Qlocal, QCname, QCbuffer, QChost, QCservice, QCfamily)
Kim F. Storm <storm@cua.dk>
parents:
43642
diff
changeset
|
4540 p->inherit_coding_system_flag |
81826
077a1e6fd3f2
(struct Lisp_Process): Turn slots infd, outfd, kill_without_query, pty_flag,
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
80984
diff
changeset
|
4541 = (NILP (buffer) ? 0 : ps->inherit_coding_system_flag); |
43968
7ec801358b7e
(Qlocal, QCname, QCbuffer, QChost, QCservice, QCfamily)
Kim F. Storm <storm@cua.dk>
parents:
43642
diff
changeset
|
4542 |
7ec801358b7e
(Qlocal, QCname, QCbuffer, QChost, QCservice, QCfamily)
Kim F. Storm <storm@cua.dk>
parents:
43642
diff
changeset
|
4543 if (!NILP (ps->log)) |
7ec801358b7e
(Qlocal, QCname, QCbuffer, QChost, QCservice, QCfamily)
Kim F. Storm <storm@cua.dk>
parents:
43642
diff
changeset
|
4544 call3 (ps->log, server, proc, |
7ec801358b7e
(Qlocal, QCname, QCbuffer, QChost, QCservice, QCfamily)
Kim F. Storm <storm@cua.dk>
parents:
43642
diff
changeset
|
4545 concat3 (build_string ("accept from "), |
7ec801358b7e
(Qlocal, QCname, QCbuffer, QChost, QCservice, QCfamily)
Kim F. Storm <storm@cua.dk>
parents:
43642
diff
changeset
|
4546 (STRINGP (host) ? host : build_string ("-")), |
7ec801358b7e
(Qlocal, QCname, QCbuffer, QChost, QCservice, QCfamily)
Kim F. Storm <storm@cua.dk>
parents:
43642
diff
changeset
|
4547 build_string ("\n"))); |
7ec801358b7e
(Qlocal, QCname, QCbuffer, QChost, QCservice, QCfamily)
Kim F. Storm <storm@cua.dk>
parents:
43642
diff
changeset
|
4548 |
44314
f76a1425eb34
(DATAGRAM_CONN_P, list_processes_1)
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
44194
diff
changeset
|
4549 if (!NILP (p->sentinel)) |
49600
23a1cea22d13
Trailing whitespace deleted.
Juanma Barranquero <lekktu@gmail.com>
parents:
49281
diff
changeset
|
4550 exec_sentinel (proc, |
43968
7ec801358b7e
(Qlocal, QCname, QCbuffer, QChost, QCservice, QCfamily)
Kim F. Storm <storm@cua.dk>
parents:
43642
diff
changeset
|
4551 concat3 (build_string ("open from "), |
7ec801358b7e
(Qlocal, QCname, QCbuffer, QChost, QCservice, QCfamily)
Kim F. Storm <storm@cua.dk>
parents:
43642
diff
changeset
|
4552 (STRINGP (host) ? host : build_string ("-")), |
7ec801358b7e
(Qlocal, QCname, QCbuffer, QChost, QCservice, QCfamily)
Kim F. Storm <storm@cua.dk>
parents:
43642
diff
changeset
|
4553 build_string ("\n"))); |
7ec801358b7e
(Qlocal, QCname, QCbuffer, QChost, QCservice, QCfamily)
Kim F. Storm <storm@cua.dk>
parents:
43642
diff
changeset
|
4554 } |
7ec801358b7e
(Qlocal, QCname, QCbuffer, QChost, QCservice, QCfamily)
Kim F. Storm <storm@cua.dk>
parents:
43642
diff
changeset
|
4555 |
578 | 4556 /* This variable is different from waiting_for_input in keyboard.c. |
4557 It is used to communicate to a lisp process-filter/sentinel (via the | |
55444
976d03256b41
(Fwaiting_for_user_input_p, Fmake_network_process)
Juanma Barranquero <lekktu@gmail.com>
parents:
53835
diff
changeset
|
4558 function Fwaiting_for_user_input_p below) whether Emacs was waiting |
578 | 4559 for user-input when that process-filter was called. |
4560 waiting_for_input cannot be used as that is by definition 0 when | |
8570
dd3dfde8f973
(wait_reading_process_input):
Richard M. Stallman <rms@gnu.org>
parents:
8390
diff
changeset
|
4561 lisp code is being evalled. |
dd3dfde8f973
(wait_reading_process_input):
Richard M. Stallman <rms@gnu.org>
parents:
8390
diff
changeset
|
4562 This is also used in record_asynch_buffer_change. |
dd3dfde8f973
(wait_reading_process_input):
Richard M. Stallman <rms@gnu.org>
parents:
8390
diff
changeset
|
4563 For that purpose, this must be 0 |
56728
1686b397ef16
(wait_reading_process_output): Rename from
Kim F. Storm <storm@cua.dk>
parents:
56716
diff
changeset
|
4564 when not inside wait_reading_process_output. */ |
578 | 4565 static int waiting_for_user_input_p; |
4566 | |
72277
a6b9ee835f88
* process.c: Reapply 2006-08-01 change.
Chong Yidong <cyd@stupidchicken.com>
parents:
72255
diff
changeset
|
4567 static Lisp_Object |
a6b9ee835f88
* process.c: Reapply 2006-08-01 change.
Chong Yidong <cyd@stupidchicken.com>
parents:
72255
diff
changeset
|
4568 wait_reading_process_output_unwind (data) |
a6b9ee835f88
* process.c: Reapply 2006-08-01 change.
Chong Yidong <cyd@stupidchicken.com>
parents:
72255
diff
changeset
|
4569 Lisp_Object data; |
a6b9ee835f88
* process.c: Reapply 2006-08-01 change.
Chong Yidong <cyd@stupidchicken.com>
parents:
72255
diff
changeset
|
4570 { |
a6b9ee835f88
* process.c: Reapply 2006-08-01 change.
Chong Yidong <cyd@stupidchicken.com>
parents:
72255
diff
changeset
|
4571 waiting_for_user_input_p = XINT (data); |
a6b9ee835f88
* process.c: Reapply 2006-08-01 change.
Chong Yidong <cyd@stupidchicken.com>
parents:
72255
diff
changeset
|
4572 return Qnil; |
a6b9ee835f88
* process.c: Reapply 2006-08-01 change.
Chong Yidong <cyd@stupidchicken.com>
parents:
72255
diff
changeset
|
4573 } |
a6b9ee835f88
* process.c: Reapply 2006-08-01 change.
Chong Yidong <cyd@stupidchicken.com>
parents:
72255
diff
changeset
|
4574 |
14890
71c2cf461805
(wait_reading_process_input_1): New (empty) function.
Richard M. Stallman <rms@gnu.org>
parents:
14863
diff
changeset
|
4575 /* This is here so breakpoints can be put on it. */ |
21514 | 4576 static void |
56728
1686b397ef16
(wait_reading_process_output): Rename from
Kim F. Storm <storm@cua.dk>
parents:
56716
diff
changeset
|
4577 wait_reading_process_output_1 () |
14890
71c2cf461805
(wait_reading_process_input_1): New (empty) function.
Richard M. Stallman <rms@gnu.org>
parents:
14863
diff
changeset
|
4578 { |
71c2cf461805
(wait_reading_process_input_1): New (empty) function.
Richard M. Stallman <rms@gnu.org>
parents:
14863
diff
changeset
|
4579 } |
71c2cf461805
(wait_reading_process_input_1): New (empty) function.
Richard M. Stallman <rms@gnu.org>
parents:
14863
diff
changeset
|
4580 |
71109
8e0e27268c74
(select_wrapper): Add wrapper around select to work around
Kim F. Storm <storm@cua.dk>
parents:
70517
diff
changeset
|
4581 /* Use a wrapper around select to work around a bug in gdb 5.3. |
106675
72ee8229ccc7
process.c: Fix typo in comment.
Juanma Barranquero <lekktu@gmail.com>
parents:
106398
diff
changeset
|
4582 Normally, the wrapper is optimized away by inlining. |
71109
8e0e27268c74
(select_wrapper): Add wrapper around select to work around
Kim F. Storm <storm@cua.dk>
parents:
70517
diff
changeset
|
4583 |
8e0e27268c74
(select_wrapper): Add wrapper around select to work around
Kim F. Storm <storm@cua.dk>
parents:
70517
diff
changeset
|
4584 If emacs is stopped inside select, the gdb backtrace doesn't |
8e0e27268c74
(select_wrapper): Add wrapper around select to work around
Kim F. Storm <storm@cua.dk>
parents:
70517
diff
changeset
|
4585 show the function which called select, so it is practically |
8e0e27268c74
(select_wrapper): Add wrapper around select to work around
Kim F. Storm <storm@cua.dk>
parents:
70517
diff
changeset
|
4586 impossible to step through wait_reading_process_output. */ |
8e0e27268c74
(select_wrapper): Add wrapper around select to work around
Kim F. Storm <storm@cua.dk>
parents:
70517
diff
changeset
|
4587 |
8e0e27268c74
(select_wrapper): Add wrapper around select to work around
Kim F. Storm <storm@cua.dk>
parents:
70517
diff
changeset
|
4588 #ifndef select |
8e0e27268c74
(select_wrapper): Add wrapper around select to work around
Kim F. Storm <storm@cua.dk>
parents:
70517
diff
changeset
|
4589 static INLINE int |
8e0e27268c74
(select_wrapper): Add wrapper around select to work around
Kim F. Storm <storm@cua.dk>
parents:
70517
diff
changeset
|
4590 select_wrapper (n, rfd, wfd, xfd, tmo) |
8e0e27268c74
(select_wrapper): Add wrapper around select to work around
Kim F. Storm <storm@cua.dk>
parents:
70517
diff
changeset
|
4591 int n; |
8e0e27268c74
(select_wrapper): Add wrapper around select to work around
Kim F. Storm <storm@cua.dk>
parents:
70517
diff
changeset
|
4592 SELECT_TYPE *rfd, *wfd, *xfd; |
8e0e27268c74
(select_wrapper): Add wrapper around select to work around
Kim F. Storm <storm@cua.dk>
parents:
70517
diff
changeset
|
4593 EMACS_TIME *tmo; |
8e0e27268c74
(select_wrapper): Add wrapper around select to work around
Kim F. Storm <storm@cua.dk>
parents:
70517
diff
changeset
|
4594 { |
8e0e27268c74
(select_wrapper): Add wrapper around select to work around
Kim F. Storm <storm@cua.dk>
parents:
70517
diff
changeset
|
4595 return select (n, rfd, wfd, xfd, tmo); |
8e0e27268c74
(select_wrapper): Add wrapper around select to work around
Kim F. Storm <storm@cua.dk>
parents:
70517
diff
changeset
|
4596 } |
8e0e27268c74
(select_wrapper): Add wrapper around select to work around
Kim F. Storm <storm@cua.dk>
parents:
70517
diff
changeset
|
4597 #define select select_wrapper |
8e0e27268c74
(select_wrapper): Add wrapper around select to work around
Kim F. Storm <storm@cua.dk>
parents:
70517
diff
changeset
|
4598 #endif |
8e0e27268c74
(select_wrapper): Add wrapper around select to work around
Kim F. Storm <storm@cua.dk>
parents:
70517
diff
changeset
|
4599 |
578 | 4600 /* Read and dispose of subprocess output while waiting for timeout to |
4601 elapse and/or keyboard input to be available. | |
4602 | |
3953
d0c23febc08c
(wait_reading_process_input): Do include the keyboard
Richard M. Stallman <rms@gnu.org>
parents:
3915
diff
changeset
|
4603 TIME_LIMIT is: |
578 | 4604 timeout in seconds, or |
4605 zero for no limit, or | |
4606 -1 means gobble data immediately available but don't wait for any. | |
4607 | |
3953
d0c23febc08c
(wait_reading_process_input): Do include the keyboard
Richard M. Stallman <rms@gnu.org>
parents:
3915
diff
changeset
|
4608 MICROSECS is: |
d0c23febc08c
(wait_reading_process_input): Do include the keyboard
Richard M. Stallman <rms@gnu.org>
parents:
3915
diff
changeset
|
4609 an additional duration to wait, measured in microseconds. |
d0c23febc08c
(wait_reading_process_input): Do include the keyboard
Richard M. Stallman <rms@gnu.org>
parents:
3915
diff
changeset
|
4610 If this is nonzero and time_limit is 0, then the timeout |
d0c23febc08c
(wait_reading_process_input): Do include the keyboard
Richard M. Stallman <rms@gnu.org>
parents:
3915
diff
changeset
|
4611 consists of MICROSECS only. |
d0c23febc08c
(wait_reading_process_input): Do include the keyboard
Richard M. Stallman <rms@gnu.org>
parents:
3915
diff
changeset
|
4612 |
d0c23febc08c
(wait_reading_process_input): Do include the keyboard
Richard M. Stallman <rms@gnu.org>
parents:
3915
diff
changeset
|
4613 READ_KBD is a lisp value: |
578 | 4614 0 to ignore keyboard input, or |
4615 1 to return when input is available, or | |
2200
5e58643bb169
(wait_reading_process_input): New option to wait
Richard M. Stallman <rms@gnu.org>
parents:
2120
diff
changeset
|
4616 -1 meaning caller will actually read the input, so don't throw to |
578 | 4617 the quit handler, or |
56716
c126b8b6a314
* process.c (wait_reading_process_input): Clean up.
Kim F. Storm <storm@cua.dk>
parents:
56713
diff
changeset
|
4618 |
c126b8b6a314
* process.c (wait_reading_process_input): Clean up.
Kim F. Storm <storm@cua.dk>
parents:
56713
diff
changeset
|
4619 DO_DISPLAY != 0 means redisplay should be done to show subprocess |
56701
e327231e4361
(Faccept_process_output): Add arg JUST-THIS-ONE;
Kim F. Storm <storm@cua.dk>
parents:
56700
diff
changeset
|
4620 output that arrives. |
578 | 4621 |
56716
c126b8b6a314
* process.c (wait_reading_process_input): Clean up.
Kim F. Storm <storm@cua.dk>
parents:
56713
diff
changeset
|
4622 If WAIT_FOR_CELL is a cons cell, wait until its car is non-nil |
c126b8b6a314
* process.c (wait_reading_process_input): Clean up.
Kim F. Storm <storm@cua.dk>
parents:
56713
diff
changeset
|
4623 (and gobble terminal input into the buffer if any arrives). |
c126b8b6a314
* process.c (wait_reading_process_input): Clean up.
Kim F. Storm <storm@cua.dk>
parents:
56713
diff
changeset
|
4624 |
c126b8b6a314
* process.c (wait_reading_process_input): Clean up.
Kim F. Storm <storm@cua.dk>
parents:
56713
diff
changeset
|
4625 If WAIT_PROC is specified, wait until something arrives from that |
78501 | 4626 process. The return value is true if we read some input from |
56716
c126b8b6a314
* process.c (wait_reading_process_input): Clean up.
Kim F. Storm <storm@cua.dk>
parents:
56713
diff
changeset
|
4627 that process. |
c126b8b6a314
* process.c (wait_reading_process_input): Clean up.
Kim F. Storm <storm@cua.dk>
parents:
56713
diff
changeset
|
4628 |
c126b8b6a314
* process.c (wait_reading_process_input): Clean up.
Kim F. Storm <storm@cua.dk>
parents:
56713
diff
changeset
|
4629 If JUST_WAIT_PROC is non-nil, handle only output from WAIT_PROC |
c126b8b6a314
* process.c (wait_reading_process_input): Clean up.
Kim F. Storm <storm@cua.dk>
parents:
56713
diff
changeset
|
4630 (suspending output from other processes). A negative value |
c126b8b6a314
* process.c (wait_reading_process_input): Clean up.
Kim F. Storm <storm@cua.dk>
parents:
56713
diff
changeset
|
4631 means don't run any timers either. |
c126b8b6a314
* process.c (wait_reading_process_input): Clean up.
Kim F. Storm <storm@cua.dk>
parents:
56713
diff
changeset
|
4632 |
78501 | 4633 If WAIT_PROC is specified, then the function returns true if we |
56716
c126b8b6a314
* process.c (wait_reading_process_input): Clean up.
Kim F. Storm <storm@cua.dk>
parents:
56713
diff
changeset
|
4634 received input from that process before the timeout elapsed. |
78501 | 4635 Otherwise, return true if we received input from any process. */ |
578 | 4636 |
21514 | 4637 int |
56728
1686b397ef16
(wait_reading_process_output): Rename from
Kim F. Storm <storm@cua.dk>
parents:
56716
diff
changeset
|
4638 wait_reading_process_output (time_limit, microsecs, read_kbd, do_display, |
1686b397ef16
(wait_reading_process_output): Rename from
Kim F. Storm <storm@cua.dk>
parents:
56716
diff
changeset
|
4639 wait_for_cell, wait_proc, just_wait_proc) |
56716
c126b8b6a314
* process.c (wait_reading_process_input): Clean up.
Kim F. Storm <storm@cua.dk>
parents:
56713
diff
changeset
|
4640 int time_limit, microsecs, read_kbd, do_display; |
c126b8b6a314
* process.c (wait_reading_process_input): Clean up.
Kim F. Storm <storm@cua.dk>
parents:
56713
diff
changeset
|
4641 Lisp_Object wait_for_cell; |
c126b8b6a314
* process.c (wait_reading_process_input): Clean up.
Kim F. Storm <storm@cua.dk>
parents:
56713
diff
changeset
|
4642 struct Lisp_Process *wait_proc; |
c126b8b6a314
* process.c (wait_reading_process_input): Clean up.
Kim F. Storm <storm@cua.dk>
parents:
56713
diff
changeset
|
4643 int just_wait_proc; |
578 | 4644 { |
25770
3a44b5298cd5
(list_processes_1): Remove unused variables.
Gerd Moellmann <gerd@gnu.org>
parents:
25760
diff
changeset
|
4645 register int channel, nfds; |
55579
234873044c2a
(wait_reading_process_input): Make reentrant.
Kim F. Storm <storm@cua.dk>
parents:
55534
diff
changeset
|
4646 SELECT_TYPE Available; |
57840
8abbe69dfdb2
(connect_wait_mask, num_pending_connects): Only
Kim F. Storm <storm@cua.dk>
parents:
57287
diff
changeset
|
4647 #ifdef NON_BLOCKING_CONNECT |
55579
234873044c2a
(wait_reading_process_input): Make reentrant.
Kim F. Storm <storm@cua.dk>
parents:
55534
diff
changeset
|
4648 SELECT_TYPE Connecting; |
57840
8abbe69dfdb2
(connect_wait_mask, num_pending_connects): Only
Kim F. Storm <storm@cua.dk>
parents:
57287
diff
changeset
|
4649 int check_connect; |
8abbe69dfdb2
(connect_wait_mask, num_pending_connects): Only
Kim F. Storm <storm@cua.dk>
parents:
57287
diff
changeset
|
4650 #endif |
8abbe69dfdb2
(connect_wait_mask, num_pending_connects): Only
Kim F. Storm <storm@cua.dk>
parents:
57287
diff
changeset
|
4651 int check_delay, no_avail; |
578 | 4652 int xerrno; |
4653 Lisp_Object proc; | |
25770
3a44b5298cd5
(list_processes_1): Remove unused variables.
Gerd Moellmann <gerd@gnu.org>
parents:
25760
diff
changeset
|
4654 EMACS_TIME timeout, end_time; |
5134
0a4e46e15304
(wait_reading_process_input):
Richard M. Stallman <rms@gnu.org>
parents:
4998
diff
changeset
|
4655 int wait_channel = -1; |
578 | 4656 int got_some_input = 0; |
72277
a6b9ee835f88
* process.c: Reapply 2006-08-01 change.
Chong Yidong <cyd@stupidchicken.com>
parents:
72255
diff
changeset
|
4657 int count = SPECPDL_INDEX (); |
578 | 4658 |
4659 FD_ZERO (&Available); | |
57840
8abbe69dfdb2
(connect_wait_mask, num_pending_connects): Only
Kim F. Storm <storm@cua.dk>
parents:
57287
diff
changeset
|
4660 #ifdef NON_BLOCKING_CONNECT |
43598
f49377cf2e3c
(Qconnect, Qfailed): New variables.
Kim F. Storm <storm@cua.dk>
parents:
42600
diff
changeset
|
4661 FD_ZERO (&Connecting); |
57840
8abbe69dfdb2
(connect_wait_mask, num_pending_connects): Only
Kim F. Storm <storm@cua.dk>
parents:
57287
diff
changeset
|
4662 #endif |
578 | 4663 |
56716
c126b8b6a314
* process.c (wait_reading_process_input): Clean up.
Kim F. Storm <storm@cua.dk>
parents:
56713
diff
changeset
|
4664 /* If wait_proc is a process to watch, set wait_channel accordingly. */ |
c126b8b6a314
* process.c (wait_reading_process_input): Clean up.
Kim F. Storm <storm@cua.dk>
parents:
56713
diff
changeset
|
4665 if (wait_proc != NULL) |
81826
077a1e6fd3f2
(struct Lisp_Process): Turn slots infd, outfd, kill_without_query, pty_flag,
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
80984
diff
changeset
|
4666 wait_channel = wait_proc->infd; |
56716
c126b8b6a314
* process.c (wait_reading_process_input): Clean up.
Kim F. Storm <storm@cua.dk>
parents:
56713
diff
changeset
|
4667 |
72277
a6b9ee835f88
* process.c: Reapply 2006-08-01 change.
Chong Yidong <cyd@stupidchicken.com>
parents:
72255
diff
changeset
|
4668 record_unwind_protect (wait_reading_process_output_unwind, |
a6b9ee835f88
* process.c: Reapply 2006-08-01 change.
Chong Yidong <cyd@stupidchicken.com>
parents:
72255
diff
changeset
|
4669 make_number (waiting_for_user_input_p)); |
56716
c126b8b6a314
* process.c (wait_reading_process_input): Clean up.
Kim F. Storm <storm@cua.dk>
parents:
56713
diff
changeset
|
4670 waiting_for_user_input_p = read_kbd; |
578 | 4671 |
4672 /* Since we may need to wait several times, | |
4673 compute the absolute time to return at. */ | |
4674 if (time_limit || microsecs) | |
4675 { | |
4676 EMACS_GET_TIME (end_time); | |
4677 EMACS_SET_SECS_USECS (timeout, time_limit, microsecs); | |
4678 EMACS_ADD_TIME (end_time, end_time, timeout); | |
4679 } | |
4680 | |
4681 while (1) | |
4682 { | |
14458
2bb4652305c1
(wait_reading_process_input): If select times out,
Richard M. Stallman <rms@gnu.org>
parents:
14405
diff
changeset
|
4683 int timeout_reduced_for_timers = 0; |
2bb4652305c1
(wait_reading_process_input): If select times out,
Richard M. Stallman <rms@gnu.org>
parents:
14405
diff
changeset
|
4684 |
578 | 4685 /* If calling from keyboard input, do not quit |
4686 since we want to return C-g as an input character. | |
4687 Otherwise, do pending quit if requested. */ | |
56716
c126b8b6a314
* process.c (wait_reading_process_input): Clean up.
Kim F. Storm <storm@cua.dk>
parents:
56713
diff
changeset
|
4688 if (read_kbd >= 0) |
578 | 4689 QUIT; |
53659
291acfb4bf40
(wait_reading_process_input) [SYNC_INPUT]: Check interrupt_input_pending.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
53637
diff
changeset
|
4690 #ifdef SYNC_INPUT |
93896
0c2f4b91340c
(wait_reading_process_output): If SYNC_INPUT and pending_atimers, run atimers.
Jan Djärv <jan.h.d@swipnet.se>
parents:
93324
diff
changeset
|
4691 else |
101649
bd66da73ef9f
(wait_reading_process_output): Use process_pending_signals.
Chong Yidong <cyd@stupidchicken.com>
parents:
101276
diff
changeset
|
4692 process_pending_signals (); |
53659
291acfb4bf40
(wait_reading_process_input) [SYNC_INPUT]: Check interrupt_input_pending.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
53637
diff
changeset
|
4693 #endif |
578 | 4694 |
4639 | 4695 /* Exit now if the cell we're waiting for became non-nil. */ |
39973
579177964efa
Avoid (most) uses of XCAR/XCDR as lvalues, for flexibility in experimenting
Ken Raeburn <raeburn@raeburn.org>
parents:
39964
diff
changeset
|
4696 if (! NILP (wait_for_cell) && ! NILP (XCAR (wait_for_cell))) |
4639 | 4697 break; |
4698 | |
578 | 4699 /* Compute time from now till when time limit is up */ |
4700 /* Exit if already run out */ | |
4701 if (time_limit == -1) | |
4702 { | |
4703 /* -1 specified for timeout means | |
4704 gobble output available now | |
4705 but don't wait at all. */ | |
4706 | |
4707 EMACS_SET_SECS_USECS (timeout, 0, 0); | |
4708 } | |
4709 else if (time_limit || microsecs) | |
4710 { | |
4711 EMACS_GET_TIME (timeout); | |
4712 EMACS_SUB_TIME (timeout, end_time, timeout); | |
4713 if (EMACS_TIME_NEG_P (timeout)) | |
4714 break; | |
4715 } | |
4716 else | |
4717 { | |
4718 EMACS_SET_SECS_USECS (timeout, 100000, 0); | |
4719 } | |
4720 | |
15064
fb0f2804c34a
(wait_reading_process_input, both definitions):
Richard M. Stallman <rms@gnu.org>
parents:
15025
diff
changeset
|
4721 /* Normally we run timers here. |
fb0f2804c34a
(wait_reading_process_input, both definitions):
Richard M. Stallman <rms@gnu.org>
parents:
15025
diff
changeset
|
4722 But not if wait_for_cell; in those cases, |
fb0f2804c34a
(wait_reading_process_input, both definitions):
Richard M. Stallman <rms@gnu.org>
parents:
15025
diff
changeset
|
4723 the wait is supposed to be short, |
fb0f2804c34a
(wait_reading_process_input, both definitions):
Richard M. Stallman <rms@gnu.org>
parents:
15025
diff
changeset
|
4724 and those callers cannot handle running arbitrary Lisp code here. */ |
56701
e327231e4361
(Faccept_process_output): Add arg JUST-THIS-ONE;
Kim F. Storm <storm@cua.dk>
parents:
56700
diff
changeset
|
4725 if (NILP (wait_for_cell) |
56716
c126b8b6a314
* process.c (wait_reading_process_input): Clean up.
Kim F. Storm <storm@cua.dk>
parents:
56713
diff
changeset
|
4726 && just_wait_proc >= 0) |
14404
cba05f90ee57
(wait_reading_process_input): Call timer_check
Richard M. Stallman <rms@gnu.org>
parents:
14278
diff
changeset
|
4727 { |
14458
2bb4652305c1
(wait_reading_process_input): If select times out,
Richard M. Stallman <rms@gnu.org>
parents:
14405
diff
changeset
|
4728 EMACS_TIME timer_delay; |
34660
75866a7ebaec
(wait_reading_process_input): Check for pending
Gerd Moellmann <gerd@gnu.org>
parents:
34647
diff
changeset
|
4729 |
75866a7ebaec
(wait_reading_process_input): Check for pending
Gerd Moellmann <gerd@gnu.org>
parents:
34647
diff
changeset
|
4730 do |
14890
71c2cf461805
(wait_reading_process_input_1): New (empty) function.
Richard M. Stallman <rms@gnu.org>
parents:
14863
diff
changeset
|
4731 { |
34660
75866a7ebaec
(wait_reading_process_input): Check for pending
Gerd Moellmann <gerd@gnu.org>
parents:
34647
diff
changeset
|
4732 int old_timers_run = timers_run; |
37465
f790d83ea743
(wait_reading_process_input): Call
Gerd Moellmann <gerd@gnu.org>
parents:
37413
diff
changeset
|
4733 struct buffer *old_buffer = current_buffer; |
80225
2958d9bca9be
(wait_reading_process_output): Check for window changes caused by timers.
Chong Yidong <cyd@stupidchicken.com>
parents:
79807
diff
changeset
|
4734 Lisp_Object old_window = selected_window; |
49600
23a1cea22d13
Trailing whitespace deleted.
Juanma Barranquero <lekktu@gmail.com>
parents:
49281
diff
changeset
|
4735 |
34660
75866a7ebaec
(wait_reading_process_input): Check for pending
Gerd Moellmann <gerd@gnu.org>
parents:
34647
diff
changeset
|
4736 timer_delay = timer_check (1); |
37398
756d2f4e4058
(wait_reading_process_input): Call
Gerd Moellmann <gerd@gnu.org>
parents:
36659
diff
changeset
|
4737 |
756d2f4e4058
(wait_reading_process_input): Call
Gerd Moellmann <gerd@gnu.org>
parents:
36659
diff
changeset
|
4738 /* If a timer has run, this might have changed buffers |
756d2f4e4058
(wait_reading_process_input): Call
Gerd Moellmann <gerd@gnu.org>
parents:
36659
diff
changeset
|
4739 an alike. Make read_key_sequence aware of that. */ |
756d2f4e4058
(wait_reading_process_input): Call
Gerd Moellmann <gerd@gnu.org>
parents:
36659
diff
changeset
|
4740 if (timers_run != old_timers_run |
80225
2958d9bca9be
(wait_reading_process_output): Check for window changes caused by timers.
Chong Yidong <cyd@stupidchicken.com>
parents:
79807
diff
changeset
|
4741 && (old_buffer != current_buffer |
2958d9bca9be
(wait_reading_process_output): Check for window changes caused by timers.
Chong Yidong <cyd@stupidchicken.com>
parents:
79807
diff
changeset
|
4742 || !EQ (old_window, selected_window)) |
37398
756d2f4e4058
(wait_reading_process_input): Call
Gerd Moellmann <gerd@gnu.org>
parents:
36659
diff
changeset
|
4743 && waiting_for_user_input_p == -1) |
756d2f4e4058
(wait_reading_process_input): Call
Gerd Moellmann <gerd@gnu.org>
parents:
36659
diff
changeset
|
4744 record_asynch_buffer_change (); |
49600
23a1cea22d13
Trailing whitespace deleted.
Juanma Barranquero <lekktu@gmail.com>
parents:
49281
diff
changeset
|
4745 |
34660
75866a7ebaec
(wait_reading_process_input): Check for pending
Gerd Moellmann <gerd@gnu.org>
parents:
34647
diff
changeset
|
4746 if (timers_run != old_timers_run && do_display) |
75866a7ebaec
(wait_reading_process_input): Check for pending
Gerd Moellmann <gerd@gnu.org>
parents:
34647
diff
changeset
|
4747 /* We must retry, since a timer may have requeued itself |
75866a7ebaec
(wait_reading_process_input): Check for pending
Gerd Moellmann <gerd@gnu.org>
parents:
34647
diff
changeset
|
4748 and that could alter the time_delay. */ |
35336
002c02db42d3
Call redisplay_preserve_echo_area with additional arg.
Gerd Moellmann <gerd@gnu.org>
parents:
34660
diff
changeset
|
4749 redisplay_preserve_echo_area (9); |
34660
75866a7ebaec
(wait_reading_process_input): Check for pending
Gerd Moellmann <gerd@gnu.org>
parents:
34647
diff
changeset
|
4750 else |
75866a7ebaec
(wait_reading_process_input): Check for pending
Gerd Moellmann <gerd@gnu.org>
parents:
34647
diff
changeset
|
4751 break; |
14890
71c2cf461805
(wait_reading_process_input_1): New (empty) function.
Richard M. Stallman <rms@gnu.org>
parents:
14863
diff
changeset
|
4752 } |
34660
75866a7ebaec
(wait_reading_process_input): Check for pending
Gerd Moellmann <gerd@gnu.org>
parents:
34647
diff
changeset
|
4753 while (!detect_input_pending ()); |
14890
71c2cf461805
(wait_reading_process_input_1): New (empty) function.
Richard M. Stallman <rms@gnu.org>
parents:
14863
diff
changeset
|
4754 |
18230
2f1f942f25ca
(wait_reading_process_input): Return if unread events appear.
Richard M. Stallman <rms@gnu.org>
parents:
18183
diff
changeset
|
4755 /* If there is unread keyboard input, also return. */ |
56716
c126b8b6a314
* process.c (wait_reading_process_input): Clean up.
Kim F. Storm <storm@cua.dk>
parents:
56713
diff
changeset
|
4756 if (read_kbd != 0 |
18230
2f1f942f25ca
(wait_reading_process_input): Return if unread events appear.
Richard M. Stallman <rms@gnu.org>
parents:
18183
diff
changeset
|
4757 && requeued_events_pending_p ()) |
2f1f942f25ca
(wait_reading_process_input): Return if unread events appear.
Richard M. Stallman <rms@gnu.org>
parents:
18183
diff
changeset
|
4758 break; |
2f1f942f25ca
(wait_reading_process_input): Return if unread events appear.
Richard M. Stallman <rms@gnu.org>
parents:
18183
diff
changeset
|
4759 |
14458
2bb4652305c1
(wait_reading_process_input): If select times out,
Richard M. Stallman <rms@gnu.org>
parents:
14405
diff
changeset
|
4760 if (! EMACS_TIME_NEG_P (timer_delay) && time_limit != -1) |
14404
cba05f90ee57
(wait_reading_process_input): Call timer_check
Richard M. Stallman <rms@gnu.org>
parents:
14278
diff
changeset
|
4761 { |
cba05f90ee57
(wait_reading_process_input): Call timer_check
Richard M. Stallman <rms@gnu.org>
parents:
14278
diff
changeset
|
4762 EMACS_TIME difference; |
cba05f90ee57
(wait_reading_process_input): Call timer_check
Richard M. Stallman <rms@gnu.org>
parents:
14278
diff
changeset
|
4763 EMACS_SUB_TIME (difference, timer_delay, timeout); |
cba05f90ee57
(wait_reading_process_input): Call timer_check
Richard M. Stallman <rms@gnu.org>
parents:
14278
diff
changeset
|
4764 if (EMACS_TIME_NEG_P (difference)) |
14458
2bb4652305c1
(wait_reading_process_input): If select times out,
Richard M. Stallman <rms@gnu.org>
parents:
14405
diff
changeset
|
4765 { |
2bb4652305c1
(wait_reading_process_input): If select times out,
Richard M. Stallman <rms@gnu.org>
parents:
14405
diff
changeset
|
4766 timeout = timer_delay; |
2bb4652305c1
(wait_reading_process_input): If select times out,
Richard M. Stallman <rms@gnu.org>
parents:
14405
diff
changeset
|
4767 timeout_reduced_for_timers = 1; |
2bb4652305c1
(wait_reading_process_input): If select times out,
Richard M. Stallman <rms@gnu.org>
parents:
14405
diff
changeset
|
4768 } |
14404
cba05f90ee57
(wait_reading_process_input): Call timer_check
Richard M. Stallman <rms@gnu.org>
parents:
14278
diff
changeset
|
4769 } |
14935
3e0dc64a5cb8
(wait_reading_process_input): Don't call
Richard M. Stallman <rms@gnu.org>
parents:
14890
diff
changeset
|
4770 /* If time_limit is -1, we are not going to wait at all. */ |
3e0dc64a5cb8
(wait_reading_process_input): Don't call
Richard M. Stallman <rms@gnu.org>
parents:
14890
diff
changeset
|
4771 else if (time_limit != -1) |
14890
71c2cf461805
(wait_reading_process_input_1): New (empty) function.
Richard M. Stallman <rms@gnu.org>
parents:
14863
diff
changeset
|
4772 { |
71c2cf461805
(wait_reading_process_input_1): New (empty) function.
Richard M. Stallman <rms@gnu.org>
parents:
14863
diff
changeset
|
4773 /* This is so a breakpoint can be put here. */ |
56728
1686b397ef16
(wait_reading_process_output): Rename from
Kim F. Storm <storm@cua.dk>
parents:
56716
diff
changeset
|
4774 wait_reading_process_output_1 (); |
14890
71c2cf461805
(wait_reading_process_input_1): New (empty) function.
Richard M. Stallman <rms@gnu.org>
parents:
14863
diff
changeset
|
4775 } |
14404
cba05f90ee57
(wait_reading_process_input): Call timer_check
Richard M. Stallman <rms@gnu.org>
parents:
14278
diff
changeset
|
4776 } |
cba05f90ee57
(wait_reading_process_input): Call timer_check
Richard M. Stallman <rms@gnu.org>
parents:
14278
diff
changeset
|
4777 |
2894
646c5beae647
* process.c (wait_reading_process_input): Undo change of April
Jim Blandy <jimb@redhat.com>
parents:
2893
diff
changeset
|
4778 /* Cause C-g and alarm signals to take immediate action, |
646c5beae647
* process.c (wait_reading_process_input): Undo change of April
Jim Blandy <jimb@redhat.com>
parents:
2893
diff
changeset
|
4779 and cause input available signals to zero out timeout. |
646c5beae647
* process.c (wait_reading_process_input): Undo change of April
Jim Blandy <jimb@redhat.com>
parents:
2893
diff
changeset
|
4780 |
646c5beae647
* process.c (wait_reading_process_input): Undo change of April
Jim Blandy <jimb@redhat.com>
parents:
2893
diff
changeset
|
4781 It is important that we do this before checking for process |
646c5beae647
* process.c (wait_reading_process_input): Undo change of April
Jim Blandy <jimb@redhat.com>
parents:
2893
diff
changeset
|
4782 activity. If we get a SIGCHLD after the explicit checks for |
646c5beae647
* process.c (wait_reading_process_input): Undo change of April
Jim Blandy <jimb@redhat.com>
parents:
2893
diff
changeset
|
4783 process activity, timeout is the only way we will know. */ |
56716
c126b8b6a314
* process.c (wait_reading_process_input): Clean up.
Kim F. Storm <storm@cua.dk>
parents:
56713
diff
changeset
|
4784 if (read_kbd < 0) |
2894
646c5beae647
* process.c (wait_reading_process_input): Undo change of April
Jim Blandy <jimb@redhat.com>
parents:
2893
diff
changeset
|
4785 set_waiting_for_input (&timeout); |
646c5beae647
* process.c (wait_reading_process_input): Undo change of April
Jim Blandy <jimb@redhat.com>
parents:
2893
diff
changeset
|
4786 |
1925
3ddb163a9201
* process.c: Make sure we don't miss processes exiting, by having
Jim Blandy <jimb@redhat.com>
parents:
1886
diff
changeset
|
4787 /* If status of something has changed, and no input is |
3ddb163a9201
* process.c: Make sure we don't miss processes exiting, by having
Jim Blandy <jimb@redhat.com>
parents:
1886
diff
changeset
|
4788 available, notify the user of the change right away. After |
3ddb163a9201
* process.c: Make sure we don't miss processes exiting, by having
Jim Blandy <jimb@redhat.com>
parents:
1886
diff
changeset
|
4789 this explicit check, we'll let the SIGCHLD handler zap |
104316
bb8ce3c842e7
* process.c (status_notify): Don't perform redisplay.
Chong Yidong <cyd@stupidchicken.com>
parents:
104265
diff
changeset
|
4790 timeout to get our attention. */ |
bb8ce3c842e7
* process.c (status_notify): Don't perform redisplay.
Chong Yidong <cyd@stupidchicken.com>
parents:
104265
diff
changeset
|
4791 if (update_tick != process_tick) |
1925
3ddb163a9201
* process.c: Make sure we don't miss processes exiting, by having
Jim Blandy <jimb@redhat.com>
parents:
1886
diff
changeset
|
4792 { |
57840
8abbe69dfdb2
(connect_wait_mask, num_pending_connects): Only
Kim F. Storm <storm@cua.dk>
parents:
57287
diff
changeset
|
4793 SELECT_TYPE Atemp; |
8abbe69dfdb2
(connect_wait_mask, num_pending_connects): Only
Kim F. Storm <storm@cua.dk>
parents:
57287
diff
changeset
|
4794 #ifdef NON_BLOCKING_CONNECT |
8abbe69dfdb2
(connect_wait_mask, num_pending_connects): Only
Kim F. Storm <storm@cua.dk>
parents:
57287
diff
changeset
|
4795 SELECT_TYPE Ctemp; |
8abbe69dfdb2
(connect_wait_mask, num_pending_connects): Only
Kim F. Storm <storm@cua.dk>
parents:
57287
diff
changeset
|
4796 #endif |
43598
f49377cf2e3c
(Qconnect, Qfailed): New variables.
Kim F. Storm <storm@cua.dk>
parents:
42600
diff
changeset
|
4797 |
1925
3ddb163a9201
* process.c: Make sure we don't miss processes exiting, by having
Jim Blandy <jimb@redhat.com>
parents:
1886
diff
changeset
|
4798 Atemp = input_wait_mask; |
57840
8abbe69dfdb2
(connect_wait_mask, num_pending_connects): Only
Kim F. Storm <storm@cua.dk>
parents:
57287
diff
changeset
|
4799 IF_NON_BLOCKING_CONNECT (Ctemp = connect_wait_mask); |
8abbe69dfdb2
(connect_wait_mask, num_pending_connects): Only
Kim F. Storm <storm@cua.dk>
parents:
57287
diff
changeset
|
4800 |
1925
3ddb163a9201
* process.c: Make sure we don't miss processes exiting, by having
Jim Blandy <jimb@redhat.com>
parents:
1886
diff
changeset
|
4801 EMACS_SET_SECS_USECS (timeout, 0, 0); |
80984
9247e9d47488
(gpm_wait_mask, max_gpm_desc): New variables.
Nick Roberts <nickrob@snap.net.nz>
parents:
77462
diff
changeset
|
4802 if ((select (max (max (max_process_desc, max_keyboard_desc), |
9247e9d47488
(gpm_wait_mask, max_gpm_desc): New variables.
Nick Roberts <nickrob@snap.net.nz>
parents:
77462
diff
changeset
|
4803 max_gpm_desc) + 1, |
49600
23a1cea22d13
Trailing whitespace deleted.
Juanma Barranquero <lekktu@gmail.com>
parents:
49281
diff
changeset
|
4804 &Atemp, |
57840
8abbe69dfdb2
(connect_wait_mask, num_pending_connects): Only
Kim F. Storm <storm@cua.dk>
parents:
57287
diff
changeset
|
4805 #ifdef NON_BLOCKING_CONNECT |
43598
f49377cf2e3c
(Qconnect, Qfailed): New variables.
Kim F. Storm <storm@cua.dk>
parents:
42600
diff
changeset
|
4806 (num_pending_connects > 0 ? &Ctemp : (SELECT_TYPE *)0), |
57840
8abbe69dfdb2
(connect_wait_mask, num_pending_connects): Only
Kim F. Storm <storm@cua.dk>
parents:
57287
diff
changeset
|
4807 #else |
8abbe69dfdb2
(connect_wait_mask, num_pending_connects): Only
Kim F. Storm <storm@cua.dk>
parents:
57287
diff
changeset
|
4808 (SELECT_TYPE *)0, |
8abbe69dfdb2
(connect_wait_mask, num_pending_connects): Only
Kim F. Storm <storm@cua.dk>
parents:
57287
diff
changeset
|
4809 #endif |
43598
f49377cf2e3c
(Qconnect, Qfailed): New variables.
Kim F. Storm <storm@cua.dk>
parents:
42600
diff
changeset
|
4810 (SELECT_TYPE *)0, &timeout) |
11926
40d7e6f04ebe
(create_process, send_process): Add volatile qualifiers.
Karl Heuer <kwzh@gnu.org>
parents:
11845
diff
changeset
|
4811 <= 0)) |
2894
646c5beae647
* process.c (wait_reading_process_input): Undo change of April
Jim Blandy <jimb@redhat.com>
parents:
2893
diff
changeset
|
4812 { |
646c5beae647
* process.c (wait_reading_process_input): Undo change of April
Jim Blandy <jimb@redhat.com>
parents:
2893
diff
changeset
|
4813 /* It's okay for us to do this and then continue with |
5534 | 4814 the loop, since timeout has already been zeroed out. */ |
2894
646c5beae647
* process.c (wait_reading_process_input): Undo change of April
Jim Blandy <jimb@redhat.com>
parents:
2893
diff
changeset
|
4815 clear_waiting_for_input (); |
64977
d26871fb1b7b
(deactivate_process, status_notify, read_process_output)
Kim F. Storm <storm@cua.dk>
parents:
64770
diff
changeset
|
4816 status_notify (NULL); |
104316
bb8ce3c842e7
* process.c (status_notify): Don't perform redisplay.
Chong Yidong <cyd@stupidchicken.com>
parents:
104265
diff
changeset
|
4817 if (do_display) redisplay_preserve_echo_area (13); |
2894
646c5beae647
* process.c (wait_reading_process_input): Undo change of April
Jim Blandy <jimb@redhat.com>
parents:
2893
diff
changeset
|
4818 } |
1925
3ddb163a9201
* process.c: Make sure we don't miss processes exiting, by having
Jim Blandy <jimb@redhat.com>
parents:
1886
diff
changeset
|
4819 } |
3ddb163a9201
* process.c: Make sure we don't miss processes exiting, by having
Jim Blandy <jimb@redhat.com>
parents:
1886
diff
changeset
|
4820 |
43598
f49377cf2e3c
(Qconnect, Qfailed): New variables.
Kim F. Storm <storm@cua.dk>
parents:
42600
diff
changeset
|
4821 /* Don't wait for output from a non-running process. Just |
100824
e5aa6a069f40
(conv_sockaddr_to_lisp): Add workaround for
Andreas Schwab <schwab@suse.de>
parents:
100573
diff
changeset
|
4822 read whatever data has already been received. */ |
69873
2d844bbbccd4
* process.h (struct Lisp_Process): Replace Lisp_Objects `pid',
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
69634
diff
changeset
|
4823 if (wait_proc && wait_proc->raw_status_new) |
1925
3ddb163a9201
* process.c: Make sure we don't miss processes exiting, by having
Jim Blandy <jimb@redhat.com>
parents:
1886
diff
changeset
|
4824 update_status (wait_proc); |
69873
2d844bbbccd4
* process.h (struct Lisp_Process): Replace Lisp_Objects `pid',
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
69634
diff
changeset
|
4825 if (wait_proc |
43598
f49377cf2e3c
(Qconnect, Qfailed): New variables.
Kim F. Storm <storm@cua.dk>
parents:
42600
diff
changeset
|
4826 && ! EQ (wait_proc->status, Qrun) |
f49377cf2e3c
(Qconnect, Qfailed): New variables.
Kim F. Storm <storm@cua.dk>
parents:
42600
diff
changeset
|
4827 && ! EQ (wait_proc->status, Qconnect)) |
2893
4df57953d5d0
* process.c (wait_reading_process_input): Don't forget to call
Jim Blandy <jimb@redhat.com>
parents:
2887
diff
changeset
|
4828 { |
18946
84b78d90cd45
(wait_reading_process_input): Initialize total_read.
Richard M. Stallman <rms@gnu.org>
parents:
18739
diff
changeset
|
4829 int nread, total_nread = 0; |
18267
29c37882ee1f
(wait_reading_process_input): When exiting because
Richard M. Stallman <rms@gnu.org>
parents:
18230
diff
changeset
|
4830 |
2893
4df57953d5d0
* process.c (wait_reading_process_input): Don't forget to call
Jim Blandy <jimb@redhat.com>
parents:
2887
diff
changeset
|
4831 clear_waiting_for_input (); |
18267
29c37882ee1f
(wait_reading_process_input): When exiting because
Richard M. Stallman <rms@gnu.org>
parents:
18230
diff
changeset
|
4832 XSETPROCESS (proc, wait_proc); |
29c37882ee1f
(wait_reading_process_input): When exiting because
Richard M. Stallman <rms@gnu.org>
parents:
18230
diff
changeset
|
4833 |
29c37882ee1f
(wait_reading_process_input): When exiting because
Richard M. Stallman <rms@gnu.org>
parents:
18230
diff
changeset
|
4834 /* Read data from the process, until we exhaust it. */ |
81826
077a1e6fd3f2
(struct Lisp_Process): Turn slots infd, outfd, kill_without_query, pty_flag,
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
80984
diff
changeset
|
4835 while (wait_proc->infd >= 0) |
18946
84b78d90cd45
(wait_reading_process_input): Initialize total_read.
Richard M. Stallman <rms@gnu.org>
parents:
18739
diff
changeset
|
4836 { |
81826
077a1e6fd3f2
(struct Lisp_Process): Turn slots infd, outfd, kill_without_query, pty_flag,
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
80984
diff
changeset
|
4837 nread = read_process_output (proc, wait_proc->infd); |
25894
8bd3e6fbf42f
(wait_reading_process_input): When trying to suck
Gerd Moellmann <gerd@gnu.org>
parents:
25770
diff
changeset
|
4838 |
8bd3e6fbf42f
(wait_reading_process_input): When trying to suck
Gerd Moellmann <gerd@gnu.org>
parents:
25770
diff
changeset
|
4839 if (nread == 0) |
8bd3e6fbf42f
(wait_reading_process_input): When trying to suck
Gerd Moellmann <gerd@gnu.org>
parents:
25770
diff
changeset
|
4840 break; |
8bd3e6fbf42f
(wait_reading_process_input): When trying to suck
Gerd Moellmann <gerd@gnu.org>
parents:
25770
diff
changeset
|
4841 |
100824
e5aa6a069f40
(conv_sockaddr_to_lisp): Add workaround for
Andreas Schwab <schwab@suse.de>
parents:
100573
diff
changeset
|
4842 if (0 < nread) |
e5aa6a069f40
(conv_sockaddr_to_lisp): Add workaround for
Andreas Schwab <schwab@suse.de>
parents:
100573
diff
changeset
|
4843 { |
95387
be7d86474ead
(Faccept_process_output): If `millisec' is non-nil, `seconds' default to 0.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
95216
diff
changeset
|
4844 total_nread += nread; |
be7d86474ead
(Faccept_process_output): If `millisec' is non-nil, `seconds' default to 0.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
95216
diff
changeset
|
4845 got_some_input = 1; |
be7d86474ead
(Faccept_process_output): If `millisec' is non-nil, `seconds' default to 0.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
95216
diff
changeset
|
4846 } |
18946
84b78d90cd45
(wait_reading_process_input): Initialize total_read.
Richard M. Stallman <rms@gnu.org>
parents:
18739
diff
changeset
|
4847 #ifdef EIO |
84b78d90cd45
(wait_reading_process_input): Initialize total_read.
Richard M. Stallman <rms@gnu.org>
parents:
18739
diff
changeset
|
4848 else if (nread == -1 && EIO == errno) |
100824
e5aa6a069f40
(conv_sockaddr_to_lisp): Add workaround for
Andreas Schwab <schwab@suse.de>
parents:
100573
diff
changeset
|
4849 break; |
18946
84b78d90cd45
(wait_reading_process_input): Initialize total_read.
Richard M. Stallman <rms@gnu.org>
parents:
18739
diff
changeset
|
4850 #endif |
25894
8bd3e6fbf42f
(wait_reading_process_input): When trying to suck
Gerd Moellmann <gerd@gnu.org>
parents:
25770
diff
changeset
|
4851 #ifdef EAGAIN |
8bd3e6fbf42f
(wait_reading_process_input): When trying to suck
Gerd Moellmann <gerd@gnu.org>
parents:
25770
diff
changeset
|
4852 else if (nread == -1 && EAGAIN == errno) |
100824
e5aa6a069f40
(conv_sockaddr_to_lisp): Add workaround for
Andreas Schwab <schwab@suse.de>
parents:
100573
diff
changeset
|
4853 break; |
25894
8bd3e6fbf42f
(wait_reading_process_input): When trying to suck
Gerd Moellmann <gerd@gnu.org>
parents:
25770
diff
changeset
|
4854 #endif |
8bd3e6fbf42f
(wait_reading_process_input): When trying to suck
Gerd Moellmann <gerd@gnu.org>
parents:
25770
diff
changeset
|
4855 #ifdef EWOULDBLOCK |
8bd3e6fbf42f
(wait_reading_process_input): When trying to suck
Gerd Moellmann <gerd@gnu.org>
parents:
25770
diff
changeset
|
4856 else if (nread == -1 && EWOULDBLOCK == errno) |
100824
e5aa6a069f40
(conv_sockaddr_to_lisp): Add workaround for
Andreas Schwab <schwab@suse.de>
parents:
100573
diff
changeset
|
4857 break; |
25894
8bd3e6fbf42f
(wait_reading_process_input): When trying to suck
Gerd Moellmann <gerd@gnu.org>
parents:
25770
diff
changeset
|
4858 #endif |
18946
84b78d90cd45
(wait_reading_process_input): Initialize total_read.
Richard M. Stallman <rms@gnu.org>
parents:
18739
diff
changeset
|
4859 } |
18267
29c37882ee1f
(wait_reading_process_input): When exiting because
Richard M. Stallman <rms@gnu.org>
parents:
18230
diff
changeset
|
4860 if (total_nread > 0 && do_display) |
35336
002c02db42d3
Call redisplay_preserve_echo_area with additional arg.
Gerd Moellmann <gerd@gnu.org>
parents:
34660
diff
changeset
|
4861 redisplay_preserve_echo_area (10); |
18267
29c37882ee1f
(wait_reading_process_input): When exiting because
Richard M. Stallman <rms@gnu.org>
parents:
18230
diff
changeset
|
4862 |
2893
4df57953d5d0
* process.c (wait_reading_process_input): Don't forget to call
Jim Blandy <jimb@redhat.com>
parents:
2887
diff
changeset
|
4863 break; |
4df57953d5d0
* process.c (wait_reading_process_input): Don't forget to call
Jim Blandy <jimb@redhat.com>
parents:
2887
diff
changeset
|
4864 } |
1925
3ddb163a9201
* process.c: Make sure we don't miss processes exiting, by having
Jim Blandy <jimb@redhat.com>
parents:
1886
diff
changeset
|
4865 |
578 | 4866 /* Wait till there is something to do */ |
4867 | |
56716
c126b8b6a314
* process.c (wait_reading_process_input): Clean up.
Kim F. Storm <storm@cua.dk>
parents:
56713
diff
changeset
|
4868 if (wait_proc && just_wait_proc) |
56701
e327231e4361
(Faccept_process_output): Add arg JUST-THIS-ONE;
Kim F. Storm <storm@cua.dk>
parents:
56700
diff
changeset
|
4869 { |
81826
077a1e6fd3f2
(struct Lisp_Process): Turn slots infd, outfd, kill_without_query, pty_flag,
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
80984
diff
changeset
|
4870 if (wait_proc->infd < 0) /* Terminated */ |
56716
c126b8b6a314
* process.c (wait_reading_process_input): Clean up.
Kim F. Storm <storm@cua.dk>
parents:
56713
diff
changeset
|
4871 break; |
81826
077a1e6fd3f2
(struct Lisp_Process): Turn slots infd, outfd, kill_without_query, pty_flag,
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
80984
diff
changeset
|
4872 FD_SET (wait_proc->infd, &Available); |
57840
8abbe69dfdb2
(connect_wait_mask, num_pending_connects): Only
Kim F. Storm <storm@cua.dk>
parents:
57287
diff
changeset
|
4873 check_delay = 0; |
8abbe69dfdb2
(connect_wait_mask, num_pending_connects): Only
Kim F. Storm <storm@cua.dk>
parents:
57287
diff
changeset
|
4874 IF_NON_BLOCKING_CONNECT (check_connect = 0); |
56701
e327231e4361
(Faccept_process_output): Add arg JUST-THIS-ONE;
Kim F. Storm <storm@cua.dk>
parents:
56700
diff
changeset
|
4875 } |
e327231e4361
(Faccept_process_output): Add arg JUST-THIS-ONE;
Kim F. Storm <storm@cua.dk>
parents:
56700
diff
changeset
|
4876 else if (!NILP (wait_for_cell)) |
43598
f49377cf2e3c
(Qconnect, Qfailed): New variables.
Kim F. Storm <storm@cua.dk>
parents:
42600
diff
changeset
|
4877 { |
f49377cf2e3c
(Qconnect, Qfailed): New variables.
Kim F. Storm <storm@cua.dk>
parents:
42600
diff
changeset
|
4878 Available = non_process_wait_mask; |
57840
8abbe69dfdb2
(connect_wait_mask, num_pending_connects): Only
Kim F. Storm <storm@cua.dk>
parents:
57287
diff
changeset
|
4879 check_delay = 0; |
8abbe69dfdb2
(connect_wait_mask, num_pending_connects): Only
Kim F. Storm <storm@cua.dk>
parents:
57287
diff
changeset
|
4880 IF_NON_BLOCKING_CONNECT (check_connect = 0); |
43598
f49377cf2e3c
(Qconnect, Qfailed): New variables.
Kim F. Storm <storm@cua.dk>
parents:
42600
diff
changeset
|
4881 } |
9686
cd788aa8cb2a
Handle multiple keyboard input descriptors.
Richard M. Stallman <rms@gnu.org>
parents:
9334
diff
changeset
|
4882 else |
43598
f49377cf2e3c
(Qconnect, Qfailed): New variables.
Kim F. Storm <storm@cua.dk>
parents:
42600
diff
changeset
|
4883 { |
56716
c126b8b6a314
* process.c (wait_reading_process_input): Clean up.
Kim F. Storm <storm@cua.dk>
parents:
56713
diff
changeset
|
4884 if (! read_kbd) |
43598
f49377cf2e3c
(Qconnect, Qfailed): New variables.
Kim F. Storm <storm@cua.dk>
parents:
42600
diff
changeset
|
4885 Available = non_keyboard_wait_mask; |
f49377cf2e3c
(Qconnect, Qfailed): New variables.
Kim F. Storm <storm@cua.dk>
parents:
42600
diff
changeset
|
4886 else |
f49377cf2e3c
(Qconnect, Qfailed): New variables.
Kim F. Storm <storm@cua.dk>
parents:
42600
diff
changeset
|
4887 Available = input_wait_mask; |
57840
8abbe69dfdb2
(connect_wait_mask, num_pending_connects): Only
Kim F. Storm <storm@cua.dk>
parents:
57287
diff
changeset
|
4888 IF_NON_BLOCKING_CONNECT (check_connect = (num_pending_connects > 0)); |
53835
ad9da392f358
(wait_reading_process_input): Don't do adaptive read
Kim F. Storm <storm@cua.dk>
parents:
53732
diff
changeset
|
4889 check_delay = wait_channel >= 0 ? 0 : process_output_delay_count; |
43598
f49377cf2e3c
(Qconnect, Qfailed): New variables.
Kim F. Storm <storm@cua.dk>
parents:
42600
diff
changeset
|
4890 } |
578 | 4891 |
765 | 4892 /* If frame size has changed or the window is newly mapped, |
648 | 4893 redisplay now, before we start to wait. There is a race |
4894 condition here; if a SIGIO arrives between now and the select | |
1655
05e84e6c7d04
Tue Dec 1 23:42:25 1992 Jim Blandy (jimb@totoro.cs.oberlin.edu)
Jim Blandy <jimb@redhat.com>
parents:
1594
diff
changeset
|
4895 and indicates that a frame is trashed, the select may block |
05e84e6c7d04
Tue Dec 1 23:42:25 1992 Jim Blandy (jimb@totoro.cs.oberlin.edu)
Jim Blandy <jimb@redhat.com>
parents:
1594
diff
changeset
|
4896 displaying a trashed screen. */ |
6429
1dbe24a029fd
(wait_reading_process_input, both versions): Don't call
Richard M. Stallman <rms@gnu.org>
parents:
6393
diff
changeset
|
4897 if (frame_garbaged && do_display) |
11728
affed1766d34
(wait_reading_process_input): Don't call prepare_menu_bars.
Richard M. Stallman <rms@gnu.org>
parents:
11695
diff
changeset
|
4898 { |
affed1766d34
(wait_reading_process_input): Don't call prepare_menu_bars.
Richard M. Stallman <rms@gnu.org>
parents:
11695
diff
changeset
|
4899 clear_waiting_for_input (); |
35336
002c02db42d3
Call redisplay_preserve_echo_area with additional arg.
Gerd Moellmann <gerd@gnu.org>
parents:
34660
diff
changeset
|
4900 redisplay_preserve_echo_area (11); |
56716
c126b8b6a314
* process.c (wait_reading_process_input): Clean up.
Kim F. Storm <storm@cua.dk>
parents:
56713
diff
changeset
|
4901 if (read_kbd < 0) |
11744
52a2c8e81bb7
(wait_reading_process_input): Pass arg in new call to set_waiting_for_input.
Richard M. Stallman <rms@gnu.org>
parents:
11728
diff
changeset
|
4902 set_waiting_for_input (&timeout); |
11728
affed1766d34
(wait_reading_process_input): Don't call prepare_menu_bars.
Richard M. Stallman <rms@gnu.org>
parents:
11695
diff
changeset
|
4903 } |
648 | 4904 |
43598
f49377cf2e3c
(Qconnect, Qfailed): New variables.
Kim F. Storm <storm@cua.dk>
parents:
42600
diff
changeset
|
4905 no_avail = 0; |
56716
c126b8b6a314
* process.c (wait_reading_process_input): Clean up.
Kim F. Storm <storm@cua.dk>
parents:
56713
diff
changeset
|
4906 if (read_kbd && detect_input_pending ()) |
15021
af36df262fc5
(wait_reading_process_input) [!subprocesses]: Handle
Richard M. Stallman <rms@gnu.org>
parents:
14998
diff
changeset
|
4907 { |
af36df262fc5
(wait_reading_process_input) [!subprocesses]: Handle
Richard M. Stallman <rms@gnu.org>
parents:
14998
diff
changeset
|
4908 nfds = 0; |
43598
f49377cf2e3c
(Qconnect, Qfailed): New variables.
Kim F. Storm <storm@cua.dk>
parents:
42600
diff
changeset
|
4909 no_avail = 1; |
15021
af36df262fc5
(wait_reading_process_input) [!subprocesses]: Handle
Richard M. Stallman <rms@gnu.org>
parents:
14998
diff
changeset
|
4910 } |
af36df262fc5
(wait_reading_process_input) [!subprocesses]: Handle
Richard M. Stallman <rms@gnu.org>
parents:
14998
diff
changeset
|
4911 else |
43598
f49377cf2e3c
(Qconnect, Qfailed): New variables.
Kim F. Storm <storm@cua.dk>
parents:
42600
diff
changeset
|
4912 { |
57840
8abbe69dfdb2
(connect_wait_mask, num_pending_connects): Only
Kim F. Storm <storm@cua.dk>
parents:
57287
diff
changeset
|
4913 #ifdef NON_BLOCKING_CONNECT |
43598
f49377cf2e3c
(Qconnect, Qfailed): New variables.
Kim F. Storm <storm@cua.dk>
parents:
42600
diff
changeset
|
4914 if (check_connect) |
f49377cf2e3c
(Qconnect, Qfailed): New variables.
Kim F. Storm <storm@cua.dk>
parents:
42600
diff
changeset
|
4915 Connecting = connect_wait_mask; |
57840
8abbe69dfdb2
(connect_wait_mask, num_pending_connects): Only
Kim F. Storm <storm@cua.dk>
parents:
57287
diff
changeset
|
4916 #endif |
53472
1a5fe79d27f3
(ADAPTIVE_READ_BUFFERING): New conditional.
Kim F. Storm <storm@cua.dk>
parents:
53072
diff
changeset
|
4917 |
1a5fe79d27f3
(ADAPTIVE_READ_BUFFERING): New conditional.
Kim F. Storm <storm@cua.dk>
parents:
53072
diff
changeset
|
4918 #ifdef ADAPTIVE_READ_BUFFERING |
63114
6ef9e44e50d7
Improve commentary for adaptive read buffering.
Kim F. Storm <storm@cua.dk>
parents:
62604
diff
changeset
|
4919 /* Set the timeout for adaptive read buffering if any |
81826
077a1e6fd3f2
(struct Lisp_Process): Turn slots infd, outfd, kill_without_query, pty_flag,
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
80984
diff
changeset
|
4920 process has non-zero read_output_skip and non-zero |
63114
6ef9e44e50d7
Improve commentary for adaptive read buffering.
Kim F. Storm <storm@cua.dk>
parents:
62604
diff
changeset
|
4921 read_output_delay, and we are not reading output for a |
6ef9e44e50d7
Improve commentary for adaptive read buffering.
Kim F. Storm <storm@cua.dk>
parents:
62604
diff
changeset
|
4922 specific wait_channel. It is not executed if |
6ef9e44e50d7
Improve commentary for adaptive read buffering.
Kim F. Storm <storm@cua.dk>
parents:
62604
diff
changeset
|
4923 Vprocess_adaptive_read_buffering is nil. */ |
53472
1a5fe79d27f3
(ADAPTIVE_READ_BUFFERING): New conditional.
Kim F. Storm <storm@cua.dk>
parents:
53072
diff
changeset
|
4924 if (process_output_skip && check_delay > 0) |
1a5fe79d27f3
(ADAPTIVE_READ_BUFFERING): New conditional.
Kim F. Storm <storm@cua.dk>
parents:
53072
diff
changeset
|
4925 { |
1a5fe79d27f3
(ADAPTIVE_READ_BUFFERING): New conditional.
Kim F. Storm <storm@cua.dk>
parents:
53072
diff
changeset
|
4926 int usecs = EMACS_USECS (timeout); |
1a5fe79d27f3
(ADAPTIVE_READ_BUFFERING): New conditional.
Kim F. Storm <storm@cua.dk>
parents:
53072
diff
changeset
|
4927 if (EMACS_SECS (timeout) > 0 || usecs > READ_OUTPUT_DELAY_MAX) |
1a5fe79d27f3
(ADAPTIVE_READ_BUFFERING): New conditional.
Kim F. Storm <storm@cua.dk>
parents:
53072
diff
changeset
|
4928 usecs = READ_OUTPUT_DELAY_MAX; |
1a5fe79d27f3
(ADAPTIVE_READ_BUFFERING): New conditional.
Kim F. Storm <storm@cua.dk>
parents:
53072
diff
changeset
|
4929 for (channel = 0; check_delay > 0 && channel <= max_process_desc; channel++) |
1a5fe79d27f3
(ADAPTIVE_READ_BUFFERING): New conditional.
Kim F. Storm <storm@cua.dk>
parents:
53072
diff
changeset
|
4930 { |
1a5fe79d27f3
(ADAPTIVE_READ_BUFFERING): New conditional.
Kim F. Storm <storm@cua.dk>
parents:
53072
diff
changeset
|
4931 proc = chan_process[channel]; |
1a5fe79d27f3
(ADAPTIVE_READ_BUFFERING): New conditional.
Kim F. Storm <storm@cua.dk>
parents:
53072
diff
changeset
|
4932 if (NILP (proc)) |
1a5fe79d27f3
(ADAPTIVE_READ_BUFFERING): New conditional.
Kim F. Storm <storm@cua.dk>
parents:
53072
diff
changeset
|
4933 continue; |
63114
6ef9e44e50d7
Improve commentary for adaptive read buffering.
Kim F. Storm <storm@cua.dk>
parents:
62604
diff
changeset
|
4934 /* Find minimum non-zero read_output_delay among the |
81826
077a1e6fd3f2
(struct Lisp_Process): Turn slots infd, outfd, kill_without_query, pty_flag,
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
80984
diff
changeset
|
4935 processes with non-zero read_output_skip. */ |
077a1e6fd3f2
(struct Lisp_Process): Turn slots infd, outfd, kill_without_query, pty_flag,
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
80984
diff
changeset
|
4936 if (XPROCESS (proc)->read_output_delay > 0) |
53472
1a5fe79d27f3
(ADAPTIVE_READ_BUFFERING): New conditional.
Kim F. Storm <storm@cua.dk>
parents:
53072
diff
changeset
|
4937 { |
1a5fe79d27f3
(ADAPTIVE_READ_BUFFERING): New conditional.
Kim F. Storm <storm@cua.dk>
parents:
53072
diff
changeset
|
4938 check_delay--; |
81826
077a1e6fd3f2
(struct Lisp_Process): Turn slots infd, outfd, kill_without_query, pty_flag,
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
80984
diff
changeset
|
4939 if (!XPROCESS (proc)->read_output_skip) |
53472
1a5fe79d27f3
(ADAPTIVE_READ_BUFFERING): New conditional.
Kim F. Storm <storm@cua.dk>
parents:
53072
diff
changeset
|
4940 continue; |
1a5fe79d27f3
(ADAPTIVE_READ_BUFFERING): New conditional.
Kim F. Storm <storm@cua.dk>
parents:
53072
diff
changeset
|
4941 FD_CLR (channel, &Available); |
81826
077a1e6fd3f2
(struct Lisp_Process): Turn slots infd, outfd, kill_without_query, pty_flag,
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
80984
diff
changeset
|
4942 XPROCESS (proc)->read_output_skip = 0; |
077a1e6fd3f2
(struct Lisp_Process): Turn slots infd, outfd, kill_without_query, pty_flag,
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
80984
diff
changeset
|
4943 if (XPROCESS (proc)->read_output_delay < usecs) |
077a1e6fd3f2
(struct Lisp_Process): Turn slots infd, outfd, kill_without_query, pty_flag,
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
80984
diff
changeset
|
4944 usecs = XPROCESS (proc)->read_output_delay; |
53472
1a5fe79d27f3
(ADAPTIVE_READ_BUFFERING): New conditional.
Kim F. Storm <storm@cua.dk>
parents:
53072
diff
changeset
|
4945 } |
1a5fe79d27f3
(ADAPTIVE_READ_BUFFERING): New conditional.
Kim F. Storm <storm@cua.dk>
parents:
53072
diff
changeset
|
4946 } |
1a5fe79d27f3
(ADAPTIVE_READ_BUFFERING): New conditional.
Kim F. Storm <storm@cua.dk>
parents:
53072
diff
changeset
|
4947 EMACS_SET_SECS_USECS (timeout, 0, usecs); |
1a5fe79d27f3
(ADAPTIVE_READ_BUFFERING): New conditional.
Kim F. Storm <storm@cua.dk>
parents:
53072
diff
changeset
|
4948 process_output_skip = 0; |
1a5fe79d27f3
(ADAPTIVE_READ_BUFFERING): New conditional.
Kim F. Storm <storm@cua.dk>
parents:
53072
diff
changeset
|
4949 } |
1a5fe79d27f3
(ADAPTIVE_READ_BUFFERING): New conditional.
Kim F. Storm <storm@cua.dk>
parents:
53072
diff
changeset
|
4950 #endif |
106186
9b6f45dd8386
Use a select wrapper around the GLib event loop, thus taking into account GLib
Jan Djärv <jan.h.d@swipnet.se>
parents:
106185
diff
changeset
|
4951 #if defined (USE_GTK) || defined (HAVE_GCONF) |
9b6f45dd8386
Use a select wrapper around the GLib event loop, thus taking into account GLib
Jan Djärv <jan.h.d@swipnet.se>
parents:
106185
diff
changeset
|
4952 nfds = xg_select |
9b6f45dd8386
Use a select wrapper around the GLib event loop, thus taking into account GLib
Jan Djärv <jan.h.d@swipnet.se>
parents:
106185
diff
changeset
|
4953 #elif defined (HAVE_NS) |
100824
e5aa6a069f40
(conv_sockaddr_to_lisp): Add workaround for
Andreas Schwab <schwab@suse.de>
parents:
100573
diff
changeset
|
4954 nfds = ns_select |
96675
d45acf0c8d23
merging Emacs.app (NeXTstep port)
Adrian Robert <Adrian.B.Robert@gmail.com>
parents:
96620
diff
changeset
|
4955 #else |
100824
e5aa6a069f40
(conv_sockaddr_to_lisp): Add workaround for
Andreas Schwab <schwab@suse.de>
parents:
100573
diff
changeset
|
4956 nfds = select |
e5aa6a069f40
(conv_sockaddr_to_lisp): Add workaround for
Andreas Schwab <schwab@suse.de>
parents:
100573
diff
changeset
|
4957 #endif |
e5aa6a069f40
(conv_sockaddr_to_lisp): Add workaround for
Andreas Schwab <schwab@suse.de>
parents:
100573
diff
changeset
|
4958 (max (max (max_process_desc, max_keyboard_desc), |
80984
9247e9d47488
(gpm_wait_mask, max_gpm_desc): New variables.
Nick Roberts <nickrob@snap.net.nz>
parents:
77462
diff
changeset
|
4959 max_gpm_desc) + 1, |
49600
23a1cea22d13
Trailing whitespace deleted.
Juanma Barranquero <lekktu@gmail.com>
parents:
49281
diff
changeset
|
4960 &Available, |
57840
8abbe69dfdb2
(connect_wait_mask, num_pending_connects): Only
Kim F. Storm <storm@cua.dk>
parents:
57287
diff
changeset
|
4961 #ifdef NON_BLOCKING_CONNECT |
43598
f49377cf2e3c
(Qconnect, Qfailed): New variables.
Kim F. Storm <storm@cua.dk>
parents:
42600
diff
changeset
|
4962 (check_connect ? &Connecting : (SELECT_TYPE *)0), |
57840
8abbe69dfdb2
(connect_wait_mask, num_pending_connects): Only
Kim F. Storm <storm@cua.dk>
parents:
57287
diff
changeset
|
4963 #else |
8abbe69dfdb2
(connect_wait_mask, num_pending_connects): Only
Kim F. Storm <storm@cua.dk>
parents:
57287
diff
changeset
|
4964 (SELECT_TYPE *)0, |
8abbe69dfdb2
(connect_wait_mask, num_pending_connects): Only
Kim F. Storm <storm@cua.dk>
parents:
57287
diff
changeset
|
4965 #endif |
43598
f49377cf2e3c
(Qconnect, Qfailed): New variables.
Kim F. Storm <storm@cua.dk>
parents:
42600
diff
changeset
|
4966 (SELECT_TYPE *)0, &timeout); |
f49377cf2e3c
(Qconnect, Qfailed): New variables.
Kim F. Storm <storm@cua.dk>
parents:
42600
diff
changeset
|
4967 } |
588 | 4968 |
578 | 4969 xerrno = errno; |
4970 | |
4971 /* Make C-g and alarm signals set flags again */ | |
4972 clear_waiting_for_input (); | |
4973 | |
4974 /* If we woke up due to SIGWINCH, actually change size now. */ | |
25356
5db69f7aadca
Call change_frame_size and do_pending_window_change with
Gerd Moellmann <gerd@gnu.org>
parents:
25262
diff
changeset
|
4975 do_pending_window_change (0); |
578 | 4976 |
14458
2bb4652305c1
(wait_reading_process_input): If select times out,
Richard M. Stallman <rms@gnu.org>
parents:
14405
diff
changeset
|
4977 if (time_limit && nfds == 0 && ! timeout_reduced_for_timers) |
2bb4652305c1
(wait_reading_process_input): If select times out,
Richard M. Stallman <rms@gnu.org>
parents:
14405
diff
changeset
|
4978 /* We wanted the full specified time, so return now. */ |
578 | 4979 break; |
4980 if (nfds < 0) | |
4981 { | |
4982 if (xerrno == EINTR) | |
43598
f49377cf2e3c
(Qconnect, Qfailed): New variables.
Kim F. Storm <storm@cua.dk>
parents:
42600
diff
changeset
|
4983 no_avail = 1; |
578 | 4984 else if (xerrno == EBADF) |
4985 { | |
4986 #ifdef AIX | |
4987 /* AIX doesn't handle PTY closure the same way BSD does. On AIX, | |
4988 the child's closure of the pts gives the parent a SIGHUP, and | |
4989 the ptc file descriptor is automatically closed, | |
4990 yielding EBADF here or at select() call above. | |
4991 So, SIGHUP is ignored (see def of PTY_TTY_NAME_SPRINTF | |
5534 | 4992 in m/ibmrt-aix.h), and here we just ignore the select error. |
578 | 4993 Cleanup occurs c/o status_notify after SIGCLD. */ |
43598
f49377cf2e3c
(Qconnect, Qfailed): New variables.
Kim F. Storm <storm@cua.dk>
parents:
42600
diff
changeset
|
4994 no_avail = 1; /* Cannot depend on values returned */ |
578 | 4995 #else |
4996 abort (); | |
4997 #endif | |
4998 } | |
4999 else | |
26088
b7aa6ac26872
Add support for large files, 64-bit Solaris, system locale codings.
Paul Eggert <eggert@twinsun.com>
parents:
26019
diff
changeset
|
5000 error ("select error: %s", emacs_strerror (xerrno)); |
578 | 5001 } |
43598
f49377cf2e3c
(Qconnect, Qfailed): New variables.
Kim F. Storm <storm@cua.dk>
parents:
42600
diff
changeset
|
5002 |
f49377cf2e3c
(Qconnect, Qfailed): New variables.
Kim F. Storm <storm@cua.dk>
parents:
42600
diff
changeset
|
5003 if (no_avail) |
f49377cf2e3c
(Qconnect, Qfailed): New variables.
Kim F. Storm <storm@cua.dk>
parents:
42600
diff
changeset
|
5004 { |
f49377cf2e3c
(Qconnect, Qfailed): New variables.
Kim F. Storm <storm@cua.dk>
parents:
42600
diff
changeset
|
5005 FD_ZERO (&Available); |
57840
8abbe69dfdb2
(connect_wait_mask, num_pending_connects): Only
Kim F. Storm <storm@cua.dk>
parents:
57287
diff
changeset
|
5006 IF_NON_BLOCKING_CONNECT (check_connect = 0); |
43598
f49377cf2e3c
(Qconnect, Qfailed): New variables.
Kim F. Storm <storm@cua.dk>
parents:
42600
diff
changeset
|
5007 } |
f49377cf2e3c
(Qconnect, Qfailed): New variables.
Kim F. Storm <storm@cua.dk>
parents:
42600
diff
changeset
|
5008 |
18378
22cd8d7dd5aa
(wait_reading_process_input): Don't check for
Richard M. Stallman <rms@gnu.org>
parents:
18329
diff
changeset
|
5009 #if 0 /* When polling is used, interrupt_input is 0, |
22cd8d7dd5aa
(wait_reading_process_input): Don't check for
Richard M. Stallman <rms@gnu.org>
parents:
18329
diff
changeset
|
5010 so get_input_pending should read the input. |
22cd8d7dd5aa
(wait_reading_process_input): Don't check for
Richard M. Stallman <rms@gnu.org>
parents:
18329
diff
changeset
|
5011 So this should not be needed. */ |
22cd8d7dd5aa
(wait_reading_process_input): Don't check for
Richard M. Stallman <rms@gnu.org>
parents:
18329
diff
changeset
|
5012 /* If we are using polling for input, |
22cd8d7dd5aa
(wait_reading_process_input): Don't check for
Richard M. Stallman <rms@gnu.org>
parents:
18329
diff
changeset
|
5013 and we see input available, make it get read now. |
22cd8d7dd5aa
(wait_reading_process_input): Don't check for
Richard M. Stallman <rms@gnu.org>
parents:
18329
diff
changeset
|
5014 Otherwise it might not actually get read for a second. |
56728
1686b397ef16
(wait_reading_process_output): Rename from
Kim F. Storm <storm@cua.dk>
parents:
56716
diff
changeset
|
5015 And on hpux, since we turn off polling in wait_reading_process_output, |
18378
22cd8d7dd5aa
(wait_reading_process_input): Don't check for
Richard M. Stallman <rms@gnu.org>
parents:
18329
diff
changeset
|
5016 it might never get read at all if we don't spend much time |
56728
1686b397ef16
(wait_reading_process_output): Rename from
Kim F. Storm <storm@cua.dk>
parents:
56716
diff
changeset
|
5017 outside of wait_reading_process_output. */ |
56716
c126b8b6a314
* process.c (wait_reading_process_input): Clean up.
Kim F. Storm <storm@cua.dk>
parents:
56713
diff
changeset
|
5018 if (read_kbd && interrupt_input |
18378
22cd8d7dd5aa
(wait_reading_process_input): Don't check for
Richard M. Stallman <rms@gnu.org>
parents:
18329
diff
changeset
|
5019 && keyboard_bit_set (&Available) |
22cd8d7dd5aa
(wait_reading_process_input): Don't check for
Richard M. Stallman <rms@gnu.org>
parents:
18329
diff
changeset
|
5020 && input_polling_used ()) |
22cd8d7dd5aa
(wait_reading_process_input): Don't check for
Richard M. Stallman <rms@gnu.org>
parents:
18329
diff
changeset
|
5021 kill (getpid (), SIGALRM); |
22cd8d7dd5aa
(wait_reading_process_input): Don't check for
Richard M. Stallman <rms@gnu.org>
parents:
18329
diff
changeset
|
5022 #endif |
22cd8d7dd5aa
(wait_reading_process_input): Don't check for
Richard M. Stallman <rms@gnu.org>
parents:
18329
diff
changeset
|
5023 |
578 | 5024 /* Check for keyboard input */ |
5025 /* If there is any, return immediately | |
5026 to give it higher priority than subprocesses */ | |
5027 | |
56716
c126b8b6a314
* process.c (wait_reading_process_input): Clean up.
Kim F. Storm <storm@cua.dk>
parents:
56713
diff
changeset
|
5028 if (read_kbd != 0) |
14613 | 5029 { |
37398
756d2f4e4058
(wait_reading_process_input): Call
Gerd Moellmann <gerd@gnu.org>
parents:
36659
diff
changeset
|
5030 int old_timers_run = timers_run; |
37465
f790d83ea743
(wait_reading_process_input): Call
Gerd Moellmann <gerd@gnu.org>
parents:
37413
diff
changeset
|
5031 struct buffer *old_buffer = current_buffer; |
79807
6292ea8947eb
Chong Yidong <cyd at stupidchicken.com>
Glenn Morris <rgm@gnu.org>
parents:
79759
diff
changeset
|
5032 Lisp_Object old_window = selected_window; |
37398
756d2f4e4058
(wait_reading_process_input): Call
Gerd Moellmann <gerd@gnu.org>
parents:
36659
diff
changeset
|
5033 int leave = 0; |
49600
23a1cea22d13
Trailing whitespace deleted.
Juanma Barranquero <lekktu@gmail.com>
parents:
49281
diff
changeset
|
5034 |
14758
849458c13c0c
(wait_reading_process_input):
Richard M. Stallman <rms@gnu.org>
parents:
14736
diff
changeset
|
5035 if (detect_input_pending_run_timers (do_display)) |
37398
756d2f4e4058
(wait_reading_process_input): Call
Gerd Moellmann <gerd@gnu.org>
parents:
36659
diff
changeset
|
5036 { |
756d2f4e4058
(wait_reading_process_input): Call
Gerd Moellmann <gerd@gnu.org>
parents:
36659
diff
changeset
|
5037 swallow_events (do_display); |
756d2f4e4058
(wait_reading_process_input): Call
Gerd Moellmann <gerd@gnu.org>
parents:
36659
diff
changeset
|
5038 if (detect_input_pending_run_timers (do_display)) |
756d2f4e4058
(wait_reading_process_input): Call
Gerd Moellmann <gerd@gnu.org>
parents:
36659
diff
changeset
|
5039 leave = 1; |
756d2f4e4058
(wait_reading_process_input): Call
Gerd Moellmann <gerd@gnu.org>
parents:
36659
diff
changeset
|
5040 } |
756d2f4e4058
(wait_reading_process_input): Call
Gerd Moellmann <gerd@gnu.org>
parents:
36659
diff
changeset
|
5041 |
756d2f4e4058
(wait_reading_process_input): Call
Gerd Moellmann <gerd@gnu.org>
parents:
36659
diff
changeset
|
5042 /* If a timer has run, this might have changed buffers |
756d2f4e4058
(wait_reading_process_input): Call
Gerd Moellmann <gerd@gnu.org>
parents:
36659
diff
changeset
|
5043 an alike. Make read_key_sequence aware of that. */ |
756d2f4e4058
(wait_reading_process_input): Call
Gerd Moellmann <gerd@gnu.org>
parents:
36659
diff
changeset
|
5044 if (timers_run != old_timers_run |
37465
f790d83ea743
(wait_reading_process_input): Call
Gerd Moellmann <gerd@gnu.org>
parents:
37413
diff
changeset
|
5045 && waiting_for_user_input_p == -1 |
79807
6292ea8947eb
Chong Yidong <cyd at stupidchicken.com>
Glenn Morris <rgm@gnu.org>
parents:
79759
diff
changeset
|
5046 && (old_buffer != current_buffer |
6292ea8947eb
Chong Yidong <cyd at stupidchicken.com>
Glenn Morris <rgm@gnu.org>
parents:
79759
diff
changeset
|
5047 || !EQ (old_window, selected_window))) |
37398
756d2f4e4058
(wait_reading_process_input): Call
Gerd Moellmann <gerd@gnu.org>
parents:
36659
diff
changeset
|
5048 record_asynch_buffer_change (); |
756d2f4e4058
(wait_reading_process_input): Call
Gerd Moellmann <gerd@gnu.org>
parents:
36659
diff
changeset
|
5049 |
756d2f4e4058
(wait_reading_process_input): Call
Gerd Moellmann <gerd@gnu.org>
parents:
36659
diff
changeset
|
5050 if (leave) |
14613 | 5051 break; |
49600
23a1cea22d13
Trailing whitespace deleted.
Juanma Barranquero <lekktu@gmail.com>
parents:
49281
diff
changeset
|
5052 } |
23a1cea22d13
Trailing whitespace deleted.
Juanma Barranquero <lekktu@gmail.com>
parents:
49281
diff
changeset
|
5053 |
18230
2f1f942f25ca
(wait_reading_process_input): Return if unread events appear.
Richard M. Stallman <rms@gnu.org>
parents:
18183
diff
changeset
|
5054 /* If there is unread keyboard input, also return. */ |
56716
c126b8b6a314
* process.c (wait_reading_process_input): Clean up.
Kim F. Storm <storm@cua.dk>
parents:
56713
diff
changeset
|
5055 if (read_kbd != 0 |
18230
2f1f942f25ca
(wait_reading_process_input): Return if unread events appear.
Richard M. Stallman <rms@gnu.org>
parents:
18183
diff
changeset
|
5056 && requeued_events_pending_p ()) |
2f1f942f25ca
(wait_reading_process_input): Return if unread events appear.
Richard M. Stallman <rms@gnu.org>
parents:
18183
diff
changeset
|
5057 break; |
2f1f942f25ca
(wait_reading_process_input): Return if unread events appear.
Richard M. Stallman <rms@gnu.org>
parents:
18183
diff
changeset
|
5058 |
19053
7b5642657857
(read_process_output): Don't call setup_coding_system
Richard M. Stallman <rms@gnu.org>
parents:
18974
diff
changeset
|
5059 /* If we are not checking for keyboard input now, |
7b5642657857
(read_process_output): Don't call setup_coding_system
Richard M. Stallman <rms@gnu.org>
parents:
18974
diff
changeset
|
5060 do process events (but don't run any timers). |
7b5642657857
(read_process_output): Don't call setup_coding_system
Richard M. Stallman <rms@gnu.org>
parents:
18974
diff
changeset
|
5061 This is so that X events will be processed. |
18492
668304de6f92
(wait_reading_process_input): If wait_for_cell,
Richard M. Stallman <rms@gnu.org>
parents:
18378
diff
changeset
|
5062 Otherwise they may have to wait until polling takes place. |
19053
7b5642657857
(read_process_output): Don't call setup_coding_system
Richard M. Stallman <rms@gnu.org>
parents:
18974
diff
changeset
|
5063 That would causes delays in pasting selections, for example. |
7b5642657857
(read_process_output): Don't call setup_coding_system
Richard M. Stallman <rms@gnu.org>
parents:
18974
diff
changeset
|
5064 |
7b5642657857
(read_process_output): Don't call setup_coding_system
Richard M. Stallman <rms@gnu.org>
parents:
18974
diff
changeset
|
5065 (We used to do this only if wait_for_cell.) */ |
56716
c126b8b6a314
* process.c (wait_reading_process_input): Clean up.
Kim F. Storm <storm@cua.dk>
parents:
56713
diff
changeset
|
5066 if (read_kbd == 0 && detect_input_pending ()) |
15064
fb0f2804c34a
(wait_reading_process_input, both definitions):
Richard M. Stallman <rms@gnu.org>
parents:
15025
diff
changeset
|
5067 { |
fb0f2804c34a
(wait_reading_process_input, both definitions):
Richard M. Stallman <rms@gnu.org>
parents:
15025
diff
changeset
|
5068 swallow_events (do_display); |
18492
668304de6f92
(wait_reading_process_input): If wait_for_cell,
Richard M. Stallman <rms@gnu.org>
parents:
18378
diff
changeset
|
5069 #if 0 /* Exiting when read_kbd doesn't request that seems wrong, though. */ |
15064
fb0f2804c34a
(wait_reading_process_input, both definitions):
Richard M. Stallman <rms@gnu.org>
parents:
15025
diff
changeset
|
5070 if (detect_input_pending ()) |
fb0f2804c34a
(wait_reading_process_input, both definitions):
Richard M. Stallman <rms@gnu.org>
parents:
15025
diff
changeset
|
5071 break; |
18492
668304de6f92
(wait_reading_process_input): If wait_for_cell,
Richard M. Stallman <rms@gnu.org>
parents:
18378
diff
changeset
|
5072 #endif |
15064
fb0f2804c34a
(wait_reading_process_input, both definitions):
Richard M. Stallman <rms@gnu.org>
parents:
15025
diff
changeset
|
5073 } |
fb0f2804c34a
(wait_reading_process_input, both definitions):
Richard M. Stallman <rms@gnu.org>
parents:
15025
diff
changeset
|
5074 |
2200
5e58643bb169
(wait_reading_process_input): New option to wait
Richard M. Stallman <rms@gnu.org>
parents:
2120
diff
changeset
|
5075 /* Exit now if the cell we're waiting for became non-nil. */ |
39973
579177964efa
Avoid (most) uses of XCAR/XCDR as lvalues, for flexibility in experimenting
Ken Raeburn <raeburn@raeburn.org>
parents:
39964
diff
changeset
|
5076 if (! NILP (wait_for_cell) && ! NILP (XCAR (wait_for_cell))) |
2200
5e58643bb169
(wait_reading_process_input): New option to wait
Richard M. Stallman <rms@gnu.org>
parents:
2120
diff
changeset
|
5077 break; |
5e58643bb169
(wait_reading_process_input): New option to wait
Richard M. Stallman <rms@gnu.org>
parents:
2120
diff
changeset
|
5078 |
621 | 5079 #ifdef SIGIO |
18378
22cd8d7dd5aa
(wait_reading_process_input): Don't check for
Richard M. Stallman <rms@gnu.org>
parents:
18329
diff
changeset
|
5080 /* If we think we have keyboard input waiting, but didn't get SIGIO, |
578 | 5081 go read it. This can happen with X on BSD after logging out. |
5082 In that case, there really is no input and no SIGIO, | |
5083 but select says there is input. */ | |
5084 | |
56716
c126b8b6a314
* process.c (wait_reading_process_input): Clean up.
Kim F. Storm <storm@cua.dk>
parents:
56713
diff
changeset
|
5085 if (read_kbd && interrupt_input |
51637
745eaece4a11
(wait_reading_process_input): Don't signal SIGIO in batch mode.
Richard M. Stallman <rms@gnu.org>
parents:
51473
diff
changeset
|
5086 && keyboard_bit_set (&Available) && ! noninteractive) |
14736
b17ec81a6294
(wait_reading_process_input): Use getpid when generating SIGIO.
Richard M. Stallman <rms@gnu.org>
parents:
14671
diff
changeset
|
5087 kill (getpid (), SIGIO); |
621 | 5088 #endif |
578 | 5089 |
5090 if (! wait_proc) | |
5091 got_some_input |= nfds > 0; | |
5092 | |
624 | 5093 /* If checking input just got us a size-change event from X, |
5094 obey it now if we should. */ | |
56716
c126b8b6a314
* process.c (wait_reading_process_input): Clean up.
Kim F. Storm <storm@cua.dk>
parents:
56713
diff
changeset
|
5095 if (read_kbd || ! NILP (wait_for_cell)) |
25356
5db69f7aadca
Call change_frame_size and do_pending_window_change with
Gerd Moellmann <gerd@gnu.org>
parents:
25262
diff
changeset
|
5096 do_pending_window_change (0); |
624 | 5097 |
5134
0a4e46e15304
(wait_reading_process_input):
Richard M. Stallman <rms@gnu.org>
parents:
4998
diff
changeset
|
5098 /* Check for data from a process. */ |
43598
f49377cf2e3c
(Qconnect, Qfailed): New variables.
Kim F. Storm <storm@cua.dk>
parents:
42600
diff
changeset
|
5099 if (no_avail || nfds == 0) |
f49377cf2e3c
(Qconnect, Qfailed): New variables.
Kim F. Storm <storm@cua.dk>
parents:
42600
diff
changeset
|
5100 continue; |
f49377cf2e3c
(Qconnect, Qfailed): New variables.
Kim F. Storm <storm@cua.dk>
parents:
42600
diff
changeset
|
5101 |
5134
0a4e46e15304
(wait_reading_process_input):
Richard M. Stallman <rms@gnu.org>
parents:
4998
diff
changeset
|
5102 /* Really FIRST_PROC_DESC should be 0 on Unix, |
0a4e46e15304
(wait_reading_process_input):
Richard M. Stallman <rms@gnu.org>
parents:
4998
diff
changeset
|
5103 but this is safer in the short run. */ |
9686
cd788aa8cb2a
Handle multiple keyboard input descriptors.
Richard M. Stallman <rms@gnu.org>
parents:
9334
diff
changeset
|
5104 for (channel = 0; channel <= max_process_desc; channel++) |
578 | 5105 { |
9686
cd788aa8cb2a
Handle multiple keyboard input descriptors.
Richard M. Stallman <rms@gnu.org>
parents:
9334
diff
changeset
|
5106 if (FD_ISSET (channel, &Available) |
cd788aa8cb2a
Handle multiple keyboard input descriptors.
Richard M. Stallman <rms@gnu.org>
parents:
9334
diff
changeset
|
5107 && FD_ISSET (channel, &non_keyboard_wait_mask)) |
578 | 5108 { |
5109 int nread; | |
5110 | |
5111 /* If waiting for this channel, arrange to return as | |
5112 soon as no more input to be processed. No more | |
5113 waiting. */ | |
5114 if (wait_channel == channel) | |
5115 { | |
5134
0a4e46e15304
(wait_reading_process_input):
Richard M. Stallman <rms@gnu.org>
parents:
4998
diff
changeset
|
5116 wait_channel = -1; |
578 | 5117 time_limit = -1; |
5118 got_some_input = 1; | |
5119 } | |
5120 proc = chan_process[channel]; | |
5121 if (NILP (proc)) | |
5122 continue; | |
5123 | |
43968
7ec801358b7e
(Qlocal, QCname, QCbuffer, QChost, QCservice, QCfamily)
Kim F. Storm <storm@cua.dk>
parents:
43642
diff
changeset
|
5124 /* If this is a server stream socket, accept connection. */ |
7ec801358b7e
(Qlocal, QCname, QCbuffer, QChost, QCservice, QCfamily)
Kim F. Storm <storm@cua.dk>
parents:
43642
diff
changeset
|
5125 if (EQ (XPROCESS (proc)->status, Qlisten)) |
7ec801358b7e
(Qlocal, QCname, QCbuffer, QChost, QCservice, QCfamily)
Kim F. Storm <storm@cua.dk>
parents:
43642
diff
changeset
|
5126 { |
7ec801358b7e
(Qlocal, QCname, QCbuffer, QChost, QCservice, QCfamily)
Kim F. Storm <storm@cua.dk>
parents:
43642
diff
changeset
|
5127 server_accept_connection (proc, channel); |
7ec801358b7e
(Qlocal, QCname, QCbuffer, QChost, QCservice, QCfamily)
Kim F. Storm <storm@cua.dk>
parents:
43642
diff
changeset
|
5128 continue; |
7ec801358b7e
(Qlocal, QCname, QCbuffer, QChost, QCservice, QCfamily)
Kim F. Storm <storm@cua.dk>
parents:
43642
diff
changeset
|
5129 } |
7ec801358b7e
(Qlocal, QCname, QCbuffer, QChost, QCservice, QCfamily)
Kim F. Storm <storm@cua.dk>
parents:
43642
diff
changeset
|
5130 |
578 | 5131 /* Read data from the process, starting with our |
5132 buffered-ahead character if we have one. */ | |
5133 | |
5134 nread = read_process_output (proc, channel); | |
5135 if (nread > 0) | |
5136 { | |
5137 /* Since read_process_output can run a filter, | |
5138 which can call accept-process-output, | |
5139 don't try to read from any other processes | |
5140 before doing the select again. */ | |
5141 FD_ZERO (&Available); | |
5142 | |
5143 if (do_display) | |
35336
002c02db42d3
Call redisplay_preserve_echo_area with additional arg.
Gerd Moellmann <gerd@gnu.org>
parents:
34660
diff
changeset
|
5144 redisplay_preserve_echo_area (12); |
578 | 5145 } |
5146 #ifdef EWOULDBLOCK | |
5147 else if (nread == -1 && errno == EWOULDBLOCK) | |
5148 ; | |
15405
c27bb6e69e2d
(wait_reading_process_input): Move the O_NONBLOCK and
Richard M. Stallman <rms@gnu.org>
parents:
15368
diff
changeset
|
5149 #endif |
15406 | 5150 /* ISC 4.1 defines both EWOULDBLOCK and O_NONBLOCK, |
5151 and Emacs uses O_NONBLOCK, so what we get is EAGAIN. */ | |
578 | 5152 #ifdef O_NONBLOCK |
5153 else if (nread == -1 && errno == EAGAIN) | |
5154 ; | |
5155 #else | |
5156 #ifdef O_NDELAY | |
5157 else if (nread == -1 && errno == EAGAIN) | |
5158 ; | |
5159 /* Note that we cannot distinguish between no input | |
5160 available now and a closed pipe. | |
5161 With luck, a closed pipe will be accompanied by | |
5162 subprocess termination and SIGCHLD. */ | |
95884
d6a4488883dc
Daniel Engeler <engeler at gmail.com>
Glenn Morris <rgm@gnu.org>
parents:
95387
diff
changeset
|
5163 else if (nread == 0 && !NETCONN_P (proc) && !SERIALCONN_P (proc)) |
578 | 5164 ; |
76794
fbe60d04cec2
(wait_reading_process_output) [HAVE_PTYS]:
Kim F. Storm <storm@cua.dk>
parents:
76789
diff
changeset
|
5165 #endif /* O_NDELAY */ |
fbe60d04cec2
(wait_reading_process_output) [HAVE_PTYS]:
Kim F. Storm <storm@cua.dk>
parents:
76789
diff
changeset
|
5166 #endif /* O_NONBLOCK */ |
578 | 5167 #ifdef HAVE_PTYS |
5168 /* On some OSs with ptys, when the process on one end of | |
5169 a pty exits, the other end gets an error reading with | |
5170 errno = EIO instead of getting an EOF (0 bytes read). | |
5171 Therefore, if we get an error reading and errno = | |
5172 EIO, just continue, because the child process has | |
5173 exited and should clean itself up soon (e.g. when we | |
23035
8d68b82a4d8c
(wait_reading_process_input): If a pty gives EIO,
Richard M. Stallman <rms@gnu.org>
parents:
22939
diff
changeset
|
5174 get a SIGCHLD). |
8d68b82a4d8c
(wait_reading_process_input): If a pty gives EIO,
Richard M. Stallman <rms@gnu.org>
parents:
22939
diff
changeset
|
5175 |
8d68b82a4d8c
(wait_reading_process_input): If a pty gives EIO,
Richard M. Stallman <rms@gnu.org>
parents:
22939
diff
changeset
|
5176 However, it has been known to happen that the SIGCHLD |
76794
fbe60d04cec2
(wait_reading_process_output) [HAVE_PTYS]:
Kim F. Storm <storm@cua.dk>
parents:
76789
diff
changeset
|
5177 got lost. So raise the signal again just in case. |
23035
8d68b82a4d8c
(wait_reading_process_input): If a pty gives EIO,
Richard M. Stallman <rms@gnu.org>
parents:
22939
diff
changeset
|
5178 It can't hurt. */ |
578 | 5179 else if (nread == -1 && errno == EIO) |
76794
fbe60d04cec2
(wait_reading_process_output) [HAVE_PTYS]:
Kim F. Storm <storm@cua.dk>
parents:
76789
diff
changeset
|
5180 { |
104723
1eb83f01c48d
(wait_reading_process_output): Keep the descriptor
Nick Roberts <nickrob@snap.net.nz>
parents:
104638
diff
changeset
|
5181 /* Clear the descriptor now, so we only raise the |
104724
8bd22a0db033
*** empty log message ***
Nick Roberts <nickrob@snap.net.nz>
parents:
104723
diff
changeset
|
5182 signal once. Don't do this if `process' is only |
104723
1eb83f01c48d
(wait_reading_process_output): Keep the descriptor
Nick Roberts <nickrob@snap.net.nz>
parents:
104638
diff
changeset
|
5183 a pty. */ |
1eb83f01c48d
(wait_reading_process_output): Keep the descriptor
Nick Roberts <nickrob@snap.net.nz>
parents:
104638
diff
changeset
|
5184 if (XPROCESS (proc)->pid != -2) |
1eb83f01c48d
(wait_reading_process_output): Keep the descriptor
Nick Roberts <nickrob@snap.net.nz>
parents:
104638
diff
changeset
|
5185 { |
1eb83f01c48d
(wait_reading_process_output): Keep the descriptor
Nick Roberts <nickrob@snap.net.nz>
parents:
104638
diff
changeset
|
5186 FD_CLR (channel, &input_wait_mask); |
1eb83f01c48d
(wait_reading_process_output): Keep the descriptor
Nick Roberts <nickrob@snap.net.nz>
parents:
104638
diff
changeset
|
5187 FD_CLR (channel, &non_keyboard_wait_mask); |
1eb83f01c48d
(wait_reading_process_output): Keep the descriptor
Nick Roberts <nickrob@snap.net.nz>
parents:
104638
diff
changeset
|
5188 |
1eb83f01c48d
(wait_reading_process_output): Keep the descriptor
Nick Roberts <nickrob@snap.net.nz>
parents:
104638
diff
changeset
|
5189 kill (getpid (), SIGCHLD); |
1eb83f01c48d
(wait_reading_process_output): Keep the descriptor
Nick Roberts <nickrob@snap.net.nz>
parents:
104638
diff
changeset
|
5190 } |
76794
fbe60d04cec2
(wait_reading_process_output) [HAVE_PTYS]:
Kim F. Storm <storm@cua.dk>
parents:
76789
diff
changeset
|
5191 } |
fbe60d04cec2
(wait_reading_process_output) [HAVE_PTYS]:
Kim F. Storm <storm@cua.dk>
parents:
76789
diff
changeset
|
5192 #endif /* HAVE_PTYS */ |
648 | 5193 /* If we can detect process termination, don't consider the process |
5194 gone just because its pipe is closed. */ | |
578 | 5195 #ifdef SIGCHLD |
95884
d6a4488883dc
Daniel Engeler <engeler at gmail.com>
Glenn Morris <rgm@gnu.org>
parents:
95387
diff
changeset
|
5196 else if (nread == 0 && !NETCONN_P (proc) && !SERIALCONN_P (proc)) |
578 | 5197 ; |
5198 #endif | |
5199 else | |
5200 { | |
5201 /* Preserve status of processes already terminated. */ | |
81826
077a1e6fd3f2
(struct Lisp_Process): Turn slots infd, outfd, kill_without_query, pty_flag,
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
80984
diff
changeset
|
5202 XPROCESS (proc)->tick = ++process_tick; |
578 | 5203 deactivate_process (proc); |
69873
2d844bbbccd4
* process.h (struct Lisp_Process): Replace Lisp_Objects `pid',
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
69634
diff
changeset
|
5204 if (XPROCESS (proc)->raw_status_new) |
578 | 5205 update_status (XPROCESS (proc)); |
5206 if (EQ (XPROCESS (proc)->status, Qrun)) | |
5207 XPROCESS (proc)->status | |
5208 = Fcons (Qexit, Fcons (make_number (256), Qnil)); | |
5209 } | |
5210 } | |
49600
23a1cea22d13
Trailing whitespace deleted.
Juanma Barranquero <lekktu@gmail.com>
parents:
49281
diff
changeset
|
5211 #ifdef NON_BLOCKING_CONNECT |
55766
d5fe47c900ee
(wait_reading_process_input): Check connect_wait_mask
Kim F. Storm <storm@cua.dk>
parents:
55579
diff
changeset
|
5212 if (check_connect && FD_ISSET (channel, &Connecting) |
d5fe47c900ee
(wait_reading_process_input): Check connect_wait_mask
Kim F. Storm <storm@cua.dk>
parents:
55579
diff
changeset
|
5213 && FD_ISSET (channel, &connect_wait_mask)) |
43598
f49377cf2e3c
(Qconnect, Qfailed): New variables.
Kim F. Storm <storm@cua.dk>
parents:
42600
diff
changeset
|
5214 { |
f49377cf2e3c
(Qconnect, Qfailed): New variables.
Kim F. Storm <storm@cua.dk>
parents:
42600
diff
changeset
|
5215 struct Lisp_Process *p; |
f49377cf2e3c
(Qconnect, Qfailed): New variables.
Kim F. Storm <storm@cua.dk>
parents:
42600
diff
changeset
|
5216 |
f49377cf2e3c
(Qconnect, Qfailed): New variables.
Kim F. Storm <storm@cua.dk>
parents:
42600
diff
changeset
|
5217 FD_CLR (channel, &connect_wait_mask); |
f49377cf2e3c
(Qconnect, Qfailed): New variables.
Kim F. Storm <storm@cua.dk>
parents:
42600
diff
changeset
|
5218 if (--num_pending_connects < 0) |
f49377cf2e3c
(Qconnect, Qfailed): New variables.
Kim F. Storm <storm@cua.dk>
parents:
42600
diff
changeset
|
5219 abort (); |
f49377cf2e3c
(Qconnect, Qfailed): New variables.
Kim F. Storm <storm@cua.dk>
parents:
42600
diff
changeset
|
5220 |
f49377cf2e3c
(Qconnect, Qfailed): New variables.
Kim F. Storm <storm@cua.dk>
parents:
42600
diff
changeset
|
5221 proc = chan_process[channel]; |
f49377cf2e3c
(Qconnect, Qfailed): New variables.
Kim F. Storm <storm@cua.dk>
parents:
42600
diff
changeset
|
5222 if (NILP (proc)) |
f49377cf2e3c
(Qconnect, Qfailed): New variables.
Kim F. Storm <storm@cua.dk>
parents:
42600
diff
changeset
|
5223 continue; |
f49377cf2e3c
(Qconnect, Qfailed): New variables.
Kim F. Storm <storm@cua.dk>
parents:
42600
diff
changeset
|
5224 |
f49377cf2e3c
(Qconnect, Qfailed): New variables.
Kim F. Storm <storm@cua.dk>
parents:
42600
diff
changeset
|
5225 p = XPROCESS (proc); |
f49377cf2e3c
(Qconnect, Qfailed): New variables.
Kim F. Storm <storm@cua.dk>
parents:
42600
diff
changeset
|
5226 |
f49377cf2e3c
(Qconnect, Qfailed): New variables.
Kim F. Storm <storm@cua.dk>
parents:
42600
diff
changeset
|
5227 #ifdef GNU_LINUX |
f49377cf2e3c
(Qconnect, Qfailed): New variables.
Kim F. Storm <storm@cua.dk>
parents:
42600
diff
changeset
|
5228 /* getsockopt(,,SO_ERROR,,) is said to hang on some systems. |
100824
e5aa6a069f40
(conv_sockaddr_to_lisp): Add workaround for
Andreas Schwab <schwab@suse.de>
parents:
100573
diff
changeset
|
5229 So only use it on systems where it is known to work. */ |
43598
f49377cf2e3c
(Qconnect, Qfailed): New variables.
Kim F. Storm <storm@cua.dk>
parents:
42600
diff
changeset
|
5230 { |
43968
7ec801358b7e
(Qlocal, QCname, QCbuffer, QChost, QCservice, QCfamily)
Kim F. Storm <storm@cua.dk>
parents:
43642
diff
changeset
|
5231 int xlen = sizeof(xerrno); |
43598
f49377cf2e3c
(Qconnect, Qfailed): New variables.
Kim F. Storm <storm@cua.dk>
parents:
42600
diff
changeset
|
5232 if (getsockopt(channel, SOL_SOCKET, SO_ERROR, &xerrno, &xlen)) |
f49377cf2e3c
(Qconnect, Qfailed): New variables.
Kim F. Storm <storm@cua.dk>
parents:
42600
diff
changeset
|
5233 xerrno = errno; |
f49377cf2e3c
(Qconnect, Qfailed): New variables.
Kim F. Storm <storm@cua.dk>
parents:
42600
diff
changeset
|
5234 } |
f49377cf2e3c
(Qconnect, Qfailed): New variables.
Kim F. Storm <storm@cua.dk>
parents:
42600
diff
changeset
|
5235 #else |
44013
da239fc7bb6c
(wait_reading_process_input): Move variables `pname' and `pnamelen' down
Pavel Janík <Pavel@Janik.cz>
parents:
43999
diff
changeset
|
5236 { |
da239fc7bb6c
(wait_reading_process_input): Move variables `pname' and `pnamelen' down
Pavel Janík <Pavel@Janik.cz>
parents:
43999
diff
changeset
|
5237 struct sockaddr pname; |
da239fc7bb6c
(wait_reading_process_input): Move variables `pname' and `pnamelen' down
Pavel Janík <Pavel@Janik.cz>
parents:
43999
diff
changeset
|
5238 int pnamelen = sizeof(pname); |
da239fc7bb6c
(wait_reading_process_input): Move variables `pname' and `pnamelen' down
Pavel Janík <Pavel@Janik.cz>
parents:
43999
diff
changeset
|
5239 |
da239fc7bb6c
(wait_reading_process_input): Move variables `pname' and `pnamelen' down
Pavel Janík <Pavel@Janik.cz>
parents:
43999
diff
changeset
|
5240 /* If connection failed, getpeername will fail. */ |
da239fc7bb6c
(wait_reading_process_input): Move variables `pname' and `pnamelen' down
Pavel Janík <Pavel@Janik.cz>
parents:
43999
diff
changeset
|
5241 xerrno = 0; |
da239fc7bb6c
(wait_reading_process_input): Move variables `pname' and `pnamelen' down
Pavel Janík <Pavel@Janik.cz>
parents:
43999
diff
changeset
|
5242 if (getpeername(channel, &pname, &pnamelen) < 0) |
da239fc7bb6c
(wait_reading_process_input): Move variables `pname' and `pnamelen' down
Pavel Janík <Pavel@Janik.cz>
parents:
43999
diff
changeset
|
5243 { |
da239fc7bb6c
(wait_reading_process_input): Move variables `pname' and `pnamelen' down
Pavel Janík <Pavel@Janik.cz>
parents:
43999
diff
changeset
|
5244 /* Obtain connect failure code through error slippage. */ |
da239fc7bb6c
(wait_reading_process_input): Move variables `pname' and `pnamelen' down
Pavel Janík <Pavel@Janik.cz>
parents:
43999
diff
changeset
|
5245 char dummy; |
43598
f49377cf2e3c
(Qconnect, Qfailed): New variables.
Kim F. Storm <storm@cua.dk>
parents:
42600
diff
changeset
|
5246 xerrno = errno; |
44013
da239fc7bb6c
(wait_reading_process_input): Move variables `pname' and `pnamelen' down
Pavel Janík <Pavel@Janik.cz>
parents:
43999
diff
changeset
|
5247 if (errno == ENOTCONN && read(channel, &dummy, 1) < 0) |
da239fc7bb6c
(wait_reading_process_input): Move variables `pname' and `pnamelen' down
Pavel Janík <Pavel@Janik.cz>
parents:
43999
diff
changeset
|
5248 xerrno = errno; |
da239fc7bb6c
(wait_reading_process_input): Move variables `pname' and `pnamelen' down
Pavel Janík <Pavel@Janik.cz>
parents:
43999
diff
changeset
|
5249 } |
da239fc7bb6c
(wait_reading_process_input): Move variables `pname' and `pnamelen' down
Pavel Janík <Pavel@Janik.cz>
parents:
43999
diff
changeset
|
5250 } |
43598
f49377cf2e3c
(Qconnect, Qfailed): New variables.
Kim F. Storm <storm@cua.dk>
parents:
42600
diff
changeset
|
5251 #endif |
f49377cf2e3c
(Qconnect, Qfailed): New variables.
Kim F. Storm <storm@cua.dk>
parents:
42600
diff
changeset
|
5252 if (xerrno) |
f49377cf2e3c
(Qconnect, Qfailed): New variables.
Kim F. Storm <storm@cua.dk>
parents:
42600
diff
changeset
|
5253 { |
81826
077a1e6fd3f2
(struct Lisp_Process): Turn slots infd, outfd, kill_without_query, pty_flag,
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
80984
diff
changeset
|
5254 p->tick = ++process_tick; |
43598
f49377cf2e3c
(Qconnect, Qfailed): New variables.
Kim F. Storm <storm@cua.dk>
parents:
42600
diff
changeset
|
5255 p->status = Fcons (Qfailed, Fcons (make_number (xerrno), Qnil)); |
f49377cf2e3c
(Qconnect, Qfailed): New variables.
Kim F. Storm <storm@cua.dk>
parents:
42600
diff
changeset
|
5256 deactivate_process (proc); |
f49377cf2e3c
(Qconnect, Qfailed): New variables.
Kim F. Storm <storm@cua.dk>
parents:
42600
diff
changeset
|
5257 } |
f49377cf2e3c
(Qconnect, Qfailed): New variables.
Kim F. Storm <storm@cua.dk>
parents:
42600
diff
changeset
|
5258 else |
f49377cf2e3c
(Qconnect, Qfailed): New variables.
Kim F. Storm <storm@cua.dk>
parents:
42600
diff
changeset
|
5259 { |
f49377cf2e3c
(Qconnect, Qfailed): New variables.
Kim F. Storm <storm@cua.dk>
parents:
42600
diff
changeset
|
5260 p->status = Qrun; |
f49377cf2e3c
(Qconnect, Qfailed): New variables.
Kim F. Storm <storm@cua.dk>
parents:
42600
diff
changeset
|
5261 /* Execute the sentinel here. If we had relied on |
f49377cf2e3c
(Qconnect, Qfailed): New variables.
Kim F. Storm <storm@cua.dk>
parents:
42600
diff
changeset
|
5262 status_notify to do it later, it will read input |
f49377cf2e3c
(Qconnect, Qfailed): New variables.
Kim F. Storm <storm@cua.dk>
parents:
42600
diff
changeset
|
5263 from the process before calling the sentinel. */ |
f49377cf2e3c
(Qconnect, Qfailed): New variables.
Kim F. Storm <storm@cua.dk>
parents:
42600
diff
changeset
|
5264 exec_sentinel (proc, build_string ("open\n")); |
43968
7ec801358b7e
(Qlocal, QCname, QCbuffer, QChost, QCservice, QCfamily)
Kim F. Storm <storm@cua.dk>
parents:
43642
diff
changeset
|
5265 if (!EQ (p->filter, Qt) && !EQ (p->command, Qt)) |
43598
f49377cf2e3c
(Qconnect, Qfailed): New variables.
Kim F. Storm <storm@cua.dk>
parents:
42600
diff
changeset
|
5266 { |
81826
077a1e6fd3f2
(struct Lisp_Process): Turn slots infd, outfd, kill_without_query, pty_flag,
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
80984
diff
changeset
|
5267 FD_SET (p->infd, &input_wait_mask); |
077a1e6fd3f2
(struct Lisp_Process): Turn slots infd, outfd, kill_without_query, pty_flag,
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
80984
diff
changeset
|
5268 FD_SET (p->infd, &non_keyboard_wait_mask); |
43598
f49377cf2e3c
(Qconnect, Qfailed): New variables.
Kim F. Storm <storm@cua.dk>
parents:
42600
diff
changeset
|
5269 } |
f49377cf2e3c
(Qconnect, Qfailed): New variables.
Kim F. Storm <storm@cua.dk>
parents:
42600
diff
changeset
|
5270 } |
f49377cf2e3c
(Qconnect, Qfailed): New variables.
Kim F. Storm <storm@cua.dk>
parents:
42600
diff
changeset
|
5271 } |
f49377cf2e3c
(Qconnect, Qfailed): New variables.
Kim F. Storm <storm@cua.dk>
parents:
42600
diff
changeset
|
5272 #endif /* NON_BLOCKING_CONNECT */ |
648 | 5273 } /* end for each file descriptor */ |
5274 } /* end while exit conditions not met */ | |
5275 | |
72277
a6b9ee835f88
* process.c: Reapply 2006-08-01 change.
Chong Yidong <cyd@stupidchicken.com>
parents:
72255
diff
changeset
|
5276 unbind_to (count, Qnil); |
8570
dd3dfde8f973
(wait_reading_process_input):
Richard M. Stallman <rms@gnu.org>
parents:
8390
diff
changeset
|
5277 |
648 | 5278 /* If calling from keyboard input, do not quit |
5279 since we want to return C-g as an input character. | |
5280 Otherwise, do pending quit if requested. */ | |
56716
c126b8b6a314
* process.c (wait_reading_process_input): Clean up.
Kim F. Storm <storm@cua.dk>
parents:
56713
diff
changeset
|
5281 if (read_kbd >= 0) |
648 | 5282 { |
5283 /* Prevent input_pending from remaining set if we quit. */ | |
5284 clear_input_pending (); | |
5285 QUIT; | |
5286 } | |
25009
5733af0b62ce
(wait_reading_process_input): Show and hide busy
Gerd Moellmann <gerd@gnu.org>
parents:
24933
diff
changeset
|
5287 |
578 | 5288 return got_some_input; |
5289 } | |
5290 | |
9030
b14532c71632
(exec_sentinel_error_handler): New function.
Richard M. Stallman <rms@gnu.org>
parents:
8570
diff
changeset
|
5291 /* Given a list (FUNCTION ARGS...), apply FUNCTION to the ARGS. */ |
b14532c71632
(exec_sentinel_error_handler): New function.
Richard M. Stallman <rms@gnu.org>
parents:
8570
diff
changeset
|
5292 |
b14532c71632
(exec_sentinel_error_handler): New function.
Richard M. Stallman <rms@gnu.org>
parents:
8570
diff
changeset
|
5293 static Lisp_Object |
b14532c71632
(exec_sentinel_error_handler): New function.
Richard M. Stallman <rms@gnu.org>
parents:
8570
diff
changeset
|
5294 read_process_output_call (fun_and_args) |
b14532c71632
(exec_sentinel_error_handler): New function.
Richard M. Stallman <rms@gnu.org>
parents:
8570
diff
changeset
|
5295 Lisp_Object fun_and_args; |
b14532c71632
(exec_sentinel_error_handler): New function.
Richard M. Stallman <rms@gnu.org>
parents:
8570
diff
changeset
|
5296 { |
25645
a14111a2a100
Use XCAR, XCDR, XFLOAT_DATA instead of explicit member access.
Ken Raeburn <raeburn@raeburn.org>
parents:
25356
diff
changeset
|
5297 return apply1 (XCAR (fun_and_args), XCDR (fun_and_args)); |
9030
b14532c71632
(exec_sentinel_error_handler): New function.
Richard M. Stallman <rms@gnu.org>
parents:
8570
diff
changeset
|
5298 } |
b14532c71632
(exec_sentinel_error_handler): New function.
Richard M. Stallman <rms@gnu.org>
parents:
8570
diff
changeset
|
5299 |
b14532c71632
(exec_sentinel_error_handler): New function.
Richard M. Stallman <rms@gnu.org>
parents:
8570
diff
changeset
|
5300 static Lisp_Object |
b14532c71632
(exec_sentinel_error_handler): New function.
Richard M. Stallman <rms@gnu.org>
parents:
8570
diff
changeset
|
5301 read_process_output_error_handler (error) |
b14532c71632
(exec_sentinel_error_handler): New function.
Richard M. Stallman <rms@gnu.org>
parents:
8570
diff
changeset
|
5302 Lisp_Object error; |
b14532c71632
(exec_sentinel_error_handler): New function.
Richard M. Stallman <rms@gnu.org>
parents:
8570
diff
changeset
|
5303 { |
b14532c71632
(exec_sentinel_error_handler): New function.
Richard M. Stallman <rms@gnu.org>
parents:
8570
diff
changeset
|
5304 cmd_error_internal (error, "error in process filter: "); |
b14532c71632
(exec_sentinel_error_handler): New function.
Richard M. Stallman <rms@gnu.org>
parents:
8570
diff
changeset
|
5305 Vinhibit_quit = Qt; |
b14532c71632
(exec_sentinel_error_handler): New function.
Richard M. Stallman <rms@gnu.org>
parents:
8570
diff
changeset
|
5306 update_echo_area (); |
11277
d4547e4b0aab
(read_process_output_error_handler)
Richard M. Stallman <rms@gnu.org>
parents:
11235
diff
changeset
|
5307 Fsleep_for (make_number (2), Qnil); |
27558 | 5308 return Qt; |
9030
b14532c71632
(exec_sentinel_error_handler): New function.
Richard M. Stallman <rms@gnu.org>
parents:
8570
diff
changeset
|
5309 } |
b14532c71632
(exec_sentinel_error_handler): New function.
Richard M. Stallman <rms@gnu.org>
parents:
8570
diff
changeset
|
5310 |
578 | 5311 /* Read pending output from the process channel, |
5312 starting with our buffered-ahead character if we have one. | |
17041
b61cbe595be5
Include charset.h and coding.h.
Karl Heuer <kwzh@gnu.org>
parents:
16780
diff
changeset
|
5313 Yield number of decoded characters read. |
578 | 5314 |
55962
8979bc3ade70
(Fdelete_process): Undo 2004-05-28 change.
Kim F. Storm <storm@cua.dk>
parents:
55810
diff
changeset
|
5315 This function reads at most 4096 characters. |
578 | 5316 If you want to read all available subprocess output, |
17041
b61cbe595be5
Include charset.h and coding.h.
Karl Heuer <kwzh@gnu.org>
parents:
16780
diff
changeset
|
5317 you must call it repeatedly until it returns zero. |
b61cbe595be5
Include charset.h and coding.h.
Karl Heuer <kwzh@gnu.org>
parents:
16780
diff
changeset
|
5318 |
b61cbe595be5
Include charset.h and coding.h.
Karl Heuer <kwzh@gnu.org>
parents:
16780
diff
changeset
|
5319 The characters read are decoded according to PROC's coding-system |
b61cbe595be5
Include charset.h and coding.h.
Karl Heuer <kwzh@gnu.org>
parents:
16780
diff
changeset
|
5320 for decoding. */ |
578 | 5321 |
64977
d26871fb1b7b
(deactivate_process, status_notify, read_process_output)
Kim F. Storm <storm@cua.dk>
parents:
64770
diff
changeset
|
5322 static int |
578 | 5323 read_process_output (proc, channel) |
5324 Lisp_Object proc; | |
5325 register int channel; | |
5326 { | |
52527
3ea59ac8dfa5
(Fnetwork_interface_info): Fix type error.
Dave Love <fx@gnu.org>
parents:
52525
diff
changeset
|
5327 register int nbytes; |
17041
b61cbe595be5
Include charset.h and coding.h.
Karl Heuer <kwzh@gnu.org>
parents:
16780
diff
changeset
|
5328 char *chars; |
578 | 5329 register Lisp_Object outstream; |
5330 register struct Lisp_Process *p = XPROCESS (proc); | |
5331 register int opoint; | |
17110
3a348cbb354f
(Fstart_process, Fopen_network_stream): Do not perform
Kenichi Handa <handa@m17n.org>
parents:
17041
diff
changeset
|
5332 struct coding_system *coding = proc_decode_coding_system[channel]; |
81826
077a1e6fd3f2
(struct Lisp_Process): Turn slots infd, outfd, kill_without_query, pty_flag,
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
80984
diff
changeset
|
5333 int carryover = p->decoding_carryover; |
55962
8979bc3ade70
(Fdelete_process): Undo 2004-05-28 change.
Kim F. Storm <storm@cua.dk>
parents:
55810
diff
changeset
|
5334 int readmax = 4096; |
578 | 5335 |
43968
7ec801358b7e
(Qlocal, QCname, QCbuffer, QChost, QCservice, QCfamily)
Kim F. Storm <storm@cua.dk>
parents:
43642
diff
changeset
|
5336 chars = (char *) alloca (carryover + readmax); |
20715
5e983ddb85c9
(Fstart_process): Use raw-text instead of emacs-mule
Kenichi Handa <handa@m17n.org>
parents:
20708
diff
changeset
|
5337 if (carryover) |
5e983ddb85c9
(Fstart_process): Use raw-text instead of emacs-mule
Kenichi Handa <handa@m17n.org>
parents:
20708
diff
changeset
|
5338 /* See the comment above. */ |
46370
40db0673e6f0
Most uses of XSTRING combined with STRING_BYTES or indirection changed to
Ken Raeburn <raeburn@raeburn.org>
parents:
46314
diff
changeset
|
5339 bcopy (SDATA (p->decoding_buf), chars, carryover); |
17041
b61cbe595be5
Include charset.h and coding.h.
Karl Heuer <kwzh@gnu.org>
parents:
16780
diff
changeset
|
5340 |
43968
7ec801358b7e
(Qlocal, QCname, QCbuffer, QChost, QCservice, QCfamily)
Kim F. Storm <storm@cua.dk>
parents:
43642
diff
changeset
|
5341 #ifdef DATAGRAM_SOCKETS |
7ec801358b7e
(Qlocal, QCname, QCbuffer, QChost, QCservice, QCfamily)
Kim F. Storm <storm@cua.dk>
parents:
43642
diff
changeset
|
5342 /* We have a working select, so proc_buffered_char is always -1. */ |
7ec801358b7e
(Qlocal, QCname, QCbuffer, QChost, QCservice, QCfamily)
Kim F. Storm <storm@cua.dk>
parents:
43642
diff
changeset
|
5343 if (DATAGRAM_CHAN_P (channel)) |
7ec801358b7e
(Qlocal, QCname, QCbuffer, QChost, QCservice, QCfamily)
Kim F. Storm <storm@cua.dk>
parents:
43642
diff
changeset
|
5344 { |
7ec801358b7e
(Qlocal, QCname, QCbuffer, QChost, QCservice, QCfamily)
Kim F. Storm <storm@cua.dk>
parents:
43642
diff
changeset
|
5345 int len = datagram_address[channel].len; |
56583
64ae47cb68ff
(read_process_output): Use whole read buffer.
Kim F. Storm <storm@cua.dk>
parents:
56477
diff
changeset
|
5346 nbytes = recvfrom (channel, chars + carryover, readmax, |
43968
7ec801358b7e
(Qlocal, QCname, QCbuffer, QChost, QCservice, QCfamily)
Kim F. Storm <storm@cua.dk>
parents:
43642
diff
changeset
|
5347 0, datagram_address[channel].sa, &len); |
7ec801358b7e
(Qlocal, QCname, QCbuffer, QChost, QCservice, QCfamily)
Kim F. Storm <storm@cua.dk>
parents:
43642
diff
changeset
|
5348 } |
7ec801358b7e
(Qlocal, QCname, QCbuffer, QChost, QCservice, QCfamily)
Kim F. Storm <storm@cua.dk>
parents:
43642
diff
changeset
|
5349 else |
7ec801358b7e
(Qlocal, QCname, QCbuffer, QChost, QCservice, QCfamily)
Kim F. Storm <storm@cua.dk>
parents:
43642
diff
changeset
|
5350 #endif |
578 | 5351 if (proc_buffered_char[channel] < 0) |
53472
1a5fe79d27f3
(ADAPTIVE_READ_BUFFERING): New conditional.
Kim F. Storm <storm@cua.dk>
parents:
53072
diff
changeset
|
5352 { |
56583
64ae47cb68ff
(read_process_output): Use whole read buffer.
Kim F. Storm <storm@cua.dk>
parents:
56477
diff
changeset
|
5353 nbytes = emacs_read (channel, chars + carryover, readmax); |
53472
1a5fe79d27f3
(ADAPTIVE_READ_BUFFERING): New conditional.
Kim F. Storm <storm@cua.dk>
parents:
53072
diff
changeset
|
5354 #ifdef ADAPTIVE_READ_BUFFERING |
81826
077a1e6fd3f2
(struct Lisp_Process): Turn slots infd, outfd, kill_without_query, pty_flag,
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
80984
diff
changeset
|
5355 if (nbytes > 0 && p->adaptive_read_buffering) |
53472
1a5fe79d27f3
(ADAPTIVE_READ_BUFFERING): New conditional.
Kim F. Storm <storm@cua.dk>
parents:
53072
diff
changeset
|
5356 { |
81826
077a1e6fd3f2
(struct Lisp_Process): Turn slots infd, outfd, kill_without_query, pty_flag,
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
80984
diff
changeset
|
5357 int delay = p->read_output_delay; |
53520
2a54a8df1973
(read_process_output): Only activate adaptive
Kim F. Storm <storm@cua.dk>
parents:
53472
diff
changeset
|
5358 if (nbytes < 256) |
53472
1a5fe79d27f3
(ADAPTIVE_READ_BUFFERING): New conditional.
Kim F. Storm <storm@cua.dk>
parents:
53072
diff
changeset
|
5359 { |
1a5fe79d27f3
(ADAPTIVE_READ_BUFFERING): New conditional.
Kim F. Storm <storm@cua.dk>
parents:
53072
diff
changeset
|
5360 if (delay < READ_OUTPUT_DELAY_MAX_MAX) |
1a5fe79d27f3
(ADAPTIVE_READ_BUFFERING): New conditional.
Kim F. Storm <storm@cua.dk>
parents:
53072
diff
changeset
|
5361 { |
1a5fe79d27f3
(ADAPTIVE_READ_BUFFERING): New conditional.
Kim F. Storm <storm@cua.dk>
parents:
53072
diff
changeset
|
5362 if (delay == 0) |
1a5fe79d27f3
(ADAPTIVE_READ_BUFFERING): New conditional.
Kim F. Storm <storm@cua.dk>
parents:
53072
diff
changeset
|
5363 process_output_delay_count++; |
1a5fe79d27f3
(ADAPTIVE_READ_BUFFERING): New conditional.
Kim F. Storm <storm@cua.dk>
parents:
53072
diff
changeset
|
5364 delay += READ_OUTPUT_DELAY_INCREMENT * 2; |
1a5fe79d27f3
(ADAPTIVE_READ_BUFFERING): New conditional.
Kim F. Storm <storm@cua.dk>
parents:
53072
diff
changeset
|
5365 } |
1a5fe79d27f3
(ADAPTIVE_READ_BUFFERING): New conditional.
Kim F. Storm <storm@cua.dk>
parents:
53072
diff
changeset
|
5366 } |
56583
64ae47cb68ff
(read_process_output): Use whole read buffer.
Kim F. Storm <storm@cua.dk>
parents:
56477
diff
changeset
|
5367 else if (delay > 0 && (nbytes == readmax)) |
53472
1a5fe79d27f3
(ADAPTIVE_READ_BUFFERING): New conditional.
Kim F. Storm <storm@cua.dk>
parents:
53072
diff
changeset
|
5368 { |
1a5fe79d27f3
(ADAPTIVE_READ_BUFFERING): New conditional.
Kim F. Storm <storm@cua.dk>
parents:
53072
diff
changeset
|
5369 delay -= READ_OUTPUT_DELAY_INCREMENT; |
1a5fe79d27f3
(ADAPTIVE_READ_BUFFERING): New conditional.
Kim F. Storm <storm@cua.dk>
parents:
53072
diff
changeset
|
5370 if (delay == 0) |
1a5fe79d27f3
(ADAPTIVE_READ_BUFFERING): New conditional.
Kim F. Storm <storm@cua.dk>
parents:
53072
diff
changeset
|
5371 process_output_delay_count--; |
1a5fe79d27f3
(ADAPTIVE_READ_BUFFERING): New conditional.
Kim F. Storm <storm@cua.dk>
parents:
53072
diff
changeset
|
5372 } |
81826
077a1e6fd3f2
(struct Lisp_Process): Turn slots infd, outfd, kill_without_query, pty_flag,
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
80984
diff
changeset
|
5373 p->read_output_delay = delay; |
53472
1a5fe79d27f3
(ADAPTIVE_READ_BUFFERING): New conditional.
Kim F. Storm <storm@cua.dk>
parents:
53072
diff
changeset
|
5374 if (delay) |
1a5fe79d27f3
(ADAPTIVE_READ_BUFFERING): New conditional.
Kim F. Storm <storm@cua.dk>
parents:
53072
diff
changeset
|
5375 { |
81826
077a1e6fd3f2
(struct Lisp_Process): Turn slots infd, outfd, kill_without_query, pty_flag,
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
80984
diff
changeset
|
5376 p->read_output_skip = 1; |
53472
1a5fe79d27f3
(ADAPTIVE_READ_BUFFERING): New conditional.
Kim F. Storm <storm@cua.dk>
parents:
53072
diff
changeset
|
5377 process_output_skip = 1; |
1a5fe79d27f3
(ADAPTIVE_READ_BUFFERING): New conditional.
Kim F. Storm <storm@cua.dk>
parents:
53072
diff
changeset
|
5378 } |
1a5fe79d27f3
(ADAPTIVE_READ_BUFFERING): New conditional.
Kim F. Storm <storm@cua.dk>
parents:
53072
diff
changeset
|
5379 } |
1a5fe79d27f3
(ADAPTIVE_READ_BUFFERING): New conditional.
Kim F. Storm <storm@cua.dk>
parents:
53072
diff
changeset
|
5380 #endif |
1a5fe79d27f3
(ADAPTIVE_READ_BUFFERING): New conditional.
Kim F. Storm <storm@cua.dk>
parents:
53072
diff
changeset
|
5381 } |
578 | 5382 else |
5383 { | |
30580
5d92193ed196
(read_process_output): Big simplification. Handle
Kenichi Handa <handa@m17n.org>
parents:
29921
diff
changeset
|
5384 chars[carryover] = proc_buffered_char[channel]; |
578 | 5385 proc_buffered_char[channel] = -1; |
56583
64ae47cb68ff
(read_process_output): Use whole read buffer.
Kim F. Storm <storm@cua.dk>
parents:
56477
diff
changeset
|
5386 nbytes = emacs_read (channel, chars + carryover + 1, readmax - 1); |
20594
6e5a5afbe628
(read_process_output): Use insert_1_both.
Richard M. Stallman <rms@gnu.org>
parents:
20551
diff
changeset
|
5387 if (nbytes < 0) |
6e5a5afbe628
(read_process_output): Use insert_1_both.
Richard M. Stallman <rms@gnu.org>
parents:
20551
diff
changeset
|
5388 nbytes = 1; |
578 | 5389 else |
20594
6e5a5afbe628
(read_process_output): Use insert_1_both.
Richard M. Stallman <rms@gnu.org>
parents:
20551
diff
changeset
|
5390 nbytes = nbytes + 1; |
578 | 5391 } |
5392 | |
81826
077a1e6fd3f2
(struct Lisp_Process): Turn slots infd, outfd, kill_without_query, pty_flag,
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
80984
diff
changeset
|
5393 p->decoding_carryover = 0; |
22523
b02a5ea8cf93
(read_process_output): Handle carryover correctly.
Kenichi Handa <handa@m17n.org>
parents:
22019
diff
changeset
|
5394 |
30580
5d92193ed196
(read_process_output): Big simplification. Handle
Kenichi Handa <handa@m17n.org>
parents:
29921
diff
changeset
|
5395 /* At this point, NBYTES holds number of bytes just received |
17041
b61cbe595be5
Include charset.h and coding.h.
Karl Heuer <kwzh@gnu.org>
parents:
16780
diff
changeset
|
5396 (including the one in proc_buffered_char[channel]). */ |
23879
18e5d1cfa74b
(read_process_output): If NBYTES is zero and
Kenichi Handa <handa@m17n.org>
parents:
23762
diff
changeset
|
5397 if (nbytes <= 0) |
18e5d1cfa74b
(read_process_output): If NBYTES is zero and
Kenichi Handa <handa@m17n.org>
parents:
23762
diff
changeset
|
5398 { |
18e5d1cfa74b
(read_process_output): If NBYTES is zero and
Kenichi Handa <handa@m17n.org>
parents:
23762
diff
changeset
|
5399 if (nbytes < 0 || coding->mode & CODING_MODE_LAST_BLOCK) |
18e5d1cfa74b
(read_process_output): If NBYTES is zero and
Kenichi Handa <handa@m17n.org>
parents:
23762
diff
changeset
|
5400 return nbytes; |
18e5d1cfa74b
(read_process_output): If NBYTES is zero and
Kenichi Handa <handa@m17n.org>
parents:
23762
diff
changeset
|
5401 coding->mode |= CODING_MODE_LAST_BLOCK; |
18e5d1cfa74b
(read_process_output): If NBYTES is zero and
Kenichi Handa <handa@m17n.org>
parents:
23762
diff
changeset
|
5402 } |
20594
6e5a5afbe628
(read_process_output): Use insert_1_both.
Richard M. Stallman <rms@gnu.org>
parents:
20551
diff
changeset
|
5403 |
6e5a5afbe628
(read_process_output): Use insert_1_both.
Richard M. Stallman <rms@gnu.org>
parents:
20551
diff
changeset
|
5404 /* Now set NBYTES how many bytes we must decode. */ |
20715
5e983ddb85c9
(Fstart_process): Use raw-text instead of emacs-mule
Kenichi Handa <handa@m17n.org>
parents:
20708
diff
changeset
|
5405 nbytes += carryover; |
29017
8f10362eb5ff
(Fstart_process): GCPRO current_dir before calling
Kenichi Handa <handa@m17n.org>
parents:
28157
diff
changeset
|
5406 |
20594
6e5a5afbe628
(read_process_output): Use insert_1_both.
Richard M. Stallman <rms@gnu.org>
parents:
20551
diff
changeset
|
5407 /* Read and dispose of the process output. */ |
578 | 5408 outstream = p->filter; |
5409 if (!NILP (outstream)) | |
5410 { | |
49600
23a1cea22d13
Trailing whitespace deleted.
Juanma Barranquero <lekktu@gmail.com>
parents:
49281
diff
changeset
|
5411 /* We inhibit quit here instead of just catching it so that |
578 | 5412 hitting ^G when a filter happens to be running won't screw |
5413 it up. */ | |
46293
1fb8f75062c6
Use macro SPECPDL_INDEX.
Juanma Barranquero <lekktu@gmail.com>
parents:
45410
diff
changeset
|
5414 int count = SPECPDL_INDEX (); |
3510
b4a552ca4e99
(read_process_output): Deactivate the mark.
Richard M. Stallman <rms@gnu.org>
parents:
3238
diff
changeset
|
5415 Lisp_Object odeactivate; |
10914
413d44c0bd41
(exec_sentinel, read_process_output): If running filter
Richard M. Stallman <rms@gnu.org>
parents:
10744
diff
changeset
|
5416 Lisp_Object obuffer, okeymap; |
20594
6e5a5afbe628
(read_process_output): Use insert_1_both.
Richard M. Stallman <rms@gnu.org>
parents:
20551
diff
changeset
|
5417 Lisp_Object text; |
16644
3a93437adce1
(status_notify): Test p->infd > 0
Richard M. Stallman <rms@gnu.org>
parents:
16464
diff
changeset
|
5418 int outer_running_asynch_code = running_asynch_code; |
23460
94f4ba741f22
(exec_sentinel, read_process_output):
Richard M. Stallman <rms@gnu.org>
parents:
23405
diff
changeset
|
5419 int waiting = waiting_for_user_input_p; |
10914
413d44c0bd41
(exec_sentinel, read_process_output): If running filter
Richard M. Stallman <rms@gnu.org>
parents:
10744
diff
changeset
|
5420 |
413d44c0bd41
(exec_sentinel, read_process_output): If running filter
Richard M. Stallman <rms@gnu.org>
parents:
10744
diff
changeset
|
5421 /* No need to gcpro these, because all we do with them later |
413d44c0bd41
(exec_sentinel, read_process_output): If running filter
Richard M. Stallman <rms@gnu.org>
parents:
10744
diff
changeset
|
5422 is test them for EQness, and none of them should be a string. */ |
3510
b4a552ca4e99
(read_process_output): Deactivate the mark.
Richard M. Stallman <rms@gnu.org>
parents:
3238
diff
changeset
|
5423 odeactivate = Vdeactivate_mark; |
10914
413d44c0bd41
(exec_sentinel, read_process_output): If running filter
Richard M. Stallman <rms@gnu.org>
parents:
10744
diff
changeset
|
5424 XSETBUFFER (obuffer, current_buffer); |
413d44c0bd41
(exec_sentinel, read_process_output): If running filter
Richard M. Stallman <rms@gnu.org>
parents:
10744
diff
changeset
|
5425 okeymap = current_buffer->keymap; |
3510
b4a552ca4e99
(read_process_output): Deactivate the mark.
Richard M. Stallman <rms@gnu.org>
parents:
3238
diff
changeset
|
5426 |
578 | 5427 specbind (Qinhibit_quit, Qt); |
8231
5226ed89c1a6
(Qlast_nonmenu_event): New variable.
Richard M. Stallman <rms@gnu.org>
parents:
8063
diff
changeset
|
5428 specbind (Qlast_nonmenu_event, Qt); |
9030
b14532c71632
(exec_sentinel_error_handler): New function.
Richard M. Stallman <rms@gnu.org>
parents:
8570
diff
changeset
|
5429 |
16644
3a93437adce1
(status_notify): Test p->infd > 0
Richard M. Stallman <rms@gnu.org>
parents:
16464
diff
changeset
|
5430 /* In case we get recursively called, |
3a93437adce1
(status_notify): Test p->infd > 0
Richard M. Stallman <rms@gnu.org>
parents:
16464
diff
changeset
|
5431 and we already saved the match data nonrecursively, |
3a93437adce1
(status_notify): Test p->infd > 0
Richard M. Stallman <rms@gnu.org>
parents:
16464
diff
changeset
|
5432 save the same match data in safely recursive fashion. */ |
3a93437adce1
(status_notify): Test p->infd > 0
Richard M. Stallman <rms@gnu.org>
parents:
16464
diff
changeset
|
5433 if (outer_running_asynch_code) |
3a93437adce1
(status_notify): Test p->infd > 0
Richard M. Stallman <rms@gnu.org>
parents:
16464
diff
changeset
|
5434 { |
3a93437adce1
(status_notify): Test p->infd > 0
Richard M. Stallman <rms@gnu.org>
parents:
16464
diff
changeset
|
5435 Lisp_Object tem; |
3a93437adce1
(status_notify): Test p->infd > 0
Richard M. Stallman <rms@gnu.org>
parents:
16464
diff
changeset
|
5436 /* Don't clobber the CURRENT match data, either! */ |
63147
9bde03db5726
* composite.c (compose_chars_in_text):
Kim F. Storm <storm@cua.dk>
parents:
63128
diff
changeset
|
5437 tem = Fmatch_data (Qnil, Qnil, Qnil); |
9bde03db5726
* composite.c (compose_chars_in_text):
Kim F. Storm <storm@cua.dk>
parents:
63128
diff
changeset
|
5438 restore_search_regs (); |
9bde03db5726
* composite.c (compose_chars_in_text):
Kim F. Storm <storm@cua.dk>
parents:
63128
diff
changeset
|
5439 record_unwind_save_match_data (); |
9bde03db5726
* composite.c (compose_chars_in_text):
Kim F. Storm <storm@cua.dk>
parents:
63128
diff
changeset
|
5440 Fset_match_data (tem, Qt); |
16644
3a93437adce1
(status_notify): Test p->infd > 0
Richard M. Stallman <rms@gnu.org>
parents:
16464
diff
changeset
|
5441 } |
3a93437adce1
(status_notify): Test p->infd > 0
Richard M. Stallman <rms@gnu.org>
parents:
16464
diff
changeset
|
5442 |
3a93437adce1
(status_notify): Test p->infd > 0
Richard M. Stallman <rms@gnu.org>
parents:
16464
diff
changeset
|
5443 /* For speed, if a search happens within this code, |
3a93437adce1
(status_notify): Test p->infd > 0
Richard M. Stallman <rms@gnu.org>
parents:
16464
diff
changeset
|
5444 save the match data in a special nonrecursive fashion. */ |
10032
f689803caa92
Added code for automatically saving and restoring the match data
Francesco Potortì <pot@gnu.org>
parents:
9969
diff
changeset
|
5445 running_asynch_code = 1; |
16644
3a93437adce1
(status_notify): Test p->infd > 0
Richard M. Stallman <rms@gnu.org>
parents:
16464
diff
changeset
|
5446 |
88385
c60e206fcf58
Include "character.h" instead of "charset.h".
Kenichi Handa <handa@m17n.org>
parents:
42600
diff
changeset
|
5447 decode_coding_c_string (coding, chars, nbytes, Qt); |
c60e206fcf58
Include "character.h" instead of "charset.h".
Kenichi Handa <handa@m17n.org>
parents:
42600
diff
changeset
|
5448 text = coding->dst_object; |
c60e206fcf58
Include "character.h" instead of "charset.h".
Kenichi Handa <handa@m17n.org>
parents:
42600
diff
changeset
|
5449 Vlast_coding_system_used = CODING_ID_NAME (coding->id); |
30580
5d92193ed196
(read_process_output): Big simplification. Handle
Kenichi Handa <handa@m17n.org>
parents:
29921
diff
changeset
|
5450 /* A new coding system might be found. */ |
88385
c60e206fcf58
Include "character.h" instead of "charset.h".
Kenichi Handa <handa@m17n.org>
parents:
42600
diff
changeset
|
5451 if (!EQ (p->decode_coding_system, Vlast_coding_system_used)) |
30580
5d92193ed196
(read_process_output): Big simplification. Handle
Kenichi Handa <handa@m17n.org>
parents:
29921
diff
changeset
|
5452 { |
88385
c60e206fcf58
Include "character.h" instead of "charset.h".
Kenichi Handa <handa@m17n.org>
parents:
42600
diff
changeset
|
5453 p->decode_coding_system = Vlast_coding_system_used; |
30580
5d92193ed196
(read_process_output): Big simplification. Handle
Kenichi Handa <handa@m17n.org>
parents:
29921
diff
changeset
|
5454 |
5d92193ed196
(read_process_output): Big simplification. Handle
Kenichi Handa <handa@m17n.org>
parents:
29921
diff
changeset
|
5455 /* Don't call setup_coding_system for |
5d92193ed196
(read_process_output): Big simplification. Handle
Kenichi Handa <handa@m17n.org>
parents:
29921
diff
changeset
|
5456 proc_decode_coding_system[channel] here. It is done in |
5d92193ed196
(read_process_output): Big simplification. Handle
Kenichi Handa <handa@m17n.org>
parents:
29921
diff
changeset
|
5457 detect_coding called via decode_coding above. */ |
5d92193ed196
(read_process_output): Big simplification. Handle
Kenichi Handa <handa@m17n.org>
parents:
29921
diff
changeset
|
5458 |
5d92193ed196
(read_process_output): Big simplification. Handle
Kenichi Handa <handa@m17n.org>
parents:
29921
diff
changeset
|
5459 /* If a coding system for encoding is not yet decided, we set |
5d92193ed196
(read_process_output): Big simplification. Handle
Kenichi Handa <handa@m17n.org>
parents:
29921
diff
changeset
|
5460 it as the same as coding-system for decoding. |
5d92193ed196
(read_process_output): Big simplification. Handle
Kenichi Handa <handa@m17n.org>
parents:
29921
diff
changeset
|
5461 |
5d92193ed196
(read_process_output): Big simplification. Handle
Kenichi Handa <handa@m17n.org>
parents:
29921
diff
changeset
|
5462 But, before doing that we must check if |
5d92193ed196
(read_process_output): Big simplification. Handle
Kenichi Handa <handa@m17n.org>
parents:
29921
diff
changeset
|
5463 proc_encode_coding_system[p->outfd] surely points to a |
5d92193ed196
(read_process_output): Big simplification. Handle
Kenichi Handa <handa@m17n.org>
parents:
29921
diff
changeset
|
5464 valid memory because p->outfd will be changed once EOF is |
5d92193ed196
(read_process_output): Big simplification. Handle
Kenichi Handa <handa@m17n.org>
parents:
29921
diff
changeset
|
5465 sent to the process. */ |
5d92193ed196
(read_process_output): Big simplification. Handle
Kenichi Handa <handa@m17n.org>
parents:
29921
diff
changeset
|
5466 if (NILP (p->encode_coding_system) |
81826
077a1e6fd3f2
(struct Lisp_Process): Turn slots infd, outfd, kill_without_query, pty_flag,
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
80984
diff
changeset
|
5467 && proc_encode_coding_system[p->outfd]) |
30580
5d92193ed196
(read_process_output): Big simplification. Handle
Kenichi Handa <handa@m17n.org>
parents:
29921
diff
changeset
|
5468 { |
90392
8b24a6ec5090
(setup_process_coding_systems): Fix synching with
Kenichi Handa <handa@m17n.org>
parents:
90389
diff
changeset
|
5469 p->encode_coding_system |
8b24a6ec5090
(setup_process_coding_systems): Fix synching with
Kenichi Handa <handa@m17n.org>
parents:
90389
diff
changeset
|
5470 = coding_inherit_eol_type (Vlast_coding_system_used, Qnil); |
88385
c60e206fcf58
Include "character.h" instead of "charset.h".
Kenichi Handa <handa@m17n.org>
parents:
42600
diff
changeset
|
5471 setup_coding_system (p->encode_coding_system, |
81826
077a1e6fd3f2
(struct Lisp_Process): Turn slots infd, outfd, kill_without_query, pty_flag,
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
80984
diff
changeset
|
5472 proc_encode_coding_system[p->outfd]); |
30580
5d92193ed196
(read_process_output): Big simplification. Handle
Kenichi Handa <handa@m17n.org>
parents:
29921
diff
changeset
|
5473 } |
5d92193ed196
(read_process_output): Big simplification. Handle
Kenichi Handa <handa@m17n.org>
parents:
29921
diff
changeset
|
5474 } |
5d92193ed196
(read_process_output): Big simplification. Handle
Kenichi Handa <handa@m17n.org>
parents:
29921
diff
changeset
|
5475 |
89459
3e4c75be8383
(read_process_output): Handle carryover correctly.
Kenichi Handa <handa@m17n.org>
parents:
88554
diff
changeset
|
5476 if (coding->carryover_bytes > 0) |
3e4c75be8383
(read_process_output): Handle carryover correctly.
Kenichi Handa <handa@m17n.org>
parents:
88554
diff
changeset
|
5477 { |
89938
ab6b6e8cffe6
(read_process_output): Grow decoding_buf when needed;
Kenichi Handa <handa@m17n.org>
parents:
89909
diff
changeset
|
5478 if (SCHARS (p->decoding_buf) < coding->carryover_bytes) |
ab6b6e8cffe6
(read_process_output): Grow decoding_buf when needed;
Kenichi Handa <handa@m17n.org>
parents:
89909
diff
changeset
|
5479 p->decoding_buf = make_uninit_string (coding->carryover_bytes); |
89483 | 5480 bcopy (coding->carryover, SDATA (p->decoding_buf), |
89459
3e4c75be8383
(read_process_output): Handle carryover correctly.
Kenichi Handa <handa@m17n.org>
parents:
88554
diff
changeset
|
5481 coding->carryover_bytes); |
90982 | 5482 p->decoding_carryover = coding->carryover_bytes; |
89459
3e4c75be8383
(read_process_output): Handle carryover correctly.
Kenichi Handa <handa@m17n.org>
parents:
88554
diff
changeset
|
5483 } |
52093
25ad7be098ba
(read_process_output): Return the actually read bytes
Kenichi Handa <handa@m17n.org>
parents:
51637
diff
changeset
|
5484 if (SBYTES (text) > 0) |
34647
1898b3c996ff
(read_process_output): Don't run a filter if the code
Kenichi Handa <handa@m17n.org>
parents:
34352
diff
changeset
|
5485 internal_condition_case_1 (read_process_output_call, |
1898b3c996ff
(read_process_output): Don't run a filter if the code
Kenichi Handa <handa@m17n.org>
parents:
34352
diff
changeset
|
5486 Fcons (outstream, |
1898b3c996ff
(read_process_output): Don't run a filter if the code
Kenichi Handa <handa@m17n.org>
parents:
34352
diff
changeset
|
5487 Fcons (proc, Fcons (text, Qnil))), |
1898b3c996ff
(read_process_output): Don't run a filter if the code
Kenichi Handa <handa@m17n.org>
parents:
34352
diff
changeset
|
5488 !NILP (Vdebug_on_error) ? Qnil : Qerror, |
1898b3c996ff
(read_process_output): Don't run a filter if the code
Kenichi Handa <handa@m17n.org>
parents:
34352
diff
changeset
|
5489 read_process_output_error_handler); |
16644
3a93437adce1
(status_notify): Test p->infd > 0
Richard M. Stallman <rms@gnu.org>
parents:
16464
diff
changeset
|
5490 |
3a93437adce1
(status_notify): Test p->infd > 0
Richard M. Stallman <rms@gnu.org>
parents:
16464
diff
changeset
|
5491 /* If we saved the match data nonrecursively, restore it now. */ |
63147
9bde03db5726
* composite.c (compose_chars_in_text):
Kim F. Storm <storm@cua.dk>
parents:
63128
diff
changeset
|
5492 restore_search_regs (); |
16644
3a93437adce1
(status_notify): Test p->infd > 0
Richard M. Stallman <rms@gnu.org>
parents:
16464
diff
changeset
|
5493 running_asynch_code = outer_running_asynch_code; |
578 | 5494 |
3666
c7ff787b096f
(read_process_output): Don't deactivate the mark.
Richard M. Stallman <rms@gnu.org>
parents:
3608
diff
changeset
|
5495 /* Handling the process output should not deactivate the mark. */ |
3510
b4a552ca4e99
(read_process_output): Deactivate the mark.
Richard M. Stallman <rms@gnu.org>
parents:
3238
diff
changeset
|
5496 Vdeactivate_mark = odeactivate; |
b4a552ca4e99
(read_process_output): Deactivate the mark.
Richard M. Stallman <rms@gnu.org>
parents:
3238
diff
changeset
|
5497 |
23460
94f4ba741f22
(exec_sentinel, read_process_output):
Richard M. Stallman <rms@gnu.org>
parents:
23405
diff
changeset
|
5498 /* Restore waiting_for_user_input_p as it was |
94f4ba741f22
(exec_sentinel, read_process_output):
Richard M. Stallman <rms@gnu.org>
parents:
23405
diff
changeset
|
5499 when we were called, in case the filter clobbered it. */ |
94f4ba741f22
(exec_sentinel, read_process_output):
Richard M. Stallman <rms@gnu.org>
parents:
23405
diff
changeset
|
5500 waiting_for_user_input_p = waiting; |
94f4ba741f22
(exec_sentinel, read_process_output):
Richard M. Stallman <rms@gnu.org>
parents:
23405
diff
changeset
|
5501 |
12808
4db1f387e85f
(read_process_output, exec_sentinel): Call
Richard M. Stallman <rms@gnu.org>
parents:
12749
diff
changeset
|
5502 #if 0 /* Call record_asynch_buffer_change unconditionally, |
4db1f387e85f
(read_process_output, exec_sentinel): Call
Richard M. Stallman <rms@gnu.org>
parents:
12749
diff
changeset
|
5503 because we might have changed minor modes or other things |
4db1f387e85f
(read_process_output, exec_sentinel): Call
Richard M. Stallman <rms@gnu.org>
parents:
12749
diff
changeset
|
5504 that affect key bindings. */ |
10914
413d44c0bd41
(exec_sentinel, read_process_output): If running filter
Richard M. Stallman <rms@gnu.org>
parents:
10744
diff
changeset
|
5505 if (! EQ (Fcurrent_buffer (), obuffer) |
413d44c0bd41
(exec_sentinel, read_process_output): If running filter
Richard M. Stallman <rms@gnu.org>
parents:
10744
diff
changeset
|
5506 || ! EQ (current_buffer->keymap, okeymap)) |
12808
4db1f387e85f
(read_process_output, exec_sentinel): Call
Richard M. Stallman <rms@gnu.org>
parents:
12749
diff
changeset
|
5507 #endif |
13159
2af96ac471bc
(exec_sentinel, read_process_output):
Richard M. Stallman <rms@gnu.org>
parents:
12808
diff
changeset
|
5508 /* But do it only if the caller is actually going to read events. |
2af96ac471bc
(exec_sentinel, read_process_output):
Richard M. Stallman <rms@gnu.org>
parents:
12808
diff
changeset
|
5509 Otherwise there's no need to make him wake up, and it could |
71762 | 5510 cause trouble (for example it would make sit_for return). */ |
13159
2af96ac471bc
(exec_sentinel, read_process_output):
Richard M. Stallman <rms@gnu.org>
parents:
12808
diff
changeset
|
5511 if (waiting_for_user_input_p == -1) |
2af96ac471bc
(exec_sentinel, read_process_output):
Richard M. Stallman <rms@gnu.org>
parents:
12808
diff
changeset
|
5512 record_asynch_buffer_change (); |
6748
b1cde622fa65
(read_process_output): If buffer changes, record that fact.
Karl Heuer <kwzh@gnu.org>
parents:
6569
diff
changeset
|
5513 |
5561
fd7524d61a8d
(read_process_output): Supply second arg to unbind_to.
Richard M. Stallman <rms@gnu.org>
parents:
5548
diff
changeset
|
5514 unbind_to (count, Qnil); |
52093
25ad7be098ba
(read_process_output): Return the actually read bytes
Kenichi Handa <handa@m17n.org>
parents:
51637
diff
changeset
|
5515 return nbytes; |
578 | 5516 } |
5517 | |
5518 /* If no filter, write into buffer if it isn't dead. */ | |
5519 if (!NILP (p->buffer) && !NILP (XBUFFER (p->buffer)->name)) | |
5520 { | |
1594
b476a97ad17e
* systty.h, process.c, buffer.h, callproc.c, sysdep.c, dired.c:
Jim Blandy <jimb@redhat.com>
parents:
1569
diff
changeset
|
5521 Lisp_Object old_read_only; |
17604
77b137e2d9a7
(read_process_output): Update opoint, old_begv and old_zv
Richard M. Stallman <rms@gnu.org>
parents:
17247
diff
changeset
|
5522 int old_begv, old_zv; |
20551
5f17380c85f1
(status_notify): Use byte and char pointers.
Richard M. Stallman <rms@gnu.org>
parents:
20433
diff
changeset
|
5523 int old_begv_byte, old_zv_byte; |
3510
b4a552ca4e99
(read_process_output): Deactivate the mark.
Richard M. Stallman <rms@gnu.org>
parents:
3238
diff
changeset
|
5524 Lisp_Object odeactivate; |
20551
5f17380c85f1
(status_notify): Use byte and char pointers.
Richard M. Stallman <rms@gnu.org>
parents:
20433
diff
changeset
|
5525 int before, before_byte; |
5f17380c85f1
(status_notify): Use byte and char pointers.
Richard M. Stallman <rms@gnu.org>
parents:
20433
diff
changeset
|
5526 int opoint_byte; |
30580
5d92193ed196
(read_process_output): Big simplification. Handle
Kenichi Handa <handa@m17n.org>
parents:
29921
diff
changeset
|
5527 Lisp_Object text; |
34352
642fb6c53a10
(read_process_output): Make sure the process marker's
Gerd Moellmann <gerd@gnu.org>
parents:
32864
diff
changeset
|
5528 struct buffer *b; |
103134
9569175bb813
(read_process_output): Make sure the current buffer is
Andreas Schwab <schwab@linux-m68k.org>
parents:
103108
diff
changeset
|
5529 int count = SPECPDL_INDEX (); |
3510
b4a552ca4e99
(read_process_output): Deactivate the mark.
Richard M. Stallman <rms@gnu.org>
parents:
3238
diff
changeset
|
5530 |
b4a552ca4e99
(read_process_output): Deactivate the mark.
Richard M. Stallman <rms@gnu.org>
parents:
3238
diff
changeset
|
5531 odeactivate = Vdeactivate_mark; |
578 | 5532 |
103134
9569175bb813
(read_process_output): Make sure the current buffer is
Andreas Schwab <schwab@linux-m68k.org>
parents:
103108
diff
changeset
|
5533 record_unwind_protect (Fset_buffer, Fcurrent_buffer ()); |
578 | 5534 Fset_buffer (p->buffer); |
16039
855c8d8ba0f0
Change all references from point to PT.
Karl Heuer <kwzh@gnu.org>
parents:
15895
diff
changeset
|
5535 opoint = PT; |
20551
5f17380c85f1
(status_notify): Use byte and char pointers.
Richard M. Stallman <rms@gnu.org>
parents:
20433
diff
changeset
|
5536 opoint_byte = PT_BYTE; |
1594
b476a97ad17e
* systty.h, process.c, buffer.h, callproc.c, sysdep.c, dired.c:
Jim Blandy <jimb@redhat.com>
parents:
1569
diff
changeset
|
5537 old_read_only = current_buffer->read_only; |
17604
77b137e2d9a7
(read_process_output): Update opoint, old_begv and old_zv
Richard M. Stallman <rms@gnu.org>
parents:
17247
diff
changeset
|
5538 old_begv = BEGV; |
77b137e2d9a7
(read_process_output): Update opoint, old_begv and old_zv
Richard M. Stallman <rms@gnu.org>
parents:
17247
diff
changeset
|
5539 old_zv = ZV; |
20551
5f17380c85f1
(status_notify): Use byte and char pointers.
Richard M. Stallman <rms@gnu.org>
parents:
20433
diff
changeset
|
5540 old_begv_byte = BEGV_BYTE; |
5f17380c85f1
(status_notify): Use byte and char pointers.
Richard M. Stallman <rms@gnu.org>
parents:
20433
diff
changeset
|
5541 old_zv_byte = ZV_BYTE; |
1594
b476a97ad17e
* systty.h, process.c, buffer.h, callproc.c, sysdep.c, dired.c:
Jim Blandy <jimb@redhat.com>
parents:
1569
diff
changeset
|
5542 |
b476a97ad17e
* systty.h, process.c, buffer.h, callproc.c, sysdep.c, dired.c:
Jim Blandy <jimb@redhat.com>
parents:
1569
diff
changeset
|
5543 current_buffer->read_only = Qnil; |
578 | 5544 |
5545 /* Insert new output into buffer | |
5546 at the current end-of-output marker, | |
5547 thus preserving logical ordering of input and output. */ | |
5548 if (XMARKER (p->mark)->buffer) | |
20551
5f17380c85f1
(status_notify): Use byte and char pointers.
Richard M. Stallman <rms@gnu.org>
parents:
20433
diff
changeset
|
5549 SET_PT_BOTH (clip_to_bounds (BEGV, marker_position (p->mark), ZV), |
5f17380c85f1
(status_notify): Use byte and char pointers.
Richard M. Stallman <rms@gnu.org>
parents:
20433
diff
changeset
|
5550 clip_to_bounds (BEGV_BYTE, marker_byte_position (p->mark), |
5f17380c85f1
(status_notify): Use byte and char pointers.
Richard M. Stallman <rms@gnu.org>
parents:
20433
diff
changeset
|
5551 ZV_BYTE)); |
578 | 5552 else |
20551
5f17380c85f1
(status_notify): Use byte and char pointers.
Richard M. Stallman <rms@gnu.org>
parents:
20433
diff
changeset
|
5553 SET_PT_BOTH (ZV, ZV_BYTE); |
17604
77b137e2d9a7
(read_process_output): Update opoint, old_begv and old_zv
Richard M. Stallman <rms@gnu.org>
parents:
17247
diff
changeset
|
5554 before = PT; |
20551
5f17380c85f1
(status_notify): Use byte and char pointers.
Richard M. Stallman <rms@gnu.org>
parents:
20433
diff
changeset
|
5555 before_byte = PT_BYTE; |
1594
b476a97ad17e
* systty.h, process.c, buffer.h, callproc.c, sysdep.c, dired.c:
Jim Blandy <jimb@redhat.com>
parents:
1569
diff
changeset
|
5556 |
b476a97ad17e
* systty.h, process.c, buffer.h, callproc.c, sysdep.c, dired.c:
Jim Blandy <jimb@redhat.com>
parents:
1569
diff
changeset
|
5557 /* If the output marker is outside of the visible region, save |
b476a97ad17e
* systty.h, process.c, buffer.h, callproc.c, sysdep.c, dired.c:
Jim Blandy <jimb@redhat.com>
parents:
1569
diff
changeset
|
5558 the restriction and widen. */ |
16039
855c8d8ba0f0
Change all references from point to PT.
Karl Heuer <kwzh@gnu.org>
parents:
15895
diff
changeset
|
5559 if (! (BEGV <= PT && PT <= ZV)) |
1594
b476a97ad17e
* systty.h, process.c, buffer.h, callproc.c, sysdep.c, dired.c:
Jim Blandy <jimb@redhat.com>
parents:
1569
diff
changeset
|
5560 Fwiden (); |
b476a97ad17e
* systty.h, process.c, buffer.h, callproc.c, sysdep.c, dired.c:
Jim Blandy <jimb@redhat.com>
parents:
1569
diff
changeset
|
5561 |
88385
c60e206fcf58
Include "character.h" instead of "charset.h".
Kenichi Handa <handa@m17n.org>
parents:
42600
diff
changeset
|
5562 decode_coding_c_string (coding, chars, nbytes, Qt); |
c60e206fcf58
Include "character.h" instead of "charset.h".
Kenichi Handa <handa@m17n.org>
parents:
42600
diff
changeset
|
5563 text = coding->dst_object; |
c60e206fcf58
Include "character.h" instead of "charset.h".
Kenichi Handa <handa@m17n.org>
parents:
42600
diff
changeset
|
5564 Vlast_coding_system_used = CODING_ID_NAME (coding->id); |
30580
5d92193ed196
(read_process_output): Big simplification. Handle
Kenichi Handa <handa@m17n.org>
parents:
29921
diff
changeset
|
5565 /* A new coding system might be found. See the comment in the |
5d92193ed196
(read_process_output): Big simplification. Handle
Kenichi Handa <handa@m17n.org>
parents:
29921
diff
changeset
|
5566 similar code in the previous `if' block. */ |
88385
c60e206fcf58
Include "character.h" instead of "charset.h".
Kenichi Handa <handa@m17n.org>
parents:
42600
diff
changeset
|
5567 if (!EQ (p->decode_coding_system, Vlast_coding_system_used)) |
30580
5d92193ed196
(read_process_output): Big simplification. Handle
Kenichi Handa <handa@m17n.org>
parents:
29921
diff
changeset
|
5568 { |
88385
c60e206fcf58
Include "character.h" instead of "charset.h".
Kenichi Handa <handa@m17n.org>
parents:
42600
diff
changeset
|
5569 p->decode_coding_system = Vlast_coding_system_used; |
30580
5d92193ed196
(read_process_output): Big simplification. Handle
Kenichi Handa <handa@m17n.org>
parents:
29921
diff
changeset
|
5570 if (NILP (p->encode_coding_system) |
81826
077a1e6fd3f2
(struct Lisp_Process): Turn slots infd, outfd, kill_without_query, pty_flag,
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
80984
diff
changeset
|
5571 && proc_encode_coding_system[p->outfd]) |
30580
5d92193ed196
(read_process_output): Big simplification. Handle
Kenichi Handa <handa@m17n.org>
parents:
29921
diff
changeset
|
5572 { |
90392
8b24a6ec5090
(setup_process_coding_systems): Fix synching with
Kenichi Handa <handa@m17n.org>
parents:
90389
diff
changeset
|
5573 p->encode_coding_system |
8b24a6ec5090
(setup_process_coding_systems): Fix synching with
Kenichi Handa <handa@m17n.org>
parents:
90389
diff
changeset
|
5574 = coding_inherit_eol_type (Vlast_coding_system_used, Qnil); |
88385
c60e206fcf58
Include "character.h" instead of "charset.h".
Kenichi Handa <handa@m17n.org>
parents:
42600
diff
changeset
|
5575 setup_coding_system (p->encode_coding_system, |
81826
077a1e6fd3f2
(struct Lisp_Process): Turn slots infd, outfd, kill_without_query, pty_flag,
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
80984
diff
changeset
|
5576 proc_encode_coding_system[p->outfd]); |
30580
5d92193ed196
(read_process_output): Big simplification. Handle
Kenichi Handa <handa@m17n.org>
parents:
29921
diff
changeset
|
5577 } |
5d92193ed196
(read_process_output): Big simplification. Handle
Kenichi Handa <handa@m17n.org>
parents:
29921
diff
changeset
|
5578 } |
89459
3e4c75be8383
(read_process_output): Handle carryover correctly.
Kenichi Handa <handa@m17n.org>
parents:
88554
diff
changeset
|
5579 if (coding->carryover_bytes > 0) |
3e4c75be8383
(read_process_output): Handle carryover correctly.
Kenichi Handa <handa@m17n.org>
parents:
88554
diff
changeset
|
5580 { |
89938
ab6b6e8cffe6
(read_process_output): Grow decoding_buf when needed;
Kenichi Handa <handa@m17n.org>
parents:
89909
diff
changeset
|
5581 if (SCHARS (p->decoding_buf) < coding->carryover_bytes) |
ab6b6e8cffe6
(read_process_output): Grow decoding_buf when needed;
Kenichi Handa <handa@m17n.org>
parents:
89909
diff
changeset
|
5582 p->decoding_buf = make_uninit_string (coding->carryover_bytes); |
89483 | 5583 bcopy (coding->carryover, SDATA (p->decoding_buf), |
89459
3e4c75be8383
(read_process_output): Handle carryover correctly.
Kenichi Handa <handa@m17n.org>
parents:
88554
diff
changeset
|
5584 coding->carryover_bytes); |
90982 | 5585 p->decoding_carryover = coding->carryover_bytes; |
89459
3e4c75be8383
(read_process_output): Handle carryover correctly.
Kenichi Handa <handa@m17n.org>
parents:
88554
diff
changeset
|
5586 } |
31419
bd258f4dc0fa
(read_process_output): Before inserting the decoded
Kenichi Handa <handa@m17n.org>
parents:
31136
diff
changeset
|
5587 /* Adjust the multibyteness of TEXT to that of the buffer. */ |
bd258f4dc0fa
(read_process_output): Before inserting the decoded
Kenichi Handa <handa@m17n.org>
parents:
31136
diff
changeset
|
5588 if (NILP (current_buffer->enable_multibyte_characters) |
bd258f4dc0fa
(read_process_output): Before inserting the decoded
Kenichi Handa <handa@m17n.org>
parents:
31136
diff
changeset
|
5589 != ! STRING_MULTIBYTE (text)) |
bd258f4dc0fa
(read_process_output): Before inserting the decoded
Kenichi Handa <handa@m17n.org>
parents:
31136
diff
changeset
|
5590 text = (STRING_MULTIBYTE (text) |
32395
11b8c07e5fed
(read_process_output): Cancel previous change.
Kenichi Handa <handa@m17n.org>
parents:
32371
diff
changeset
|
5591 ? Fstring_as_unibyte (text) |
49667
cbec1327e2f1
(QCfilter_multibyte): New variable.
Kenichi Handa <handa@m17n.org>
parents:
49600
diff
changeset
|
5592 : Fstring_to_multibyte (text)); |
32395
11b8c07e5fed
(read_process_output): Cancel previous change.
Kenichi Handa <handa@m17n.org>
parents:
32371
diff
changeset
|
5593 /* Insert before markers in case we are inserting where |
11b8c07e5fed
(read_process_output): Cancel previous change.
Kenichi Handa <handa@m17n.org>
parents:
32371
diff
changeset
|
5594 the buffer's mark is, and the user's next command is Meta-y. */ |
52093
25ad7be098ba
(read_process_output): Return the actually read bytes
Kenichi Handa <handa@m17n.org>
parents:
51637
diff
changeset
|
5595 insert_from_string_before_markers (text, 0, 0, |
25ad7be098ba
(read_process_output): Return the actually read bytes
Kenichi Handa <handa@m17n.org>
parents:
51637
diff
changeset
|
5596 SCHARS (text), SBYTES (text), 0); |
29017
8f10362eb5ff
(Fstart_process): GCPRO current_dir before calling
Kenichi Handa <handa@m17n.org>
parents:
28157
diff
changeset
|
5597 |
34352
642fb6c53a10
(read_process_output): Make sure the process marker's
Gerd Moellmann <gerd@gnu.org>
parents:
32864
diff
changeset
|
5598 /* Make sure the process marker's position is valid when the |
642fb6c53a10
(read_process_output): Make sure the process marker's
Gerd Moellmann <gerd@gnu.org>
parents:
32864
diff
changeset
|
5599 process buffer is changed in the signal_after_change above. |
642fb6c53a10
(read_process_output): Make sure the process marker's
Gerd Moellmann <gerd@gnu.org>
parents:
32864
diff
changeset
|
5600 W3 is known to do that. */ |
642fb6c53a10
(read_process_output): Make sure the process marker's
Gerd Moellmann <gerd@gnu.org>
parents:
32864
diff
changeset
|
5601 if (BUFFERP (p->buffer) |
642fb6c53a10
(read_process_output): Make sure the process marker's
Gerd Moellmann <gerd@gnu.org>
parents:
32864
diff
changeset
|
5602 && (b = XBUFFER (p->buffer), b != current_buffer)) |
642fb6c53a10
(read_process_output): Make sure the process marker's
Gerd Moellmann <gerd@gnu.org>
parents:
32864
diff
changeset
|
5603 set_marker_both (p->mark, p->buffer, BUF_PT (b), BUF_PT_BYTE (b)); |
642fb6c53a10
(read_process_output): Make sure the process marker's
Gerd Moellmann <gerd@gnu.org>
parents:
32864
diff
changeset
|
5604 else |
642fb6c53a10
(read_process_output): Make sure the process marker's
Gerd Moellmann <gerd@gnu.org>
parents:
32864
diff
changeset
|
5605 set_marker_both (p->mark, p->buffer, PT, PT_BYTE); |
1594
b476a97ad17e
* systty.h, process.c, buffer.h, callproc.c, sysdep.c, dired.c:
Jim Blandy <jimb@redhat.com>
parents:
1569
diff
changeset
|
5606 |
578 | 5607 update_mode_lines++; |
5608 | |
17604
77b137e2d9a7
(read_process_output): Update opoint, old_begv and old_zv
Richard M. Stallman <rms@gnu.org>
parents:
17247
diff
changeset
|
5609 /* Make sure opoint and the old restrictions |
77b137e2d9a7
(read_process_output): Update opoint, old_begv and old_zv
Richard M. Stallman <rms@gnu.org>
parents:
17247
diff
changeset
|
5610 float ahead of any new text just as point would. */ |
77b137e2d9a7
(read_process_output): Update opoint, old_begv and old_zv
Richard M. Stallman <rms@gnu.org>
parents:
17247
diff
changeset
|
5611 if (opoint >= before) |
20551
5f17380c85f1
(status_notify): Use byte and char pointers.
Richard M. Stallman <rms@gnu.org>
parents:
20433
diff
changeset
|
5612 { |
5f17380c85f1
(status_notify): Use byte and char pointers.
Richard M. Stallman <rms@gnu.org>
parents:
20433
diff
changeset
|
5613 opoint += PT - before; |
5f17380c85f1
(status_notify): Use byte and char pointers.
Richard M. Stallman <rms@gnu.org>
parents:
20433
diff
changeset
|
5614 opoint_byte += PT_BYTE - before_byte; |
5f17380c85f1
(status_notify): Use byte and char pointers.
Richard M. Stallman <rms@gnu.org>
parents:
20433
diff
changeset
|
5615 } |
17604
77b137e2d9a7
(read_process_output): Update opoint, old_begv and old_zv
Richard M. Stallman <rms@gnu.org>
parents:
17247
diff
changeset
|
5616 if (old_begv > before) |
20551
5f17380c85f1
(status_notify): Use byte and char pointers.
Richard M. Stallman <rms@gnu.org>
parents:
20433
diff
changeset
|
5617 { |
5f17380c85f1
(status_notify): Use byte and char pointers.
Richard M. Stallman <rms@gnu.org>
parents:
20433
diff
changeset
|
5618 old_begv += PT - before; |
5f17380c85f1
(status_notify): Use byte and char pointers.
Richard M. Stallman <rms@gnu.org>
parents:
20433
diff
changeset
|
5619 old_begv_byte += PT_BYTE - before_byte; |
5f17380c85f1
(status_notify): Use byte and char pointers.
Richard M. Stallman <rms@gnu.org>
parents:
20433
diff
changeset
|
5620 } |
17604
77b137e2d9a7
(read_process_output): Update opoint, old_begv and old_zv
Richard M. Stallman <rms@gnu.org>
parents:
17247
diff
changeset
|
5621 if (old_zv >= before) |
20551
5f17380c85f1
(status_notify): Use byte and char pointers.
Richard M. Stallman <rms@gnu.org>
parents:
20433
diff
changeset
|
5622 { |
5f17380c85f1
(status_notify): Use byte and char pointers.
Richard M. Stallman <rms@gnu.org>
parents:
20433
diff
changeset
|
5623 old_zv += PT - before; |
5f17380c85f1
(status_notify): Use byte and char pointers.
Richard M. Stallman <rms@gnu.org>
parents:
20433
diff
changeset
|
5624 old_zv_byte += PT_BYTE - before_byte; |
5f17380c85f1
(status_notify): Use byte and char pointers.
Richard M. Stallman <rms@gnu.org>
parents:
20433
diff
changeset
|
5625 } |
17604
77b137e2d9a7
(read_process_output): Update opoint, old_begv and old_zv
Richard M. Stallman <rms@gnu.org>
parents:
17247
diff
changeset
|
5626 |
1594
b476a97ad17e
* systty.h, process.c, buffer.h, callproc.c, sysdep.c, dired.c:
Jim Blandy <jimb@redhat.com>
parents:
1569
diff
changeset
|
5627 /* If the restriction isn't what it should be, set it. */ |
17604
77b137e2d9a7
(read_process_output): Update opoint, old_begv and old_zv
Richard M. Stallman <rms@gnu.org>
parents:
17247
diff
changeset
|
5628 if (old_begv != BEGV || old_zv != ZV) |
77b137e2d9a7
(read_process_output): Update opoint, old_begv and old_zv
Richard M. Stallman <rms@gnu.org>
parents:
17247
diff
changeset
|
5629 Fnarrow_to_region (make_number (old_begv), make_number (old_zv)); |
1594
b476a97ad17e
* systty.h, process.c, buffer.h, callproc.c, sysdep.c, dired.c:
Jim Blandy <jimb@redhat.com>
parents:
1569
diff
changeset
|
5630 |
3666
c7ff787b096f
(read_process_output): Don't deactivate the mark.
Richard M. Stallman <rms@gnu.org>
parents:
3608
diff
changeset
|
5631 /* Handling the process output should not deactivate the mark. */ |
3510
b4a552ca4e99
(read_process_output): Deactivate the mark.
Richard M. Stallman <rms@gnu.org>
parents:
3238
diff
changeset
|
5632 Vdeactivate_mark = odeactivate; |
b4a552ca4e99
(read_process_output): Deactivate the mark.
Richard M. Stallman <rms@gnu.org>
parents:
3238
diff
changeset
|
5633 |
1594
b476a97ad17e
* systty.h, process.c, buffer.h, callproc.c, sysdep.c, dired.c:
Jim Blandy <jimb@redhat.com>
parents:
1569
diff
changeset
|
5634 current_buffer->read_only = old_read_only; |
20551
5f17380c85f1
(status_notify): Use byte and char pointers.
Richard M. Stallman <rms@gnu.org>
parents:
20433
diff
changeset
|
5635 SET_PT_BOTH (opoint, opoint_byte); |
103134
9569175bb813
(read_process_output): Make sure the current buffer is
Andreas Schwab <schwab@linux-m68k.org>
parents:
103108
diff
changeset
|
5636 unbind_to (count, Qnil); |
578 | 5637 } |
20594
6e5a5afbe628
(read_process_output): Use insert_1_both.
Richard M. Stallman <rms@gnu.org>
parents:
20551
diff
changeset
|
5638 return nbytes; |
578 | 5639 } |
5640 | |
5641 DEFUN ("waiting-for-user-input-p", Fwaiting_for_user_input_p, Swaiting_for_user_input_p, | |
5642 0, 0, 0, | |
55444
976d03256b41
(Fwaiting_for_user_input_p, Fmake_network_process)
Juanma Barranquero <lekktu@gmail.com>
parents:
53835
diff
changeset
|
5643 doc: /* Returns non-nil if Emacs is waiting for input from the user. |
40103
6b389fb978bc
Change doc-string comments to `new style' [w/`doc:' keyword].
Pavel Janík <Pavel@Janik.cz>
parents:
39973
diff
changeset
|
5644 This is intended for use by asynchronous process output filters and sentinels. */) |
6b389fb978bc
Change doc-string comments to `new style' [w/`doc:' keyword].
Pavel Janík <Pavel@Janik.cz>
parents:
39973
diff
changeset
|
5645 () |
578 | 5646 { |
7352
ef89b78c1a92
(wait_reading_process_input): Don't call prepare_menu_bars
Richard M. Stallman <rms@gnu.org>
parents:
7266
diff
changeset
|
5647 return (waiting_for_user_input_p ? Qt : Qnil); |
578 | 5648 } |
5649 | |
5650 /* Sending data to subprocess */ | |
5651 | |
5652 jmp_buf send_process_frame; | |
31806
b148beb59511
(process_sent_to): New variable.
Gerd Moellmann <gerd@gnu.org>
parents:
31419
diff
changeset
|
5653 Lisp_Object process_sent_to; |
578 | 5654 |
5655 SIGTYPE | |
5656 send_process_trap () | |
5657 { | |
58986
59945307b86b
* syssignal.h: Declare main_thread.
Jan Djärv <jan.h.d@swipnet.se>
parents:
58082
diff
changeset
|
5658 SIGNAL_THREAD_CHECK (SIGPIPE); |
62334
f9dc4e8a41fe
(send_process_trap): Unblock SIGPIPE.
Richard M. Stallman <rms@gnu.org>
parents:
60892
diff
changeset
|
5659 sigunblock (sigmask (SIGPIPE)); |
578 | 5660 longjmp (send_process_frame, 1); |
5661 } | |
5662 | |
8063
30861f2f4f84
(send_process): Major rewrite.
Richard M. Stallman <rms@gnu.org>
parents:
7937
diff
changeset
|
5663 /* Send some data to process PROC. |
30861f2f4f84
(send_process): Major rewrite.
Richard M. Stallman <rms@gnu.org>
parents:
7937
diff
changeset
|
5664 BUF is the beginning of the data; LEN is the number of characters. |
32864
21acd0c60f5d
(send_process): If OBJECT is t, it means that the data
Kenichi Handa <handa@m17n.org>
parents:
32395
diff
changeset
|
5665 OBJECT is the Lisp object that the data comes from. If OBJECT is |
21acd0c60f5d
(send_process): If OBJECT is t, it means that the data
Kenichi Handa <handa@m17n.org>
parents:
32395
diff
changeset
|
5666 nil or t, it means that the data comes from C string. |
21acd0c60f5d
(send_process): If OBJECT is t, it means that the data
Kenichi Handa <handa@m17n.org>
parents:
32395
diff
changeset
|
5667 |
21acd0c60f5d
(send_process): If OBJECT is t, it means that the data
Kenichi Handa <handa@m17n.org>
parents:
32395
diff
changeset
|
5668 If OBJECT is not nil, the data is encoded by PROC's coding-system |
21acd0c60f5d
(send_process): If OBJECT is t, it means that the data
Kenichi Handa <handa@m17n.org>
parents:
32395
diff
changeset
|
5669 for encoding before it is sent. |
28157
336858b2b11a
(send_process): Add a hint that the function
Gerd Moellmann <gerd@gnu.org>
parents:
28012
diff
changeset
|
5670 |
336858b2b11a
(send_process): Add a hint that the function
Gerd Moellmann <gerd@gnu.org>
parents:
28012
diff
changeset
|
5671 This function can evaluate Lisp code and can garbage collect. */ |
8063
30861f2f4f84
(send_process): Major rewrite.
Richard M. Stallman <rms@gnu.org>
parents:
7937
diff
changeset
|
5672 |
64977
d26871fb1b7b
(deactivate_process, status_notify, read_process_output)
Kim F. Storm <storm@cua.dk>
parents:
64770
diff
changeset
|
5673 static void |
8063
30861f2f4f84
(send_process): Major rewrite.
Richard M. Stallman <rms@gnu.org>
parents:
7937
diff
changeset
|
5674 send_process (proc, buf, len, object) |
11926
40d7e6f04ebe
(create_process, send_process): Add volatile qualifiers.
Karl Heuer <kwzh@gnu.org>
parents:
11845
diff
changeset
|
5675 volatile Lisp_Object proc; |
31806
b148beb59511
(process_sent_to): New variable.
Gerd Moellmann <gerd@gnu.org>
parents:
31419
diff
changeset
|
5676 unsigned char *volatile buf; |
b148beb59511
(process_sent_to): New variable.
Gerd Moellmann <gerd@gnu.org>
parents:
31419
diff
changeset
|
5677 volatile int len; |
b148beb59511
(process_sent_to): New variable.
Gerd Moellmann <gerd@gnu.org>
parents:
31419
diff
changeset
|
5678 volatile Lisp_Object object; |
578 | 5679 { |
11926
40d7e6f04ebe
(create_process, send_process): Add volatile qualifiers.
Karl Heuer <kwzh@gnu.org>
parents:
11845
diff
changeset
|
5680 /* Use volatile to protect variables from being clobbered by longjmp. */ |
53472
1a5fe79d27f3
(ADAPTIVE_READ_BUFFERING): New conditional.
Kim F. Storm <storm@cua.dk>
parents:
53072
diff
changeset
|
5681 struct Lisp_Process *p = XPROCESS (proc); |
578 | 5682 int rv; |
17041
b61cbe595be5
Include charset.h and coding.h.
Karl Heuer <kwzh@gnu.org>
parents:
16780
diff
changeset
|
5683 struct coding_system *coding; |
103621
444861df76cd
Simplify last change.
Andreas Schwab <schwab@linux-m68k.org>
parents:
103620
diff
changeset
|
5684 struct gcpro gcpro1; |
62604
324a4f7ffebc
(send_process): Move misplaced volatile.
Andreas Schwab <schwab@suse.de>
parents:
62602
diff
changeset
|
5685 SIGTYPE (*volatile old_sigpipe) (); |
103621
444861df76cd
Simplify last change.
Andreas Schwab <schwab@linux-m68k.org>
parents:
103620
diff
changeset
|
5686 |
444861df76cd
Simplify last change.
Andreas Schwab <schwab@linux-m68k.org>
parents:
103620
diff
changeset
|
5687 GCPRO1 (object); |
578 | 5688 |
69873
2d844bbbccd4
* process.h (struct Lisp_Process): Replace Lisp_Objects `pid',
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
69634
diff
changeset
|
5689 if (p->raw_status_new) |
53472
1a5fe79d27f3
(ADAPTIVE_READ_BUFFERING): New conditional.
Kim F. Storm <storm@cua.dk>
parents:
53072
diff
changeset
|
5690 update_status (p); |
1a5fe79d27f3
(ADAPTIVE_READ_BUFFERING): New conditional.
Kim F. Storm <storm@cua.dk>
parents:
53072
diff
changeset
|
5691 if (! EQ (p->status, Qrun)) |
1a5fe79d27f3
(ADAPTIVE_READ_BUFFERING): New conditional.
Kim F. Storm <storm@cua.dk>
parents:
53072
diff
changeset
|
5692 error ("Process %s not running", SDATA (p->name)); |
81826
077a1e6fd3f2
(struct Lisp_Process): Turn slots infd, outfd, kill_without_query, pty_flag,
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
80984
diff
changeset
|
5693 if (p->outfd < 0) |
53472
1a5fe79d27f3
(ADAPTIVE_READ_BUFFERING): New conditional.
Kim F. Storm <storm@cua.dk>
parents:
53072
diff
changeset
|
5694 error ("Output file descriptor of %s is closed", SDATA (p->name)); |
1a5fe79d27f3
(ADAPTIVE_READ_BUFFERING): New conditional.
Kim F. Storm <storm@cua.dk>
parents:
53072
diff
changeset
|
5695 |
81826
077a1e6fd3f2
(struct Lisp_Process): Turn slots infd, outfd, kill_without_query, pty_flag,
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
80984
diff
changeset
|
5696 coding = proc_encode_coding_system[p->outfd]; |
88385
c60e206fcf58
Include "character.h" instead of "charset.h".
Kenichi Handa <handa@m17n.org>
parents:
42600
diff
changeset
|
5697 Vlast_coding_system_used = CODING_ID_NAME (coding->id); |
20433
a43789debf48
(read_process_output): Fix previous change, i.e, if
Kenichi Handa <handa@m17n.org>
parents:
20428
diff
changeset
|
5698 |
30580
5d92193ed196
(read_process_output): Big simplification. Handle
Kenichi Handa <handa@m17n.org>
parents:
29921
diff
changeset
|
5699 if ((STRINGP (object) && STRING_MULTIBYTE (object)) |
5d92193ed196
(read_process_output): Big simplification. Handle
Kenichi Handa <handa@m17n.org>
parents:
29921
diff
changeset
|
5700 || (BUFFERP (object) |
32864
21acd0c60f5d
(send_process): If OBJECT is t, it means that the data
Kenichi Handa <handa@m17n.org>
parents:
32395
diff
changeset
|
5701 && !NILP (XBUFFER (object)->enable_multibyte_characters)) |
21acd0c60f5d
(send_process): If OBJECT is t, it means that the data
Kenichi Handa <handa@m17n.org>
parents:
32395
diff
changeset
|
5702 || EQ (object, Qt)) |
31136
d1344c992a9a
(create_process): Don't setup raw-text coding here.
Kenichi Handa <handa@m17n.org>
parents:
31099
diff
changeset
|
5703 { |
110829
4d672e9d91bf
Complement a coding system for encoding arguments and input to a process.
Kenichi Handa <handa@m17n.org>
parents:
108935
diff
changeset
|
5704 p->encode_coding_system |
4d672e9d91bf
Complement a coding system for encoding arguments and input to a process.
Kenichi Handa <handa@m17n.org>
parents:
108935
diff
changeset
|
5705 = complement_process_encoding_system (p->encode_coding_system); |
89909 | 5706 if (!EQ (Vlast_coding_system_used, p->encode_coding_system)) |
110829
4d672e9d91bf
Complement a coding system for encoding arguments and input to a process.
Kenichi Handa <handa@m17n.org>
parents:
108935
diff
changeset
|
5707 { |
4d672e9d91bf
Complement a coding system for encoding arguments and input to a process.
Kenichi Handa <handa@m17n.org>
parents:
108935
diff
changeset
|
5708 /* The coding system for encoding was changed to raw-text |
4d672e9d91bf
Complement a coding system for encoding arguments and input to a process.
Kenichi Handa <handa@m17n.org>
parents:
108935
diff
changeset
|
5709 because we sent a unibyte text previously. Now we are |
4d672e9d91bf
Complement a coding system for encoding arguments and input to a process.
Kenichi Handa <handa@m17n.org>
parents:
108935
diff
changeset
|
5710 sending a multibyte text, thus we must encode it by the |
4d672e9d91bf
Complement a coding system for encoding arguments and input to a process.
Kenichi Handa <handa@m17n.org>
parents:
108935
diff
changeset
|
5711 original coding system specified for the current process. |
4d672e9d91bf
Complement a coding system for encoding arguments and input to a process.
Kenichi Handa <handa@m17n.org>
parents:
108935
diff
changeset
|
5712 |
4d672e9d91bf
Complement a coding system for encoding arguments and input to a process.
Kenichi Handa <handa@m17n.org>
parents:
108935
diff
changeset
|
5713 Another reason we comming here is that the coding system |
4d672e9d91bf
Complement a coding system for encoding arguments and input to a process.
Kenichi Handa <handa@m17n.org>
parents:
108935
diff
changeset
|
5714 was just complemented and new one was returned by |
4d672e9d91bf
Complement a coding system for encoding arguments and input to a process.
Kenichi Handa <handa@m17n.org>
parents:
108935
diff
changeset
|
5715 complement_process_encoding_system. */ |
4d672e9d91bf
Complement a coding system for encoding arguments and input to a process.
Kenichi Handa <handa@m17n.org>
parents:
108935
diff
changeset
|
5716 setup_coding_system (p->encode_coding_system, coding); |
4d672e9d91bf
Complement a coding system for encoding arguments and input to a process.
Kenichi Handa <handa@m17n.org>
parents:
108935
diff
changeset
|
5717 Vlast_coding_system_used = p->encode_coding_system; |
4d672e9d91bf
Complement a coding system for encoding arguments and input to a process.
Kenichi Handa <handa@m17n.org>
parents:
108935
diff
changeset
|
5718 } |
42600
93254645e03b
(send_process): Set src_multibyte to 1 after the call
Eli Zaretskii <eliz@gnu.org>
parents:
41969
diff
changeset
|
5719 coding->src_multibyte = 1; |
31136
d1344c992a9a
(create_process): Don't setup raw-text coding here.
Kenichi Handa <handa@m17n.org>
parents:
31099
diff
changeset
|
5720 } |
d1344c992a9a
(create_process): Don't setup raw-text coding here.
Kenichi Handa <handa@m17n.org>
parents:
31099
diff
changeset
|
5721 else |
d1344c992a9a
(create_process): Don't setup raw-text coding here.
Kenichi Handa <handa@m17n.org>
parents:
31099
diff
changeset
|
5722 { |
32864
21acd0c60f5d
(send_process): If OBJECT is t, it means that the data
Kenichi Handa <handa@m17n.org>
parents:
32395
diff
changeset
|
5723 /* For sending a unibyte text, character code conversion should |
21acd0c60f5d
(send_process): If OBJECT is t, it means that the data
Kenichi Handa <handa@m17n.org>
parents:
32395
diff
changeset
|
5724 not take place but EOL conversion should. So, setup raw-text |
21acd0c60f5d
(send_process): If OBJECT is t, it means that the data
Kenichi Handa <handa@m17n.org>
parents:
32395
diff
changeset
|
5725 or one of the subsidiary if we have not yet done it. */ |
88385
c60e206fcf58
Include "character.h" instead of "charset.h".
Kenichi Handa <handa@m17n.org>
parents:
42600
diff
changeset
|
5726 if (CODING_REQUIRE_ENCODING (coding)) |
32864
21acd0c60f5d
(send_process): If OBJECT is t, it means that the data
Kenichi Handa <handa@m17n.org>
parents:
32395
diff
changeset
|
5727 { |
21acd0c60f5d
(send_process): If OBJECT is t, it means that the data
Kenichi Handa <handa@m17n.org>
parents:
32395
diff
changeset
|
5728 if (CODING_REQUIRE_FLUSHING (coding)) |
21acd0c60f5d
(send_process): If OBJECT is t, it means that the data
Kenichi Handa <handa@m17n.org>
parents:
32395
diff
changeset
|
5729 { |
21acd0c60f5d
(send_process): If OBJECT is t, it means that the data
Kenichi Handa <handa@m17n.org>
parents:
32395
diff
changeset
|
5730 /* But, before changing the coding, we must flush out data. */ |
21acd0c60f5d
(send_process): If OBJECT is t, it means that the data
Kenichi Handa <handa@m17n.org>
parents:
32395
diff
changeset
|
5731 coding->mode |= CODING_MODE_LAST_BLOCK; |
21acd0c60f5d
(send_process): If OBJECT is t, it means that the data
Kenichi Handa <handa@m17n.org>
parents:
32395
diff
changeset
|
5732 send_process (proc, "", 0, Qt); |
89483 | 5733 coding->mode &= CODING_MODE_LAST_BLOCK; |
32864
21acd0c60f5d
(send_process): If OBJECT is t, it means that the data
Kenichi Handa <handa@m17n.org>
parents:
32395
diff
changeset
|
5734 } |
88385
c60e206fcf58
Include "character.h" instead of "charset.h".
Kenichi Handa <handa@m17n.org>
parents:
42600
diff
changeset
|
5735 setup_coding_system (raw_text_coding_system |
c60e206fcf58
Include "character.h" instead of "charset.h".
Kenichi Handa <handa@m17n.org>
parents:
42600
diff
changeset
|
5736 (Vlast_coding_system_used), |
c60e206fcf58
Include "character.h" instead of "charset.h".
Kenichi Handa <handa@m17n.org>
parents:
42600
diff
changeset
|
5737 coding); |
32864
21acd0c60f5d
(send_process): If OBJECT is t, it means that the data
Kenichi Handa <handa@m17n.org>
parents:
32395
diff
changeset
|
5738 coding->src_multibyte = 0; |
21acd0c60f5d
(send_process): If OBJECT is t, it means that the data
Kenichi Handa <handa@m17n.org>
parents:
32395
diff
changeset
|
5739 } |
31136
d1344c992a9a
(create_process): Don't setup raw-text coding here.
Kenichi Handa <handa@m17n.org>
parents:
31099
diff
changeset
|
5740 } |
29017
8f10362eb5ff
(Fstart_process): GCPRO current_dir before calling
Kenichi Handa <handa@m17n.org>
parents:
28157
diff
changeset
|
5741 coding->dst_multibyte = 0; |
8f10362eb5ff
(Fstart_process): GCPRO current_dir before calling
Kenichi Handa <handa@m17n.org>
parents:
28157
diff
changeset
|
5742 |
30580
5d92193ed196
(read_process_output): Big simplification. Handle
Kenichi Handa <handa@m17n.org>
parents:
29921
diff
changeset
|
5743 if (CODING_REQUIRE_ENCODING (coding)) |
17041
b61cbe595be5
Include charset.h and coding.h.
Karl Heuer <kwzh@gnu.org>
parents:
16780
diff
changeset
|
5744 { |
88385
c60e206fcf58
Include "character.h" instead of "charset.h".
Kenichi Handa <handa@m17n.org>
parents:
42600
diff
changeset
|
5745 coding->dst_object = Qt; |
30580
5d92193ed196
(read_process_output): Big simplification. Handle
Kenichi Handa <handa@m17n.org>
parents:
29921
diff
changeset
|
5746 if (BUFFERP (object)) |
17041
b61cbe595be5
Include charset.h and coding.h.
Karl Heuer <kwzh@gnu.org>
parents:
16780
diff
changeset
|
5747 { |
88385
c60e206fcf58
Include "character.h" instead of "charset.h".
Kenichi Handa <handa@m17n.org>
parents:
42600
diff
changeset
|
5748 int from_byte, from, to; |
c60e206fcf58
Include "character.h" instead of "charset.h".
Kenichi Handa <handa@m17n.org>
parents:
42600
diff
changeset
|
5749 int save_pt, save_pt_byte; |
c60e206fcf58
Include "character.h" instead of "charset.h".
Kenichi Handa <handa@m17n.org>
parents:
42600
diff
changeset
|
5750 struct buffer *cur = current_buffer; |
c60e206fcf58
Include "character.h" instead of "charset.h".
Kenichi Handa <handa@m17n.org>
parents:
42600
diff
changeset
|
5751 |
c60e206fcf58
Include "character.h" instead of "charset.h".
Kenichi Handa <handa@m17n.org>
parents:
42600
diff
changeset
|
5752 set_buffer_internal (XBUFFER (object)); |
c60e206fcf58
Include "character.h" instead of "charset.h".
Kenichi Handa <handa@m17n.org>
parents:
42600
diff
changeset
|
5753 save_pt = PT, save_pt_byte = PT_BYTE; |
c60e206fcf58
Include "character.h" instead of "charset.h".
Kenichi Handa <handa@m17n.org>
parents:
42600
diff
changeset
|
5754 |
c60e206fcf58
Include "character.h" instead of "charset.h".
Kenichi Handa <handa@m17n.org>
parents:
42600
diff
changeset
|
5755 from_byte = PTR_BYTE_POS (buf); |
c60e206fcf58
Include "character.h" instead of "charset.h".
Kenichi Handa <handa@m17n.org>
parents:
42600
diff
changeset
|
5756 from = BYTE_TO_CHAR (from_byte); |
c60e206fcf58
Include "character.h" instead of "charset.h".
Kenichi Handa <handa@m17n.org>
parents:
42600
diff
changeset
|
5757 to = BYTE_TO_CHAR (from_byte + len); |
c60e206fcf58
Include "character.h" instead of "charset.h".
Kenichi Handa <handa@m17n.org>
parents:
42600
diff
changeset
|
5758 TEMP_SET_PT_BOTH (from, from_byte); |
c60e206fcf58
Include "character.h" instead of "charset.h".
Kenichi Handa <handa@m17n.org>
parents:
42600
diff
changeset
|
5759 encode_coding_object (coding, object, from, from_byte, |
c60e206fcf58
Include "character.h" instead of "charset.h".
Kenichi Handa <handa@m17n.org>
parents:
42600
diff
changeset
|
5760 to, from_byte + len, Qt); |
c60e206fcf58
Include "character.h" instead of "charset.h".
Kenichi Handa <handa@m17n.org>
parents:
42600
diff
changeset
|
5761 TEMP_SET_PT_BOTH (save_pt, save_pt_byte); |
c60e206fcf58
Include "character.h" instead of "charset.h".
Kenichi Handa <handa@m17n.org>
parents:
42600
diff
changeset
|
5762 set_buffer_internal (cur); |
17041
b61cbe595be5
Include charset.h and coding.h.
Karl Heuer <kwzh@gnu.org>
parents:
16780
diff
changeset
|
5763 } |
30580
5d92193ed196
(read_process_output): Big simplification. Handle
Kenichi Handa <handa@m17n.org>
parents:
29921
diff
changeset
|
5764 else if (STRINGP (object)) |
5d92193ed196
(read_process_output): Big simplification. Handle
Kenichi Handa <handa@m17n.org>
parents:
29921
diff
changeset
|
5765 { |
104638
fec993ec6e85
(send_process): Use encode_coding_object instead of
Kenichi Handa <handa@m17n.org>
parents:
104316
diff
changeset
|
5766 encode_coding_object (coding, object, 0, 0, SCHARS (object), |
fec993ec6e85
(send_process): Use encode_coding_object instead of
Kenichi Handa <handa@m17n.org>
parents:
104316
diff
changeset
|
5767 SBYTES (object), Qt); |
39429
9de129194439
(send_process): Disable composition if from_byte < 0.
Gerd Moellmann <gerd@gnu.org>
parents:
39406
diff
changeset
|
5768 } |
88385
c60e206fcf58
Include "character.h" instead of "charset.h".
Kenichi Handa <handa@m17n.org>
parents:
42600
diff
changeset
|
5769 else |
c60e206fcf58
Include "character.h" instead of "charset.h".
Kenichi Handa <handa@m17n.org>
parents:
42600
diff
changeset
|
5770 { |
c60e206fcf58
Include "character.h" instead of "charset.h".
Kenichi Handa <handa@m17n.org>
parents:
42600
diff
changeset
|
5771 coding->dst_object = make_unibyte_string (buf, len); |
c60e206fcf58
Include "character.h" instead of "charset.h".
Kenichi Handa <handa@m17n.org>
parents:
42600
diff
changeset
|
5772 coding->produced = len; |
c60e206fcf58
Include "character.h" instead of "charset.h".
Kenichi Handa <handa@m17n.org>
parents:
42600
diff
changeset
|
5773 } |
c60e206fcf58
Include "character.h" instead of "charset.h".
Kenichi Handa <handa@m17n.org>
parents:
42600
diff
changeset
|
5774 |
20715
5e983ddb85c9
(Fstart_process): Use raw-text instead of emacs-mule
Kenichi Handa <handa@m17n.org>
parents:
20708
diff
changeset
|
5775 len = coding->produced; |
103621
444861df76cd
Simplify last change.
Andreas Schwab <schwab@linux-m68k.org>
parents:
103620
diff
changeset
|
5776 object = coding->dst_object; |
444861df76cd
Simplify last change.
Andreas Schwab <schwab@linux-m68k.org>
parents:
103620
diff
changeset
|
5777 buf = SDATA (object); |
17041
b61cbe595be5
Include charset.h and coding.h.
Karl Heuer <kwzh@gnu.org>
parents:
16780
diff
changeset
|
5778 } |
578 | 5779 |
8063
30861f2f4f84
(send_process): Major rewrite.
Richard M. Stallman <rms@gnu.org>
parents:
7937
diff
changeset
|
5780 if (pty_max_bytes == 0) |
30861f2f4f84
(send_process): Major rewrite.
Richard M. Stallman <rms@gnu.org>
parents:
7937
diff
changeset
|
5781 { |
30861f2f4f84
(send_process): Major rewrite.
Richard M. Stallman <rms@gnu.org>
parents:
7937
diff
changeset
|
5782 #if defined (HAVE_FPATHCONF) && defined (_PC_MAX_CANON) |
81826
077a1e6fd3f2
(struct Lisp_Process): Turn slots infd, outfd, kill_without_query, pty_flag,
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
80984
diff
changeset
|
5783 pty_max_bytes = fpathconf (p->outfd, _PC_MAX_CANON); |
8063
30861f2f4f84
(send_process): Major rewrite.
Richard M. Stallman <rms@gnu.org>
parents:
7937
diff
changeset
|
5784 if (pty_max_bytes < 0) |
30861f2f4f84
(send_process): Major rewrite.
Richard M. Stallman <rms@gnu.org>
parents:
7937
diff
changeset
|
5785 pty_max_bytes = 250; |
30861f2f4f84
(send_process): Major rewrite.
Richard M. Stallman <rms@gnu.org>
parents:
7937
diff
changeset
|
5786 #else |
30861f2f4f84
(send_process): Major rewrite.
Richard M. Stallman <rms@gnu.org>
parents:
7937
diff
changeset
|
5787 pty_max_bytes = 250; |
30861f2f4f84
(send_process): Major rewrite.
Richard M. Stallman <rms@gnu.org>
parents:
7937
diff
changeset
|
5788 #endif |
30861f2f4f84
(send_process): Major rewrite.
Richard M. Stallman <rms@gnu.org>
parents:
7937
diff
changeset
|
5789 /* Deduct one, to leave space for the eof. */ |
30861f2f4f84
(send_process): Major rewrite.
Richard M. Stallman <rms@gnu.org>
parents:
7937
diff
changeset
|
5790 pty_max_bytes--; |
30861f2f4f84
(send_process): Major rewrite.
Richard M. Stallman <rms@gnu.org>
parents:
7937
diff
changeset
|
5791 } |
30861f2f4f84
(send_process): Major rewrite.
Richard M. Stallman <rms@gnu.org>
parents:
7937
diff
changeset
|
5792 |
31806
b148beb59511
(process_sent_to): New variable.
Gerd Moellmann <gerd@gnu.org>
parents:
31419
diff
changeset
|
5793 /* 2000-09-21: Emacs 20.7, sparc-sun-solaris-2.6, GCC 2.95.2, |
b148beb59511
(process_sent_to): New variable.
Gerd Moellmann <gerd@gnu.org>
parents:
31419
diff
changeset
|
5794 CFLAGS="-g -O": The value of the parameter `proc' is clobbered |
b148beb59511
(process_sent_to): New variable.
Gerd Moellmann <gerd@gnu.org>
parents:
31419
diff
changeset
|
5795 when returning with longjmp despite being declared volatile. */ |
578 | 5796 if (!setjmp (send_process_frame)) |
31806
b148beb59511
(process_sent_to): New variable.
Gerd Moellmann <gerd@gnu.org>
parents:
31419
diff
changeset
|
5797 { |
b148beb59511
(process_sent_to): New variable.
Gerd Moellmann <gerd@gnu.org>
parents:
31419
diff
changeset
|
5798 process_sent_to = proc; |
b148beb59511
(process_sent_to): New variable.
Gerd Moellmann <gerd@gnu.org>
parents:
31419
diff
changeset
|
5799 while (len > 0) |
b148beb59511
(process_sent_to): New variable.
Gerd Moellmann <gerd@gnu.org>
parents:
31419
diff
changeset
|
5800 { |
b148beb59511
(process_sent_to): New variable.
Gerd Moellmann <gerd@gnu.org>
parents:
31419
diff
changeset
|
5801 int this = len; |
b148beb59511
(process_sent_to): New variable.
Gerd Moellmann <gerd@gnu.org>
parents:
31419
diff
changeset
|
5802 |
b148beb59511
(process_sent_to): New variable.
Gerd Moellmann <gerd@gnu.org>
parents:
31419
diff
changeset
|
5803 /* Decide how much data we can send in one batch. |
b148beb59511
(process_sent_to): New variable.
Gerd Moellmann <gerd@gnu.org>
parents:
31419
diff
changeset
|
5804 Long lines need to be split into multiple batches. */ |
81826
077a1e6fd3f2
(struct Lisp_Process): Turn slots infd, outfd, kill_without_query, pty_flag,
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
80984
diff
changeset
|
5805 if (p->pty_flag) |
31806
b148beb59511
(process_sent_to): New variable.
Gerd Moellmann <gerd@gnu.org>
parents:
31419
diff
changeset
|
5806 { |
39812
66e0816837a8
Update calls to openp.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
39429
diff
changeset
|
5807 /* Starting this at zero is always correct when not the first |
100824
e5aa6a069f40
(conv_sockaddr_to_lisp): Add workaround for
Andreas Schwab <schwab@suse.de>
parents:
100573
diff
changeset
|
5808 iteration because the previous iteration ended by sending C-d. |
31806
b148beb59511
(process_sent_to): New variable.
Gerd Moellmann <gerd@gnu.org>
parents:
31419
diff
changeset
|
5809 It may not be correct for the first iteration |
b148beb59511
(process_sent_to): New variable.
Gerd Moellmann <gerd@gnu.org>
parents:
31419
diff
changeset
|
5810 if a partial line was sent in a separate send_process call. |
b148beb59511
(process_sent_to): New variable.
Gerd Moellmann <gerd@gnu.org>
parents:
31419
diff
changeset
|
5811 If that proves worth handling, we need to save linepos |
b148beb59511
(process_sent_to): New variable.
Gerd Moellmann <gerd@gnu.org>
parents:
31419
diff
changeset
|
5812 in the process object. */ |
b148beb59511
(process_sent_to): New variable.
Gerd Moellmann <gerd@gnu.org>
parents:
31419
diff
changeset
|
5813 int linepos = 0; |
b148beb59511
(process_sent_to): New variable.
Gerd Moellmann <gerd@gnu.org>
parents:
31419
diff
changeset
|
5814 unsigned char *ptr = (unsigned char *) buf; |
b148beb59511
(process_sent_to): New variable.
Gerd Moellmann <gerd@gnu.org>
parents:
31419
diff
changeset
|
5815 unsigned char *end = (unsigned char *) buf + len; |
b148beb59511
(process_sent_to): New variable.
Gerd Moellmann <gerd@gnu.org>
parents:
31419
diff
changeset
|
5816 |
b148beb59511
(process_sent_to): New variable.
Gerd Moellmann <gerd@gnu.org>
parents:
31419
diff
changeset
|
5817 /* Scan through this text for a line that is too long. */ |
b148beb59511
(process_sent_to): New variable.
Gerd Moellmann <gerd@gnu.org>
parents:
31419
diff
changeset
|
5818 while (ptr != end && linepos < pty_max_bytes) |
b148beb59511
(process_sent_to): New variable.
Gerd Moellmann <gerd@gnu.org>
parents:
31419
diff
changeset
|
5819 { |
b148beb59511
(process_sent_to): New variable.
Gerd Moellmann <gerd@gnu.org>
parents:
31419
diff
changeset
|
5820 if (*ptr == '\n') |
b148beb59511
(process_sent_to): New variable.
Gerd Moellmann <gerd@gnu.org>
parents:
31419
diff
changeset
|
5821 linepos = 0; |
b148beb59511
(process_sent_to): New variable.
Gerd Moellmann <gerd@gnu.org>
parents:
31419
diff
changeset
|
5822 else |
b148beb59511
(process_sent_to): New variable.
Gerd Moellmann <gerd@gnu.org>
parents:
31419
diff
changeset
|
5823 linepos++; |
b148beb59511
(process_sent_to): New variable.
Gerd Moellmann <gerd@gnu.org>
parents:
31419
diff
changeset
|
5824 ptr++; |
b148beb59511
(process_sent_to): New variable.
Gerd Moellmann <gerd@gnu.org>
parents:
31419
diff
changeset
|
5825 } |
b148beb59511
(process_sent_to): New variable.
Gerd Moellmann <gerd@gnu.org>
parents:
31419
diff
changeset
|
5826 /* If we found one, break the line there |
b148beb59511
(process_sent_to): New variable.
Gerd Moellmann <gerd@gnu.org>
parents:
31419
diff
changeset
|
5827 and put in a C-d to force the buffer through. */ |
b148beb59511
(process_sent_to): New variable.
Gerd Moellmann <gerd@gnu.org>
parents:
31419
diff
changeset
|
5828 this = ptr - buf; |
b148beb59511
(process_sent_to): New variable.
Gerd Moellmann <gerd@gnu.org>
parents:
31419
diff
changeset
|
5829 } |
b148beb59511
(process_sent_to): New variable.
Gerd Moellmann <gerd@gnu.org>
parents:
31419
diff
changeset
|
5830 |
b148beb59511
(process_sent_to): New variable.
Gerd Moellmann <gerd@gnu.org>
parents:
31419
diff
changeset
|
5831 /* Send this batch, using one or more write calls. */ |
b148beb59511
(process_sent_to): New variable.
Gerd Moellmann <gerd@gnu.org>
parents:
31419
diff
changeset
|
5832 while (this > 0) |
b148beb59511
(process_sent_to): New variable.
Gerd Moellmann <gerd@gnu.org>
parents:
31419
diff
changeset
|
5833 { |
81826
077a1e6fd3f2
(struct Lisp_Process): Turn slots infd, outfd, kill_without_query, pty_flag,
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
80984
diff
changeset
|
5834 int outfd = p->outfd; |
31806
b148beb59511
(process_sent_to): New variable.
Gerd Moellmann <gerd@gnu.org>
parents:
31419
diff
changeset
|
5835 old_sigpipe = (SIGTYPE (*) ()) signal (SIGPIPE, send_process_trap); |
43968
7ec801358b7e
(Qlocal, QCname, QCbuffer, QChost, QCservice, QCfamily)
Kim F. Storm <storm@cua.dk>
parents:
43642
diff
changeset
|
5836 #ifdef DATAGRAM_SOCKETS |
7ec801358b7e
(Qlocal, QCname, QCbuffer, QChost, QCservice, QCfamily)
Kim F. Storm <storm@cua.dk>
parents:
43642
diff
changeset
|
5837 if (DATAGRAM_CHAN_P (outfd)) |
7ec801358b7e
(Qlocal, QCname, QCbuffer, QChost, QCservice, QCfamily)
Kim F. Storm <storm@cua.dk>
parents:
43642
diff
changeset
|
5838 { |
7ec801358b7e
(Qlocal, QCname, QCbuffer, QChost, QCservice, QCfamily)
Kim F. Storm <storm@cua.dk>
parents:
43642
diff
changeset
|
5839 rv = sendto (outfd, (char *) buf, this, |
7ec801358b7e
(Qlocal, QCname, QCbuffer, QChost, QCservice, QCfamily)
Kim F. Storm <storm@cua.dk>
parents:
43642
diff
changeset
|
5840 0, datagram_address[outfd].sa, |
7ec801358b7e
(Qlocal, QCname, QCbuffer, QChost, QCservice, QCfamily)
Kim F. Storm <storm@cua.dk>
parents:
43642
diff
changeset
|
5841 datagram_address[outfd].len); |
7ec801358b7e
(Qlocal, QCname, QCbuffer, QChost, QCservice, QCfamily)
Kim F. Storm <storm@cua.dk>
parents:
43642
diff
changeset
|
5842 if (rv < 0 && errno == EMSGSIZE) |
62334
f9dc4e8a41fe
(send_process_trap): Unblock SIGPIPE.
Richard M. Stallman <rms@gnu.org>
parents:
60892
diff
changeset
|
5843 { |
f9dc4e8a41fe
(send_process_trap): Unblock SIGPIPE.
Richard M. Stallman <rms@gnu.org>
parents:
60892
diff
changeset
|
5844 signal (SIGPIPE, old_sigpipe); |
f9dc4e8a41fe
(send_process_trap): Unblock SIGPIPE.
Richard M. Stallman <rms@gnu.org>
parents:
60892
diff
changeset
|
5845 report_file_error ("sending datagram", |
f9dc4e8a41fe
(send_process_trap): Unblock SIGPIPE.
Richard M. Stallman <rms@gnu.org>
parents:
60892
diff
changeset
|
5846 Fcons (proc, Qnil)); |
f9dc4e8a41fe
(send_process_trap): Unblock SIGPIPE.
Richard M. Stallman <rms@gnu.org>
parents:
60892
diff
changeset
|
5847 } |
43968
7ec801358b7e
(Qlocal, QCname, QCbuffer, QChost, QCservice, QCfamily)
Kim F. Storm <storm@cua.dk>
parents:
43642
diff
changeset
|
5848 } |
7ec801358b7e
(Qlocal, QCname, QCbuffer, QChost, QCservice, QCfamily)
Kim F. Storm <storm@cua.dk>
parents:
43642
diff
changeset
|
5849 else |
7ec801358b7e
(Qlocal, QCname, QCbuffer, QChost, QCservice, QCfamily)
Kim F. Storm <storm@cua.dk>
parents:
43642
diff
changeset
|
5850 #endif |
53472
1a5fe79d27f3
(ADAPTIVE_READ_BUFFERING): New conditional.
Kim F. Storm <storm@cua.dk>
parents:
53072
diff
changeset
|
5851 { |
1a5fe79d27f3
(ADAPTIVE_READ_BUFFERING): New conditional.
Kim F. Storm <storm@cua.dk>
parents:
53072
diff
changeset
|
5852 rv = emacs_write (outfd, (char *) buf, this); |
1a5fe79d27f3
(ADAPTIVE_READ_BUFFERING): New conditional.
Kim F. Storm <storm@cua.dk>
parents:
53072
diff
changeset
|
5853 #ifdef ADAPTIVE_READ_BUFFERING |
81826
077a1e6fd3f2
(struct Lisp_Process): Turn slots infd, outfd, kill_without_query, pty_flag,
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
80984
diff
changeset
|
5854 if (p->read_output_delay > 0 |
077a1e6fd3f2
(struct Lisp_Process): Turn slots infd, outfd, kill_without_query, pty_flag,
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
80984
diff
changeset
|
5855 && p->adaptive_read_buffering == 1) |
53472
1a5fe79d27f3
(ADAPTIVE_READ_BUFFERING): New conditional.
Kim F. Storm <storm@cua.dk>
parents:
53072
diff
changeset
|
5856 { |
81826
077a1e6fd3f2
(struct Lisp_Process): Turn slots infd, outfd, kill_without_query, pty_flag,
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
80984
diff
changeset
|
5857 p->read_output_delay = 0; |
53472
1a5fe79d27f3
(ADAPTIVE_READ_BUFFERING): New conditional.
Kim F. Storm <storm@cua.dk>
parents:
53072
diff
changeset
|
5858 process_output_delay_count--; |
81826
077a1e6fd3f2
(struct Lisp_Process): Turn slots infd, outfd, kill_without_query, pty_flag,
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
80984
diff
changeset
|
5859 p->read_output_skip = 0; |
53472
1a5fe79d27f3
(ADAPTIVE_READ_BUFFERING): New conditional.
Kim F. Storm <storm@cua.dk>
parents:
53072
diff
changeset
|
5860 } |
1a5fe79d27f3
(ADAPTIVE_READ_BUFFERING): New conditional.
Kim F. Storm <storm@cua.dk>
parents:
53072
diff
changeset
|
5861 #endif |
1a5fe79d27f3
(ADAPTIVE_READ_BUFFERING): New conditional.
Kim F. Storm <storm@cua.dk>
parents:
53072
diff
changeset
|
5862 } |
31806
b148beb59511
(process_sent_to): New variable.
Gerd Moellmann <gerd@gnu.org>
parents:
31419
diff
changeset
|
5863 signal (SIGPIPE, old_sigpipe); |
b148beb59511
(process_sent_to): New variable.
Gerd Moellmann <gerd@gnu.org>
parents:
31419
diff
changeset
|
5864 |
b148beb59511
(process_sent_to): New variable.
Gerd Moellmann <gerd@gnu.org>
parents:
31419
diff
changeset
|
5865 if (rv < 0) |
b148beb59511
(process_sent_to): New variable.
Gerd Moellmann <gerd@gnu.org>
parents:
31419
diff
changeset
|
5866 { |
b148beb59511
(process_sent_to): New variable.
Gerd Moellmann <gerd@gnu.org>
parents:
31419
diff
changeset
|
5867 if (0 |
8063
30861f2f4f84
(send_process): Major rewrite.
Richard M. Stallman <rms@gnu.org>
parents:
7937
diff
changeset
|
5868 #ifdef EWOULDBLOCK |
31806
b148beb59511
(process_sent_to): New variable.
Gerd Moellmann <gerd@gnu.org>
parents:
31419
diff
changeset
|
5869 || errno == EWOULDBLOCK |
6158 | 5870 #endif |
8063
30861f2f4f84
(send_process): Major rewrite.
Richard M. Stallman <rms@gnu.org>
parents:
7937
diff
changeset
|
5871 #ifdef EAGAIN |
31806
b148beb59511
(process_sent_to): New variable.
Gerd Moellmann <gerd@gnu.org>
parents:
31419
diff
changeset
|
5872 || errno == EAGAIN |
8063
30861f2f4f84
(send_process): Major rewrite.
Richard M. Stallman <rms@gnu.org>
parents:
7937
diff
changeset
|
5873 #endif |
31806
b148beb59511
(process_sent_to): New variable.
Gerd Moellmann <gerd@gnu.org>
parents:
31419
diff
changeset
|
5874 ) |
49600
23a1cea22d13
Trailing whitespace deleted.
Juanma Barranquero <lekktu@gmail.com>
parents:
49281
diff
changeset
|
5875 /* Buffer is full. Wait, accepting input; |
31806
b148beb59511
(process_sent_to): New variable.
Gerd Moellmann <gerd@gnu.org>
parents:
31419
diff
changeset
|
5876 that may allow the program |
b148beb59511
(process_sent_to): New variable.
Gerd Moellmann <gerd@gnu.org>
parents:
31419
diff
changeset
|
5877 to finish doing output and read more. */ |
b148beb59511
(process_sent_to): New variable.
Gerd Moellmann <gerd@gnu.org>
parents:
31419
diff
changeset
|
5878 { |
b148beb59511
(process_sent_to): New variable.
Gerd Moellmann <gerd@gnu.org>
parents:
31419
diff
changeset
|
5879 int offset = 0; |
8063
30861f2f4f84
(send_process): Major rewrite.
Richard M. Stallman <rms@gnu.org>
parents:
7937
diff
changeset
|
5880 |
27705
2c53eb482802
(send_process) [BROKEN_PTY_READ_AFTER_EAGAIN]:
Gerd Moellmann <gerd@gnu.org>
parents:
27669
diff
changeset
|
5881 #ifdef BROKEN_PTY_READ_AFTER_EAGAIN |
31806
b148beb59511
(process_sent_to): New variable.
Gerd Moellmann <gerd@gnu.org>
parents:
31419
diff
changeset
|
5882 /* A gross hack to work around a bug in FreeBSD. |
b148beb59511
(process_sent_to): New variable.
Gerd Moellmann <gerd@gnu.org>
parents:
31419
diff
changeset
|
5883 In the following sequence, read(2) returns |
b148beb59511
(process_sent_to): New variable.
Gerd Moellmann <gerd@gnu.org>
parents:
31419
diff
changeset
|
5884 bogus data: |
b148beb59511
(process_sent_to): New variable.
Gerd Moellmann <gerd@gnu.org>
parents:
31419
diff
changeset
|
5885 |
b148beb59511
(process_sent_to): New variable.
Gerd Moellmann <gerd@gnu.org>
parents:
31419
diff
changeset
|
5886 write(2) 1022 bytes |
b148beb59511
(process_sent_to): New variable.
Gerd Moellmann <gerd@gnu.org>
parents:
31419
diff
changeset
|
5887 write(2) 954 bytes, get EAGAIN |
b148beb59511
(process_sent_to): New variable.
Gerd Moellmann <gerd@gnu.org>
parents:
31419
diff
changeset
|
5888 read(2) 1024 bytes in process_read_output |
b148beb59511
(process_sent_to): New variable.
Gerd Moellmann <gerd@gnu.org>
parents:
31419
diff
changeset
|
5889 read(2) 11 bytes in process_read_output |
b148beb59511
(process_sent_to): New variable.
Gerd Moellmann <gerd@gnu.org>
parents:
31419
diff
changeset
|
5890 |
b148beb59511
(process_sent_to): New variable.
Gerd Moellmann <gerd@gnu.org>
parents:
31419
diff
changeset
|
5891 That is, read(2) returns more bytes than have |
b148beb59511
(process_sent_to): New variable.
Gerd Moellmann <gerd@gnu.org>
parents:
31419
diff
changeset
|
5892 ever been written successfully. The 1033 bytes |
b148beb59511
(process_sent_to): New variable.
Gerd Moellmann <gerd@gnu.org>
parents:
31419
diff
changeset
|
5893 read are the 1022 bytes written successfully |
b148beb59511
(process_sent_to): New variable.
Gerd Moellmann <gerd@gnu.org>
parents:
31419
diff
changeset
|
5894 after processing (for example with CRs added if |
b148beb59511
(process_sent_to): New variable.
Gerd Moellmann <gerd@gnu.org>
parents:
31419
diff
changeset
|
5895 the terminal is set up that way which it is |
b148beb59511
(process_sent_to): New variable.
Gerd Moellmann <gerd@gnu.org>
parents:
31419
diff
changeset
|
5896 here). The same bytes will be seen again in a |
b148beb59511
(process_sent_to): New variable.
Gerd Moellmann <gerd@gnu.org>
parents:
31419
diff
changeset
|
5897 later read(2), without the CRs. */ |
49600
23a1cea22d13
Trailing whitespace deleted.
Juanma Barranquero <lekktu@gmail.com>
parents:
49281
diff
changeset
|
5898 |
31806
b148beb59511
(process_sent_to): New variable.
Gerd Moellmann <gerd@gnu.org>
parents:
31419
diff
changeset
|
5899 if (errno == EAGAIN) |
b148beb59511
(process_sent_to): New variable.
Gerd Moellmann <gerd@gnu.org>
parents:
31419
diff
changeset
|
5900 { |
b148beb59511
(process_sent_to): New variable.
Gerd Moellmann <gerd@gnu.org>
parents:
31419
diff
changeset
|
5901 int flags = FWRITE; |
81826
077a1e6fd3f2
(struct Lisp_Process): Turn slots infd, outfd, kill_without_query, pty_flag,
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
80984
diff
changeset
|
5902 ioctl (p->outfd, TIOCFLUSH, &flags); |
31806
b148beb59511
(process_sent_to): New variable.
Gerd Moellmann <gerd@gnu.org>
parents:
31419
diff
changeset
|
5903 } |
27705
2c53eb482802
(send_process) [BROKEN_PTY_READ_AFTER_EAGAIN]:
Gerd Moellmann <gerd@gnu.org>
parents:
27669
diff
changeset
|
5904 #endif /* BROKEN_PTY_READ_AFTER_EAGAIN */ |
49600
23a1cea22d13
Trailing whitespace deleted.
Juanma Barranquero <lekktu@gmail.com>
parents:
49281
diff
changeset
|
5905 |
31806
b148beb59511
(process_sent_to): New variable.
Gerd Moellmann <gerd@gnu.org>
parents:
31419
diff
changeset
|
5906 /* Running filters might relocate buffers or strings. |
b148beb59511
(process_sent_to): New variable.
Gerd Moellmann <gerd@gnu.org>
parents:
31419
diff
changeset
|
5907 Arrange to relocate BUF. */ |
103621
444861df76cd
Simplify last change.
Andreas Schwab <schwab@linux-m68k.org>
parents:
103620
diff
changeset
|
5908 if (BUFFERP (object)) |
31806
b148beb59511
(process_sent_to): New variable.
Gerd Moellmann <gerd@gnu.org>
parents:
31419
diff
changeset
|
5909 offset = BUF_PTR_BYTE_POS (XBUFFER (object), buf); |
b148beb59511
(process_sent_to): New variable.
Gerd Moellmann <gerd@gnu.org>
parents:
31419
diff
changeset
|
5910 else if (STRINGP (object)) |
46370
40db0673e6f0
Most uses of XSTRING combined with STRING_BYTES or indirection changed to
Ken Raeburn <raeburn@raeburn.org>
parents:
46314
diff
changeset
|
5911 offset = buf - SDATA (object); |
31806
b148beb59511
(process_sent_to): New variable.
Gerd Moellmann <gerd@gnu.org>
parents:
31419
diff
changeset
|
5912 |
16718
ea26040865cb
(send_process) [EMACS_HAS_USECS]:
Richard M. Stallman <rms@gnu.org>
parents:
16644
diff
changeset
|
5913 #ifdef EMACS_HAS_USECS |
56728
1686b397ef16
(wait_reading_process_output): Rename from
Kim F. Storm <storm@cua.dk>
parents:
56716
diff
changeset
|
5914 wait_reading_process_output (0, 20000, 0, 0, Qnil, NULL, 0); |
16718
ea26040865cb
(send_process) [EMACS_HAS_USECS]:
Richard M. Stallman <rms@gnu.org>
parents:
16644
diff
changeset
|
5915 #else |
56728
1686b397ef16
(wait_reading_process_output): Rename from
Kim F. Storm <storm@cua.dk>
parents:
56716
diff
changeset
|
5916 wait_reading_process_output (1, 0, 0, 0, Qnil, NULL, 0); |
16718
ea26040865cb
(send_process) [EMACS_HAS_USECS]:
Richard M. Stallman <rms@gnu.org>
parents:
16644
diff
changeset
|
5917 #endif |
8063
30861f2f4f84
(send_process): Major rewrite.
Richard M. Stallman <rms@gnu.org>
parents:
7937
diff
changeset
|
5918 |
103621
444861df76cd
Simplify last change.
Andreas Schwab <schwab@linux-m68k.org>
parents:
103620
diff
changeset
|
5919 if (BUFFERP (object)) |
31806
b148beb59511
(process_sent_to): New variable.
Gerd Moellmann <gerd@gnu.org>
parents:
31419
diff
changeset
|
5920 buf = BUF_BYTE_ADDRESS (XBUFFER (object), offset); |
b148beb59511
(process_sent_to): New variable.
Gerd Moellmann <gerd@gnu.org>
parents:
31419
diff
changeset
|
5921 else if (STRINGP (object)) |
46370
40db0673e6f0
Most uses of XSTRING combined with STRING_BYTES or indirection changed to
Ken Raeburn <raeburn@raeburn.org>
parents:
46314
diff
changeset
|
5922 buf = offset + SDATA (object); |
31806
b148beb59511
(process_sent_to): New variable.
Gerd Moellmann <gerd@gnu.org>
parents:
31419
diff
changeset
|
5923 |
b148beb59511
(process_sent_to): New variable.
Gerd Moellmann <gerd@gnu.org>
parents:
31419
diff
changeset
|
5924 rv = 0; |
b148beb59511
(process_sent_to): New variable.
Gerd Moellmann <gerd@gnu.org>
parents:
31419
diff
changeset
|
5925 } |
b148beb59511
(process_sent_to): New variable.
Gerd Moellmann <gerd@gnu.org>
parents:
31419
diff
changeset
|
5926 else |
b148beb59511
(process_sent_to): New variable.
Gerd Moellmann <gerd@gnu.org>
parents:
31419
diff
changeset
|
5927 /* This is a real error. */ |
b148beb59511
(process_sent_to): New variable.
Gerd Moellmann <gerd@gnu.org>
parents:
31419
diff
changeset
|
5928 report_file_error ("writing to process", Fcons (proc, Qnil)); |
b148beb59511
(process_sent_to): New variable.
Gerd Moellmann <gerd@gnu.org>
parents:
31419
diff
changeset
|
5929 } |
b148beb59511
(process_sent_to): New variable.
Gerd Moellmann <gerd@gnu.org>
parents:
31419
diff
changeset
|
5930 buf += rv; |
b148beb59511
(process_sent_to): New variable.
Gerd Moellmann <gerd@gnu.org>
parents:
31419
diff
changeset
|
5931 len -= rv; |
b148beb59511
(process_sent_to): New variable.
Gerd Moellmann <gerd@gnu.org>
parents:
31419
diff
changeset
|
5932 this -= rv; |
b148beb59511
(process_sent_to): New variable.
Gerd Moellmann <gerd@gnu.org>
parents:
31419
diff
changeset
|
5933 } |
b148beb59511
(process_sent_to): New variable.
Gerd Moellmann <gerd@gnu.org>
parents:
31419
diff
changeset
|
5934 |
95884
d6a4488883dc
Daniel Engeler <engeler at gmail.com>
Glenn Morris <rgm@gnu.org>
parents:
95387
diff
changeset
|
5935 /* If we sent just part of the string, put in an EOF (C-d) |
31806
b148beb59511
(process_sent_to): New variable.
Gerd Moellmann <gerd@gnu.org>
parents:
31419
diff
changeset
|
5936 to force it through, before we send the rest. */ |
b148beb59511
(process_sent_to): New variable.
Gerd Moellmann <gerd@gnu.org>
parents:
31419
diff
changeset
|
5937 if (len > 0) |
b148beb59511
(process_sent_to): New variable.
Gerd Moellmann <gerd@gnu.org>
parents:
31419
diff
changeset
|
5938 Fprocess_send_eof (proc); |
b148beb59511
(process_sent_to): New variable.
Gerd Moellmann <gerd@gnu.org>
parents:
31419
diff
changeset
|
5939 } |
b148beb59511
(process_sent_to): New variable.
Gerd Moellmann <gerd@gnu.org>
parents:
31419
diff
changeset
|
5940 } |
578 | 5941 else |
5942 { | |
62581
7f6a053bbca4
(send_process): Restore the SIGPIPE handler if we catch a SIGPIPE.
Eli Zaretskii <eliz@gnu.org>
parents:
62334
diff
changeset
|
5943 signal (SIGPIPE, old_sigpipe); |
31806
b148beb59511
(process_sent_to): New variable.
Gerd Moellmann <gerd@gnu.org>
parents:
31419
diff
changeset
|
5944 proc = process_sent_to; |
53472
1a5fe79d27f3
(ADAPTIVE_READ_BUFFERING): New conditional.
Kim F. Storm <storm@cua.dk>
parents:
53072
diff
changeset
|
5945 p = XPROCESS (proc); |
69873
2d844bbbccd4
* process.h (struct Lisp_Process): Replace Lisp_Objects `pid',
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
69634
diff
changeset
|
5946 p->raw_status_new = 0; |
53472
1a5fe79d27f3
(ADAPTIVE_READ_BUFFERING): New conditional.
Kim F. Storm <storm@cua.dk>
parents:
53072
diff
changeset
|
5947 p->status = Fcons (Qexit, Fcons (make_number (256), Qnil)); |
81826
077a1e6fd3f2
(struct Lisp_Process): Turn slots infd, outfd, kill_without_query, pty_flag,
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
80984
diff
changeset
|
5948 p->tick = ++process_tick; |
578 | 5949 deactivate_process (proc); |
53472
1a5fe79d27f3
(ADAPTIVE_READ_BUFFERING): New conditional.
Kim F. Storm <storm@cua.dk>
parents:
53072
diff
changeset
|
5950 error ("SIGPIPE raised on process %s; closed it", SDATA (p->name)); |
578 | 5951 } |
15895
85112cca0b22
(send_process): GCPRO object.
Richard M. Stallman <rms@gnu.org>
parents:
15717
diff
changeset
|
5952 |
85112cca0b22
(send_process): GCPRO object.
Richard M. Stallman <rms@gnu.org>
parents:
15717
diff
changeset
|
5953 UNGCPRO; |
578 | 5954 } |
5955 | |
5956 DEFUN ("process-send-region", Fprocess_send_region, Sprocess_send_region, | |
40103
6b389fb978bc
Change doc-string comments to `new style' [w/`doc:' keyword].
Pavel Janík <Pavel@Janik.cz>
parents:
39973
diff
changeset
|
5957 3, 3, 0, |
6b389fb978bc
Change doc-string comments to `new style' [w/`doc:' keyword].
Pavel Janík <Pavel@Janik.cz>
parents:
39973
diff
changeset
|
5958 doc: /* Send current contents of region as input to PROCESS. |
6b389fb978bc
Change doc-string comments to `new style' [w/`doc:' keyword].
Pavel Janík <Pavel@Janik.cz>
parents:
39973
diff
changeset
|
5959 PROCESS may be a process, a buffer, the name of a process or buffer, or |
6b389fb978bc
Change doc-string comments to `new style' [w/`doc:' keyword].
Pavel Janík <Pavel@Janik.cz>
parents:
39973
diff
changeset
|
5960 nil, indicating the current buffer's process. |
6b389fb978bc
Change doc-string comments to `new style' [w/`doc:' keyword].
Pavel Janík <Pavel@Janik.cz>
parents:
39973
diff
changeset
|
5961 Called from program, takes three arguments, PROCESS, START and END. |
6b389fb978bc
Change doc-string comments to `new style' [w/`doc:' keyword].
Pavel Janík <Pavel@Janik.cz>
parents:
39973
diff
changeset
|
5962 If the region is more than 500 characters long, |
6b389fb978bc
Change doc-string comments to `new style' [w/`doc:' keyword].
Pavel Janík <Pavel@Janik.cz>
parents:
39973
diff
changeset
|
5963 it is sent in several bunches. This may happen even for shorter regions. |
6b389fb978bc
Change doc-string comments to `new style' [w/`doc:' keyword].
Pavel Janík <Pavel@Janik.cz>
parents:
39973
diff
changeset
|
5964 Output from processes can arrive in between bunches. */) |
6b389fb978bc
Change doc-string comments to `new style' [w/`doc:' keyword].
Pavel Janík <Pavel@Janik.cz>
parents:
39973
diff
changeset
|
5965 (process, start, end) |
578 | 5966 Lisp_Object process, start, end; |
5967 { | |
5968 Lisp_Object proc; | |
90777
c0e889bf140c
Cancel the change done by sync with HEAD.
Kenichi Handa <handa@m17n.org>
parents:
90776
diff
changeset
|
5969 int start1, end1; |
578 | 5970 |
5971 proc = get_process (process); | |
5972 validate_region (&start, &end); | |
90777
c0e889bf140c
Cancel the change done by sync with HEAD.
Kenichi Handa <handa@m17n.org>
parents:
90776
diff
changeset
|
5973 |
c0e889bf140c
Cancel the change done by sync with HEAD.
Kenichi Handa <handa@m17n.org>
parents:
90776
diff
changeset
|
5974 if (XINT (start) < GPT && XINT (end) > GPT) |
c0e889bf140c
Cancel the change done by sync with HEAD.
Kenichi Handa <handa@m17n.org>
parents:
90776
diff
changeset
|
5975 move_gap (XINT (start)); |
c0e889bf140c
Cancel the change done by sync with HEAD.
Kenichi Handa <handa@m17n.org>
parents:
90776
diff
changeset
|
5976 |
c0e889bf140c
Cancel the change done by sync with HEAD.
Kenichi Handa <handa@m17n.org>
parents:
90776
diff
changeset
|
5977 start1 = CHAR_TO_BYTE (XINT (start)); |
c0e889bf140c
Cancel the change done by sync with HEAD.
Kenichi Handa <handa@m17n.org>
parents:
90776
diff
changeset
|
5978 end1 = CHAR_TO_BYTE (XINT (end)); |
c0e889bf140c
Cancel the change done by sync with HEAD.
Kenichi Handa <handa@m17n.org>
parents:
90776
diff
changeset
|
5979 send_process (proc, BYTE_POS_ADDR (start1), end1 - start1, |
c0e889bf140c
Cancel the change done by sync with HEAD.
Kenichi Handa <handa@m17n.org>
parents:
90776
diff
changeset
|
5980 Fcurrent_buffer ()); |
c0e889bf140c
Cancel the change done by sync with HEAD.
Kenichi Handa <handa@m17n.org>
parents:
90776
diff
changeset
|
5981 |
578 | 5982 return Qnil; |
5983 } | |
5984 | |
5985 DEFUN ("process-send-string", Fprocess_send_string, Sprocess_send_string, | |
40103
6b389fb978bc
Change doc-string comments to `new style' [w/`doc:' keyword].
Pavel Janík <Pavel@Janik.cz>
parents:
39973
diff
changeset
|
5986 2, 2, 0, |
6b389fb978bc
Change doc-string comments to `new style' [w/`doc:' keyword].
Pavel Janík <Pavel@Janik.cz>
parents:
39973
diff
changeset
|
5987 doc: /* Send PROCESS the contents of STRING as input. |
6b389fb978bc
Change doc-string comments to `new style' [w/`doc:' keyword].
Pavel Janík <Pavel@Janik.cz>
parents:
39973
diff
changeset
|
5988 PROCESS may be a process, a buffer, the name of a process or buffer, or |
6b389fb978bc
Change doc-string comments to `new style' [w/`doc:' keyword].
Pavel Janík <Pavel@Janik.cz>
parents:
39973
diff
changeset
|
5989 nil, indicating the current buffer's process. |
6b389fb978bc
Change doc-string comments to `new style' [w/`doc:' keyword].
Pavel Janík <Pavel@Janik.cz>
parents:
39973
diff
changeset
|
5990 If STRING is more than 500 characters long, |
6b389fb978bc
Change doc-string comments to `new style' [w/`doc:' keyword].
Pavel Janík <Pavel@Janik.cz>
parents:
39973
diff
changeset
|
5991 it is sent in several bunches. This may happen even for shorter strings. |
6b389fb978bc
Change doc-string comments to `new style' [w/`doc:' keyword].
Pavel Janík <Pavel@Janik.cz>
parents:
39973
diff
changeset
|
5992 Output from processes can arrive in between bunches. */) |
6b389fb978bc
Change doc-string comments to `new style' [w/`doc:' keyword].
Pavel Janík <Pavel@Janik.cz>
parents:
39973
diff
changeset
|
5993 (process, string) |
578 | 5994 Lisp_Object process, string; |
5995 { | |
5996 Lisp_Object proc; | |
40656
cdfd4d09b79a
Update usage of CHECK_ macros (remove unused second argument).
Pavel Janík <Pavel@Janik.cz>
parents:
40641
diff
changeset
|
5997 CHECK_STRING (string); |
578 | 5998 proc = get_process (process); |
90777
c0e889bf140c
Cancel the change done by sync with HEAD.
Kenichi Handa <handa@m17n.org>
parents:
90776
diff
changeset
|
5999 send_process (proc, SDATA (string), |
c0e889bf140c
Cancel the change done by sync with HEAD.
Kenichi Handa <handa@m17n.org>
parents:
90776
diff
changeset
|
6000 SBYTES (string), string); |
578 | 6001 return Qnil; |
6002 } | |
6003 | |
49903
6dc5bfe9589b
Removed subtty, workaround for when TIOCSIGSEND fails.
Jan Djärv <jan.h.d@swipnet.se>
parents:
49894
diff
changeset
|
6004 /* Return the foreground process group for the tty/pty that |
6dc5bfe9589b
Removed subtty, workaround for when TIOCSIGSEND fails.
Jan Djärv <jan.h.d@swipnet.se>
parents:
49894
diff
changeset
|
6005 the process P uses. */ |
6dc5bfe9589b
Removed subtty, workaround for when TIOCSIGSEND fails.
Jan Djärv <jan.h.d@swipnet.se>
parents:
49894
diff
changeset
|
6006 static int |
6dc5bfe9589b
Removed subtty, workaround for when TIOCSIGSEND fails.
Jan Djärv <jan.h.d@swipnet.se>
parents:
49894
diff
changeset
|
6007 emacs_get_tty_pgrp (p) |
6dc5bfe9589b
Removed subtty, workaround for when TIOCSIGSEND fails.
Jan Djärv <jan.h.d@swipnet.se>
parents:
49894
diff
changeset
|
6008 struct Lisp_Process *p; |
6dc5bfe9589b
Removed subtty, workaround for when TIOCSIGSEND fails.
Jan Djärv <jan.h.d@swipnet.se>
parents:
49894
diff
changeset
|
6009 { |
6dc5bfe9589b
Removed subtty, workaround for when TIOCSIGSEND fails.
Jan Djärv <jan.h.d@swipnet.se>
parents:
49894
diff
changeset
|
6010 int gid = -1; |
6dc5bfe9589b
Removed subtty, workaround for when TIOCSIGSEND fails.
Jan Djärv <jan.h.d@swipnet.se>
parents:
49894
diff
changeset
|
6011 |
55444
976d03256b41
(Fwaiting_for_user_input_p, Fmake_network_process)
Juanma Barranquero <lekktu@gmail.com>
parents:
53835
diff
changeset
|
6012 #ifdef TIOCGPGRP |
81826
077a1e6fd3f2
(struct Lisp_Process): Turn slots infd, outfd, kill_without_query, pty_flag,
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
80984
diff
changeset
|
6013 if (ioctl (p->infd, TIOCGPGRP, &gid) == -1 && ! NILP (p->tty_name)) |
49903
6dc5bfe9589b
Removed subtty, workaround for when TIOCSIGSEND fails.
Jan Djärv <jan.h.d@swipnet.se>
parents:
49894
diff
changeset
|
6014 { |
6dc5bfe9589b
Removed subtty, workaround for when TIOCSIGSEND fails.
Jan Djärv <jan.h.d@swipnet.se>
parents:
49894
diff
changeset
|
6015 int fd; |
6dc5bfe9589b
Removed subtty, workaround for when TIOCSIGSEND fails.
Jan Djärv <jan.h.d@swipnet.se>
parents:
49894
diff
changeset
|
6016 /* Some OS:es (Solaris 8/9) does not allow TIOCGPGRP from the |
6dc5bfe9589b
Removed subtty, workaround for when TIOCSIGSEND fails.
Jan Djärv <jan.h.d@swipnet.se>
parents:
49894
diff
changeset
|
6017 master side. Try the slave side. */ |
93324
41f9d37301a2
(server_accept_connection): Simplify naming.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
93201
diff
changeset
|
6018 fd = emacs_open (SDATA (p->tty_name), O_RDONLY, 0); |
49903
6dc5bfe9589b
Removed subtty, workaround for when TIOCSIGSEND fails.
Jan Djärv <jan.h.d@swipnet.se>
parents:
49894
diff
changeset
|
6019 |
6dc5bfe9589b
Removed subtty, workaround for when TIOCSIGSEND fails.
Jan Djärv <jan.h.d@swipnet.se>
parents:
49894
diff
changeset
|
6020 if (fd != -1) |
6dc5bfe9589b
Removed subtty, workaround for when TIOCSIGSEND fails.
Jan Djärv <jan.h.d@swipnet.se>
parents:
49894
diff
changeset
|
6021 { |
6dc5bfe9589b
Removed subtty, workaround for when TIOCSIGSEND fails.
Jan Djärv <jan.h.d@swipnet.se>
parents:
49894
diff
changeset
|
6022 ioctl (fd, TIOCGPGRP, &gid); |
6dc5bfe9589b
Removed subtty, workaround for when TIOCSIGSEND fails.
Jan Djärv <jan.h.d@swipnet.se>
parents:
49894
diff
changeset
|
6023 emacs_close (fd); |
6dc5bfe9589b
Removed subtty, workaround for when TIOCSIGSEND fails.
Jan Djärv <jan.h.d@swipnet.se>
parents:
49894
diff
changeset
|
6024 } |
6dc5bfe9589b
Removed subtty, workaround for when TIOCSIGSEND fails.
Jan Djärv <jan.h.d@swipnet.se>
parents:
49894
diff
changeset
|
6025 } |
6dc5bfe9589b
Removed subtty, workaround for when TIOCSIGSEND fails.
Jan Djärv <jan.h.d@swipnet.se>
parents:
49894
diff
changeset
|
6026 #endif /* defined (TIOCGPGRP ) */ |
6dc5bfe9589b
Removed subtty, workaround for when TIOCSIGSEND fails.
Jan Djärv <jan.h.d@swipnet.se>
parents:
49894
diff
changeset
|
6027 |
6dc5bfe9589b
Removed subtty, workaround for when TIOCSIGSEND fails.
Jan Djärv <jan.h.d@swipnet.se>
parents:
49894
diff
changeset
|
6028 return gid; |
6dc5bfe9589b
Removed subtty, workaround for when TIOCSIGSEND fails.
Jan Djärv <jan.h.d@swipnet.se>
parents:
49894
diff
changeset
|
6029 } |
6dc5bfe9589b
Removed subtty, workaround for when TIOCSIGSEND fails.
Jan Djärv <jan.h.d@swipnet.se>
parents:
49894
diff
changeset
|
6030 |
24352
023601636a18
(syms_of_process): defsubr it.
Richard M. Stallman <rms@gnu.org>
parents:
23930
diff
changeset
|
6031 DEFUN ("process-running-child-p", Fprocess_running_child_p, |
023601636a18
(syms_of_process): defsubr it.
Richard M. Stallman <rms@gnu.org>
parents:
23930
diff
changeset
|
6032 Sprocess_running_child_p, 0, 1, 0, |
40103
6b389fb978bc
Change doc-string comments to `new style' [w/`doc:' keyword].
Pavel Janík <Pavel@Janik.cz>
parents:
39973
diff
changeset
|
6033 doc: /* Return t if PROCESS has given the terminal to a child. |
6b389fb978bc
Change doc-string comments to `new style' [w/`doc:' keyword].
Pavel Janík <Pavel@Janik.cz>
parents:
39973
diff
changeset
|
6034 If the operating system does not make it possible to find out, |
6b389fb978bc
Change doc-string comments to `new style' [w/`doc:' keyword].
Pavel Janík <Pavel@Janik.cz>
parents:
39973
diff
changeset
|
6035 return t unconditionally. */) |
6b389fb978bc
Change doc-string comments to `new style' [w/`doc:' keyword].
Pavel Janík <Pavel@Janik.cz>
parents:
39973
diff
changeset
|
6036 (process) |
24352
023601636a18
(syms_of_process): defsubr it.
Richard M. Stallman <rms@gnu.org>
parents:
23930
diff
changeset
|
6037 Lisp_Object process; |
023601636a18
(syms_of_process): defsubr it.
Richard M. Stallman <rms@gnu.org>
parents:
23930
diff
changeset
|
6038 { |
023601636a18
(syms_of_process): defsubr it.
Richard M. Stallman <rms@gnu.org>
parents:
23930
diff
changeset
|
6039 /* Initialize in case ioctl doesn't exist or gives an error, |
023601636a18
(syms_of_process): defsubr it.
Richard M. Stallman <rms@gnu.org>
parents:
23930
diff
changeset
|
6040 in a way that will cause returning t. */ |
49903
6dc5bfe9589b
Removed subtty, workaround for when TIOCSIGSEND fails.
Jan Djärv <jan.h.d@swipnet.se>
parents:
49894
diff
changeset
|
6041 int gid; |
24352
023601636a18
(syms_of_process): defsubr it.
Richard M. Stallman <rms@gnu.org>
parents:
23930
diff
changeset
|
6042 Lisp_Object proc; |
023601636a18
(syms_of_process): defsubr it.
Richard M. Stallman <rms@gnu.org>
parents:
23930
diff
changeset
|
6043 struct Lisp_Process *p; |
023601636a18
(syms_of_process): defsubr it.
Richard M. Stallman <rms@gnu.org>
parents:
23930
diff
changeset
|
6044 |
023601636a18
(syms_of_process): defsubr it.
Richard M. Stallman <rms@gnu.org>
parents:
23930
diff
changeset
|
6045 proc = get_process (process); |
023601636a18
(syms_of_process): defsubr it.
Richard M. Stallman <rms@gnu.org>
parents:
23930
diff
changeset
|
6046 p = XPROCESS (proc); |
023601636a18
(syms_of_process): defsubr it.
Richard M. Stallman <rms@gnu.org>
parents:
23930
diff
changeset
|
6047 |
95884
d6a4488883dc
Daniel Engeler <engeler at gmail.com>
Glenn Morris <rgm@gnu.org>
parents:
95387
diff
changeset
|
6048 if (!EQ (p->type, Qreal)) |
24352
023601636a18
(syms_of_process): defsubr it.
Richard M. Stallman <rms@gnu.org>
parents:
23930
diff
changeset
|
6049 error ("Process %s is not a subprocess", |
46370
40db0673e6f0
Most uses of XSTRING combined with STRING_BYTES or indirection changed to
Ken Raeburn <raeburn@raeburn.org>
parents:
46314
diff
changeset
|
6050 SDATA (p->name)); |
81826
077a1e6fd3f2
(struct Lisp_Process): Turn slots infd, outfd, kill_without_query, pty_flag,
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
80984
diff
changeset
|
6051 if (p->infd < 0) |
24352
023601636a18
(syms_of_process): defsubr it.
Richard M. Stallman <rms@gnu.org>
parents:
23930
diff
changeset
|
6052 error ("Process %s is not active", |
46370
40db0673e6f0
Most uses of XSTRING combined with STRING_BYTES or indirection changed to
Ken Raeburn <raeburn@raeburn.org>
parents:
46314
diff
changeset
|
6053 SDATA (p->name)); |
24352
023601636a18
(syms_of_process): defsubr it.
Richard M. Stallman <rms@gnu.org>
parents:
23930
diff
changeset
|
6054 |
49903
6dc5bfe9589b
Removed subtty, workaround for when TIOCSIGSEND fails.
Jan Djärv <jan.h.d@swipnet.se>
parents:
49894
diff
changeset
|
6055 gid = emacs_get_tty_pgrp (p); |
24352
023601636a18
(syms_of_process): defsubr it.
Richard M. Stallman <rms@gnu.org>
parents:
23930
diff
changeset
|
6056 |
69873
2d844bbbccd4
* process.h (struct Lisp_Process): Replace Lisp_Objects `pid',
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
69634
diff
changeset
|
6057 if (gid == p->pid) |
24352
023601636a18
(syms_of_process): defsubr it.
Richard M. Stallman <rms@gnu.org>
parents:
23930
diff
changeset
|
6058 return Qnil; |
023601636a18
(syms_of_process): defsubr it.
Richard M. Stallman <rms@gnu.org>
parents:
23930
diff
changeset
|
6059 return Qt; |
023601636a18
(syms_of_process): defsubr it.
Richard M. Stallman <rms@gnu.org>
parents:
23930
diff
changeset
|
6060 } |
023601636a18
(syms_of_process): defsubr it.
Richard M. Stallman <rms@gnu.org>
parents:
23930
diff
changeset
|
6061 |
578 | 6062 /* send a signal number SIGNO to PROCESS. |
24352
023601636a18
(syms_of_process): defsubr it.
Richard M. Stallman <rms@gnu.org>
parents:
23930
diff
changeset
|
6063 If CURRENT_GROUP is t, that means send to the process group |
023601636a18
(syms_of_process): defsubr it.
Richard M. Stallman <rms@gnu.org>
parents:
23930
diff
changeset
|
6064 that currently owns the terminal being used to communicate with PROCESS. |
578 | 6065 This is used for various commands in shell mode. |
24352
023601636a18
(syms_of_process): defsubr it.
Richard M. Stallman <rms@gnu.org>
parents:
23930
diff
changeset
|
6066 If CURRENT_GROUP is lambda, that means send to the process group |
023601636a18
(syms_of_process): defsubr it.
Richard M. Stallman <rms@gnu.org>
parents:
23930
diff
changeset
|
6067 that currently owns the terminal, but only if it is NOT the shell itself. |
023601636a18
(syms_of_process): defsubr it.
Richard M. Stallman <rms@gnu.org>
parents:
23930
diff
changeset
|
6068 |
578 | 6069 If NOMSG is zero, insert signal-announcements into process's buffers |
1594
b476a97ad17e
* systty.h, process.c, buffer.h, callproc.c, sysdep.c, dired.c:
Jim Blandy <jimb@redhat.com>
parents:
1569
diff
changeset
|
6070 right away. |
b476a97ad17e
* systty.h, process.c, buffer.h, callproc.c, sysdep.c, dired.c:
Jim Blandy <jimb@redhat.com>
parents:
1569
diff
changeset
|
6071 |
b476a97ad17e
* systty.h, process.c, buffer.h, callproc.c, sysdep.c, dired.c:
Jim Blandy <jimb@redhat.com>
parents:
1569
diff
changeset
|
6072 If we can, we try to signal PROCESS by sending control characters |
7220
a33eb16cab9d
(Fopen_network_stream): Retry the connect if EADDRINUSE. Ignore EISCONN.
Richard M. Stallman <rms@gnu.org>
parents:
7157
diff
changeset
|
6073 down the pty. This allows us to signal inferiors who have changed |
1594
b476a97ad17e
* systty.h, process.c, buffer.h, callproc.c, sysdep.c, dired.c:
Jim Blandy <jimb@redhat.com>
parents:
1569
diff
changeset
|
6074 their uid, for which killpg would return an EPERM error. */ |
578 | 6075 |
1522
19ccf004b172
* process.c: (status_convert): Declare this to return a
Jim Blandy <jimb@redhat.com>
parents:
1323
diff
changeset
|
6076 static void |
578 | 6077 process_send_signal (process, signo, current_group, nomsg) |
6078 Lisp_Object process; | |
6079 int signo; | |
6080 Lisp_Object current_group; | |
6081 int nomsg; | |
6082 { | |
6083 Lisp_Object proc; | |
6084 register struct Lisp_Process *p; | |
6085 int gid; | |
6086 int no_pgrp = 0; | |
6087 | |
6088 proc = get_process (process); | |
6089 p = XPROCESS (proc); | |
6090 | |
95884
d6a4488883dc
Daniel Engeler <engeler at gmail.com>
Glenn Morris <rgm@gnu.org>
parents:
95387
diff
changeset
|
6091 if (!EQ (p->type, Qreal)) |
578 | 6092 error ("Process %s is not a subprocess", |
46370
40db0673e6f0
Most uses of XSTRING combined with STRING_BYTES or indirection changed to
Ken Raeburn <raeburn@raeburn.org>
parents:
46314
diff
changeset
|
6093 SDATA (p->name)); |
81826
077a1e6fd3f2
(struct Lisp_Process): Turn slots infd, outfd, kill_without_query, pty_flag,
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
80984
diff
changeset
|
6094 if (p->infd < 0) |
578 | 6095 error ("Process %s is not active", |
46370
40db0673e6f0
Most uses of XSTRING combined with STRING_BYTES or indirection changed to
Ken Raeburn <raeburn@raeburn.org>
parents:
46314
diff
changeset
|
6096 SDATA (p->name)); |
578 | 6097 |
81826
077a1e6fd3f2
(struct Lisp_Process): Turn slots infd, outfd, kill_without_query, pty_flag,
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
80984
diff
changeset
|
6098 if (!p->pty_flag) |
578 | 6099 current_group = Qnil; |
6100 | |
6101 /* If we are using pgrps, get a pgrp number and make it negative. */ | |
46411
d17e7d2c1766
(create_process): Test USG_SUBTTY_WORKS.
Richard M. Stallman <rms@gnu.org>
parents:
46370
diff
changeset
|
6102 if (NILP (current_group)) |
d17e7d2c1766
(create_process): Test USG_SUBTTY_WORKS.
Richard M. Stallman <rms@gnu.org>
parents:
46370
diff
changeset
|
6103 /* Send the signal to the shell's process group. */ |
69873
2d844bbbccd4
* process.h (struct Lisp_Process): Replace Lisp_Objects `pid',
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
69634
diff
changeset
|
6104 gid = p->pid; |
46411
d17e7d2c1766
(create_process): Test USG_SUBTTY_WORKS.
Richard M. Stallman <rms@gnu.org>
parents:
46370
diff
changeset
|
6105 else |
578 | 6106 { |
1594
b476a97ad17e
* systty.h, process.c, buffer.h, callproc.c, sysdep.c, dired.c:
Jim Blandy <jimb@redhat.com>
parents:
1569
diff
changeset
|
6107 #ifdef SIGNALS_VIA_CHARACTERS |
578 | 6108 /* If possible, send signals to the entire pgrp |
6109 by sending an input character to it. */ | |
1594
b476a97ad17e
* systty.h, process.c, buffer.h, callproc.c, sysdep.c, dired.c:
Jim Blandy <jimb@redhat.com>
parents:
1569
diff
changeset
|
6110 |
1925
3ddb163a9201
* process.c: Make sure we don't miss processes exiting, by having
Jim Blandy <jimb@redhat.com>
parents:
1886
diff
changeset
|
6111 /* TERMIOS is the latest and bestest, and seems most likely to |
100824
e5aa6a069f40
(conv_sockaddr_to_lisp): Add workaround for
Andreas Schwab <schwab@suse.de>
parents:
100573
diff
changeset
|
6112 work. If the system has it, use it. */ |
1925
3ddb163a9201
* process.c: Make sure we don't miss processes exiting, by having
Jim Blandy <jimb@redhat.com>
parents:
1886
diff
changeset
|
6113 #ifdef HAVE_TERMIOS |
3ddb163a9201
* process.c: Make sure we don't miss processes exiting, by having
Jim Blandy <jimb@redhat.com>
parents:
1886
diff
changeset
|
6114 struct termios t; |
56695
62660593b0a2
(process_send_signal) [SIGNALS_VIA_CHARACTERS, HAVE_TERMIOS]: Clean up.
Richard M. Stallman <rms@gnu.org>
parents:
56583
diff
changeset
|
6115 cc_t *sig_char = NULL; |
62660593b0a2
(process_send_signal) [SIGNALS_VIA_CHARACTERS, HAVE_TERMIOS]: Clean up.
Richard M. Stallman <rms@gnu.org>
parents:
56583
diff
changeset
|
6116 |
81826
077a1e6fd3f2
(struct Lisp_Process): Turn slots infd, outfd, kill_without_query, pty_flag,
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
80984
diff
changeset
|
6117 tcgetattr (p->infd, &t); |
1925
3ddb163a9201
* process.c: Make sure we don't miss processes exiting, by having
Jim Blandy <jimb@redhat.com>
parents:
1886
diff
changeset
|
6118 |
3ddb163a9201
* process.c: Make sure we don't miss processes exiting, by having
Jim Blandy <jimb@redhat.com>
parents:
1886
diff
changeset
|
6119 switch (signo) |
3ddb163a9201
* process.c: Make sure we don't miss processes exiting, by having
Jim Blandy <jimb@redhat.com>
parents:
1886
diff
changeset
|
6120 { |
3ddb163a9201
* process.c: Make sure we don't miss processes exiting, by having
Jim Blandy <jimb@redhat.com>
parents:
1886
diff
changeset
|
6121 case SIGINT: |
56695
62660593b0a2
(process_send_signal) [SIGNALS_VIA_CHARACTERS, HAVE_TERMIOS]: Clean up.
Richard M. Stallman <rms@gnu.org>
parents:
56583
diff
changeset
|
6122 sig_char = &t.c_cc[VINTR]; |
62660593b0a2
(process_send_signal) [SIGNALS_VIA_CHARACTERS, HAVE_TERMIOS]: Clean up.
Richard M. Stallman <rms@gnu.org>
parents:
56583
diff
changeset
|
6123 break; |
1925
3ddb163a9201
* process.c: Make sure we don't miss processes exiting, by having
Jim Blandy <jimb@redhat.com>
parents:
1886
diff
changeset
|
6124 |
3ddb163a9201
* process.c: Make sure we don't miss processes exiting, by having
Jim Blandy <jimb@redhat.com>
parents:
1886
diff
changeset
|
6125 case SIGQUIT: |
56695
62660593b0a2
(process_send_signal) [SIGNALS_VIA_CHARACTERS, HAVE_TERMIOS]: Clean up.
Richard M. Stallman <rms@gnu.org>
parents:
56583
diff
changeset
|
6126 sig_char = &t.c_cc[VQUIT]; |
62660593b0a2
(process_send_signal) [SIGNALS_VIA_CHARACTERS, HAVE_TERMIOS]: Clean up.
Richard M. Stallman <rms@gnu.org>
parents:
56583
diff
changeset
|
6127 break; |
1925
3ddb163a9201
* process.c: Make sure we don't miss processes exiting, by having
Jim Blandy <jimb@redhat.com>
parents:
1886
diff
changeset
|
6128 |
3ddb163a9201
* process.c: Make sure we don't miss processes exiting, by having
Jim Blandy <jimb@redhat.com>
parents:
1886
diff
changeset
|
6129 case SIGTSTP: |
7414
33e5afbb62bf
(process_send_signal): If PREFER_VSUSP, use VSUSP instead of VSWTCH.
Richard M. Stallman <rms@gnu.org>
parents:
7352
diff
changeset
|
6130 #if defined (VSWTCH) && !defined (PREFER_VSUSP) |
56695
62660593b0a2
(process_send_signal) [SIGNALS_VIA_CHARACTERS, HAVE_TERMIOS]: Clean up.
Richard M. Stallman <rms@gnu.org>
parents:
56583
diff
changeset
|
6131 sig_char = &t.c_cc[VSWTCH]; |
1925
3ddb163a9201
* process.c: Make sure we don't miss processes exiting, by having
Jim Blandy <jimb@redhat.com>
parents:
1886
diff
changeset
|
6132 #else |
56695
62660593b0a2
(process_send_signal) [SIGNALS_VIA_CHARACTERS, HAVE_TERMIOS]: Clean up.
Richard M. Stallman <rms@gnu.org>
parents:
56583
diff
changeset
|
6133 sig_char = &t.c_cc[VSUSP]; |
62660593b0a2
(process_send_signal) [SIGNALS_VIA_CHARACTERS, HAVE_TERMIOS]: Clean up.
Richard M. Stallman <rms@gnu.org>
parents:
56583
diff
changeset
|
6134 #endif |
62660593b0a2
(process_send_signal) [SIGNALS_VIA_CHARACTERS, HAVE_TERMIOS]: Clean up.
Richard M. Stallman <rms@gnu.org>
parents:
56583
diff
changeset
|
6135 break; |
1925
3ddb163a9201
* process.c: Make sure we don't miss processes exiting, by having
Jim Blandy <jimb@redhat.com>
parents:
1886
diff
changeset
|
6136 } |
3ddb163a9201
* process.c: Make sure we don't miss processes exiting, by having
Jim Blandy <jimb@redhat.com>
parents:
1886
diff
changeset
|
6137 |
56713
7e315ff338bf
(process_send_signal): Use CDISABLE.
Kim F. Storm <storm@cua.dk>
parents:
56701
diff
changeset
|
6138 if (sig_char && *sig_char != CDISABLE) |
56770
598599edd5ca
(process_send_signal) [SIGNALS_VIA_CHARACTERS, HAVE_TERMIOS]:
Richard M. Stallman <rms@gnu.org>
parents:
56728
diff
changeset
|
6139 { |
598599edd5ca
(process_send_signal) [SIGNALS_VIA_CHARACTERS, HAVE_TERMIOS]:
Richard M. Stallman <rms@gnu.org>
parents:
56728
diff
changeset
|
6140 send_process (proc, sig_char, 1, Qnil); |
598599edd5ca
(process_send_signal) [SIGNALS_VIA_CHARACTERS, HAVE_TERMIOS]:
Richard M. Stallman <rms@gnu.org>
parents:
56728
diff
changeset
|
6141 return; |
598599edd5ca
(process_send_signal) [SIGNALS_VIA_CHARACTERS, HAVE_TERMIOS]:
Richard M. Stallman <rms@gnu.org>
parents:
56728
diff
changeset
|
6142 } |
598599edd5ca
(process_send_signal) [SIGNALS_VIA_CHARACTERS, HAVE_TERMIOS]:
Richard M. Stallman <rms@gnu.org>
parents:
56728
diff
changeset
|
6143 /* If we can't send the signal with a character, |
598599edd5ca
(process_send_signal) [SIGNALS_VIA_CHARACTERS, HAVE_TERMIOS]:
Richard M. Stallman <rms@gnu.org>
parents:
56728
diff
changeset
|
6144 fall through and send it another way. */ |
1925
3ddb163a9201
* process.c: Make sure we don't miss processes exiting, by having
Jim Blandy <jimb@redhat.com>
parents:
1886
diff
changeset
|
6145 #else /* ! HAVE_TERMIOS */ |
3ddb163a9201
* process.c: Make sure we don't miss processes exiting, by having
Jim Blandy <jimb@redhat.com>
parents:
1886
diff
changeset
|
6146 |
1594
b476a97ad17e
* systty.h, process.c, buffer.h, callproc.c, sysdep.c, dired.c:
Jim Blandy <jimb@redhat.com>
parents:
1569
diff
changeset
|
6147 /* On Berkeley descendants, the following IOCTL's retrieve the |
b476a97ad17e
* systty.h, process.c, buffer.h, callproc.c, sysdep.c, dired.c:
Jim Blandy <jimb@redhat.com>
parents:
1569
diff
changeset
|
6148 current control characters. */ |
578 | 6149 #if defined (TIOCGLTC) && defined (TIOCGETC) |
1594
b476a97ad17e
* systty.h, process.c, buffer.h, callproc.c, sysdep.c, dired.c:
Jim Blandy <jimb@redhat.com>
parents:
1569
diff
changeset
|
6150 |
578 | 6151 struct tchars c; |
6152 struct ltchars lc; | |
6153 | |
6154 switch (signo) | |
6155 { | |
6156 case SIGINT: | |
81826
077a1e6fd3f2
(struct Lisp_Process): Turn slots infd, outfd, kill_without_query, pty_flag,
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
80984
diff
changeset
|
6157 ioctl (p->infd, TIOCGETC, &c); |
8063
30861f2f4f84
(send_process): Major rewrite.
Richard M. Stallman <rms@gnu.org>
parents:
7937
diff
changeset
|
6158 send_process (proc, &c.t_intrc, 1, Qnil); |
1522
19ccf004b172
* process.c: (status_convert): Declare this to return a
Jim Blandy <jimb@redhat.com>
parents:
1323
diff
changeset
|
6159 return; |
578 | 6160 case SIGQUIT: |
81826
077a1e6fd3f2
(struct Lisp_Process): Turn slots infd, outfd, kill_without_query, pty_flag,
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
80984
diff
changeset
|
6161 ioctl (p->infd, TIOCGETC, &c); |
8063
30861f2f4f84
(send_process): Major rewrite.
Richard M. Stallman <rms@gnu.org>
parents:
7937
diff
changeset
|
6162 send_process (proc, &c.t_quitc, 1, Qnil); |
1522
19ccf004b172
* process.c: (status_convert): Declare this to return a
Jim Blandy <jimb@redhat.com>
parents:
1323
diff
changeset
|
6163 return; |
1012
a48ed1d416dd
* process.c (process_send_signal): Don't send SIGTSTP if the
Jim Blandy <jimb@redhat.com>
parents:
849
diff
changeset
|
6164 #ifdef SIGTSTP |
578 | 6165 case SIGTSTP: |
81826
077a1e6fd3f2
(struct Lisp_Process): Turn slots infd, outfd, kill_without_query, pty_flag,
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
80984
diff
changeset
|
6166 ioctl (p->infd, TIOCGLTC, &lc); |
8063
30861f2f4f84
(send_process): Major rewrite.
Richard M. Stallman <rms@gnu.org>
parents:
7937
diff
changeset
|
6167 send_process (proc, &lc.t_suspc, 1, Qnil); |
1522
19ccf004b172
* process.c: (status_convert): Declare this to return a
Jim Blandy <jimb@redhat.com>
parents:
1323
diff
changeset
|
6168 return; |
1594
b476a97ad17e
* systty.h, process.c, buffer.h, callproc.c, sysdep.c, dired.c:
Jim Blandy <jimb@redhat.com>
parents:
1569
diff
changeset
|
6169 #endif /* ! defined (SIGTSTP) */ |
578 | 6170 } |
1594
b476a97ad17e
* systty.h, process.c, buffer.h, callproc.c, sysdep.c, dired.c:
Jim Blandy <jimb@redhat.com>
parents:
1569
diff
changeset
|
6171 |
b476a97ad17e
* systty.h, process.c, buffer.h, callproc.c, sysdep.c, dired.c:
Jim Blandy <jimb@redhat.com>
parents:
1569
diff
changeset
|
6172 #else /* ! defined (TIOCGLTC) && defined (TIOCGETC) */ |
b476a97ad17e
* systty.h, process.c, buffer.h, callproc.c, sysdep.c, dired.c:
Jim Blandy <jimb@redhat.com>
parents:
1569
diff
changeset
|
6173 |
b476a97ad17e
* systty.h, process.c, buffer.h, callproc.c, sysdep.c, dired.c:
Jim Blandy <jimb@redhat.com>
parents:
1569
diff
changeset
|
6174 /* On SYSV descendants, the TCGETA ioctl retrieves the current control |
b476a97ad17e
* systty.h, process.c, buffer.h, callproc.c, sysdep.c, dired.c:
Jim Blandy <jimb@redhat.com>
parents:
1569
diff
changeset
|
6175 characters. */ |
b476a97ad17e
* systty.h, process.c, buffer.h, callproc.c, sysdep.c, dired.c:
Jim Blandy <jimb@redhat.com>
parents:
1569
diff
changeset
|
6176 #ifdef TCGETA |
578 | 6177 struct termio t; |
6178 switch (signo) | |
6179 { | |
6180 case SIGINT: | |
81826
077a1e6fd3f2
(struct Lisp_Process): Turn slots infd, outfd, kill_without_query, pty_flag,
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
80984
diff
changeset
|
6181 ioctl (p->infd, TCGETA, &t); |
8063
30861f2f4f84
(send_process): Major rewrite.
Richard M. Stallman <rms@gnu.org>
parents:
7937
diff
changeset
|
6182 send_process (proc, &t.c_cc[VINTR], 1, Qnil); |
1522
19ccf004b172
* process.c: (status_convert): Declare this to return a
Jim Blandy <jimb@redhat.com>
parents:
1323
diff
changeset
|
6183 return; |
578 | 6184 case SIGQUIT: |
81826
077a1e6fd3f2
(struct Lisp_Process): Turn slots infd, outfd, kill_without_query, pty_flag,
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
80984
diff
changeset
|
6185 ioctl (p->infd, TCGETA, &t); |
8063
30861f2f4f84
(send_process): Major rewrite.
Richard M. Stallman <rms@gnu.org>
parents:
7937
diff
changeset
|
6186 send_process (proc, &t.c_cc[VQUIT], 1, Qnil); |
1522
19ccf004b172
* process.c: (status_convert): Declare this to return a
Jim Blandy <jimb@redhat.com>
parents:
1323
diff
changeset
|
6187 return; |
1569
52a69b6a8f96
* process.c [SYSV]: Don't include <termios.h>, <termio.h>, or
Jim Blandy <jimb@redhat.com>
parents:
1522
diff
changeset
|
6188 #ifdef SIGTSTP |
578 | 6189 case SIGTSTP: |
81826
077a1e6fd3f2
(struct Lisp_Process): Turn slots infd, outfd, kill_without_query, pty_flag,
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
80984
diff
changeset
|
6190 ioctl (p->infd, TCGETA, &t); |
8063
30861f2f4f84
(send_process): Major rewrite.
Richard M. Stallman <rms@gnu.org>
parents:
7937
diff
changeset
|
6191 send_process (proc, &t.c_cc[VSWTCH], 1, Qnil); |
1522
19ccf004b172
* process.c: (status_convert): Declare this to return a
Jim Blandy <jimb@redhat.com>
parents:
1323
diff
changeset
|
6192 return; |
1594
b476a97ad17e
* systty.h, process.c, buffer.h, callproc.c, sysdep.c, dired.c:
Jim Blandy <jimb@redhat.com>
parents:
1569
diff
changeset
|
6193 #endif /* ! defined (SIGTSTP) */ |
578 | 6194 } |
1594
b476a97ad17e
* systty.h, process.c, buffer.h, callproc.c, sysdep.c, dired.c:
Jim Blandy <jimb@redhat.com>
parents:
1569
diff
changeset
|
6195 #else /* ! defined (TCGETA) */ |
b476a97ad17e
* systty.h, process.c, buffer.h, callproc.c, sysdep.c, dired.c:
Jim Blandy <jimb@redhat.com>
parents:
1569
diff
changeset
|
6196 Your configuration files are messed up. |
b476a97ad17e
* systty.h, process.c, buffer.h, callproc.c, sysdep.c, dired.c:
Jim Blandy <jimb@redhat.com>
parents:
1569
diff
changeset
|
6197 /* If your system configuration files define SIGNALS_VIA_CHARACTERS, |
b476a97ad17e
* systty.h, process.c, buffer.h, callproc.c, sysdep.c, dired.c:
Jim Blandy <jimb@redhat.com>
parents:
1569
diff
changeset
|
6198 you'd better be using one of the alternatives above! */ |
b476a97ad17e
* systty.h, process.c, buffer.h, callproc.c, sysdep.c, dired.c:
Jim Blandy <jimb@redhat.com>
parents:
1569
diff
changeset
|
6199 #endif /* ! defined (TCGETA) */ |
b476a97ad17e
* systty.h, process.c, buffer.h, callproc.c, sysdep.c, dired.c:
Jim Blandy <jimb@redhat.com>
parents:
1569
diff
changeset
|
6200 #endif /* ! defined (TIOCGLTC) && defined (TIOCGETC) */ |
93324
41f9d37301a2
(server_accept_connection): Simplify naming.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
93201
diff
changeset
|
6201 /* In this case, the code above should alway return. */ |
46314
7c8eab7f2bd6
(process_send_signal): Add abort call.
Richard M. Stallman <rms@gnu.org>
parents:
46293
diff
changeset
|
6202 abort (); |
56770
598599edd5ca
(process_send_signal) [SIGNALS_VIA_CHARACTERS, HAVE_TERMIOS]:
Richard M. Stallman <rms@gnu.org>
parents:
56728
diff
changeset
|
6203 #endif /* ! defined HAVE_TERMIOS */ |
598599edd5ca
(process_send_signal) [SIGNALS_VIA_CHARACTERS, HAVE_TERMIOS]:
Richard M. Stallman <rms@gnu.org>
parents:
56728
diff
changeset
|
6204 |
598599edd5ca
(process_send_signal) [SIGNALS_VIA_CHARACTERS, HAVE_TERMIOS]:
Richard M. Stallman <rms@gnu.org>
parents:
56728
diff
changeset
|
6205 /* The code above may fall through if it can't |
598599edd5ca
(process_send_signal) [SIGNALS_VIA_CHARACTERS, HAVE_TERMIOS]:
Richard M. Stallman <rms@gnu.org>
parents:
56728
diff
changeset
|
6206 handle the signal. */ |
46314
7c8eab7f2bd6
(process_send_signal): Add abort call.
Richard M. Stallman <rms@gnu.org>
parents:
46293
diff
changeset
|
6207 #endif /* defined (SIGNALS_VIA_CHARACTERS) */ |
849 | 6208 |
49600
23a1cea22d13
Trailing whitespace deleted.
Juanma Barranquero <lekktu@gmail.com>
parents:
49281
diff
changeset
|
6209 #ifdef TIOCGPGRP |
46411
d17e7d2c1766
(create_process): Test USG_SUBTTY_WORKS.
Richard M. Stallman <rms@gnu.org>
parents:
46370
diff
changeset
|
6210 /* Get the current pgrp using the tty itself, if we have that. |
578 | 6211 Otherwise, use the pty to get the pgrp. |
6212 On pfa systems, saka@pfu.fujitsu.co.JP writes: | |
1594
b476a97ad17e
* systty.h, process.c, buffer.h, callproc.c, sysdep.c, dired.c:
Jim Blandy <jimb@redhat.com>
parents:
1569
diff
changeset
|
6213 "TIOCGPGRP symbol defined in sys/ioctl.h at E50. |
b476a97ad17e
* systty.h, process.c, buffer.h, callproc.c, sysdep.c, dired.c:
Jim Blandy <jimb@redhat.com>
parents:
1569
diff
changeset
|
6214 But, TIOCGPGRP does not work on E50 ;-P works fine on E60" |
578 | 6215 His patch indicates that if TIOCGPGRP returns an error, then |
6216 we should just assume that p->pid is also the process group id. */ | |
49903
6dc5bfe9589b
Removed subtty, workaround for when TIOCSIGSEND fails.
Jan Djärv <jan.h.d@swipnet.se>
parents:
49894
diff
changeset
|
6217 |
6dc5bfe9589b
Removed subtty, workaround for when TIOCSIGSEND fails.
Jan Djärv <jan.h.d@swipnet.se>
parents:
49894
diff
changeset
|
6218 gid = emacs_get_tty_pgrp (p); |
55444
976d03256b41
(Fwaiting_for_user_input_p, Fmake_network_process)
Juanma Barranquero <lekktu@gmail.com>
parents:
53835
diff
changeset
|
6219 |
49903
6dc5bfe9589b
Removed subtty, workaround for when TIOCSIGSEND fails.
Jan Djärv <jan.h.d@swipnet.se>
parents:
49894
diff
changeset
|
6220 if (gid == -1) |
6dc5bfe9589b
Removed subtty, workaround for when TIOCSIGSEND fails.
Jan Djärv <jan.h.d@swipnet.se>
parents:
49894
diff
changeset
|
6221 /* If we can't get the information, assume |
6dc5bfe9589b
Removed subtty, workaround for when TIOCSIGSEND fails.
Jan Djärv <jan.h.d@swipnet.se>
parents:
49894
diff
changeset
|
6222 the shell owns the tty. */ |
69873
2d844bbbccd4
* process.h (struct Lisp_Process): Replace Lisp_Objects `pid',
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
69634
diff
changeset
|
6223 gid = p->pid; |
46411
d17e7d2c1766
(create_process): Test USG_SUBTTY_WORKS.
Richard M. Stallman <rms@gnu.org>
parents:
46370
diff
changeset
|
6224 |
d17e7d2c1766
(create_process): Test USG_SUBTTY_WORKS.
Richard M. Stallman <rms@gnu.org>
parents:
46370
diff
changeset
|
6225 /* It is not clear whether anything really can set GID to -1. |
d17e7d2c1766
(create_process): Test USG_SUBTTY_WORKS.
Richard M. Stallman <rms@gnu.org>
parents:
46370
diff
changeset
|
6226 Perhaps on some system one of those ioctls can or could do so. |
d17e7d2c1766
(create_process): Test USG_SUBTTY_WORKS.
Richard M. Stallman <rms@gnu.org>
parents:
46370
diff
changeset
|
6227 Or perhaps this is vestigial. */ |
578 | 6228 if (gid == -1) |
6229 no_pgrp = 1; | |
1594
b476a97ad17e
* systty.h, process.c, buffer.h, callproc.c, sysdep.c, dired.c:
Jim Blandy <jimb@redhat.com>
parents:
1569
diff
changeset
|
6230 #else /* ! defined (TIOCGPGRP ) */ |
849 | 6231 /* Can't select pgrps on this system, so we know that |
6232 the child itself heads the pgrp. */ | |
69873
2d844bbbccd4
* process.h (struct Lisp_Process): Replace Lisp_Objects `pid',
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
69634
diff
changeset
|
6233 gid = p->pid; |
849 | 6234 #endif /* ! defined (TIOCGPGRP ) */ |
24352
023601636a18
(syms_of_process): defsubr it.
Richard M. Stallman <rms@gnu.org>
parents:
23930
diff
changeset
|
6235 |
023601636a18
(syms_of_process): defsubr it.
Richard M. Stallman <rms@gnu.org>
parents:
23930
diff
changeset
|
6236 /* If current_group is lambda, and the shell owns the terminal, |
023601636a18
(syms_of_process): defsubr it.
Richard M. Stallman <rms@gnu.org>
parents:
23930
diff
changeset
|
6237 don't send any signal. */ |
69873
2d844bbbccd4
* process.h (struct Lisp_Process): Replace Lisp_Objects `pid',
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
69634
diff
changeset
|
6238 if (EQ (current_group, Qlambda) && gid == p->pid) |
24352
023601636a18
(syms_of_process): defsubr it.
Richard M. Stallman <rms@gnu.org>
parents:
23930
diff
changeset
|
6239 return; |
578 | 6240 } |
6241 | |
6242 switch (signo) | |
6243 { | |
6244 #ifdef SIGCONT | |
6245 case SIGCONT: | |
69873
2d844bbbccd4
* process.h (struct Lisp_Process): Replace Lisp_Objects `pid',
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
69634
diff
changeset
|
6246 p->raw_status_new = 0; |
578 | 6247 p->status = Qrun; |
81826
077a1e6fd3f2
(struct Lisp_Process): Turn slots infd, outfd, kill_without_query, pty_flag,
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
80984
diff
changeset
|
6248 p->tick = ++process_tick; |
578 | 6249 if (!nomsg) |
104316
bb8ce3c842e7
* process.c (status_notify): Don't perform redisplay.
Chong Yidong <cyd@stupidchicken.com>
parents:
104265
diff
changeset
|
6250 { |
bb8ce3c842e7
* process.c (status_notify): Don't perform redisplay.
Chong Yidong <cyd@stupidchicken.com>
parents:
104265
diff
changeset
|
6251 status_notify (NULL); |
bb8ce3c842e7
* process.c (status_notify): Don't perform redisplay.
Chong Yidong <cyd@stupidchicken.com>
parents:
104265
diff
changeset
|
6252 redisplay_preserve_echo_area (13); |
bb8ce3c842e7
* process.c (status_notify): Don't perform redisplay.
Chong Yidong <cyd@stupidchicken.com>
parents:
104265
diff
changeset
|
6253 } |
578 | 6254 break; |
849 | 6255 #endif /* ! defined (SIGCONT) */ |
578 | 6256 case SIGINT: |
6257 case SIGQUIT: | |
6258 case SIGKILL: | |
81826
077a1e6fd3f2
(struct Lisp_Process): Turn slots infd, outfd, kill_without_query, pty_flag,
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
80984
diff
changeset
|
6259 flush_pending_output (p->infd); |
578 | 6260 break; |
6261 } | |
6262 | |
6263 /* If we don't have process groups, send the signal to the immediate | |
6264 subprocess. That isn't really right, but it's better than any | |
6265 obvious alternative. */ | |
6266 if (no_pgrp) | |
6267 { | |
69873
2d844bbbccd4
* process.h (struct Lisp_Process): Replace Lisp_Objects `pid',
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
69634
diff
changeset
|
6268 kill (p->pid, signo); |
578 | 6269 return; |
6270 } | |
6271 | |
6272 /* gid may be a pid, or minus a pgrp's number */ | |
6273 #ifdef TIOCSIGSEND | |
6274 if (!NILP (current_group)) | |
49903
6dc5bfe9589b
Removed subtty, workaround for when TIOCSIGSEND fails.
Jan Djärv <jan.h.d@swipnet.se>
parents:
49894
diff
changeset
|
6275 { |
81826
077a1e6fd3f2
(struct Lisp_Process): Turn slots infd, outfd, kill_without_query, pty_flag,
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
80984
diff
changeset
|
6276 if (ioctl (p->infd, TIOCSIGSEND, signo) == -1) |
49903
6dc5bfe9589b
Removed subtty, workaround for when TIOCSIGSEND fails.
Jan Djärv <jan.h.d@swipnet.se>
parents:
49894
diff
changeset
|
6277 EMACS_KILLPG (gid, signo); |
6dc5bfe9589b
Removed subtty, workaround for when TIOCSIGSEND fails.
Jan Djärv <jan.h.d@swipnet.se>
parents:
49894
diff
changeset
|
6278 } |
578 | 6279 else |
6280 { | |
69873
2d844bbbccd4
* process.h (struct Lisp_Process): Replace Lisp_Objects `pid',
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
69634
diff
changeset
|
6281 gid = - p->pid; |
578 | 6282 kill (gid, signo); |
6283 } | |
849 | 6284 #else /* ! defined (TIOCSIGSEND) */ |
46411
d17e7d2c1766
(create_process): Test USG_SUBTTY_WORKS.
Richard M. Stallman <rms@gnu.org>
parents:
46370
diff
changeset
|
6285 EMACS_KILLPG (gid, signo); |
849 | 6286 #endif /* ! defined (TIOCSIGSEND) */ |
578 | 6287 } |
6288 | |
6289 DEFUN ("interrupt-process", Finterrupt_process, Sinterrupt_process, 0, 2, 0, | |
40103
6b389fb978bc
Change doc-string comments to `new style' [w/`doc:' keyword].
Pavel Janík <Pavel@Janik.cz>
parents:
39973
diff
changeset
|
6290 doc: /* Interrupt process PROCESS. |
6b389fb978bc
Change doc-string comments to `new style' [w/`doc:' keyword].
Pavel Janík <Pavel@Janik.cz>
parents:
39973
diff
changeset
|
6291 PROCESS may be a process, a buffer, or the name of a process or buffer. |
55444
976d03256b41
(Fwaiting_for_user_input_p, Fmake_network_process)
Juanma Barranquero <lekktu@gmail.com>
parents:
53835
diff
changeset
|
6292 No arg or nil means current buffer's process. |
40103
6b389fb978bc
Change doc-string comments to `new style' [w/`doc:' keyword].
Pavel Janík <Pavel@Janik.cz>
parents:
39973
diff
changeset
|
6293 Second arg CURRENT-GROUP non-nil means send signal to |
6b389fb978bc
Change doc-string comments to `new style' [w/`doc:' keyword].
Pavel Janík <Pavel@Janik.cz>
parents:
39973
diff
changeset
|
6294 the current process-group of the process's controlling terminal |
6b389fb978bc
Change doc-string comments to `new style' [w/`doc:' keyword].
Pavel Janík <Pavel@Janik.cz>
parents:
39973
diff
changeset
|
6295 rather than to the process's own process group. |
6b389fb978bc
Change doc-string comments to `new style' [w/`doc:' keyword].
Pavel Janík <Pavel@Janik.cz>
parents:
39973
diff
changeset
|
6296 If the process is a shell, this means interrupt current subjob |
6b389fb978bc
Change doc-string comments to `new style' [w/`doc:' keyword].
Pavel Janík <Pavel@Janik.cz>
parents:
39973
diff
changeset
|
6297 rather than the shell. |
6b389fb978bc
Change doc-string comments to `new style' [w/`doc:' keyword].
Pavel Janík <Pavel@Janik.cz>
parents:
39973
diff
changeset
|
6298 |
6b389fb978bc
Change doc-string comments to `new style' [w/`doc:' keyword].
Pavel Janík <Pavel@Janik.cz>
parents:
39973
diff
changeset
|
6299 If CURRENT-GROUP is `lambda', and if the shell owns the terminal, |
6b389fb978bc
Change doc-string comments to `new style' [w/`doc:' keyword].
Pavel Janík <Pavel@Janik.cz>
parents:
39973
diff
changeset
|
6300 don't send the signal. */) |
6b389fb978bc
Change doc-string comments to `new style' [w/`doc:' keyword].
Pavel Janík <Pavel@Janik.cz>
parents:
39973
diff
changeset
|
6301 (process, current_group) |
578 | 6302 Lisp_Object process, current_group; |
6303 { | |
6304 process_send_signal (process, SIGINT, current_group, 0); | |
6305 return process; | |
6306 } | |
6307 | |
6308 DEFUN ("kill-process", Fkill_process, Skill_process, 0, 2, 0, | |
40103
6b389fb978bc
Change doc-string comments to `new style' [w/`doc:' keyword].
Pavel Janík <Pavel@Janik.cz>
parents:
39973
diff
changeset
|
6309 doc: /* Kill process PROCESS. May be process or name of one. |
6b389fb978bc
Change doc-string comments to `new style' [w/`doc:' keyword].
Pavel Janík <Pavel@Janik.cz>
parents:
39973
diff
changeset
|
6310 See function `interrupt-process' for more details on usage. */) |
6b389fb978bc
Change doc-string comments to `new style' [w/`doc:' keyword].
Pavel Janík <Pavel@Janik.cz>
parents:
39973
diff
changeset
|
6311 (process, current_group) |
578 | 6312 Lisp_Object process, current_group; |
6313 { | |
6314 process_send_signal (process, SIGKILL, current_group, 0); | |
6315 return process; | |
6316 } | |
6317 | |
6318 DEFUN ("quit-process", Fquit_process, Squit_process, 0, 2, 0, | |
40103
6b389fb978bc
Change doc-string comments to `new style' [w/`doc:' keyword].
Pavel Janík <Pavel@Janik.cz>
parents:
39973
diff
changeset
|
6319 doc: /* Send QUIT signal to process PROCESS. May be process or name of one. |
6b389fb978bc
Change doc-string comments to `new style' [w/`doc:' keyword].
Pavel Janík <Pavel@Janik.cz>
parents:
39973
diff
changeset
|
6320 See function `interrupt-process' for more details on usage. */) |
6b389fb978bc
Change doc-string comments to `new style' [w/`doc:' keyword].
Pavel Janík <Pavel@Janik.cz>
parents:
39973
diff
changeset
|
6321 (process, current_group) |
578 | 6322 Lisp_Object process, current_group; |
6323 { | |
6324 process_send_signal (process, SIGQUIT, current_group, 0); | |
6325 return process; | |
6326 } | |
6327 | |
6328 DEFUN ("stop-process", Fstop_process, Sstop_process, 0, 2, 0, | |
40103
6b389fb978bc
Change doc-string comments to `new style' [w/`doc:' keyword].
Pavel Janík <Pavel@Janik.cz>
parents:
39973
diff
changeset
|
6329 doc: /* Stop process PROCESS. May be process or name of one. |
49600
23a1cea22d13
Trailing whitespace deleted.
Juanma Barranquero <lekktu@gmail.com>
parents:
49281
diff
changeset
|
6330 See function `interrupt-process' for more details on usage. |
95884
d6a4488883dc
Daniel Engeler <engeler at gmail.com>
Glenn Morris <rgm@gnu.org>
parents:
95387
diff
changeset
|
6331 If PROCESS is a network or serial process, inhibit handling of incoming |
d6a4488883dc
Daniel Engeler <engeler at gmail.com>
Glenn Morris <rgm@gnu.org>
parents:
95387
diff
changeset
|
6332 traffic. */) |
40103
6b389fb978bc
Change doc-string comments to `new style' [w/`doc:' keyword].
Pavel Janík <Pavel@Janik.cz>
parents:
39973
diff
changeset
|
6333 (process, current_group) |
578 | 6334 Lisp_Object process, current_group; |
6335 { | |
43968
7ec801358b7e
(Qlocal, QCname, QCbuffer, QChost, QCservice, QCfamily)
Kim F. Storm <storm@cua.dk>
parents:
43642
diff
changeset
|
6336 #ifdef HAVE_SOCKETS |
95884
d6a4488883dc
Daniel Engeler <engeler at gmail.com>
Glenn Morris <rgm@gnu.org>
parents:
95387
diff
changeset
|
6337 if (PROCESSP (process) && (NETCONN_P (process) || SERIALCONN_P (process))) |
43968
7ec801358b7e
(Qlocal, QCname, QCbuffer, QChost, QCservice, QCfamily)
Kim F. Storm <storm@cua.dk>
parents:
43642
diff
changeset
|
6338 { |
7ec801358b7e
(Qlocal, QCname, QCbuffer, QChost, QCservice, QCfamily)
Kim F. Storm <storm@cua.dk>
parents:
43642
diff
changeset
|
6339 struct Lisp_Process *p; |
49600
23a1cea22d13
Trailing whitespace deleted.
Juanma Barranquero <lekktu@gmail.com>
parents:
49281
diff
changeset
|
6340 |
43968
7ec801358b7e
(Qlocal, QCname, QCbuffer, QChost, QCservice, QCfamily)
Kim F. Storm <storm@cua.dk>
parents:
43642
diff
changeset
|
6341 p = XPROCESS (process); |
7ec801358b7e
(Qlocal, QCname, QCbuffer, QChost, QCservice, QCfamily)
Kim F. Storm <storm@cua.dk>
parents:
43642
diff
changeset
|
6342 if (NILP (p->command) |
81826
077a1e6fd3f2
(struct Lisp_Process): Turn slots infd, outfd, kill_without_query, pty_flag,
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
80984
diff
changeset
|
6343 && p->infd >= 0) |
43968
7ec801358b7e
(Qlocal, QCname, QCbuffer, QChost, QCservice, QCfamily)
Kim F. Storm <storm@cua.dk>
parents:
43642
diff
changeset
|
6344 { |
81826
077a1e6fd3f2
(struct Lisp_Process): Turn slots infd, outfd, kill_without_query, pty_flag,
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
80984
diff
changeset
|
6345 FD_CLR (p->infd, &input_wait_mask); |
077a1e6fd3f2
(struct Lisp_Process): Turn slots infd, outfd, kill_without_query, pty_flag,
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
80984
diff
changeset
|
6346 FD_CLR (p->infd, &non_keyboard_wait_mask); |
43968
7ec801358b7e
(Qlocal, QCname, QCbuffer, QChost, QCservice, QCfamily)
Kim F. Storm <storm@cua.dk>
parents:
43642
diff
changeset
|
6347 } |
7ec801358b7e
(Qlocal, QCname, QCbuffer, QChost, QCservice, QCfamily)
Kim F. Storm <storm@cua.dk>
parents:
43642
diff
changeset
|
6348 p->command = Qt; |
7ec801358b7e
(Qlocal, QCname, QCbuffer, QChost, QCservice, QCfamily)
Kim F. Storm <storm@cua.dk>
parents:
43642
diff
changeset
|
6349 return process; |
7ec801358b7e
(Qlocal, QCname, QCbuffer, QChost, QCservice, QCfamily)
Kim F. Storm <storm@cua.dk>
parents:
43642
diff
changeset
|
6350 } |
7ec801358b7e
(Qlocal, QCname, QCbuffer, QChost, QCservice, QCfamily)
Kim F. Storm <storm@cua.dk>
parents:
43642
diff
changeset
|
6351 #endif |
578 | 6352 #ifndef SIGTSTP |
63701
9ef43e35d417
(Fstop_process, Fcontinue_process): Follow error conventions.
Juanma Barranquero <lekktu@gmail.com>
parents:
63615
diff
changeset
|
6353 error ("No SIGTSTP support"); |
578 | 6354 #else |
6355 process_send_signal (process, SIGTSTP, current_group, 0); | |
6356 #endif | |
6357 return process; | |
6358 } | |
6359 | |
6360 DEFUN ("continue-process", Fcontinue_process, Scontinue_process, 0, 2, 0, | |
40103
6b389fb978bc
Change doc-string comments to `new style' [w/`doc:' keyword].
Pavel Janík <Pavel@Janik.cz>
parents:
39973
diff
changeset
|
6361 doc: /* Continue process PROCESS. May be process or name of one. |
49600
23a1cea22d13
Trailing whitespace deleted.
Juanma Barranquero <lekktu@gmail.com>
parents:
49281
diff
changeset
|
6362 See function `interrupt-process' for more details on usage. |
95884
d6a4488883dc
Daniel Engeler <engeler at gmail.com>
Glenn Morris <rgm@gnu.org>
parents:
95387
diff
changeset
|
6363 If PROCESS is a network or serial process, resume handling of incoming |
d6a4488883dc
Daniel Engeler <engeler at gmail.com>
Glenn Morris <rgm@gnu.org>
parents:
95387
diff
changeset
|
6364 traffic. */) |
40103
6b389fb978bc
Change doc-string comments to `new style' [w/`doc:' keyword].
Pavel Janík <Pavel@Janik.cz>
parents:
39973
diff
changeset
|
6365 (process, current_group) |
578 | 6366 Lisp_Object process, current_group; |
6367 { | |
43968
7ec801358b7e
(Qlocal, QCname, QCbuffer, QChost, QCservice, QCfamily)
Kim F. Storm <storm@cua.dk>
parents:
43642
diff
changeset
|
6368 #ifdef HAVE_SOCKETS |
95884
d6a4488883dc
Daniel Engeler <engeler at gmail.com>
Glenn Morris <rgm@gnu.org>
parents:
95387
diff
changeset
|
6369 if (PROCESSP (process) && (NETCONN_P (process) || SERIALCONN_P (process))) |
43968
7ec801358b7e
(Qlocal, QCname, QCbuffer, QChost, QCservice, QCfamily)
Kim F. Storm <storm@cua.dk>
parents:
43642
diff
changeset
|
6370 { |
7ec801358b7e
(Qlocal, QCname, QCbuffer, QChost, QCservice, QCfamily)
Kim F. Storm <storm@cua.dk>
parents:
43642
diff
changeset
|
6371 struct Lisp_Process *p; |
7ec801358b7e
(Qlocal, QCname, QCbuffer, QChost, QCservice, QCfamily)
Kim F. Storm <storm@cua.dk>
parents:
43642
diff
changeset
|
6372 |
7ec801358b7e
(Qlocal, QCname, QCbuffer, QChost, QCservice, QCfamily)
Kim F. Storm <storm@cua.dk>
parents:
43642
diff
changeset
|
6373 p = XPROCESS (process); |
7ec801358b7e
(Qlocal, QCname, QCbuffer, QChost, QCservice, QCfamily)
Kim F. Storm <storm@cua.dk>
parents:
43642
diff
changeset
|
6374 if (EQ (p->command, Qt) |
81826
077a1e6fd3f2
(struct Lisp_Process): Turn slots infd, outfd, kill_without_query, pty_flag,
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
80984
diff
changeset
|
6375 && p->infd >= 0 |
43968
7ec801358b7e
(Qlocal, QCname, QCbuffer, QChost, QCservice, QCfamily)
Kim F. Storm <storm@cua.dk>
parents:
43642
diff
changeset
|
6376 && (!EQ (p->filter, Qt) || EQ (p->status, Qlisten))) |
7ec801358b7e
(Qlocal, QCname, QCbuffer, QChost, QCservice, QCfamily)
Kim F. Storm <storm@cua.dk>
parents:
43642
diff
changeset
|
6377 { |
81826
077a1e6fd3f2
(struct Lisp_Process): Turn slots infd, outfd, kill_without_query, pty_flag,
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
80984
diff
changeset
|
6378 FD_SET (p->infd, &input_wait_mask); |
077a1e6fd3f2
(struct Lisp_Process): Turn slots infd, outfd, kill_without_query, pty_flag,
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
80984
diff
changeset
|
6379 FD_SET (p->infd, &non_keyboard_wait_mask); |
95884
d6a4488883dc
Daniel Engeler <engeler at gmail.com>
Glenn Morris <rgm@gnu.org>
parents:
95387
diff
changeset
|
6380 #ifdef WINDOWSNT |
d6a4488883dc
Daniel Engeler <engeler at gmail.com>
Glenn Morris <rgm@gnu.org>
parents:
95387
diff
changeset
|
6381 if (fd_info[ p->infd ].flags & FILE_SERIAL) |
d6a4488883dc
Daniel Engeler <engeler at gmail.com>
Glenn Morris <rgm@gnu.org>
parents:
95387
diff
changeset
|
6382 PurgeComm (fd_info[ p->infd ].hnd, PURGE_RXABORT | PURGE_RXCLEAR); |
d6a4488883dc
Daniel Engeler <engeler at gmail.com>
Glenn Morris <rgm@gnu.org>
parents:
95387
diff
changeset
|
6383 #endif |
d6a4488883dc
Daniel Engeler <engeler at gmail.com>
Glenn Morris <rgm@gnu.org>
parents:
95387
diff
changeset
|
6384 #ifdef HAVE_TERMIOS |
d6a4488883dc
Daniel Engeler <engeler at gmail.com>
Glenn Morris <rgm@gnu.org>
parents:
95387
diff
changeset
|
6385 tcflush (p->infd, TCIFLUSH); |
d6a4488883dc
Daniel Engeler <engeler at gmail.com>
Glenn Morris <rgm@gnu.org>
parents:
95387
diff
changeset
|
6386 #endif |
43968
7ec801358b7e
(Qlocal, QCname, QCbuffer, QChost, QCservice, QCfamily)
Kim F. Storm <storm@cua.dk>
parents:
43642
diff
changeset
|
6387 } |
7ec801358b7e
(Qlocal, QCname, QCbuffer, QChost, QCservice, QCfamily)
Kim F. Storm <storm@cua.dk>
parents:
43642
diff
changeset
|
6388 p->command = Qnil; |
7ec801358b7e
(Qlocal, QCname, QCbuffer, QChost, QCservice, QCfamily)
Kim F. Storm <storm@cua.dk>
parents:
43642
diff
changeset
|
6389 return process; |
7ec801358b7e
(Qlocal, QCname, QCbuffer, QChost, QCservice, QCfamily)
Kim F. Storm <storm@cua.dk>
parents:
43642
diff
changeset
|
6390 } |
7ec801358b7e
(Qlocal, QCname, QCbuffer, QChost, QCservice, QCfamily)
Kim F. Storm <storm@cua.dk>
parents:
43642
diff
changeset
|
6391 #endif |
578 | 6392 #ifdef SIGCONT |
6393 process_send_signal (process, SIGCONT, current_group, 0); | |
6394 #else | |
63701
9ef43e35d417
(Fstop_process, Fcontinue_process): Follow error conventions.
Juanma Barranquero <lekktu@gmail.com>
parents:
63615
diff
changeset
|
6395 error ("No SIGCONT support"); |
578 | 6396 #endif |
6397 return process; | |
6398 } | |
6399 | |
6400 DEFUN ("signal-process", Fsignal_process, Ssignal_process, | |
48053
f840e449c328
(Fsignal_process): Allow PROCESS to be specified by
Kim F. Storm <storm@cua.dk>
parents:
47987
diff
changeset
|
6401 2, 2, "sProcess (name or number): \nnSignal code: ", |
f840e449c328
(Fsignal_process): Allow PROCESS to be specified by
Kim F. Storm <storm@cua.dk>
parents:
47987
diff
changeset
|
6402 doc: /* Send PROCESS the signal with code SIGCODE. |
74540
b33acab48a40
(Fsignal_process): Doc fix. Use XFLOAT_DATA to extract the process ID from
Eli Zaretskii <eliz@gnu.org>
parents:
74468
diff
changeset
|
6403 PROCESS may also be a number specifying the process id of the |
48053
f840e449c328
(Fsignal_process): Allow PROCESS to be specified by
Kim F. Storm <storm@cua.dk>
parents:
47987
diff
changeset
|
6404 process to signal; in this case, the process need not be a child of |
f840e449c328
(Fsignal_process): Allow PROCESS to be specified by
Kim F. Storm <storm@cua.dk>
parents:
47987
diff
changeset
|
6405 this Emacs. |
40103
6b389fb978bc
Change doc-string comments to `new style' [w/`doc:' keyword].
Pavel Janík <Pavel@Janik.cz>
parents:
39973
diff
changeset
|
6406 SIGCODE may be an integer, or a symbol whose name is a signal name. */) |
48053
f840e449c328
(Fsignal_process): Allow PROCESS to be specified by
Kim F. Storm <storm@cua.dk>
parents:
47987
diff
changeset
|
6407 (process, sigcode) |
f840e449c328
(Fsignal_process): Allow PROCESS to be specified by
Kim F. Storm <storm@cua.dk>
parents:
47987
diff
changeset
|
6408 Lisp_Object process, sigcode; |
578 | 6409 { |
69873
2d844bbbccd4
* process.h (struct Lisp_Process): Replace Lisp_Objects `pid',
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
69634
diff
changeset
|
6410 pid_t pid; |
48053
f840e449c328
(Fsignal_process): Allow PROCESS to be specified by
Kim F. Storm <storm@cua.dk>
parents:
47987
diff
changeset
|
6411 |
f840e449c328
(Fsignal_process): Allow PROCESS to be specified by
Kim F. Storm <storm@cua.dk>
parents:
47987
diff
changeset
|
6412 if (INTEGERP (process)) |
f840e449c328
(Fsignal_process): Allow PROCESS to be specified by
Kim F. Storm <storm@cua.dk>
parents:
47987
diff
changeset
|
6413 { |
69873
2d844bbbccd4
* process.h (struct Lisp_Process): Replace Lisp_Objects `pid',
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
69634
diff
changeset
|
6414 pid = XINT (process); |
2d844bbbccd4
* process.h (struct Lisp_Process): Replace Lisp_Objects `pid',
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
69634
diff
changeset
|
6415 goto got_it; |
2d844bbbccd4
* process.h (struct Lisp_Process): Replace Lisp_Objects `pid',
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
69634
diff
changeset
|
6416 } |
2d844bbbccd4
* process.h (struct Lisp_Process): Replace Lisp_Objects `pid',
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
69634
diff
changeset
|
6417 |
2d844bbbccd4
* process.h (struct Lisp_Process): Replace Lisp_Objects `pid',
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
69634
diff
changeset
|
6418 if (FLOATP (process)) |
2d844bbbccd4
* process.h (struct Lisp_Process): Replace Lisp_Objects `pid',
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
69634
diff
changeset
|
6419 { |
74540
b33acab48a40
(Fsignal_process): Doc fix. Use XFLOAT_DATA to extract the process ID from
Eli Zaretskii <eliz@gnu.org>
parents:
74468
diff
changeset
|
6420 pid = (pid_t) XFLOAT_DATA (process); |
48053
f840e449c328
(Fsignal_process): Allow PROCESS to be specified by
Kim F. Storm <storm@cua.dk>
parents:
47987
diff
changeset
|
6421 goto got_it; |
f840e449c328
(Fsignal_process): Allow PROCESS to be specified by
Kim F. Storm <storm@cua.dk>
parents:
47987
diff
changeset
|
6422 } |
f840e449c328
(Fsignal_process): Allow PROCESS to be specified by
Kim F. Storm <storm@cua.dk>
parents:
47987
diff
changeset
|
6423 |
f840e449c328
(Fsignal_process): Allow PROCESS to be specified by
Kim F. Storm <storm@cua.dk>
parents:
47987
diff
changeset
|
6424 if (STRINGP (process)) |
f840e449c328
(Fsignal_process): Allow PROCESS to be specified by
Kim F. Storm <storm@cua.dk>
parents:
47987
diff
changeset
|
6425 { |
f840e449c328
(Fsignal_process): Allow PROCESS to be specified by
Kim F. Storm <storm@cua.dk>
parents:
47987
diff
changeset
|
6426 Lisp_Object tem; |
f840e449c328
(Fsignal_process): Allow PROCESS to be specified by
Kim F. Storm <storm@cua.dk>
parents:
47987
diff
changeset
|
6427 if (tem = Fget_process (process), NILP (tem)) |
f840e449c328
(Fsignal_process): Allow PROCESS to be specified by
Kim F. Storm <storm@cua.dk>
parents:
47987
diff
changeset
|
6428 { |
69873
2d844bbbccd4
* process.h (struct Lisp_Process): Replace Lisp_Objects `pid',
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
69634
diff
changeset
|
6429 pid = XINT (Fstring_to_number (process, make_number (10))); |
2d844bbbccd4
* process.h (struct Lisp_Process): Replace Lisp_Objects `pid',
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
69634
diff
changeset
|
6430 if (pid > 0) |
48053
f840e449c328
(Fsignal_process): Allow PROCESS to be specified by
Kim F. Storm <storm@cua.dk>
parents:
47987
diff
changeset
|
6431 goto got_it; |
f840e449c328
(Fsignal_process): Allow PROCESS to be specified by
Kim F. Storm <storm@cua.dk>
parents:
47987
diff
changeset
|
6432 } |
f840e449c328
(Fsignal_process): Allow PROCESS to be specified by
Kim F. Storm <storm@cua.dk>
parents:
47987
diff
changeset
|
6433 process = tem; |
f840e449c328
(Fsignal_process): Allow PROCESS to be specified by
Kim F. Storm <storm@cua.dk>
parents:
47987
diff
changeset
|
6434 } |
f840e449c328
(Fsignal_process): Allow PROCESS to be specified by
Kim F. Storm <storm@cua.dk>
parents:
47987
diff
changeset
|
6435 else |
f840e449c328
(Fsignal_process): Allow PROCESS to be specified by
Kim F. Storm <storm@cua.dk>
parents:
47987
diff
changeset
|
6436 process = get_process (process); |
49600
23a1cea22d13
Trailing whitespace deleted.
Juanma Barranquero <lekktu@gmail.com>
parents:
49281
diff
changeset
|
6437 |
48053
f840e449c328
(Fsignal_process): Allow PROCESS to be specified by
Kim F. Storm <storm@cua.dk>
parents:
47987
diff
changeset
|
6438 if (NILP (process)) |
f840e449c328
(Fsignal_process): Allow PROCESS to be specified by
Kim F. Storm <storm@cua.dk>
parents:
47987
diff
changeset
|
6439 return process; |
f840e449c328
(Fsignal_process): Allow PROCESS to be specified by
Kim F. Storm <storm@cua.dk>
parents:
47987
diff
changeset
|
6440 |
f840e449c328
(Fsignal_process): Allow PROCESS to be specified by
Kim F. Storm <storm@cua.dk>
parents:
47987
diff
changeset
|
6441 CHECK_PROCESS (process); |
f840e449c328
(Fsignal_process): Allow PROCESS to be specified by
Kim F. Storm <storm@cua.dk>
parents:
47987
diff
changeset
|
6442 pid = XPROCESS (process)->pid; |
69873
2d844bbbccd4
* process.h (struct Lisp_Process): Replace Lisp_Objects `pid',
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
69634
diff
changeset
|
6443 if (pid <= 0) |
48053
f840e449c328
(Fsignal_process): Allow PROCESS to be specified by
Kim F. Storm <storm@cua.dk>
parents:
47987
diff
changeset
|
6444 error ("Cannot signal process %s", SDATA (XPROCESS (process)->name)); |
f840e449c328
(Fsignal_process): Allow PROCESS to be specified by
Kim F. Storm <storm@cua.dk>
parents:
47987
diff
changeset
|
6445 |
f840e449c328
(Fsignal_process): Allow PROCESS to be specified by
Kim F. Storm <storm@cua.dk>
parents:
47987
diff
changeset
|
6446 got_it: |
11144
c2b689aeb934
(Fsignal_process): Allow signal names as well as numbers.
Richard M. Stallman <rms@gnu.org>
parents:
10914
diff
changeset
|
6447 |
74420
7f2e7cb6b161
(parse_signal): Rename macro from handle_signal.
Kim F. Storm <storm@cua.dk>
parents:
74406
diff
changeset
|
6448 #define parse_signal(NAME, VALUE) \ |
95216
ad146a8ff5dc
* dispextern.h, xfaces.c (xstrcasecmp): Renamed from xstricmp.
Jason Rumney <jasonr@gnu.org>
parents:
95111
diff
changeset
|
6449 else if (!xstrcasecmp (name, NAME)) \ |
11144
c2b689aeb934
(Fsignal_process): Allow signal names as well as numbers.
Richard M. Stallman <rms@gnu.org>
parents:
10914
diff
changeset
|
6450 XSETINT (sigcode, VALUE) |
c2b689aeb934
(Fsignal_process): Allow signal names as well as numbers.
Richard M. Stallman <rms@gnu.org>
parents:
10914
diff
changeset
|
6451 |
c2b689aeb934
(Fsignal_process): Allow signal names as well as numbers.
Richard M. Stallman <rms@gnu.org>
parents:
10914
diff
changeset
|
6452 if (INTEGERP (sigcode)) |
c2b689aeb934
(Fsignal_process): Allow signal names as well as numbers.
Richard M. Stallman <rms@gnu.org>
parents:
10914
diff
changeset
|
6453 ; |
c2b689aeb934
(Fsignal_process): Allow signal names as well as numbers.
Richard M. Stallman <rms@gnu.org>
parents:
10914
diff
changeset
|
6454 else |
c2b689aeb934
(Fsignal_process): Allow signal names as well as numbers.
Richard M. Stallman <rms@gnu.org>
parents:
10914
diff
changeset
|
6455 { |
c2b689aeb934
(Fsignal_process): Allow signal names as well as numbers.
Richard M. Stallman <rms@gnu.org>
parents:
10914
diff
changeset
|
6456 unsigned char *name; |
c2b689aeb934
(Fsignal_process): Allow signal names as well as numbers.
Richard M. Stallman <rms@gnu.org>
parents:
10914
diff
changeset
|
6457 |
40656
cdfd4d09b79a
Update usage of CHECK_ macros (remove unused second argument).
Pavel Janík <Pavel@Janik.cz>
parents:
40641
diff
changeset
|
6458 CHECK_SYMBOL (sigcode); |
46370
40db0673e6f0
Most uses of XSTRING combined with STRING_BYTES or indirection changed to
Ken Raeburn <raeburn@raeburn.org>
parents:
46314
diff
changeset
|
6459 name = SDATA (SYMBOL_NAME (sigcode)); |
11144
c2b689aeb934
(Fsignal_process): Allow signal names as well as numbers.
Richard M. Stallman <rms@gnu.org>
parents:
10914
diff
changeset
|
6460 |
74468
7714fd14ce36
(parse_signal): Use xstricmp instead of strcasecmp.
Kim F. Storm <storm@cua.dk>
parents:
74420
diff
changeset
|
6461 if (!strncmp(name, "SIG", 3) || !strncmp(name, "sig", 3)) |
66752
715b819a0ad8
(Fsignal_process): Recognize signal names with and
Kim F. Storm <storm@cua.dk>
parents:
65764
diff
changeset
|
6462 name += 3; |
715b819a0ad8
(Fsignal_process): Recognize signal names with and
Kim F. Storm <storm@cua.dk>
parents:
65764
diff
changeset
|
6463 |
11144
c2b689aeb934
(Fsignal_process): Allow signal names as well as numbers.
Richard M. Stallman <rms@gnu.org>
parents:
10914
diff
changeset
|
6464 if (0) |
c2b689aeb934
(Fsignal_process): Allow signal names as well as numbers.
Richard M. Stallman <rms@gnu.org>
parents:
10914
diff
changeset
|
6465 ; |
74420
7f2e7cb6b161
(parse_signal): Rename macro from handle_signal.
Kim F. Storm <storm@cua.dk>
parents:
74406
diff
changeset
|
6466 #ifdef SIGUSR1 |
7f2e7cb6b161
(parse_signal): Rename macro from handle_signal.
Kim F. Storm <storm@cua.dk>
parents:
74406
diff
changeset
|
6467 parse_signal ("usr1", SIGUSR1); |
7f2e7cb6b161
(parse_signal): Rename macro from handle_signal.
Kim F. Storm <storm@cua.dk>
parents:
74406
diff
changeset
|
6468 #endif |
7f2e7cb6b161
(parse_signal): Rename macro from handle_signal.
Kim F. Storm <storm@cua.dk>
parents:
74406
diff
changeset
|
6469 #ifdef SIGUSR2 |
7f2e7cb6b161
(parse_signal): Rename macro from handle_signal.
Kim F. Storm <storm@cua.dk>
parents:
74406
diff
changeset
|
6470 parse_signal ("usr2", SIGUSR2); |
7f2e7cb6b161
(parse_signal): Rename macro from handle_signal.
Kim F. Storm <storm@cua.dk>
parents:
74406
diff
changeset
|
6471 #endif |
7f2e7cb6b161
(parse_signal): Rename macro from handle_signal.
Kim F. Storm <storm@cua.dk>
parents:
74406
diff
changeset
|
6472 #ifdef SIGTERM |
7f2e7cb6b161
(parse_signal): Rename macro from handle_signal.
Kim F. Storm <storm@cua.dk>
parents:
74406
diff
changeset
|
6473 parse_signal ("term", SIGTERM); |
7f2e7cb6b161
(parse_signal): Rename macro from handle_signal.
Kim F. Storm <storm@cua.dk>
parents:
74406
diff
changeset
|
6474 #endif |
11144
c2b689aeb934
(Fsignal_process): Allow signal names as well as numbers.
Richard M. Stallman <rms@gnu.org>
parents:
10914
diff
changeset
|
6475 #ifdef SIGHUP |
74420
7f2e7cb6b161
(parse_signal): Rename macro from handle_signal.
Kim F. Storm <storm@cua.dk>
parents:
74406
diff
changeset
|
6476 parse_signal ("hup", SIGHUP); |
11144
c2b689aeb934
(Fsignal_process): Allow signal names as well as numbers.
Richard M. Stallman <rms@gnu.org>
parents:
10914
diff
changeset
|
6477 #endif |
c2b689aeb934
(Fsignal_process): Allow signal names as well as numbers.
Richard M. Stallman <rms@gnu.org>
parents:
10914
diff
changeset
|
6478 #ifdef SIGINT |
74420
7f2e7cb6b161
(parse_signal): Rename macro from handle_signal.
Kim F. Storm <storm@cua.dk>
parents:
74406
diff
changeset
|
6479 parse_signal ("int", SIGINT); |
11144
c2b689aeb934
(Fsignal_process): Allow signal names as well as numbers.
Richard M. Stallman <rms@gnu.org>
parents:
10914
diff
changeset
|
6480 #endif |
c2b689aeb934
(Fsignal_process): Allow signal names as well as numbers.
Richard M. Stallman <rms@gnu.org>
parents:
10914
diff
changeset
|
6481 #ifdef SIGQUIT |
74420
7f2e7cb6b161
(parse_signal): Rename macro from handle_signal.
Kim F. Storm <storm@cua.dk>
parents:
74406
diff
changeset
|
6482 parse_signal ("quit", SIGQUIT); |
11144
c2b689aeb934
(Fsignal_process): Allow signal names as well as numbers.
Richard M. Stallman <rms@gnu.org>
parents:
10914
diff
changeset
|
6483 #endif |
c2b689aeb934
(Fsignal_process): Allow signal names as well as numbers.
Richard M. Stallman <rms@gnu.org>
parents:
10914
diff
changeset
|
6484 #ifdef SIGILL |
74420
7f2e7cb6b161
(parse_signal): Rename macro from handle_signal.
Kim F. Storm <storm@cua.dk>
parents:
74406
diff
changeset
|
6485 parse_signal ("ill", SIGILL); |
11144
c2b689aeb934
(Fsignal_process): Allow signal names as well as numbers.
Richard M. Stallman <rms@gnu.org>
parents:
10914
diff
changeset
|
6486 #endif |
c2b689aeb934
(Fsignal_process): Allow signal names as well as numbers.
Richard M. Stallman <rms@gnu.org>
parents:
10914
diff
changeset
|
6487 #ifdef SIGABRT |
74420
7f2e7cb6b161
(parse_signal): Rename macro from handle_signal.
Kim F. Storm <storm@cua.dk>
parents:
74406
diff
changeset
|
6488 parse_signal ("abrt", SIGABRT); |
11144
c2b689aeb934
(Fsignal_process): Allow signal names as well as numbers.
Richard M. Stallman <rms@gnu.org>
parents:
10914
diff
changeset
|
6489 #endif |
c2b689aeb934
(Fsignal_process): Allow signal names as well as numbers.
Richard M. Stallman <rms@gnu.org>
parents:
10914
diff
changeset
|
6490 #ifdef SIGEMT |
74420
7f2e7cb6b161
(parse_signal): Rename macro from handle_signal.
Kim F. Storm <storm@cua.dk>
parents:
74406
diff
changeset
|
6491 parse_signal ("emt", SIGEMT); |
11144
c2b689aeb934
(Fsignal_process): Allow signal names as well as numbers.
Richard M. Stallman <rms@gnu.org>
parents:
10914
diff
changeset
|
6492 #endif |
c2b689aeb934
(Fsignal_process): Allow signal names as well as numbers.
Richard M. Stallman <rms@gnu.org>
parents:
10914
diff
changeset
|
6493 #ifdef SIGKILL |
74420
7f2e7cb6b161
(parse_signal): Rename macro from handle_signal.
Kim F. Storm <storm@cua.dk>
parents:
74406
diff
changeset
|
6494 parse_signal ("kill", SIGKILL); |
11144
c2b689aeb934
(Fsignal_process): Allow signal names as well as numbers.
Richard M. Stallman <rms@gnu.org>
parents:
10914
diff
changeset
|
6495 #endif |
c2b689aeb934
(Fsignal_process): Allow signal names as well as numbers.
Richard M. Stallman <rms@gnu.org>
parents:
10914
diff
changeset
|
6496 #ifdef SIGFPE |
74420
7f2e7cb6b161
(parse_signal): Rename macro from handle_signal.
Kim F. Storm <storm@cua.dk>
parents:
74406
diff
changeset
|
6497 parse_signal ("fpe", SIGFPE); |
11144
c2b689aeb934
(Fsignal_process): Allow signal names as well as numbers.
Richard M. Stallman <rms@gnu.org>
parents:
10914
diff
changeset
|
6498 #endif |
c2b689aeb934
(Fsignal_process): Allow signal names as well as numbers.
Richard M. Stallman <rms@gnu.org>
parents:
10914
diff
changeset
|
6499 #ifdef SIGBUS |
74420
7f2e7cb6b161
(parse_signal): Rename macro from handle_signal.
Kim F. Storm <storm@cua.dk>
parents:
74406
diff
changeset
|
6500 parse_signal ("bus", SIGBUS); |
11144
c2b689aeb934
(Fsignal_process): Allow signal names as well as numbers.
Richard M. Stallman <rms@gnu.org>
parents:
10914
diff
changeset
|
6501 #endif |
c2b689aeb934
(Fsignal_process): Allow signal names as well as numbers.
Richard M. Stallman <rms@gnu.org>
parents:
10914
diff
changeset
|
6502 #ifdef SIGSEGV |
74420
7f2e7cb6b161
(parse_signal): Rename macro from handle_signal.
Kim F. Storm <storm@cua.dk>
parents:
74406
diff
changeset
|
6503 parse_signal ("segv", SIGSEGV); |
11144
c2b689aeb934
(Fsignal_process): Allow signal names as well as numbers.
Richard M. Stallman <rms@gnu.org>
parents:
10914
diff
changeset
|
6504 #endif |
c2b689aeb934
(Fsignal_process): Allow signal names as well as numbers.
Richard M. Stallman <rms@gnu.org>
parents:
10914
diff
changeset
|
6505 #ifdef SIGSYS |
74420
7f2e7cb6b161
(parse_signal): Rename macro from handle_signal.
Kim F. Storm <storm@cua.dk>
parents:
74406
diff
changeset
|
6506 parse_signal ("sys", SIGSYS); |
11144
c2b689aeb934
(Fsignal_process): Allow signal names as well as numbers.
Richard M. Stallman <rms@gnu.org>
parents:
10914
diff
changeset
|
6507 #endif |
c2b689aeb934
(Fsignal_process): Allow signal names as well as numbers.
Richard M. Stallman <rms@gnu.org>
parents:
10914
diff
changeset
|
6508 #ifdef SIGPIPE |
74420
7f2e7cb6b161
(parse_signal): Rename macro from handle_signal.
Kim F. Storm <storm@cua.dk>
parents:
74406
diff
changeset
|
6509 parse_signal ("pipe", SIGPIPE); |
11144
c2b689aeb934
(Fsignal_process): Allow signal names as well as numbers.
Richard M. Stallman <rms@gnu.org>
parents:
10914
diff
changeset
|
6510 #endif |
c2b689aeb934
(Fsignal_process): Allow signal names as well as numbers.
Richard M. Stallman <rms@gnu.org>
parents:
10914
diff
changeset
|
6511 #ifdef SIGALRM |
74420
7f2e7cb6b161
(parse_signal): Rename macro from handle_signal.
Kim F. Storm <storm@cua.dk>
parents:
74406
diff
changeset
|
6512 parse_signal ("alrm", SIGALRM); |
11144
c2b689aeb934
(Fsignal_process): Allow signal names as well as numbers.
Richard M. Stallman <rms@gnu.org>
parents:
10914
diff
changeset
|
6513 #endif |
c2b689aeb934
(Fsignal_process): Allow signal names as well as numbers.
Richard M. Stallman <rms@gnu.org>
parents:
10914
diff
changeset
|
6514 #ifdef SIGURG |
74420
7f2e7cb6b161
(parse_signal): Rename macro from handle_signal.
Kim F. Storm <storm@cua.dk>
parents:
74406
diff
changeset
|
6515 parse_signal ("urg", SIGURG); |
11144
c2b689aeb934
(Fsignal_process): Allow signal names as well as numbers.
Richard M. Stallman <rms@gnu.org>
parents:
10914
diff
changeset
|
6516 #endif |
c2b689aeb934
(Fsignal_process): Allow signal names as well as numbers.
Richard M. Stallman <rms@gnu.org>
parents:
10914
diff
changeset
|
6517 #ifdef SIGSTOP |
74420
7f2e7cb6b161
(parse_signal): Rename macro from handle_signal.
Kim F. Storm <storm@cua.dk>
parents:
74406
diff
changeset
|
6518 parse_signal ("stop", SIGSTOP); |
11144
c2b689aeb934
(Fsignal_process): Allow signal names as well as numbers.
Richard M. Stallman <rms@gnu.org>
parents:
10914
diff
changeset
|
6519 #endif |
c2b689aeb934
(Fsignal_process): Allow signal names as well as numbers.
Richard M. Stallman <rms@gnu.org>
parents:
10914
diff
changeset
|
6520 #ifdef SIGTSTP |
74420
7f2e7cb6b161
(parse_signal): Rename macro from handle_signal.
Kim F. Storm <storm@cua.dk>
parents:
74406
diff
changeset
|
6521 parse_signal ("tstp", SIGTSTP); |
11144
c2b689aeb934
(Fsignal_process): Allow signal names as well as numbers.
Richard M. Stallman <rms@gnu.org>
parents:
10914
diff
changeset
|
6522 #endif |
c2b689aeb934
(Fsignal_process): Allow signal names as well as numbers.
Richard M. Stallman <rms@gnu.org>
parents:
10914
diff
changeset
|
6523 #ifdef SIGCONT |
74420
7f2e7cb6b161
(parse_signal): Rename macro from handle_signal.
Kim F. Storm <storm@cua.dk>
parents:
74406
diff
changeset
|
6524 parse_signal ("cont", SIGCONT); |
11144
c2b689aeb934
(Fsignal_process): Allow signal names as well as numbers.
Richard M. Stallman <rms@gnu.org>
parents:
10914
diff
changeset
|
6525 #endif |
c2b689aeb934
(Fsignal_process): Allow signal names as well as numbers.
Richard M. Stallman <rms@gnu.org>
parents:
10914
diff
changeset
|
6526 #ifdef SIGCHLD |
74420
7f2e7cb6b161
(parse_signal): Rename macro from handle_signal.
Kim F. Storm <storm@cua.dk>
parents:
74406
diff
changeset
|
6527 parse_signal ("chld", SIGCHLD); |
11144
c2b689aeb934
(Fsignal_process): Allow signal names as well as numbers.
Richard M. Stallman <rms@gnu.org>
parents:
10914
diff
changeset
|
6528 #endif |
c2b689aeb934
(Fsignal_process): Allow signal names as well as numbers.
Richard M. Stallman <rms@gnu.org>
parents:
10914
diff
changeset
|
6529 #ifdef SIGTTIN |
74420
7f2e7cb6b161
(parse_signal): Rename macro from handle_signal.
Kim F. Storm <storm@cua.dk>
parents:
74406
diff
changeset
|
6530 parse_signal ("ttin", SIGTTIN); |
11144
c2b689aeb934
(Fsignal_process): Allow signal names as well as numbers.
Richard M. Stallman <rms@gnu.org>
parents:
10914
diff
changeset
|
6531 #endif |
c2b689aeb934
(Fsignal_process): Allow signal names as well as numbers.
Richard M. Stallman <rms@gnu.org>
parents:
10914
diff
changeset
|
6532 #ifdef SIGTTOU |
74420
7f2e7cb6b161
(parse_signal): Rename macro from handle_signal.
Kim F. Storm <storm@cua.dk>
parents:
74406
diff
changeset
|
6533 parse_signal ("ttou", SIGTTOU); |
11144
c2b689aeb934
(Fsignal_process): Allow signal names as well as numbers.
Richard M. Stallman <rms@gnu.org>
parents:
10914
diff
changeset
|
6534 #endif |
c2b689aeb934
(Fsignal_process): Allow signal names as well as numbers.
Richard M. Stallman <rms@gnu.org>
parents:
10914
diff
changeset
|
6535 #ifdef SIGIO |
74420
7f2e7cb6b161
(parse_signal): Rename macro from handle_signal.
Kim F. Storm <storm@cua.dk>
parents:
74406
diff
changeset
|
6536 parse_signal ("io", SIGIO); |
11144
c2b689aeb934
(Fsignal_process): Allow signal names as well as numbers.
Richard M. Stallman <rms@gnu.org>
parents:
10914
diff
changeset
|
6537 #endif |
c2b689aeb934
(Fsignal_process): Allow signal names as well as numbers.
Richard M. Stallman <rms@gnu.org>
parents:
10914
diff
changeset
|
6538 #ifdef SIGXCPU |
74420
7f2e7cb6b161
(parse_signal): Rename macro from handle_signal.
Kim F. Storm <storm@cua.dk>
parents:
74406
diff
changeset
|
6539 parse_signal ("xcpu", SIGXCPU); |
11144
c2b689aeb934
(Fsignal_process): Allow signal names as well as numbers.
Richard M. Stallman <rms@gnu.org>
parents:
10914
diff
changeset
|
6540 #endif |
c2b689aeb934
(Fsignal_process): Allow signal names as well as numbers.
Richard M. Stallman <rms@gnu.org>
parents:
10914
diff
changeset
|
6541 #ifdef SIGXFSZ |
74420
7f2e7cb6b161
(parse_signal): Rename macro from handle_signal.
Kim F. Storm <storm@cua.dk>
parents:
74406
diff
changeset
|
6542 parse_signal ("xfsz", SIGXFSZ); |
11144
c2b689aeb934
(Fsignal_process): Allow signal names as well as numbers.
Richard M. Stallman <rms@gnu.org>
parents:
10914
diff
changeset
|
6543 #endif |
c2b689aeb934
(Fsignal_process): Allow signal names as well as numbers.
Richard M. Stallman <rms@gnu.org>
parents:
10914
diff
changeset
|
6544 #ifdef SIGVTALRM |
74420
7f2e7cb6b161
(parse_signal): Rename macro from handle_signal.
Kim F. Storm <storm@cua.dk>
parents:
74406
diff
changeset
|
6545 parse_signal ("vtalrm", SIGVTALRM); |
11144
c2b689aeb934
(Fsignal_process): Allow signal names as well as numbers.
Richard M. Stallman <rms@gnu.org>
parents:
10914
diff
changeset
|
6546 #endif |
c2b689aeb934
(Fsignal_process): Allow signal names as well as numbers.
Richard M. Stallman <rms@gnu.org>
parents:
10914
diff
changeset
|
6547 #ifdef SIGPROF |
74420
7f2e7cb6b161
(parse_signal): Rename macro from handle_signal.
Kim F. Storm <storm@cua.dk>
parents:
74406
diff
changeset
|
6548 parse_signal ("prof", SIGPROF); |
11144
c2b689aeb934
(Fsignal_process): Allow signal names as well as numbers.
Richard M. Stallman <rms@gnu.org>
parents:
10914
diff
changeset
|
6549 #endif |
c2b689aeb934
(Fsignal_process): Allow signal names as well as numbers.
Richard M. Stallman <rms@gnu.org>
parents:
10914
diff
changeset
|
6550 #ifdef SIGWINCH |
74420
7f2e7cb6b161
(parse_signal): Rename macro from handle_signal.
Kim F. Storm <storm@cua.dk>
parents:
74406
diff
changeset
|
6551 parse_signal ("winch", SIGWINCH); |
11144
c2b689aeb934
(Fsignal_process): Allow signal names as well as numbers.
Richard M. Stallman <rms@gnu.org>
parents:
10914
diff
changeset
|
6552 #endif |
c2b689aeb934
(Fsignal_process): Allow signal names as well as numbers.
Richard M. Stallman <rms@gnu.org>
parents:
10914
diff
changeset
|
6553 #ifdef SIGINFO |
74420
7f2e7cb6b161
(parse_signal): Rename macro from handle_signal.
Kim F. Storm <storm@cua.dk>
parents:
74406
diff
changeset
|
6554 parse_signal ("info", SIGINFO); |
11144
c2b689aeb934
(Fsignal_process): Allow signal names as well as numbers.
Richard M. Stallman <rms@gnu.org>
parents:
10914
diff
changeset
|
6555 #endif |
c2b689aeb934
(Fsignal_process): Allow signal names as well as numbers.
Richard M. Stallman <rms@gnu.org>
parents:
10914
diff
changeset
|
6556 else |
11148
117b32676686
(Fsignal_process): SIGCODE is a symbol, not a string.
Karl Heuer <kwzh@gnu.org>
parents:
11144
diff
changeset
|
6557 error ("Undefined signal name %s", name); |
11144
c2b689aeb934
(Fsignal_process): Allow signal names as well as numbers.
Richard M. Stallman <rms@gnu.org>
parents:
10914
diff
changeset
|
6558 } |
c2b689aeb934
(Fsignal_process): Allow signal names as well as numbers.
Richard M. Stallman <rms@gnu.org>
parents:
10914
diff
changeset
|
6559 |
74420
7f2e7cb6b161
(parse_signal): Rename macro from handle_signal.
Kim F. Storm <storm@cua.dk>
parents:
74406
diff
changeset
|
6560 #undef parse_signal |
11144
c2b689aeb934
(Fsignal_process): Allow signal names as well as numbers.
Richard M. Stallman <rms@gnu.org>
parents:
10914
diff
changeset
|
6561 |
69873
2d844bbbccd4
* process.h (struct Lisp_Process): Replace Lisp_Objects `pid',
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
69634
diff
changeset
|
6562 return make_number (kill (pid, XINT (sigcode))); |
578 | 6563 } |
6564 | |
6565 DEFUN ("process-send-eof", Fprocess_send_eof, Sprocess_send_eof, 0, 1, 0, | |
40103
6b389fb978bc
Change doc-string comments to `new style' [w/`doc:' keyword].
Pavel Janík <Pavel@Janik.cz>
parents:
39973
diff
changeset
|
6566 doc: /* Make PROCESS see end-of-file in its input. |
6b389fb978bc
Change doc-string comments to `new style' [w/`doc:' keyword].
Pavel Janík <Pavel@Janik.cz>
parents:
39973
diff
changeset
|
6567 EOF comes after any text already sent to it. |
6b389fb978bc
Change doc-string comments to `new style' [w/`doc:' keyword].
Pavel Janík <Pavel@Janik.cz>
parents:
39973
diff
changeset
|
6568 PROCESS may be a process, a buffer, the name of a process or buffer, or |
6b389fb978bc
Change doc-string comments to `new style' [w/`doc:' keyword].
Pavel Janík <Pavel@Janik.cz>
parents:
39973
diff
changeset
|
6569 nil, indicating the current buffer's process. |
6b389fb978bc
Change doc-string comments to `new style' [w/`doc:' keyword].
Pavel Janík <Pavel@Janik.cz>
parents:
39973
diff
changeset
|
6570 If PROCESS is a network connection, or is a process communicating |
6b389fb978bc
Change doc-string comments to `new style' [w/`doc:' keyword].
Pavel Janík <Pavel@Janik.cz>
parents:
39973
diff
changeset
|
6571 through a pipe (as opposed to a pty), then you cannot send any more |
95884
d6a4488883dc
Daniel Engeler <engeler at gmail.com>
Glenn Morris <rgm@gnu.org>
parents:
95387
diff
changeset
|
6572 text to PROCESS after you call this function. |
d6a4488883dc
Daniel Engeler <engeler at gmail.com>
Glenn Morris <rgm@gnu.org>
parents:
95387
diff
changeset
|
6573 If PROCESS is a serial process, wait until all output written to the |
d6a4488883dc
Daniel Engeler <engeler at gmail.com>
Glenn Morris <rgm@gnu.org>
parents:
95387
diff
changeset
|
6574 process has been transmitted to the serial port. */) |
40103
6b389fb978bc
Change doc-string comments to `new style' [w/`doc:' keyword].
Pavel Janík <Pavel@Janik.cz>
parents:
39973
diff
changeset
|
6575 (process) |
578 | 6576 Lisp_Object process; |
6577 { | |
6578 Lisp_Object proc; | |
23879
18e5d1cfa74b
(read_process_output): If NBYTES is zero and
Kenichi Handa <handa@m17n.org>
parents:
23762
diff
changeset
|
6579 struct coding_system *coding; |
578 | 6580 |
43968
7ec801358b7e
(Qlocal, QCname, QCbuffer, QChost, QCservice, QCfamily)
Kim F. Storm <storm@cua.dk>
parents:
43642
diff
changeset
|
6581 if (DATAGRAM_CONN_P (process)) |
7ec801358b7e
(Qlocal, QCname, QCbuffer, QChost, QCservice, QCfamily)
Kim F. Storm <storm@cua.dk>
parents:
43642
diff
changeset
|
6582 return process; |
7ec801358b7e
(Qlocal, QCname, QCbuffer, QChost, QCservice, QCfamily)
Kim F. Storm <storm@cua.dk>
parents:
43642
diff
changeset
|
6583 |
578 | 6584 proc = get_process (process); |
81826
077a1e6fd3f2
(struct Lisp_Process): Turn slots infd, outfd, kill_without_query, pty_flag,
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
80984
diff
changeset
|
6585 coding = proc_encode_coding_system[XPROCESS (proc)->outfd]; |
2221
7edc78402205
(Fprocess_send_eof): Make sure proc is running.
Richard M. Stallman <rms@gnu.org>
parents:
2200
diff
changeset
|
6586 |
7edc78402205
(Fprocess_send_eof): Make sure proc is running.
Richard M. Stallman <rms@gnu.org>
parents:
2200
diff
changeset
|
6587 /* Make sure the process is really alive. */ |
69873
2d844bbbccd4
* process.h (struct Lisp_Process): Replace Lisp_Objects `pid',
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
69634
diff
changeset
|
6588 if (XPROCESS (proc)->raw_status_new) |
2221
7edc78402205
(Fprocess_send_eof): Make sure proc is running.
Richard M. Stallman <rms@gnu.org>
parents:
2200
diff
changeset
|
6589 update_status (XPROCESS (proc)); |
7edc78402205
(Fprocess_send_eof): Make sure proc is running.
Richard M. Stallman <rms@gnu.org>
parents:
2200
diff
changeset
|
6590 if (! EQ (XPROCESS (proc)->status, Qrun)) |
46370
40db0673e6f0
Most uses of XSTRING combined with STRING_BYTES or indirection changed to
Ken Raeburn <raeburn@raeburn.org>
parents:
46314
diff
changeset
|
6591 error ("Process %s not running", SDATA (XPROCESS (proc)->name)); |
2221
7edc78402205
(Fprocess_send_eof): Make sure proc is running.
Richard M. Stallman <rms@gnu.org>
parents:
2200
diff
changeset
|
6592 |
23879
18e5d1cfa74b
(read_process_output): If NBYTES is zero and
Kenichi Handa <handa@m17n.org>
parents:
23762
diff
changeset
|
6593 if (CODING_REQUIRE_FLUSHING (coding)) |
18e5d1cfa74b
(read_process_output): If NBYTES is zero and
Kenichi Handa <handa@m17n.org>
parents:
23762
diff
changeset
|
6594 { |
18e5d1cfa74b
(read_process_output): If NBYTES is zero and
Kenichi Handa <handa@m17n.org>
parents:
23762
diff
changeset
|
6595 coding->mode |= CODING_MODE_LAST_BLOCK; |
18e5d1cfa74b
(read_process_output): If NBYTES is zero and
Kenichi Handa <handa@m17n.org>
parents:
23762
diff
changeset
|
6596 send_process (proc, "", 0, Qnil); |
18e5d1cfa74b
(read_process_output): If NBYTES is zero and
Kenichi Handa <handa@m17n.org>
parents:
23762
diff
changeset
|
6597 } |
18e5d1cfa74b
(read_process_output): If NBYTES is zero and
Kenichi Handa <handa@m17n.org>
parents:
23762
diff
changeset
|
6598 |
81826
077a1e6fd3f2
(struct Lisp_Process): Turn slots infd, outfd, kill_without_query, pty_flag,
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
80984
diff
changeset
|
6599 if (XPROCESS (proc)->pty_flag) |
8063
30861f2f4f84
(send_process): Major rewrite.
Richard M. Stallman <rms@gnu.org>
parents:
7937
diff
changeset
|
6600 send_process (proc, "\004", 1, Qnil); |
95900
99342636fa96
(Fserial_process_configure, Fprocess_send_eof):
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
95884
diff
changeset
|
6601 else if (EQ (XPROCESS (proc)->type, Qserial)) |
95884
d6a4488883dc
Daniel Engeler <engeler at gmail.com>
Glenn Morris <rgm@gnu.org>
parents:
95387
diff
changeset
|
6602 { |
d6a4488883dc
Daniel Engeler <engeler at gmail.com>
Glenn Morris <rgm@gnu.org>
parents:
95387
diff
changeset
|
6603 #ifdef HAVE_TERMIOS |
d6a4488883dc
Daniel Engeler <engeler at gmail.com>
Glenn Morris <rgm@gnu.org>
parents:
95387
diff
changeset
|
6604 if (tcdrain (XPROCESS (proc)->outfd) != 0) |
d6a4488883dc
Daniel Engeler <engeler at gmail.com>
Glenn Morris <rgm@gnu.org>
parents:
95387
diff
changeset
|
6605 error ("tcdrain() failed: %s", emacs_strerror (errno)); |
d6a4488883dc
Daniel Engeler <engeler at gmail.com>
Glenn Morris <rgm@gnu.org>
parents:
95387
diff
changeset
|
6606 #endif |
d6a4488883dc
Daniel Engeler <engeler at gmail.com>
Glenn Morris <rgm@gnu.org>
parents:
95387
diff
changeset
|
6607 /* Do nothing on Windows because writes are blocking. */ |
d6a4488883dc
Daniel Engeler <engeler at gmail.com>
Glenn Morris <rgm@gnu.org>
parents:
95387
diff
changeset
|
6608 } |
578 | 6609 else |
6610 { | |
22939
572895549f80
(Fprocess_send_eof): Transfer proc_encode_coding_system
Richard M. Stallman <rms@gnu.org>
parents:
22864
diff
changeset
|
6611 int old_outfd, new_outfd; |
572895549f80
(Fprocess_send_eof): Transfer proc_encode_coding_system
Richard M. Stallman <rms@gnu.org>
parents:
22864
diff
changeset
|
6612 |
18329
ddaafa596bf5
(Fprocess_send_eof): Prooperly conditionalize prev. change.
Richard M. Stallman <rms@gnu.org>
parents:
18328
diff
changeset
|
6613 #ifdef HAVE_SHUTDOWN |
18328
0295bbed3c39
(Fprocess_send_eof): Use shutdown, if it's a socket.
Richard M. Stallman <rms@gnu.org>
parents:
18292
diff
changeset
|
6614 /* If this is a network connection, or socketpair is used |
0295bbed3c39
(Fprocess_send_eof): Use shutdown, if it's a socket.
Richard M. Stallman <rms@gnu.org>
parents:
18292
diff
changeset
|
6615 for communication with the subprocess, call shutdown to cause EOF. |
0295bbed3c39
(Fprocess_send_eof): Use shutdown, if it's a socket.
Richard M. Stallman <rms@gnu.org>
parents:
18292
diff
changeset
|
6616 (In some old system, shutdown to socketpair doesn't work. |
0295bbed3c39
(Fprocess_send_eof): Use shutdown, if it's a socket.
Richard M. Stallman <rms@gnu.org>
parents:
18292
diff
changeset
|
6617 Then we just can't win.) */ |
95900
99342636fa96
(Fserial_process_configure, Fprocess_send_eof):
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
95884
diff
changeset
|
6618 if (EQ (XPROCESS (proc)->type, Qnetwork) |
81826
077a1e6fd3f2
(struct Lisp_Process): Turn slots infd, outfd, kill_without_query, pty_flag,
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
80984
diff
changeset
|
6619 || XPROCESS (proc)->outfd == XPROCESS (proc)->infd) |
077a1e6fd3f2
(struct Lisp_Process): Turn slots infd, outfd, kill_without_query, pty_flag,
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
80984
diff
changeset
|
6620 shutdown (XPROCESS (proc)->outfd, 1); |
18328
0295bbed3c39
(Fprocess_send_eof): Use shutdown, if it's a socket.
Richard M. Stallman <rms@gnu.org>
parents:
18292
diff
changeset
|
6621 /* In case of socketpair, outfd == infd, so don't close it. */ |
81826
077a1e6fd3f2
(struct Lisp_Process): Turn slots infd, outfd, kill_without_query, pty_flag,
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
80984
diff
changeset
|
6622 if (XPROCESS (proc)->outfd != XPROCESS (proc)->infd) |
077a1e6fd3f2
(struct Lisp_Process): Turn slots infd, outfd, kill_without_query, pty_flag,
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
80984
diff
changeset
|
6623 emacs_close (XPROCESS (proc)->outfd); |
18329
ddaafa596bf5
(Fprocess_send_eof): Prooperly conditionalize prev. change.
Richard M. Stallman <rms@gnu.org>
parents:
18328
diff
changeset
|
6624 #else /* not HAVE_SHUTDOWN */ |
81826
077a1e6fd3f2
(struct Lisp_Process): Turn slots infd, outfd, kill_without_query, pty_flag,
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
80984
diff
changeset
|
6625 emacs_close (XPROCESS (proc)->outfd); |
18329
ddaafa596bf5
(Fprocess_send_eof): Prooperly conditionalize prev. change.
Richard M. Stallman <rms@gnu.org>
parents:
18328
diff
changeset
|
6626 #endif /* not HAVE_SHUTDOWN */ |
26088
b7aa6ac26872
Add support for large files, 64-bit Solaris, system locale codings.
Paul Eggert <eggert@twinsun.com>
parents:
26019
diff
changeset
|
6627 new_outfd = emacs_open (NULL_DEVICE, O_WRONLY, 0); |
69974
2ecef706d823
(Fprocess_send_eof): Abort if fail to open null device.
Richard M. Stallman <rms@gnu.org>
parents:
69973
diff
changeset
|
6628 if (new_outfd < 0) |
2ecef706d823
(Fprocess_send_eof): Abort if fail to open null device.
Richard M. Stallman <rms@gnu.org>
parents:
69973
diff
changeset
|
6629 abort (); |
81826
077a1e6fd3f2
(struct Lisp_Process): Turn slots infd, outfd, kill_without_query, pty_flag,
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
80984
diff
changeset
|
6630 old_outfd = XPROCESS (proc)->outfd; |
22939
572895549f80
(Fprocess_send_eof): Transfer proc_encode_coding_system
Richard M. Stallman <rms@gnu.org>
parents:
22864
diff
changeset
|
6631 |
572895549f80
(Fprocess_send_eof): Transfer proc_encode_coding_system
Richard M. Stallman <rms@gnu.org>
parents:
22864
diff
changeset
|
6632 if (!proc_encode_coding_system[new_outfd]) |
572895549f80
(Fprocess_send_eof): Transfer proc_encode_coding_system
Richard M. Stallman <rms@gnu.org>
parents:
22864
diff
changeset
|
6633 proc_encode_coding_system[new_outfd] |
572895549f80
(Fprocess_send_eof): Transfer proc_encode_coding_system
Richard M. Stallman <rms@gnu.org>
parents:
22864
diff
changeset
|
6634 = (struct coding_system *) xmalloc (sizeof (struct coding_system)); |
572895549f80
(Fprocess_send_eof): Transfer proc_encode_coding_system
Richard M. Stallman <rms@gnu.org>
parents:
22864
diff
changeset
|
6635 bcopy (proc_encode_coding_system[old_outfd], |
572895549f80
(Fprocess_send_eof): Transfer proc_encode_coding_system
Richard M. Stallman <rms@gnu.org>
parents:
22864
diff
changeset
|
6636 proc_encode_coding_system[new_outfd], |
572895549f80
(Fprocess_send_eof): Transfer proc_encode_coding_system
Richard M. Stallman <rms@gnu.org>
parents:
22864
diff
changeset
|
6637 sizeof (struct coding_system)); |
572895549f80
(Fprocess_send_eof): Transfer proc_encode_coding_system
Richard M. Stallman <rms@gnu.org>
parents:
22864
diff
changeset
|
6638 bzero (proc_encode_coding_system[old_outfd], |
572895549f80
(Fprocess_send_eof): Transfer proc_encode_coding_system
Richard M. Stallman <rms@gnu.org>
parents:
22864
diff
changeset
|
6639 sizeof (struct coding_system)); |
572895549f80
(Fprocess_send_eof): Transfer proc_encode_coding_system
Richard M. Stallman <rms@gnu.org>
parents:
22864
diff
changeset
|
6640 |
81826
077a1e6fd3f2
(struct Lisp_Process): Turn slots infd, outfd, kill_without_query, pty_flag,
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
80984
diff
changeset
|
6641 XPROCESS (proc)->outfd = new_outfd; |
578 | 6642 } |
6643 return process; | |
6644 } | |
6645 | |
6646 /* Kill all processes associated with `buffer'. | |
39361
2d3bee6a3848
(sigchld_handler): Use GC_CONSP, GC_INTEGERP, GC_EQ
Gerd Moellmann <gerd@gnu.org>
parents:
37758
diff
changeset
|
6647 If `buffer' is nil, kill all processes */ |
578 | 6648 |
20382
dbad9367d232
(create_process, deactivate_process, close_process_descs):
Andreas Schwab <schwab@suse.de>
parents:
20225
diff
changeset
|
6649 void |
578 | 6650 kill_buffer_processes (buffer) |
6651 Lisp_Object buffer; | |
6652 { | |
6653 Lisp_Object tail, proc; | |
6654 | |
90970
3371fc48749b
Replace uses of GC_* macros with the non-GC_ versions.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
90851
diff
changeset
|
6655 for (tail = Vprocess_alist; CONSP (tail); tail = XCDR (tail)) |
578 | 6656 { |
25645
a14111a2a100
Use XCAR, XCDR, XFLOAT_DATA instead of explicit member access.
Ken Raeburn <raeburn@raeburn.org>
parents:
25356
diff
changeset
|
6657 proc = XCDR (XCAR (tail)); |
90970
3371fc48749b
Replace uses of GC_* macros with the non-GC_ versions.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
90851
diff
changeset
|
6658 if (PROCESSP (proc) |
578 | 6659 && (NILP (buffer) || EQ (XPROCESS (proc)->buffer, buffer))) |
6660 { | |
95884
d6a4488883dc
Daniel Engeler <engeler at gmail.com>
Glenn Morris <rgm@gnu.org>
parents:
95387
diff
changeset
|
6661 if (NETCONN_P (proc) || SERIALCONN_P (proc)) |
7764
fad00b057e50
(kill_buffer_processes): For net conn, use Fdelete_process.
Richard M. Stallman <rms@gnu.org>
parents:
7748
diff
changeset
|
6662 Fdelete_process (proc); |
81826
077a1e6fd3f2
(struct Lisp_Process): Turn slots infd, outfd, kill_without_query, pty_flag,
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
80984
diff
changeset
|
6663 else if (XPROCESS (proc)->infd >= 0) |
578 | 6664 process_send_signal (proc, SIGHUP, Qnil, 1); |
6665 } | |
6666 } | |
6667 } | |
6668 | |
39361
2d3bee6a3848
(sigchld_handler): Use GC_CONSP, GC_INTEGERP, GC_EQ
Gerd Moellmann <gerd@gnu.org>
parents:
37758
diff
changeset
|
6669 /* On receipt of a signal that a child status has changed, loop asking |
2d3bee6a3848
(sigchld_handler): Use GC_CONSP, GC_INTEGERP, GC_EQ
Gerd Moellmann <gerd@gnu.org>
parents:
37758
diff
changeset
|
6670 about children with changed statuses until the system says there |
2d3bee6a3848
(sigchld_handler): Use GC_CONSP, GC_INTEGERP, GC_EQ
Gerd Moellmann <gerd@gnu.org>
parents:
37758
diff
changeset
|
6671 are no more. |
49600
23a1cea22d13
Trailing whitespace deleted.
Juanma Barranquero <lekktu@gmail.com>
parents:
49281
diff
changeset
|
6672 |
39361
2d3bee6a3848
(sigchld_handler): Use GC_CONSP, GC_INTEGERP, GC_EQ
Gerd Moellmann <gerd@gnu.org>
parents:
37758
diff
changeset
|
6673 All we do is change the status; we do not run sentinels or print |
2d3bee6a3848
(sigchld_handler): Use GC_CONSP, GC_INTEGERP, GC_EQ
Gerd Moellmann <gerd@gnu.org>
parents:
37758
diff
changeset
|
6674 notifications. That is saved for the next time keyboard input is |
2d3bee6a3848
(sigchld_handler): Use GC_CONSP, GC_INTEGERP, GC_EQ
Gerd Moellmann <gerd@gnu.org>
parents:
37758
diff
changeset
|
6675 done, in order to avoid timing errors. |
2d3bee6a3848
(sigchld_handler): Use GC_CONSP, GC_INTEGERP, GC_EQ
Gerd Moellmann <gerd@gnu.org>
parents:
37758
diff
changeset
|
6676 |
2d3bee6a3848
(sigchld_handler): Use GC_CONSP, GC_INTEGERP, GC_EQ
Gerd Moellmann <gerd@gnu.org>
parents:
37758
diff
changeset
|
6677 ** WARNING: this can be called during garbage collection. |
2d3bee6a3848
(sigchld_handler): Use GC_CONSP, GC_INTEGERP, GC_EQ
Gerd Moellmann <gerd@gnu.org>
parents:
37758
diff
changeset
|
6678 Therefore, it must not be fooled by the presence of mark bits in |
2d3bee6a3848
(sigchld_handler): Use GC_CONSP, GC_INTEGERP, GC_EQ
Gerd Moellmann <gerd@gnu.org>
parents:
37758
diff
changeset
|
6679 Lisp objects. |
2d3bee6a3848
(sigchld_handler): Use GC_CONSP, GC_INTEGERP, GC_EQ
Gerd Moellmann <gerd@gnu.org>
parents:
37758
diff
changeset
|
6680 |
2d3bee6a3848
(sigchld_handler): Use GC_CONSP, GC_INTEGERP, GC_EQ
Gerd Moellmann <gerd@gnu.org>
parents:
37758
diff
changeset
|
6681 ** USG WARNING: Although it is not obvious from the documentation |
2d3bee6a3848
(sigchld_handler): Use GC_CONSP, GC_INTEGERP, GC_EQ
Gerd Moellmann <gerd@gnu.org>
parents:
37758
diff
changeset
|
6682 in signal(2), on a USG system the SIGCLD handler MUST NOT call |
2d3bee6a3848
(sigchld_handler): Use GC_CONSP, GC_INTEGERP, GC_EQ
Gerd Moellmann <gerd@gnu.org>
parents:
37758
diff
changeset
|
6683 signal() before executing at least one wait(), otherwise the |
2d3bee6a3848
(sigchld_handler): Use GC_CONSP, GC_INTEGERP, GC_EQ
Gerd Moellmann <gerd@gnu.org>
parents:
37758
diff
changeset
|
6684 handler will be called again, resulting in an infinite loop. The |
2d3bee6a3848
(sigchld_handler): Use GC_CONSP, GC_INTEGERP, GC_EQ
Gerd Moellmann <gerd@gnu.org>
parents:
37758
diff
changeset
|
6685 relevant portion of the documentation reads "SIGCLD signals will be |
2d3bee6a3848
(sigchld_handler): Use GC_CONSP, GC_INTEGERP, GC_EQ
Gerd Moellmann <gerd@gnu.org>
parents:
37758
diff
changeset
|
6686 queued and the signal-catching function will be continually |
2d3bee6a3848
(sigchld_handler): Use GC_CONSP, GC_INTEGERP, GC_EQ
Gerd Moellmann <gerd@gnu.org>
parents:
37758
diff
changeset
|
6687 reentered until the queue is empty". Invoking signal() causes the |
2d3bee6a3848
(sigchld_handler): Use GC_CONSP, GC_INTEGERP, GC_EQ
Gerd Moellmann <gerd@gnu.org>
parents:
37758
diff
changeset
|
6688 kernel to reexamine the SIGCLD queue. Fred Fish, UniSoft Systems |
53732
0341435e76ce
* process.c (sigchld_handler): Add comment about not calling malloc
Jan Djärv <jan.h.d@swipnet.se>
parents:
53713
diff
changeset
|
6689 Inc. |
0341435e76ce
* process.c (sigchld_handler): Add comment about not calling malloc
Jan Djärv <jan.h.d@swipnet.se>
parents:
53713
diff
changeset
|
6690 |
0341435e76ce
* process.c (sigchld_handler): Add comment about not calling malloc
Jan Djärv <jan.h.d@swipnet.se>
parents:
53713
diff
changeset
|
6691 ** Malloc WARNING: This should never call malloc either directly or |
0341435e76ce
* process.c (sigchld_handler): Add comment about not calling malloc
Jan Djärv <jan.h.d@swipnet.se>
parents:
53713
diff
changeset
|
6692 indirectly; if it does, that is a bug */ |
578 | 6693 |
71140
80310801887e
2006-06-01 Micha«³l Cadilhac <michael.cadilhac@lrde.org>
Kim F. Storm <storm@cua.dk>
parents:
71109
diff
changeset
|
6694 #ifdef SIGCHLD |
578 | 6695 SIGTYPE |
6696 sigchld_handler (signo) | |
6697 int signo; | |
6698 { | |
6699 int old_errno = errno; | |
6700 Lisp_Object proc; | |
6701 register struct Lisp_Process *p; | |
1925
3ddb163a9201
* process.c: Make sure we don't miss processes exiting, by having
Jim Blandy <jimb@redhat.com>
parents:
1886
diff
changeset
|
6702 extern EMACS_TIME *input_available_clear_time; |
578 | 6703 |
58986
59945307b86b
* syssignal.h: Declare main_thread.
Jan Djärv <jan.h.d@swipnet.se>
parents:
58082
diff
changeset
|
6704 SIGNAL_THREAD_CHECK (signo); |
59945307b86b
* syssignal.h: Declare main_thread.
Jan Djärv <jan.h.d@swipnet.se>
parents:
58082
diff
changeset
|
6705 |
578 | 6706 while (1) |
6707 { | |
76493
e5e12c57c640
(sigchld_handler): Change type of pid to pid_t. Scan deleted_pid_list
Chong Yidong <cyd@stupidchicken.com>
parents:
76462
diff
changeset
|
6708 pid_t pid; |
96620
3bea8ede5bd0
* syswait.h: Remove old if 0 code. Do not define WAITTYPE, it was
Dan Nicolaescu <dann@ics.uci.edu>
parents:
96361
diff
changeset
|
6709 int w; |
578 | 6710 Lisp_Object tail; |
6711 | |
6712 #ifdef WNOHANG | |
6713 #ifndef WUNTRACED | |
6714 #define WUNTRACED 0 | |
6715 #endif /* no WUNTRACED */ | |
6716 /* Keep trying to get a status until we get a definitive result. */ | |
76718
217f3f19f471
revert the last patch to the original fix: sleep BEFORE the first wait
Sam Steingold <sds@gnu.org>
parents:
76626
diff
changeset
|
6717 do |
100824
e5aa6a069f40
(conv_sockaddr_to_lisp): Add workaround for
Andreas Schwab <schwab@suse.de>
parents:
100573
diff
changeset
|
6718 { |
76494
f0a25b5d3ba0
(Fdelete_process): Properly handle deletion of first element of
Chong Yidong <cyd@stupidchicken.com>
parents:
76493
diff
changeset
|
6719 errno = 0; |
f0a25b5d3ba0
(Fdelete_process): Properly handle deletion of first element of
Chong Yidong <cyd@stupidchicken.com>
parents:
76493
diff
changeset
|
6720 pid = wait3 (&w, WNOHANG | WUNTRACED, 0); |
f0a25b5d3ba0
(Fdelete_process): Properly handle deletion of first element of
Chong Yidong <cyd@stupidchicken.com>
parents:
76493
diff
changeset
|
6721 } |
76718
217f3f19f471
revert the last patch to the original fix: sleep BEFORE the first wait
Sam Steingold <sds@gnu.org>
parents:
76626
diff
changeset
|
6722 while (pid < 0 && errno == EINTR); |
578 | 6723 |
6724 if (pid <= 0) | |
6725 { | |
39361
2d3bee6a3848
(sigchld_handler): Use GC_CONSP, GC_INTEGERP, GC_EQ
Gerd Moellmann <gerd@gnu.org>
parents:
37758
diff
changeset
|
6726 /* PID == 0 means no processes found, PID == -1 means a real |
2d3bee6a3848
(sigchld_handler): Use GC_CONSP, GC_INTEGERP, GC_EQ
Gerd Moellmann <gerd@gnu.org>
parents:
37758
diff
changeset
|
6727 failure. We have done all our job, so return. */ |
578 | 6728 |
6729 /* USG systems forget handlers when they are used; | |
6730 must reestablish each time */ | |
16116
80a67b8f39e9
(create_process_1, sigchld_handler) [POSIX_SIGNALS]:
Richard M. Stallman <rms@gnu.org>
parents:
16076
diff
changeset
|
6731 #if defined (USG) && !defined (POSIX_SIGNALS) |
578 | 6732 signal (signo, sigchld_handler); /* WARNING - must come after wait3() */ |
6733 #endif | |
6734 errno = old_errno; | |
6735 return; | |
6736 } | |
6737 #else | |
6738 pid = wait (&w); | |
6739 #endif /* no WNOHANG */ | |
6740 | |
6741 /* Find the process that signaled us, and record its status. */ | |
6742 | |
71140
80310801887e
2006-06-01 Micha«³l Cadilhac <michael.cadilhac@lrde.org>
Kim F. Storm <storm@cua.dk>
parents:
71109
diff
changeset
|
6743 /* The process can have been deleted by Fdelete_process. */ |
90970
3371fc48749b
Replace uses of GC_* macros with the non-GC_ versions.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
90851
diff
changeset
|
6744 for (tail = deleted_pid_list; CONSP (tail); tail = XCDR (tail)) |
71140
80310801887e
2006-06-01 Micha«³l Cadilhac <michael.cadilhac@lrde.org>
Kim F. Storm <storm@cua.dk>
parents:
71109
diff
changeset
|
6745 { |
76493
e5e12c57c640
(sigchld_handler): Change type of pid to pid_t. Scan deleted_pid_list
Chong Yidong <cyd@stupidchicken.com>
parents:
76462
diff
changeset
|
6746 Lisp_Object xpid = XCAR (tail); |
90970
3371fc48749b
Replace uses of GC_* macros with the non-GC_ versions.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
90851
diff
changeset
|
6747 if ((INTEGERP (xpid) && pid == (pid_t) XINT (xpid)) |
3371fc48749b
Replace uses of GC_* macros with the non-GC_ versions.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
90851
diff
changeset
|
6748 || (FLOATP (xpid) && pid == (pid_t) XFLOAT_DATA (xpid))) |
76493
e5e12c57c640
(sigchld_handler): Change type of pid to pid_t. Scan deleted_pid_list
Chong Yidong <cyd@stupidchicken.com>
parents:
76462
diff
changeset
|
6749 { |
e5e12c57c640
(sigchld_handler): Change type of pid to pid_t. Scan deleted_pid_list
Chong Yidong <cyd@stupidchicken.com>
parents:
76462
diff
changeset
|
6750 XSETCAR (tail, Qnil); |
e5e12c57c640
(sigchld_handler): Change type of pid to pid_t. Scan deleted_pid_list
Chong Yidong <cyd@stupidchicken.com>
parents:
76462
diff
changeset
|
6751 goto sigchld_end_of_loop; |
e5e12c57c640
(sigchld_handler): Change type of pid to pid_t. Scan deleted_pid_list
Chong Yidong <cyd@stupidchicken.com>
parents:
76462
diff
changeset
|
6752 } |
71140
80310801887e
2006-06-01 Micha«³l Cadilhac <michael.cadilhac@lrde.org>
Kim F. Storm <storm@cua.dk>
parents:
71109
diff
changeset
|
6753 } |
80310801887e
2006-06-01 Micha«³l Cadilhac <michael.cadilhac@lrde.org>
Kim F. Storm <storm@cua.dk>
parents:
71109
diff
changeset
|
6754 |
80310801887e
2006-06-01 Micha«³l Cadilhac <michael.cadilhac@lrde.org>
Kim F. Storm <storm@cua.dk>
parents:
71109
diff
changeset
|
6755 /* Otherwise, if it is asynchronous, it is in Vprocess_alist. */ |
578 | 6756 p = 0; |
90970
3371fc48749b
Replace uses of GC_* macros with the non-GC_ versions.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
90851
diff
changeset
|
6757 for (tail = Vprocess_alist; CONSP (tail); tail = XCDR (tail)) |
578 | 6758 { |
25645
a14111a2a100
Use XCAR, XCDR, XFLOAT_DATA instead of explicit member access.
Ken Raeburn <raeburn@raeburn.org>
parents:
25356
diff
changeset
|
6759 proc = XCDR (XCAR (tail)); |
578 | 6760 p = XPROCESS (proc); |
95884
d6a4488883dc
Daniel Engeler <engeler at gmail.com>
Glenn Morris <rgm@gnu.org>
parents:
95387
diff
changeset
|
6761 if (EQ (p->type, Qreal) && p->pid == pid) |
578 | 6762 break; |
6763 p = 0; | |
6764 } | |
6765 | |
6766 /* Look for an asynchronous process whose pid hasn't been filled | |
6767 in yet. */ | |
6768 if (p == 0) | |
90970
3371fc48749b
Replace uses of GC_* macros with the non-GC_ versions.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
90851
diff
changeset
|
6769 for (tail = Vprocess_alist; CONSP (tail); tail = XCDR (tail)) |
578 | 6770 { |
25645
a14111a2a100
Use XCAR, XCDR, XFLOAT_DATA instead of explicit member access.
Ken Raeburn <raeburn@raeburn.org>
parents:
25356
diff
changeset
|
6771 proc = XCDR (XCAR (tail)); |
578 | 6772 p = XPROCESS (proc); |
69873
2d844bbbccd4
* process.h (struct Lisp_Process): Replace Lisp_Objects `pid',
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
69634
diff
changeset
|
6773 if (p->pid == -1) |
578 | 6774 break; |
6775 p = 0; | |
6776 } | |
49600
23a1cea22d13
Trailing whitespace deleted.
Juanma Barranquero <lekktu@gmail.com>
parents:
49281
diff
changeset
|
6777 |
578 | 6778 /* Change the status of the process that was found. */ |
6779 if (p != 0) | |
6780 { | |
9793
28267fcc61be
Use macros IS_ANY_SEP, IS_DIRECTORY_SEP,
Richard M. Stallman <rms@gnu.org>
parents:
9705
diff
changeset
|
6781 int clear_desc_flag = 0; |
49600
23a1cea22d13
Trailing whitespace deleted.
Juanma Barranquero <lekktu@gmail.com>
parents:
49281
diff
changeset
|
6782 |
81826
077a1e6fd3f2
(struct Lisp_Process): Turn slots infd, outfd, kill_without_query, pty_flag,
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
80984
diff
changeset
|
6783 p->tick = ++process_tick; |
96620
3bea8ede5bd0
* syswait.h: Remove old if 0 code. Do not define WAITTYPE, it was
Dan Nicolaescu <dann@ics.uci.edu>
parents:
96361
diff
changeset
|
6784 p->raw_status = w; |
69873
2d844bbbccd4
* process.h (struct Lisp_Process): Replace Lisp_Objects `pid',
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
69634
diff
changeset
|
6785 p->raw_status_new = 1; |
49600
23a1cea22d13
Trailing whitespace deleted.
Juanma Barranquero <lekktu@gmail.com>
parents:
49281
diff
changeset
|
6786 |
578 | 6787 /* If process has terminated, stop waiting for its output. */ |
9793
28267fcc61be
Use macros IS_ANY_SEP, IS_DIRECTORY_SEP,
Richard M. Stallman <rms@gnu.org>
parents:
9705
diff
changeset
|
6788 if ((WIFSIGNALED (w) || WIFEXITED (w)) |
81826
077a1e6fd3f2
(struct Lisp_Process): Turn slots infd, outfd, kill_without_query, pty_flag,
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
80984
diff
changeset
|
6789 && p->infd >= 0) |
9793
28267fcc61be
Use macros IS_ANY_SEP, IS_DIRECTORY_SEP,
Richard M. Stallman <rms@gnu.org>
parents:
9705
diff
changeset
|
6790 clear_desc_flag = 1; |
28267fcc61be
Use macros IS_ANY_SEP, IS_DIRECTORY_SEP,
Richard M. Stallman <rms@gnu.org>
parents:
9705
diff
changeset
|
6791 |
28267fcc61be
Use macros IS_ANY_SEP, IS_DIRECTORY_SEP,
Richard M. Stallman <rms@gnu.org>
parents:
9705
diff
changeset
|
6792 /* We use clear_desc_flag to avoid a compiler bug in Microsoft C. */ |
28267fcc61be
Use macros IS_ANY_SEP, IS_DIRECTORY_SEP,
Richard M. Stallman <rms@gnu.org>
parents:
9705
diff
changeset
|
6793 if (clear_desc_flag) |
28267fcc61be
Use macros IS_ANY_SEP, IS_DIRECTORY_SEP,
Richard M. Stallman <rms@gnu.org>
parents:
9705
diff
changeset
|
6794 { |
81826
077a1e6fd3f2
(struct Lisp_Process): Turn slots infd, outfd, kill_without_query, pty_flag,
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
80984
diff
changeset
|
6795 FD_CLR (p->infd, &input_wait_mask); |
077a1e6fd3f2
(struct Lisp_Process): Turn slots infd, outfd, kill_without_query, pty_flag,
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
80984
diff
changeset
|
6796 FD_CLR (p->infd, &non_keyboard_wait_mask); |
9793
28267fcc61be
Use macros IS_ANY_SEP, IS_DIRECTORY_SEP,
Richard M. Stallman <rms@gnu.org>
parents:
9705
diff
changeset
|
6797 } |
1925
3ddb163a9201
* process.c: Make sure we don't miss processes exiting, by having
Jim Blandy <jimb@redhat.com>
parents:
1886
diff
changeset
|
6798 |
56728
1686b397ef16
(wait_reading_process_output): Rename from
Kim F. Storm <storm@cua.dk>
parents:
56716
diff
changeset
|
6799 /* Tell wait_reading_process_output that it needs to wake up and |
1925
3ddb163a9201
* process.c: Make sure we don't miss processes exiting, by having
Jim Blandy <jimb@redhat.com>
parents:
1886
diff
changeset
|
6800 look around. */ |
3ddb163a9201
* process.c: Make sure we don't miss processes exiting, by having
Jim Blandy <jimb@redhat.com>
parents:
1886
diff
changeset
|
6801 if (input_available_clear_time) |
3ddb163a9201
* process.c: Make sure we don't miss processes exiting, by having
Jim Blandy <jimb@redhat.com>
parents:
1886
diff
changeset
|
6802 EMACS_SET_SECS_USECS (*input_available_clear_time, 0, 0); |
578 | 6803 } |
6804 | |
71140
80310801887e
2006-06-01 Micha«³l Cadilhac <michael.cadilhac@lrde.org>
Kim F. Storm <storm@cua.dk>
parents:
71109
diff
changeset
|
6805 /* There was no asynchronous process found for that pid: we have |
80310801887e
2006-06-01 Micha«³l Cadilhac <michael.cadilhac@lrde.org>
Kim F. Storm <storm@cua.dk>
parents:
71109
diff
changeset
|
6806 a synchronous process. */ |
578 | 6807 else |
6808 { | |
6809 synch_process_alive = 0; | |
6810 | |
6811 /* Report the status of the synchronous process. */ | |
6812 if (WIFEXITED (w)) | |
6813 synch_process_retcode = WRETCODE (w); | |
6814 else if (WIFSIGNALED (w)) | |
100824
e5aa6a069f40
(conv_sockaddr_to_lisp): Add workaround for
Andreas Schwab <schwab@suse.de>
parents:
100573
diff
changeset
|
6815 synch_process_termsig = WTERMSIG (w); |
1925
3ddb163a9201
* process.c: Make sure we don't miss processes exiting, by having
Jim Blandy <jimb@redhat.com>
parents:
1886
diff
changeset
|
6816 |
56728
1686b397ef16
(wait_reading_process_output): Rename from
Kim F. Storm <storm@cua.dk>
parents:
56716
diff
changeset
|
6817 /* Tell wait_reading_process_output that it needs to wake up and |
1925
3ddb163a9201
* process.c: Make sure we don't miss processes exiting, by having
Jim Blandy <jimb@redhat.com>
parents:
1886
diff
changeset
|
6818 look around. */ |
3ddb163a9201
* process.c: Make sure we don't miss processes exiting, by having
Jim Blandy <jimb@redhat.com>
parents:
1886
diff
changeset
|
6819 if (input_available_clear_time) |
3ddb163a9201
* process.c: Make sure we don't miss processes exiting, by having
Jim Blandy <jimb@redhat.com>
parents:
1886
diff
changeset
|
6820 EMACS_SET_SECS_USECS (*input_available_clear_time, 0, 0); |
578 | 6821 } |
6822 | |
71140
80310801887e
2006-06-01 Micha«³l Cadilhac <michael.cadilhac@lrde.org>
Kim F. Storm <storm@cua.dk>
parents:
71109
diff
changeset
|
6823 sigchld_end_of_loop: |
80310801887e
2006-06-01 Micha«³l Cadilhac <michael.cadilhac@lrde.org>
Kim F. Storm <storm@cua.dk>
parents:
71109
diff
changeset
|
6824 ; |
80310801887e
2006-06-01 Micha«³l Cadilhac <michael.cadilhac@lrde.org>
Kim F. Storm <storm@cua.dk>
parents:
71109
diff
changeset
|
6825 |
578 | 6826 /* On some systems, we must return right away. |
6827 If any more processes want to signal us, we will | |
6828 get another signal. | |
6829 Otherwise (on systems that have WNOHANG), loop around | |
6830 to use up all the processes that have something to tell us. */ | |
39406
9dd4ad9bc53e
(sigchld_handler) [LINUX]: Don't return from
Gerd Moellmann <gerd@gnu.org>
parents:
39361
diff
changeset
|
6831 #if (defined WINDOWSNT \ |
41969
e669966d496e
Test GNU_LINUX, not LINUX.
Richard M. Stallman <rms@gnu.org>
parents:
41856
diff
changeset
|
6832 || (defined USG && !defined GNU_LINUX \ |
100824
e5aa6a069f40
(conv_sockaddr_to_lisp): Add workaround for
Andreas Schwab <schwab@suse.de>
parents:
100573
diff
changeset
|
6833 && !(defined HPUX && defined WNOHANG))) |
16116
80a67b8f39e9
(create_process_1, sigchld_handler) [POSIX_SIGNALS]:
Richard M. Stallman <rms@gnu.org>
parents:
16076
diff
changeset
|
6834 #if defined (USG) && ! defined (POSIX_SIGNALS) |
578 | 6835 signal (signo, sigchld_handler); |
6836 #endif | |
6837 errno = old_errno; | |
6838 return; | |
6839 #endif /* USG, but not HPUX with WNOHANG */ | |
6840 } | |
6841 } | |
71140
80310801887e
2006-06-01 Micha«³l Cadilhac <michael.cadilhac@lrde.org>
Kim F. Storm <storm@cua.dk>
parents:
71109
diff
changeset
|
6842 #endif /* SIGCHLD */ |
578 | 6843 |
6844 | |
6845 static Lisp_Object | |
6846 exec_sentinel_unwind (data) | |
6847 Lisp_Object data; | |
6848 { | |
25645
a14111a2a100
Use XCAR, XCDR, XFLOAT_DATA instead of explicit member access.
Ken Raeburn <raeburn@raeburn.org>
parents:
25356
diff
changeset
|
6849 XPROCESS (XCAR (data))->sentinel = XCDR (data); |
578 | 6850 return Qnil; |
6851 } | |
6852 | |
9030
b14532c71632
(exec_sentinel_error_handler): New function.
Richard M. Stallman <rms@gnu.org>
parents:
8570
diff
changeset
|
6853 static Lisp_Object |
b14532c71632
(exec_sentinel_error_handler): New function.
Richard M. Stallman <rms@gnu.org>
parents:
8570
diff
changeset
|
6854 exec_sentinel_error_handler (error) |
b14532c71632
(exec_sentinel_error_handler): New function.
Richard M. Stallman <rms@gnu.org>
parents:
8570
diff
changeset
|
6855 Lisp_Object error; |
b14532c71632
(exec_sentinel_error_handler): New function.
Richard M. Stallman <rms@gnu.org>
parents:
8570
diff
changeset
|
6856 { |
b14532c71632
(exec_sentinel_error_handler): New function.
Richard M. Stallman <rms@gnu.org>
parents:
8570
diff
changeset
|
6857 cmd_error_internal (error, "error in process sentinel: "); |
b14532c71632
(exec_sentinel_error_handler): New function.
Richard M. Stallman <rms@gnu.org>
parents:
8570
diff
changeset
|
6858 Vinhibit_quit = Qt; |
b14532c71632
(exec_sentinel_error_handler): New function.
Richard M. Stallman <rms@gnu.org>
parents:
8570
diff
changeset
|
6859 update_echo_area (); |
11277
d4547e4b0aab
(read_process_output_error_handler)
Richard M. Stallman <rms@gnu.org>
parents:
11235
diff
changeset
|
6860 Fsleep_for (make_number (2), Qnil); |
27558 | 6861 return Qt; |
9030
b14532c71632
(exec_sentinel_error_handler): New function.
Richard M. Stallman <rms@gnu.org>
parents:
8570
diff
changeset
|
6862 } |
b14532c71632
(exec_sentinel_error_handler): New function.
Richard M. Stallman <rms@gnu.org>
parents:
8570
diff
changeset
|
6863 |
578 | 6864 static void |
6865 exec_sentinel (proc, reason) | |
6866 Lisp_Object proc, reason; | |
6867 { | |
10914
413d44c0bd41
(exec_sentinel, read_process_output): If running filter
Richard M. Stallman <rms@gnu.org>
parents:
10744
diff
changeset
|
6868 Lisp_Object sentinel, obuffer, odeactivate, okeymap; |
578 | 6869 register struct Lisp_Process *p = XPROCESS (proc); |
46293
1fb8f75062c6
Use macro SPECPDL_INDEX.
Juanma Barranquero <lekktu@gmail.com>
parents:
45410
diff
changeset
|
6870 int count = SPECPDL_INDEX (); |
16644
3a93437adce1
(status_notify): Test p->infd > 0
Richard M. Stallman <rms@gnu.org>
parents:
16464
diff
changeset
|
6871 int outer_running_asynch_code = running_asynch_code; |
23460
94f4ba741f22
(exec_sentinel, read_process_output):
Richard M. Stallman <rms@gnu.org>
parents:
23405
diff
changeset
|
6872 int waiting = waiting_for_user_input_p; |
578 | 6873 |
72727
5f2a73453aa3
(inhibit_sentinels): New variable.
Richard M. Stallman <rms@gnu.org>
parents:
72277
diff
changeset
|
6874 if (inhibit_sentinels) |
5f2a73453aa3
(inhibit_sentinels): New variable.
Richard M. Stallman <rms@gnu.org>
parents:
72277
diff
changeset
|
6875 return; |
5f2a73453aa3
(inhibit_sentinels): New variable.
Richard M. Stallman <rms@gnu.org>
parents:
72277
diff
changeset
|
6876 |
10914
413d44c0bd41
(exec_sentinel, read_process_output): If running filter
Richard M. Stallman <rms@gnu.org>
parents:
10744
diff
changeset
|
6877 /* No need to gcpro these, because all we do with them later |
413d44c0bd41
(exec_sentinel, read_process_output): If running filter
Richard M. Stallman <rms@gnu.org>
parents:
10744
diff
changeset
|
6878 is test them for EQness, and none of them should be a string. */ |
7454
8d9e41a175fa
(exec_sentinel): Don't deactivate the mark. Check for asynch buffer switch.
Karl Heuer <kwzh@gnu.org>
parents:
7414
diff
changeset
|
6879 odeactivate = Vdeactivate_mark; |
10914
413d44c0bd41
(exec_sentinel, read_process_output): If running filter
Richard M. Stallman <rms@gnu.org>
parents:
10744
diff
changeset
|
6880 XSETBUFFER (obuffer, current_buffer); |
413d44c0bd41
(exec_sentinel, read_process_output): If running filter
Richard M. Stallman <rms@gnu.org>
parents:
10744
diff
changeset
|
6881 okeymap = current_buffer->keymap; |
413d44c0bd41
(exec_sentinel, read_process_output): If running filter
Richard M. Stallman <rms@gnu.org>
parents:
10744
diff
changeset
|
6882 |
578 | 6883 sentinel = p->sentinel; |
6884 if (NILP (sentinel)) | |
6885 return; | |
6886 | |
6887 /* Zilch the sentinel while it's running, to avoid recursive invocations; | |
6888 assure that it gets restored no matter how the sentinel exits. */ | |
6889 p->sentinel = Qnil; | |
6890 record_unwind_protect (exec_sentinel_unwind, Fcons (proc, sentinel)); | |
6891 /* Inhibit quit so that random quits don't screw up a running filter. */ | |
6892 specbind (Qinhibit_quit, Qt); | |
106397
210af1fb2669
(Qseqpacket): New symbol.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
106186
diff
changeset
|
6893 specbind (Qlast_nonmenu_event, Qt); /* Why? --Stef */ |
9030
b14532c71632
(exec_sentinel_error_handler): New function.
Richard M. Stallman <rms@gnu.org>
parents:
8570
diff
changeset
|
6894 |
16644
3a93437adce1
(status_notify): Test p->infd > 0
Richard M. Stallman <rms@gnu.org>
parents:
16464
diff
changeset
|
6895 /* In case we get recursively called, |
3a93437adce1
(status_notify): Test p->infd > 0
Richard M. Stallman <rms@gnu.org>
parents:
16464
diff
changeset
|
6896 and we already saved the match data nonrecursively, |
3a93437adce1
(status_notify): Test p->infd > 0
Richard M. Stallman <rms@gnu.org>
parents:
16464
diff
changeset
|
6897 save the same match data in safely recursive fashion. */ |
3a93437adce1
(status_notify): Test p->infd > 0
Richard M. Stallman <rms@gnu.org>
parents:
16464
diff
changeset
|
6898 if (outer_running_asynch_code) |
3a93437adce1
(status_notify): Test p->infd > 0
Richard M. Stallman <rms@gnu.org>
parents:
16464
diff
changeset
|
6899 { |
3a93437adce1
(status_notify): Test p->infd > 0
Richard M. Stallman <rms@gnu.org>
parents:
16464
diff
changeset
|
6900 Lisp_Object tem; |
63147
9bde03db5726
* composite.c (compose_chars_in_text):
Kim F. Storm <storm@cua.dk>
parents:
63128
diff
changeset
|
6901 tem = Fmatch_data (Qnil, Qnil, Qnil); |
9bde03db5726
* composite.c (compose_chars_in_text):
Kim F. Storm <storm@cua.dk>
parents:
63128
diff
changeset
|
6902 restore_search_regs (); |
9bde03db5726
* composite.c (compose_chars_in_text):
Kim F. Storm <storm@cua.dk>
parents:
63128
diff
changeset
|
6903 record_unwind_save_match_data (); |
9bde03db5726
* composite.c (compose_chars_in_text):
Kim F. Storm <storm@cua.dk>
parents:
63128
diff
changeset
|
6904 Fset_match_data (tem, Qt); |
16644
3a93437adce1
(status_notify): Test p->infd > 0
Richard M. Stallman <rms@gnu.org>
parents:
16464
diff
changeset
|
6905 } |
3a93437adce1
(status_notify): Test p->infd > 0
Richard M. Stallman <rms@gnu.org>
parents:
16464
diff
changeset
|
6906 |
3a93437adce1
(status_notify): Test p->infd > 0
Richard M. Stallman <rms@gnu.org>
parents:
16464
diff
changeset
|
6907 /* For speed, if a search happens within this code, |
3a93437adce1
(status_notify): Test p->infd > 0
Richard M. Stallman <rms@gnu.org>
parents:
16464
diff
changeset
|
6908 save the match data in a special nonrecursive fashion. */ |
10032
f689803caa92
Added code for automatically saving and restoring the match data
Francesco Potortì <pot@gnu.org>
parents:
9969
diff
changeset
|
6909 running_asynch_code = 1; |
16644
3a93437adce1
(status_notify): Test p->infd > 0
Richard M. Stallman <rms@gnu.org>
parents:
16464
diff
changeset
|
6910 |
9030
b14532c71632
(exec_sentinel_error_handler): New function.
Richard M. Stallman <rms@gnu.org>
parents:
8570
diff
changeset
|
6911 internal_condition_case_1 (read_process_output_call, |
b14532c71632
(exec_sentinel_error_handler): New function.
Richard M. Stallman <rms@gnu.org>
parents:
8570
diff
changeset
|
6912 Fcons (sentinel, |
b14532c71632
(exec_sentinel_error_handler): New function.
Richard M. Stallman <rms@gnu.org>
parents:
8570
diff
changeset
|
6913 Fcons (proc, Fcons (reason, Qnil))), |
b14532c71632
(exec_sentinel_error_handler): New function.
Richard M. Stallman <rms@gnu.org>
parents:
8570
diff
changeset
|
6914 !NILP (Vdebug_on_error) ? Qnil : Qerror, |
b14532c71632
(exec_sentinel_error_handler): New function.
Richard M. Stallman <rms@gnu.org>
parents:
8570
diff
changeset
|
6915 exec_sentinel_error_handler); |
16644
3a93437adce1
(status_notify): Test p->infd > 0
Richard M. Stallman <rms@gnu.org>
parents:
16464
diff
changeset
|
6916 |
3a93437adce1
(status_notify): Test p->infd > 0
Richard M. Stallman <rms@gnu.org>
parents:
16464
diff
changeset
|
6917 /* If we saved the match data nonrecursively, restore it now. */ |
63147
9bde03db5726
* composite.c (compose_chars_in_text):
Kim F. Storm <storm@cua.dk>
parents:
63128
diff
changeset
|
6918 restore_search_regs (); |
16644
3a93437adce1
(status_notify): Test p->infd > 0
Richard M. Stallman <rms@gnu.org>
parents:
16464
diff
changeset
|
6919 running_asynch_code = outer_running_asynch_code; |
7454
8d9e41a175fa
(exec_sentinel): Don't deactivate the mark. Check for asynch buffer switch.
Karl Heuer <kwzh@gnu.org>
parents:
7414
diff
changeset
|
6920 |
8d9e41a175fa
(exec_sentinel): Don't deactivate the mark. Check for asynch buffer switch.
Karl Heuer <kwzh@gnu.org>
parents:
7414
diff
changeset
|
6921 Vdeactivate_mark = odeactivate; |
23460
94f4ba741f22
(exec_sentinel, read_process_output):
Richard M. Stallman <rms@gnu.org>
parents:
23405
diff
changeset
|
6922 |
94f4ba741f22
(exec_sentinel, read_process_output):
Richard M. Stallman <rms@gnu.org>
parents:
23405
diff
changeset
|
6923 /* Restore waiting_for_user_input_p as it was |
94f4ba741f22
(exec_sentinel, read_process_output):
Richard M. Stallman <rms@gnu.org>
parents:
23405
diff
changeset
|
6924 when we were called, in case the filter clobbered it. */ |
94f4ba741f22
(exec_sentinel, read_process_output):
Richard M. Stallman <rms@gnu.org>
parents:
23405
diff
changeset
|
6925 waiting_for_user_input_p = waiting; |
94f4ba741f22
(exec_sentinel, read_process_output):
Richard M. Stallman <rms@gnu.org>
parents:
23405
diff
changeset
|
6926 |
12808
4db1f387e85f
(read_process_output, exec_sentinel): Call
Richard M. Stallman <rms@gnu.org>
parents:
12749
diff
changeset
|
6927 #if 0 |
10914
413d44c0bd41
(exec_sentinel, read_process_output): If running filter
Richard M. Stallman <rms@gnu.org>
parents:
10744
diff
changeset
|
6928 if (! EQ (Fcurrent_buffer (), obuffer) |
413d44c0bd41
(exec_sentinel, read_process_output): If running filter
Richard M. Stallman <rms@gnu.org>
parents:
10744
diff
changeset
|
6929 || ! EQ (current_buffer->keymap, okeymap)) |
12808
4db1f387e85f
(read_process_output, exec_sentinel): Call
Richard M. Stallman <rms@gnu.org>
parents:
12749
diff
changeset
|
6930 #endif |
13159
2af96ac471bc
(exec_sentinel, read_process_output):
Richard M. Stallman <rms@gnu.org>
parents:
12808
diff
changeset
|
6931 /* But do it only if the caller is actually going to read events. |
2af96ac471bc
(exec_sentinel, read_process_output):
Richard M. Stallman <rms@gnu.org>
parents:
12808
diff
changeset
|
6932 Otherwise there's no need to make him wake up, and it could |
71762 | 6933 cause trouble (for example it would make sit_for return). */ |
13159
2af96ac471bc
(exec_sentinel, read_process_output):
Richard M. Stallman <rms@gnu.org>
parents:
12808
diff
changeset
|
6934 if (waiting_for_user_input_p == -1) |
2af96ac471bc
(exec_sentinel, read_process_output):
Richard M. Stallman <rms@gnu.org>
parents:
12808
diff
changeset
|
6935 record_asynch_buffer_change (); |
7454
8d9e41a175fa
(exec_sentinel): Don't deactivate the mark. Check for asynch buffer switch.
Karl Heuer <kwzh@gnu.org>
parents:
7414
diff
changeset
|
6936 |
5561
fd7524d61a8d
(read_process_output): Supply second arg to unbind_to.
Richard M. Stallman <rms@gnu.org>
parents:
5548
diff
changeset
|
6937 unbind_to (count, Qnil); |
578 | 6938 } |
6939 | |
6940 /* Report all recent events of a change in process status | |
6941 (either run the sentinel or output a message). | |
44372 | 6942 This is usually done while Emacs is waiting for keyboard input |
6943 but can be done at other times. */ | |
578 | 6944 |
64977
d26871fb1b7b
(deactivate_process, status_notify, read_process_output)
Kim F. Storm <storm@cua.dk>
parents:
64770
diff
changeset
|
6945 static void |
d26871fb1b7b
(deactivate_process, status_notify, read_process_output)
Kim F. Storm <storm@cua.dk>
parents:
64770
diff
changeset
|
6946 status_notify (deleting_process) |
d26871fb1b7b
(deactivate_process, status_notify, read_process_output)
Kim F. Storm <storm@cua.dk>
parents:
64770
diff
changeset
|
6947 struct Lisp_Process *deleting_process; |
578 | 6948 { |
6949 register Lisp_Object proc, buffer; | |
6515
df7438605e1e
(status_notify): Use assignment, not initialization.
Karl Heuer <kwzh@gnu.org>
parents:
6429
diff
changeset
|
6950 Lisp_Object tail, msg; |
578 | 6951 struct gcpro gcpro1, gcpro2; |
6952 | |
6515
df7438605e1e
(status_notify): Use assignment, not initialization.
Karl Heuer <kwzh@gnu.org>
parents:
6429
diff
changeset
|
6953 tail = Qnil; |
df7438605e1e
(status_notify): Use assignment, not initialization.
Karl Heuer <kwzh@gnu.org>
parents:
6429
diff
changeset
|
6954 msg = Qnil; |
578 | 6955 /* We need to gcpro tail; if read_process_output calls a filter |
6956 which deletes a process and removes the cons to which tail points | |
6957 from Vprocess_alist, and then causes a GC, tail is an unprotected | |
6958 reference. */ | |
6959 GCPRO2 (tail, msg); | |
6960 | |
12215
2f1f03964f08
(status_notify): Undo May 18 change.
Richard M. Stallman <rms@gnu.org>
parents:
12132
diff
changeset
|
6961 /* Set this now, so that if new processes are created by sentinels |
2f1f03964f08
(status_notify): Undo May 18 change.
Richard M. Stallman <rms@gnu.org>
parents:
12132
diff
changeset
|
6962 that we run, we get called again to handle their status changes. */ |
2f1f03964f08
(status_notify): Undo May 18 change.
Richard M. Stallman <rms@gnu.org>
parents:
12132
diff
changeset
|
6963 update_tick = process_tick; |
2f1f03964f08
(status_notify): Undo May 18 change.
Richard M. Stallman <rms@gnu.org>
parents:
12132
diff
changeset
|
6964 |
85372
f7d19cfed7da
* xselect.c (x_own_selection, x_handle_selection_clear)
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
85362
diff
changeset
|
6965 for (tail = Vprocess_alist; CONSP (tail); tail = XCDR (tail)) |
578 | 6966 { |
12215
2f1f03964f08
(status_notify): Undo May 18 change.
Richard M. Stallman <rms@gnu.org>
parents:
12132
diff
changeset
|
6967 Lisp_Object symbol; |
2f1f03964f08
(status_notify): Undo May 18 change.
Richard M. Stallman <rms@gnu.org>
parents:
12132
diff
changeset
|
6968 register struct Lisp_Process *p; |
2f1f03964f08
(status_notify): Undo May 18 change.
Richard M. Stallman <rms@gnu.org>
parents:
12132
diff
changeset
|
6969 |
85372
f7d19cfed7da
* xselect.c (x_own_selection, x_handle_selection_clear)
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
85362
diff
changeset
|
6970 proc = Fcdr (XCAR (tail)); |
12215
2f1f03964f08
(status_notify): Undo May 18 change.
Richard M. Stallman <rms@gnu.org>
parents:
12132
diff
changeset
|
6971 p = XPROCESS (proc); |
2f1f03964f08
(status_notify): Undo May 18 change.
Richard M. Stallman <rms@gnu.org>
parents:
12132
diff
changeset
|
6972 |
81826
077a1e6fd3f2
(struct Lisp_Process): Turn slots infd, outfd, kill_without_query, pty_flag,
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
80984
diff
changeset
|
6973 if (p->tick != p->update_tick) |
578 | 6974 { |
81826
077a1e6fd3f2
(struct Lisp_Process): Turn slots infd, outfd, kill_without_query, pty_flag,
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
80984
diff
changeset
|
6975 p->update_tick = p->tick; |
12215
2f1f03964f08
(status_notify): Undo May 18 change.
Richard M. Stallman <rms@gnu.org>
parents:
12132
diff
changeset
|
6976 |
2f1f03964f08
(status_notify): Undo May 18 change.
Richard M. Stallman <rms@gnu.org>
parents:
12132
diff
changeset
|
6977 /* If process is still active, read any output that remains. */ |
16644
3a93437adce1
(status_notify): Test p->infd > 0
Richard M. Stallman <rms@gnu.org>
parents:
16464
diff
changeset
|
6978 while (! EQ (p->filter, Qt) |
43598
f49377cf2e3c
(Qconnect, Qfailed): New variables.
Kim F. Storm <storm@cua.dk>
parents:
42600
diff
changeset
|
6979 && ! EQ (p->status, Qconnect) |
43968
7ec801358b7e
(Qlocal, QCname, QCbuffer, QChost, QCservice, QCfamily)
Kim F. Storm <storm@cua.dk>
parents:
43642
diff
changeset
|
6980 && ! EQ (p->status, Qlisten) |
95884
d6a4488883dc
Daniel Engeler <engeler at gmail.com>
Glenn Morris <rgm@gnu.org>
parents:
95387
diff
changeset
|
6981 /* Network or serial process not stopped: */ |
d6a4488883dc
Daniel Engeler <engeler at gmail.com>
Glenn Morris <rgm@gnu.org>
parents:
95387
diff
changeset
|
6982 && ! EQ (p->command, Qt) |
81826
077a1e6fd3f2
(struct Lisp_Process): Turn slots infd, outfd, kill_without_query, pty_flag,
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
80984
diff
changeset
|
6983 && p->infd >= 0 |
64977
d26871fb1b7b
(deactivate_process, status_notify, read_process_output)
Kim F. Storm <storm@cua.dk>
parents:
64770
diff
changeset
|
6984 && p != deleting_process |
81826
077a1e6fd3f2
(struct Lisp_Process): Turn slots infd, outfd, kill_without_query, pty_flag,
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
80984
diff
changeset
|
6985 && read_process_output (proc, p->infd) > 0); |
12215
2f1f03964f08
(status_notify): Undo May 18 change.
Richard M. Stallman <rms@gnu.org>
parents:
12132
diff
changeset
|
6986 |
2f1f03964f08
(status_notify): Undo May 18 change.
Richard M. Stallman <rms@gnu.org>
parents:
12132
diff
changeset
|
6987 buffer = p->buffer; |
2f1f03964f08
(status_notify): Undo May 18 change.
Richard M. Stallman <rms@gnu.org>
parents:
12132
diff
changeset
|
6988 |
2f1f03964f08
(status_notify): Undo May 18 change.
Richard M. Stallman <rms@gnu.org>
parents:
12132
diff
changeset
|
6989 /* Get the text to use for the message. */ |
69873
2d844bbbccd4
* process.h (struct Lisp_Process): Replace Lisp_Objects `pid',
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
69634
diff
changeset
|
6990 if (p->raw_status_new) |
12215
2f1f03964f08
(status_notify): Undo May 18 change.
Richard M. Stallman <rms@gnu.org>
parents:
12132
diff
changeset
|
6991 update_status (p); |
55962
8979bc3ade70
(Fdelete_process): Undo 2004-05-28 change.
Kim F. Storm <storm@cua.dk>
parents:
55810
diff
changeset
|
6992 msg = status_message (p); |
12215
2f1f03964f08
(status_notify): Undo May 18 change.
Richard M. Stallman <rms@gnu.org>
parents:
12132
diff
changeset
|
6993 |
2f1f03964f08
(status_notify): Undo May 18 change.
Richard M. Stallman <rms@gnu.org>
parents:
12132
diff
changeset
|
6994 /* If process is terminated, deactivate it or delete it. */ |
2f1f03964f08
(status_notify): Undo May 18 change.
Richard M. Stallman <rms@gnu.org>
parents:
12132
diff
changeset
|
6995 symbol = p->status; |
2f1f03964f08
(status_notify): Undo May 18 change.
Richard M. Stallman <rms@gnu.org>
parents:
12132
diff
changeset
|
6996 if (CONSP (p->status)) |
25645
a14111a2a100
Use XCAR, XCDR, XFLOAT_DATA instead of explicit member access.
Ken Raeburn <raeburn@raeburn.org>
parents:
25356
diff
changeset
|
6997 symbol = XCAR (p->status); |
12215
2f1f03964f08
(status_notify): Undo May 18 change.
Richard M. Stallman <rms@gnu.org>
parents:
12132
diff
changeset
|
6998 |
2f1f03964f08
(status_notify): Undo May 18 change.
Richard M. Stallman <rms@gnu.org>
parents:
12132
diff
changeset
|
6999 if (EQ (symbol, Qsignal) || EQ (symbol, Qexit) |
2f1f03964f08
(status_notify): Undo May 18 change.
Richard M. Stallman <rms@gnu.org>
parents:
12132
diff
changeset
|
7000 || EQ (symbol, Qclosed)) |
578 | 7001 { |
12215
2f1f03964f08
(status_notify): Undo May 18 change.
Richard M. Stallman <rms@gnu.org>
parents:
12132
diff
changeset
|
7002 if (delete_exited_processes) |
2f1f03964f08
(status_notify): Undo May 18 change.
Richard M. Stallman <rms@gnu.org>
parents:
12132
diff
changeset
|
7003 remove_process (proc); |
2f1f03964f08
(status_notify): Undo May 18 change.
Richard M. Stallman <rms@gnu.org>
parents:
12132
diff
changeset
|
7004 else |
2f1f03964f08
(status_notify): Undo May 18 change.
Richard M. Stallman <rms@gnu.org>
parents:
12132
diff
changeset
|
7005 deactivate_process (proc); |
578 | 7006 } |
12215
2f1f03964f08
(status_notify): Undo May 18 change.
Richard M. Stallman <rms@gnu.org>
parents:
12132
diff
changeset
|
7007 |
16464
c1f19d8e5b80
(status_notify): Update p->tick again
Richard M. Stallman <rms@gnu.org>
parents:
16220
diff
changeset
|
7008 /* The actions above may have further incremented p->tick. |
c1f19d8e5b80
(status_notify): Update p->tick again
Richard M. Stallman <rms@gnu.org>
parents:
16220
diff
changeset
|
7009 So set p->update_tick again |
c1f19d8e5b80
(status_notify): Update p->tick again
Richard M. Stallman <rms@gnu.org>
parents:
16220
diff
changeset
|
7010 so that an error in the sentinel will not cause |
c1f19d8e5b80
(status_notify): Update p->tick again
Richard M. Stallman <rms@gnu.org>
parents:
16220
diff
changeset
|
7011 this code to be run again. */ |
81826
077a1e6fd3f2
(struct Lisp_Process): Turn slots infd, outfd, kill_without_query, pty_flag,
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
80984
diff
changeset
|
7012 p->update_tick = p->tick; |
12215
2f1f03964f08
(status_notify): Undo May 18 change.
Richard M. Stallman <rms@gnu.org>
parents:
12132
diff
changeset
|
7013 /* Now output the message suitably. */ |
2f1f03964f08
(status_notify): Undo May 18 change.
Richard M. Stallman <rms@gnu.org>
parents:
12132
diff
changeset
|
7014 if (!NILP (p->sentinel)) |
2f1f03964f08
(status_notify): Undo May 18 change.
Richard M. Stallman <rms@gnu.org>
parents:
12132
diff
changeset
|
7015 exec_sentinel (proc, msg); |
2f1f03964f08
(status_notify): Undo May 18 change.
Richard M. Stallman <rms@gnu.org>
parents:
12132
diff
changeset
|
7016 /* Don't bother with a message in the buffer |
2f1f03964f08
(status_notify): Undo May 18 change.
Richard M. Stallman <rms@gnu.org>
parents:
12132
diff
changeset
|
7017 when a process becomes runnable. */ |
2f1f03964f08
(status_notify): Undo May 18 change.
Richard M. Stallman <rms@gnu.org>
parents:
12132
diff
changeset
|
7018 else if (!EQ (symbol, Qrun) && !NILP (buffer)) |
2f1f03964f08
(status_notify): Undo May 18 change.
Richard M. Stallman <rms@gnu.org>
parents:
12132
diff
changeset
|
7019 { |
2f1f03964f08
(status_notify): Undo May 18 change.
Richard M. Stallman <rms@gnu.org>
parents:
12132
diff
changeset
|
7020 Lisp_Object ro, tem; |
2f1f03964f08
(status_notify): Undo May 18 change.
Richard M. Stallman <rms@gnu.org>
parents:
12132
diff
changeset
|
7021 struct buffer *old = current_buffer; |
20551
5f17380c85f1
(status_notify): Use byte and char pointers.
Richard M. Stallman <rms@gnu.org>
parents:
20433
diff
changeset
|
7022 int opoint, opoint_byte; |
5f17380c85f1
(status_notify): Use byte and char pointers.
Richard M. Stallman <rms@gnu.org>
parents:
20433
diff
changeset
|
7023 int before, before_byte; |
12215
2f1f03964f08
(status_notify): Undo May 18 change.
Richard M. Stallman <rms@gnu.org>
parents:
12132
diff
changeset
|
7024 |
2f1f03964f08
(status_notify): Undo May 18 change.
Richard M. Stallman <rms@gnu.org>
parents:
12132
diff
changeset
|
7025 ro = XBUFFER (buffer)->read_only; |
2f1f03964f08
(status_notify): Undo May 18 change.
Richard M. Stallman <rms@gnu.org>
parents:
12132
diff
changeset
|
7026 |
2f1f03964f08
(status_notify): Undo May 18 change.
Richard M. Stallman <rms@gnu.org>
parents:
12132
diff
changeset
|
7027 /* Avoid error if buffer is deleted |
2f1f03964f08
(status_notify): Undo May 18 change.
Richard M. Stallman <rms@gnu.org>
parents:
12132
diff
changeset
|
7028 (probably that's why the process is dead, too) */ |
2f1f03964f08
(status_notify): Undo May 18 change.
Richard M. Stallman <rms@gnu.org>
parents:
12132
diff
changeset
|
7029 if (NILP (XBUFFER (buffer)->name)) |
2f1f03964f08
(status_notify): Undo May 18 change.
Richard M. Stallman <rms@gnu.org>
parents:
12132
diff
changeset
|
7030 continue; |
2f1f03964f08
(status_notify): Undo May 18 change.
Richard M. Stallman <rms@gnu.org>
parents:
12132
diff
changeset
|
7031 Fset_buffer (buffer); |
17604
77b137e2d9a7
(read_process_output): Update opoint, old_begv and old_zv
Richard M. Stallman <rms@gnu.org>
parents:
17247
diff
changeset
|
7032 |
16039
855c8d8ba0f0
Change all references from point to PT.
Karl Heuer <kwzh@gnu.org>
parents:
15895
diff
changeset
|
7033 opoint = PT; |
20551
5f17380c85f1
(status_notify): Use byte and char pointers.
Richard M. Stallman <rms@gnu.org>
parents:
20433
diff
changeset
|
7034 opoint_byte = PT_BYTE; |
12215
2f1f03964f08
(status_notify): Undo May 18 change.
Richard M. Stallman <rms@gnu.org>
parents:
12132
diff
changeset
|
7035 /* Insert new output into buffer |
2f1f03964f08
(status_notify): Undo May 18 change.
Richard M. Stallman <rms@gnu.org>
parents:
12132
diff
changeset
|
7036 at the current end-of-output marker, |
2f1f03964f08
(status_notify): Undo May 18 change.
Richard M. Stallman <rms@gnu.org>
parents:
12132
diff
changeset
|
7037 thus preserving logical ordering of input and output. */ |
2f1f03964f08
(status_notify): Undo May 18 change.
Richard M. Stallman <rms@gnu.org>
parents:
12132
diff
changeset
|
7038 if (XMARKER (p->mark)->buffer) |
20551
5f17380c85f1
(status_notify): Use byte and char pointers.
Richard M. Stallman <rms@gnu.org>
parents:
20433
diff
changeset
|
7039 Fgoto_char (p->mark); |
12215
2f1f03964f08
(status_notify): Undo May 18 change.
Richard M. Stallman <rms@gnu.org>
parents:
12132
diff
changeset
|
7040 else |
20551
5f17380c85f1
(status_notify): Use byte and char pointers.
Richard M. Stallman <rms@gnu.org>
parents:
20433
diff
changeset
|
7041 SET_PT_BOTH (ZV, ZV_BYTE); |
17604
77b137e2d9a7
(read_process_output): Update opoint, old_begv and old_zv
Richard M. Stallman <rms@gnu.org>
parents:
17247
diff
changeset
|
7042 |
77b137e2d9a7
(read_process_output): Update opoint, old_begv and old_zv
Richard M. Stallman <rms@gnu.org>
parents:
17247
diff
changeset
|
7043 before = PT; |
20551
5f17380c85f1
(status_notify): Use byte and char pointers.
Richard M. Stallman <rms@gnu.org>
parents:
20433
diff
changeset
|
7044 before_byte = PT_BYTE; |
12215
2f1f03964f08
(status_notify): Undo May 18 change.
Richard M. Stallman <rms@gnu.org>
parents:
12132
diff
changeset
|
7045 |
2f1f03964f08
(status_notify): Undo May 18 change.
Richard M. Stallman <rms@gnu.org>
parents:
12132
diff
changeset
|
7046 tem = current_buffer->read_only; |
2f1f03964f08
(status_notify): Undo May 18 change.
Richard M. Stallman <rms@gnu.org>
parents:
12132
diff
changeset
|
7047 current_buffer->read_only = Qnil; |
2f1f03964f08
(status_notify): Undo May 18 change.
Richard M. Stallman <rms@gnu.org>
parents:
12132
diff
changeset
|
7048 insert_string ("\nProcess "); |
2f1f03964f08
(status_notify): Undo May 18 change.
Richard M. Stallman <rms@gnu.org>
parents:
12132
diff
changeset
|
7049 Finsert (1, &p->name); |
2f1f03964f08
(status_notify): Undo May 18 change.
Richard M. Stallman <rms@gnu.org>
parents:
12132
diff
changeset
|
7050 insert_string (" "); |
2f1f03964f08
(status_notify): Undo May 18 change.
Richard M. Stallman <rms@gnu.org>
parents:
12132
diff
changeset
|
7051 Finsert (1, &msg); |
2f1f03964f08
(status_notify): Undo May 18 change.
Richard M. Stallman <rms@gnu.org>
parents:
12132
diff
changeset
|
7052 current_buffer->read_only = tem; |
20551
5f17380c85f1
(status_notify): Use byte and char pointers.
Richard M. Stallman <rms@gnu.org>
parents:
20433
diff
changeset
|
7053 set_marker_both (p->mark, p->buffer, PT, PT_BYTE); |
12215
2f1f03964f08
(status_notify): Undo May 18 change.
Richard M. Stallman <rms@gnu.org>
parents:
12132
diff
changeset
|
7054 |
17604
77b137e2d9a7
(read_process_output): Update opoint, old_begv and old_zv
Richard M. Stallman <rms@gnu.org>
parents:
17247
diff
changeset
|
7055 if (opoint >= before) |
20551
5f17380c85f1
(status_notify): Use byte and char pointers.
Richard M. Stallman <rms@gnu.org>
parents:
20433
diff
changeset
|
7056 SET_PT_BOTH (opoint + (PT - before), |
5f17380c85f1
(status_notify): Use byte and char pointers.
Richard M. Stallman <rms@gnu.org>
parents:
20433
diff
changeset
|
7057 opoint_byte + (PT_BYTE - before_byte)); |
17604
77b137e2d9a7
(read_process_output): Update opoint, old_begv and old_zv
Richard M. Stallman <rms@gnu.org>
parents:
17247
diff
changeset
|
7058 else |
20551
5f17380c85f1
(status_notify): Use byte and char pointers.
Richard M. Stallman <rms@gnu.org>
parents:
20433
diff
changeset
|
7059 SET_PT_BOTH (opoint, opoint_byte); |
17604
77b137e2d9a7
(read_process_output): Update opoint, old_begv and old_zv
Richard M. Stallman <rms@gnu.org>
parents:
17247
diff
changeset
|
7060 |
12215
2f1f03964f08
(status_notify): Undo May 18 change.
Richard M. Stallman <rms@gnu.org>
parents:
12132
diff
changeset
|
7061 set_buffer_internal (old); |
2f1f03964f08
(status_notify): Undo May 18 change.
Richard M. Stallman <rms@gnu.org>
parents:
12132
diff
changeset
|
7062 } |
2f1f03964f08
(status_notify): Undo May 18 change.
Richard M. Stallman <rms@gnu.org>
parents:
12132
diff
changeset
|
7063 } |
2f1f03964f08
(status_notify): Undo May 18 change.
Richard M. Stallman <rms@gnu.org>
parents:
12132
diff
changeset
|
7064 } /* end for */ |
578 | 7065 |
7066 update_mode_lines++; /* in case buffers use %s in mode-line-format */ | |
7067 UNGCPRO; | |
7068 } | |
17041
b61cbe595be5
Include charset.h and coding.h.
Karl Heuer <kwzh@gnu.org>
parents:
16780
diff
changeset
|
7069 |
b61cbe595be5
Include charset.h and coding.h.
Karl Heuer <kwzh@gnu.org>
parents:
16780
diff
changeset
|
7070 |
b61cbe595be5
Include charset.h and coding.h.
Karl Heuer <kwzh@gnu.org>
parents:
16780
diff
changeset
|
7071 DEFUN ("set-process-coding-system", Fset_process_coding_system, |
b61cbe595be5
Include charset.h and coding.h.
Karl Heuer <kwzh@gnu.org>
parents:
16780
diff
changeset
|
7072 Sset_process_coding_system, 1, 3, 0, |
40103
6b389fb978bc
Change doc-string comments to `new style' [w/`doc:' keyword].
Pavel Janík <Pavel@Janik.cz>
parents:
39973
diff
changeset
|
7073 doc: /* Set coding systems of PROCESS to DECODING and ENCODING. |
6b389fb978bc
Change doc-string comments to `new style' [w/`doc:' keyword].
Pavel Janík <Pavel@Janik.cz>
parents:
39973
diff
changeset
|
7074 DECODING will be used to decode subprocess output and ENCODING to |
6b389fb978bc
Change doc-string comments to `new style' [w/`doc:' keyword].
Pavel Janík <Pavel@Janik.cz>
parents:
39973
diff
changeset
|
7075 encode subprocess input. */) |
55444
976d03256b41
(Fwaiting_for_user_input_p, Fmake_network_process)
Juanma Barranquero <lekktu@gmail.com>
parents:
53835
diff
changeset
|
7076 (process, decoding, encoding) |
976d03256b41
(Fwaiting_for_user_input_p, Fmake_network_process)
Juanma Barranquero <lekktu@gmail.com>
parents:
53835
diff
changeset
|
7077 register Lisp_Object process, decoding, encoding; |
17041
b61cbe595be5
Include charset.h and coding.h.
Karl Heuer <kwzh@gnu.org>
parents:
16780
diff
changeset
|
7078 { |
b61cbe595be5
Include charset.h and coding.h.
Karl Heuer <kwzh@gnu.org>
parents:
16780
diff
changeset
|
7079 register struct Lisp_Process *p; |
b61cbe595be5
Include charset.h and coding.h.
Karl Heuer <kwzh@gnu.org>
parents:
16780
diff
changeset
|
7080 |
55444
976d03256b41
(Fwaiting_for_user_input_p, Fmake_network_process)
Juanma Barranquero <lekktu@gmail.com>
parents:
53835
diff
changeset
|
7081 CHECK_PROCESS (process); |
976d03256b41
(Fwaiting_for_user_input_p, Fmake_network_process)
Juanma Barranquero <lekktu@gmail.com>
parents:
53835
diff
changeset
|
7082 p = XPROCESS (process); |
81826
077a1e6fd3f2
(struct Lisp_Process): Turn slots infd, outfd, kill_without_query, pty_flag,
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
80984
diff
changeset
|
7083 if (p->infd < 0) |
46370
40db0673e6f0
Most uses of XSTRING combined with STRING_BYTES or indirection changed to
Ken Raeburn <raeburn@raeburn.org>
parents:
46314
diff
changeset
|
7084 error ("Input file descriptor of %s closed", SDATA (p->name)); |
81826
077a1e6fd3f2
(struct Lisp_Process): Turn slots infd, outfd, kill_without_query, pty_flag,
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
80984
diff
changeset
|
7085 if (p->outfd < 0) |
46370
40db0673e6f0
Most uses of XSTRING combined with STRING_BYTES or indirection changed to
Ken Raeburn <raeburn@raeburn.org>
parents:
46314
diff
changeset
|
7086 error ("Output file descriptor of %s closed", SDATA (p->name)); |
49667
cbec1327e2f1
(QCfilter_multibyte): New variable.
Kenichi Handa <handa@m17n.org>
parents:
49600
diff
changeset
|
7087 Fcheck_coding_system (decoding); |
cbec1327e2f1
(QCfilter_multibyte): New variable.
Kenichi Handa <handa@m17n.org>
parents:
49600
diff
changeset
|
7088 Fcheck_coding_system (encoding); |
90392
8b24a6ec5090
(setup_process_coding_systems): Fix synching with
Kenichi Handa <handa@m17n.org>
parents:
90389
diff
changeset
|
7089 encoding = coding_inherit_eol_type (encoding, Qnil); |
49667
cbec1327e2f1
(QCfilter_multibyte): New variable.
Kenichi Handa <handa@m17n.org>
parents:
49600
diff
changeset
|
7090 p->decode_coding_system = decoding; |
cbec1327e2f1
(QCfilter_multibyte): New variable.
Kenichi Handa <handa@m17n.org>
parents:
49600
diff
changeset
|
7091 p->encode_coding_system = encoding; |
55444
976d03256b41
(Fwaiting_for_user_input_p, Fmake_network_process)
Juanma Barranquero <lekktu@gmail.com>
parents:
53835
diff
changeset
|
7092 setup_process_coding_systems (process); |
17041
b61cbe595be5
Include charset.h and coding.h.
Karl Heuer <kwzh@gnu.org>
parents:
16780
diff
changeset
|
7093 |
b61cbe595be5
Include charset.h and coding.h.
Karl Heuer <kwzh@gnu.org>
parents:
16780
diff
changeset
|
7094 return Qnil; |
b61cbe595be5
Include charset.h and coding.h.
Karl Heuer <kwzh@gnu.org>
parents:
16780
diff
changeset
|
7095 } |
b61cbe595be5
Include charset.h and coding.h.
Karl Heuer <kwzh@gnu.org>
parents:
16780
diff
changeset
|
7096 |
b61cbe595be5
Include charset.h and coding.h.
Karl Heuer <kwzh@gnu.org>
parents:
16780
diff
changeset
|
7097 DEFUN ("process-coding-system", |
b61cbe595be5
Include charset.h and coding.h.
Karl Heuer <kwzh@gnu.org>
parents:
16780
diff
changeset
|
7098 Fprocess_coding_system, Sprocess_coding_system, 1, 1, 0, |
40103
6b389fb978bc
Change doc-string comments to `new style' [w/`doc:' keyword].
Pavel Janík <Pavel@Janik.cz>
parents:
39973
diff
changeset
|
7099 doc: /* Return a cons of coding systems for decoding and encoding of PROCESS. */) |
55444
976d03256b41
(Fwaiting_for_user_input_p, Fmake_network_process)
Juanma Barranquero <lekktu@gmail.com>
parents:
53835
diff
changeset
|
7100 (process) |
976d03256b41
(Fwaiting_for_user_input_p, Fmake_network_process)
Juanma Barranquero <lekktu@gmail.com>
parents:
53835
diff
changeset
|
7101 register Lisp_Object process; |
17041
b61cbe595be5
Include charset.h and coding.h.
Karl Heuer <kwzh@gnu.org>
parents:
16780
diff
changeset
|
7102 { |
55444
976d03256b41
(Fwaiting_for_user_input_p, Fmake_network_process)
Juanma Barranquero <lekktu@gmail.com>
parents:
53835
diff
changeset
|
7103 CHECK_PROCESS (process); |
976d03256b41
(Fwaiting_for_user_input_p, Fmake_network_process)
Juanma Barranquero <lekktu@gmail.com>
parents:
53835
diff
changeset
|
7104 return Fcons (XPROCESS (process)->decode_coding_system, |
976d03256b41
(Fwaiting_for_user_input_p, Fmake_network_process)
Juanma Barranquero <lekktu@gmail.com>
parents:
53835
diff
changeset
|
7105 XPROCESS (process)->encode_coding_system); |
17041
b61cbe595be5
Include charset.h and coding.h.
Karl Heuer <kwzh@gnu.org>
parents:
16780
diff
changeset
|
7106 } |
49667
cbec1327e2f1
(QCfilter_multibyte): New variable.
Kenichi Handa <handa@m17n.org>
parents:
49600
diff
changeset
|
7107 |
cbec1327e2f1
(QCfilter_multibyte): New variable.
Kenichi Handa <handa@m17n.org>
parents:
49600
diff
changeset
|
7108 DEFUN ("set-process-filter-multibyte", Fset_process_filter_multibyte, |
cbec1327e2f1
(QCfilter_multibyte): New variable.
Kenichi Handa <handa@m17n.org>
parents:
49600
diff
changeset
|
7109 Sset_process_filter_multibyte, 2, 2, 0, |
49680 | 7110 doc: /* Set multibyteness of the strings given to PROCESS's filter. |
7111 If FLAG is non-nil, the filter is given multibyte strings. | |
7112 If FLAG is nil, the filter is given unibyte strings. In this case, | |
49667
cbec1327e2f1
(QCfilter_multibyte): New variable.
Kenichi Handa <handa@m17n.org>
parents:
49600
diff
changeset
|
7113 all character code conversion except for end-of-line conversion is |
cbec1327e2f1
(QCfilter_multibyte): New variable.
Kenichi Handa <handa@m17n.org>
parents:
49600
diff
changeset
|
7114 suppressed. */) |
55444
976d03256b41
(Fwaiting_for_user_input_p, Fmake_network_process)
Juanma Barranquero <lekktu@gmail.com>
parents:
53835
diff
changeset
|
7115 (process, flag) |
976d03256b41
(Fwaiting_for_user_input_p, Fmake_network_process)
Juanma Barranquero <lekktu@gmail.com>
parents:
53835
diff
changeset
|
7116 Lisp_Object process, flag; |
49667
cbec1327e2f1
(QCfilter_multibyte): New variable.
Kenichi Handa <handa@m17n.org>
parents:
49600
diff
changeset
|
7117 { |
cbec1327e2f1
(QCfilter_multibyte): New variable.
Kenichi Handa <handa@m17n.org>
parents:
49600
diff
changeset
|
7118 register struct Lisp_Process *p; |
cbec1327e2f1
(QCfilter_multibyte): New variable.
Kenichi Handa <handa@m17n.org>
parents:
49600
diff
changeset
|
7119 |
55444
976d03256b41
(Fwaiting_for_user_input_p, Fmake_network_process)
Juanma Barranquero <lekktu@gmail.com>
parents:
53835
diff
changeset
|
7120 CHECK_PROCESS (process); |
976d03256b41
(Fwaiting_for_user_input_p, Fmake_network_process)
Juanma Barranquero <lekktu@gmail.com>
parents:
53835
diff
changeset
|
7121 p = XPROCESS (process); |
93201
5dbe361f12c2
* process.h (struct Lisp_Process): Remove filter_multibyte.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
92266
diff
changeset
|
7122 if (NILP (flag)) |
5dbe361f12c2
* process.h (struct Lisp_Process): Remove filter_multibyte.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
92266
diff
changeset
|
7123 p->decode_coding_system = raw_text_coding_system (p->decode_coding_system); |
55444
976d03256b41
(Fwaiting_for_user_input_p, Fmake_network_process)
Juanma Barranquero <lekktu@gmail.com>
parents:
53835
diff
changeset
|
7124 setup_process_coding_systems (process); |
49667
cbec1327e2f1
(QCfilter_multibyte): New variable.
Kenichi Handa <handa@m17n.org>
parents:
49600
diff
changeset
|
7125 |
cbec1327e2f1
(QCfilter_multibyte): New variable.
Kenichi Handa <handa@m17n.org>
parents:
49600
diff
changeset
|
7126 return Qnil; |
cbec1327e2f1
(QCfilter_multibyte): New variable.
Kenichi Handa <handa@m17n.org>
parents:
49600
diff
changeset
|
7127 } |
cbec1327e2f1
(QCfilter_multibyte): New variable.
Kenichi Handa <handa@m17n.org>
parents:
49600
diff
changeset
|
7128 |
cbec1327e2f1
(QCfilter_multibyte): New variable.
Kenichi Handa <handa@m17n.org>
parents:
49600
diff
changeset
|
7129 DEFUN ("process-filter-multibyte-p", Fprocess_filter_multibyte_p, |
cbec1327e2f1
(QCfilter_multibyte): New variable.
Kenichi Handa <handa@m17n.org>
parents:
49600
diff
changeset
|
7130 Sprocess_filter_multibyte_p, 1, 1, 0, |
cbec1327e2f1
(QCfilter_multibyte): New variable.
Kenichi Handa <handa@m17n.org>
parents:
49600
diff
changeset
|
7131 doc: /* Return t if a multibyte string is given to PROCESS's filter.*/) |
55444
976d03256b41
(Fwaiting_for_user_input_p, Fmake_network_process)
Juanma Barranquero <lekktu@gmail.com>
parents:
53835
diff
changeset
|
7132 (process) |
976d03256b41
(Fwaiting_for_user_input_p, Fmake_network_process)
Juanma Barranquero <lekktu@gmail.com>
parents:
53835
diff
changeset
|
7133 Lisp_Object process; |
49667
cbec1327e2f1
(QCfilter_multibyte): New variable.
Kenichi Handa <handa@m17n.org>
parents:
49600
diff
changeset
|
7134 { |
cbec1327e2f1
(QCfilter_multibyte): New variable.
Kenichi Handa <handa@m17n.org>
parents:
49600
diff
changeset
|
7135 register struct Lisp_Process *p; |
93201
5dbe361f12c2
* process.h (struct Lisp_Process): Remove filter_multibyte.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
92266
diff
changeset
|
7136 struct coding_system *coding; |
49667
cbec1327e2f1
(QCfilter_multibyte): New variable.
Kenichi Handa <handa@m17n.org>
parents:
49600
diff
changeset
|
7137 |
55444
976d03256b41
(Fwaiting_for_user_input_p, Fmake_network_process)
Juanma Barranquero <lekktu@gmail.com>
parents:
53835
diff
changeset
|
7138 CHECK_PROCESS (process); |
976d03256b41
(Fwaiting_for_user_input_p, Fmake_network_process)
Juanma Barranquero <lekktu@gmail.com>
parents:
53835
diff
changeset
|
7139 p = XPROCESS (process); |
93201
5dbe361f12c2
* process.h (struct Lisp_Process): Remove filter_multibyte.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
92266
diff
changeset
|
7140 coding = proc_decode_coding_system[p->infd]; |
5dbe361f12c2
* process.h (struct Lisp_Process): Remove filter_multibyte.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
92266
diff
changeset
|
7141 return (CODING_FOR_UNIBYTE (coding) ? Qnil : Qt); |
49667
cbec1327e2f1
(QCfilter_multibyte): New variable.
Kenichi Handa <handa@m17n.org>
parents:
49600
diff
changeset
|
7142 } |
cbec1327e2f1
(QCfilter_multibyte): New variable.
Kenichi Handa <handa@m17n.org>
parents:
49600
diff
changeset
|
7143 |
cbec1327e2f1
(QCfilter_multibyte): New variable.
Kenichi Handa <handa@m17n.org>
parents:
49600
diff
changeset
|
7144 |
578 | 7145 |
83025
c66ebcc29777
Removed %T in mode-line-format. Trivial documentation changes.
Karoly Lorentey <lorentey@elte.hu>
parents:
83019
diff
changeset
|
7146 /* Add DESC to the set of keyboard input descriptors. */ |
9686
cd788aa8cb2a
Handle multiple keyboard input descriptors.
Richard M. Stallman <rms@gnu.org>
parents:
9334
diff
changeset
|
7147 |
cd788aa8cb2a
Handle multiple keyboard input descriptors.
Richard M. Stallman <rms@gnu.org>
parents:
9334
diff
changeset
|
7148 void |
cd788aa8cb2a
Handle multiple keyboard input descriptors.
Richard M. Stallman <rms@gnu.org>
parents:
9334
diff
changeset
|
7149 add_keyboard_wait_descriptor (desc) |
cd788aa8cb2a
Handle multiple keyboard input descriptors.
Richard M. Stallman <rms@gnu.org>
parents:
9334
diff
changeset
|
7150 int desc; |
cd788aa8cb2a
Handle multiple keyboard input descriptors.
Richard M. Stallman <rms@gnu.org>
parents:
9334
diff
changeset
|
7151 { |
cd788aa8cb2a
Handle multiple keyboard input descriptors.
Richard M. Stallman <rms@gnu.org>
parents:
9334
diff
changeset
|
7152 FD_SET (desc, &input_wait_mask); |
17224
dd2545e79add
(wait_reading_process_input): If wait_for_cell,
Richard M. Stallman <rms@gnu.org>
parents:
17110
diff
changeset
|
7153 FD_SET (desc, &non_process_wait_mask); |
9686
cd788aa8cb2a
Handle multiple keyboard input descriptors.
Richard M. Stallman <rms@gnu.org>
parents:
9334
diff
changeset
|
7154 if (desc > max_keyboard_desc) |
cd788aa8cb2a
Handle multiple keyboard input descriptors.
Richard M. Stallman <rms@gnu.org>
parents:
9334
diff
changeset
|
7155 max_keyboard_desc = desc; |
cd788aa8cb2a
Handle multiple keyboard input descriptors.
Richard M. Stallman <rms@gnu.org>
parents:
9334
diff
changeset
|
7156 } |
cd788aa8cb2a
Handle multiple keyboard input descriptors.
Richard M. Stallman <rms@gnu.org>
parents:
9334
diff
changeset
|
7157 |
80984
9247e9d47488
(gpm_wait_mask, max_gpm_desc): New variables.
Nick Roberts <nickrob@snap.net.nz>
parents:
77462
diff
changeset
|
7158 static int add_gpm_wait_descriptor_called_flag; |
9247e9d47488
(gpm_wait_mask, max_gpm_desc): New variables.
Nick Roberts <nickrob@snap.net.nz>
parents:
77462
diff
changeset
|
7159 |
9247e9d47488
(gpm_wait_mask, max_gpm_desc): New variables.
Nick Roberts <nickrob@snap.net.nz>
parents:
77462
diff
changeset
|
7160 void |
9247e9d47488
(gpm_wait_mask, max_gpm_desc): New variables.
Nick Roberts <nickrob@snap.net.nz>
parents:
77462
diff
changeset
|
7161 add_gpm_wait_descriptor (desc) |
9247e9d47488
(gpm_wait_mask, max_gpm_desc): New variables.
Nick Roberts <nickrob@snap.net.nz>
parents:
77462
diff
changeset
|
7162 int desc; |
9247e9d47488
(gpm_wait_mask, max_gpm_desc): New variables.
Nick Roberts <nickrob@snap.net.nz>
parents:
77462
diff
changeset
|
7163 { |
9247e9d47488
(gpm_wait_mask, max_gpm_desc): New variables.
Nick Roberts <nickrob@snap.net.nz>
parents:
77462
diff
changeset
|
7164 if (! add_gpm_wait_descriptor_called_flag) |
9247e9d47488
(gpm_wait_mask, max_gpm_desc): New variables.
Nick Roberts <nickrob@snap.net.nz>
parents:
77462
diff
changeset
|
7165 FD_CLR (0, &input_wait_mask); |
9247e9d47488
(gpm_wait_mask, max_gpm_desc): New variables.
Nick Roberts <nickrob@snap.net.nz>
parents:
77462
diff
changeset
|
7166 add_gpm_wait_descriptor_called_flag = 1; |
9247e9d47488
(gpm_wait_mask, max_gpm_desc): New variables.
Nick Roberts <nickrob@snap.net.nz>
parents:
77462
diff
changeset
|
7167 FD_SET (desc, &input_wait_mask); |
9247e9d47488
(gpm_wait_mask, max_gpm_desc): New variables.
Nick Roberts <nickrob@snap.net.nz>
parents:
77462
diff
changeset
|
7168 FD_SET (desc, &gpm_wait_mask); |
9247e9d47488
(gpm_wait_mask, max_gpm_desc): New variables.
Nick Roberts <nickrob@snap.net.nz>
parents:
77462
diff
changeset
|
7169 if (desc > max_gpm_desc) |
9247e9d47488
(gpm_wait_mask, max_gpm_desc): New variables.
Nick Roberts <nickrob@snap.net.nz>
parents:
77462
diff
changeset
|
7170 max_gpm_desc = desc; |
9247e9d47488
(gpm_wait_mask, max_gpm_desc): New variables.
Nick Roberts <nickrob@snap.net.nz>
parents:
77462
diff
changeset
|
7171 } |
9247e9d47488
(gpm_wait_mask, max_gpm_desc): New variables.
Nick Roberts <nickrob@snap.net.nz>
parents:
77462
diff
changeset
|
7172 |
9686
cd788aa8cb2a
Handle multiple keyboard input descriptors.
Richard M. Stallman <rms@gnu.org>
parents:
9334
diff
changeset
|
7173 /* From now on, do not expect DESC to give keyboard input. */ |
cd788aa8cb2a
Handle multiple keyboard input descriptors.
Richard M. Stallman <rms@gnu.org>
parents:
9334
diff
changeset
|
7174 |
cd788aa8cb2a
Handle multiple keyboard input descriptors.
Richard M. Stallman <rms@gnu.org>
parents:
9334
diff
changeset
|
7175 void |
cd788aa8cb2a
Handle multiple keyboard input descriptors.
Richard M. Stallman <rms@gnu.org>
parents:
9334
diff
changeset
|
7176 delete_keyboard_wait_descriptor (desc) |
cd788aa8cb2a
Handle multiple keyboard input descriptors.
Richard M. Stallman <rms@gnu.org>
parents:
9334
diff
changeset
|
7177 int desc; |
cd788aa8cb2a
Handle multiple keyboard input descriptors.
Richard M. Stallman <rms@gnu.org>
parents:
9334
diff
changeset
|
7178 { |
cd788aa8cb2a
Handle multiple keyboard input descriptors.
Richard M. Stallman <rms@gnu.org>
parents:
9334
diff
changeset
|
7179 int fd; |
cd788aa8cb2a
Handle multiple keyboard input descriptors.
Richard M. Stallman <rms@gnu.org>
parents:
9334
diff
changeset
|
7180 int lim = max_keyboard_desc; |
cd788aa8cb2a
Handle multiple keyboard input descriptors.
Richard M. Stallman <rms@gnu.org>
parents:
9334
diff
changeset
|
7181 |
cd788aa8cb2a
Handle multiple keyboard input descriptors.
Richard M. Stallman <rms@gnu.org>
parents:
9334
diff
changeset
|
7182 FD_CLR (desc, &input_wait_mask); |
17224
dd2545e79add
(wait_reading_process_input): If wait_for_cell,
Richard M. Stallman <rms@gnu.org>
parents:
17110
diff
changeset
|
7183 FD_CLR (desc, &non_process_wait_mask); |
9686
cd788aa8cb2a
Handle multiple keyboard input descriptors.
Richard M. Stallman <rms@gnu.org>
parents:
9334
diff
changeset
|
7184 |
cd788aa8cb2a
Handle multiple keyboard input descriptors.
Richard M. Stallman <rms@gnu.org>
parents:
9334
diff
changeset
|
7185 if (desc == max_keyboard_desc) |
cd788aa8cb2a
Handle multiple keyboard input descriptors.
Richard M. Stallman <rms@gnu.org>
parents:
9334
diff
changeset
|
7186 for (fd = 0; fd < lim; fd++) |
cd788aa8cb2a
Handle multiple keyboard input descriptors.
Richard M. Stallman <rms@gnu.org>
parents:
9334
diff
changeset
|
7187 if (FD_ISSET (fd, &input_wait_mask) |
80984
9247e9d47488
(gpm_wait_mask, max_gpm_desc): New variables.
Nick Roberts <nickrob@snap.net.nz>
parents:
77462
diff
changeset
|
7188 && !FD_ISSET (fd, &non_keyboard_wait_mask) |
9247e9d47488
(gpm_wait_mask, max_gpm_desc): New variables.
Nick Roberts <nickrob@snap.net.nz>
parents:
77462
diff
changeset
|
7189 && !FD_ISSET (fd, &gpm_wait_mask)) |
9686
cd788aa8cb2a
Handle multiple keyboard input descriptors.
Richard M. Stallman <rms@gnu.org>
parents:
9334
diff
changeset
|
7190 max_keyboard_desc = fd; |
cd788aa8cb2a
Handle multiple keyboard input descriptors.
Richard M. Stallman <rms@gnu.org>
parents:
9334
diff
changeset
|
7191 } |
cd788aa8cb2a
Handle multiple keyboard input descriptors.
Richard M. Stallman <rms@gnu.org>
parents:
9334
diff
changeset
|
7192 |
80984
9247e9d47488
(gpm_wait_mask, max_gpm_desc): New variables.
Nick Roberts <nickrob@snap.net.nz>
parents:
77462
diff
changeset
|
7193 void |
9247e9d47488
(gpm_wait_mask, max_gpm_desc): New variables.
Nick Roberts <nickrob@snap.net.nz>
parents:
77462
diff
changeset
|
7194 delete_gpm_wait_descriptor (desc) |
9247e9d47488
(gpm_wait_mask, max_gpm_desc): New variables.
Nick Roberts <nickrob@snap.net.nz>
parents:
77462
diff
changeset
|
7195 int desc; |
9247e9d47488
(gpm_wait_mask, max_gpm_desc): New variables.
Nick Roberts <nickrob@snap.net.nz>
parents:
77462
diff
changeset
|
7196 { |
9247e9d47488
(gpm_wait_mask, max_gpm_desc): New variables.
Nick Roberts <nickrob@snap.net.nz>
parents:
77462
diff
changeset
|
7197 int fd; |
9247e9d47488
(gpm_wait_mask, max_gpm_desc): New variables.
Nick Roberts <nickrob@snap.net.nz>
parents:
77462
diff
changeset
|
7198 int lim = max_gpm_desc; |
9247e9d47488
(gpm_wait_mask, max_gpm_desc): New variables.
Nick Roberts <nickrob@snap.net.nz>
parents:
77462
diff
changeset
|
7199 |
9247e9d47488
(gpm_wait_mask, max_gpm_desc): New variables.
Nick Roberts <nickrob@snap.net.nz>
parents:
77462
diff
changeset
|
7200 FD_CLR (desc, &input_wait_mask); |
9247e9d47488
(gpm_wait_mask, max_gpm_desc): New variables.
Nick Roberts <nickrob@snap.net.nz>
parents:
77462
diff
changeset
|
7201 FD_CLR (desc, &non_process_wait_mask); |
9247e9d47488
(gpm_wait_mask, max_gpm_desc): New variables.
Nick Roberts <nickrob@snap.net.nz>
parents:
77462
diff
changeset
|
7202 |
9247e9d47488
(gpm_wait_mask, max_gpm_desc): New variables.
Nick Roberts <nickrob@snap.net.nz>
parents:
77462
diff
changeset
|
7203 if (desc == max_gpm_desc) |
9247e9d47488
(gpm_wait_mask, max_gpm_desc): New variables.
Nick Roberts <nickrob@snap.net.nz>
parents:
77462
diff
changeset
|
7204 for (fd = 0; fd < lim; fd++) |
9247e9d47488
(gpm_wait_mask, max_gpm_desc): New variables.
Nick Roberts <nickrob@snap.net.nz>
parents:
77462
diff
changeset
|
7205 if (FD_ISSET (fd, &input_wait_mask) |
9247e9d47488
(gpm_wait_mask, max_gpm_desc): New variables.
Nick Roberts <nickrob@snap.net.nz>
parents:
77462
diff
changeset
|
7206 && !FD_ISSET (fd, &non_keyboard_wait_mask) |
9247e9d47488
(gpm_wait_mask, max_gpm_desc): New variables.
Nick Roberts <nickrob@snap.net.nz>
parents:
77462
diff
changeset
|
7207 && !FD_ISSET (fd, &non_process_wait_mask)) |
9247e9d47488
(gpm_wait_mask, max_gpm_desc): New variables.
Nick Roberts <nickrob@snap.net.nz>
parents:
77462
diff
changeset
|
7208 max_gpm_desc = fd; |
9247e9d47488
(gpm_wait_mask, max_gpm_desc): New variables.
Nick Roberts <nickrob@snap.net.nz>
parents:
77462
diff
changeset
|
7209 } |
9247e9d47488
(gpm_wait_mask, max_gpm_desc): New variables.
Nick Roberts <nickrob@snap.net.nz>
parents:
77462
diff
changeset
|
7210 |
9686
cd788aa8cb2a
Handle multiple keyboard input descriptors.
Richard M. Stallman <rms@gnu.org>
parents:
9334
diff
changeset
|
7211 /* Return nonzero if *MASK has a bit set |
cd788aa8cb2a
Handle multiple keyboard input descriptors.
Richard M. Stallman <rms@gnu.org>
parents:
9334
diff
changeset
|
7212 that corresponds to one of the keyboard input descriptors. */ |
cd788aa8cb2a
Handle multiple keyboard input descriptors.
Richard M. Stallman <rms@gnu.org>
parents:
9334
diff
changeset
|
7213 |
64977
d26871fb1b7b
(deactivate_process, status_notify, read_process_output)
Kim F. Storm <storm@cua.dk>
parents:
64770
diff
changeset
|
7214 static int |
9686
cd788aa8cb2a
Handle multiple keyboard input descriptors.
Richard M. Stallman <rms@gnu.org>
parents:
9334
diff
changeset
|
7215 keyboard_bit_set (mask) |
cd788aa8cb2a
Handle multiple keyboard input descriptors.
Richard M. Stallman <rms@gnu.org>
parents:
9334
diff
changeset
|
7216 SELECT_TYPE *mask; |
cd788aa8cb2a
Handle multiple keyboard input descriptors.
Richard M. Stallman <rms@gnu.org>
parents:
9334
diff
changeset
|
7217 { |
cd788aa8cb2a
Handle multiple keyboard input descriptors.
Richard M. Stallman <rms@gnu.org>
parents:
9334
diff
changeset
|
7218 int fd; |
cd788aa8cb2a
Handle multiple keyboard input descriptors.
Richard M. Stallman <rms@gnu.org>
parents:
9334
diff
changeset
|
7219 |
12541
33a4586124e9
(keyboard_bit_set): Fix one-off in loop end.
Karl Heuer <kwzh@gnu.org>
parents:
12491
diff
changeset
|
7220 for (fd = 0; fd <= max_keyboard_desc; fd++) |
9686
cd788aa8cb2a
Handle multiple keyboard input descriptors.
Richard M. Stallman <rms@gnu.org>
parents:
9334
diff
changeset
|
7221 if (FD_ISSET (fd, mask) && FD_ISSET (fd, &input_wait_mask) |
cd788aa8cb2a
Handle multiple keyboard input descriptors.
Richard M. Stallman <rms@gnu.org>
parents:
9334
diff
changeset
|
7222 && !FD_ISSET (fd, &non_keyboard_wait_mask)) |
cd788aa8cb2a
Handle multiple keyboard input descriptors.
Richard M. Stallman <rms@gnu.org>
parents:
9334
diff
changeset
|
7223 return 1; |
cd788aa8cb2a
Handle multiple keyboard input descriptors.
Richard M. Stallman <rms@gnu.org>
parents:
9334
diff
changeset
|
7224 |
cd788aa8cb2a
Handle multiple keyboard input descriptors.
Richard M. Stallman <rms@gnu.org>
parents:
9334
diff
changeset
|
7225 return 0; |
cd788aa8cb2a
Handle multiple keyboard input descriptors.
Richard M. Stallman <rms@gnu.org>
parents:
9334
diff
changeset
|
7226 } |
cd788aa8cb2a
Handle multiple keyboard input descriptors.
Richard M. Stallman <rms@gnu.org>
parents:
9334
diff
changeset
|
7227 |
97227
1d85638347af
(Fsystem_processes_list, Fsystem_process_attributes): New functions.
Eli Zaretskii <eliz@gnu.org>
parents:
97142
diff
changeset
|
7228 /* Enumeration of and access to system processes a-la ps(1). */ |
1d85638347af
(Fsystem_processes_list, Fsystem_process_attributes): New functions.
Eli Zaretskii <eliz@gnu.org>
parents:
97142
diff
changeset
|
7229 |
1d85638347af
(Fsystem_processes_list, Fsystem_process_attributes): New functions.
Eli Zaretskii <eliz@gnu.org>
parents:
97142
diff
changeset
|
7230 DEFUN ("list-system-processes", Flist_system_processes, Slist_system_processes, |
1d85638347af
(Fsystem_processes_list, Fsystem_process_attributes): New functions.
Eli Zaretskii <eliz@gnu.org>
parents:
97142
diff
changeset
|
7231 0, 0, 0, |
1d85638347af
(Fsystem_processes_list, Fsystem_process_attributes): New functions.
Eli Zaretskii <eliz@gnu.org>
parents:
97142
diff
changeset
|
7232 doc: /* Return a list of numerical process IDs of all running processes. |
1d85638347af
(Fsystem_processes_list, Fsystem_process_attributes): New functions.
Eli Zaretskii <eliz@gnu.org>
parents:
97142
diff
changeset
|
7233 If this functionality is unsupported, return nil. |
1d85638347af
(Fsystem_processes_list, Fsystem_process_attributes): New functions.
Eli Zaretskii <eliz@gnu.org>
parents:
97142
diff
changeset
|
7234 |
102205
0f4ba7f17aa0
Rename `system-process-attributes' to `process-attributes'
Miles Bader <miles@gnu.org>
parents:
101932
diff
changeset
|
7235 See `process-attributes' for getting attributes of a process given its ID. */) |
97227
1d85638347af
(Fsystem_processes_list, Fsystem_process_attributes): New functions.
Eli Zaretskii <eliz@gnu.org>
parents:
97142
diff
changeset
|
7236 () |
1d85638347af
(Fsystem_processes_list, Fsystem_process_attributes): New functions.
Eli Zaretskii <eliz@gnu.org>
parents:
97142
diff
changeset
|
7237 { |
100565
dcc7f5970d5c
Reorganize implementation of Flist_system_processes and
Dan Nicolaescu <dann@ics.uci.edu>
parents:
100443
diff
changeset
|
7238 return list_system_processes (); |
97227
1d85638347af
(Fsystem_processes_list, Fsystem_process_attributes): New functions.
Eli Zaretskii <eliz@gnu.org>
parents:
97142
diff
changeset
|
7239 } |
1d85638347af
(Fsystem_processes_list, Fsystem_process_attributes): New functions.
Eli Zaretskii <eliz@gnu.org>
parents:
97142
diff
changeset
|
7240 |
102205
0f4ba7f17aa0
Rename `system-process-attributes' to `process-attributes'
Miles Bader <miles@gnu.org>
parents:
101932
diff
changeset
|
7241 DEFUN ("process-attributes", Fprocess_attributes, |
0f4ba7f17aa0
Rename `system-process-attributes' to `process-attributes'
Miles Bader <miles@gnu.org>
parents:
101932
diff
changeset
|
7242 Sprocess_attributes, 1, 1, 0, |
97227
1d85638347af
(Fsystem_processes_list, Fsystem_process_attributes): New functions.
Eli Zaretskii <eliz@gnu.org>
parents:
97142
diff
changeset
|
7243 doc: /* Return attributes of the process given by its PID, a number. |
1d85638347af
(Fsystem_processes_list, Fsystem_process_attributes): New functions.
Eli Zaretskii <eliz@gnu.org>
parents:
97142
diff
changeset
|
7244 |
1d85638347af
(Fsystem_processes_list, Fsystem_process_attributes): New functions.
Eli Zaretskii <eliz@gnu.org>
parents:
97142
diff
changeset
|
7245 Value is an alist where each element is a cons cell of the form |
1d85638347af
(Fsystem_processes_list, Fsystem_process_attributes): New functions.
Eli Zaretskii <eliz@gnu.org>
parents:
97142
diff
changeset
|
7246 |
98062
f2a6b3265c21
(Fsystem_process_attributes): Doc fix.
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents:
97676
diff
changeset
|
7247 \(KEY . VALUE) |
97227
1d85638347af
(Fsystem_processes_list, Fsystem_process_attributes): New functions.
Eli Zaretskii <eliz@gnu.org>
parents:
97142
diff
changeset
|
7248 |
1d85638347af
(Fsystem_processes_list, Fsystem_process_attributes): New functions.
Eli Zaretskii <eliz@gnu.org>
parents:
97142
diff
changeset
|
7249 If this functionality is unsupported, the value is nil. |
1d85638347af
(Fsystem_processes_list, Fsystem_process_attributes): New functions.
Eli Zaretskii <eliz@gnu.org>
parents:
97142
diff
changeset
|
7250 |
1d85638347af
(Fsystem_processes_list, Fsystem_process_attributes): New functions.
Eli Zaretskii <eliz@gnu.org>
parents:
97142
diff
changeset
|
7251 See `list-system-processes' for getting a list of all process IDs. |
1d85638347af
(Fsystem_processes_list, Fsystem_process_attributes): New functions.
Eli Zaretskii <eliz@gnu.org>
parents:
97142
diff
changeset
|
7252 |
98062
f2a6b3265c21
(Fsystem_process_attributes): Doc fix.
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents:
97676
diff
changeset
|
7253 The KEYs of the attributes that this function may return are listed |
f2a6b3265c21
(Fsystem_process_attributes): Doc fix.
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents:
97676
diff
changeset
|
7254 below, together with the type of the associated VALUE (in parentheses). |
97367
115891550745
(Fsystem_process_attributes): Doc fix.
Eli Zaretskii <eliz@gnu.org>
parents:
97266
diff
changeset
|
7255 Not all platforms support all of these attributes; unsupported |
115891550745
(Fsystem_process_attributes): Doc fix.
Eli Zaretskii <eliz@gnu.org>
parents:
97266
diff
changeset
|
7256 attributes will not appear in the returned alist. |
97227
1d85638347af
(Fsystem_processes_list, Fsystem_process_attributes): New functions.
Eli Zaretskii <eliz@gnu.org>
parents:
97142
diff
changeset
|
7257 Unless explicitly indicated otherwise, numbers can have either |
1d85638347af
(Fsystem_processes_list, Fsystem_process_attributes): New functions.
Eli Zaretskii <eliz@gnu.org>
parents:
97142
diff
changeset
|
7258 integer or floating point values. |
1d85638347af
(Fsystem_processes_list, Fsystem_process_attributes): New functions.
Eli Zaretskii <eliz@gnu.org>
parents:
97142
diff
changeset
|
7259 |
1d85638347af
(Fsystem_processes_list, Fsystem_process_attributes): New functions.
Eli Zaretskii <eliz@gnu.org>
parents:
97142
diff
changeset
|
7260 euid -- Effective user User ID of the process (number) |
1d85638347af
(Fsystem_processes_list, Fsystem_process_attributes): New functions.
Eli Zaretskii <eliz@gnu.org>
parents:
97142
diff
changeset
|
7261 user -- User name corresponding to euid (string) |
1d85638347af
(Fsystem_processes_list, Fsystem_process_attributes): New functions.
Eli Zaretskii <eliz@gnu.org>
parents:
97142
diff
changeset
|
7262 egid -- Effective user Group ID of the process (number) |
1d85638347af
(Fsystem_processes_list, Fsystem_process_attributes): New functions.
Eli Zaretskii <eliz@gnu.org>
parents:
97142
diff
changeset
|
7263 group -- Group name corresponding to egid (string) |
1d85638347af
(Fsystem_processes_list, Fsystem_process_attributes): New functions.
Eli Zaretskii <eliz@gnu.org>
parents:
97142
diff
changeset
|
7264 comm -- Command name (executable name only) (string) |
1d85638347af
(Fsystem_processes_list, Fsystem_process_attributes): New functions.
Eli Zaretskii <eliz@gnu.org>
parents:
97142
diff
changeset
|
7265 state -- Process state code, such as "S", "R", or "T" (string) |
1d85638347af
(Fsystem_processes_list, Fsystem_process_attributes): New functions.
Eli Zaretskii <eliz@gnu.org>
parents:
97142
diff
changeset
|
7266 ppid -- Parent process ID (number) |
1d85638347af
(Fsystem_processes_list, Fsystem_process_attributes): New functions.
Eli Zaretskii <eliz@gnu.org>
parents:
97142
diff
changeset
|
7267 pgrp -- Process group ID (number) |
1d85638347af
(Fsystem_processes_list, Fsystem_process_attributes): New functions.
Eli Zaretskii <eliz@gnu.org>
parents:
97142
diff
changeset
|
7268 sess -- Session ID, i.e. process ID of session leader (number) |
1d85638347af
(Fsystem_processes_list, Fsystem_process_attributes): New functions.
Eli Zaretskii <eliz@gnu.org>
parents:
97142
diff
changeset
|
7269 ttname -- Controlling tty name (string) |
1d85638347af
(Fsystem_processes_list, Fsystem_process_attributes): New functions.
Eli Zaretskii <eliz@gnu.org>
parents:
97142
diff
changeset
|
7270 tpgid -- ID of foreground process group on the process's tty (number) |
1d85638347af
(Fsystem_processes_list, Fsystem_process_attributes): New functions.
Eli Zaretskii <eliz@gnu.org>
parents:
97142
diff
changeset
|
7271 minflt -- number of minor page faults (number) |
1d85638347af
(Fsystem_processes_list, Fsystem_process_attributes): New functions.
Eli Zaretskii <eliz@gnu.org>
parents:
97142
diff
changeset
|
7272 majflt -- number of major page faults (number) |
1d85638347af
(Fsystem_processes_list, Fsystem_process_attributes): New functions.
Eli Zaretskii <eliz@gnu.org>
parents:
97142
diff
changeset
|
7273 cminflt -- cumulative number of minor page faults (number) |
1d85638347af
(Fsystem_processes_list, Fsystem_process_attributes): New functions.
Eli Zaretskii <eliz@gnu.org>
parents:
97142
diff
changeset
|
7274 cmajflt -- cumulative number of major page faults (number) |
1d85638347af
(Fsystem_processes_list, Fsystem_process_attributes): New functions.
Eli Zaretskii <eliz@gnu.org>
parents:
97142
diff
changeset
|
7275 utime -- user time used by the process, in the (HIGH LOW USEC) format |
1d85638347af
(Fsystem_processes_list, Fsystem_process_attributes): New functions.
Eli Zaretskii <eliz@gnu.org>
parents:
97142
diff
changeset
|
7276 stime -- system time used by the process, in the (HIGH LOW USEC) format |
100828
0b30d1767fab
(top level) <Qtime, Qctime>: New variables.
Eli Zaretskii <eliz@gnu.org>
parents:
100824
diff
changeset
|
7277 time -- sum of utime and stime, in the (HIGH LOW USEC) format |
97227
1d85638347af
(Fsystem_processes_list, Fsystem_process_attributes): New functions.
Eli Zaretskii <eliz@gnu.org>
parents:
97142
diff
changeset
|
7278 cutime -- user time used by the process and its children, (HIGH LOW USEC) |
1d85638347af
(Fsystem_processes_list, Fsystem_process_attributes): New functions.
Eli Zaretskii <eliz@gnu.org>
parents:
97142
diff
changeset
|
7279 cstime -- system time used by the process and its children, (HIGH LOW USEC) |
100828
0b30d1767fab
(top level) <Qtime, Qctime>: New variables.
Eli Zaretskii <eliz@gnu.org>
parents:
100824
diff
changeset
|
7280 ctime -- sum of cutime and cstime, in the (HIGH LOW USEC) format |
97227
1d85638347af
(Fsystem_processes_list, Fsystem_process_attributes): New functions.
Eli Zaretskii <eliz@gnu.org>
parents:
97142
diff
changeset
|
7281 pri -- priority of the process (number) |
1d85638347af
(Fsystem_processes_list, Fsystem_process_attributes): New functions.
Eli Zaretskii <eliz@gnu.org>
parents:
97142
diff
changeset
|
7282 nice -- nice value of the process (number) |
1d85638347af
(Fsystem_processes_list, Fsystem_process_attributes): New functions.
Eli Zaretskii <eliz@gnu.org>
parents:
97142
diff
changeset
|
7283 thcount -- process thread count (number) |
1d85638347af
(Fsystem_processes_list, Fsystem_process_attributes): New functions.
Eli Zaretskii <eliz@gnu.org>
parents:
97142
diff
changeset
|
7284 start -- time the process started, in the (HIGH LOW USEC) format |
1d85638347af
(Fsystem_processes_list, Fsystem_process_attributes): New functions.
Eli Zaretskii <eliz@gnu.org>
parents:
97142
diff
changeset
|
7285 vsize -- virtual memory size of the process in KB's (number) |
1d85638347af
(Fsystem_processes_list, Fsystem_process_attributes): New functions.
Eli Zaretskii <eliz@gnu.org>
parents:
97142
diff
changeset
|
7286 rss -- resident set size of the process in KB's (number) |
1d85638347af
(Fsystem_processes_list, Fsystem_process_attributes): New functions.
Eli Zaretskii <eliz@gnu.org>
parents:
97142
diff
changeset
|
7287 etime -- elapsed time the process is running, in (HIGH LOW USEC) format |
1d85638347af
(Fsystem_processes_list, Fsystem_process_attributes): New functions.
Eli Zaretskii <eliz@gnu.org>
parents:
97142
diff
changeset
|
7288 pcpu -- percents of CPU time used by the process (floating-point number) |
1d85638347af
(Fsystem_processes_list, Fsystem_process_attributes): New functions.
Eli Zaretskii <eliz@gnu.org>
parents:
97142
diff
changeset
|
7289 pmem -- percents of total physical memory used by process's resident set |
1d85638347af
(Fsystem_processes_list, Fsystem_process_attributes): New functions.
Eli Zaretskii <eliz@gnu.org>
parents:
97142
diff
changeset
|
7290 (floating-point number) |
1d85638347af
(Fsystem_processes_list, Fsystem_process_attributes): New functions.
Eli Zaretskii <eliz@gnu.org>
parents:
97142
diff
changeset
|
7291 args -- command line which invoked the process (string). */) |
1d85638347af
(Fsystem_processes_list, Fsystem_process_attributes): New functions.
Eli Zaretskii <eliz@gnu.org>
parents:
97142
diff
changeset
|
7292 (pid) |
1d85638347af
(Fsystem_processes_list, Fsystem_process_attributes): New functions.
Eli Zaretskii <eliz@gnu.org>
parents:
97142
diff
changeset
|
7293 |
1d85638347af
(Fsystem_processes_list, Fsystem_process_attributes): New functions.
Eli Zaretskii <eliz@gnu.org>
parents:
97142
diff
changeset
|
7294 Lisp_Object pid; |
1d85638347af
(Fsystem_processes_list, Fsystem_process_attributes): New functions.
Eli Zaretskii <eliz@gnu.org>
parents:
97142
diff
changeset
|
7295 { |
100565
dcc7f5970d5c
Reorganize implementation of Flist_system_processes and
Dan Nicolaescu <dann@ics.uci.edu>
parents:
100443
diff
changeset
|
7296 return system_process_attributes (pid); |
97227
1d85638347af
(Fsystem_processes_list, Fsystem_process_attributes): New functions.
Eli Zaretskii <eliz@gnu.org>
parents:
97142
diff
changeset
|
7297 } |
1d85638347af
(Fsystem_processes_list, Fsystem_process_attributes): New functions.
Eli Zaretskii <eliz@gnu.org>
parents:
97142
diff
changeset
|
7298 |
21514 | 7299 void |
578 | 7300 init_process () |
7301 { | |
7302 register int i; | |
7303 | |
72727
5f2a73453aa3
(inhibit_sentinels): New variable.
Richard M. Stallman <rms@gnu.org>
parents:
72277
diff
changeset
|
7304 inhibit_sentinels = 0; |
5f2a73453aa3
(inhibit_sentinels): New variable.
Richard M. Stallman <rms@gnu.org>
parents:
72277
diff
changeset
|
7305 |
578 | 7306 #ifdef SIGCHLD |
7307 #ifndef CANNOT_DUMP | |
7308 if (! noninteractive || initialized) | |
7309 #endif | |
7310 signal (SIGCHLD, sigchld_handler); | |
7311 #endif | |
7312 | |
7313 FD_ZERO (&input_wait_mask); | |
9686
cd788aa8cb2a
Handle multiple keyboard input descriptors.
Richard M. Stallman <rms@gnu.org>
parents:
9334
diff
changeset
|
7314 FD_ZERO (&non_keyboard_wait_mask); |
17224
dd2545e79add
(wait_reading_process_input): If wait_for_cell,
Richard M. Stallman <rms@gnu.org>
parents:
17110
diff
changeset
|
7315 FD_ZERO (&non_process_wait_mask); |
7044
7032d07f5ad9
(max_process_desc): New variable.
Richard M. Stallman <rms@gnu.org>
parents:
7013
diff
changeset
|
7316 max_process_desc = 0; |
4682
c4d471244116
(keyboard_descriptor): New variable.
Richard M. Stallman <rms@gnu.org>
parents:
4639
diff
changeset
|
7317 |
57840
8abbe69dfdb2
(connect_wait_mask, num_pending_connects): Only
Kim F. Storm <storm@cua.dk>
parents:
57287
diff
changeset
|
7318 #ifdef NON_BLOCKING_CONNECT |
8abbe69dfdb2
(connect_wait_mask, num_pending_connects): Only
Kim F. Storm <storm@cua.dk>
parents:
57287
diff
changeset
|
7319 FD_ZERO (&connect_wait_mask); |
8abbe69dfdb2
(connect_wait_mask, num_pending_connects): Only
Kim F. Storm <storm@cua.dk>
parents:
57287
diff
changeset
|
7320 num_pending_connects = 0; |
8abbe69dfdb2
(connect_wait_mask, num_pending_connects): Only
Kim F. Storm <storm@cua.dk>
parents:
57287
diff
changeset
|
7321 #endif |
8abbe69dfdb2
(connect_wait_mask, num_pending_connects): Only
Kim F. Storm <storm@cua.dk>
parents:
57287
diff
changeset
|
7322 |
53472
1a5fe79d27f3
(ADAPTIVE_READ_BUFFERING): New conditional.
Kim F. Storm <storm@cua.dk>
parents:
53072
diff
changeset
|
7323 #ifdef ADAPTIVE_READ_BUFFERING |
1a5fe79d27f3
(ADAPTIVE_READ_BUFFERING): New conditional.
Kim F. Storm <storm@cua.dk>
parents:
53072
diff
changeset
|
7324 process_output_delay_count = 0; |
1a5fe79d27f3
(ADAPTIVE_READ_BUFFERING): New conditional.
Kim F. Storm <storm@cua.dk>
parents:
53072
diff
changeset
|
7325 process_output_skip = 0; |
1a5fe79d27f3
(ADAPTIVE_READ_BUFFERING): New conditional.
Kim F. Storm <storm@cua.dk>
parents:
53072
diff
changeset
|
7326 #endif |
1a5fe79d27f3
(ADAPTIVE_READ_BUFFERING): New conditional.
Kim F. Storm <storm@cua.dk>
parents:
53072
diff
changeset
|
7327 |
83013
e77d1a63471b
Don't select on stdin unconditionally.
Karoly Lorentey <lorentey@elte.hu>
parents:
83010
diff
changeset
|
7328 /* Don't do this, it caused infinite select loops. The display |
e77d1a63471b
Don't select on stdin unconditionally.
Karoly Lorentey <lorentey@elte.hu>
parents:
83010
diff
changeset
|
7329 method should call add_keyboard_wait_descriptor on stdin if it |
e77d1a63471b
Don't select on stdin unconditionally.
Karoly Lorentey <lorentey@elte.hu>
parents:
83010
diff
changeset
|
7330 needs that. */ |
e77d1a63471b
Don't select on stdin unconditionally.
Karoly Lorentey <lorentey@elte.hu>
parents:
83010
diff
changeset
|
7331 #if 0 |
9686
cd788aa8cb2a
Handle multiple keyboard input descriptors.
Richard M. Stallman <rms@gnu.org>
parents:
9334
diff
changeset
|
7332 FD_SET (0, &input_wait_mask); |
83013
e77d1a63471b
Don't select on stdin unconditionally.
Karoly Lorentey <lorentey@elte.hu>
parents:
83010
diff
changeset
|
7333 #endif |
4682
c4d471244116
(keyboard_descriptor): New variable.
Richard M. Stallman <rms@gnu.org>
parents:
4639
diff
changeset
|
7334 |
578 | 7335 Vprocess_alist = Qnil; |
71140
80310801887e
2006-06-01 Micha«³l Cadilhac <michael.cadilhac@lrde.org>
Kim F. Storm <storm@cua.dk>
parents:
71109
diff
changeset
|
7336 #ifdef SIGCHLD |
80310801887e
2006-06-01 Micha«³l Cadilhac <michael.cadilhac@lrde.org>
Kim F. Storm <storm@cua.dk>
parents:
71109
diff
changeset
|
7337 deleted_pid_list = Qnil; |
80310801887e
2006-06-01 Micha«³l Cadilhac <michael.cadilhac@lrde.org>
Kim F. Storm <storm@cua.dk>
parents:
71109
diff
changeset
|
7338 #endif |
578 | 7339 for (i = 0; i < MAXDESC; i++) |
7340 { | |
7341 chan_process[i] = Qnil; | |
7342 proc_buffered_char[i] = -1; | |
7343 } | |
17110
3a348cbb354f
(Fstart_process, Fopen_network_stream): Do not perform
Kenichi Handa <handa@m17n.org>
parents:
17041
diff
changeset
|
7344 bzero (proc_decode_coding_system, sizeof proc_decode_coding_system); |
3a348cbb354f
(Fstart_process, Fopen_network_stream): Do not perform
Kenichi Handa <handa@m17n.org>
parents:
17041
diff
changeset
|
7345 bzero (proc_encode_coding_system, sizeof proc_encode_coding_system); |
43968
7ec801358b7e
(Qlocal, QCname, QCbuffer, QChost, QCservice, QCfamily)
Kim F. Storm <storm@cua.dk>
parents:
43642
diff
changeset
|
7346 #ifdef DATAGRAM_SOCKETS |
7ec801358b7e
(Qlocal, QCname, QCbuffer, QChost, QCservice, QCfamily)
Kim F. Storm <storm@cua.dk>
parents:
43642
diff
changeset
|
7347 bzero (datagram_address, sizeof datagram_address); |
7ec801358b7e
(Qlocal, QCname, QCbuffer, QChost, QCservice, QCfamily)
Kim F. Storm <storm@cua.dk>
parents:
43642
diff
changeset
|
7348 #endif |
44067
e8a136850817
(QCfeature, QCdatagram): Removed variables.
Kim F. Storm <storm@cua.dk>
parents:
44041
diff
changeset
|
7349 |
44073
9984126a7008
(init_process): Only provide make-network-process feature and
Kim F. Storm <storm@cua.dk>
parents:
44067
diff
changeset
|
7350 #ifdef HAVE_SOCKETS |
9984126a7008
(init_process): Only provide make-network-process feature and
Kim F. Storm <storm@cua.dk>
parents:
44067
diff
changeset
|
7351 { |
9984126a7008
(init_process): Only provide make-network-process feature and
Kim F. Storm <storm@cua.dk>
parents:
44067
diff
changeset
|
7352 Lisp_Object subfeatures = Qnil; |
105872
89183b6f6e9d
* process.c (socket_options): Make it const.
Dan Nicolaescu <dann@ics.uci.edu>
parents:
105672
diff
changeset
|
7353 const struct socket_options *sopt; |
52516
0ca23eb697b9
(Fset_process_sentinel): Add sentinel to childp plist
Kim F. Storm <storm@cua.dk>
parents:
52503
diff
changeset
|
7354 |
44067
e8a136850817
(QCfeature, QCdatagram): Removed variables.
Kim F. Storm <storm@cua.dk>
parents:
44041
diff
changeset
|
7355 #define ADD_SUBFEATURE(key, val) \ |
105877
21bdda3ded62
* xterm.c (syms_of_xterm):
Dan Nicolaescu <dann@ics.uci.edu>
parents:
105872
diff
changeset
|
7356 subfeatures = pure_cons (pure_cons (key, pure_cons (val, Qnil)), subfeatures) |
44067
e8a136850817
(QCfeature, QCdatagram): Removed variables.
Kim F. Storm <storm@cua.dk>
parents:
44041
diff
changeset
|
7357 |
e8a136850817
(QCfeature, QCdatagram): Removed variables.
Kim F. Storm <storm@cua.dk>
parents:
44041
diff
changeset
|
7358 #ifdef NON_BLOCKING_CONNECT |
44073
9984126a7008
(init_process): Only provide make-network-process feature and
Kim F. Storm <storm@cua.dk>
parents:
44067
diff
changeset
|
7359 ADD_SUBFEATURE (QCnowait, Qt); |
44067
e8a136850817
(QCfeature, QCdatagram): Removed variables.
Kim F. Storm <storm@cua.dk>
parents:
44041
diff
changeset
|
7360 #endif |
e8a136850817
(QCfeature, QCdatagram): Removed variables.
Kim F. Storm <storm@cua.dk>
parents:
44041
diff
changeset
|
7361 #ifdef DATAGRAM_SOCKETS |
44073
9984126a7008
(init_process): Only provide make-network-process feature and
Kim F. Storm <storm@cua.dk>
parents:
44067
diff
changeset
|
7362 ADD_SUBFEATURE (QCtype, Qdatagram); |
44067
e8a136850817
(QCfeature, QCdatagram): Removed variables.
Kim F. Storm <storm@cua.dk>
parents:
44041
diff
changeset
|
7363 #endif |
106397
210af1fb2669
(Qseqpacket): New symbol.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
106186
diff
changeset
|
7364 #ifdef HAVE_SEQPACKET |
210af1fb2669
(Qseqpacket): New symbol.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
106186
diff
changeset
|
7365 ADD_SUBFEATURE (QCtype, Qseqpacket); |
210af1fb2669
(Qseqpacket): New symbol.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
106186
diff
changeset
|
7366 #endif |
44067
e8a136850817
(QCfeature, QCdatagram): Removed variables.
Kim F. Storm <storm@cua.dk>
parents:
44041
diff
changeset
|
7367 #ifdef HAVE_LOCAL_SOCKETS |
44073
9984126a7008
(init_process): Only provide make-network-process feature and
Kim F. Storm <storm@cua.dk>
parents:
44067
diff
changeset
|
7368 ADD_SUBFEATURE (QCfamily, Qlocal); |
44067
e8a136850817
(QCfeature, QCdatagram): Removed variables.
Kim F. Storm <storm@cua.dk>
parents:
44041
diff
changeset
|
7369 #endif |
68008 | 7370 ADD_SUBFEATURE (QCfamily, Qipv4); |
7371 #ifdef AF_INET6 | |
7372 ADD_SUBFEATURE (QCfamily, Qipv6); | |
7373 #endif | |
44067
e8a136850817
(QCfeature, QCdatagram): Removed variables.
Kim F. Storm <storm@cua.dk>
parents:
44041
diff
changeset
|
7374 #ifdef HAVE_GETSOCKNAME |
44073
9984126a7008
(init_process): Only provide make-network-process feature and
Kim F. Storm <storm@cua.dk>
parents:
44067
diff
changeset
|
7375 ADD_SUBFEATURE (QCservice, Qt); |
44067
e8a136850817
(QCfeature, QCdatagram): Removed variables.
Kim F. Storm <storm@cua.dk>
parents:
44041
diff
changeset
|
7376 #endif |
96732
1e0b67e40d48
* systty.h: Remove code for Aix on 386, unsupported platform.
Dan Nicolaescu <dann@ics.uci.edu>
parents:
96675
diff
changeset
|
7377 #if defined(O_NONBLOCK) || defined(O_NDELAY) |
44073
9984126a7008
(init_process): Only provide make-network-process feature and
Kim F. Storm <storm@cua.dk>
parents:
44067
diff
changeset
|
7378 ADD_SUBFEATURE (QCserver, Qt); |
44067
e8a136850817
(QCfeature, QCdatagram): Removed variables.
Kim F. Storm <storm@cua.dk>
parents:
44041
diff
changeset
|
7379 #endif |
52516
0ca23eb697b9
(Fset_process_sentinel): Add sentinel to childp plist
Kim F. Storm <storm@cua.dk>
parents:
52503
diff
changeset
|
7380 |
0ca23eb697b9
(Fset_process_sentinel): Add sentinel to childp plist
Kim F. Storm <storm@cua.dk>
parents:
52503
diff
changeset
|
7381 for (sopt = socket_options; sopt->name; sopt++) |
105877
21bdda3ded62
* xterm.c (syms_of_xterm):
Dan Nicolaescu <dann@ics.uci.edu>
parents:
105872
diff
changeset
|
7382 subfeatures = pure_cons (intern_c_string (sopt->name), subfeatures); |
21bdda3ded62
* xterm.c (syms_of_xterm):
Dan Nicolaescu <dann@ics.uci.edu>
parents:
105872
diff
changeset
|
7383 |
21bdda3ded62
* xterm.c (syms_of_xterm):
Dan Nicolaescu <dann@ics.uci.edu>
parents:
105872
diff
changeset
|
7384 Fprovide (intern_c_string ("make-network-process"), subfeatures); |
44073
9984126a7008
(init_process): Only provide make-network-process feature and
Kim F. Storm <storm@cua.dk>
parents:
44067
diff
changeset
|
7385 } |
9984126a7008
(init_process): Only provide make-network-process feature and
Kim F. Storm <storm@cua.dk>
parents:
44067
diff
changeset
|
7386 #endif /* HAVE_SOCKETS */ |
59689
007a1a6d92de
* s/darwin.h: Removed PTY_ITERATION from here.
Steven Tamm <steventamm@mac.com>
parents:
59113
diff
changeset
|
7387 |
97266
80acedef7417
cleanup in s/darwin.h, define DARWIN_OS and use it instead of DARWIN and/or MAC_OSX; also, nsterm.m: small unrelated cleanups
Adrian Robert <Adrian.B.Robert@gmail.com>
parents:
97227
diff
changeset
|
7388 #if defined (DARWIN_OS) |
63114
6ef9e44e50d7
Improve commentary for adaptive read buffering.
Kim F. Storm <storm@cua.dk>
parents:
62604
diff
changeset
|
7389 /* PTYs are broken on Darwin < 6, but are sometimes useful for interactive |
59689
007a1a6d92de
* s/darwin.h: Removed PTY_ITERATION from here.
Steven Tamm <steventamm@mac.com>
parents:
59113
diff
changeset
|
7390 processes. As such, we only change the default value. */ |
007a1a6d92de
* s/darwin.h: Removed PTY_ITERATION from here.
Steven Tamm <steventamm@mac.com>
parents:
59113
diff
changeset
|
7391 if (initialized) |
007a1a6d92de
* s/darwin.h: Removed PTY_ITERATION from here.
Steven Tamm <steventamm@mac.com>
parents:
59113
diff
changeset
|
7392 { |
007a1a6d92de
* s/darwin.h: Removed PTY_ITERATION from here.
Steven Tamm <steventamm@mac.com>
parents:
59113
diff
changeset
|
7393 char *release = get_operating_system_release(); |
007a1a6d92de
* s/darwin.h: Removed PTY_ITERATION from here.
Steven Tamm <steventamm@mac.com>
parents:
59113
diff
changeset
|
7394 if (!release || !release[0] || (release[0] < MIN_PTY_KERNEL_VERSION |
007a1a6d92de
* s/darwin.h: Removed PTY_ITERATION from here.
Steven Tamm <steventamm@mac.com>
parents:
59113
diff
changeset
|
7395 && release[1] == '.')) { |
007a1a6d92de
* s/darwin.h: Removed PTY_ITERATION from here.
Steven Tamm <steventamm@mac.com>
parents:
59113
diff
changeset
|
7396 Vprocess_connection_type = Qnil; |
007a1a6d92de
* s/darwin.h: Removed PTY_ITERATION from here.
Steven Tamm <steventamm@mac.com>
parents:
59113
diff
changeset
|
7397 } |
007a1a6d92de
* s/darwin.h: Removed PTY_ITERATION from here.
Steven Tamm <steventamm@mac.com>
parents:
59113
diff
changeset
|
7398 } |
007a1a6d92de
* s/darwin.h: Removed PTY_ITERATION from here.
Steven Tamm <steventamm@mac.com>
parents:
59113
diff
changeset
|
7399 #endif |
578 | 7400 } |
4231
91a883c56382
(Fget_buffer_process): Delete doc string from
Richard M. Stallman <rms@gnu.org>
parents:
4057
diff
changeset
|
7401 |
21514 | 7402 void |
578 | 7403 syms_of_process () |
7404 { | |
105877
21bdda3ded62
* xterm.c (syms_of_xterm):
Dan Nicolaescu <dann@ics.uci.edu>
parents:
105872
diff
changeset
|
7405 Qprocessp = intern_c_string ("processp"); |
578 | 7406 staticpro (&Qprocessp); |
105877
21bdda3ded62
* xterm.c (syms_of_xterm):
Dan Nicolaescu <dann@ics.uci.edu>
parents:
105872
diff
changeset
|
7407 Qrun = intern_c_string ("run"); |
578 | 7408 staticpro (&Qrun); |
105877
21bdda3ded62
* xterm.c (syms_of_xterm):
Dan Nicolaescu <dann@ics.uci.edu>
parents:
105872
diff
changeset
|
7409 Qstop = intern_c_string ("stop"); |
578 | 7410 staticpro (&Qstop); |
105877
21bdda3ded62
* xterm.c (syms_of_xterm):
Dan Nicolaescu <dann@ics.uci.edu>
parents:
105872
diff
changeset
|
7411 Qsignal = intern_c_string ("signal"); |
74749 | 7412 staticpro (&Qsignal); |
578 | 7413 |
7414 /* Qexit is already staticpro'd by syms_of_eval; don't staticpro it | |
7415 here again. | |
7416 | |
105877
21bdda3ded62
* xterm.c (syms_of_xterm):
Dan Nicolaescu <dann@ics.uci.edu>
parents:
105872
diff
changeset
|
7417 Qexit = intern_c_string ("exit"); |
578 | 7418 staticpro (&Qexit); */ |
7419 | |
105877
21bdda3ded62
* xterm.c (syms_of_xterm):
Dan Nicolaescu <dann@ics.uci.edu>
parents:
105872
diff
changeset
|
7420 Qopen = intern_c_string ("open"); |
578 | 7421 staticpro (&Qopen); |
105877
21bdda3ded62
* xterm.c (syms_of_xterm):
Dan Nicolaescu <dann@ics.uci.edu>
parents:
105872
diff
changeset
|
7422 Qclosed = intern_c_string ("closed"); |
578 | 7423 staticpro (&Qclosed); |
105877
21bdda3ded62
* xterm.c (syms_of_xterm):
Dan Nicolaescu <dann@ics.uci.edu>
parents:
105872
diff
changeset
|
7424 Qconnect = intern_c_string ("connect"); |
43598
f49377cf2e3c
(Qconnect, Qfailed): New variables.
Kim F. Storm <storm@cua.dk>
parents:
42600
diff
changeset
|
7425 staticpro (&Qconnect); |
105877
21bdda3ded62
* xterm.c (syms_of_xterm):
Dan Nicolaescu <dann@ics.uci.edu>
parents:
105872
diff
changeset
|
7426 Qfailed = intern_c_string ("failed"); |
43598
f49377cf2e3c
(Qconnect, Qfailed): New variables.
Kim F. Storm <storm@cua.dk>
parents:
42600
diff
changeset
|
7427 staticpro (&Qfailed); |
105877
21bdda3ded62
* xterm.c (syms_of_xterm):
Dan Nicolaescu <dann@ics.uci.edu>
parents:
105872
diff
changeset
|
7428 Qlisten = intern_c_string ("listen"); |
43968
7ec801358b7e
(Qlocal, QCname, QCbuffer, QChost, QCservice, QCfamily)
Kim F. Storm <storm@cua.dk>
parents:
43642
diff
changeset
|
7429 staticpro (&Qlisten); |
105877
21bdda3ded62
* xterm.c (syms_of_xterm):
Dan Nicolaescu <dann@ics.uci.edu>
parents:
105872
diff
changeset
|
7430 Qlocal = intern_c_string ("local"); |
43968
7ec801358b7e
(Qlocal, QCname, QCbuffer, QChost, QCservice, QCfamily)
Kim F. Storm <storm@cua.dk>
parents:
43642
diff
changeset
|
7431 staticpro (&Qlocal); |
105877
21bdda3ded62
* xterm.c (syms_of_xterm):
Dan Nicolaescu <dann@ics.uci.edu>
parents:
105872
diff
changeset
|
7432 Qipv4 = intern_c_string ("ipv4"); |
68008 | 7433 staticpro (&Qipv4); |
7434 #ifdef AF_INET6 | |
105877
21bdda3ded62
* xterm.c (syms_of_xterm):
Dan Nicolaescu <dann@ics.uci.edu>
parents:
105872
diff
changeset
|
7435 Qipv6 = intern_c_string ("ipv6"); |
68008 | 7436 staticpro (&Qipv6); |
7437 #endif | |
105877
21bdda3ded62
* xterm.c (syms_of_xterm):
Dan Nicolaescu <dann@ics.uci.edu>
parents:
105872
diff
changeset
|
7438 Qdatagram = intern_c_string ("datagram"); |
44067
e8a136850817
(QCfeature, QCdatagram): Removed variables.
Kim F. Storm <storm@cua.dk>
parents:
44041
diff
changeset
|
7439 staticpro (&Qdatagram); |
106397
210af1fb2669
(Qseqpacket): New symbol.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
106186
diff
changeset
|
7440 Qseqpacket = intern_c_string ("seqpacket"); |
210af1fb2669
(Qseqpacket): New symbol.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
106186
diff
changeset
|
7441 staticpro (&Qseqpacket); |
43968
7ec801358b7e
(Qlocal, QCname, QCbuffer, QChost, QCservice, QCfamily)
Kim F. Storm <storm@cua.dk>
parents:
43642
diff
changeset
|
7442 |
105877
21bdda3ded62
* xterm.c (syms_of_xterm):
Dan Nicolaescu <dann@ics.uci.edu>
parents:
105872
diff
changeset
|
7443 QCport = intern_c_string (":port"); |
95884
d6a4488883dc
Daniel Engeler <engeler at gmail.com>
Glenn Morris <rgm@gnu.org>
parents:
95387
diff
changeset
|
7444 staticpro (&QCport); |
105877
21bdda3ded62
* xterm.c (syms_of_xterm):
Dan Nicolaescu <dann@ics.uci.edu>
parents:
105872
diff
changeset
|
7445 QCspeed = intern_c_string (":speed"); |
95884
d6a4488883dc
Daniel Engeler <engeler at gmail.com>
Glenn Morris <rgm@gnu.org>
parents:
95387
diff
changeset
|
7446 staticpro (&QCspeed); |
105877
21bdda3ded62
* xterm.c (syms_of_xterm):
Dan Nicolaescu <dann@ics.uci.edu>
parents:
105872
diff
changeset
|
7447 QCprocess = intern_c_string (":process"); |
95884
d6a4488883dc
Daniel Engeler <engeler at gmail.com>
Glenn Morris <rgm@gnu.org>
parents:
95387
diff
changeset
|
7448 staticpro (&QCprocess); |
d6a4488883dc
Daniel Engeler <engeler at gmail.com>
Glenn Morris <rgm@gnu.org>
parents:
95387
diff
changeset
|
7449 |
105877
21bdda3ded62
* xterm.c (syms_of_xterm):
Dan Nicolaescu <dann@ics.uci.edu>
parents:
105872
diff
changeset
|
7450 QCbytesize = intern_c_string (":bytesize"); |
95884
d6a4488883dc
Daniel Engeler <engeler at gmail.com>
Glenn Morris <rgm@gnu.org>
parents:
95387
diff
changeset
|
7451 staticpro (&QCbytesize); |
105877
21bdda3ded62
* xterm.c (syms_of_xterm):
Dan Nicolaescu <dann@ics.uci.edu>
parents:
105872
diff
changeset
|
7452 QCstopbits = intern_c_string (":stopbits"); |
95884
d6a4488883dc
Daniel Engeler <engeler at gmail.com>
Glenn Morris <rgm@gnu.org>
parents:
95387
diff
changeset
|
7453 staticpro (&QCstopbits); |
105877
21bdda3ded62
* xterm.c (syms_of_xterm):
Dan Nicolaescu <dann@ics.uci.edu>
parents:
105872
diff
changeset
|
7454 QCparity = intern_c_string (":parity"); |
95884
d6a4488883dc
Daniel Engeler <engeler at gmail.com>
Glenn Morris <rgm@gnu.org>
parents:
95387
diff
changeset
|
7455 staticpro (&QCparity); |
105877
21bdda3ded62
* xterm.c (syms_of_xterm):
Dan Nicolaescu <dann@ics.uci.edu>
parents:
105872
diff
changeset
|
7456 Qodd = intern_c_string ("odd"); |
95884
d6a4488883dc
Daniel Engeler <engeler at gmail.com>
Glenn Morris <rgm@gnu.org>
parents:
95387
diff
changeset
|
7457 staticpro (&Qodd); |
105877
21bdda3ded62
* xterm.c (syms_of_xterm):
Dan Nicolaescu <dann@ics.uci.edu>
parents:
105872
diff
changeset
|
7458 Qeven = intern_c_string ("even"); |
95884
d6a4488883dc
Daniel Engeler <engeler at gmail.com>
Glenn Morris <rgm@gnu.org>
parents:
95387
diff
changeset
|
7459 staticpro (&Qeven); |
105877
21bdda3ded62
* xterm.c (syms_of_xterm):
Dan Nicolaescu <dann@ics.uci.edu>
parents:
105872
diff
changeset
|
7460 QCflowcontrol = intern_c_string (":flowcontrol"); |
95884
d6a4488883dc
Daniel Engeler <engeler at gmail.com>
Glenn Morris <rgm@gnu.org>
parents:
95387
diff
changeset
|
7461 staticpro (&QCflowcontrol); |
105877
21bdda3ded62
* xterm.c (syms_of_xterm):
Dan Nicolaescu <dann@ics.uci.edu>
parents:
105872
diff
changeset
|
7462 Qhw = intern_c_string ("hw"); |
95884
d6a4488883dc
Daniel Engeler <engeler at gmail.com>
Glenn Morris <rgm@gnu.org>
parents:
95387
diff
changeset
|
7463 staticpro (&Qhw); |
105877
21bdda3ded62
* xterm.c (syms_of_xterm):
Dan Nicolaescu <dann@ics.uci.edu>
parents:
105872
diff
changeset
|
7464 Qsw = intern_c_string ("sw"); |
95884
d6a4488883dc
Daniel Engeler <engeler at gmail.com>
Glenn Morris <rgm@gnu.org>
parents:
95387
diff
changeset
|
7465 staticpro (&Qsw); |
105877
21bdda3ded62
* xterm.c (syms_of_xterm):
Dan Nicolaescu <dann@ics.uci.edu>
parents:
105872
diff
changeset
|
7466 QCsummary = intern_c_string (":summary"); |
95884
d6a4488883dc
Daniel Engeler <engeler at gmail.com>
Glenn Morris <rgm@gnu.org>
parents:
95387
diff
changeset
|
7467 staticpro (&QCsummary); |
d6a4488883dc
Daniel Engeler <engeler at gmail.com>
Glenn Morris <rgm@gnu.org>
parents:
95387
diff
changeset
|
7468 |
105877
21bdda3ded62
* xterm.c (syms_of_xterm):
Dan Nicolaescu <dann@ics.uci.edu>
parents:
105872
diff
changeset
|
7469 Qreal = intern_c_string ("real"); |
95884
d6a4488883dc
Daniel Engeler <engeler at gmail.com>
Glenn Morris <rgm@gnu.org>
parents:
95387
diff
changeset
|
7470 staticpro (&Qreal); |
105877
21bdda3ded62
* xterm.c (syms_of_xterm):
Dan Nicolaescu <dann@ics.uci.edu>
parents:
105872
diff
changeset
|
7471 Qnetwork = intern_c_string ("network"); |
95884
d6a4488883dc
Daniel Engeler <engeler at gmail.com>
Glenn Morris <rgm@gnu.org>
parents:
95387
diff
changeset
|
7472 staticpro (&Qnetwork); |
105877
21bdda3ded62
* xterm.c (syms_of_xterm):
Dan Nicolaescu <dann@ics.uci.edu>
parents:
105872
diff
changeset
|
7473 Qserial = intern_c_string ("serial"); |
95884
d6a4488883dc
Daniel Engeler <engeler at gmail.com>
Glenn Morris <rgm@gnu.org>
parents:
95387
diff
changeset
|
7474 staticpro (&Qserial); |
d6a4488883dc
Daniel Engeler <engeler at gmail.com>
Glenn Morris <rgm@gnu.org>
parents:
95387
diff
changeset
|
7475 |
105877
21bdda3ded62
* xterm.c (syms_of_xterm):
Dan Nicolaescu <dann@ics.uci.edu>
parents:
105872
diff
changeset
|
7476 QCname = intern_c_string (":name"); |
43968
7ec801358b7e
(Qlocal, QCname, QCbuffer, QChost, QCservice, QCfamily)
Kim F. Storm <storm@cua.dk>
parents:
43642
diff
changeset
|
7477 staticpro (&QCname); |
105877
21bdda3ded62
* xterm.c (syms_of_xterm):
Dan Nicolaescu <dann@ics.uci.edu>
parents:
105872
diff
changeset
|
7478 QCbuffer = intern_c_string (":buffer"); |
43968
7ec801358b7e
(Qlocal, QCname, QCbuffer, QChost, QCservice, QCfamily)
Kim F. Storm <storm@cua.dk>
parents:
43642
diff
changeset
|
7479 staticpro (&QCbuffer); |
105877
21bdda3ded62
* xterm.c (syms_of_xterm):
Dan Nicolaescu <dann@ics.uci.edu>
parents:
105872
diff
changeset
|
7480 QChost = intern_c_string (":host"); |
43968
7ec801358b7e
(Qlocal, QCname, QCbuffer, QChost, QCservice, QCfamily)
Kim F. Storm <storm@cua.dk>
parents:
43642
diff
changeset
|
7481 staticpro (&QChost); |
105877
21bdda3ded62
* xterm.c (syms_of_xterm):
Dan Nicolaescu <dann@ics.uci.edu>
parents:
105872
diff
changeset
|
7482 QCservice = intern_c_string (":service"); |
43968
7ec801358b7e
(Qlocal, QCname, QCbuffer, QChost, QCservice, QCfamily)
Kim F. Storm <storm@cua.dk>
parents:
43642
diff
changeset
|
7483 staticpro (&QCservice); |
105877
21bdda3ded62
* xterm.c (syms_of_xterm):
Dan Nicolaescu <dann@ics.uci.edu>
parents:
105872
diff
changeset
|
7484 QCtype = intern_c_string (":type"); |
44067
e8a136850817
(QCfeature, QCdatagram): Removed variables.
Kim F. Storm <storm@cua.dk>
parents:
44041
diff
changeset
|
7485 staticpro (&QCtype); |
105877
21bdda3ded62
* xterm.c (syms_of_xterm):
Dan Nicolaescu <dann@ics.uci.edu>
parents:
105872
diff
changeset
|
7486 QClocal = intern_c_string (":local"); |
43968
7ec801358b7e
(Qlocal, QCname, QCbuffer, QChost, QCservice, QCfamily)
Kim F. Storm <storm@cua.dk>
parents:
43642
diff
changeset
|
7487 staticpro (&QClocal); |
105877
21bdda3ded62
* xterm.c (syms_of_xterm):
Dan Nicolaescu <dann@ics.uci.edu>
parents:
105872
diff
changeset
|
7488 QCremote = intern_c_string (":remote"); |
43968
7ec801358b7e
(Qlocal, QCname, QCbuffer, QChost, QCservice, QCfamily)
Kim F. Storm <storm@cua.dk>
parents:
43642
diff
changeset
|
7489 staticpro (&QCremote); |
105877
21bdda3ded62
* xterm.c (syms_of_xterm):
Dan Nicolaescu <dann@ics.uci.edu>
parents:
105872
diff
changeset
|
7490 QCcoding = intern_c_string (":coding"); |
43968
7ec801358b7e
(Qlocal, QCname, QCbuffer, QChost, QCservice, QCfamily)
Kim F. Storm <storm@cua.dk>
parents:
43642
diff
changeset
|
7491 staticpro (&QCcoding); |
105877
21bdda3ded62
* xterm.c (syms_of_xterm):
Dan Nicolaescu <dann@ics.uci.edu>
parents:
105872
diff
changeset
|
7492 QCserver = intern_c_string (":server"); |
43968
7ec801358b7e
(Qlocal, QCname, QCbuffer, QChost, QCservice, QCfamily)
Kim F. Storm <storm@cua.dk>
parents:
43642
diff
changeset
|
7493 staticpro (&QCserver); |
105877
21bdda3ded62
* xterm.c (syms_of_xterm):
Dan Nicolaescu <dann@ics.uci.edu>
parents:
105872
diff
changeset
|
7494 QCnowait = intern_c_string (":nowait"); |
43968
7ec801358b7e
(Qlocal, QCname, QCbuffer, QChost, QCservice, QCfamily)
Kim F. Storm <storm@cua.dk>
parents:
43642
diff
changeset
|
7495 staticpro (&QCnowait); |
105877
21bdda3ded62
* xterm.c (syms_of_xterm):
Dan Nicolaescu <dann@ics.uci.edu>
parents:
105872
diff
changeset
|
7496 QCsentinel = intern_c_string (":sentinel"); |
43968
7ec801358b7e
(Qlocal, QCname, QCbuffer, QChost, QCservice, QCfamily)
Kim F. Storm <storm@cua.dk>
parents:
43642
diff
changeset
|
7497 staticpro (&QCsentinel); |
105877
21bdda3ded62
* xterm.c (syms_of_xterm):
Dan Nicolaescu <dann@ics.uci.edu>
parents:
105872
diff
changeset
|
7498 QClog = intern_c_string (":log"); |
43968
7ec801358b7e
(Qlocal, QCname, QCbuffer, QChost, QCservice, QCfamily)
Kim F. Storm <storm@cua.dk>
parents:
43642
diff
changeset
|
7499 staticpro (&QClog); |
105877
21bdda3ded62
* xterm.c (syms_of_xterm):
Dan Nicolaescu <dann@ics.uci.edu>
parents:
105872
diff
changeset
|
7500 QCnoquery = intern_c_string (":noquery"); |
43968
7ec801358b7e
(Qlocal, QCname, QCbuffer, QChost, QCservice, QCfamily)
Kim F. Storm <storm@cua.dk>
parents:
43642
diff
changeset
|
7501 staticpro (&QCnoquery); |
105877
21bdda3ded62
* xterm.c (syms_of_xterm):
Dan Nicolaescu <dann@ics.uci.edu>
parents:
105872
diff
changeset
|
7502 QCstop = intern_c_string (":stop"); |
43968
7ec801358b7e
(Qlocal, QCname, QCbuffer, QChost, QCservice, QCfamily)
Kim F. Storm <storm@cua.dk>
parents:
43642
diff
changeset
|
7503 staticpro (&QCstop); |
105877
21bdda3ded62
* xterm.c (syms_of_xterm):
Dan Nicolaescu <dann@ics.uci.edu>
parents:
105872
diff
changeset
|
7504 QCoptions = intern_c_string (":options"); |
43968
7ec801358b7e
(Qlocal, QCname, QCbuffer, QChost, QCservice, QCfamily)
Kim F. Storm <storm@cua.dk>
parents:
43642
diff
changeset
|
7505 staticpro (&QCoptions); |
105877
21bdda3ded62
* xterm.c (syms_of_xterm):
Dan Nicolaescu <dann@ics.uci.edu>
parents:
105872
diff
changeset
|
7506 QCplist = intern_c_string (":plist"); |
49223
26622fa0d099
Reworked 2003-01-12 change -- call a plist a plist!
Kim F. Storm <storm@cua.dk>
parents:
49164
diff
changeset
|
7507 staticpro (&QCplist); |
49600
23a1cea22d13
Trailing whitespace deleted.
Juanma Barranquero <lekktu@gmail.com>
parents:
49281
diff
changeset
|
7508 |
105877
21bdda3ded62
* xterm.c (syms_of_xterm):
Dan Nicolaescu <dann@ics.uci.edu>
parents:
105872
diff
changeset
|
7509 Qlast_nonmenu_event = intern_c_string ("last-nonmenu-event"); |
8231
5226ed89c1a6
(Qlast_nonmenu_event): New variable.
Richard M. Stallman <rms@gnu.org>
parents:
8063
diff
changeset
|
7510 staticpro (&Qlast_nonmenu_event); |
5226ed89c1a6
(Qlast_nonmenu_event): New variable.
Richard M. Stallman <rms@gnu.org>
parents:
8063
diff
changeset
|
7511 |
578 | 7512 staticpro (&Vprocess_alist); |
71140
80310801887e
2006-06-01 Micha«³l Cadilhac <michael.cadilhac@lrde.org>
Kim F. Storm <storm@cua.dk>
parents:
71109
diff
changeset
|
7513 #ifdef SIGCHLD |
80310801887e
2006-06-01 Micha«³l Cadilhac <michael.cadilhac@lrde.org>
Kim F. Storm <storm@cua.dk>
parents:
71109
diff
changeset
|
7514 staticpro (&deleted_pid_list); |
80310801887e
2006-06-01 Micha«³l Cadilhac <michael.cadilhac@lrde.org>
Kim F. Storm <storm@cua.dk>
parents:
71109
diff
changeset
|
7515 #endif |
578 | 7516 |
105877
21bdda3ded62
* xterm.c (syms_of_xterm):
Dan Nicolaescu <dann@ics.uci.edu>
parents:
105872
diff
changeset
|
7517 Qeuid = intern_c_string ("euid"); |
97227
1d85638347af
(Fsystem_processes_list, Fsystem_process_attributes): New functions.
Eli Zaretskii <eliz@gnu.org>
parents:
97142
diff
changeset
|
7518 staticpro (&Qeuid); |
105877
21bdda3ded62
* xterm.c (syms_of_xterm):
Dan Nicolaescu <dann@ics.uci.edu>
parents:
105872
diff
changeset
|
7519 Qegid = intern_c_string ("egid"); |
97227
1d85638347af
(Fsystem_processes_list, Fsystem_process_attributes): New functions.
Eli Zaretskii <eliz@gnu.org>
parents:
97142
diff
changeset
|
7520 staticpro (&Qegid); |
105877
21bdda3ded62
* xterm.c (syms_of_xterm):
Dan Nicolaescu <dann@ics.uci.edu>
parents:
105872
diff
changeset
|
7521 Quser = intern_c_string ("user"); |
97227
1d85638347af
(Fsystem_processes_list, Fsystem_process_attributes): New functions.
Eli Zaretskii <eliz@gnu.org>
parents:
97142
diff
changeset
|
7522 staticpro (&Quser); |
105877
21bdda3ded62
* xterm.c (syms_of_xterm):
Dan Nicolaescu <dann@ics.uci.edu>
parents:
105872
diff
changeset
|
7523 Qgroup = intern_c_string ("group"); |
97227
1d85638347af
(Fsystem_processes_list, Fsystem_process_attributes): New functions.
Eli Zaretskii <eliz@gnu.org>
parents:
97142
diff
changeset
|
7524 staticpro (&Qgroup); |
105877
21bdda3ded62
* xterm.c (syms_of_xterm):
Dan Nicolaescu <dann@ics.uci.edu>
parents:
105872
diff
changeset
|
7525 Qcomm = intern_c_string ("comm"); |
97227
1d85638347af
(Fsystem_processes_list, Fsystem_process_attributes): New functions.
Eli Zaretskii <eliz@gnu.org>
parents:
97142
diff
changeset
|
7526 staticpro (&Qcomm); |
105877
21bdda3ded62
* xterm.c (syms_of_xterm):
Dan Nicolaescu <dann@ics.uci.edu>
parents:
105872
diff
changeset
|
7527 Qstate = intern_c_string ("state"); |
97227
1d85638347af
(Fsystem_processes_list, Fsystem_process_attributes): New functions.
Eli Zaretskii <eliz@gnu.org>
parents:
97142
diff
changeset
|
7528 staticpro (&Qstate); |
105877
21bdda3ded62
* xterm.c (syms_of_xterm):
Dan Nicolaescu <dann@ics.uci.edu>
parents:
105872
diff
changeset
|
7529 Qppid = intern_c_string ("ppid"); |
97227
1d85638347af
(Fsystem_processes_list, Fsystem_process_attributes): New functions.
Eli Zaretskii <eliz@gnu.org>
parents:
97142
diff
changeset
|
7530 staticpro (&Qppid); |
105877
21bdda3ded62
* xterm.c (syms_of_xterm):
Dan Nicolaescu <dann@ics.uci.edu>
parents:
105872
diff
changeset
|
7531 Qpgrp = intern_c_string ("pgrp"); |
97227
1d85638347af
(Fsystem_processes_list, Fsystem_process_attributes): New functions.
Eli Zaretskii <eliz@gnu.org>
parents:
97142
diff
changeset
|
7532 staticpro (&Qpgrp); |
105877
21bdda3ded62
* xterm.c (syms_of_xterm):
Dan Nicolaescu <dann@ics.uci.edu>
parents:
105872
diff
changeset
|
7533 Qsess = intern_c_string ("sess"); |
97227
1d85638347af
(Fsystem_processes_list, Fsystem_process_attributes): New functions.
Eli Zaretskii <eliz@gnu.org>
parents:
97142
diff
changeset
|
7534 staticpro (&Qsess); |
105877
21bdda3ded62
* xterm.c (syms_of_xterm):
Dan Nicolaescu <dann@ics.uci.edu>
parents:
105872
diff
changeset
|
7535 Qttname = intern_c_string ("ttname"); |
97227
1d85638347af
(Fsystem_processes_list, Fsystem_process_attributes): New functions.
Eli Zaretskii <eliz@gnu.org>
parents:
97142
diff
changeset
|
7536 staticpro (&Qttname); |
105877
21bdda3ded62
* xterm.c (syms_of_xterm):
Dan Nicolaescu <dann@ics.uci.edu>
parents:
105872
diff
changeset
|
7537 Qtpgid = intern_c_string ("tpgid"); |
97227
1d85638347af
(Fsystem_processes_list, Fsystem_process_attributes): New functions.
Eli Zaretskii <eliz@gnu.org>
parents:
97142
diff
changeset
|
7538 staticpro (&Qtpgid); |
105877
21bdda3ded62
* xterm.c (syms_of_xterm):
Dan Nicolaescu <dann@ics.uci.edu>
parents:
105872
diff
changeset
|
7539 Qminflt = intern_c_string ("minflt"); |
97227
1d85638347af
(Fsystem_processes_list, Fsystem_process_attributes): New functions.
Eli Zaretskii <eliz@gnu.org>
parents:
97142
diff
changeset
|
7540 staticpro (&Qminflt); |
105877
21bdda3ded62
* xterm.c (syms_of_xterm):
Dan Nicolaescu <dann@ics.uci.edu>
parents:
105872
diff
changeset
|
7541 Qmajflt = intern_c_string ("majflt"); |
97227
1d85638347af
(Fsystem_processes_list, Fsystem_process_attributes): New functions.
Eli Zaretskii <eliz@gnu.org>
parents:
97142
diff
changeset
|
7542 staticpro (&Qmajflt); |
105877
21bdda3ded62
* xterm.c (syms_of_xterm):
Dan Nicolaescu <dann@ics.uci.edu>
parents:
105872
diff
changeset
|
7543 Qcminflt = intern_c_string ("cminflt"); |
97227
1d85638347af
(Fsystem_processes_list, Fsystem_process_attributes): New functions.
Eli Zaretskii <eliz@gnu.org>
parents:
97142
diff
changeset
|
7544 staticpro (&Qcminflt); |
105877
21bdda3ded62
* xterm.c (syms_of_xterm):
Dan Nicolaescu <dann@ics.uci.edu>
parents:
105872
diff
changeset
|
7545 Qcmajflt = intern_c_string ("cmajflt"); |
97227
1d85638347af
(Fsystem_processes_list, Fsystem_process_attributes): New functions.
Eli Zaretskii <eliz@gnu.org>
parents:
97142
diff
changeset
|
7546 staticpro (&Qcmajflt); |
105877
21bdda3ded62
* xterm.c (syms_of_xterm):
Dan Nicolaescu <dann@ics.uci.edu>
parents:
105872
diff
changeset
|
7547 Qutime = intern_c_string ("utime"); |
97227
1d85638347af
(Fsystem_processes_list, Fsystem_process_attributes): New functions.
Eli Zaretskii <eliz@gnu.org>
parents:
97142
diff
changeset
|
7548 staticpro (&Qutime); |
105877
21bdda3ded62
* xterm.c (syms_of_xterm):
Dan Nicolaescu <dann@ics.uci.edu>
parents:
105872
diff
changeset
|
7549 Qstime = intern_c_string ("stime"); |
97227
1d85638347af
(Fsystem_processes_list, Fsystem_process_attributes): New functions.
Eli Zaretskii <eliz@gnu.org>
parents:
97142
diff
changeset
|
7550 staticpro (&Qstime); |
105877
21bdda3ded62
* xterm.c (syms_of_xterm):
Dan Nicolaescu <dann@ics.uci.edu>
parents:
105872
diff
changeset
|
7551 Qtime = intern_c_string ("time"); |
100828
0b30d1767fab
(top level) <Qtime, Qctime>: New variables.
Eli Zaretskii <eliz@gnu.org>
parents:
100824
diff
changeset
|
7552 staticpro (&Qtime); |
105877
21bdda3ded62
* xterm.c (syms_of_xterm):
Dan Nicolaescu <dann@ics.uci.edu>
parents:
105872
diff
changeset
|
7553 Qcutime = intern_c_string ("cutime"); |
97227
1d85638347af
(Fsystem_processes_list, Fsystem_process_attributes): New functions.
Eli Zaretskii <eliz@gnu.org>
parents:
97142
diff
changeset
|
7554 staticpro (&Qcutime); |
105877
21bdda3ded62
* xterm.c (syms_of_xterm):
Dan Nicolaescu <dann@ics.uci.edu>
parents:
105872
diff
changeset
|
7555 Qcstime = intern_c_string ("cstime"); |
97227
1d85638347af
(Fsystem_processes_list, Fsystem_process_attributes): New functions.
Eli Zaretskii <eliz@gnu.org>
parents:
97142
diff
changeset
|
7556 staticpro (&Qcstime); |
105877
21bdda3ded62
* xterm.c (syms_of_xterm):
Dan Nicolaescu <dann@ics.uci.edu>
parents:
105872
diff
changeset
|
7557 Qctime = intern_c_string ("ctime"); |
100828
0b30d1767fab
(top level) <Qtime, Qctime>: New variables.
Eli Zaretskii <eliz@gnu.org>
parents:
100824
diff
changeset
|
7558 staticpro (&Qctime); |
105877
21bdda3ded62
* xterm.c (syms_of_xterm):
Dan Nicolaescu <dann@ics.uci.edu>
parents:
105872
diff
changeset
|
7559 Qpri = intern_c_string ("pri"); |
97227
1d85638347af
(Fsystem_processes_list, Fsystem_process_attributes): New functions.
Eli Zaretskii <eliz@gnu.org>
parents:
97142
diff
changeset
|
7560 staticpro (&Qpri); |
105877
21bdda3ded62
* xterm.c (syms_of_xterm):
Dan Nicolaescu <dann@ics.uci.edu>
parents:
105872
diff
changeset
|
7561 Qnice = intern_c_string ("nice"); |
97227
1d85638347af
(Fsystem_processes_list, Fsystem_process_attributes): New functions.
Eli Zaretskii <eliz@gnu.org>
parents:
97142
diff
changeset
|
7562 staticpro (&Qnice); |
105877
21bdda3ded62
* xterm.c (syms_of_xterm):
Dan Nicolaescu <dann@ics.uci.edu>
parents:
105872
diff
changeset
|
7563 Qthcount = intern_c_string ("thcount"); |
97227
1d85638347af
(Fsystem_processes_list, Fsystem_process_attributes): New functions.
Eli Zaretskii <eliz@gnu.org>
parents:
97142
diff
changeset
|
7564 staticpro (&Qthcount); |
105877
21bdda3ded62
* xterm.c (syms_of_xterm):
Dan Nicolaescu <dann@ics.uci.edu>
parents:
105872
diff
changeset
|
7565 Qstart = intern_c_string ("start"); |
97227
1d85638347af
(Fsystem_processes_list, Fsystem_process_attributes): New functions.
Eli Zaretskii <eliz@gnu.org>
parents:
97142
diff
changeset
|
7566 staticpro (&Qstart); |
105877
21bdda3ded62
* xterm.c (syms_of_xterm):
Dan Nicolaescu <dann@ics.uci.edu>
parents:
105872
diff
changeset
|
7567 Qvsize = intern_c_string ("vsize"); |
97227
1d85638347af
(Fsystem_processes_list, Fsystem_process_attributes): New functions.
Eli Zaretskii <eliz@gnu.org>
parents:
97142
diff
changeset
|
7568 staticpro (&Qvsize); |
105877
21bdda3ded62
* xterm.c (syms_of_xterm):
Dan Nicolaescu <dann@ics.uci.edu>
parents:
105872
diff
changeset
|
7569 Qrss = intern_c_string ("rss"); |
97227
1d85638347af
(Fsystem_processes_list, Fsystem_process_attributes): New functions.
Eli Zaretskii <eliz@gnu.org>
parents:
97142
diff
changeset
|
7570 staticpro (&Qrss); |
105877
21bdda3ded62
* xterm.c (syms_of_xterm):
Dan Nicolaescu <dann@ics.uci.edu>
parents:
105872
diff
changeset
|
7571 Qetime = intern_c_string ("etime"); |
97227
1d85638347af
(Fsystem_processes_list, Fsystem_process_attributes): New functions.
Eli Zaretskii <eliz@gnu.org>
parents:
97142
diff
changeset
|
7572 staticpro (&Qetime); |
105877
21bdda3ded62
* xterm.c (syms_of_xterm):
Dan Nicolaescu <dann@ics.uci.edu>
parents:
105872
diff
changeset
|
7573 Qpcpu = intern_c_string ("pcpu"); |
97227
1d85638347af
(Fsystem_processes_list, Fsystem_process_attributes): New functions.
Eli Zaretskii <eliz@gnu.org>
parents:
97142
diff
changeset
|
7574 staticpro (&Qpcpu); |
105877
21bdda3ded62
* xterm.c (syms_of_xterm):
Dan Nicolaescu <dann@ics.uci.edu>
parents:
105872
diff
changeset
|
7575 Qpmem = intern_c_string ("pmem"); |
97227
1d85638347af
(Fsystem_processes_list, Fsystem_process_attributes): New functions.
Eli Zaretskii <eliz@gnu.org>
parents:
97142
diff
changeset
|
7576 staticpro (&Qpmem); |
105877
21bdda3ded62
* xterm.c (syms_of_xterm):
Dan Nicolaescu <dann@ics.uci.edu>
parents:
105872
diff
changeset
|
7577 Qargs = intern_c_string ("args"); |
97227
1d85638347af
(Fsystem_processes_list, Fsystem_process_attributes): New functions.
Eli Zaretskii <eliz@gnu.org>
parents:
97142
diff
changeset
|
7578 staticpro (&Qargs); |
1d85638347af
(Fsystem_processes_list, Fsystem_process_attributes): New functions.
Eli Zaretskii <eliz@gnu.org>
parents:
97142
diff
changeset
|
7579 |
578 | 7580 DEFVAR_BOOL ("delete-exited-processes", &delete_exited_processes, |
40103
6b389fb978bc
Change doc-string comments to `new style' [w/`doc:' keyword].
Pavel Janík <Pavel@Janik.cz>
parents:
39973
diff
changeset
|
7581 doc: /* *Non-nil means delete processes immediately when they exit. |
73951
182d429ba6f9
(syms_of_process) <delete-exited-processes>: Doc fix.
Juanma Barranquero <lekktu@gmail.com>
parents:
73225
diff
changeset
|
7582 A value of nil means don't delete them until `list-processes' is run. */); |
578 | 7583 |
7584 delete_exited_processes = 1; | |
7585 | |
7586 DEFVAR_LISP ("process-connection-type", &Vprocess_connection_type, | |
40103
6b389fb978bc
Change doc-string comments to `new style' [w/`doc:' keyword].
Pavel Janík <Pavel@Janik.cz>
parents:
39973
diff
changeset
|
7587 doc: /* Control type of device used to communicate with subprocesses. |
6b389fb978bc
Change doc-string comments to `new style' [w/`doc:' keyword].
Pavel Janík <Pavel@Janik.cz>
parents:
39973
diff
changeset
|
7588 Values are nil to use a pipe, or t or `pty' to use a pty. |
6b389fb978bc
Change doc-string comments to `new style' [w/`doc:' keyword].
Pavel Janík <Pavel@Janik.cz>
parents:
39973
diff
changeset
|
7589 The value has no effect if the system has no ptys or if all ptys are busy: |
6b389fb978bc
Change doc-string comments to `new style' [w/`doc:' keyword].
Pavel Janík <Pavel@Janik.cz>
parents:
39973
diff
changeset
|
7590 then a pipe is used in any case. |
6b389fb978bc
Change doc-string comments to `new style' [w/`doc:' keyword].
Pavel Janík <Pavel@Janik.cz>
parents:
39973
diff
changeset
|
7591 The value takes effect when `start-process' is called. */); |
578 | 7592 Vprocess_connection_type = Qt; |
7593 | |
53472
1a5fe79d27f3
(ADAPTIVE_READ_BUFFERING): New conditional.
Kim F. Storm <storm@cua.dk>
parents:
53072
diff
changeset
|
7594 #ifdef ADAPTIVE_READ_BUFFERING |
1a5fe79d27f3
(ADAPTIVE_READ_BUFFERING): New conditional.
Kim F. Storm <storm@cua.dk>
parents:
53072
diff
changeset
|
7595 DEFVAR_LISP ("process-adaptive-read-buffering", &Vprocess_adaptive_read_buffering, |
1a5fe79d27f3
(ADAPTIVE_READ_BUFFERING): New conditional.
Kim F. Storm <storm@cua.dk>
parents:
53072
diff
changeset
|
7596 doc: /* If non-nil, improve receive buffering by delaying after short reads. |
55444
976d03256b41
(Fwaiting_for_user_input_p, Fmake_network_process)
Juanma Barranquero <lekktu@gmail.com>
parents:
53835
diff
changeset
|
7597 On some systems, when Emacs reads the output from a subprocess, the output data |
53472
1a5fe79d27f3
(ADAPTIVE_READ_BUFFERING): New conditional.
Kim F. Storm <storm@cua.dk>
parents:
53072
diff
changeset
|
7598 is read in very small blocks, potentially resulting in very poor performance. |
63278
d826c3c6df3f
(syms_of_process) [ADAPTIVE_READ_BUFFERING]: Fix spellings in docstrings.
Juanma Barranquero <lekktu@gmail.com>
parents:
63147
diff
changeset
|
7599 This behavior can be remedied to some extent by setting this variable to a |
53472
1a5fe79d27f3
(ADAPTIVE_READ_BUFFERING): New conditional.
Kim F. Storm <storm@cua.dk>
parents:
53072
diff
changeset
|
7600 non-nil value, as it will automatically delay reading from such processes, to |
69376
921341a03d5b
(Vprocess_adaptive_read_buffering): Doc fix.
Romain Francoise <romain@orebokech.com>
parents:
69151
diff
changeset
|
7601 allow them to produce more output before Emacs tries to read it. |
53472
1a5fe79d27f3
(ADAPTIVE_READ_BUFFERING): New conditional.
Kim F. Storm <storm@cua.dk>
parents:
53072
diff
changeset
|
7602 If the value is t, the delay is reset after each write to the process; any other |
1a5fe79d27f3
(ADAPTIVE_READ_BUFFERING): New conditional.
Kim F. Storm <storm@cua.dk>
parents:
53072
diff
changeset
|
7603 non-nil value means that the delay is not reset on write. |
1a5fe79d27f3
(ADAPTIVE_READ_BUFFERING): New conditional.
Kim F. Storm <storm@cua.dk>
parents:
53072
diff
changeset
|
7604 The variable takes effect when `start-process' is called. */); |
1a5fe79d27f3
(ADAPTIVE_READ_BUFFERING): New conditional.
Kim F. Storm <storm@cua.dk>
parents:
53072
diff
changeset
|
7605 Vprocess_adaptive_read_buffering = Qt; |
1a5fe79d27f3
(ADAPTIVE_READ_BUFFERING): New conditional.
Kim F. Storm <storm@cua.dk>
parents:
53072
diff
changeset
|
7606 #endif |
1a5fe79d27f3
(ADAPTIVE_READ_BUFFERING): New conditional.
Kim F. Storm <storm@cua.dk>
parents:
53072
diff
changeset
|
7607 |
578 | 7608 defsubr (&Sprocessp); |
7609 defsubr (&Sget_process); | |
7610 defsubr (&Sget_buffer_process); | |
7611 defsubr (&Sdelete_process); | |
7612 defsubr (&Sprocess_status); | |
7613 defsubr (&Sprocess_exit_status); | |
7614 defsubr (&Sprocess_id); | |
7615 defsubr (&Sprocess_name); | |
9030
b14532c71632
(exec_sentinel_error_handler): New function.
Richard M. Stallman <rms@gnu.org>
parents:
8570
diff
changeset
|
7616 defsubr (&Sprocess_tty_name); |
578 | 7617 defsubr (&Sprocess_command); |
7618 defsubr (&Sset_process_buffer); | |
7619 defsubr (&Sprocess_buffer); | |
7620 defsubr (&Sprocess_mark); | |
7621 defsubr (&Sset_process_filter); | |
7622 defsubr (&Sprocess_filter); | |
7623 defsubr (&Sset_process_sentinel); | |
16058
924aeb9ed7c3
(Fprocess_contact): New function.
Richard M. Stallman <rms@gnu.org>
parents:
16053
diff
changeset
|
7624 defsubr (&Sprocess_sentinel); |
6830
bcaddbe53068
(Fset_process_window_size): New function.
Richard M. Stallman <rms@gnu.org>
parents:
6823
diff
changeset
|
7625 defsubr (&Sset_process_window_size); |
21656
bb39a5863a82
(Fset_process_inherit_coding_system_flag,
Eli Zaretskii <eliz@gnu.org>
parents:
21530
diff
changeset
|
7626 defsubr (&Sset_process_inherit_coding_system_flag); |
bb39a5863a82
(Fset_process_inherit_coding_system_flag,
Eli Zaretskii <eliz@gnu.org>
parents:
21530
diff
changeset
|
7627 defsubr (&Sprocess_inherit_coding_system_flag); |
43968
7ec801358b7e
(Qlocal, QCname, QCbuffer, QChost, QCservice, QCfamily)
Kim F. Storm <storm@cua.dk>
parents:
43642
diff
changeset
|
7628 defsubr (&Sset_process_query_on_exit_flag); |
7ec801358b7e
(Qlocal, QCname, QCbuffer, QChost, QCservice, QCfamily)
Kim F. Storm <storm@cua.dk>
parents:
43642
diff
changeset
|
7629 defsubr (&Sprocess_query_on_exit_flag); |
16058
924aeb9ed7c3
(Fprocess_contact): New function.
Richard M. Stallman <rms@gnu.org>
parents:
16053
diff
changeset
|
7630 defsubr (&Sprocess_contact); |
49223
26622fa0d099
Reworked 2003-01-12 change -- call a plist a plist!
Kim F. Storm <storm@cua.dk>
parents:
49164
diff
changeset
|
7631 defsubr (&Sprocess_plist); |
26622fa0d099
Reworked 2003-01-12 change -- call a plist a plist!
Kim F. Storm <storm@cua.dk>
parents:
49164
diff
changeset
|
7632 defsubr (&Sset_process_plist); |
578 | 7633 defsubr (&Slist_processes); |
7634 defsubr (&Sprocess_list); | |
7635 defsubr (&Sstart_process); | |
95884
d6a4488883dc
Daniel Engeler <engeler at gmail.com>
Glenn Morris <rgm@gnu.org>
parents:
95387
diff
changeset
|
7636 #ifdef HAVE_SERIAL |
d6a4488883dc
Daniel Engeler <engeler at gmail.com>
Glenn Morris <rgm@gnu.org>
parents:
95387
diff
changeset
|
7637 defsubr (&Sserial_process_configure); |
d6a4488883dc
Daniel Engeler <engeler at gmail.com>
Glenn Morris <rgm@gnu.org>
parents:
95387
diff
changeset
|
7638 defsubr (&Smake_serial_process); |
d6a4488883dc
Daniel Engeler <engeler at gmail.com>
Glenn Morris <rgm@gnu.org>
parents:
95387
diff
changeset
|
7639 #endif /* HAVE_SERIAL */ |
578 | 7640 #ifdef HAVE_SOCKETS |
52516
0ca23eb697b9
(Fset_process_sentinel): Add sentinel to childp plist
Kim F. Storm <storm@cua.dk>
parents:
52503
diff
changeset
|
7641 defsubr (&Sset_network_process_option); |
43968
7ec801358b7e
(Qlocal, QCname, QCbuffer, QChost, QCservice, QCfamily)
Kim F. Storm <storm@cua.dk>
parents:
43642
diff
changeset
|
7642 defsubr (&Smake_network_process); |
47987
b30942bd85f3
(Fformat_network_address): New function.
Kim F. Storm <storm@cua.dk>
parents:
47542
diff
changeset
|
7643 defsubr (&Sformat_network_address); |
52525
fd2be6cea0e7
(Fnetwork_interface_list, Fnetwork_interface_info):
Kim F. Storm <storm@cua.dk>
parents:
52516
diff
changeset
|
7644 #endif /* HAVE_SOCKETS */ |
fd2be6cea0e7
(Fnetwork_interface_list, Fnetwork_interface_info):
Kim F. Storm <storm@cua.dk>
parents:
52516
diff
changeset
|
7645 #if defined(HAVE_SOCKETS) && defined(HAVE_NET_IF_H) && defined(HAVE_SYS_IOCTL_H) |
52503
256a27a47af1
[HAVE_SOCKETS]: Include sys/ioctl.h and net/if.h.
Kim F. Storm <storm@cua.dk>
parents:
52401
diff
changeset
|
7646 #ifdef SIOCGIFCONF |
256a27a47af1
[HAVE_SOCKETS]: Include sys/ioctl.h and net/if.h.
Kim F. Storm <storm@cua.dk>
parents:
52401
diff
changeset
|
7647 defsubr (&Snetwork_interface_list); |
256a27a47af1
[HAVE_SOCKETS]: Include sys/ioctl.h and net/if.h.
Kim F. Storm <storm@cua.dk>
parents:
52401
diff
changeset
|
7648 #endif |
256a27a47af1
[HAVE_SOCKETS]: Include sys/ioctl.h and net/if.h.
Kim F. Storm <storm@cua.dk>
parents:
52401
diff
changeset
|
7649 #if defined(SIOCGIFADDR) || defined(SIOCGIFHWADDR) || defined(SIOCGIFFLAGS) |
52516
0ca23eb697b9
(Fset_process_sentinel): Add sentinel to childp plist
Kim F. Storm <storm@cua.dk>
parents:
52503
diff
changeset
|
7650 defsubr (&Snetwork_interface_info); |
52503
256a27a47af1
[HAVE_SOCKETS]: Include sys/ioctl.h and net/if.h.
Kim F. Storm <storm@cua.dk>
parents:
52401
diff
changeset
|
7651 #endif |
52525
fd2be6cea0e7
(Fnetwork_interface_list, Fnetwork_interface_info):
Kim F. Storm <storm@cua.dk>
parents:
52516
diff
changeset
|
7652 #endif /* HAVE_SOCKETS ... */ |
43968
7ec801358b7e
(Qlocal, QCname, QCbuffer, QChost, QCservice, QCfamily)
Kim F. Storm <storm@cua.dk>
parents:
43642
diff
changeset
|
7653 #ifdef DATAGRAM_SOCKETS |
7ec801358b7e
(Qlocal, QCname, QCbuffer, QChost, QCservice, QCfamily)
Kim F. Storm <storm@cua.dk>
parents:
43642
diff
changeset
|
7654 defsubr (&Sprocess_datagram_address); |
7ec801358b7e
(Qlocal, QCname, QCbuffer, QChost, QCservice, QCfamily)
Kim F. Storm <storm@cua.dk>
parents:
43642
diff
changeset
|
7655 defsubr (&Sset_process_datagram_address); |
7ec801358b7e
(Qlocal, QCname, QCbuffer, QChost, QCservice, QCfamily)
Kim F. Storm <storm@cua.dk>
parents:
43642
diff
changeset
|
7656 #endif |
578 | 7657 defsubr (&Saccept_process_output); |
7658 defsubr (&Sprocess_send_region); | |
7659 defsubr (&Sprocess_send_string); | |
7660 defsubr (&Sinterrupt_process); | |
7661 defsubr (&Skill_process); | |
7662 defsubr (&Squit_process); | |
7663 defsubr (&Sstop_process); | |
7664 defsubr (&Scontinue_process); | |
24352
023601636a18
(syms_of_process): defsubr it.
Richard M. Stallman <rms@gnu.org>
parents:
23930
diff
changeset
|
7665 defsubr (&Sprocess_running_child_p); |
578 | 7666 defsubr (&Sprocess_send_eof); |
7667 defsubr (&Ssignal_process); | |
7668 defsubr (&Swaiting_for_user_input_p); | |
95884
d6a4488883dc
Daniel Engeler <engeler at gmail.com>
Glenn Morris <rgm@gnu.org>
parents:
95387
diff
changeset
|
7669 defsubr (&Sprocess_type); |
17041
b61cbe595be5
Include charset.h and coding.h.
Karl Heuer <kwzh@gnu.org>
parents:
16780
diff
changeset
|
7670 defsubr (&Sset_process_coding_system); |
b61cbe595be5
Include charset.h and coding.h.
Karl Heuer <kwzh@gnu.org>
parents:
16780
diff
changeset
|
7671 defsubr (&Sprocess_coding_system); |
49667
cbec1327e2f1
(QCfilter_multibyte): New variable.
Kenichi Handa <handa@m17n.org>
parents:
49600
diff
changeset
|
7672 defsubr (&Sset_process_filter_multibyte); |
cbec1327e2f1
(QCfilter_multibyte): New variable.
Kenichi Handa <handa@m17n.org>
parents:
49600
diff
changeset
|
7673 defsubr (&Sprocess_filter_multibyte_p); |
97227
1d85638347af
(Fsystem_processes_list, Fsystem_process_attributes): New functions.
Eli Zaretskii <eliz@gnu.org>
parents:
97142
diff
changeset
|
7674 defsubr (&Slist_system_processes); |
102205
0f4ba7f17aa0
Rename `system-process-attributes' to `process-attributes'
Miles Bader <miles@gnu.org>
parents:
101932
diff
changeset
|
7675 defsubr (&Sprocess_attributes); |
578 | 7676 } |
7677 | |
588 | 7678 |
7679 #else /* not subprocesses */ | |
7680 | |
7681 #include <sys/types.h> | |
7682 #include <errno.h> | |
97227
1d85638347af
(Fsystem_processes_list, Fsystem_process_attributes): New functions.
Eli Zaretskii <eliz@gnu.org>
parents:
97142
diff
changeset
|
7683 #include <sys/stat.h> |
1d85638347af
(Fsystem_processes_list, Fsystem_process_attributes): New functions.
Eli Zaretskii <eliz@gnu.org>
parents:
97142
diff
changeset
|
7684 #include <stdlib.h> |
1d85638347af
(Fsystem_processes_list, Fsystem_process_attributes): New functions.
Eli Zaretskii <eliz@gnu.org>
parents:
97142
diff
changeset
|
7685 #include <fcntl.h> |
105669
68dd71358159
* alloc.c: Do not define struct catchtag.
Dan Nicolaescu <dann@ics.uci.edu>
parents:
105577
diff
changeset
|
7686 #include <setjmp.h> |
97227
1d85638347af
(Fsystem_processes_list, Fsystem_process_attributes): New functions.
Eli Zaretskii <eliz@gnu.org>
parents:
97142
diff
changeset
|
7687 #ifdef HAVE_UNISTD_H |
1d85638347af
(Fsystem_processes_list, Fsystem_process_attributes): New functions.
Eli Zaretskii <eliz@gnu.org>
parents:
97142
diff
changeset
|
7688 #include <unistd.h> |
1d85638347af
(Fsystem_processes_list, Fsystem_process_attributes): New functions.
Eli Zaretskii <eliz@gnu.org>
parents:
97142
diff
changeset
|
7689 #endif |
588 | 7690 |
7691 #include "lisp.h" | |
7692 #include "systime.h" | |
88385
c60e206fcf58
Include "character.h" instead of "charset.h".
Kenichi Handa <handa@m17n.org>
parents:
42600
diff
changeset
|
7693 #include "character.h" |
21656
bb39a5863a82
(Fset_process_inherit_coding_system_flag,
Eli Zaretskii <eliz@gnu.org>
parents:
21530
diff
changeset
|
7694 #include "coding.h" |
588 | 7695 #include "termopts.h" |
12132
017f32786ed3
[!subprocesses]: Include sysselect.h.
Karl Heuer <kwzh@gnu.org>
parents:
11926
diff
changeset
|
7696 #include "sysselect.h" |
588 | 7697 |
765 | 7698 extern int frame_garbaged; |
588 | 7699 |
14806
232b90ad50e8
(wait_reading_process_input) [! subprocesses]: Run
Karl Heuer <kwzh@gnu.org>
parents:
14802
diff
changeset
|
7700 extern EMACS_TIME timer_check (); |
232b90ad50e8
(wait_reading_process_input) [! subprocesses]: Run
Karl Heuer <kwzh@gnu.org>
parents:
14802
diff
changeset
|
7701 extern int timers_run; |
588 | 7702 |
97650
8b1a761cfe61
[!subprocesses]: Define QCname.
Eli Zaretskii <eliz@gnu.org>
parents:
97498
diff
changeset
|
7703 Lisp_Object QCtype, QCname; |
44067
e8a136850817
(QCfeature, QCdatagram): Removed variables.
Kim F. Storm <storm@cua.dk>
parents:
44041
diff
changeset
|
7704 |
100860
0d09a43201b6
(Qeuid, Qegid, Qcomm, Qstate, Qppid, Qpgrp, Qsess)
Eli Zaretskii <eliz@gnu.org>
parents:
100828
diff
changeset
|
7705 Lisp_Object Qeuid, Qegid, Qcomm, Qstate, Qppid, Qpgrp, Qsess, Qttname, Qtpgid; |
0d09a43201b6
(Qeuid, Qegid, Qcomm, Qstate, Qppid, Qpgrp, Qsess)
Eli Zaretskii <eliz@gnu.org>
parents:
100828
diff
changeset
|
7706 Lisp_Object Qminflt, Qmajflt, Qcminflt, Qcmajflt, Qutime, Qstime, Qcstime; |
0d09a43201b6
(Qeuid, Qegid, Qcomm, Qstate, Qppid, Qpgrp, Qsess)
Eli Zaretskii <eliz@gnu.org>
parents:
100828
diff
changeset
|
7707 Lisp_Object Qcutime, Qpri, Qnice, Qthcount, Qstart, Qvsize, Qrss, Qargs; |
0d09a43201b6
(Qeuid, Qegid, Qcomm, Qstate, Qppid, Qpgrp, Qsess)
Eli Zaretskii <eliz@gnu.org>
parents:
100828
diff
changeset
|
7708 Lisp_Object Quser, Qgroup, Qetime, Qpcpu, Qpmem, Qtime, Qctime; |
0d09a43201b6
(Qeuid, Qegid, Qcomm, Qstate, Qppid, Qpgrp, Qsess)
Eli Zaretskii <eliz@gnu.org>
parents:
100828
diff
changeset
|
7709 |
588 | 7710 /* As described above, except assuming that there are no subprocesses: |
7711 | |
7712 Wait for timeout to elapse and/or keyboard input to be available. | |
7713 | |
7714 time_limit is: | |
7715 timeout in seconds, or | |
7716 zero for no limit, or | |
7717 -1 means gobble data immediately available but don't wait for any. | |
7718 | |
650 | 7719 read_kbd is a Lisp_Object: |
588 | 7720 0 to ignore keyboard input, or |
7721 1 to return when input is available, or | |
7722 -1 means caller will actually read the input, so don't throw to | |
7723 the quit handler. | |
56716
c126b8b6a314
* process.c (wait_reading_process_input): Clean up.
Kim F. Storm <storm@cua.dk>
parents:
56713
diff
changeset
|
7724 |
c126b8b6a314
* process.c (wait_reading_process_input): Clean up.
Kim F. Storm <storm@cua.dk>
parents:
56713
diff
changeset
|
7725 see full version for other parameters. We know that wait_proc will |
c126b8b6a314
* process.c (wait_reading_process_input): Clean up.
Kim F. Storm <storm@cua.dk>
parents:
56713
diff
changeset
|
7726 always be NULL, since `subprocesses' isn't defined. |
588 | 7727 |
7728 do_display != 0 means redisplay should be done to show subprocess | |
6429
1dbe24a029fd
(wait_reading_process_input, both versions): Don't call
Richard M. Stallman <rms@gnu.org>
parents:
6393
diff
changeset
|
7729 output that arrives. |
588 | 7730 |
78501 | 7731 Return true if we received input from any process. */ |
588 | 7732 |
7733 int | |
56728
1686b397ef16
(wait_reading_process_output): Rename from
Kim F. Storm <storm@cua.dk>
parents:
56716
diff
changeset
|
7734 wait_reading_process_output (time_limit, microsecs, read_kbd, do_display, |
1686b397ef16
(wait_reading_process_output): Rename from
Kim F. Storm <storm@cua.dk>
parents:
56716
diff
changeset
|
7735 wait_for_cell, wait_proc, just_wait_proc) |
56716
c126b8b6a314
* process.c (wait_reading_process_input): Clean up.
Kim F. Storm <storm@cua.dk>
parents:
56713
diff
changeset
|
7736 int time_limit, microsecs, read_kbd, do_display; |
c126b8b6a314
* process.c (wait_reading_process_input): Clean up.
Kim F. Storm <storm@cua.dk>
parents:
56713
diff
changeset
|
7737 Lisp_Object wait_for_cell; |
c126b8b6a314
* process.c (wait_reading_process_input): Clean up.
Kim F. Storm <storm@cua.dk>
parents:
56713
diff
changeset
|
7738 struct Lisp_Process *wait_proc; |
c126b8b6a314
* process.c (wait_reading_process_input): Clean up.
Kim F. Storm <storm@cua.dk>
parents:
56713
diff
changeset
|
7739 int just_wait_proc; |
588 | 7740 { |
22535
fd9324c5a498
(wait_reading_process_input): Recompute timeout each
Eli Zaretskii <eliz@gnu.org>
parents:
22523
diff
changeset
|
7741 register int nfds; |
14806
232b90ad50e8
(wait_reading_process_input) [! subprocesses]: Run
Karl Heuer <kwzh@gnu.org>
parents:
14802
diff
changeset
|
7742 EMACS_TIME end_time, timeout; |
14278
3562c5f43780
(wait_reading_process_input) [not subprocesses]: Do
Karl Heuer <kwzh@gnu.org>
parents:
14186
diff
changeset
|
7743 SELECT_TYPE waitchannels; |
14806
232b90ad50e8
(wait_reading_process_input) [! subprocesses]: Run
Karl Heuer <kwzh@gnu.org>
parents:
14802
diff
changeset
|
7744 int xerrno; |
588 | 7745 |
7746 /* What does time_limit really mean? */ | |
7747 if (time_limit || microsecs) | |
7748 { | |
7749 EMACS_GET_TIME (end_time); | |
22535
fd9324c5a498
(wait_reading_process_input): Recompute timeout each
Eli Zaretskii <eliz@gnu.org>
parents:
22523
diff
changeset
|
7750 EMACS_SET_SECS_USECS (timeout, time_limit, microsecs); |
588 | 7751 EMACS_ADD_TIME (end_time, end_time, timeout); |
7752 } | |
7753 | |
7754 /* Turn off periodic alarms (in case they are in use) | |
47431
8871e67384e4
(wait_reading_process_input, both versions):
Richard M. Stallman <rms@gnu.org>
parents:
47020
diff
changeset
|
7755 and then turn off any other atimers, |
588 | 7756 because the select emulator uses alarms. */ |
47431
8871e67384e4
(wait_reading_process_input, both versions):
Richard M. Stallman <rms@gnu.org>
parents:
47020
diff
changeset
|
7757 stop_polling (); |
27430
1aa71680fe50
(toplevel): Include atimer.h.
Gerd Moellmann <gerd@gnu.org>
parents:
27028
diff
changeset
|
7758 turn_on_atimers (0); |
588 | 7759 |
22535
fd9324c5a498
(wait_reading_process_input): Recompute timeout each
Eli Zaretskii <eliz@gnu.org>
parents:
22523
diff
changeset
|
7760 while (1) |
588 | 7761 { |
14802
45827a5afe4d
[!subprocesses] (wait_reading_process_input):
Richard M. Stallman <rms@gnu.org>
parents:
14785
diff
changeset
|
7762 int timeout_reduced_for_timers = 0; |
588 | 7763 |
7764 /* If calling from keyboard input, do not quit | |
7765 since we want to return C-g as an input character. | |
7766 Otherwise, do pending quit if requested. */ | |
56716
c126b8b6a314
* process.c (wait_reading_process_input): Clean up.
Kim F. Storm <storm@cua.dk>
parents:
56713
diff
changeset
|
7767 if (read_kbd >= 0) |
588 | 7768 QUIT; |
7769 | |
15021
af36df262fc5
(wait_reading_process_input) [!subprocesses]: Handle
Richard M. Stallman <rms@gnu.org>
parents:
14998
diff
changeset
|
7770 /* Exit now if the cell we're waiting for became non-nil. */ |
39973
579177964efa
Avoid (most) uses of XCAR/XCDR as lvalues, for flexibility in experimenting
Ken Raeburn <raeburn@raeburn.org>
parents:
39964
diff
changeset
|
7771 if (! NILP (wait_for_cell) && ! NILP (XCAR (wait_for_cell))) |
15021
af36df262fc5
(wait_reading_process_input) [!subprocesses]: Handle
Richard M. Stallman <rms@gnu.org>
parents:
14998
diff
changeset
|
7772 break; |
af36df262fc5
(wait_reading_process_input) [!subprocesses]: Handle
Richard M. Stallman <rms@gnu.org>
parents:
14998
diff
changeset
|
7773 |
14802
45827a5afe4d
[!subprocesses] (wait_reading_process_input):
Richard M. Stallman <rms@gnu.org>
parents:
14785
diff
changeset
|
7774 /* Compute time from now till when time limit is up */ |
45827a5afe4d
[!subprocesses] (wait_reading_process_input):
Richard M. Stallman <rms@gnu.org>
parents:
14785
diff
changeset
|
7775 /* Exit if already run out */ |
22535
fd9324c5a498
(wait_reading_process_input): Recompute timeout each
Eli Zaretskii <eliz@gnu.org>
parents:
22523
diff
changeset
|
7776 if (time_limit == -1) |
fd9324c5a498
(wait_reading_process_input): Recompute timeout each
Eli Zaretskii <eliz@gnu.org>
parents:
22523
diff
changeset
|
7777 { |
fd9324c5a498
(wait_reading_process_input): Recompute timeout each
Eli Zaretskii <eliz@gnu.org>
parents:
22523
diff
changeset
|
7778 /* -1 specified for timeout means |
fd9324c5a498
(wait_reading_process_input): Recompute timeout each
Eli Zaretskii <eliz@gnu.org>
parents:
22523
diff
changeset
|
7779 gobble output available now |
fd9324c5a498
(wait_reading_process_input): Recompute timeout each
Eli Zaretskii <eliz@gnu.org>
parents:
22523
diff
changeset
|
7780 but don't wait at all. */ |
fd9324c5a498
(wait_reading_process_input): Recompute timeout each
Eli Zaretskii <eliz@gnu.org>
parents:
22523
diff
changeset
|
7781 |
fd9324c5a498
(wait_reading_process_input): Recompute timeout each
Eli Zaretskii <eliz@gnu.org>
parents:
22523
diff
changeset
|
7782 EMACS_SET_SECS_USECS (timeout, 0, 0); |
fd9324c5a498
(wait_reading_process_input): Recompute timeout each
Eli Zaretskii <eliz@gnu.org>
parents:
22523
diff
changeset
|
7783 } |
fd9324c5a498
(wait_reading_process_input): Recompute timeout each
Eli Zaretskii <eliz@gnu.org>
parents:
22523
diff
changeset
|
7784 else if (time_limit || microsecs) |
588 | 7785 { |
14806
232b90ad50e8
(wait_reading_process_input) [! subprocesses]: Run
Karl Heuer <kwzh@gnu.org>
parents:
14802
diff
changeset
|
7786 EMACS_GET_TIME (timeout); |
232b90ad50e8
(wait_reading_process_input) [! subprocesses]: Run
Karl Heuer <kwzh@gnu.org>
parents:
14802
diff
changeset
|
7787 EMACS_SUB_TIME (timeout, end_time, timeout); |
232b90ad50e8
(wait_reading_process_input) [! subprocesses]: Run
Karl Heuer <kwzh@gnu.org>
parents:
14802
diff
changeset
|
7788 if (EMACS_TIME_NEG_P (timeout)) |
588 | 7789 break; |
7790 } | |
22535
fd9324c5a498
(wait_reading_process_input): Recompute timeout each
Eli Zaretskii <eliz@gnu.org>
parents:
22523
diff
changeset
|
7791 else |
fd9324c5a498
(wait_reading_process_input): Recompute timeout each
Eli Zaretskii <eliz@gnu.org>
parents:
22523
diff
changeset
|
7792 { |
fd9324c5a498
(wait_reading_process_input): Recompute timeout each
Eli Zaretskii <eliz@gnu.org>
parents:
22523
diff
changeset
|
7793 EMACS_SET_SECS_USECS (timeout, 100000, 0); |
fd9324c5a498
(wait_reading_process_input): Recompute timeout each
Eli Zaretskii <eliz@gnu.org>
parents:
22523
diff
changeset
|
7794 } |
588 | 7795 |
14802
45827a5afe4d
[!subprocesses] (wait_reading_process_input):
Richard M. Stallman <rms@gnu.org>
parents:
14785
diff
changeset
|
7796 /* If our caller will not immediately handle keyboard events, |
45827a5afe4d
[!subprocesses] (wait_reading_process_input):
Richard M. Stallman <rms@gnu.org>
parents:
14785
diff
changeset
|
7797 run timer events directly. |
45827a5afe4d
[!subprocesses] (wait_reading_process_input):
Richard M. Stallman <rms@gnu.org>
parents:
14785
diff
changeset
|
7798 (Callers that will immediately read keyboard events |
45827a5afe4d
[!subprocesses] (wait_reading_process_input):
Richard M. Stallman <rms@gnu.org>
parents:
14785
diff
changeset
|
7799 call timer_delay on their own.) */ |
39973
579177964efa
Avoid (most) uses of XCAR/XCDR as lvalues, for flexibility in experimenting
Ken Raeburn <raeburn@raeburn.org>
parents:
39964
diff
changeset
|
7800 if (NILP (wait_for_cell)) |
14802
45827a5afe4d
[!subprocesses] (wait_reading_process_input):
Richard M. Stallman <rms@gnu.org>
parents:
14785
diff
changeset
|
7801 { |
45827a5afe4d
[!subprocesses] (wait_reading_process_input):
Richard M. Stallman <rms@gnu.org>
parents:
14785
diff
changeset
|
7802 EMACS_TIME timer_delay; |
34660
75866a7ebaec
(wait_reading_process_input): Check for pending
Gerd Moellmann <gerd@gnu.org>
parents:
34647
diff
changeset
|
7803 |
75866a7ebaec
(wait_reading_process_input): Check for pending
Gerd Moellmann <gerd@gnu.org>
parents:
34647
diff
changeset
|
7804 do |
15021
af36df262fc5
(wait_reading_process_input) [!subprocesses]: Handle
Richard M. Stallman <rms@gnu.org>
parents:
14998
diff
changeset
|
7805 { |
34660
75866a7ebaec
(wait_reading_process_input): Check for pending
Gerd Moellmann <gerd@gnu.org>
parents:
34647
diff
changeset
|
7806 int old_timers_run = timers_run; |
75866a7ebaec
(wait_reading_process_input): Check for pending
Gerd Moellmann <gerd@gnu.org>
parents:
34647
diff
changeset
|
7807 timer_delay = timer_check (1); |
75866a7ebaec
(wait_reading_process_input): Check for pending
Gerd Moellmann <gerd@gnu.org>
parents:
34647
diff
changeset
|
7808 if (timers_run != old_timers_run && do_display) |
75866a7ebaec
(wait_reading_process_input): Check for pending
Gerd Moellmann <gerd@gnu.org>
parents:
34647
diff
changeset
|
7809 /* We must retry, since a timer may have requeued itself |
75866a7ebaec
(wait_reading_process_input): Check for pending
Gerd Moellmann <gerd@gnu.org>
parents:
34647
diff
changeset
|
7810 and that could alter the time delay. */ |
35336
002c02db42d3
Call redisplay_preserve_echo_area with additional arg.
Gerd Moellmann <gerd@gnu.org>
parents:
34660
diff
changeset
|
7811 redisplay_preserve_echo_area (14); |
34660
75866a7ebaec
(wait_reading_process_input): Check for pending
Gerd Moellmann <gerd@gnu.org>
parents:
34647
diff
changeset
|
7812 else |
75866a7ebaec
(wait_reading_process_input): Check for pending
Gerd Moellmann <gerd@gnu.org>
parents:
34647
diff
changeset
|
7813 break; |
15021
af36df262fc5
(wait_reading_process_input) [!subprocesses]: Handle
Richard M. Stallman <rms@gnu.org>
parents:
14998
diff
changeset
|
7814 } |
34660
75866a7ebaec
(wait_reading_process_input): Check for pending
Gerd Moellmann <gerd@gnu.org>
parents:
34647
diff
changeset
|
7815 while (!detect_input_pending ()); |
15021
af36df262fc5
(wait_reading_process_input) [!subprocesses]: Handle
Richard M. Stallman <rms@gnu.org>
parents:
14998
diff
changeset
|
7816 |
22535
fd9324c5a498
(wait_reading_process_input): Recompute timeout each
Eli Zaretskii <eliz@gnu.org>
parents:
22523
diff
changeset
|
7817 /* If there is unread keyboard input, also return. */ |
56716
c126b8b6a314
* process.c (wait_reading_process_input): Clean up.
Kim F. Storm <storm@cua.dk>
parents:
56713
diff
changeset
|
7818 if (read_kbd != 0 |
22535
fd9324c5a498
(wait_reading_process_input): Recompute timeout each
Eli Zaretskii <eliz@gnu.org>
parents:
22523
diff
changeset
|
7819 && requeued_events_pending_p ()) |
fd9324c5a498
(wait_reading_process_input): Recompute timeout each
Eli Zaretskii <eliz@gnu.org>
parents:
22523
diff
changeset
|
7820 break; |
fd9324c5a498
(wait_reading_process_input): Recompute timeout each
Eli Zaretskii <eliz@gnu.org>
parents:
22523
diff
changeset
|
7821 |
14806
232b90ad50e8
(wait_reading_process_input) [! subprocesses]: Run
Karl Heuer <kwzh@gnu.org>
parents:
14802
diff
changeset
|
7822 if (! EMACS_TIME_NEG_P (timer_delay) && time_limit != -1) |
14802
45827a5afe4d
[!subprocesses] (wait_reading_process_input):
Richard M. Stallman <rms@gnu.org>
parents:
14785
diff
changeset
|
7823 { |
45827a5afe4d
[!subprocesses] (wait_reading_process_input):
Richard M. Stallman <rms@gnu.org>
parents:
14785
diff
changeset
|
7824 EMACS_TIME difference; |
14806
232b90ad50e8
(wait_reading_process_input) [! subprocesses]: Run
Karl Heuer <kwzh@gnu.org>
parents:
14802
diff
changeset
|
7825 EMACS_SUB_TIME (difference, timer_delay, timeout); |
14802
45827a5afe4d
[!subprocesses] (wait_reading_process_input):
Richard M. Stallman <rms@gnu.org>
parents:
14785
diff
changeset
|
7826 if (EMACS_TIME_NEG_P (difference)) |
45827a5afe4d
[!subprocesses] (wait_reading_process_input):
Richard M. Stallman <rms@gnu.org>
parents:
14785
diff
changeset
|
7827 { |
14806
232b90ad50e8
(wait_reading_process_input) [! subprocesses]: Run
Karl Heuer <kwzh@gnu.org>
parents:
14802
diff
changeset
|
7828 timeout = timer_delay; |
14802
45827a5afe4d
[!subprocesses] (wait_reading_process_input):
Richard M. Stallman <rms@gnu.org>
parents:
14785
diff
changeset
|
7829 timeout_reduced_for_timers = 1; |
45827a5afe4d
[!subprocesses] (wait_reading_process_input):
Richard M. Stallman <rms@gnu.org>
parents:
14785
diff
changeset
|
7830 } |
45827a5afe4d
[!subprocesses] (wait_reading_process_input):
Richard M. Stallman <rms@gnu.org>
parents:
14785
diff
changeset
|
7831 } |
45827a5afe4d
[!subprocesses] (wait_reading_process_input):
Richard M. Stallman <rms@gnu.org>
parents:
14785
diff
changeset
|
7832 } |
45827a5afe4d
[!subprocesses] (wait_reading_process_input):
Richard M. Stallman <rms@gnu.org>
parents:
14785
diff
changeset
|
7833 |
588 | 7834 /* Cause C-g and alarm signals to take immediate action, |
7835 and cause input available signals to zero out timeout. */ | |
56716
c126b8b6a314
* process.c (wait_reading_process_input): Clean up.
Kim F. Storm <storm@cua.dk>
parents:
56713
diff
changeset
|
7836 if (read_kbd < 0) |
588 | 7837 set_waiting_for_input (&timeout); |
7838 | |
15021
af36df262fc5
(wait_reading_process_input) [!subprocesses]: Handle
Richard M. Stallman <rms@gnu.org>
parents:
14998
diff
changeset
|
7839 /* Wait till there is something to do. */ |
af36df262fc5
(wait_reading_process_input) [!subprocesses]: Handle
Richard M. Stallman <rms@gnu.org>
parents:
14998
diff
changeset
|
7840 |
56716
c126b8b6a314
* process.c (wait_reading_process_input): Clean up.
Kim F. Storm <storm@cua.dk>
parents:
56713
diff
changeset
|
7841 if (! read_kbd && NILP (wait_for_cell)) |
15021
af36df262fc5
(wait_reading_process_input) [!subprocesses]: Handle
Richard M. Stallman <rms@gnu.org>
parents:
14998
diff
changeset
|
7842 FD_ZERO (&waitchannels); |
af36df262fc5
(wait_reading_process_input) [!subprocesses]: Handle
Richard M. Stallman <rms@gnu.org>
parents:
14998
diff
changeset
|
7843 else |
af36df262fc5
(wait_reading_process_input) [!subprocesses]: Handle
Richard M. Stallman <rms@gnu.org>
parents:
14998
diff
changeset
|
7844 FD_SET (0, &waitchannels); |
af36df262fc5
(wait_reading_process_input) [!subprocesses]: Handle
Richard M. Stallman <rms@gnu.org>
parents:
14998
diff
changeset
|
7845 |
765 | 7846 /* If a frame has been newly mapped and needs updating, |
588 | 7847 reprocess its display stuff. */ |
6429
1dbe24a029fd
(wait_reading_process_input, both versions): Don't call
Richard M. Stallman <rms@gnu.org>
parents:
6393
diff
changeset
|
7848 if (frame_garbaged && do_display) |
15021
af36df262fc5
(wait_reading_process_input) [!subprocesses]: Handle
Richard M. Stallman <rms@gnu.org>
parents:
14998
diff
changeset
|
7849 { |
af36df262fc5
(wait_reading_process_input) [!subprocesses]: Handle
Richard M. Stallman <rms@gnu.org>
parents:
14998
diff
changeset
|
7850 clear_waiting_for_input (); |
35336
002c02db42d3
Call redisplay_preserve_echo_area with additional arg.
Gerd Moellmann <gerd@gnu.org>
parents:
34660
diff
changeset
|
7851 redisplay_preserve_echo_area (15); |
56716
c126b8b6a314
* process.c (wait_reading_process_input): Clean up.
Kim F. Storm <storm@cua.dk>
parents:
56713
diff
changeset
|
7852 if (read_kbd < 0) |
15021
af36df262fc5
(wait_reading_process_input) [!subprocesses]: Handle
Richard M. Stallman <rms@gnu.org>
parents:
14998
diff
changeset
|
7853 set_waiting_for_input (&timeout); |
af36df262fc5
(wait_reading_process_input) [!subprocesses]: Handle
Richard M. Stallman <rms@gnu.org>
parents:
14998
diff
changeset
|
7854 } |
588 | 7855 |
56716
c126b8b6a314
* process.c (wait_reading_process_input): Clean up.
Kim F. Storm <storm@cua.dk>
parents:
56713
diff
changeset
|
7856 if (read_kbd && detect_input_pending ()) |
15025
e5f54fd1c352
(wait_reading_process_input) [!subprocesses]:
Richard M. Stallman <rms@gnu.org>
parents:
15021
diff
changeset
|
7857 { |
e5f54fd1c352
(wait_reading_process_input) [!subprocesses]:
Richard M. Stallman <rms@gnu.org>
parents:
15021
diff
changeset
|
7858 nfds = 0; |
e5f54fd1c352
(wait_reading_process_input) [!subprocesses]:
Richard M. Stallman <rms@gnu.org>
parents:
15021
diff
changeset
|
7859 FD_ZERO (&waitchannels); |
e5f54fd1c352
(wait_reading_process_input) [!subprocesses]:
Richard M. Stallman <rms@gnu.org>
parents:
15021
diff
changeset
|
7860 } |
e5f54fd1c352
(wait_reading_process_input) [!subprocesses]:
Richard M. Stallman <rms@gnu.org>
parents:
15021
diff
changeset
|
7861 else |
e5f54fd1c352
(wait_reading_process_input) [!subprocesses]:
Richard M. Stallman <rms@gnu.org>
parents:
15021
diff
changeset
|
7862 nfds = select (1, &waitchannels, (SELECT_TYPE *)0, (SELECT_TYPE *)0, |
e5f54fd1c352
(wait_reading_process_input) [!subprocesses]:
Richard M. Stallman <rms@gnu.org>
parents:
15021
diff
changeset
|
7863 &timeout); |
14806
232b90ad50e8
(wait_reading_process_input) [! subprocesses]: Run
Karl Heuer <kwzh@gnu.org>
parents:
14802
diff
changeset
|
7864 |
232b90ad50e8
(wait_reading_process_input) [! subprocesses]: Run
Karl Heuer <kwzh@gnu.org>
parents:
14802
diff
changeset
|
7865 xerrno = errno; |
588 | 7866 |
7867 /* Make C-g and alarm signals set flags again */ | |
7868 clear_waiting_for_input (); | |
7869 | |
7870 /* If we woke up due to SIGWINCH, actually change size now. */ | |
25356
5db69f7aadca
Call change_frame_size and do_pending_window_change with
Gerd Moellmann <gerd@gnu.org>
parents:
25262
diff
changeset
|
7871 do_pending_window_change (0); |
588 | 7872 |
14806
232b90ad50e8
(wait_reading_process_input) [! subprocesses]: Run
Karl Heuer <kwzh@gnu.org>
parents:
14802
diff
changeset
|
7873 if (time_limit && nfds == 0 && ! timeout_reduced_for_timers) |
232b90ad50e8
(wait_reading_process_input) [! subprocesses]: Run
Karl Heuer <kwzh@gnu.org>
parents:
14802
diff
changeset
|
7874 /* We waited the full specified time, so return now. */ |
232b90ad50e8
(wait_reading_process_input) [! subprocesses]: Run
Karl Heuer <kwzh@gnu.org>
parents:
14802
diff
changeset
|
7875 break; |
232b90ad50e8
(wait_reading_process_input) [! subprocesses]: Run
Karl Heuer <kwzh@gnu.org>
parents:
14802
diff
changeset
|
7876 |
588 | 7877 if (nfds == -1) |
7878 { | |
7879 /* If the system call was interrupted, then go around the | |
7880 loop again. */ | |
14806
232b90ad50e8
(wait_reading_process_input) [! subprocesses]: Run
Karl Heuer <kwzh@gnu.org>
parents:
14802
diff
changeset
|
7881 if (xerrno == EINTR) |
14278
3562c5f43780
(wait_reading_process_input) [not subprocesses]: Do
Karl Heuer <kwzh@gnu.org>
parents:
14186
diff
changeset
|
7882 FD_ZERO (&waitchannels); |
14806
232b90ad50e8
(wait_reading_process_input) [! subprocesses]: Run
Karl Heuer <kwzh@gnu.org>
parents:
14802
diff
changeset
|
7883 else |
26088
b7aa6ac26872
Add support for large files, 64-bit Solaris, system locale codings.
Paul Eggert <eggert@twinsun.com>
parents:
26019
diff
changeset
|
7884 error ("select error: %s", emacs_strerror (xerrno)); |
588 | 7885 } |
96833
c06568fd3844
* s/usg5-4.h (LIBS_SYSTEM): Remove, system for which this was
Dan Nicolaescu <dann@ics.uci.edu>
parents:
96774
diff
changeset
|
7886 #ifdef SOLARIS2 |
588 | 7887 else if (nfds > 0 && (waitchannels & 1) && interrupt_input) |
7888 /* System sometimes fails to deliver SIGIO. */ | |
7889 kill (getpid (), SIGIO); | |
7890 #endif | |
3915
55ed7a65746e
(wait_reading_process_input): Use SIGIO only if defined.
Richard M. Stallman <rms@gnu.org>
parents:
3826
diff
changeset
|
7891 #ifdef SIGIO |
56716
c126b8b6a314
* process.c (wait_reading_process_input): Clean up.
Kim F. Storm <storm@cua.dk>
parents:
56713
diff
changeset
|
7892 if (read_kbd && interrupt_input && (waitchannels & 1)) |
14736
b17ec81a6294
(wait_reading_process_input): Use getpid when generating SIGIO.
Richard M. Stallman <rms@gnu.org>
parents:
14671
diff
changeset
|
7893 kill (getpid (), SIGIO); |
3915
55ed7a65746e
(wait_reading_process_input): Use SIGIO only if defined.
Richard M. Stallman <rms@gnu.org>
parents:
3826
diff
changeset
|
7894 #endif |
588 | 7895 |
14806
232b90ad50e8
(wait_reading_process_input) [! subprocesses]: Run
Karl Heuer <kwzh@gnu.org>
parents:
14802
diff
changeset
|
7896 /* Check for keyboard input */ |
232b90ad50e8
(wait_reading_process_input) [! subprocesses]: Run
Karl Heuer <kwzh@gnu.org>
parents:
14802
diff
changeset
|
7897 |
56716
c126b8b6a314
* process.c (wait_reading_process_input): Clean up.
Kim F. Storm <storm@cua.dk>
parents:
56713
diff
changeset
|
7898 if (read_kbd |
37413
49147b9fe206
(wait_reading_process_input) [!subprocesses]: Don't
Eli Zaretskii <eliz@gnu.org>
parents:
37398
diff
changeset
|
7899 && detect_input_pending_run_timers (do_display)) |
14806
232b90ad50e8
(wait_reading_process_input) [! subprocesses]: Run
Karl Heuer <kwzh@gnu.org>
parents:
14802
diff
changeset
|
7900 { |
37413
49147b9fe206
(wait_reading_process_input) [!subprocesses]: Don't
Eli Zaretskii <eliz@gnu.org>
parents:
37398
diff
changeset
|
7901 swallow_events (do_display); |
14806
232b90ad50e8
(wait_reading_process_input) [! subprocesses]: Run
Karl Heuer <kwzh@gnu.org>
parents:
14802
diff
changeset
|
7902 if (detect_input_pending_run_timers (do_display)) |
232b90ad50e8
(wait_reading_process_input) [! subprocesses]: Run
Karl Heuer <kwzh@gnu.org>
parents:
14802
diff
changeset
|
7903 break; |
37413
49147b9fe206
(wait_reading_process_input) [!subprocesses]: Don't
Eli Zaretskii <eliz@gnu.org>
parents:
37398
diff
changeset
|
7904 } |
49147b9fe206
(wait_reading_process_input) [!subprocesses]: Don't
Eli Zaretskii <eliz@gnu.org>
parents:
37398
diff
changeset
|
7905 |
22535
fd9324c5a498
(wait_reading_process_input): Recompute timeout each
Eli Zaretskii <eliz@gnu.org>
parents:
22523
diff
changeset
|
7906 /* If there is unread keyboard input, also return. */ |
56716
c126b8b6a314
* process.c (wait_reading_process_input): Clean up.
Kim F. Storm <storm@cua.dk>
parents:
56713
diff
changeset
|
7907 if (read_kbd |
22535
fd9324c5a498
(wait_reading_process_input): Recompute timeout each
Eli Zaretskii <eliz@gnu.org>
parents:
22523
diff
changeset
|
7908 && requeued_events_pending_p ()) |
fd9324c5a498
(wait_reading_process_input): Recompute timeout each
Eli Zaretskii <eliz@gnu.org>
parents:
22523
diff
changeset
|
7909 break; |
fd9324c5a498
(wait_reading_process_input): Recompute timeout each
Eli Zaretskii <eliz@gnu.org>
parents:
22523
diff
changeset
|
7910 |
15064
fb0f2804c34a
(wait_reading_process_input, both definitions):
Richard M. Stallman <rms@gnu.org>
parents:
15025
diff
changeset
|
7911 /* If wait_for_cell. check for keyboard input |
fb0f2804c34a
(wait_reading_process_input, both definitions):
Richard M. Stallman <rms@gnu.org>
parents:
15025
diff
changeset
|
7912 but don't run any timers. |
fb0f2804c34a
(wait_reading_process_input, both definitions):
Richard M. Stallman <rms@gnu.org>
parents:
15025
diff
changeset
|
7913 ??? (It seems wrong to me to check for keyboard |
fb0f2804c34a
(wait_reading_process_input, both definitions):
Richard M. Stallman <rms@gnu.org>
parents:
15025
diff
changeset
|
7914 input at all when wait_for_cell, but the code |
fb0f2804c34a
(wait_reading_process_input, both definitions):
Richard M. Stallman <rms@gnu.org>
parents:
15025
diff
changeset
|
7915 has been this way since July 1994. |
fb0f2804c34a
(wait_reading_process_input, both definitions):
Richard M. Stallman <rms@gnu.org>
parents:
15025
diff
changeset
|
7916 Try changing this after version 19.31.) */ |
39973
579177964efa
Avoid (most) uses of XCAR/XCDR as lvalues, for flexibility in experimenting
Ken Raeburn <raeburn@raeburn.org>
parents:
39964
diff
changeset
|
7917 if (! NILP (wait_for_cell) |
15064
fb0f2804c34a
(wait_reading_process_input, both definitions):
Richard M. Stallman <rms@gnu.org>
parents:
15025
diff
changeset
|
7918 && detect_input_pending ()) |
fb0f2804c34a
(wait_reading_process_input, both definitions):
Richard M. Stallman <rms@gnu.org>
parents:
15025
diff
changeset
|
7919 { |
fb0f2804c34a
(wait_reading_process_input, both definitions):
Richard M. Stallman <rms@gnu.org>
parents:
15025
diff
changeset
|
7920 swallow_events (do_display); |
fb0f2804c34a
(wait_reading_process_input, both definitions):
Richard M. Stallman <rms@gnu.org>
parents:
15025
diff
changeset
|
7921 if (detect_input_pending ()) |
fb0f2804c34a
(wait_reading_process_input, both definitions):
Richard M. Stallman <rms@gnu.org>
parents:
15025
diff
changeset
|
7922 break; |
fb0f2804c34a
(wait_reading_process_input, both definitions):
Richard M. Stallman <rms@gnu.org>
parents:
15025
diff
changeset
|
7923 } |
fb0f2804c34a
(wait_reading_process_input, both definitions):
Richard M. Stallman <rms@gnu.org>
parents:
15025
diff
changeset
|
7924 |
15021
af36df262fc5
(wait_reading_process_input) [!subprocesses]: Handle
Richard M. Stallman <rms@gnu.org>
parents:
14998
diff
changeset
|
7925 /* Exit now if the cell we're waiting for became non-nil. */ |
39973
579177964efa
Avoid (most) uses of XCAR/XCDR as lvalues, for flexibility in experimenting
Ken Raeburn <raeburn@raeburn.org>
parents:
39964
diff
changeset
|
7926 if (! NILP (wait_for_cell) && ! NILP (XCAR (wait_for_cell))) |
15021
af36df262fc5
(wait_reading_process_input) [!subprocesses]: Handle
Richard M. Stallman <rms@gnu.org>
parents:
14998
diff
changeset
|
7927 break; |
588 | 7928 } |
7929 | |
2120
fc3cdca22f8d
* process.c (process_send_signal): In the TERMIOS code for sending
Jim Blandy <jimb@redhat.com>
parents:
1925
diff
changeset
|
7930 start_polling (); |
fc3cdca22f8d
* process.c (process_send_signal): In the TERMIOS code for sending
Jim Blandy <jimb@redhat.com>
parents:
1925
diff
changeset
|
7931 |
588 | 7932 return 0; |
7933 } | |
7934 | |
7935 | |
39964
4ca5cbe5610d
(process-inherit-coding-system-flag, get-buffer-process): Do not confuse
Pavel Janík <Pavel@Janik.cz>
parents:
39812
diff
changeset
|
7936 /* Don't confuse make-docfile by having two doc strings for this function. |
4ca5cbe5610d
(process-inherit-coding-system-flag, get-buffer-process): Do not confuse
Pavel Janík <Pavel@Janik.cz>
parents:
39812
diff
changeset
|
7937 make-docfile does not pay attention to #if, for good reason! */ |
588 | 7938 DEFUN ("get-buffer-process", Fget_buffer_process, Sget_buffer_process, 1, 1, 0, |
40103
6b389fb978bc
Change doc-string comments to `new style' [w/`doc:' keyword].
Pavel Janík <Pavel@Janik.cz>
parents:
39973
diff
changeset
|
7939 0) |
6b389fb978bc
Change doc-string comments to `new style' [w/`doc:' keyword].
Pavel Janík <Pavel@Janik.cz>
parents:
39973
diff
changeset
|
7940 (name) |
588 | 7941 register Lisp_Object name; |
7942 { | |
7943 return Qnil; | |
7944 } | |
7945 | |
39964
4ca5cbe5610d
(process-inherit-coding-system-flag, get-buffer-process): Do not confuse
Pavel Janík <Pavel@Janik.cz>
parents:
39812
diff
changeset
|
7946 /* Don't confuse make-docfile by having two doc strings for this function. |
4ca5cbe5610d
(process-inherit-coding-system-flag, get-buffer-process): Do not confuse
Pavel Janík <Pavel@Janik.cz>
parents:
39812
diff
changeset
|
7947 make-docfile does not pay attention to #if, for good reason! */ |
21656
bb39a5863a82
(Fset_process_inherit_coding_system_flag,
Eli Zaretskii <eliz@gnu.org>
parents:
21530
diff
changeset
|
7948 DEFUN ("process-inherit-coding-system-flag", |
40103
6b389fb978bc
Change doc-string comments to `new style' [w/`doc:' keyword].
Pavel Janík <Pavel@Janik.cz>
parents:
39973
diff
changeset
|
7949 Fprocess_inherit_coding_system_flag, Sprocess_inherit_coding_system_flag, |
6b389fb978bc
Change doc-string comments to `new style' [w/`doc:' keyword].
Pavel Janík <Pavel@Janik.cz>
parents:
39973
diff
changeset
|
7950 1, 1, 0, |
6b389fb978bc
Change doc-string comments to `new style' [w/`doc:' keyword].
Pavel Janík <Pavel@Janik.cz>
parents:
39973
diff
changeset
|
7951 0) |
6b389fb978bc
Change doc-string comments to `new style' [w/`doc:' keyword].
Pavel Janík <Pavel@Janik.cz>
parents:
39973
diff
changeset
|
7952 (process) |
21656
bb39a5863a82
(Fset_process_inherit_coding_system_flag,
Eli Zaretskii <eliz@gnu.org>
parents:
21530
diff
changeset
|
7953 register Lisp_Object process; |
bb39a5863a82
(Fset_process_inherit_coding_system_flag,
Eli Zaretskii <eliz@gnu.org>
parents:
21530
diff
changeset
|
7954 { |
bb39a5863a82
(Fset_process_inherit_coding_system_flag,
Eli Zaretskii <eliz@gnu.org>
parents:
21530
diff
changeset
|
7955 /* Ignore the argument and return the value of |
bb39a5863a82
(Fset_process_inherit_coding_system_flag,
Eli Zaretskii <eliz@gnu.org>
parents:
21530
diff
changeset
|
7956 inherit-process-coding-system. */ |
bb39a5863a82
(Fset_process_inherit_coding_system_flag,
Eli Zaretskii <eliz@gnu.org>
parents:
21530
diff
changeset
|
7957 return inherit_process_coding_system ? Qt : Qnil; |
bb39a5863a82
(Fset_process_inherit_coding_system_flag,
Eli Zaretskii <eliz@gnu.org>
parents:
21530
diff
changeset
|
7958 } |
bb39a5863a82
(Fset_process_inherit_coding_system_flag,
Eli Zaretskii <eliz@gnu.org>
parents:
21530
diff
changeset
|
7959 |
588 | 7960 /* Kill all processes associated with `buffer'. |
7961 If `buffer' is nil, kill all processes. | |
7962 Since we have no subprocesses, this does nothing. */ | |
7963 | |
21414
aac7354edaed
(kill_buffer_processes): Make consistent with
Karl Heuer <kwzh@gnu.org>
parents:
21281
diff
changeset
|
7964 void |
588 | 7965 kill_buffer_processes (buffer) |
7966 Lisp_Object buffer; | |
7967 { | |
7968 } | |
7969 | |
97227
1d85638347af
(Fsystem_processes_list, Fsystem_process_attributes): New functions.
Eli Zaretskii <eliz@gnu.org>
parents:
97142
diff
changeset
|
7970 DEFUN ("list-system-processes", Flist_system_processes, Slist_system_processes, |
1d85638347af
(Fsystem_processes_list, Fsystem_process_attributes): New functions.
Eli Zaretskii <eliz@gnu.org>
parents:
97142
diff
changeset
|
7971 0, 0, 0, |
1d85638347af
(Fsystem_processes_list, Fsystem_process_attributes): New functions.
Eli Zaretskii <eliz@gnu.org>
parents:
97142
diff
changeset
|
7972 doc: /* Return a list of numerical process IDs of all running processes. |
1d85638347af
(Fsystem_processes_list, Fsystem_process_attributes): New functions.
Eli Zaretskii <eliz@gnu.org>
parents:
97142
diff
changeset
|
7973 If this functionality is unsupported, return nil. |
1d85638347af
(Fsystem_processes_list, Fsystem_process_attributes): New functions.
Eli Zaretskii <eliz@gnu.org>
parents:
97142
diff
changeset
|
7974 |
102205
0f4ba7f17aa0
Rename `system-process-attributes' to `process-attributes'
Miles Bader <miles@gnu.org>
parents:
101932
diff
changeset
|
7975 See `process-attributes' for getting attributes of a process given its ID. */) |
97227
1d85638347af
(Fsystem_processes_list, Fsystem_process_attributes): New functions.
Eli Zaretskii <eliz@gnu.org>
parents:
97142
diff
changeset
|
7976 () |
1d85638347af
(Fsystem_processes_list, Fsystem_process_attributes): New functions.
Eli Zaretskii <eliz@gnu.org>
parents:
97142
diff
changeset
|
7977 { |
100860
0d09a43201b6
(Qeuid, Qegid, Qcomm, Qstate, Qppid, Qpgrp, Qsess)
Eli Zaretskii <eliz@gnu.org>
parents:
100828
diff
changeset
|
7978 return list_system_processes (); |
97227
1d85638347af
(Fsystem_processes_list, Fsystem_process_attributes): New functions.
Eli Zaretskii <eliz@gnu.org>
parents:
97142
diff
changeset
|
7979 } |
1d85638347af
(Fsystem_processes_list, Fsystem_process_attributes): New functions.
Eli Zaretskii <eliz@gnu.org>
parents:
97142
diff
changeset
|
7980 |
102205
0f4ba7f17aa0
Rename `system-process-attributes' to `process-attributes'
Miles Bader <miles@gnu.org>
parents:
101932
diff
changeset
|
7981 DEFUN ("process-attributes", Fprocess_attributes, |
0f4ba7f17aa0
Rename `system-process-attributes' to `process-attributes'
Miles Bader <miles@gnu.org>
parents:
101932
diff
changeset
|
7982 Sprocess_attributes, 1, 1, 0, |
97227
1d85638347af
(Fsystem_processes_list, Fsystem_process_attributes): New functions.
Eli Zaretskii <eliz@gnu.org>
parents:
97142
diff
changeset
|
7983 doc: /* Return attributes of the process given by its PID, a number. |
1d85638347af
(Fsystem_processes_list, Fsystem_process_attributes): New functions.
Eli Zaretskii <eliz@gnu.org>
parents:
97142
diff
changeset
|
7984 |
1d85638347af
(Fsystem_processes_list, Fsystem_process_attributes): New functions.
Eli Zaretskii <eliz@gnu.org>
parents:
97142
diff
changeset
|
7985 Value is an alist where each element is a cons cell of the form |
1d85638347af
(Fsystem_processes_list, Fsystem_process_attributes): New functions.
Eli Zaretskii <eliz@gnu.org>
parents:
97142
diff
changeset
|
7986 |
98084
cdd80926d2ea
(Fsystem_process_attributes): Doc fix.
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents:
98062
diff
changeset
|
7987 \(KEY . VALUE) |
97227
1d85638347af
(Fsystem_processes_list, Fsystem_process_attributes): New functions.
Eli Zaretskii <eliz@gnu.org>
parents:
97142
diff
changeset
|
7988 |
1d85638347af
(Fsystem_processes_list, Fsystem_process_attributes): New functions.
Eli Zaretskii <eliz@gnu.org>
parents:
97142
diff
changeset
|
7989 If this functionality is unsupported, the value is nil. |
1d85638347af
(Fsystem_processes_list, Fsystem_process_attributes): New functions.
Eli Zaretskii <eliz@gnu.org>
parents:
97142
diff
changeset
|
7990 |
1d85638347af
(Fsystem_processes_list, Fsystem_process_attributes): New functions.
Eli Zaretskii <eliz@gnu.org>
parents:
97142
diff
changeset
|
7991 See `list-system-processes' for getting a list of all process IDs. |
1d85638347af
(Fsystem_processes_list, Fsystem_process_attributes): New functions.
Eli Zaretskii <eliz@gnu.org>
parents:
97142
diff
changeset
|
7992 |
98084
cdd80926d2ea
(Fsystem_process_attributes): Doc fix.
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents:
98062
diff
changeset
|
7993 The KEYs of the attributes that this function may return are listed |
cdd80926d2ea
(Fsystem_process_attributes): Doc fix.
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents:
98062
diff
changeset
|
7994 below, together with the type of the associated VALUE (in parentheses). |
97367
115891550745
(Fsystem_process_attributes): Doc fix.
Eli Zaretskii <eliz@gnu.org>
parents:
97266
diff
changeset
|
7995 Not all platforms support all of these attributes; unsupported |
115891550745
(Fsystem_process_attributes): Doc fix.
Eli Zaretskii <eliz@gnu.org>
parents:
97266
diff
changeset
|
7996 attributes will not appear in the returned alist. |
97227
1d85638347af
(Fsystem_processes_list, Fsystem_process_attributes): New functions.
Eli Zaretskii <eliz@gnu.org>
parents:
97142
diff
changeset
|
7997 Unless explicitly indicated otherwise, numbers can have either |
1d85638347af
(Fsystem_processes_list, Fsystem_process_attributes): New functions.
Eli Zaretskii <eliz@gnu.org>
parents:
97142
diff
changeset
|
7998 integer or floating point values. |
1d85638347af
(Fsystem_processes_list, Fsystem_process_attributes): New functions.
Eli Zaretskii <eliz@gnu.org>
parents:
97142
diff
changeset
|
7999 |
1d85638347af
(Fsystem_processes_list, Fsystem_process_attributes): New functions.
Eli Zaretskii <eliz@gnu.org>
parents:
97142
diff
changeset
|
8000 euid -- Effective user User ID of the process (number) |
1d85638347af
(Fsystem_processes_list, Fsystem_process_attributes): New functions.
Eli Zaretskii <eliz@gnu.org>
parents:
97142
diff
changeset
|
8001 user -- User name corresponding to euid (string) |
1d85638347af
(Fsystem_processes_list, Fsystem_process_attributes): New functions.
Eli Zaretskii <eliz@gnu.org>
parents:
97142
diff
changeset
|
8002 egid -- Effective user Group ID of the process (number) |
1d85638347af
(Fsystem_processes_list, Fsystem_process_attributes): New functions.
Eli Zaretskii <eliz@gnu.org>
parents:
97142
diff
changeset
|
8003 group -- Group name corresponding to egid (string) |
1d85638347af
(Fsystem_processes_list, Fsystem_process_attributes): New functions.
Eli Zaretskii <eliz@gnu.org>
parents:
97142
diff
changeset
|
8004 comm -- Command name (executable name only) (string) |
1d85638347af
(Fsystem_processes_list, Fsystem_process_attributes): New functions.
Eli Zaretskii <eliz@gnu.org>
parents:
97142
diff
changeset
|
8005 state -- Process state code, such as "S", "R", or "T" (string) |
1d85638347af
(Fsystem_processes_list, Fsystem_process_attributes): New functions.
Eli Zaretskii <eliz@gnu.org>
parents:
97142
diff
changeset
|
8006 ppid -- Parent process ID (number) |
1d85638347af
(Fsystem_processes_list, Fsystem_process_attributes): New functions.
Eli Zaretskii <eliz@gnu.org>
parents:
97142
diff
changeset
|
8007 pgrp -- Process group ID (number) |
1d85638347af
(Fsystem_processes_list, Fsystem_process_attributes): New functions.
Eli Zaretskii <eliz@gnu.org>
parents:
97142
diff
changeset
|
8008 sess -- Session ID, i.e. process ID of session leader (number) |
1d85638347af
(Fsystem_processes_list, Fsystem_process_attributes): New functions.
Eli Zaretskii <eliz@gnu.org>
parents:
97142
diff
changeset
|
8009 ttname -- Controlling tty name (string) |
1d85638347af
(Fsystem_processes_list, Fsystem_process_attributes): New functions.
Eli Zaretskii <eliz@gnu.org>
parents:
97142
diff
changeset
|
8010 tpgid -- ID of foreground process group on the process's tty (number) |
1d85638347af
(Fsystem_processes_list, Fsystem_process_attributes): New functions.
Eli Zaretskii <eliz@gnu.org>
parents:
97142
diff
changeset
|
8011 minflt -- number of minor page faults (number) |
1d85638347af
(Fsystem_processes_list, Fsystem_process_attributes): New functions.
Eli Zaretskii <eliz@gnu.org>
parents:
97142
diff
changeset
|
8012 majflt -- number of major page faults (number) |
1d85638347af
(Fsystem_processes_list, Fsystem_process_attributes): New functions.
Eli Zaretskii <eliz@gnu.org>
parents:
97142
diff
changeset
|
8013 cminflt -- cumulative number of minor page faults (number) |
1d85638347af
(Fsystem_processes_list, Fsystem_process_attributes): New functions.
Eli Zaretskii <eliz@gnu.org>
parents:
97142
diff
changeset
|
8014 cmajflt -- cumulative number of major page faults (number) |
1d85638347af
(Fsystem_processes_list, Fsystem_process_attributes): New functions.
Eli Zaretskii <eliz@gnu.org>
parents:
97142
diff
changeset
|
8015 utime -- user time used by the process, in the (HIGH LOW USEC) format |
1d85638347af
(Fsystem_processes_list, Fsystem_process_attributes): New functions.
Eli Zaretskii <eliz@gnu.org>
parents:
97142
diff
changeset
|
8016 stime -- system time used by the process, in the (HIGH LOW USEC) format |
100828
0b30d1767fab
(top level) <Qtime, Qctime>: New variables.
Eli Zaretskii <eliz@gnu.org>
parents:
100824
diff
changeset
|
8017 time -- sum of utime and stime, in the (HIGH LOW USEC) format |
97227
1d85638347af
(Fsystem_processes_list, Fsystem_process_attributes): New functions.
Eli Zaretskii <eliz@gnu.org>
parents:
97142
diff
changeset
|
8018 cutime -- user time used by the process and its children, (HIGH LOW USEC) |
1d85638347af
(Fsystem_processes_list, Fsystem_process_attributes): New functions.
Eli Zaretskii <eliz@gnu.org>
parents:
97142
diff
changeset
|
8019 cstime -- system time used by the process and its children, (HIGH LOW USEC) |
100828
0b30d1767fab
(top level) <Qtime, Qctime>: New variables.
Eli Zaretskii <eliz@gnu.org>
parents:
100824
diff
changeset
|
8020 ctime -- sum of cutime and cstime, in the (HIGH LOW USEC) format |
97227
1d85638347af
(Fsystem_processes_list, Fsystem_process_attributes): New functions.
Eli Zaretskii <eliz@gnu.org>
parents:
97142
diff
changeset
|
8021 pri -- priority of the process (number) |
1d85638347af
(Fsystem_processes_list, Fsystem_process_attributes): New functions.
Eli Zaretskii <eliz@gnu.org>
parents:
97142
diff
changeset
|
8022 nice -- nice value of the process (number) |
1d85638347af
(Fsystem_processes_list, Fsystem_process_attributes): New functions.
Eli Zaretskii <eliz@gnu.org>
parents:
97142
diff
changeset
|
8023 thcount -- process thread count (number) |
1d85638347af
(Fsystem_processes_list, Fsystem_process_attributes): New functions.
Eli Zaretskii <eliz@gnu.org>
parents:
97142
diff
changeset
|
8024 start -- time the process started, in the (HIGH LOW USEC) format |
1d85638347af
(Fsystem_processes_list, Fsystem_process_attributes): New functions.
Eli Zaretskii <eliz@gnu.org>
parents:
97142
diff
changeset
|
8025 vsize -- virtual memory size of the process in KB's (number) |
1d85638347af
(Fsystem_processes_list, Fsystem_process_attributes): New functions.
Eli Zaretskii <eliz@gnu.org>
parents:
97142
diff
changeset
|
8026 rss -- resident set size of the process in KB's (number) |
1d85638347af
(Fsystem_processes_list, Fsystem_process_attributes): New functions.
Eli Zaretskii <eliz@gnu.org>
parents:
97142
diff
changeset
|
8027 etime -- elapsed time the process is running, in (HIGH LOW USEC) format |
1d85638347af
(Fsystem_processes_list, Fsystem_process_attributes): New functions.
Eli Zaretskii <eliz@gnu.org>
parents:
97142
diff
changeset
|
8028 pcpu -- percents of CPU time used by the process (floating-point number) |
1d85638347af
(Fsystem_processes_list, Fsystem_process_attributes): New functions.
Eli Zaretskii <eliz@gnu.org>
parents:
97142
diff
changeset
|
8029 pmem -- percents of total physical memory used by process's resident set |
1d85638347af
(Fsystem_processes_list, Fsystem_process_attributes): New functions.
Eli Zaretskii <eliz@gnu.org>
parents:
97142
diff
changeset
|
8030 (floating-point number) |
1d85638347af
(Fsystem_processes_list, Fsystem_process_attributes): New functions.
Eli Zaretskii <eliz@gnu.org>
parents:
97142
diff
changeset
|
8031 args -- command line which invoked the process (string). */) |
1d85638347af
(Fsystem_processes_list, Fsystem_process_attributes): New functions.
Eli Zaretskii <eliz@gnu.org>
parents:
97142
diff
changeset
|
8032 (pid) |
1d85638347af
(Fsystem_processes_list, Fsystem_process_attributes): New functions.
Eli Zaretskii <eliz@gnu.org>
parents:
97142
diff
changeset
|
8033 |
1d85638347af
(Fsystem_processes_list, Fsystem_process_attributes): New functions.
Eli Zaretskii <eliz@gnu.org>
parents:
97142
diff
changeset
|
8034 Lisp_Object pid; |
1d85638347af
(Fsystem_processes_list, Fsystem_process_attributes): New functions.
Eli Zaretskii <eliz@gnu.org>
parents:
97142
diff
changeset
|
8035 { |
100860
0d09a43201b6
(Qeuid, Qegid, Qcomm, Qstate, Qppid, Qpgrp, Qsess)
Eli Zaretskii <eliz@gnu.org>
parents:
100828
diff
changeset
|
8036 return system_process_attributes (pid); |
97227
1d85638347af
(Fsystem_processes_list, Fsystem_process_attributes): New functions.
Eli Zaretskii <eliz@gnu.org>
parents:
97142
diff
changeset
|
8037 } |
1d85638347af
(Fsystem_processes_list, Fsystem_process_attributes): New functions.
Eli Zaretskii <eliz@gnu.org>
parents:
97142
diff
changeset
|
8038 |
21978
ba8852d809f6
(init_process, syms_of_process): Make definition consistent with
Eli Zaretskii <eliz@gnu.org>
parents:
21950
diff
changeset
|
8039 void |
588 | 8040 init_process () |
8041 { | |
8042 } | |
8043 | |
21978
ba8852d809f6
(init_process, syms_of_process): Make definition consistent with
Eli Zaretskii <eliz@gnu.org>
parents:
21950
diff
changeset
|
8044 void |
588 | 8045 syms_of_process () |
8046 { | |
105877
21bdda3ded62
* xterm.c (syms_of_xterm):
Dan Nicolaescu <dann@ics.uci.edu>
parents:
105872
diff
changeset
|
8047 QCtype = intern_c_string (":type"); |
44067
e8a136850817
(QCfeature, QCdatagram): Removed variables.
Kim F. Storm <storm@cua.dk>
parents:
44041
diff
changeset
|
8048 staticpro (&QCtype); |
105877
21bdda3ded62
* xterm.c (syms_of_xterm):
Dan Nicolaescu <dann@ics.uci.edu>
parents:
105872
diff
changeset
|
8049 QCname = intern_c_string (":name"); |
97650
8b1a761cfe61
[!subprocesses]: Define QCname.
Eli Zaretskii <eliz@gnu.org>
parents:
97498
diff
changeset
|
8050 staticpro (&QCname); |
105877
21bdda3ded62
* xterm.c (syms_of_xterm):
Dan Nicolaescu <dann@ics.uci.edu>
parents:
105872
diff
changeset
|
8051 QCtype = intern_c_string (":type"); |
100860
0d09a43201b6
(Qeuid, Qegid, Qcomm, Qstate, Qppid, Qpgrp, Qsess)
Eli Zaretskii <eliz@gnu.org>
parents:
100828
diff
changeset
|
8052 staticpro (&QCtype); |
105877
21bdda3ded62
* xterm.c (syms_of_xterm):
Dan Nicolaescu <dann@ics.uci.edu>
parents:
105872
diff
changeset
|
8053 QCname = intern_c_string (":name"); |
100860
0d09a43201b6
(Qeuid, Qegid, Qcomm, Qstate, Qppid, Qpgrp, Qsess)
Eli Zaretskii <eliz@gnu.org>
parents:
100828
diff
changeset
|
8054 staticpro (&QCname); |
105877
21bdda3ded62
* xterm.c (syms_of_xterm):
Dan Nicolaescu <dann@ics.uci.edu>
parents:
105872
diff
changeset
|
8055 Qeuid = intern_c_string ("euid"); |
100860
0d09a43201b6
(Qeuid, Qegid, Qcomm, Qstate, Qppid, Qpgrp, Qsess)
Eli Zaretskii <eliz@gnu.org>
parents:
100828
diff
changeset
|
8056 staticpro (&Qeuid); |
105877
21bdda3ded62
* xterm.c (syms_of_xterm):
Dan Nicolaescu <dann@ics.uci.edu>
parents:
105872
diff
changeset
|
8057 Qegid = intern_c_string ("egid"); |
100860
0d09a43201b6
(Qeuid, Qegid, Qcomm, Qstate, Qppid, Qpgrp, Qsess)
Eli Zaretskii <eliz@gnu.org>
parents:
100828
diff
changeset
|
8058 staticpro (&Qegid); |
105877
21bdda3ded62
* xterm.c (syms_of_xterm):
Dan Nicolaescu <dann@ics.uci.edu>
parents:
105872
diff
changeset
|
8059 Quser = intern_c_string ("user"); |
100860
0d09a43201b6
(Qeuid, Qegid, Qcomm, Qstate, Qppid, Qpgrp, Qsess)
Eli Zaretskii <eliz@gnu.org>
parents:
100828
diff
changeset
|
8060 staticpro (&Quser); |
105877
21bdda3ded62
* xterm.c (syms_of_xterm):
Dan Nicolaescu <dann@ics.uci.edu>
parents:
105872
diff
changeset
|
8061 Qgroup = intern_c_string ("group"); |
100860
0d09a43201b6
(Qeuid, Qegid, Qcomm, Qstate, Qppid, Qpgrp, Qsess)
Eli Zaretskii <eliz@gnu.org>
parents:
100828
diff
changeset
|
8062 staticpro (&Qgroup); |
105877
21bdda3ded62
* xterm.c (syms_of_xterm):
Dan Nicolaescu <dann@ics.uci.edu>
parents:
105872
diff
changeset
|
8063 Qcomm = intern_c_string ("comm"); |
100860
0d09a43201b6
(Qeuid, Qegid, Qcomm, Qstate, Qppid, Qpgrp, Qsess)
Eli Zaretskii <eliz@gnu.org>
parents:
100828
diff
changeset
|
8064 staticpro (&Qcomm); |
105877
21bdda3ded62
* xterm.c (syms_of_xterm):
Dan Nicolaescu <dann@ics.uci.edu>
parents:
105872
diff
changeset
|
8065 Qstate = intern_c_string ("state"); |
100860
0d09a43201b6
(Qeuid, Qegid, Qcomm, Qstate, Qppid, Qpgrp, Qsess)
Eli Zaretskii <eliz@gnu.org>
parents:
100828
diff
changeset
|
8066 staticpro (&Qstate); |
105877
21bdda3ded62
* xterm.c (syms_of_xterm):
Dan Nicolaescu <dann@ics.uci.edu>
parents:
105872
diff
changeset
|
8067 Qppid = intern_c_string ("ppid"); |
100860
0d09a43201b6
(Qeuid, Qegid, Qcomm, Qstate, Qppid, Qpgrp, Qsess)
Eli Zaretskii <eliz@gnu.org>
parents:
100828
diff
changeset
|
8068 staticpro (&Qppid); |
105877
21bdda3ded62
* xterm.c (syms_of_xterm):
Dan Nicolaescu <dann@ics.uci.edu>
parents:
105872
diff
changeset
|
8069 Qpgrp = intern_c_string ("pgrp"); |
100860
0d09a43201b6
(Qeuid, Qegid, Qcomm, Qstate, Qppid, Qpgrp, Qsess)
Eli Zaretskii <eliz@gnu.org>
parents:
100828
diff
changeset
|
8070 staticpro (&Qpgrp); |
105877
21bdda3ded62
* xterm.c (syms_of_xterm):
Dan Nicolaescu <dann@ics.uci.edu>
parents:
105872
diff
changeset
|
8071 Qsess = intern_c_string ("sess"); |
100860
0d09a43201b6
(Qeuid, Qegid, Qcomm, Qstate, Qppid, Qpgrp, Qsess)
Eli Zaretskii <eliz@gnu.org>
parents:
100828
diff
changeset
|
8072 staticpro (&Qsess); |
105877
21bdda3ded62
* xterm.c (syms_of_xterm):
Dan Nicolaescu <dann@ics.uci.edu>
parents:
105872
diff
changeset
|
8073 Qttname = intern_c_string ("ttname"); |
100860
0d09a43201b6
(Qeuid, Qegid, Qcomm, Qstate, Qppid, Qpgrp, Qsess)
Eli Zaretskii <eliz@gnu.org>
parents:
100828
diff
changeset
|
8074 staticpro (&Qttname); |
105877
21bdda3ded62
* xterm.c (syms_of_xterm):
Dan Nicolaescu <dann@ics.uci.edu>
parents:
105872
diff
changeset
|
8075 Qtpgid = intern_c_string ("tpgid"); |
100860
0d09a43201b6
(Qeuid, Qegid, Qcomm, Qstate, Qppid, Qpgrp, Qsess)
Eli Zaretskii <eliz@gnu.org>
parents:
100828
diff
changeset
|
8076 staticpro (&Qtpgid); |
105877
21bdda3ded62
* xterm.c (syms_of_xterm):
Dan Nicolaescu <dann@ics.uci.edu>
parents:
105872
diff
changeset
|
8077 Qminflt = intern_c_string ("minflt"); |
100860
0d09a43201b6
(Qeuid, Qegid, Qcomm, Qstate, Qppid, Qpgrp, Qsess)
Eli Zaretskii <eliz@gnu.org>
parents:
100828
diff
changeset
|
8078 staticpro (&Qminflt); |
105877
21bdda3ded62
* xterm.c (syms_of_xterm):
Dan Nicolaescu <dann@ics.uci.edu>
parents:
105872
diff
changeset
|
8079 Qmajflt = intern_c_string ("majflt"); |
100860
0d09a43201b6
(Qeuid, Qegid, Qcomm, Qstate, Qppid, Qpgrp, Qsess)
Eli Zaretskii <eliz@gnu.org>
parents:
100828
diff
changeset
|
8080 staticpro (&Qmajflt); |
105877
21bdda3ded62
* xterm.c (syms_of_xterm):
Dan Nicolaescu <dann@ics.uci.edu>
parents:
105872
diff
changeset
|
8081 Qcminflt = intern_c_string ("cminflt"); |
100860
0d09a43201b6
(Qeuid, Qegid, Qcomm, Qstate, Qppid, Qpgrp, Qsess)
Eli Zaretskii <eliz@gnu.org>
parents:
100828
diff
changeset
|
8082 staticpro (&Qcminflt); |
105877
21bdda3ded62
* xterm.c (syms_of_xterm):
Dan Nicolaescu <dann@ics.uci.edu>
parents:
105872
diff
changeset
|
8083 Qcmajflt = intern_c_string ("cmajflt"); |
100860
0d09a43201b6
(Qeuid, Qegid, Qcomm, Qstate, Qppid, Qpgrp, Qsess)
Eli Zaretskii <eliz@gnu.org>
parents:
100828
diff
changeset
|
8084 staticpro (&Qcmajflt); |
105877
21bdda3ded62
* xterm.c (syms_of_xterm):
Dan Nicolaescu <dann@ics.uci.edu>
parents:
105872
diff
changeset
|
8085 Qutime = intern_c_string ("utime"); |
100860
0d09a43201b6
(Qeuid, Qegid, Qcomm, Qstate, Qppid, Qpgrp, Qsess)
Eli Zaretskii <eliz@gnu.org>
parents:
100828
diff
changeset
|
8086 staticpro (&Qutime); |
105877
21bdda3ded62
* xterm.c (syms_of_xterm):
Dan Nicolaescu <dann@ics.uci.edu>
parents:
105872
diff
changeset
|
8087 Qstime = intern_c_string ("stime"); |
100860
0d09a43201b6
(Qeuid, Qegid, Qcomm, Qstate, Qppid, Qpgrp, Qsess)
Eli Zaretskii <eliz@gnu.org>
parents:
100828
diff
changeset
|
8088 staticpro (&Qstime); |
105877
21bdda3ded62
* xterm.c (syms_of_xterm):
Dan Nicolaescu <dann@ics.uci.edu>
parents:
105872
diff
changeset
|
8089 Qtime = intern_c_string ("time"); |
100860
0d09a43201b6
(Qeuid, Qegid, Qcomm, Qstate, Qppid, Qpgrp, Qsess)
Eli Zaretskii <eliz@gnu.org>
parents:
100828
diff
changeset
|
8090 staticpro (&Qtime); |
105877
21bdda3ded62
* xterm.c (syms_of_xterm):
Dan Nicolaescu <dann@ics.uci.edu>
parents:
105872
diff
changeset
|
8091 Qcutime = intern_c_string ("cutime"); |
100860
0d09a43201b6
(Qeuid, Qegid, Qcomm, Qstate, Qppid, Qpgrp, Qsess)
Eli Zaretskii <eliz@gnu.org>
parents:
100828
diff
changeset
|
8092 staticpro (&Qcutime); |
105877
21bdda3ded62
* xterm.c (syms_of_xterm):
Dan Nicolaescu <dann@ics.uci.edu>
parents:
105872
diff
changeset
|
8093 Qcstime = intern_c_string ("cstime"); |
100860
0d09a43201b6
(Qeuid, Qegid, Qcomm, Qstate, Qppid, Qpgrp, Qsess)
Eli Zaretskii <eliz@gnu.org>
parents:
100828
diff
changeset
|
8094 staticpro (&Qcstime); |
105877
21bdda3ded62
* xterm.c (syms_of_xterm):
Dan Nicolaescu <dann@ics.uci.edu>
parents:
105872
diff
changeset
|
8095 Qctime = intern_c_string ("ctime"); |
100860
0d09a43201b6
(Qeuid, Qegid, Qcomm, Qstate, Qppid, Qpgrp, Qsess)
Eli Zaretskii <eliz@gnu.org>
parents:
100828
diff
changeset
|
8096 staticpro (&Qctime); |
105877
21bdda3ded62
* xterm.c (syms_of_xterm):
Dan Nicolaescu <dann@ics.uci.edu>
parents:
105872
diff
changeset
|
8097 Qpri = intern_c_string ("pri"); |
100860
0d09a43201b6
(Qeuid, Qegid, Qcomm, Qstate, Qppid, Qpgrp, Qsess)
Eli Zaretskii <eliz@gnu.org>
parents:
100828
diff
changeset
|
8098 staticpro (&Qpri); |
105877
21bdda3ded62
* xterm.c (syms_of_xterm):
Dan Nicolaescu <dann@ics.uci.edu>
parents:
105872
diff
changeset
|
8099 Qnice = intern_c_string ("nice"); |
100860
0d09a43201b6
(Qeuid, Qegid, Qcomm, Qstate, Qppid, Qpgrp, Qsess)
Eli Zaretskii <eliz@gnu.org>
parents:
100828
diff
changeset
|
8100 staticpro (&Qnice); |
105877
21bdda3ded62
* xterm.c (syms_of_xterm):
Dan Nicolaescu <dann@ics.uci.edu>
parents:
105872
diff
changeset
|
8101 Qthcount = intern_c_string ("thcount"); |
100860
0d09a43201b6
(Qeuid, Qegid, Qcomm, Qstate, Qppid, Qpgrp, Qsess)
Eli Zaretskii <eliz@gnu.org>
parents:
100828
diff
changeset
|
8102 staticpro (&Qthcount); |
105877
21bdda3ded62
* xterm.c (syms_of_xterm):
Dan Nicolaescu <dann@ics.uci.edu>
parents:
105872
diff
changeset
|
8103 Qstart = intern_c_string ("start"); |
100860
0d09a43201b6
(Qeuid, Qegid, Qcomm, Qstate, Qppid, Qpgrp, Qsess)
Eli Zaretskii <eliz@gnu.org>
parents:
100828
diff
changeset
|
8104 staticpro (&Qstart); |
105877
21bdda3ded62
* xterm.c (syms_of_xterm):
Dan Nicolaescu <dann@ics.uci.edu>
parents:
105872
diff
changeset
|
8105 Qvsize = intern_c_string ("vsize"); |
100860
0d09a43201b6
(Qeuid, Qegid, Qcomm, Qstate, Qppid, Qpgrp, Qsess)
Eli Zaretskii <eliz@gnu.org>
parents:
100828
diff
changeset
|
8106 staticpro (&Qvsize); |
105877
21bdda3ded62
* xterm.c (syms_of_xterm):
Dan Nicolaescu <dann@ics.uci.edu>
parents:
105872
diff
changeset
|
8107 Qrss = intern_c_string ("rss"); |
100860
0d09a43201b6
(Qeuid, Qegid, Qcomm, Qstate, Qppid, Qpgrp, Qsess)
Eli Zaretskii <eliz@gnu.org>
parents:
100828
diff
changeset
|
8108 staticpro (&Qrss); |
105877
21bdda3ded62
* xterm.c (syms_of_xterm):
Dan Nicolaescu <dann@ics.uci.edu>
parents:
105872
diff
changeset
|
8109 Qetime = intern_c_string ("etime"); |
100860
0d09a43201b6
(Qeuid, Qegid, Qcomm, Qstate, Qppid, Qpgrp, Qsess)
Eli Zaretskii <eliz@gnu.org>
parents:
100828
diff
changeset
|
8110 staticpro (&Qetime); |
105877
21bdda3ded62
* xterm.c (syms_of_xterm):
Dan Nicolaescu <dann@ics.uci.edu>
parents:
105872
diff
changeset
|
8111 Qpcpu = intern_c_string ("pcpu"); |
100860
0d09a43201b6
(Qeuid, Qegid, Qcomm, Qstate, Qppid, Qpgrp, Qsess)
Eli Zaretskii <eliz@gnu.org>
parents:
100828
diff
changeset
|
8112 staticpro (&Qpcpu); |
105877
21bdda3ded62
* xterm.c (syms_of_xterm):
Dan Nicolaescu <dann@ics.uci.edu>
parents:
105872
diff
changeset
|
8113 Qpmem = intern_c_string ("pmem"); |
100860
0d09a43201b6
(Qeuid, Qegid, Qcomm, Qstate, Qppid, Qpgrp, Qsess)
Eli Zaretskii <eliz@gnu.org>
parents:
100828
diff
changeset
|
8114 staticpro (&Qpmem); |
105877
21bdda3ded62
* xterm.c (syms_of_xterm):
Dan Nicolaescu <dann@ics.uci.edu>
parents:
105872
diff
changeset
|
8115 Qargs = intern_c_string ("args"); |
100860
0d09a43201b6
(Qeuid, Qegid, Qcomm, Qstate, Qppid, Qpgrp, Qsess)
Eli Zaretskii <eliz@gnu.org>
parents:
100828
diff
changeset
|
8116 staticpro (&Qargs); |
44067
e8a136850817
(QCfeature, QCdatagram): Removed variables.
Kim F. Storm <storm@cua.dk>
parents:
44041
diff
changeset
|
8117 |
588 | 8118 defsubr (&Sget_buffer_process); |
21656
bb39a5863a82
(Fset_process_inherit_coding_system_flag,
Eli Zaretskii <eliz@gnu.org>
parents:
21530
diff
changeset
|
8119 defsubr (&Sprocess_inherit_coding_system_flag); |
97227
1d85638347af
(Fsystem_processes_list, Fsystem_process_attributes): New functions.
Eli Zaretskii <eliz@gnu.org>
parents:
97142
diff
changeset
|
8120 defsubr (&Slist_system_processes); |
102205
0f4ba7f17aa0
Rename `system-process-attributes' to `process-attributes'
Miles Bader <miles@gnu.org>
parents:
101932
diff
changeset
|
8121 defsubr (&Sprocess_attributes); |
588 | 8122 } |
8123 | |
8124 | |
8125 #endif /* not subprocesses */ | |
52401 | 8126 |
8127 /* arch-tag: 3706c011-7b9a-4117-bd4f-59e7f701a4c4 | |
8128 (do not change this comment) */ |