]> git.ipfire.org Git - thirdparty/man-pages.git/commitdiff
sigaction.2: Minor tweaks to Peter's patch
authorAlejandro Colomar <alx.manpages@gmail.com>
Sun, 8 Aug 2021 08:41:13 +0000 (10:41 +0200)
committerMichael Kerrisk <mtk.manpages@gmail.com>
Mon, 9 Aug 2021 00:32:37 +0000 (02:32 +0200)
- 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>
man2/sigaction.2

index 4bf6f095e7c6437163cf17d8a68ed40002a7f7e8..18404dde1fb2d156591dd2e03287e25895164df4 100644 (file)
@@ -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),