diff options
-rw-r--r-- | ChangeLog | 6 | ||||
-rw-r--r-- | ext/dl/lib/dl/import.rb | 8 | ||||
-rw-r--r-- | test/dl/test_import.rb | 9 |
3 files changed, 21 insertions, 2 deletions
@@ -1,3 +1,9 @@ +Tue Jul 6 08:35:58 2010 Aaron Patterson <aaron@tenderlovemaking.com> + + * ext/dl/lib/dl/import.rb (handler): add a more helpful error message + when calling import_symbol or import_function without calling + dlload. Thanks nobu! [ruby-core:30996] + Tue Jul 6 00:34:50 2010 Yusuke Endoh <mame@tsg.ne.jp> * vm.c (thread_free): free altstack to prevent memory leak. a patch diff --git a/ext/dl/lib/dl/import.rb b/ext/dl/lib/dl/import.rb index fd23bc9676..f9e8faf5f0 100644 --- a/ext/dl/lib/dl/import.rb +++ b/ext/dl/lib/dl/import.rb @@ -194,8 +194,12 @@ module DL return ptr end + def handler + @handler or raise "call dlload before importing symbols and functions" + end + def import_symbol(name) - addr = @handler.sym(name) + addr = handler.sym(name) if( !addr ) raise(DLError, "cannot find the symbol: #{name}") end @@ -203,7 +207,7 @@ module DL end def import_function(name, ctype, argtype, call_type = nil) - addr = @handler.sym(name) + addr = handler.sym(name) if( !addr ) raise(DLError, "cannot find the function: #{name}()") end diff --git a/test/dl/test_import.rb b/test/dl/test_import.rb index 56a417f9ab..64cbf53fbc 100644 --- a/test/dl/test_import.rb +++ b/test/dl/test_import.rb @@ -41,6 +41,15 @@ module DL end class TestImport < TestBase + def test_ensure_call_dlload + err = assert_raises(RuntimeError) do + Class.new do + extend DL::Importer + extern "void *strcpy(char*, char*)" + end + end + end + def test_malloc() s1 = LIBC::Timeval.malloc() s2 = LIBC::Timeval.malloc() |