[Cuis-dev] I need some advice with FFI
Andres Valloud
ten at smallinteger.com
Tue Nov 9 09:13:31 PST 2021
You can't call that function via FFI because that function is documented
in POSIX / Single Unix Specification, and virtually every function in
POSIX / SUS is allowed to be declared as a macro. Of course, you can't
call a macro using an FFI. Moreover, the macro may have the same name
as the function, so there may be a function called localtime(), but if
you write something like
{
.
.
.
localtime(...);
.
.
.
}
in C, the C compiler will substitute the macro localtime() before it
ever calls the function localtime(). So, even if a function called
localtime() is there, you still should not call it via FFI.
This is just one example of how macros of all kinds (C preprocessor,
linker macros, etc) can interpose themselves. It could even be the
case, as I've seen in some Unix systems, that a function such as
memmove() does not even exist. Of course, compilation works because
there's a macro called memmove(). Obviously, the implementation of all
such macros is private and cannot be depended on.
The point is that the *only* correct way to call these things is by
writing C code, because the alternative is undefined behavior,
irreproducible bugs, and all sorts of maintenance headaches. So, I'd
just write a plugin.
Andres.
On 11/9/21 2:47 AM, Nicola Mingotti wrote:
>
> On 11/7/21 23:08, Andres Valloud via Cuis-dev wrote:
>> Are you trying to call localtime()? Like, this function?
>>
>> https://linux.die.net/man/3/localtime
>>
>> On 11/6/21 11:01 AM, Nicola Mingotti via Cuis-dev wrote:
>>> Hi guys,
>>>
>>> I was trying to develop my first FFI calls in Cuis today but
>>> I am stuck, i hope some of you can give me some guidance.
>>>
>>> In the attached package there are implemented 2 foreign functions
>>> TestClass (class) >> time # working
>>> TestClass (class) >> localtime # broken
>>>
>>> ---- interactions ----------
>>> TestClass time. " ok "
>>> TestClass localtime2: (TestClass time). " broken "
>>> -----------------------------
>>>
>>> The error i get is "can not use integer as pointer".
>>>
>>> Any ideas ?
>>>
>>> bye
>>> Nicola
>>>
>>>
>
>
> Hi Andres,
>
> yes, absolutely that function ;)
>
> The motivation spurs from my mail to this list of 3-Nov title
> "ATTENTION. maybe nasty bug ..... "
>
> I am going to update on that thread today or tomorrow, time permitting.
>
> bye
> Nicola
>
>
>
>
>
>
>
>
>
>
>
More information about the Cuis-dev
mailing list