Dropped, because reposted in a later series from Alex. On 7/28/21 10:20 PM, Alejandro Colomar wrote: > - Move example program to a new EXAMPLES section > - Invert logic in the handler to have the failure in the conditional path, > and the success in out of any conditionals. > - Use NULL, EXIT_SUCCESS, and EXIT_FAILURE instead of magic numbers > - Separate declarations from code > - Put function return type on its own line > - Put function opening brace on its line > > Signed-off-by: Alejandro Colomar <alx.manpages@xxxxxxxxx> > --- > man2/sigaction.2 | 76 +++++++++++++++++++++++++++--------------------- > 1 file changed, 43 insertions(+), 33 deletions(-) > > diff --git a/man2/sigaction.2 b/man2/sigaction.2 > index 4bf6f095e..18404dde1 100644 > --- a/man2/sigaction.2 > +++ b/man2/sigaction.2 > @@ -936,39 +936,6 @@ because they were introduced before Linux 5.11. > However, in general, programs may assume that these flags are supported, > since they have all been supported since Linux 2.6, > which was released in the year 2003. > -.PP > -The following example program exits with status 0 if > -.B SA_EXPOSE_TAGBITS > -is determined to be supported, and 1 otherwise. > -.PP > -.EX > -#include <signal.h> > -#include <stdio.h> > -#include <unistd.h> > - > -void handler(int signo, siginfo_t *info, void *context) { > - struct sigaction oldact; > - if (sigaction(SIGSEGV, 0, &oldact) == 0 && > - !(oldact.sa_flags & SA_UNSUPPORTED) && > - (oldact.sa_flags & SA_EXPOSE_TAGBITS)) { > - _exit(0); > - } else { > - _exit(1); > - } > -} > - > -int main(void) { > - struct sigaction act = {0}; > - act.sa_flags = SA_SIGINFO | SA_UNSUPPORTED | SA_EXPOSE_TAGBITS; > - act.sa_sigaction = handler; > - if (sigaction(SIGSEGV, &act, 0) != 0) { > - perror("sigaction"); > - return 1; > - } > - > - raise(SIGSEGV); > -} > -.EE > .SH RETURN VALUE > .BR sigaction () > returns 0 on success; on error, \-1 is returned, and > @@ -1174,6 +1141,49 @@ This bug was fixed in kernel 2.6.14. > .SH EXAMPLES > See > .BR mprotect (2). > +.PP > +The following example program exits with status > +.B EXIT_SUCCESS > +if > +.B SA_EXPOSE_TAGBITS > +is determined to be supported, and > +.B EXIT_FAILURE > +otherwise. > +.PP > +.EX > +#include <signal.h> > +#include <stdlib.h> > +#include <stdio.h> > +#include <unistd.h> > + > +void > +handler(int signo, siginfo_t *info, void *context) > +{ > + struct sigaction oldact; > + > + if (sigaction(SIGSEGV, NULL, &oldact) != 0 || > + (oldact.sa_flags & SA_UNSUPPORTED) || > + !(oldact.sa_flags & SA_EXPOSE_TAGBITS)) { > + _exit(EXIT_FAILURE); > + } > + _exit(EXIT_SUCCESS); > +} > + > +int > +main(void) > +{ > + struct sigaction act = {0}; > + > + act.sa_flags = SA_SIGINFO | SA_UNSUPPORTED | SA_EXPOSE_TAGBITS; > + act.sa_sigaction = &handler; > + if (sigaction(SIGSEGV, &act, NULL) != 0) { > + perror("sigaction"); > + exit(EXIT_FAILURE); > + } > + > + raise(SIGSEGV); > +} > +.EE > .SH SEE ALSO > .BR kill (1), > .BR kill (2), > -- Michael Kerrisk Linux man-pages maintainer; http://www.kernel.org/doc/man-pages/ Linux/UNIX System Programming Training: http://man7.org/training/