[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