Feature #4204 ยป 0001-change-arg-check.patch
| io.c | ||
|---|---|---|
|
}
|
||
|
#endif
|
||
|
#ifdef HAVE_POSIX_FADVISE
|
||
|
static VALUE sym_normal, sym_sequential, sym_random,
|
||
|
sym_willneed, sym_dontneed, sym_noreuse;
|
||
|
#ifdef HAVE_POSIX_FADVISE
|
||
|
struct io_advise_struct {
|
||
|
int fd;
|
||
|
off_t offset;
|
||
| ... | ... | |
|
#endif /* HAVE_POSIX_FADVISE */
|
||
|
void advice_arg_check(VALUE advice)
|
||
|
{
|
||
|
if (!SYMBOL_P(advice))
|
||
|
rb_raise(rb_eTypeError, "advice must be a Symbol");
|
||
|
if (advice != sym_normal &&
|
||
|
advice != sym_sequential &&
|
||
|
advice != sym_random &&
|
||
|
advice != sym_willneed &&
|
||
|
advice != sym_dontneed &&
|
||
|
advice != sym_noreuse) {
|
||
|
/* Unsupported advise */
|
||
|
rb_raise(rb_eNotImpError, "Invalid advice: :%s",
|
||
|
RSTRING_PTR(rb_id2str(SYM2ID(advice))));
|
||
|
}
|
||
|
}
|
||
|
/*
|
||
|
* call-seq:
|
||
|
* ios.advise(advice, offset=0, len=0) -> nil
|
||
| ... | ... | |
|
rb_io_t *fptr;
|
||
|
rb_scan_args(argc, argv, "12", &advice, &offset, &len);
|
||
|
if (!SYMBOL_P(advice))
|
||
|
rb_raise(rb_eTypeError, "advice must be a Symbol");
|
||
|
advice_arg_check(advice);
|
||
|
io = GetWriteIO(io);
|
||
|
GetOpenFile(io, fptr);
|
||
| ... | ... | |
|
sym_textmode = ID2SYM(rb_intern("textmode"));
|
||
|
sym_binmode = ID2SYM(rb_intern("binmode"));
|
||
|
sym_autoclose = ID2SYM(rb_intern("autoclose"));
|
||
|
#ifdef HAVE_POSIX_FADVISE
|
||
|
sym_normal = ID2SYM(rb_intern("normal"));
|
||
|
sym_sequential = ID2SYM(rb_intern("sequential"));
|
||
|
sym_random = ID2SYM(rb_intern("random"));
|
||
|
sym_willneed = ID2SYM(rb_intern("willneed"));
|
||
|
sym_dontneed = ID2SYM(rb_intern("dontneed"));
|
||
|
sym_noreuse = ID2SYM(rb_intern("noreuse"));
|
||
|
#endif
|
||
|
}
|
||
| test/ruby/test_io.rb | ||
|---|---|---|
|
end
|
||
|
end
|
||
|
end
|
||
|
end
|
||
|
def test_invalid_advise
|
||
|
feature4204 = '[ruby-dev:42887]'
|
||
|
t = make_tempfile
|
||
|
%w{Normal rand glark will_need zzzzzzzzzzzz \u2609}.map(&:to_sym).each do |adv|
|
||
|
[[0,0], [0, 20], [400, 2]].each do |offset, len|
|
||
|
open(make_tempfile.path) do |t|
|
||
|
assert_equal(t.advise(adv, offset, len), nil)
|
||
|
assert_raise(NotImplementedError, feature4204) { t.advise(adv, offset, len) }
|
||
|
end
|
||
|
end
|
||
|
end
|
||