diff options
Diffstat (limited to 'ext/fiddle/pointer.c')
| -rw-r--r-- | ext/fiddle/pointer.c | 50 |
1 files changed, 8 insertions, 42 deletions
diff --git a/ext/fiddle/pointer.c b/ext/fiddle/pointer.c index 1b7d7a69f6..15107e3862 100644 --- a/ext/fiddle/pointer.c +++ b/ext/fiddle/pointer.c @@ -88,13 +88,8 @@ fiddle_ptr_memsize(const void *ptr) } static const rb_data_type_t fiddle_ptr_data_type = { - .wrap_struct_name = "fiddle/pointer", - .function = { - .dmark = fiddle_ptr_mark, - .dfree = fiddle_ptr_free, - .dsize = fiddle_ptr_memsize, - }, - .flags = RUBY_TYPED_FREE_IMMEDIATELY | RUBY_TYPED_WB_PROTECTED + "fiddle/pointer", + {fiddle_ptr_mark, fiddle_ptr_free, fiddle_ptr_memsize,}, }; #ifdef HAVE_RUBY_MEMORY_VIEW_H @@ -140,8 +135,8 @@ rb_fiddle_ptr_new2(VALUE klass, void *ptr, long size, freefunc_t func, VALUE wra data->free = func; data->freed = false; data->size = size; - RB_OBJ_WRITE(val, &data->wrap[0], wrap0); - RB_OBJ_WRITE(val, &data->wrap[1], wrap1); + data->wrap[0] = wrap0; + data->wrap[1] = wrap1; return val; } @@ -240,8 +235,8 @@ rb_fiddle_ptr_initialize(int argc, VALUE argv[], VALUE self) /* Free previous memory. Use of inappropriate initialize may cause SEGV. */ (*(data->free))(data->ptr); } - RB_OBJ_WRITE(self, &data->wrap[0], wrap); - RB_OBJ_WRITE(self, &data->wrap[1], funcwrap); + data->wrap[0] = wrap; + data->wrap[1] = funcwrap; data->ptr = p; data->size = s; data->free = f; @@ -319,7 +314,7 @@ rb_fiddle_ptr_s_malloc(int argc, VALUE argv[], VALUE klass) } obj = rb_fiddle_ptr_malloc(klass, s,f); - if (wrap) RB_OBJ_WRITE(obj, &RPTR_DATA(obj)->wrap[1], wrap); + if (wrap) RPTR_DATA(obj)->wrap[1] = wrap; if (rb_block_given_p()) { if (!f) { @@ -800,37 +795,10 @@ rb_fiddle_ptr_s_to_ptr(VALUE self, VALUE val) if (num == val) wrap = 0; ptr = rb_fiddle_ptr_new(NUM2PTR(num), 0, NULL); } - if (wrap) RB_OBJ_WRITE(ptr, &RPTR_DATA(ptr)->wrap[0], wrap); + if (wrap) RPTR_DATA(ptr)->wrap[0] = wrap; return ptr; } -/* - * call-seq: - * Fiddle::Pointer.read(address, len) => string - * - * Or read the memory at address +address+ with length +len+ and return a - * string with that memory - */ - -static VALUE -rb_fiddle_ptr_read_mem(VALUE klass, VALUE address, VALUE len) -{ - return rb_str_new((char *)NUM2PTR(address), NUM2ULONG(len)); -} - -/* - * call-seq: - * Fiddle::Pointer.write(address, str) - * - * Write bytes in +str+ to the location pointed to by +address+. - */ -static VALUE -rb_fiddle_ptr_write_mem(VALUE klass, VALUE addr, VALUE str) -{ - memcpy(NUM2PTR(addr), StringValuePtr(str), RSTRING_LEN(str)); - return str; -} - void Init_fiddle_pointer(void) { @@ -847,8 +815,6 @@ Init_fiddle_pointer(void) rb_define_singleton_method(rb_cPointer, "malloc", rb_fiddle_ptr_s_malloc, -1); rb_define_singleton_method(rb_cPointer, "to_ptr", rb_fiddle_ptr_s_to_ptr, 1); rb_define_singleton_method(rb_cPointer, "[]", rb_fiddle_ptr_s_to_ptr, 1); - rb_define_singleton_method(rb_cPointer, "read", rb_fiddle_ptr_read_mem, 2); - rb_define_singleton_method(rb_cPointer, "write", rb_fiddle_ptr_write_mem, 2); rb_define_method(rb_cPointer, "initialize", rb_fiddle_ptr_initialize, -1); rb_define_method(rb_cPointer, "free=", rb_fiddle_ptr_free_set, 1); rb_define_method(rb_cPointer, "free", rb_fiddle_ptr_free_get, 0); |
