On Wed, Feb 09, 2005 at 04:00:57PM +0900, E S wrote: > > 1) Wrapping functions that take variable-length arguments (varargs). Is > > there are standard way to do this? The best I've found is libffi, > > which lets you construct the stack frames you need to do this, but it > > seems like this would be a problem someone would have solved a while > > ago. > > Wrapping how? Should these be callable from Ruby? Ruby can define a > method to take variable arguments either as a RArray or as a C array, > so you'll pick one, construct a wrapper function based your selected > way and have that function extract the values and feed them to your > 'actual' function. It's not quite that easy. Ruby lets you define a method that takes a variable number of arguments, but then how do you actually pass them to a varargs function? Think about printf(), for example. How can I call printf() using the contents of an arbitrary length array (without resorting to using vprintf())? You can't just do: char* format; char* args[]; ... printf(format, args); Because that'll just pass the address of the array to the function. You can't do: printf(format, args[0], args[1], args[2], ...); Unless you build some ungodly switch statement on the number of arguments. Surely I'm not the first person to run into this? -Jon