[Gambas-user] Get last errno from external function call

vuott at tutanota.com vuott at tutanota.com
Thu Oct 6 16:35:51 CEST 2022

I did a test...
Looking at the sources of the libgpiod functions, I see that in many of them a value is assigned to the "errno" symbol.
For example in the "int gpiod_line_bulk_add_line ()" function:
    errno = EINVAL;


Not having installed the "libgpiod" library on my system, I tried to create "ex novo" a similar function, and to test it with Gambas:

' void simula_errore()
Private Extern simula_errore() In "/tmp/liberror"

Public Sub Main()

  Dim p As Pointer

' Go to create the external shared library, that will simulate the "EINVAL" error:

' Calls then  External function:

' Catch the error:
  p = System.GetExternSymbol("/tmp/liberror", "errno")
  Print Int@(p)


Private Procedure Creaso()

File.Save("/tmp/liberror.c", "#include <errno.h>\n\n" &
                               "void simula_errore() {\n" &
                               "   errno = EINVAL;\n}")

Shell "gcc -o /tmp/liberror.so /tmp/liberror.c -shared" Wait


Maybe I'm thinking wrong, in any case it works for me.

6 ott 2022, 10:43 da benoit.minisini at gambas-basic.org:

> Le 06/10/2022 à 01:30, vuott--- via User a écrit :
>> Out of curiosity, maybe you could also try "System.GetExternSymbol ()":
>>     Dim p As Pointer
>>     p = System.GetExternSymbol("libgpiod", "errno")
>>     Print Int@(p)
> Don't do that, as 'errno' is not a global variable anymore according to the glibc manual ('man errno' says it's a C macro).
> Regards,
> -- 
> Benoît Minisini.
> ----[ http://gambaswiki.org/wiki/doc/netiquette ]----

-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.gambas-basic.org/pipermail/user/attachments/20221006/d4269e55/attachment.htm>

More information about the User mailing list