[Date Prev][Date Next]
Re: sigset prototype not included on Linux platforms (ITS#603)
On Fri, 23 Jun 2000 Kurt@OpenLDAP.org wrote:
> Date: Fri, 23 Jun 2000 22:41:16 GMT
> From: Kurt@OpenLDAP.org
> To: openldap-its@OpenLDAP.org
> Subject: Re: sigset prototype not included on Linux platforms (ITS#603)
> At 04:54 PM 6/23/00 GMT, email@example.com wrote:
> >Full_Name: Gek Low
> >Version: 1.2
> >OS: Linux
> >URL: ftp://ftp.openldap.org/incoming/
> >Submission from: (NULL) (18.104.22.168)
> >I am trying to build OpenLDAP on the IA64 (Linux OS) and I found out that it is
> >including the prototype for sigset(), so the compiler is assuming it returns
> >int, which
> >is bad on a 64-bit system, because ints are only 32 bits. The prototype must be
> >to generate correct code.
> >The sigset() prototype on Linux systems is contained within the __USE_UNIX98
> >ifdef in
> >signal.h, so it is not included at all. However, there is a sigset function in
> >so everything links. The OpenLDAP configure script correctly/incorrectly says
> >exist on Linux, but the missing prototype will not work for 64-bit Linux.
> I suggest using:
> env ac_cv_func_sigset=no ./configure
> to workaround this problem. I do not suggest defining __USE_UNIX98.
> This macro is internal to the implementation of the C library and,
> as such, applications should not muck with it.
I beleive that using the sigaction() function whenever available is
preferred to either signal() or sigset(). The semantices of signal()
is not very well standardized and sigset() is less supported.
On linux with glibc2 signal() has BSD semantics, and sigset() is
supposed to have BSD semantics for signal() except for automaticaly
restarting system calls. Linux with libc5 has sysV signal() and no
sigset() but does have sigaction().
With sigaction() you can control the semantics to mach your needs.