noip.c (encode_inet_addr): Exit early rather than branch round.
[preload-hacks] / noip.c
diff --git a/noip.c b/noip.c
index 37ec33c..e3da246 100644 (file)
--- a/noip.c
+++ b/noip.c
@@ -720,13 +720,12 @@ static int encode_inet_addr(struct sockaddr_un *sun,
             present_sockaddr(sa, 0, buf, sizeof(buf)));
     rc = unix_socket_status(sun, 0);
     if (rc == STALE) unlink(sun->sun_path);
-    if (rc != USED && !(f&ENCF_FRESH)) {
-      wildcard_address(sa->sa_family, &addr.sa);
-      port_to_sockaddr(&addr.sa, port);
-      snprintf(sun->sun_path, sizeof(sun->sun_path), "%s/%s", sockdir,
-              present_sockaddr(&addr.sa, 0, buf, sizeof(buf)));
-      if (unix_socket_status(sun, 0) == STALE) unlink(sun->sun_path);
-    }
+    if (rc == USED || (f&ENCF_FRESH)) goto found;
+    wildcard_address(sa->sa_family, &addr.sa);
+    port_to_sockaddr(&addr.sa, port);
+    snprintf(sun->sun_path, sizeof(sun->sun_path), "%s/%s", sockdir,
+            present_sockaddr(&addr.sa, 0, buf, sizeof(buf)));
+    if (unix_socket_status(sun, 0) == STALE) unlink(sun->sun_path);
   } else {
     copy_sockaddr(&addr.sa, sa);
     for (i = 0; i < 10; i++) {
@@ -742,8 +741,8 @@ static int encode_inet_addr(struct sockaddr_un *sun,
     errno = EADDRINUSE;
     D( fprintf(stderr, " -- can't resolve\n"); )
     return (-1);
-  found:;
   }
+found:
   D( fprintf(stderr, " -> `%s'\n", sun->sun_path); )
   return (0);
 }
@@ -1690,40 +1689,36 @@ int accept(int sk, struct sockaddr *sa, socklen_t *len)
 
 int getsockname(int sk, struct sockaddr *sa, socklen_t *len)
 {
+  char sabuf[1024];
+  socklen_t mylen = sizeof(sabuf);
   int rc;
   Dpid;
 
   D( fprintf(stderr, "noip(%d): GETSOCKNAME sk=%d", pid, sk); )
-  PRESERVING_ERRNO({
-    char sabuf[1024];
-    socklen_t mylen = sizeof(sabuf);
-    rc = real_getsockname(sk, SA(sabuf), &mylen);
-    if (rc >= 0) {
-      D( fprintf(stderr, " -> converting...\n"); )
-      return_fake_name(SA(sabuf), mylen, sa, len);
-      D( fprintf(stderr, "noip(%d): ... GETSOCKNAME", pid); )
-    }
-  });
+  rc = real_getsockname(sk, SA(sabuf), &mylen);
+  if (rc >= 0) {
+    D( fprintf(stderr, " -> converting...\n"); )
+    return_fake_name(SA(sabuf), mylen, sa, len);
+    D( fprintf(stderr, "noip(%d): ... GETSOCKNAME", pid); )
+  }
   D( dump_addrresult(rc, sa, *len); )
   return (rc);
 }
 
 int getpeername(int sk, struct sockaddr *sa, socklen_t *len)
 {
+  char sabuf[1024];
+  socklen_t mylen = sizeof(sabuf);
   int rc;
   Dpid;
 
   D( fprintf(stderr, "noip(%d): GETPEERNAME sk=%d", pid, sk); )
-  PRESERVING_ERRNO({
-    char sabuf[1024];
-    socklen_t mylen = sizeof(sabuf);
-    rc = real_getpeername(sk, SA(sabuf), &mylen);
-    if (rc >= 0) {
-      D( fprintf(stderr, " -> converting...\n"); )
-      return_fake_name(SA(sabuf), mylen, sa, len);
-      D( fprintf(stderr, "noip(%d): ... GETPEERNAME", pid); )
-    }
-  });
+  rc = real_getpeername(sk, SA(sabuf), &mylen);
+  if (rc >= 0) {
+    D( fprintf(stderr, " -> converting...\n"); )
+    return_fake_name(SA(sabuf), mylen, sa, len);
+    D( fprintf(stderr, "noip(%d): ... GETPEERNAME", pid); )
+  }
   D( dump_addrresult(rc, sa, *len); )
   return (0);
 }
@@ -1732,6 +1727,7 @@ int getsockopt(int sk, int lev, int opt, void *p, socklen_t *len)
 {
   switch (lev) {
     case IPPROTO_IP:
+    case IPPROTO_IPV6:
     case IPPROTO_TCP:
     case IPPROTO_UDP:
       if (*len > 0)
@@ -1745,6 +1741,7 @@ int setsockopt(int sk, int lev, int opt, const void *p, socklen_t len)
 {
   switch (lev) {
     case IPPROTO_IP:
+    case IPPROTO_IPV6:
     case IPPROTO_TCP:
     case IPPROTO_UDP:
       return (0);