]> git.alsa-project.org Git - alsa-utils.git/commitdiff
axfer: minor code arrangement for container module in a point of nonblocking flag
authorTakashi Sakamoto <o-takashi@sakamocchi.jp>
Thu, 11 Mar 2021 05:21:32 +0000 (14:21 +0900)
committerJaroslav Kysela <perex@perex.cz>
Thu, 11 Mar 2021 08:28:12 +0000 (09:28 +0100)
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>
Signed-off-by: Jaroslav Kysela <perex@perex.cz>
axfer/container.c

index 566acd0586360d3c4ac6cd1403ebf329b523cb40..8733ff76439d356412c99893b4ddeaa92455b3b0 100644 (file)
@@ -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.