cptr.c File Reference
`#include <ruby/ruby.h>`
`#include <ruby/io.h>`
`#include <ctype.h>`
`#include "dl.h"`

Go to the source code of this file.

## Functions

static freefunc_t | get_freefunc (VALUE func, volatile VALUE *wrap)
static void | dlptr_mark (void *ptr)
static void | dlptr_free (void *ptr)
static size_t | dlptr_memsize (const void *ptr)
void | dlptr_init (VALUE val)
VALUE | rb_dlptr_new2 (VALUE klass, void *ptr, long size, freefunc_t func)
VALUE | rb_dlptr_new (void *ptr, long size, freefunc_t func)
VALUE | rb_dlptr_malloc (long size, freefunc_t func)
void * | rb_dlptr2cptr (VALUE val)
static VALUE | rb_dlptr_s_allocate (VALUE klass)
static VALUE | rb_dlptr_initialize (int argc, VALUE argv[], VALUE self)
static VALUE | rb_dlptr_s_malloc (int argc, VALUE argv[], VALUE klass)
static VALUE | rb_dlptr_to_i (VALUE self)
static VALUE | rb_dlptr_to_value (VALUE self)
VALUE | rb_dlptr_ptr (VALUE self)
VALUE | rb_dlptr_ref (VALUE self)
VALUE | rb_dlptr_null_p (VALUE self)
static VALUE | rb_dlptr_free_set (VALUE self, VALUE val)
static VALUE | rb_dlptr_free_get (VALUE self)
static VALUE | rb_dlptr_to_s (int argc, VALUE argv[], VALUE self)
static VALUE | rb_dlptr_to_str (int argc, VALUE argv[], VALUE self)
static VALUE | rb_dlptr_inspect (VALUE self)
VALUE | rb_dlptr_eql (VALUE self, VALUE other)
static VALUE | rb_dlptr_cmp (VALUE self, VALUE other)
static VALUE | rb_dlptr_plus (VALUE self, VALUE other)
static VALUE | rb_dlptr_minus (VALUE self, VALUE other)
VALUE | rb_dlptr_aref (int argc, VALUE argv[], VALUE self)
VALUE | rb_dlptr_aset (int argc, VALUE argv[], VALUE self)
static VALUE | rb_dlptr_size_set (VALUE self, VALUE size)
static VALUE | rb_dlptr_size_get (VALUE self)
static VALUE | rb_dlptr_s_to_ptr (VALUE self, VALUE val)
void | Init_dlptr (void)

## Variables

VALUE | rb_cDLCPtr
static ID | id_to_ptr
static const rb_data_type_t | dlptr_data_type

## Function Documentation

static void dlptr_free | ( | void * | ptr | ) |

static

Definition at line 44 of file cptr.c.

References ptr_data::free, and ptr_data::ptr.

void dlptr_init | ( | VALUE | val | ) |

Definition at line 67 of file cptr.c.

References OBJ_TAINT, and TypedData_Get_Struct.

Referenced by rb_dlptr_new2().

static void dlptr_mark | ( | void * | ptr | ) |

static

Definition at line 32 of file cptr.c.

References ptr_data::ptr, rb_gc_mark(), and ptr_data::wrap.

static size_t dlptr_memsize | ( | const void * | ptr | ) |

static

Definition at line 55 of file cptr.c.

References ptr_data::ptr, and ptr_data::size.

static freefunc_t get_freefunc | ( | VALUE | func,
|  | volatile VALUE * | wrap
| ) |  |

inline static

Definition at line 13 of file cptr.c.

References func, NIL_P, NULL, NUM2PTR, rb_dlcfunc_kind_p(), rb_Integer(), and RCFUNC_DATA.

Referenced by rb_dlptr_free_set(), rb_dlptr_initialize(), and rb_dlptr_s_malloc().

void Init_dlptr | ( | void |  | ) |

Definition at line 639 of file cptr.c.

References id_to_ptr, rb_cDLCPtr, rb_cObject, rb_define_alloc_func(), rb_define_class_under(), rb_define_const(), rb_define_method(), rb_define_singleton_method(), rb_dlptr_aref(), rb_dlptr_aset(), rb_dlptr_cmp(), rb_dlptr_eql(), rb_dlptr_free_get(), rb_dlptr_free_set(), rb_dlptr_initialize(), rb_dlptr_inspect(), rb_dlptr_minus(), rb_dlptr_new(), rb_dlptr_null_p(), rb_dlptr_plus(), rb_dlptr_ptr(), rb_dlptr_ref(), rb_dlptr_s_allocate(), rb_dlptr_s_malloc(), rb_dlptr_s_to_ptr(), rb_dlptr_size_get(), rb_dlptr_size_set(), rb_dlptr_to_i(), rb_dlptr_to_s(), rb_dlptr_to_str(), rb_dlptr_to_value(), rb_intern, and rb_mDL.

Referenced by Init_dl().

void* rb_dlptr2cptr | ( | VALUE | val | ) |

Definition at line 109 of file cptr.c.

