ruby-changes:15670
From: nobu <ko1@a...>
Date: Sun, 2 May 2010 17:25:32 +0900 (JST)
Subject: [ruby-changes:15670] Ruby:r27588 (trunk): * ext/dl/cfunc.c (rb_dlcfunc_call): ignore signedness.
nobu 2010-05-02 17:25:15 +0900 (Sun, 02 May 2010) New Revision: 27588 http://svn.ruby-lang.org/cgi-bin/viewvc.cgi?view=rev&revision=27588 Log: * ext/dl/cfunc.c (rb_dlcfunc_call): ignore signedness. Modified files: trunk/ChangeLog trunk/ext/dl/cfunc.c Index: ChangeLog =================================================================== --- ChangeLog (revision 27587) +++ ChangeLog (revision 27588) @@ -1,3 +1,7 @@ +Sun May 2 17:25:05 2010 Nobuyoshi Nakada <nobu@r...> + + * ext/dl/cfunc.c (rb_dlcfunc_call): ignore signedness. + Sun May 2 12:04:30 2010 wanabe <s.wanabe@g...> * iseq.c (iseq_load): allow filepath to be nil. Index: ext/dl/cfunc.c =================================================================== --- ext/dl/cfunc.c (revision 27587) +++ ext/dl/cfunc.c (revision 27588) @@ -6,6 +6,8 @@ #include <errno.h> #include "dl.h" +VALUE rb_big2ulong_pack(VALUE x); + VALUE rb_cDLCFunc; static ID id_last_error; @@ -348,11 +350,21 @@ } for( i = 0; i < RARRAY_LEN(ary); i++ ){ + VALUE arg; if( i >= DLSTACK_SIZE ){ rb_raise(rb_eDLError, "too many arguments (stack overflow)"); } - rb_check_safe_obj(RARRAY_PTR(ary)[i]); - stack[i] = NUM2LONG(RARRAY_PTR(ary)[i]); + arg = rb_to_int(RARRAY_PTR(ary)[i]); + rb_check_safe_obj(arg); + if (FIXNUM_P(arg)) { + stack[i] = (DLSTACK_TYPE)FIX2LONG(arg); + } + else if (RB_TYPE_P(arg, T_BIGNUM)) { + stack[i] = (DLSTACK_TYPE)rb_big2ulong_pack(arg); + } + else { + Check_Type(arg, T_FIXNUM); + } } /* calltype == CFUNC_CDECL */ -- ML: ruby-changes@q... Info: http://www.atdot.net/~ko1/quickml/