diff options
Diffstat (limited to 'ext/pty')
-rw-r--r-- | ext/pty/pty.c | 8 |
1 files changed, 7 insertions, 1 deletions
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 } |