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.

Reply via email to