Bug 52931

Summary: sigaction(2) feature test macros don't apply to siginfo_t
Product: Documentation Reporter: Zsbán Ambrus (ambrus)
Component: man-pagesAssignee: documentation_man-pages (documentation_man-pages)
Status: RESOLVED CODE_FIX    
Severity: low CC: mtk.manpages
Priority: P1    
Hardware: All   
OS: Linux   
Kernel Version: Subsystem:
Regression: No Bisected commit-id:

Description Zsbán Ambrus 2013-01-22 22:16:28 UTC
The sigaction(2) manpage correctly tells that defining the feature test macro _POSIX_SOURCE is enough to have the headers declare the function sigaction.  However, defining that feature test does not allow you to use all capabilities of sigaction, namely it does not make the headers declare the type siginfo_t. 

The type siginfo_t is used only to declare a three-argument signal handler function that you install with sigaction using the SA_SIGINFO flag.  This feature is documented in the sigaction(2) manpage, just like it should be.  However, to actually use this feature of sigaction, it's not enough to define _POSIX_SOURCE.  To export this type, I believe it is sufficient to define _POSIX_C_SOURCE to 201112L.  As of current standing, people will try to use siginfo_t and get a compilation error because the glibc headers don't export it with the feature test macro the manpage asks for.  This bug is difficult to understand, so the feature test requirements should be mentioned on the manpage.

I don't provide a patch because I don't know either the exact feature test macro requirements, nor exactly what symbols other than siginfo_t are affected.

I am using man-pages version 3.45 vanilla, and glibc 2.11.3 debian.

Thank you, man-pages maintainers, for all the hard work you put in keeping the pages up to date.
Comment 1 Michael Kerrisk 2013-01-22 22:40:02 UTC
Zsbán,

Thanks for the report. You're correct that the man page lacks this detail. It looks like _POSIX_C_SOURCE >= 199309L suffices, and I've added that detail to the page.