From 1ef95b99f6553b246729e7bb5bdc19038043db74 Mon Sep 17 00:00:00 2001
From: Alexander Turenko <alexander.turenko@tarantool.org>
Date: Fri, 10 Apr 2020 04:35:27 +0300
Subject: [PATCH] popen: remove redundant fd check before perform IO

The function already checks flags to find out whether the file
descriptor should be available for reading / writing. When it is so, the
corresponding fd is great or equal to zero.

The further commits will add missed diagnostics for IO functions and it
is hard to write a meaningful error message for a situation that is not
possible. Moreover, we would obligated to document the error as one of
possible failures in a function contract (while it can't occur).

Part of #4031

Acked-by: Cyrill Gorcunov <gorcunov@gmail.com>
---
 src/lib/core/popen.c | 12 +++---------
 1 file changed, 3 insertions(+), 9 deletions(-)

diff --git a/src/lib/core/popen.c b/src/lib/core/popen.c
index 514aaf0d79..90c3cabc88 100644
--- a/src/lib/core/popen.c
+++ b/src/lib/core/popen.c
@@ -193,8 +193,7 @@ handle_free(struct popen_handle *handle)
  * Test if the handle can run io operation.
  */
 static inline bool
-popen_may_io(struct popen_handle *handle, unsigned int idx,
-	     unsigned int io_flags)
+popen_may_io(struct popen_handle *handle, unsigned int io_flags)
 {
 	if (!handle) {
 		errno = ESRCH;
@@ -206,11 +205,6 @@ popen_may_io(struct popen_handle *handle, unsigned int idx,
 		return false;
 	}
 
-	if (handle->ios[idx].fd < 0) {
-		errno = EPIPE;
-		return false;
-	}
-
 	return true;
 }
 
@@ -293,7 +287,7 @@ popen_write_timeout(struct popen_handle *handle, const void *buf,
 	    return -1;
 	}
 
-	if (!popen_may_io(handle, STDIN_FILENO, flags))
+	if (!popen_may_io(handle, flags))
 		return -1;
 
 	if (count > (size_t)SSIZE_MAX) {
@@ -328,7 +322,7 @@ popen_read_timeout(struct popen_handle *handle, void *buf,
 	    return -1;
 	}
 
-	if (!popen_may_io(handle, idx, flags))
+	if (!popen_may_io(handle, flags))
 		return -1;
 
 	if (count > (size_t)SSIZE_MAX) {
-- 
GitLab