From: Mark Wooding Date: Wed, 6 Jun 2018 18:47:43 +0000 (+0100) Subject: noip.c (get{sock,peer}name): Don't clobber `errno'. X-Git-Tag: 1.2.0~26 X-Git-Url: https://git.distorted.org.uk/~mdw/preload-hacks/commitdiff_plain/0415c10ef65d4e244acd6fca4610639ca2d9c2f3?hp=f47a2b17e1b05f79b12dda93230328281a1a3a79 noip.c (get{sock,peer}name): Don't clobber `errno'. We might return a failure here, if the underlying syscall fails, and should propagate the `errno' it returned. Also hoist out some block-scope variables now that their enclosing block has vanished. --- diff --git a/noip.c b/noip.c index bbd0ebd..4edae54 100644 --- a/noip.c +++ b/noip.c @@ -1690,40 +1690,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); }