[fpc-pascal]Signal handling with libc.pp

Jeff Pohlmeyer yetanothergeek at yahoo.com
Sat Jan 24 09:19:40 CET 2004

The libc unit declares the sigaction() function in "sigactionh.inc" as:

function sigaction( __sig:longint; Const act: _sigaction;
                    Var oldact: _sigaction):longint;cdecl;external clib name 'sigaction';

According to the libc man page: "Either act or oldact can be a null pointer."
 - But this is not possible, because call by var parameters have to match exactly.

So I think the function should be overloaded:

function sigaction( __sig:longint; act: P_sigaction;
                    oldact: P_sigaction):longint;cdecl;external clib name 'sigaction';

libc also says that the sa_handler field of a sigaction record can be
a function pointer, or one of the constants SIG_DFL or SIG_IGN.

"signumh.inc" defines these constants as:

       SIG_DFL  = (0);
       SIG_IGN  = (1);

But this does not work, because of pascal's strong type checking:


% Error: Incompatible types:
    got "LongInt"
    expected "<procedure variable type of procedure(Longint);CDecl>"

Maybe this would be better?

         SIG_DFL = nil;

    function SIG_IGN:__sighandler_t;

Do you Yahoo!?
Yahoo! SiteBuilder - Free web site building tool. Try it!

More information about the fpc-pascal mailing list