From 846a2fa5355fd821fd719401bf9af6f598151e2e Mon Sep 17 00:00:00 2001 From: Anton Lundin Date: Fri, 30 Nov 2012 00:02:00 +0100 Subject: [PATCH] Port my_forkpty to be compatible with AIX --- src/util/pty_compat.cc | 16 +++++++++++++--- 1 file changed, 13 insertions(+), 3 deletions(-) diff --git a/src/util/pty_compat.cc b/src/util/pty_compat.cc index b5d800d..98fa22a 100644 --- a/src/util/pty_compat.cc +++ b/src/util/pty_compat.cc @@ -49,14 +49,20 @@ pid_t my_forkpty( int *amaster, char *name, const struct termios *termp, const struct winsize *winp ) { - /* For Solaris */ + /* For Solaris and AIX */ int master, slave; char *slave_name; pid_t pid; - master = open( "/dev/ptmx", O_RDWR | O_NOCTTY ); +#ifdef _AIX +#define PTY_DEVICE "/dev/ptc" +#else +#define PTY_DEVICE "/dev/ptmx" +#endif + + master = open( PTY_DEVICE, O_RDWR | O_NOCTTY ); if ( master < 0 ) { - perror( "open(/dev/ptmx)" ); + perror( "open("PTY_DEVICE")" ); return -1; } @@ -86,6 +92,7 @@ pid_t my_forkpty( int *amaster, char *name, return -1; } +#ifndef _AIX if ( ioctl(slave, I_PUSH, "ptem") < 0 || ioctl(slave, I_PUSH, "ldterm") < 0 ) { perror( "ioctl(I_PUSH)" ); @@ -93,6 +100,7 @@ pid_t my_forkpty( int *amaster, char *name, close( master ); return -1; } +#endif if ( amaster != NULL ) *amaster = master; @@ -132,10 +140,12 @@ pid_t my_forkpty( int *amaster, char *name, case 0: /* Child */ if ( setsid() < 0 ) perror( "setsid" ); +#ifndef _AIX if ( ioctl( slave, TIOCSCTTY, NULL ) < 0 ) { perror( "ioctl" ); return -1; } +#endif close( master ); dup2( slave, STDIN_FILENO ); dup2( slave, STDOUT_FILENO );