aboutsummaryrefslogtreecommitdiff
path: root/lib/openpty.c
diff options
context:
space:
mode:
Diffstat (limited to 'lib/openpty.c')
-rw-r--r--lib/openpty.c136
1 files changed, 0 insertions, 136 deletions
diff --git a/lib/openpty.c b/lib/openpty.c
deleted file mode 100644
index 63301428..00000000
--- a/lib/openpty.c
+++ /dev/null
@@ -1,136 +0,0 @@
-/* Open a pseudo-terminal.
- Copyright (C) 2010-2014 Free Software Foundation, Inc.
-
- This program is free software: you can redistribute it and/or modify
- it under the terms of the GNU General Public License as published by
- the Free Software Foundation; either version 3 of the License, or
- (at your option) any later version.
-
- This program is distributed in the hope that it will be useful,
- but WITHOUT ANY WARRANTY; without even the implied warranty of
- MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- GNU General Public License for more details.
-
- You should have received a copy of the GNU General Public License
- along with this program. If not, see <http://www.gnu.org/licenses/>. */
-
-#include <config.h>
-
-/* Specification. */
-#include <pty.h>
-
-#if HAVE_OPENPTY
-
-/* Provide a wrapper with the prototype of glibc-2.8 and newer. */
-# undef openpty
-int
-rpl_openpty (int *amaster, int *aslave, char *name,
- struct termios const *termp, struct winsize const *winp)
-{
- /* Cast away const, for implementations with weaker prototypes. */
- return openpty (amaster, aslave, name, (struct termios *) termp,
- (struct winsize *) winp);
-}
-
-#elif (defined _WIN32 || defined __WIN32__) && !defined __CYGWIN__ /* mingw */
-
-# include <errno.h>
-
-int
-openpty (int *amaster _GL_UNUSED, int *aslave _GL_UNUSED,
- char *name _GL_UNUSED,
- struct termios const *termp _GL_UNUSED,
- struct winsize const *winp _GL_UNUSED)
-{
- /* Mingw lacks pseudo-terminals altogether. */
- errno = ENOSYS;
- return -1;
-}
-
-#else /* AIX 5.1, HP-UX 11, IRIX 6.5, Solaris 10 */
-
-# include <fcntl.h>
-# include <stdlib.h>
-# include <string.h>
-# include <sys/ioctl.h>
-# include <termios.h>
-# include <unistd.h>
-# if defined __sun || defined __hpux /* Solaris, HP-UX */
-# include <stropts.h>
-# endif
-
-int
-openpty (int *amaster, int *aslave, char *name,
- struct termios const *termp, struct winsize const *winp)
-{
- int master;
- char *slave_name;
- int slave;
-
-# if HAVE__GETPTY /* IRIX */
-
- slave_name = _getpty (&master, O_RDWR, 0622, 0);
- if (slave_name == NULL)
- return -1;
-
-# else /* AIX 5.1, HP-UX 11, Solaris 10, mingw */
-
- /* This call uses the 'posix_openpt' module. */
- master = posix_openpt (O_RDWR | O_NOCTTY);
- if (master < 0)
- return -1;
-
-# endif
-
- /* This call does not require a dependency to the 'grantpt' module,
- because AIX, HP-UX, IRIX, Solaris all have the grantpt() function. */
- if (grantpt (master))
- goto fail;
-
- /* This call does not require a dependency to the 'unlockpt' module,
- because AIX, HP-UX, IRIX, Solaris all have the unlockpt() function. */
- if (unlockpt (master))
- goto fail;
-
-# if !HAVE__GETPTY /* !IRIX */
- slave_name = ptsname (master);
- if (slave_name == NULL)
- goto fail;
-# endif
-
- slave = open (slave_name, O_RDWR | O_NOCTTY);
- if (slave == -1)
- goto fail;
-
-# if defined __sun || defined __hpux /* Solaris, HP-UX */
- if (ioctl (slave, I_PUSH, "ptem") < 0
- || ioctl (slave, I_PUSH, "ldterm") < 0
-# if defined __sun
- || ioctl (slave, I_PUSH, "ttcompat") < 0
-# endif
- )
- {
- close (slave);
- goto fail;
- }
-# endif
-
- /* XXX Should we ignore errors here? */
- if (termp)
- tcsetattr (slave, TCSAFLUSH, termp);
- if (winp)
- ioctl (slave, TIOCSWINSZ, winp);
-
- *amaster = master;
- *aslave = slave;
- if (name != NULL)
- strcpy (name, slave_name);
-
- return 0;
-
- fail:
- close (master);
- return -1;
-}
-
-#endif