From aa5c05b8ba0c1ab9255730f8cd7acab68c0af600 Mon Sep 17 00:00:00 2001 From: nobu Date: Thu, 2 Sep 2010 21:40:55 +0000 Subject: * ext/pty/pty.c (chfunc): pass through exceptions. * io.c (rb_io_bufwrite, rb_io_bufread): added. * process.c (rb_fork_err): protect from exceptions. git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@29171 b2dd03c8-39d4-4d8f-98ff-823fe69b080e --- ext/pty/pty.c | 26 +------------------------- 1 file changed, 1 insertion(+), 25 deletions(-) (limited to 'ext/pty/pty.c') diff --git a/ext/pty/pty.c b/ext/pty/pty.c index 156e4563c3..b2b5caa2af 100644 --- a/ext/pty/pty.c +++ b/ext/pty/pty.c @@ -135,18 +135,6 @@ struct pty_info { static void getDevice(int*, int*, char [DEVICELEN], int); -struct exec_info { - int argc; - VALUE *argv; -}; - -static VALUE -pty_exec(VALUE v) -{ - struct exec_info *arg = (struct exec_info *)v; - return rb_f_exec(arg->argc, arg->argv); -} - struct child_info { int master, slave; char *slavename; @@ -162,10 +150,7 @@ chfunc(void *data, char *errbuf, size_t errbuf_len) int slave = carg->slave; int argc = carg->argc; VALUE *argv = carg->argv; - VALUE exc; - struct exec_info arg; - int status; #define ERROR_EXIT(str) do { \ strlcpy(errbuf, str, errbuf_len); \ return -1; \ @@ -218,16 +203,7 @@ chfunc(void *data, char *errbuf, size_t errbuf_len) seteuid(getuid()); #endif - arg.argc = argc; - arg.argv = argv; - rb_protect(pty_exec, (VALUE)&arg, &status); - sleep(1); - errno = ENOENT; /* last resort */ - exc = rb_errinfo(); - if (!NIL_P(exc)) { - errno = NUM2INT(rb_attr_get(exc, rb_intern("errno"))); - } - ERROR_EXIT(StringValueCStr(argv[0])); + return rb_f_exec(argc, argv); #undef ERROR_EXIT } -- cgit v1.2.3