noip.c (recvfrom, recvmsg): Don't swallow the underlying system error.
authorMark Wooding <mdw@distorted.org.uk>
Sat, 9 Jun 2018 14:43:20 +0000 (15:43 +0100)
committerMark Wooding <mdw@distorted.org.uk>
Sat, 9 Jun 2018 14:58:23 +0000 (15:58 +0100)
Move the call to `real_recvfoo' outside of `PRESERVING_ERRNO'.

noip.c

diff --git a/noip.c b/noip.c
index 2d5e932..0063ee9 100644 (file)
--- a/noip.c
+++ b/noip.c
@@ -1812,14 +1812,14 @@ ssize_t recvfrom(int sk, void *buf, size_t len, int flags,
     D( fprintf(stderr, " -> null addr; pass through"); )
     n = real_recvfrom(sk, buf, len, flags, 0, 0);
   } else {
-    PRESERVING_ERRNO({
-      n = real_recvfrom(sk, buf, len, flags, SA(sabuf), &mylen);
-      if (n >= 0) {
-       D( fprintf(stderr, " -> converting...\n"); )
+    n = real_recvfrom(sk, buf, len, flags, SA(sabuf), &mylen);
+    if (n >= 0) {
+      D( fprintf(stderr, " -> converting...\n"); )
+      PRESERVING_ERRNO({
        return_fake_peer(sk, SA(sabuf), mylen, from, fromlen);
-       D( fprintf(stderr, "noip(%d): ... RECVFROM", pid); )
-      }
-    });
+      });
+      D( fprintf(stderr, "noip(%d): ... RECVFROM", pid); )
+    }
   }
   D( dump_addrresult(n, from, fromlen ? *fromlen : 0); )
   return (n);
@@ -1874,18 +1874,18 @@ ssize_t recvmsg(int sk, struct msghdr *msg, int flags)
     D( fprintf(stderr, " -> null addr; pass through"); )
     return (real_recvmsg(sk, msg, flags));
   } else {
-    PRESERVING_ERRNO({
-      msg->msg_name = sabuf;
-      msg->msg_namelen = sizeof(sabuf);
-      n = real_recvmsg(sk, msg, flags);
-      if (n >= 0) {
-       D( fprintf(stderr, " -> converting...\n"); )
+    msg->msg_name = sabuf;
+    msg->msg_namelen = sizeof(sabuf);
+    n = real_recvmsg(sk, msg, flags);
+    if (n >= 0) {
+      D( fprintf(stderr, " -> converting...\n"); )
+      PRESERVING_ERRNO({
        return_fake_peer(sk, SA(sabuf), msg->msg_namelen, sa, &len);
-       D( fprintf(stderr, "noip(%d): ... RECVMSG", pid); )
-      }
-      msg->msg_name = sa;
-      msg->msg_namelen = len;
-    });
+      });
+    }
+    D( fprintf(stderr, "noip(%d): ... RECVMSG", pid); )
+    msg->msg_name = sa;
+    msg->msg_namelen = len;
   }
   D( dump_addrresult(n, sa, len); )
   return (n);