Thanks Ivar. When I get further along, I'd love for you to take a look at 
what I did. Right now, I'm blindly wrapping the functions as practice, but 
if you look in my code/tests, I can tell there are functions there that are 
either duplicative or don't make sense. And if my naive wrapping is leaking 
memory because the original function is leaking memory, I'd love to get 
that taken care of before adding to METADATA :)

On Monday, September 15, 2014 11:37:15 AM UTC-4, Ivar Nesje wrote:
>
> That seems like a really tricky function to wrap. You need to do C style 
> memory handling in order for this to work, and C style memory handling 
> requires you to really look in the documentation (for the function) to see 
> how it works. Example code for how this function is used correctly from C 
> is almost mandatory.
>
> I found this example 
> <http://liboauth.sourceforge.net/tests_2oauthexample_8c-example.html>, 
> apparently from the OAuth site, where they demonstrate how to do a poor job 
> and leak memory. DON'T USE IT!!!
>
> I'll try to write a correct implemementation that uses oauth_free_array 
> <http://liboauth.sourceforge.net/oauth_8h.html#ada81dd39be59cadbc1bd77df78ffef52>(int*
>  
> c, char**arg) to clean up. 
>
> Ivar
>
>
> kl. 16:47:44 UTC+2 mandag 15. september 2014 skrev Randy Zwitch følgende:
>>
>> Continuing on my attempt to learn Julia ccall by wrapping liboauth...I 
>> have the following code that was mostly generated by Clang.jl:
>>
>>
>> https://github.com/randyzwitch/OAuth.jl/blob/master/src/OAuth.jl#L248-254
>>
>>
>> function 
>> oauth_split_url_parameters(url::String,argv::Ptr{Ptr{Ptr{Uint8}}})
>>     result = 
>> ccall((:oauth_split_url_parameters,LIBOAUTH),Cint,(Ptr{Uint8},Ptr{Ptr{Ptr{Uint8}}}),url,argv)
>>     if result == C_NULL
>>         error("oauth_split_url_parameters failed")
>>     end
>>     return result
>> end
>>
>> I'm pretty sure I want to re-write this code to remove the second 
>> argument, since the second argument is just allocating space for an array. 
>> I don't want to return the Cint for success/fail, but rather the array that 
>> splits the 'url' argument.
>>
>> function oauth_split_url_parameters(url::String)
>>     argv = *Ptr{Ptr{Ptr{Uint8}}}* #What Julia code actually goes here to 
>> make this work?
>>     result = 
>> ccall((:oauth_split_url_parameters,LIBOAUTH),Cint,(Ptr{Uint8},Ptr{Ptr{Ptr{Uint8}}}),url,argv)
>>     if result == C_NULL
>>         error("oauth_split_url_parameters failed")
>>     end
>>     return argv
>> end
>>
>> I've tried allocating an array() in place of Ptr{Ptr{Ptr{Uint8}}} , but 
>> that doesn't work. I think this is an array of pointers to string 
>> variables? How can I make this work?
>>
>> Thanks.
>>
>>
>>

Reply via email to