diff --git a/ext/dl/handle.c b/ext/dl/handle.c index 0b78565cef..6c2ef37b3d 100644 --- a/ext/dl/handle.c +++ b/ext/dl/handle.c @@ -100,6 +100,13 @@ predefined_dlhandle(void *handle) return obj; } +/* + * call-seq: + * initialize(lib = nil, flags = DL::RTLD_LAZY | DL::RTLD_GLOBAL) + * + * Create a new handler that opens library named +lib+ with +flags+. If no + * library is specified, RTLD_DEFAULT is used. + */ VALUE rb_dlhandle_initialize(int argc, VALUE argv[], VALUE self) { @@ -194,6 +201,11 @@ rb_dlhandle_disable_close(VALUE self) return Qnil; } +/* + * call-seq: to_i + * + * Returns the memory address for this handle. + */ VALUE rb_dlhandle_to_i(VALUE self) { diff --git a/test/dl/test_handle.rb b/test/dl/test_handle.rb index ab9c1c13a3..a8dcf1952b 100644 --- a/test/dl/test_handle.rb +++ b/test/dl/test_handle.rb @@ -2,6 +2,11 @@ require 'test_base' module DL class TestHandle < TestBase + def test_to_i + handle = DL::Handle.new(LIBC_SO) + assert handle.to_i + end + def test_static_sym_secure assert_raises(SecurityError) do Thread.new do @@ -90,5 +95,15 @@ module DL end.join end end + + def test_initialize_noargs + handle = DL::Handle.new + assert handle['rb_str_new'] + end + + def test_initialize_flags + handle = DL::Handle.new(LIBC_SO, DL::RTLD_LAZY | DL::RTLD_GLOBAL) + assert handle['calloc'] + end end end