[Glass] Passing a enum element to a C library

Smalltalk at JGFoster.net Smalltalk at JGFoster.net
Wed Jul 1 17:22:49 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

_______________________________________________
Glass mailing list
Glass at lists.gemtalksystems.com
https://lists.gemtalksystems.com/mailman/listinfo/glass


More information about the Glass mailing list