VALUE rb_ary_to_ptr(int argc, VALUE argv[], VALUE self) { void *ptr; VALUE t; long size; switch (rb_scan_args(argc, argv, "01", &t)) { case 1: ptr = rb_ary2cary(StringValuePtr(t)[0], self, &size); break; case 0: ptr = rb_ary2cary(0, self, &size); break; } if (ptr) { VALUE p = rb_dlptr_new(ptr, size, dlfree); OBJ_INFECT(p, self); return p; } return Qnil; }