summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--ChangeLog6
-rw-r--r--ext/dl/lib/dl/import.rb8
-rw-r--r--test/dl/test_import.rb9
3 files changed, 21 insertions, 2 deletions
diff --git a/ChangeLog b/ChangeLog
index 0119c9a8f1..bb5aa23f0a 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -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()