managed to get something working on my machine, so it might help you. this 
is the code:
a = Array(Ptr{Ptr{Uint8}},1)
str = 
"oauth_token=2a71d1c73d2771b00f13ca0acb9836a10477d3c56&oauth_token_secret=a1b5c00c1f3e23fb314a0aa22e990266"
result = 
ccall((:oauth_split_url_parameters,"liboauth"),Cint,(Ptr{Uint8},Ptr{Ptr{Ptr{Uint8}}}),convert(Ptr{Uint8},str),a)
aa = unsafe_load(a[1])
bb = unsafe_load(a[1],2)
bytestring(aa)
bytestring(bb)


cheers

On Monday, September 15, 2014 6:45:41 PM UTC+3, Randy Zwitch wrote:
>
> 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