fix musl compatibility
[project/librpc-uclibc.git] / rcmd.c
diff --git a/rcmd.c b/rcmd.c
index 7712f87..df20973 100644 (file)
--- a/rcmd.c
+++ b/rcmd.c
@@ -62,9 +62,10 @@ static char sccsid[] = "@(#)rcmd.c   8.3 (Berkeley) 3/26/94";
 #define __UCLIBC_HIDE_DEPRECATED__
 #include <features.h>
 #include <sys/param.h>
-#include <sys/poll.h>
+#include <poll.h>
 #include <sys/socket.h>
 #include <sys/stat.h>
+#include <sys/types.h>
 
 #include <netinet/in.h>
 #include <arpa/inet.h>
@@ -86,6 +87,11 @@ static char sccsid[] = "@(#)rcmd.c   8.3 (Berkeley) 3/26/94";
 #endif
 #include <sys/uio.h>
 
+#ifndef _PATH_HEQUIV
+#define _PATH_HEQUIV "/etc/hosts.equiv"
+#endif
+
+int rresvport(int *alport);
 
 /* some forward declarations */
 static int __ivaliduser2(FILE *hostf, u_int32_t raddr,
@@ -106,7 +112,7 @@ int rcmd(char **ahost, u_short rport, const char *locuser, const char *remuser,
        struct hostent *hp;
        struct sockaddr_in sin, from;
        struct pollfd pfd[2];
-       int32_t oldmask;
+       sigset_t sig, osig;
        pid_t pid;
        int s, lport, timo;
        char c;
@@ -145,7 +151,9 @@ int rcmd(char **ahost, u_short rport, const char *locuser, const char *remuser,
        pfd[1].events = POLLIN;
 
         *ahost = hp->h_name;
-        oldmask = sigblock(sigmask(SIGURG)); /* __sigblock */
+       sigemptyset(&sig);
+       sigaddset(&sig, SIGURG);
+       sigprocmask(SIG_BLOCK, &sig, &osig);
        for (timo = 1, lport = IPPORT_RESERVED - 1;;) {
                s = rresvport(&lport);
                if (s < 0) {
@@ -154,7 +162,7 @@ int rcmd(char **ahost, u_short rport, const char *locuser, const char *remuser,
                                          "rcmd: socket: All ports in use\n");
                        else
                            (void)fprintf(stderr, "rcmd: socket: %m\n");
-                       sigsetmask(oldmask); /* sigsetmask */
+                       sigprocmask(SIG_SETMASK, &osig, NULL);
                        return -1;
                }
                fcntl(s, F_SETOWN, pid);
@@ -189,7 +197,7 @@ int rcmd(char **ahost, u_short rport, const char *locuser, const char *remuser,
                        continue;
                }
                (void)fprintf(stderr, "%s: %m\n", hp->h_name);
-               sigsetmask(oldmask); /* __sigsetmask */
+               sigprocmask(SIG_SETMASK, &osig, NULL);
                return -1;
        }
        lport--;
@@ -256,14 +264,14 @@ int rcmd(char **ahost, u_short rport, const char *locuser, const char *remuser,
                }
                goto bad2;
        }
-       sigsetmask(oldmask);
+       sigprocmask(SIG_SETMASK, &osig, NULL);
        return s;
 bad2:
        if (lport)
                (void)close(*fd2p);
 bad:
        (void)close(s);
-       sigsetmask(oldmask);
+       sigprocmask(SIG_SETMASK, &osig, NULL);
        return -1;
 }