From 47d8633f157156ef4701ce71ed7eff766206c107 Mon Sep 17 00:00:00 2001 From: Matthias-Christian Ott Date: Tue, 10 Jun 2008 17:30:15 +0200 Subject: source getpty() out to pty.c --- pty.c | 41 +++++++++++++++++++++++++++++++++++++++++ 1 file changed, 41 insertions(+) create mode 100644 pty.c (limited to 'pty.c') diff --git a/pty.c b/pty.c new file mode 100644 index 0000000..a3e43b0 --- /dev/null +++ b/pty.c @@ -0,0 +1,41 @@ +#include +#include +#include +#include +#if !(_POSIX_C_SOURCE >= 200112L || _XOPEN_SOURCE >= 600) +#include +#endif + +extern int ptm, pts; + +void +getpty(void) { + char *ptsdev; + +#if defined(_GNU_SOURCE) + ptm = getpt(); +#elif _POSIX_C_SOURCE >= 200112L || _XOPEN_SOURCE >= 600 + ptm = posix_openpt(O_RDWR); +#else + ptm = open("/dev/ptmx", O_RDWR); + if(ptm == -1) + if(openpty(&ptm, &pts, NULL, NULL, NULL) == -1) + eprintn("error, cannot open pty"); +#endif +#if defined(_XOPEN_SOURCE) + if(ptm != -1) { + if(grantpt(ptm) == -1) + eprintn("error, cannot grant access to pty"); + if(unlockpt(ptm) == -1) + eprintn("error, cannot unlock pty"); + ptsdev = ptsname(ptm); + if(!ptsdev) + eprintn("error, slave pty name undefined"); + pts = open(ptsdev, O_RDWR); + if(pts == -1) + eprintn("error, cannot open slave pty"); + } + else + eprintn("error, cannot open pty"); +#endif +} -- cgit v1.2.1