diff --git a/util/osdep.c b/util/osdep.c index 7504c156e8..11531e8f59 100644 --- a/util/osdep.c +++ b/util/osdep.c @@ -296,10 +296,10 @@ static int qemu_open_cloexec(const char *name, int flags, mode_t mode) /* * Opens a file with FD_CLOEXEC set */ -int qemu_open_old(const char *name, int flags, ...) +static int +qemu_open_internal(const char *name, int flags, mode_t mode) { int ret; - int mode = 0; #ifndef _WIN32 const char *fdset_id_str; @@ -324,16 +324,26 @@ int qemu_open_old(const char *name, int flags, ...) } #endif - if (flags & O_CREAT) { - va_list ap; - - va_start(ap, flags); - mode = va_arg(ap, int); - va_end(ap); - } - ret = qemu_open_cloexec(name, flags, mode); + return ret; +} + + +int qemu_open_old(const char *name, int flags, ...) +{ + va_list ap; + mode_t mode = 0; + int ret; + + va_start(ap, flags); + if (flags & O_CREAT) { + mode = va_arg(ap, int); + } + va_end(ap); + + ret = qemu_open_internal(name, flags, mode); + #ifdef O_DIRECT if (ret == -1 && errno == EINVAL && (flags & O_DIRECT)) { error_report("file system may not support O_DIRECT");