On 6 November 2012 11:23, Max Leske <[email protected]> wrote: > Thanks Igor. > > I meant a pointer to an array, sorry. Here's the function prototype: > > int run_command(const char *command, char *argv[]); > > I could then simply pass this to execve like so: > > status = execve(command, argv, envp); > so, like i said, prepare a buffer which will hold strings, i.e.
buffer := NativeBoost allocate: (numArgs * 4). arg1ptr := NativeBoost allocate: arg1 size+1. NativeBoost memcopy: arg1 to: arg1ptr size: arg1 size. arg1ptr nbUInt8At: arg1 size put: 0. "terminating null char" buffer nbUInt32At: 0 put: (arg1ptr value). something like that. (and then , of course free memory after you no longer need it :) > > > On 06.11.2012, at 15:12, Igor Stasenko <[email protected]> wrote: > >> well, you have to decompose it to >> fn(arg1, arg2, arg3 ... ) >> >> because NB does not supports vararg functions. >> >> But if function takes a pointer to array, then you can just use >> external memory buffer and fill it with >> anything you want. >> What exactly function you wanna use? >> >> On 6 November 2012 11:06, Max Leske <[email protected]> wrote: >>> Hi >>> >>> Working with NativeBoost I'm trying to figure out if there is a way I can >>> pass an array of arguments to a function like so: >>> >>> MyExample run: 'echo' args: { 'foo' }. >>> >>> >>> nbRun: str args: args >>> <primitive: #primitiveNativeCall module: #NativeBoostPlugin error: >>> errorCode > >>> ^ self nbCall: #( int run_command (String str, Array args) ) >>> module: 'librunner.dylib' >>> >>> The intention is of course to be able to pass arguments to execve() (for >>> example). >>> I guess I could simply parse a string on the C-side but I'd rather not. >>> >>> Any suggestions? >>> >>> Cheers, >>> Max >> >> >> >> -- >> Best regards, >> Igor Stasenko. >> > > -- Best regards, Igor Stasenko.
