Hello
I’m trying to find out how to return File::Stat objects from a C
extension. In 1.8 I can do it like this:
#define WRAP_STAT(stp) Data_Wrap_Struct(rb_cStat, NULL, free, stp)
static VALUE
stat_new(struct stat *st)
{
struct stat *stp = ALLOC(struct stat);
*stp = *st;
return WRAP_STAT(stp);
}
Starting in 1.9 it seems the correct way would be to do it like this:
static size_t
stat_memsize(const void *p)
{
return p ? sizeof(struct stat) : 0;
}
static const rb_data_type_t stat_data_type = {
“stat”,
{NULL, RUBY_TYPED_DEFAULT_FREE, stat_memsize,},
};
#define WRAP_STAT(stp)
TypedData_Wrap_Struct(rb_cStat, &stat_data_type, stp)
However this leads to the following error:
#<File::Stat/usr/lib/ruby/1.9.1/pp.rb:405:in `dev’: wrong argument type
stat (expected stat) (TypeError)
An analogous error also happens when I try to do the same for Dir
objects.
What is the correct way to do this?
Thanks in advance,
Andre