References NULL, ptr_data::ptr, Qnil, rb_cDLCPtr, rb_eTypeError, rb_obj_is_kind_of(), rb_raise(), and TypedData_Get_Struct.

Referenced by rb_dlptr_aset(), rb_dlptr_cmp(), rb_dlptr_eql(), rb_dlptr_minus(), and rb_dlptr_plus().

VALUE rb_dlptr_aref | ( | int | argc,
|  | VALUE | argv[],
|  | VALUE | self
| ) |  |

Definition at line 500 of file cptr.c.

References INT2NUM(), len, NUM2ULONG, ptr_data::ptr, Qnil, rb_bug(), rb_eDLError, rb_raise(), rb_scan_args(), rb_tainted_str_new(), and TypedData_Get_Struct.

Referenced by Init_dlptr().

VALUE rb_dlptr_aset | ( | int | argc,
|  | VALUE | argv[],
|  | VALUE | self
| ) |  |

Definition at line 535 of file cptr.c.

References len, NUM2PTR, NUM2UINT, NUM2ULONG, ptr_data::ptr, Qnil, rb_bug(), rb_cDLCPtr, rb_dlptr2cptr(), rb_eDLError, rb_obj_is_kind_of(), rb_raise(), rb_scan_args(), RB_TYPE_P, StringValuePtr, T_STRING, and TypedData_Get_Struct.

Referenced by Init_dlptr().

static VALUE rb_dlptr_cmp | ( | VALUE | self,
|  | VALUE | other
| ) |  |

static

Definition at line 440 of file cptr.c.

References diff(), INT2FIX, INT2NUM(), Qnil, rb_cDLCPtr, rb_dlptr2cptr(), rb_obj_is_kind_of(), and SIGNED_VALUE.

Referenced by Init_dlptr().

VALUE rb_dlptr_eql | ( | VALUE | self,
|  | VALUE | other
| ) |  |

Definition at line 420 of file cptr.c.

References Qfalse, Qtrue, rb_cDLCPtr, rb_dlptr2cptr(), and rb_obj_is_kind_of().

Referenced by Init_dlptr().

static VALUE rb_dlptr_free_get | ( | VALUE | self | ) |

static

Definition at line 318 of file cptr.c.

References CFUNC_CDECL, DLTYPE_VOID, ptr_data::free, rb_dlcfunc_new(), and TypedData_Get_Struct.

Referenced by Init_dlptr().

static VALUE rb_dlptr_free_set | ( | VALUE | self,
|  | VALUE | val
| ) |  |

static

Definition at line 302 of file cptr.c.

References ptr_data::free, get_freefunc(), Qnil, TypedData_Get_Struct, and ptr_data::wrap.

Referenced by Init_dlptr().

static VALUE rb_dlptr_initialize | ( | int | argc,
|  | VALUE | argv[],
|  | VALUE | self
| ) |  |

static

Definition at line 153 of file cptr.c.

References ptr_data::free, get_freefunc(), NULL, NUM2LONG(), NUM2PTR, p, ptr_data::ptr, Qnil, rb_Integer(), rb_scan_args(), size, ptr_data::size, sym, TypedData_Get_Struct, and ptr_data::wrap.

Referenced by Init_dlptr().

static VALUE rb_dlptr_inspect | ( | VALUE | self | ) |

static

Definition at line 400 of file cptr.c.

References CLASS_OF, ptr_data::free, ptr_data::ptr, rb_class2name(), rb_str_new2(), ptr_data::size, snprintf, and TypedData_Get_Struct.

Referenced by Init_dlptr().

VALUE rb_dlptr_malloc | ( | long | size,
|  | freefunc_t | func
| ) |  |

Definition at line 98 of file cptr.c.

References ptr_data::ptr, rb_dlptr_new(), rb_secure(), and ruby_xmalloc().

Referenced by rb_dlptr_s_malloc().

static VALUE rb_dlptr_minus | ( | VALUE | self,
|  | VALUE | other
| ) |  |

static

Definition at line 479 of file cptr.c.

References NUM2LONG(), ptr_data::ptr, rb_dlptr2cptr(), rb_dlptr_new(), RPTR_DATA, and size.

Referenced by Init_dlptr().

VALUE rb_dlptr_new | ( | void * | ptr,
|  | long | size,
|  | freefunc_t | func
| ) |  |

Definition at line 92 of file cptr.c.

References rb_cDLCPtr, and rb_dlptr_new2().

Referenced by Init_dlptr(), rb_dlptr_malloc(), rb_dlptr_minus(), rb_dlptr_plus(), rb_dlptr_ptr(), rb_dlptr_ref(), and rb_dlptr_s_to_ptr().

VALUE rb_dlptr_new2 | ( | VALUE | klass,
|  | void * | ptr,
|  | long | size,
|  | freefunc_t | func
| ) |  |

Definition at line 76 of file cptr.c.

References dlptr_init(), ptr_data::free, func, ptr_data::ptr, rb_secure(), size, ptr_data::size, and TypedData_Make_Struct.

