From 6a062ed2527105941717fda53e4f40459ca5a179 Mon Sep 17 00:00:00 2001 From: Gregory John Casamento Date: Fri, 2 Jan 2009 00:34:09 +0000 Subject: [PATCH] * Modules/Debuggers/ProjectCenter/PTYView.[mh]: Changes to use new openpty replacement code on systems which don't have openpty, otherwise use the built-in version. git-svn-id: svn+ssh://svn.gna.org/svn/gnustep/apps/projectcenter/trunk@27493 72102866-910b-0410-8b05-ffd578937521 --- ChangeLog | 6 ++ Modules/Debuggers/ProjectCenter/PTYView.h | 5 +- Modules/Debuggers/ProjectCenter/PTYView.m | 85 ++++------------------- 3 files changed, 20 insertions(+), 76 deletions(-) diff --git a/ChangeLog b/ChangeLog index 66b36cc..794bb1b 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,3 +1,9 @@ +2009-01-01 19:40-EST Gregory John Casamento + + * Modules/Debuggers/ProjectCenter/PTYView.[mh]: Changes to use + new openpty replacement code on systems which don't have + openpty, otherwise use the built-in version. + 2009-01-01 17:41-EST Gregory John Casamento * Modules/Debuggers/ProjectCenter/Resources/Info.table: Add blank diff --git a/Modules/Debuggers/ProjectCenter/PTYView.h b/Modules/Debuggers/ProjectCenter/PTYView.h index 9f38f07..c29adc0 100644 --- a/Modules/Debuggers/ProjectCenter/PTYView.h +++ b/Modules/Debuggers/ProjectCenter/PTYView.h @@ -25,7 +25,6 @@ @interface PTYView : NSTextView { - char pty_name[12]; /* "/dev/[pt]tyXY" = 10 chars + null byte */ NSTask *task; NSFileHandle *master_handle; NSFileHandle *slave_handle; @@ -33,9 +32,7 @@ int master_fd, slave_fd; } -- (int)master; - -- (int)slave: (int)master; +- (int)openpty; - (void)logString:(NSString *)str newLine:(BOOL)newLine; diff --git a/Modules/Debuggers/ProjectCenter/PTYView.m b/Modules/Debuggers/ProjectCenter/PTYView.m index 9516ebb..af10ed4 100644 --- a/Modules/Debuggers/ProjectCenter/PTYView.m +++ b/Modules/Debuggers/ProjectCenter/PTYView.m @@ -39,7 +39,17 @@ #define NOTIFICATION_CENTER [NSNotificationCenter defaultCenter] #endif -#if 0 +/* check for solaris */ +#if defined (__SVR4) && defined (__sun) +#define __SOLARIS__ 1 +#define USE_FORKPTY_REPLACEMENT 1 +#endif + +#if !(defined (__NetBSD__)) && !(defined (__SOLARIS__)) +# include +#endif + +#ifdef USE_FORKPTY_REPLACEMENT int openpty(int *amaster, int *aslave, char *name, const struct termios *termp, const struct winsize *winp) { int fdm, fds; @@ -113,84 +123,16 @@ int openpty(int *amaster, int *aslave, char *name, const struct termios *termp, #endif @implementation PTYView -/** - * Instantiate this view. - */ -- (id) initWithCoder: (NSCoder *)coder -{ - self = [super initWithCoder: coder]; - if(self != nil) - { - // initialize the pty name field. - strcpy(pty_name, "/dev/ptyXY"); - } - return self; -} - /** * Creates master device. */ -- (int) master +- (int) openpty { -#if 0 - struct stat buff; - static char hex[] = "0123456789abcdef"; - static char pty[] = "pqrs"; - int i, fd; - char *p; - - for (p = pty; *p != 0; p++) - { - pty_name[8] = *p; - pty_name[9] = '0'; - - if (stat(pty_name, &buff) < 0) - { - break; - } - - for (i = 0; i < 16; i++) - { - pty_name[9] = hex[i]; - if ((fd = open(pty_name, O_RDWR)) >= 0) - { - return(fd); - } - } - } - - return(-1); -#else - char *ptyname = NULL; - int fd = 0; - int sl = 0; if (openpty(&master_fd, &slave_fd, NULL, NULL, NULL) == -1) { NSLog(@"Call to openpty(...) failed."); } return master_fd; -#endif -} - -/** - * Open the slave half of a pseudo-terminal. - */ -- (int) slave:(int)master_fd -{ -#if 0 - int fd; - - // change to t, for slave tty. - pty_name[5] = 't'; - if ((fd = open(pty_name, O_RDWR)) < 0) - { - close(master_fd); - return(-1); - } - return(fd); -#else - return slave_fd; -#endif } /** @@ -329,10 +271,9 @@ int openpty(int *amaster, int *aslave, char *name, const struct termios *termp, [task setCurrentDirectoryPath: directory]; [task setLaunchPath: path]; - master_fd = [self master]; + master_fd = [self openpty]; if(master_fd > 0) { - slave_fd = [self slave: master_fd]; if(slave_fd > 0) { slave_handle = [[NSFileHandle alloc] initWithFileDescriptor: slave_fd];