diff --git a/file.c b/file.c index 6f3a4378fd..b2ad989df6 100644 --- a/file.c +++ b/file.c @@ -5683,9 +5683,10 @@ ruby_is_fd_loadable(int fd) if (S_ISREG(st.st_mode)) return 1; - if (S_ISFIFO(st.st_mode)) + if (!S_ISDIR(st.st_mode)) return 1; + errno = EISDIR; return 0; #endif } diff --git a/ruby.c b/ruby.c index bde78f17f3..2f3e9409ca 100644 --- a/ruby.c +++ b/ruby.c @@ -1803,8 +1803,9 @@ open_load_file(VALUE fname_v, int *xflag) } #endif if (!ruby_is_fd_loadable(fd)) { + int e = errno; (void)close(fd); - rb_load_fail(fname_v, strerror(errno)); + rb_load_fail(fname_v, strerror(e)); } f = rb_io_fdopen(fd, mode, fname);