[Cuis-dev] I need some advice with FFI
Nicola Mingotti
nmingotti at gmail.com
Tue Nov 9 09:27:50 PST 2021
Hi Andres,
Super valuable info, I had no idea of that !
I just supposed what i can call from C as a function I can call from FFI.
I see my supposition was wrong. Thank you ! you may have saved me
several hours
of hopeless attempts.
Nicola
On 11/9/21 18:13, Andres Valloud via Cuis-dev wrote:
> 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