[PATCH 03/23] sigaction.2: Apply minor tweaks to Peter's patch

Alejandro Colomar
2021-08-08T08:41:48Z

- 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>
---
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),
--
2.32.0