diff options
author | Volker Lendecke <vl@samba.org> | 2009-05-19 23:31:55 +0200 |
---|---|---|
committer | Volker Lendecke <vl@samba.org> | 2009-05-19 23:35:16 +0200 |
commit | f9d00fb58e8e9fed24751ad26dbdbc394f30290e (patch) | |
tree | 4aa6e8abcae1d5e782d771f3be26dc201c2a9eeb /lib/tsocket | |
parent | cf9636ea99bb5063a8c7d771c1e29f684b4b753a (diff) | |
download | samba-f9d00fb58e8e9fed24751ad26dbdbc394f30290e.tar.gz samba-f9d00fb58e8e9fed24751ad26dbdbc394f30290e.tar.bz2 samba-f9d00fb58e8e9fed24751ad26dbdbc394f30290e.zip |
Simplify the logic of tsocket_bsd_pending
Remove two indentation levels by returning early on error.
Metze, please check!
Diffstat (limited to 'lib/tsocket')
-rw-r--r-- | lib/tsocket/tsocket_bsd.c | 50 |
1 files changed, 26 insertions, 24 deletions
diff --git a/lib/tsocket/tsocket_bsd.c b/lib/tsocket/tsocket_bsd.c index 0ec47f8466..054bb3de3a 100644 --- a/lib/tsocket/tsocket_bsd.c +++ b/lib/tsocket/tsocket_bsd.c @@ -149,40 +149,42 @@ static int tsocket_bsd_common_prepare_fd(int fd, bool high_fd) static ssize_t tsocket_bsd_pending(int fd) { - int ret; + int ret, error; int value = 0; + socklen_t len; ret = ioctl(fd, FIONREAD, &value); if (ret == -1) { return ret; } - if (ret == 0) { - if (value == 0) { - int error=0; - socklen_t len = sizeof(error); - /* - * if no data is available check if the socket - * is in error state. For dgram sockets - * it's the way to return ICMP error messages - * of connected sockets to the caller. - */ - ret = getsockopt(fd, SOL_SOCKET, SO_ERROR, - &error, &len); - if (ret == -1) { - return ret; - } - if (error != 0) { - errno = error; - return -1; - } - } + if (ret != 0) { + /* this should not be reached */ + errno = EIO; + return -1; + } + + if (value != 0) { return value; } - /* this should not be reached */ - errno = EIO; - return -1; + error = 0; + len = sizeof(error); + + /* + * if no data is available check if the socket is in error state. For + * dgram sockets it's the way to return ICMP error messages of + * connected sockets to the caller. + */ + ret = getsockopt(fd, SOL_SOCKET, SO_ERROR, &error, &len); + if (ret == -1) { + return ret; + } + if (error != 0) { + errno = error; + return -1; + } + return 0; } static const struct tsocket_address_ops tsocket_address_bsd_ops; |