Referenced by rb_dlptr_new().

VALUE rb_dlptr_null_p | ( | VALUE | self | ) |

Definition at line 288 of file cptr.c.

References ptr_data::ptr, Qfalse, Qtrue, and TypedData_Get_Struct.

Referenced by Init_dlptr().

static VALUE rb_dlptr_plus | ( | VALUE | self,
|  | VALUE | other
| ) |  |

static

Definition at line 461 of file cptr.c.

References NUM2LONG(), ptr_data::ptr, rb_dlptr2cptr(), rb_dlptr_new(), RPTR_DATA, and size.

Referenced by Init_dlptr().

VALUE rb_dlptr_ptr | ( | VALUE | self | ) |

Definition at line 259 of file cptr.c.

References ptr_data::ptr, rb_dlptr_new(), and TypedData_Get_Struct.

Referenced by Init_dlptr().

VALUE rb_dlptr_ref | ( | VALUE | self | ) |

Definition at line 274 of file cptr.c.

References ptr_data::ptr, rb_dlptr_new(), and TypedData_Get_Struct.

Referenced by Init_dlptr().

static VALUE rb_dlptr_s_allocate | ( | VALUE | klass | ) |

static

Definition at line 129 of file cptr.c.

References ptr_data::free, ptr_data::ptr, rb_secure(), ptr_data::size, and TypedData_Make_Struct.

Referenced by Init_dlptr().

static VALUE rb_dlptr_s_malloc | ( | int | argc,
|  | VALUE | argv[],
|  | VALUE | klass
| ) |  |

static

Definition at line 200 of file cptr.c.

References get_freefunc(), NULL, NUM2LONG(), rb_bug(), rb_dlptr_malloc(), rb_scan_args(), RPTR_DATA, size, sym, and ptr_data::wrap.

Referenced by Init_dlptr().

static VALUE rb_dlptr_s_to_ptr | ( | VALUE | self,
|  | VALUE | val
| ) |  |

static

Definition at line 604 of file cptr.c.

References GetOpenFile, id_to_ptr, NULL, NUM2PTR, OBJ_INFECT, ptr_data::ptr, Qundef, rb_cDLCPtr, rb_check_funcall(), rb_cIO, rb_cString, rb_dlptr_new(), rb_eDLError, rb_Integer(), rb_io_stdio_file(), rb_obj_is_kind_of(), rb_raise(), RPTR_DATA, RSTRING_LEN, RTEST, StringValuePtr, and ptr_data::wrap.

Referenced by Init_dlptr().

static VALUE rb_dlptr_size_get | ( | VALUE | self | ) |

static

Definition at line 590 of file cptr.c.

References LONG2NUM, RPTR_DATA, and size.

Referenced by Init_dlptr().

static VALUE rb_dlptr_size_set | ( | VALUE | self,
|  | VALUE | size
| ) |  |

static

Definition at line 578 of file cptr.c.

References NUM2LONG(), RPTR_DATA, and size.

Referenced by Init_dlptr().

static VALUE rb_dlptr_to_i | ( | VALUE | self | ) |

static

Definition at line 231 of file cptr.c.

References ptr_data::ptr, PTR2NUM, and TypedData_Get_Struct.

Referenced by Init_dlptr().

static VALUE rb_dlptr_to_s | ( | int | argc,
|  | VALUE | argv[],
|  | VALUE | self
| ) |  |

static

Definition at line 338 of file cptr.c.

References len, NUM2INT, ptr_data::ptr, rb_bug(), rb_scan_args(), rb_tainted_str_new(), rb_tainted_str_new2(), and TypedData_Get_Struct.

Referenced by Init_dlptr().

static VALUE rb_dlptr_to_str | ( | int | argc,
|  | VALUE | argv[],
|  | VALUE | self
| ) |  |

static

Definition at line 371 of file cptr.c.

References len, NUM2INT, ptr_data::ptr, rb_bug(), rb_scan_args(), rb_tainted_str_new(), ptr_data::size, and TypedData_Get_Struct.

Referenced by Init_dlptr().

static VALUE rb_dlptr_to_value | ( | VALUE | self | ) |

static

Definition at line 245 of file cptr.c.

References ptr_data::ptr, and TypedData_Get_Struct.

Referenced by Init_dlptr().

## Variable Documentation

const rb_data_type_t dlptr_data_type

static

Initial value:
= {
"dl/ptr",
{dlptr_mark, dlptr_free, dlptr_memsize,},
}

Definition at line 61 of file cptr.c.

ID id_to_ptr

static

Definition at line 29 of file cptr.c.

Referenced by Init_dlptr(), and rb_dlptr_s_to_ptr().

VALUE rb_cDLCPtr

Definition at line 10 of file cptr.c.

Referenced by Init_dlptr(), rb_dlptr2cptr(), rb_dlptr_aset(), rb_dlptr_cmp(), rb_dlptr_eql(), rb_dlptr_new(), and rb_dlptr_s_to_ptr().