head 1.2; access; symbols pkgsrc-2013Q2:1.2.0.46 pkgsrc-2013Q2-base:1.2 pkgsrc-2012Q4:1.2.0.44 pkgsrc-2012Q4-base:1.2 pkgsrc-2011Q4:1.2.0.42 pkgsrc-2011Q4-base:1.2 pkgsrc-2011Q2:1.2.0.40 pkgsrc-2011Q2-base:1.2 pkgsrc-2009Q4:1.2.0.38 pkgsrc-2009Q4-base:1.2 pkgsrc-2008Q4:1.2.0.36 pkgsrc-2008Q4-base:1.2 pkgsrc-2008Q3:1.2.0.34 pkgsrc-2008Q3-base:1.2 cube-native-xorg:1.2.0.32 cube-native-xorg-base:1.2 pkgsrc-2008Q2:1.2.0.30 pkgsrc-2008Q2-base:1.2 pkgsrc-2008Q1:1.2.0.28 pkgsrc-2008Q1-base:1.2 pkgsrc-2007Q4:1.2.0.26 pkgsrc-2007Q4-base:1.2 pkgsrc-2007Q3:1.2.0.24 pkgsrc-2007Q3-base:1.2 pkgsrc-2007Q2:1.2.0.22 pkgsrc-2007Q2-base:1.2 pkgsrc-2007Q1:1.2.0.20 pkgsrc-2007Q1-base:1.2 pkgsrc-2006Q4:1.2.0.18 pkgsrc-2006Q4-base:1.2 pkgsrc-2006Q3:1.2.0.16 pkgsrc-2006Q3-base:1.2 pkgsrc-2006Q2:1.2.0.14 pkgsrc-2006Q2-base:1.2 pkgsrc-2006Q1:1.2.0.12 pkgsrc-2006Q1-base:1.2 pkgsrc-2005Q4:1.2.0.10 pkgsrc-2005Q4-base:1.2 pkgsrc-2005Q3:1.2.0.8 pkgsrc-2005Q3-base:1.2 pkgsrc-2005Q2:1.2.0.6 pkgsrc-2005Q2-base:1.2 pkgsrc-2005Q1:1.2.0.4 pkgsrc-2005Q1-base:1.2 pkgsrc-2004Q4:1.2.0.2 pkgsrc-2004Q4-base:1.2 pkgsrc-2004Q3:1.1.0.6 pkgsrc-2004Q3-base:1.1 pkgsrc-2004Q2:1.1.0.4 pkgsrc-2004Q2-base:1.1 pkgsrc-2004Q1:1.1.0.2 pkgsrc-2004Q1-base:1.1; locks; strict; comment @# @; 1.2 date 2004.11.28.06.35.31; author taca; state dead; branches; next 1.1; 1.1 date 2004.03.12.04.59.20; author taca; state Exp; branches; next ; desc @@ 1.2 log @Removing ruby-base package since this is obsolete with new framework for Ruby packages. @ text @$NetBSD: patch-am,v 1.1 2004/03/12 04:59:20 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 @Update ruby-base package to 1.6.8nb3. * Miscellaneous bug fixes. - ruby core dumps by segmentation violation because of wrong checking whether block was given. - PTY module function dose not reset SIGALRM handler when child process executing command on pty. - There is a error for calling raise method in lib/delegate.rb. * Try to honor PKG_SILENT and PKG_VERBOSE. * Experimental fix for getaddrinfo(3) problem on Darwin (not tested). @ text @d1 1 a1 1 $NetBSD$ @