[Glass] Passing a enum element to a C library

bruno buzzi brassesco smalltalk at adinet.com.uy
Thu Jul 2 04:03:53 PDT 2020


James,
Should be this reported as a bug ? Or at least a warning in 
documentation at chapter 18 (FFI) ?

regards,
bruno

On 1/7/2020 23:00, Smalltalk at JGFoster.net wrote:
> Bruno,
>
> I’m glad you got it working. And you properly interpreted my first suggestion (which didn’t work). I was going to investigate a bit more before making any further suggestions, but you anticipated where I was going. I’ll look further into the problem but I’m glad you have a work-around.
>
> James
>
>> On Jul 1, 2020, at 6:51 PM, bruno buzzi brassesco <smalltalk at adinet.com.uy> wrote:
>>
>> James,
>>
>> After replacing #'prt' with #'uint32' and initializing the wrapper the C call work as expected :)
>> Excellent !
>> regards,
>> bruno
>>
>> On 1/7/2020 21:27, Smalltalk at JGFoster.net wrote:
>>> It seems to me that the function should be interpreted as (#’ptr’ #’int’ #’ptr’) since an enum is simply an integer. Try passing it just 0 and see if that goes through.
>>>
>>> James
>>>
>>>> On Jul 1, 2020, at 4:41 PM, bruno buzzi brassesco via Glass <glass at lists.gemtalksystems.com> wrote:
>>>>
>>>> Hi,
>>>>
>>>> How to pass an enum element to a C library.
>>>> C function signature:
>>>> int ssh_options_set(ssh_session session, enum ssh_options_e type, const void *value)
>>>>
>>>> The enum is defined as:
>>>> enum ssh_options_e {
>>>>   SSH_OPTIONS_HOST,
>>>>   SSH_OPTIONS_PORT}
>>>>
>>>> An any C call is like:
>>>> ssh_options_set(my_ssh_session, SSH_OPTIONS_HOST, "localhost");
>>>>
>>>> GS generated wrapper:
>>>> ssh_options_set_: session _: type _: value
>>>>     "Interpreted as #int32 from #( #'ptr' #'ptr' #'ptr' )"
>>>>     ^Functionssh_options_set callWith: { session. type. value }
>>>>
>>>> In GS i tried something like:
>>>> myLibrary ssh_options_set_: session _: optionHost _: hostName
>>>> where
>>>> session: is created in another successful call to myLibrary
>>>>
>>>> optionHost:
>>>> cStructPointer := CByteArray gcMalloc: 8.
>>>> cStructPointer uint64At: 0 put: 0. "0 correspond to SSH_OPTIONS_HOST - maybe i'm wrong"
>>>>
>>>> hostName: CByteArray withAll: 'localhost'
>>>>
>>>> But it seems that something is wrong. The chapter 18 do something like this with another library.
>>>> So [optionHost] or [hostName] has a wrong value...
>>>> For now no successful call passing an enum element.
>>>>
>>>> Now back to fight with C :)
>>>>
>>>> regards,
>>>> bruno
>>>>
>>>> _______________________________________________
>>>> Glass mailing list
>>>> Glass at lists.gemtalksystems.com
>>>> https://lists.gemtalksystems.com/mailman/listinfo/glass


More information about the Glass mailing list