Re: [PATCH v4 2/6] util: refactor qemu_open_old to split off variadic args handling
Daniel P. Berrangé writes: > On Tue, Aug 25, 2020 at 04:56:40PM +0200, Markus Armbruster wrote: >> Daniel P. Berrangé writes: >> >> > This simple refactoring prepares for future patches. The variadic args >> > handling is split from the main bulk of the open logic. The duplicated >> > calls to open() are removed in favour of updating the "flags" variable >> > to have O_CLOEXEC. >> > >> > Signed-off-by: Daniel P. Berrangé >> > --- >> > util/osdep.c | 40 +++- >> > 1 file changed, 27 insertions(+), 13 deletions(-) >> > >> > diff --git a/util/osdep.c b/util/osdep.c >> > index 9df1b6adec..9ff92551e7 100644 >> > --- a/util/osdep.c >> > +++ b/util/osdep.c >> > @@ -22,6 +22,7 @@ >> > * THE SOFTWARE. >> > */ >> > #include "qemu/osdep.h" >> > +#include "qapi/error.h" >> > >> > /* Needed early for CONFIG_BSD etc. */ >> > >> > @@ -282,10 +283,10 @@ int qemu_lock_fd_test(int fd, int64_t start, int64_t >> > len, bool exclusive) >> > /* >> > * 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; >> > @@ -323,22 +324,35 @@ 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); >> > -} >> > - >> > #ifdef O_CLOEXEC >> > -ret = open(name, flags | O_CLOEXEC, mode); >> > -#else >> > +flags |= O_CLOEXEC; >> > +#endif /* O_CLOEXEC */ >> > + >> > ret = open(name, flags, mode); >> > + >> > +#ifndef O_CLOEXEC >> > if (ret >= 0) { >> > qemu_set_cloexec(ret); >> > } >> > -#endif >> > +#endif /* ! O_CLOEXEC */ >> >> I dislike this part, to be honest. I find >> >> #ifdef O_CLOEXEC >> flags |= O_CLOEXEC; >> #endif /* O_CLOEXEC */ >> >> ret = open(name, flags, mode); >> >> #ifndef O_CLOEXEC >> if (ret >= 0) { >> qemu_set_cloexec(ret); >> } >> #endif /* ! O_CLOEXEC */ >> >> harder to read than >> >> #ifdef O_CLOEXEC >> ret = open(name, flags | O_CLOEXEC, mode); >> #else >> ret = open(name, flags, mode); >> if (ret >= 0) { >> qemu_set_cloexec(ret); >> } >> #endif > > We're re-using 'flags' variable again in a later patch and want to > have O_CLOEXEC present in it then too. I guess you mean PATCH 5. I'll get back the the issue there.
Re: [PATCH v4 2/6] util: refactor qemu_open_old to split off variadic args handling
On Tue, Aug 25, 2020 at 04:56:40PM +0200, Markus Armbruster wrote: > Daniel P. Berrangé writes: > > > This simple refactoring prepares for future patches. The variadic args > > handling is split from the main bulk of the open logic. The duplicated > > calls to open() are removed in favour of updating the "flags" variable > > to have O_CLOEXEC. > > > > Signed-off-by: Daniel P. Berrangé > > --- > > util/osdep.c | 40 +++- > > 1 file changed, 27 insertions(+), 13 deletions(-) > > > > diff --git a/util/osdep.c b/util/osdep.c > > index 9df1b6adec..9ff92551e7 100644 > > --- a/util/osdep.c > > +++ b/util/osdep.c > > @@ -22,6 +22,7 @@ > > * THE SOFTWARE. > > */ > > #include "qemu/osdep.h" > > +#include "qapi/error.h" > > > > /* Needed early for CONFIG_BSD etc. */ > > > > @@ -282,10 +283,10 @@ int qemu_lock_fd_test(int fd, int64_t start, int64_t > > len, bool exclusive) > > /* > > * 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; > > @@ -323,22 +324,35 @@ 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); > > -} > > - > > #ifdef O_CLOEXEC > > -ret = open(name, flags | O_CLOEXEC, mode); > > -#else > > +flags |= O_CLOEXEC; > > +#endif /* O_CLOEXEC */ > > + > > ret = open(name, flags, mode); > > + > > +#ifndef O_CLOEXEC > > if (ret >= 0) { > > qemu_set_cloexec(ret); > > } > > -#endif > > +#endif /* ! O_CLOEXEC */ > > I dislike this part, to be honest. I find > > #ifdef O_CLOEXEC > flags |= O_CLOEXEC; > #endif /* O_CLOEXEC */ > > ret = open(name, flags, mode); > > #ifndef O_CLOEXEC > if (ret >= 0) { > qemu_set_cloexec(ret); > } > #endif /* ! O_CLOEXEC */ > > harder to read than > > #ifdef O_CLOEXEC > ret = open(name, flags | O_CLOEXEC, mode); > #else > ret = open(name, flags, mode); > if (ret >= 0) { > qemu_set_cloexec(ret); > } > #endif We're re-using 'flags' variable again in a later patch and want to have O_CLOEXEC present in it then too. Regards, Daniel -- |: https://berrange.com -o-https://www.flickr.com/photos/dberrange :| |: https://libvirt.org -o-https://fstop138.berrange.com :| |: https://entangle-photo.org-o-https://www.instagram.com/dberrange :|
Re: [PATCH v4 2/6] util: refactor qemu_open_old to split off variadic args handling
Daniel P. Berrangé writes: > This simple refactoring prepares for future patches. The variadic args > handling is split from the main bulk of the open logic. The duplicated > calls to open() are removed in favour of updating the "flags" variable > to have O_CLOEXEC. > > Signed-off-by: Daniel P. Berrangé > --- > util/osdep.c | 40 +++- > 1 file changed, 27 insertions(+), 13 deletions(-) > > diff --git a/util/osdep.c b/util/osdep.c > index 9df1b6adec..9ff92551e7 100644 > --- a/util/osdep.c > +++ b/util/osdep.c > @@ -22,6 +22,7 @@ > * THE SOFTWARE. > */ > #include "qemu/osdep.h" > +#include "qapi/error.h" > > /* Needed early for CONFIG_BSD etc. */ > > @@ -282,10 +283,10 @@ int qemu_lock_fd_test(int fd, int64_t start, int64_t > len, bool exclusive) > /* > * 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; > @@ -323,22 +324,35 @@ 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); > -} > - > #ifdef O_CLOEXEC > -ret = open(name, flags | O_CLOEXEC, mode); > -#else > +flags |= O_CLOEXEC; > +#endif /* O_CLOEXEC */ > + > ret = open(name, flags, mode); > + > +#ifndef O_CLOEXEC > if (ret >= 0) { > qemu_set_cloexec(ret); > } > -#endif > +#endif /* ! O_CLOEXEC */ I dislike this part, to be honest. I find #ifdef O_CLOEXEC flags |= O_CLOEXEC; #endif /* O_CLOEXEC */ ret = open(name, flags, mode); #ifndef O_CLOEXEC if (ret >= 0) { qemu_set_cloexec(ret); } #endif /* ! O_CLOEXEC */ harder to read than #ifdef O_CLOEXEC ret = open(name, flags | O_CLOEXEC, mode); #else ret = open(name, flags, mode); if (ret >= 0) { qemu_set_cloexec(ret); } #endif > + > +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)) {
[PATCH v4 2/6] util: refactor qemu_open_old to split off variadic args handling
This simple refactoring prepares for future patches. The variadic args handling is split from the main bulk of the open logic. The duplicated calls to open() are removed in favour of updating the "flags" variable to have O_CLOEXEC. Signed-off-by: Daniel P. Berrangé --- util/osdep.c | 40 +++- 1 file changed, 27 insertions(+), 13 deletions(-) diff --git a/util/osdep.c b/util/osdep.c index 9df1b6adec..9ff92551e7 100644 --- a/util/osdep.c +++ b/util/osdep.c @@ -22,6 +22,7 @@ * THE SOFTWARE. */ #include "qemu/osdep.h" +#include "qapi/error.h" /* Needed early for CONFIG_BSD etc. */ @@ -282,10 +283,10 @@ int qemu_lock_fd_test(int fd, int64_t start, int64_t len, bool exclusive) /* * 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; @@ -323,22 +324,35 @@ 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); -} - #ifdef O_CLOEXEC -ret = open(name, flags | O_CLOEXEC, mode); -#else +flags |= O_CLOEXEC; +#endif /* O_CLOEXEC */ + ret = open(name, flags, mode); + +#ifndef O_CLOEXEC if (ret >= 0) { qemu_set_cloexec(ret); } -#endif +#endif /* ! O_CLOEXEC */ + +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)) { -- 2.26.2