annotate src/pty.c @ 2894:fe9c7da98b5e v7.3.220

updated for version 7.3.220 Problem: Python 3: vim.error is a 'str' instead of an 'Exception' object, so 'except' or 'raise' it causes a 'SystemError' exception. Buffer objects do not support slice assignment. When exchanging text between Vim and Python, multibyte texts become gabage or cause Unicode Expceptions, etc. 'py3file' tries to read in the file as Unicode, sometimes causes UnicodeDecodeException Solution: Fix the problems. (lilydjwg)
author Bram Moolenaar <bram@vim.org>
date Sun, 19 Jun 2011 00:27:51 +0200
parents 107b03fdf1ad
children 7b59c2c032ca
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1 /* vi:set ts=8 sts=4 sw=4:
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2 *
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3 * VIM - Vi IMproved by Bram Moolenaar
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4 *
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5 * Do ":help uganda" in Vim to read copying and usage conditions.
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6 * Do ":help credits" in Vim to see a list of people who contributed.
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
7 * See README.txt for an overview of the Vim source code.
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
8 */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
9 /*
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
10 * The stuff in this file mostly comes from the "screen" program.
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
11 * Included with permission from Juergen Weigert.
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
12 * Copied from "pty.c". "putenv.c" was used for putenv() in misc2.c.
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
13 *
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
14 * It has been modified to work better with Vim.
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
15 * The parts that are not used in Vim have been deleted.
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
16 * See the "screen" sources for the complete stuff.
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
17 */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
18
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
19 /* Copyright (c) 1993
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
20 * Juergen Weigert (jnweiger@immd4.informatik.uni-erlangen.de)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
21 * Michael Schroeder (mlschroe@immd4.informatik.uni-erlangen.de)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
22 * Copyright (c) 1987 Oliver Laumann
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
23 *
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
24 * This program is free software; you can redistribute it and/or modify
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
25 * it under the terms of the GNU General Public License as published by
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
26 * the Free Software Foundation; either version 2, or (at your option)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
27 * any later version.
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
28 *
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
29 * This program is distributed in the hope that it will be useful,
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
30 * but WITHOUT ANY WARRANTY; without even the implied warranty of
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
31 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
32 * GNU General Public License for more details.
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
33 *
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
34 * You should have received a copy of the GNU General Public License
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
35 * along with this program (see the file COPYING); if not, write to the
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
36 * Free Software Foundation, Inc.,
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
37 * 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
38 */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
39
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
40 #include "vim.h"
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
41
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
42 #include <signal.h>
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
43
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
44 #ifdef __CYGWIN32__
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
45 # include <sys/termios.h>
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
46 #endif
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
47
1030
d4bc24e6a281 updated for version 7.0-156
vimboss
parents: 7
diff changeset
48 #ifdef HAVE_SYS_IOCTL_H
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
49 # include <sys/ioctl.h>
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
50 #endif
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
51
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
52 #if HAVE_STROPTS_H
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
53 #include <sys/types.h>
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
54 #ifdef sinix
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
55 #define buf_T __system_buf_t__
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
56 #endif
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
57 #include <stropts.h>
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
58 #ifdef sinix
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
59 #undef buf_T
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
60 #endif
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
61 # ifdef sun
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
62 # include <sys/conf.h>
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
63 # endif
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
64 #endif
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
65
1030
d4bc24e6a281 updated for version 7.0-156
vimboss
parents: 7
diff changeset
66 #ifdef HAVE_UNISTD_H
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
67 # include <unistd.h>
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
68 #endif
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
69
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
70 #if HAVE_TERMIO_H
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
71 # include <termio.h>
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
72 #else
1030
d4bc24e6a281 updated for version 7.0-156
vimboss
parents: 7
diff changeset
73 # ifdef HAVE_TERMIOS_H
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
74 # include <termios.h>
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
75 # endif
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
76 #endif
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
77
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
78 #if HAVE_SYS_STREAM_H
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
79 # include <sys/stream.h>
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
80 #endif
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
81
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
82 #if HAVE_SYS_PTEM_H
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
83 # include <sys/ptem.h>
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
84 #endif
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
85
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
86 #if !defined(sun) && !defined(VMS) && !defined(MACOS)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
87 # include <sys/ioctl.h>
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
88 #endif
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
89
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
90 #if defined(sun) && defined(LOCKPTY) && !defined(TIOCEXCL)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
91 # include <sys/ttold.h>
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
92 #endif
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
93
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
94 #ifdef ISC
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
95 # include <sys/tty.h>
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
96 # include <sys/sioctl.h>
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
97 # include <sys/pty.h>
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
98 #endif
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
99
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
100 #ifdef sgi
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
101 # include <sys/sysmacros.h>
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
102 #endif
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
103
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
104 #if defined(_INCLUDE_HPUX_SOURCE) && !defined(hpux)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
105 # define hpux
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
106 #endif
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
107
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
108 /*
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
109 * if no PTYRANGE[01] is in the config file, we pick a default
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
110 */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
111 #ifndef PTYRANGE0
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
112 # define PTYRANGE0 "qprs"
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
113 #endif
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
114 #ifndef PTYRANGE1
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
115 # define PTYRANGE1 "0123456789abcdef"
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
116 #endif
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
117
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
118 /* SVR4 pseudo ttys don't seem to work with SCO-5 */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
119 #ifdef M_UNIX
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
120 # undef HAVE_SVR4_PTYS
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
121 #endif
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
122
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
123 static void initmaster __ARGS((int));
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
124
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
125 /*
2834
107b03fdf1ad updated for version 7.3.191
Bram Moolenaar <bram@vim.org>
parents: 2760
diff changeset
126 * Open all ptys with O_NOCTTY, just to be on the safe side.
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
127 */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
128 #ifndef O_NOCTTY
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
129 # define O_NOCTTY 0
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
130 #endif
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
131
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
132 static void
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
133 initmaster(f)
2154
7c8c7c95a865 First step in the Vim 7.3 branch. Changed version numbers.
Bram Moolenaar <bram@zimbu.org>
parents: 1703
diff changeset
134 int f UNUSED;
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
135 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
136 #ifndef VMS
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
137 # ifdef POSIX
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
138 tcflush(f, TCIOFLUSH);
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
139 # else
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
140 # ifdef TIOCFLUSH
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
141 (void)ioctl(f, TIOCFLUSH, (char *) 0);
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
142 # endif
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
143 # endif
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
144 # ifdef LOCKPTY
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
145 (void)ioctl(f, TIOCEXCL, (char *) 0);
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
146 # endif
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
147 #endif
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
148 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
149
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
150 /*
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
151 * This causes a hang on some systems, but is required for a properly working
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
152 * pty on others. Needs to be tuned...
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
153 */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
154 int
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
155 SetupSlavePTY(fd)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
156 int fd;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
157 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
158 if (fd < 0)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
159 return 0;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
160 #if defined(I_PUSH) && defined(HAVE_SVR4_PTYS) && !defined(sgi) && !defined(linux) && !defined(__osf__) && !defined(M_UNIX)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
161 # if defined(HAVE_SYS_PTEM_H) || defined(hpux)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
162 if (ioctl(fd, I_PUSH, "ptem") != 0)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
163 return -1;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
164 # endif
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
165 if (ioctl(fd, I_PUSH, "ldterm") != 0)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
166 return -1;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
167 # ifdef sun
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
168 if (ioctl(fd, I_PUSH, "ttcompat") != 0)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
169 return -1;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
170 # endif
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
171 #endif
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
172 return 0;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
173 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
174
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
175
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
176 #if defined(OSX) && !defined(PTY_DONE)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
177 #define PTY_DONE
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
178 int
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
179 OpenPTY(ttyn)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
180 char **ttyn;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
181 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
182 int f;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
183 static char TtyName[32];
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
184
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
185 if ((f = open_controlling_pty(TtyName)) < 0)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
186 return -1;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
187 initmaster(f);
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
188 *ttyn = TtyName;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
189 return f;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
190 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
191 #endif
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
192
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
193 #if (defined(sequent) || defined(_SEQUENT_)) && defined(HAVE_GETPSEUDOTTY) \
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
194 && !defined(PTY_DONE)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
195 #define PTY_DONE
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
196 int
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
197 OpenPTY(ttyn)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
198 char **ttyn;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
199 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
200 char *m, *s;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
201 int f;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
202 /* used for opening a new pty-pair: */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
203 static char PtyName[32];
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
204 static char TtyName[32];
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
205
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
206 if ((f = getpseudotty(&s, &m)) < 0)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
207 return -1;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
208 #ifdef _SEQUENT_
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
209 fvhangup(s);
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
210 #endif
2760
7fb8cdb9cb25 updated for version 7.3.156
Bram Moolenaar <bram@vim.org>
parents: 2577
diff changeset
211 vim_strncpy((char_u *)PtyName, (char_u *)m, sizeof(PtyName) - 1);
7fb8cdb9cb25 updated for version 7.3.156
Bram Moolenaar <bram@vim.org>
parents: 2577
diff changeset
212 vim_strncpy((char_u *)TtyName, (char_u *)s, sizeof(TtyName) - 1);
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
213 initmaster(f);
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
214 *ttyn = TtyName;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
215 return f;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
216 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
217 #endif
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
218
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
219 #if defined(__sgi) && !defined(PTY_DONE)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
220 #define PTY_DONE
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
221 int
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
222 OpenPTY(ttyn)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
223 char **ttyn;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
224 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
225 int f;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
226 char *name;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
227 RETSIGTYPE (*sigcld)__ARGS(SIGPROTOARG);
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
228
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
229 /*
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
230 * SIGCHLD set to SIG_DFL for _getpty() because it may fork() and
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
231 * exec() /usr/adm/mkpts
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
232 */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
233 sigcld = signal(SIGCHLD, SIG_DFL);
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
234 name = _getpty(&f, O_RDWR | O_NONBLOCK | O_EXTRA, 0600, 0);
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
235 signal(SIGCHLD, sigcld);
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
236
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
237 if (name == 0)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
238 return -1;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
239 initmaster(f);
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
240 *ttyn = name;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
241 return f;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
242 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
243 #endif
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
244
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
245 #if defined(MIPS) && defined(HAVE_DEV_PTC) && !defined(PTY_DONE)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
246 #define PTY_DONE
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
247 int
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
248 OpenPTY(ttyn)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
249 char **ttyn;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
250 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
251 int f;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
252 struct stat buf;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
253 /* used for opening a new pty-pair: */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
254 static char TtyName[32];
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
255
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
256 if ((f = open("/dev/ptc", O_RDWR | O_NOCTTY | O_NONBLOCK | O_EXTRA, 0)) < 0)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
257 return -1;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
258 if (mch_fstat(f, &buf) < 0)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
259 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
260 close(f);
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
261 return -1;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
262 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
263 sprintf(TtyName, "/dev/ttyq%d", minor(buf.st_rdev));
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
264 initmaster(f);
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
265 *ttyn = TtyName;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
266 return f;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
267 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
268 #endif
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
269
1703
ad8f5bdc7274 updated for version 7.2-001
vimboss
parents: 1624
diff changeset
270 #if defined(HAVE_SVR4_PTYS) && !defined(PTY_DONE) && !defined(hpux) && !defined(MACOS_X)
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
271
1703
ad8f5bdc7274 updated for version 7.2-001
vimboss
parents: 1624
diff changeset
272 /* NOTE: Even though HPUX can have /dev/ptmx, the code below doesn't work!
ad8f5bdc7274 updated for version 7.2-001
vimboss
parents: 1624
diff changeset
273 * Same for Mac OS X Leopard. */
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
274 #define PTY_DONE
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
275 int
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
276 OpenPTY(ttyn)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
277 char **ttyn;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
278 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
279 int f;
2397
d5976fe4349d Fix for compiler warning about function prototype in pty.c.
Bram Moolenaar <bram@vim.org>
parents: 2154
diff changeset
280 char *m;
d5976fe4349d Fix for compiler warning about function prototype in pty.c.
Bram Moolenaar <bram@vim.org>
parents: 2154
diff changeset
281 char *(ptsname __ARGS((int)));
d5976fe4349d Fix for compiler warning about function prototype in pty.c.
Bram Moolenaar <bram@vim.org>
parents: 2154
diff changeset
282 int unlockpt __ARGS((int));
d5976fe4349d Fix for compiler warning about function prototype in pty.c.
Bram Moolenaar <bram@vim.org>
parents: 2154
diff changeset
283 int grantpt __ARGS((int));
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
284 RETSIGTYPE (*sigcld)__ARGS(SIGPROTOARG);
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
285 /* used for opening a new pty-pair: */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
286 static char TtyName[32];
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
287
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
288 if ((f = open("/dev/ptmx", O_RDWR | O_NOCTTY | O_EXTRA, 0)) == -1)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
289 return -1;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
290
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
291 /*
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
292 * SIGCHLD set to SIG_DFL for grantpt() because it fork()s and
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
293 * exec()s pt_chmod
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
294 */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
295 sigcld = signal(SIGCHLD, SIG_DFL);
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
296 if ((m = ptsname(f)) == NULL || grantpt(f) || unlockpt(f))
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
297 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
298 signal(SIGCHLD, sigcld);
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
299 close(f);
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
300 return -1;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
301 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
302 signal(SIGCHLD, sigcld);
2760
7fb8cdb9cb25 updated for version 7.3.156
Bram Moolenaar <bram@vim.org>
parents: 2577
diff changeset
303 vim_strncpy((char_u *)TtyName, (char_u *)m, sizeof(TtyName) - 1);
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
304 initmaster(f);
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
305 *ttyn = TtyName;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
306 return f;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
307 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
308 #endif
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
309
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
310 #if defined(_AIX) && defined(HAVE_DEV_PTC) && !defined(PTY_DONE)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
311 #define PTY_DONE
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
312
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
313 #ifdef _IBMR2
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
314 int aixhack = -1;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
315 #endif
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
316
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
317 int
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
318 OpenPTY(ttyn)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
319 char **ttyn;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
320 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
321 int f;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
322 /* used for opening a new pty-pair: */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
323 static char TtyName[32];
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
324
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
325 /* a dumb looking loop replaced by mycrofts code: */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
326 if ((f = open("/dev/ptc", O_RDWR | O_NOCTTY | O_EXTRA)) < 0)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
327 return -1;
2760
7fb8cdb9cb25 updated for version 7.3.156
Bram Moolenaar <bram@vim.org>
parents: 2577
diff changeset
328 vim_strncpy((char_u *)TtyName, (char_u *)ttyname(f), sizeof(TtyName) - 1);
1076
17b9587ff6d5 updated for version 7.0-202
vimboss
parents: 1030
diff changeset
329 if (geteuid() != ROOT_UID && mch_access(TtyName, R_OK | W_OK))
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
330 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
331 close(f);
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
332 return -1;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
333 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
334 initmaster(f);
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
335 # ifdef _IBMR2
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
336 if (aixhack >= 0)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
337 close(aixhack);
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
338 if ((aixhack = open(TtyName, O_RDWR | O_NOCTTY | O_EXTRA, 0)) < 0)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
339 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
340 close(f);
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
341 return -1;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
342 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
343 # endif
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
344 *ttyn = TtyName;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
345 return f;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
346 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
347 #endif
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
348
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
349 #ifndef PTY_DONE
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
350
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
351 # ifdef hpux
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
352 static char PtyProto[] = "/dev/ptym/ptyXY";
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
353 static char TtyProto[] = "/dev/pty/ttyXY";
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
354 # else
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
355 # ifdef __BEOS__
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
356 static char PtyProto[] = "/dev/pt/XY";
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
357 static char TtyProto[] = "/dev/tt/XY";
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
358 # else
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
359 static char PtyProto[] = "/dev/ptyXY";
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
360 static char TtyProto[] = "/dev/ttyXY";
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
361 # endif
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
362 # endif
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
363
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
364 int
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
365 OpenPTY(ttyn)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
366 char **ttyn;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
367 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
368 char *p, *q, *l, *d;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
369 int f;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
370 /* used for opening a new pty-pair: */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
371 static char PtyName[32];
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
372 static char TtyName[32];
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
373
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
374 strcpy(PtyName, PtyProto);
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
375 strcpy(TtyName, TtyProto);
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
376 for (p = PtyName; *p != 'X'; p++)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
377 ;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
378 for (q = TtyName; *q != 'X'; q++)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
379 ;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
380 for (l = PTYRANGE0; (*p = *l) != '\0'; l++)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
381 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
382 for (d = PTYRANGE1; (p[1] = *d) != '\0'; d++)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
383 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
384 #if !defined(MACOS) || defined(USE_CARBONIZED)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
385 if ((f = open(PtyName, O_RDWR | O_NOCTTY | O_EXTRA, 0)) == -1)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
386 #else
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
387 if ((f = open(PtyName, O_RDWR | O_NOCTTY | O_EXTRA)) == -1)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
388 #endif
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
389 continue;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
390 q[0] = *l;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
391 q[1] = *d;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
392 #ifndef MACOS
1076
17b9587ff6d5 updated for version 7.0-202
vimboss
parents: 1030
diff changeset
393 if (geteuid() != ROOT_UID && mch_access(TtyName, R_OK | W_OK))
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
394 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
395 close(f);
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
396 continue;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
397 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
398 #endif
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
399 #if defined(sun) && defined(TIOCGPGRP) && !defined(SUNOS3)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
400 /* Hack to ensure that the slave side of the pty is
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
401 * unused. May not work in anything other than SunOS4.1
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
402 */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
403 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
404 int pgrp;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
405
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
406 /* tcgetpgrp does not work (uses TIOCGETPGRP)! */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
407 if (ioctl(f, TIOCGPGRP, (char *)&pgrp) != -1 || errno != EIO)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
408 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
409 close(f);
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
410 continue;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
411 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
412 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
413 #endif
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
414 initmaster(f);
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
415 *ttyn = TtyName;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
416 return f;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
417 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
418 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
419 return -1;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
420 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
421 #endif