diff mbox series

[alsa-utils,01/14] axfer: minor code arrangement for container module in a point of nonblocking flag

Message ID 20210311052146.404003-2-o-takashi@sakamocchi.jp
State New
Headers show
Series axfer: reduce test time | expand

Commit Message

Takashi Sakamoto March 11, 2021, 5:21 a.m. UTC
In internal container module, any file descriptor is expected as
non-blocking mode. Current implementation distinguish the case of
standard input and output from the case to open actual file since
O_NONBLOCK is used for the latter case. However, in both cases,
fcntl(2) is available to set non-blocking mode to the file descriptor.

This commit arranges to use fcntl(2) for both cases.

Signed-off-by: Takashi Sakamoto <o-takashi@sakamocchi.jp>
---
 axfer/container.c | 19 ++++++++++---------
 1 file changed, 10 insertions(+), 9 deletions(-)
diff mbox series

Patch

diff --git a/axfer/container.c b/axfer/container.c
index 566acd0..8733ff7 100644
--- a/axfer/container.c
+++ b/axfer/container.c
@@ -176,16 +176,17 @@  int container_parser_init(struct container_context *cntr,
 				"should be referred instead.\n");
 			return -EIO;
 		}
-		err = set_nonblock_flag(cntr->fd);
-		if (err < 0)
-			return err;
 		cntr->stdio = true;
 	} else {
-		cntr->fd = open(path, O_RDONLY | O_NONBLOCK);
+		cntr->fd = open(path, O_RDONLY);
 		if (cntr->fd < 0)
 			return -errno;
 	}
 
+	err = set_nonblock_flag(cntr->fd);
+	if (err < 0)
+		return err;
+
 	// 4 bytes are enough to detect supported containers.
 	err = container_recursive_read(cntr, cntr->magic, sizeof(cntr->magic));
 	if (err < 0)
@@ -260,17 +261,17 @@  int container_builder_init(struct container_context *cntr,
 				"should be referred instead.\n");
 			return -EIO;
 		}
-		err = set_nonblock_flag(cntr->fd);
-		if (err < 0)
-			return err;
 		cntr->stdio = true;
 	} else {
-		cntr->fd = open(path, O_RDWR | O_NONBLOCK | O_CREAT | O_TRUNC,
-				0644);
+		cntr->fd = open(path, O_RDWR | O_CREAT | O_TRUNC, 0644);
 		if (cntr->fd < 0)
 			return -errno;
 	}
 
+	err = set_nonblock_flag(cntr->fd);
+	if (err < 0)
+		return err;
+
 	builder = builders[format];
 
 	// Allocate private data for the builder.