Feature #11806 ยป 0001-IO-advise-avoids-raising-Errno-ENOSYS.patch
io.c | ||
---|---|---|
ias.len = len;
|
||
rv = (int)rb_thread_io_blocking_region(io_advise_internal, &ias, fptr->fd);
|
||
if (rv) {
|
||
if (rv && rv != ENOSYS) {
|
||
/* posix_fadvise(2) doesn't set errno. On success it returns 0; otherwise
|
||
it returns the error code. */
|
||
VALUE message = rb_sprintf("%"PRIsVALUE" "
|
test/ruby/test_io.rb | ||
---|---|---|
ret = assert_nothing_raised(lambda { os_and_fs(tf.path) }) {
|
||
begin
|
||
t.advise(adv, offset, len)
|
||
rescue Errno::ENOSYS
|
||
skip
|
||
rescue Errno::EINVAL => e
|
||
if /linux/ =~ RUBY_PLATFORM && (Etc.uname[:release].split('.').map(&:to_i) <=> [3,6]) < 0
|
||
next # [ruby-core:65355] tmpfs is not supported
|
||
... | ... | |
# we don't know if other platforms have a real posix_fadvise()
|
||
with_pipe do |r,w|
|
||
# Linux 2.6.15 and earlier returned EINVAL instead of ESPIPE
|
||
assert_raise(Errno::ESPIPE, Errno::EINVAL, Errno::ENOSYS) { r.advise(:willneed) }
|
||
assert_raise(Errno::ESPIPE, Errno::EINVAL, Errno::ENOSYS) { w.advise(:willneed) }
|
||
assert_raise(Errno::ESPIPE, Errno::EINVAL) { r.advise(:willneed) }
|
||
assert_raise(Errno::ESPIPE, Errno::EINVAL) { w.advise(:willneed) }
|
||
end
|
||
end if /linux/ =~ RUBY_PLATFORM
|
||
-
|