[Cuis-dev] I need some advice with FFI

Nicola Mingotti nmingotti at gmail.com
Sun Nov 14 02:53:43 PST 2021


Hi Andres,

if you have the time to write the documentation about this it would be 
fantastic.
I will find the time for the editing, but after my wedding (22 Nov) !

For the location where to store it, it depends. I would say the Cuis Book is
too much introductory level for this subject. It could be stored in the new
Web site Mariano is developing for Cuis, just an idea. This would give 
it visibility
and "findability" via web (which is very important).


bye
Nicola







On 11/13/21 20:57, Andres Valloud via Cuis-dev wrote:
> By the way, this should be added to some Cuis book somewhere or 
> equivalently visible place.  What's a good place for this kind of 
> information?
>
> If somebody gave me a hand with the editing and management, I could 
> expand on these notes some more.
>
> On 11/9/21 9:49 AM, Andres Valloud via Cuis-dev wrote:
>> Happy to help! :)
>>
>> On 11/9/21 9:27 AM, Nicola Mingotti wrote:
>>>
>>> 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