diff options
| author | Anoop C S <anoopcs@redhat.com> | 2017-07-13 02:36:20 +0200 |
|---|---|---|
| committer | Michael Adam <obnox@samba.org> | 2017-07-27 14:16:09 +0200 |
| commit | 070d84d733369a4de8f2b840a1f92065e2f3473d (patch) | |
| tree | 21b908edda47cdcfff0a87476ff0bf5598350430 | |
| parent | b585bf0a24d19e03f5a9fdc51b6b1bc90e60ddd6 (diff) | |
| download | socket_wrapper-070d84d733369a4de8f2b840a1f92065e2f3473d.tar.gz socket_wrapper-070d84d733369a4de8f2b840a1f92065e2f3473d.tar.xz socket_wrapper-070d84d733369a4de8f2b840a1f92065e2f3473d.zip | |
swrap: Add common exit point to swrap_getsockopt
In preparation of thread safety.
Signed-off-by: Anoop C S <anoopcs@redhat.com>
Reviewed-by: Andreas Schneider <asn@samba.org>
Reviewed-by: Michael Adam <obnox@samba.org>
| -rw-r--r-- | src/socket_wrapper.c | 41 |
1 files changed, 27 insertions, 14 deletions
diff --git a/src/socket_wrapper.c b/src/socket_wrapper.c index d4855b1..21e2fc1 100644 --- a/src/socket_wrapper.c +++ b/src/socket_wrapper.c @@ -3842,6 +3842,7 @@ static int swrap_getsockopt(int s, int level, int optname, void *optval, socklen_t *optlen) { struct socket_info *si = find_socket_info(s); + int ret; if (!si) { return libc_getsockopt(s, @@ -3858,12 +3859,14 @@ static int swrap_getsockopt(int s, int level, int optname, if (optval == NULL || optlen == NULL || *optlen < (socklen_t)sizeof(int)) { errno = EINVAL; - return -1; + ret = -1; + goto done; } *optlen = sizeof(int); *(int *)optval = si->family; - return 0; + ret = 0; + goto done; #endif /* SO_DOMAIN */ #ifdef SO_PROTOCOL @@ -3871,29 +3874,34 @@ static int swrap_getsockopt(int s, int level, int optname, if (optval == NULL || optlen == NULL || *optlen < (socklen_t)sizeof(int)) { errno = EINVAL; - return -1; + ret = -1; + goto done; } *optlen = sizeof(int); *(int *)optval = si->protocol; - return 0; + ret = 0; + goto done; #endif /* SO_PROTOCOL */ case SO_TYPE: if (optval == NULL || optlen == NULL || *optlen < (socklen_t)sizeof(int)) { errno = EINVAL; - return -1; + ret = -1; + goto done; } *optlen = sizeof(int); *(int *)optval = si->type; - return 0; + ret = 0; + goto done; default: - return libc_getsockopt(s, - level, - optname, - optval, - optlen); + ret = libc_getsockopt(s, + level, + optname, + optval, + optlen); + goto done; } } else if (level == IPPROTO_TCP) { switch (optname) { @@ -3907,13 +3915,15 @@ static int swrap_getsockopt(int s, int level, int optname, if (optval == NULL || optlen == NULL || *optlen < (socklen_t)sizeof(int)) { errno = EINVAL; - return -1; + ret = -1; + goto done; } *optlen = sizeof(int); *(int *)optval = si->tcp_nodelay; - return 0; + ret = 0; + goto done; #endif /* TCP_NODELAY */ default: break; @@ -3921,7 +3931,10 @@ static int swrap_getsockopt(int s, int level, int optname, } errno = ENOPROTOOPT; - return -1; + ret = -1; + +done: + return ret; } #ifdef HAVE_ACCEPT_PSOCKLEN_T |
