mirror of https://github.com/mkerrisk/man-pages
sigaction.2: Minor tweaks to Peter's patch
- Move example program to a new EXAMPLES section - Invert logic in the handler to have the failure in the conditional path, and the success 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 Cc: Peter Collingbourne <pcc@google.com> Signed-off-by: Alejandro Colomar <alx.manpages@gmail.com> Signed-off-by: Michael Kerrisk <mtk.manpages@gmail.com>
This commit is contained in:
parent
7dd4af5158
commit
4e7bd2d06b
|
@ -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),
|
||||
|
|
Loading…
Reference in New Issue