From 163848ab3b4a1680ba30e167ea19e977c08556f5 Mon Sep 17 00:00:00 2001 From: Max Kellermann Date: Tue, 29 Oct 2013 13:02:53 +0100 Subject: fd_util: avoid unnecessary fcntl() calls --- src/system/fd_util.c | 14 ++++++++------ 1 file changed, 8 insertions(+), 6 deletions(-) (limited to 'src') diff --git a/src/system/fd_util.c b/src/system/fd_util.c index 17976a5ee..b4a7032e6 100644 --- a/src/system/fd_util.c +++ b/src/system/fd_util.c @@ -58,15 +58,17 @@ static int fd_mask_flags(int fd, int and_mask, int xor_mask) { - int ret; - assert(fd >= 0); - ret = fcntl(fd, F_GETFD, 0); - if (ret < 0) - return ret; + const int old_flags = fcntl(fd, F_GETFD, 0); + if (old_flags < 0) + return old_flags; + + const int new_flags = (old_flags & and_mask) ^ xor_mask; + if (new_flags == old_flags) + return old_flags; - return fcntl(fd, F_SETFD, (ret & and_mask) ^ xor_mask); + return fcntl(fd, F_SETFD, new_flags); } #endif /* !WIN32 */ -- cgit v1.2.3