[Glass] Passing a enum element to a C library

bruno buzzi brassesco smalltalk at adinet.com.uy
Wed Jul 1 16:41:28 PDT 2020


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



More information about the Glass mailing list