client: close dup'ed descriptor if fdopen() fails
[fio.git] / client.c
index 60f7c6ab82767cab31cf30443e07affa15c32b51..2a86ea971bf7b871e08d469943eb18fce0a8c1d7 100644 (file)
--- a/client.c
+++ b/client.c
@@ -123,11 +123,19 @@ static int read_ini_data(int fd, void *data, size_t size)
        char *p = data;
        int ret = 0;
        FILE *fp;
+       int dupfd;
 
-       fp = fdopen(dup(fd), "r");
-       if (!fp)
+       dupfd = dup(fd);
+       if (dupfd < 0)
                return errno;
 
+       fp = fdopen(dupfd, "r");
+       if (!fp) {
+               ret = errno;
+               close(dupfd);
+               goto out;
+       }
+
        while (1) {
                ssize_t len;
                char buf[OPT_LEN_MAX+1], *sub;
@@ -158,6 +166,7 @@ static int read_ini_data(int fd, void *data, size_t size)
        }
 
        fclose(fp);
+out:
        return ret;
 }