32 #include <sys/types.h> 35 #include <sys/ioctl.h> 36 #if defined(__osf__) || defined(__CYGWIN__) 41 #include <tqcstring.h> 44 #include <kstandarddirs.h> 45 #include "tdesu_pty.h" 53 extern "C" int grantpt(
int fd) __THROW;
57 extern "C" char * ptsname(
int fd) __THROW;
61 extern "C" int unlockpt(
int fd) __THROW;
65 extern "C" char *_getpty(
int *,
int, mode_t,
int);
76 #elif defined(HAVE_UTIL_H) 97 #if defined(HAVE_GETPT) && defined(HAVE_PTSNAME) 104 #elif defined(HAVE_OPENPTY) 108 int master_fd, slave_fd;
109 if (openpty(&master_fd, &slave_fd, name, 0L, 0L) != -1) {
118 kdDebug(900) << k_lineinfo <<
"Opening pty failed.\n";
121 #elif defined(HAVE__GETPTY) 124 ttyname = _getpty(&master_fd,O_RDWR,0600,0);
129 kdDebug(900) << k_lineinfo <<
"Opening pty failed.error" << errno <<
'\n';
138 ptyfd = open(
"/dev/ptmx", O_RDWR);
140 ptyname =
"/dev/ptmx";
144 #elif defined (TIOCGPTN) 146 if (ioctl(ptyfd, TIOCGPTN, &ptyno) == 0) {
147 ttyname.sprintf(
"/dev/pts/%d", ptyno);
156 for (
const char *c1 =
"pqrstuvwxyzabcde"; *c1 !=
'\0'; c1++)
158 for (
const char *c2 =
"0123456789abcdef"; *c2 !=
'\0'; c2++)
160 ptyname.sprintf(
"/dev/pty%c%c", *c1, *c2);
161 ttyname.sprintf(
"/dev/tty%c%c", *c1, *c2);
162 if (access(ptyname, F_OK) < 0)
164 ptyfd = open(ptyname, O_RDWR);
173 for (
int i=0; i<256; i++)
175 ptyname.sprintf(
"/dev/ptyp%d", i);
176 ttyname.sprintf(
"/dev/ttyp%d", i);
177 if (access(ptyname, F_OK) < 0)
179 ptyfd = open(ptyname, O_RDWR);
187 kdDebug(900) << k_lineinfo <<
"Unknown system or all methods failed.\n";
190 #endif // HAVE_GETPT && HAVE_PTSNAME 202 return ::grantpt(ptyfd);
204 #elif defined(HAVE_OPENPTY) 213 if (ptyname.left(8) !=
"/dev/pty")
217 if (TDEStandardDirs::findExe(
"konsole_grantpty").isEmpty())
219 kdError(900) << k_lineinfo <<
"konsole_grantpty not found.\n";
224 const int pty_fileno = 3;
227 if ((pid = fork()) == -1)
229 kdError(900) << k_lineinfo <<
"fork(): " << perror <<
"\n";
237 waitpid(pid, &ret, 0);
238 if (WIFEXITED(ret) && !WEXITSTATUS(ret))
240 kdError(900) << k_lineinfo <<
"konsole_grantpty returned with error: " 241 << WEXITSTATUS(ret) <<
"\n";
246 if (ptyfd != pty_fileno && dup2(ptyfd, pty_fileno) < 0)
248 execlp(
"konsole_grantpty",
"konsole_grantpty",
"--grant", (
void *)0);
249 kdError(900) << k_lineinfo <<
"exec(): " << perror <<
"\n";
256 #endif // HAVE_GRANTPT 273 return ::unlockpt(ptyfd);
275 #elif defined(TIOCSPTLCK) 279 return ioctl(ptyfd, TIOCSPTLCK, &flag);
PTY()
Construct a PTY object.
int grantpt()
Grant access to the slave side.
int getpt()
Allocate a pty.
~PTY()
Destructs the object.
TQCString ptsname()
Get the slave name.
int unlockpt()
Unlock the slave side.