chiark / gitweb /
noip.c (recvfrom, recvmsg): Don't swallow the underlying system error.
[preload-hacks] / noip.c
diff --git a/noip.c b/noip.c
index 2d5e93227182175385e9364a94c2bb55e0a84b83..0063ee977a2e94a3fe54b5ebe036e486c0f0b933 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);