head 1.2; access; symbols pkgsrc-2013Q2:1.2.0.38 pkgsrc-2013Q2-base:1.2 pkgsrc-2012Q4:1.2.0.36 pkgsrc-2012Q4-base:1.2 pkgsrc-2011Q4:1.2.0.34 pkgsrc-2011Q4-base:1.2 pkgsrc-2011Q2:1.2.0.32 pkgsrc-2011Q2-base:1.2 pkgsrc-2009Q4:1.2.0.30 pkgsrc-2009Q4-base:1.2 pkgsrc-2008Q4:1.2.0.28 pkgsrc-2008Q4-base:1.2 pkgsrc-2008Q3:1.2.0.26 pkgsrc-2008Q3-base:1.2 cube-native-xorg:1.2.0.24 cube-native-xorg-base:1.2 pkgsrc-2008Q2:1.2.0.22 pkgsrc-2008Q2-base:1.2 pkgsrc-2008Q1:1.2.0.20 pkgsrc-2008Q1-base:1.2 pkgsrc-2007Q4:1.2.0.18 pkgsrc-2007Q4-base:1.2 pkgsrc-2007Q3:1.2.0.16 pkgsrc-2007Q3-base:1.2 pkgsrc-2007Q2:1.2.0.14 pkgsrc-2007Q2-base:1.2 pkgsrc-2007Q1:1.2.0.12 pkgsrc-2007Q1-base:1.2 pkgsrc-2006Q4:1.2.0.10 pkgsrc-2006Q4-base:1.2 pkgsrc-2006Q3:1.2.0.8 pkgsrc-2006Q3-base:1.2 pkgsrc-2006Q2:1.2.0.6 pkgsrc-2006Q2-base:1.2 pkgsrc-2006Q1:1.2.0.4 pkgsrc-2006Q1-base:1.2 pkgsrc-2005Q4:1.2.0.2 pkgsrc-2005Q4-base:1.2 pkgsrc-2005Q3:1.1.1.1.0.6 pkgsrc-2005Q3-base:1.1.1.1 pkgsrc-2005Q2:1.1.1.1.0.4 pkgsrc-2005Q2-base:1.1.1.1 pkgsrc-2005Q1:1.1.1.1.0.2 pkgsrc-2005Q1-base:1.1.1.1 pkgsrc-base:1.1.1.1 TNF:1.1.1; locks; strict; comment @# @; 1.2 date 2005.11.03.06.28.28; author taca; state dead; branches; next 1.1; 1.1 date 2005.03.06.16.36.08; author taca; state Exp; branches 1.1.1.1; next ; 1.1.1.1 date 2005.03.06.16.36.08; author taca; state Exp; branches; next ; desc @@ 1.2 log @Remove ruby16-base package. It's time to say good-bye. @ text @$NetBSD: patch-ae,v 1.1 2005/03/06 16:36:08 taca Exp $ --- ext/pty/pty.c.orig 2002-01-27 02:15:53.000000000 +0900 +++ ext/pty/pty.c @@@@ -202,17 +202,41 @@@@ chld_changed() static void getDevice _((int*, int*)); -static void -establishShell(shellname, info) - char *shellname; +struct exec_info { + int argc; + VALUE *argv; +}; + +static VALUE +pty_exec(arg) + struct exec_info *arg; +{ + return rb_funcall2(Qnil, rb_intern("exec"), arg->argc, arg->argv); +} + +establishShell(command, info) + VALUE command; struct pty_info *info; { static int i,j,master,slave,currentPid; char *p,*getenv(); struct passwd *pwent; - RETSIGTYPE chld_changed(); - - if (shellname[0] == '\0') { + VALUE v, *argv; + struct exec_info arg; + int status, argc; + + if (TYPE(command) == T_ARRAY) { + argc = RARRAY(command)->len; + argv = RARRAY(command)->ptr; + } + else { + Check_SafeStr(command); + argc = RSTRING(command)->len ? 1 : 0; + argv = &command; + } + if (argc == 0) { + char *shellname; + if ((p = getenv("SHELL")) != NULL) { shellname = p; } @@@@ -223,18 +247,21 @@@@ establishShell(shellname, info) else shellname = "/bin/sh"; } + v = rb_str_new2(shellname); + argc = 1; + argv = &v; } getDevice(&master,&slave); currentPid = getpid(); set_signal_action(chld_changed); - if((i = vfork()) < 0) { + if((i = fork()) < 0) { + close(master); + close(slave); rb_sys_fail("fork failed"); } if(i == 0) { /* child */ - int argc; - char *argv[1024]; currentPid = getpid(); /* @@@@ -286,19 +313,10 @@@@ establishShell(shellname, info) seteuid(getuid()); #endif - argc = 0; - for (i = 0; shellname[i];) { - while (isspace(shellname[i])) i++; - for (j = i; shellname[j] && !isspace(shellname[j]); j++); - argv[argc] = (char*)xmalloc(j-i+1); - strncpy(argv[argc],&shellname[i],j-i); - argv[argc][j-i] = 0; - i = j; - argc++; - } - argv[argc] = NULL; + arg.argc = argc; + arg.argv = argv; + rb_protect(pty_exec, (VALUE)&arg, &status); execvp(argv[0],argv); - sleep(1); _exit(1); } @@@@ -442,11 +460,7 @@@@ pty_getpty(self, command) OBJSETUP(wport, rb_cFile, T_FILE); MakeOpenFile(wport, wfptr); - if (TYPE(command) == T_ARRAY) - command = rb_ary_join(command,rb_str_new2(" ")); - Check_SafeStr(command); - - establishShell(RSTRING(command)->ptr,&info); + establishShell(command, &info); rfptr->mode = rb_io_mode_flags("r"); rfptr->f = fdopen(info.fd, "r"); @ 1.1 log @Initial revision @ text @d1 1 a1 1 $NetBSD: patch-ae,v 1.1.1.1 2004/11/27 14:14:05 taca Exp $ @ 1.1.1.1 log @Importing ruby16-base package. This is minimum ruby 1.6.8 based on current ruby16 and ruby16 package will be meta pacakge later. @ text @@