I want to use rb_require with rb_protect, as in the following example:
int error;
rb_protect( (VALUE (*)(VALUE))rb_require, (VALUE) "./test", &error);
But when I compile it, I get this error:
passing argument 1 of ‘rb_protect’ from incompatible pointer type [enabled by default]
/usr/include/ruby-1.9.1/ruby/intern.h:357:7: note: expected ‘VALUE (*)(VALUE)’ but argument is of type ‘VALUE (*)(VALUE, VALUE)’
After searching on Google to see how to use rb_require with rb_protect, I tried:
int error;
rb_protect( RUBY_METHOD_FUNC(rb_require), (VALUE) "./test", &error);
or
VALUE require_wrap(VALUE arg)
{
return rb_require("./test");
}
/*in main:*/
rb_protect( require_wrap, 0, & error);
But I always get the same error. This error doesn't stop the compilation but the binary segfault when I launch it whereas everything works without the rb_protect.
__Edit__
there was an error in my source file. In fact all the solutions I have tested works well:
int error;
rb_protect( (VALUE (*)(VALUE))rb_require, (VALUE) "./test", &error);
or
int error;
rb_protect( RUBY_METHOD_FUNC(rb_require), (VALUE) "./test", &error);
or
VALUE require_wrap(VALUE arg)
{
return rb_require("./test");
}
/*in main:*/
rb_protect( require_wrap, 0, & error);
Thanks
Solutions that works well:
int error;
rb_protect( (VALUE (*)(VALUE))rb_require, (VALUE) "./test", &error);
or
int error;
rb_protect( RUBY_METHOD_FUNC(rb_require), (VALUE) "./test", &error);
or
VALUE require_wrap(VALUE arg)
{
return rb_require("./test");
}
/*in main:*/
rb_protect( require_wrap, 0, & error);