]> git.proxmox.com Git - mirror_zfs.git/commitdiff
Use sigaction(2) instead of sigignore(3) for portability
authorTomohiro Kusumi <kusumi.tomohiro@gmail.com>
Tue, 9 Apr 2019 16:58:28 +0000 (01:58 +0900)
committerBrian Behlendorf <behlendorf1@llnl.gov>
Wed, 1 May 2019 03:46:15 +0000 (20:46 -0700)
sigignore(3) isn't portable.
This code fails to compile on platforms without sigignore(3).
Use sigaction(2).

--
zfs_main.c: In function 'zfs_do_diff':
zfs_main.c:7178:9: error: implicit declaration of function 'sigignore' [-Werror=implicit-function-declaration]
  (void) sigignore(SIGPIPE);
         ^~~~~~~~~

Reviewed-by: Brian Behlendorf <behlendorf1@llnl.gov>
Signed-off-by: Tomohiro Kusumi <kusumi.tomohiro@gmail.com>
Closes #8593

cmd/zfs/zfs_main.c

index 90893a8571242252aae6919a4f6c7d99c47f3a87..2d97988a028b904ce439399928086b8713490d88 100644 (file)
@@ -7195,6 +7195,7 @@ zfs_do_diff(int argc, char **argv)
        char *atp, *copy;
        int err = 0;
        int c;
+       struct sigaction sa;
 
        while ((c = getopt(argc, argv, "FHt")) != -1) {
                switch (c) {
@@ -7252,10 +7253,19 @@ zfs_do_diff(int argc, char **argv)
         * Ignore SIGPIPE so that the library can give us
         * information on any failure
         */
-       (void) sigignore(SIGPIPE);
+       if (sigemptyset(&sa.sa_mask) == -1) {
+               err = errno;
+               goto out;
+       }
+       sa.sa_flags = 0;
+       sa.sa_handler = SIG_IGN;
+       if (sigaction(SIGPIPE, &sa, NULL) == -1) {
+               err = errno;
+               goto out;
+       }
 
        err = zfs_show_diffs(zhp, STDOUT_FILENO, fromsnap, tosnap, flags);
-
+out:
        zfs_close(zhp);
 
        return (err != 0);