Subject: [ruby-ffi] Re: calling internal ruby functions |
From: mixtli |
Date: 4/29/11 9:01 AM |
To: ruby-ffi |
Ok, I tried out ffi-inliner to get the FD_SETSIZE macro, and that
seems to work, so I imagine the other shouldn't be too hard.
module Net
module SNMP
module Inline
extend Inliner
inline do |builder|
builder.include "sys/select.h"
builder.c %q{
int fd_setsize() {
return(FD_SETSIZE);
}
}
end
end
end
end
fdset = FFI::MemoryPointer.new(:pointer,
Net::SNMP::Inline.fd_setsize / 8)
On Apr 29, 7:58 am, mixtli <ronmcclai...@gmail.com> wrote:
<themastermi...@gmail.com> wrote:Thank you. That worked perfectly. Fortunately, I don't have to deal much with those macros because I'm using the net-snmp snmp_sess_select_info() function to prepare the descriptors. The only thing I have to do is allocate a pointer to an fd_set, which I've hardcoded as a FFI::MemoryPointer.new(:pointer, 128). This works on my system, but I'm sure it's a bad idea. I was considering using RubyInline to write simple wrappers around the macros. I'll give that a shot tonight, unless you have a better suggestion. On Apr 29, 5:17 am, Aman GuptaYou can use ffi_lib(FFI::CURRENT_PROCESS).
How are you emulating the FD_* macros via FFI?
Aman
<ronmcclai...@gmail.com> wrote:On Friday, April 29, 2011, mixtlihttp://github.com/mixtli/net-snmp), so I'd like it to automagically work in the user's environment.I wanted to call rb_thread_select to do some async polling, so I made a quick wrapper. It actually works fine, but I have to specify the full path to my libruby.dylib in the call to ffi_lib. If I just put "libruby", it segfaults. Is there some standard mechanism for forcing ffi to use the libs from the rvm environment? This is for a public gem (
Also, is there a standard set of wrappers for ruby internals similar to the set for libc (ffi-libc)?
And finally, since I'm here.. Anyone else having problems requiring ffi-libc on snow leopard? A bunch of the functions don't seem to be defined on my system (clearenv, stdin, etc).