1
0
Fork 0
mirror of https://github.com/ruby/ruby.git synced 2022-11-09 12:17:21 -05:00

* test/dl/test_dl2.rb (**) testing malloc and realloc

* ext/dl/dl.c (**) adding documentation

git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@25605 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
This commit is contained in:
tenderlove 2009-11-01 01:46:27 +00:00
parent 0243c024f8
commit 5f3d0f5233
2 changed files with 60 additions and 0 deletions

View file

@ -16,6 +16,12 @@ rb_dl_dlopen(int argc, VALUE argv[], VALUE self)
return rb_class_new_instance(argc, argv, rb_cDLHandle);
}
/*
* call-seq: DL.malloc
*
* Allocate +size+ bytes of memory and return the integer memory address
* for the allocated memory.
*/
VALUE
rb_dl_malloc(VALUE self, VALUE size)
{
@ -26,6 +32,13 @@ rb_dl_malloc(VALUE self, VALUE size)
return PTR2NUM(ptr);
}
/*
* call-seq: DL.realloc(addr, size)
*
* Change the size of the memory allocated at the memory location +addr+ to
* +size+ bytes. Returns the memory address of the reallocated memory, which
* may be different than the address passed in.
*/
VALUE
rb_dl_realloc(VALUE self, VALUE addr, VALUE size)
{

View file

@ -3,6 +3,53 @@ require 'dl/callback'
module DL
class TestDL < TestBase
# TODO: refactor test repetition
def test_realloc
str = "abc"
ptr_id = DL.realloc(0, 4)
ptr = CPtr.new(ptr_id, 4)
assert_equal ptr_id, ptr.to_i
cfunc = CFunc.new(@libc['strcpy'], TYPE_VOIDP, 'strcpy')
x = cfunc.call([ptr_id,str].pack("l!p").unpack("l!*"))
assert_equal("abc\0", ptr[0,4])
DL.free ptr_id
end
def test_realloc_secure
assert_raises(SecurityError) do
Thread.new do
$SAFE = 4
DL.realloc(0, 4)
end.join
end
end
def test_malloc
str = "abc"
ptr_id = DL.malloc(4)
ptr = CPtr.new(ptr_id, 4)
assert_equal ptr_id, ptr.to_i
cfunc = CFunc.new(@libc['strcpy'], TYPE_VOIDP, 'strcpy')
x = cfunc.call([ptr_id,str].pack("l!p").unpack("l!*"))
assert_equal("abc\0", ptr[0,4])
DL.free ptr_id
end
def test_malloc_security
assert_raises(SecurityError) do
Thread.new do
$SAFE = 4
DL.malloc(4)
end.join
end
end
def test_call_int()
cfunc = CFunc.new(@libc['atoi'], TYPE_INT, 'atoi')
x = cfunc.call(["100"].pack("p").unpack("l!*"))