From 185e9705abbb8c2f96e748a400b76db61e129902 Mon Sep 17 00:00:00 2001 From: nobu Date: Thu, 2 Sep 2010 21:14:51 +0000 Subject: * ext/pty/pty.c (chfunc): restore errno from SystemCallError and propagate proper exception to the parent. [ruby-dev:41965] git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@29169 b2dd03c8-39d4-4d8f-98ff-823fe69b080e --- ext/pty/pty.c | 8 +++++++- 1 file changed, 7 insertions(+), 1 deletion(-) (limited to 'ext/pty') diff --git a/ext/pty/pty.c b/ext/pty/pty.c index 51bf3a33a5..156e4563c3 100644 --- a/ext/pty/pty.c +++ b/ext/pty/pty.c @@ -162,6 +162,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; @@ -221,7 +222,12 @@ chfunc(void *data, char *errbuf, size_t errbuf_len) arg.argv = argv; rb_protect(pty_exec, (VALUE)&arg, &status); sleep(1); - return -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])); #undef ERROR_EXIT } -- cgit v1.2.3