marcandre.lur...@redhat.com writes: > From: Marc-André Lureau <marcandre.lur...@redhat.com> > > QGA calls qemu_open_old() in various places. Calling qemu_open() instead > isn't a great alternative, as it has special "/dev/fdset" handling and > depends on QEMU internal monitor data structures. > > Instead, provide a simple helper for QGA needs, with Error* support. The > following patches will make use of it. > > Signed-off-by: Marc-André Lureau <marcandre.lur...@redhat.com> > --- > qga/cutils.c | 37 +++++++++++++++++++++++++++++++++++++ > qga/cutils.h | 8 ++++++++ > qga/meson.build | 1 + > 3 files changed, 46 insertions(+) > create mode 100644 qga/cutils.c > create mode 100644 qga/cutils.h > > diff --git a/qga/cutils.c b/qga/cutils.c > new file mode 100644 > index 0000000000..37dd877451 > --- /dev/null > +++ b/qga/cutils.c > @@ -0,0 +1,37 @@ > +/* > + * This work is licensed under the terms of the GNU GPL, version 2 or later. > + * See the COPYING file in the top-level directory. > + */ > +#include "cutils.h" > + > +#include "qapi/error.h" > + > +/** > + * qga_open_cloexec: > + * @name: the pathname to open > + * @flags: as in open() > + * @mode: as in open() > + * @errp: pointer to Error*, or NULL > + * > + * A wrapper for open() function which sets O_CLOEXEC. > + * > + * On error, -1 is returned and @errp is set. > + */ > +int qga_open_cloexec(const char *name, int flags, mode_t mode, Error **errp) > +{ > + int ret; > + > +#ifdef O_CLOEXEC > + ret = open(name, flags | O_CLOEXEC, mode); > +#else > + ret = open(name, flags, mode); > + if (ret >= 0) { > + qemu_set_cloexec(ret); > + } > +#endif > + if (ret == -1) { > + error_setg_errno(errp, errno, "Failed to open file '%s'", name); > + } > + > + return ret; > +} > diff --git a/qga/cutils.h b/qga/cutils.h > new file mode 100644 > index 0000000000..caccf79e45 > --- /dev/null > +++ b/qga/cutils.h > @@ -0,0 +1,8 @@ > +#ifndef CUTILS_H_ > +#define CUTILS_H_ > + > +#include "qemu/osdep.h" > + > +int qga_open_cloexec(const char *name, int flags, mode_t mode, Error **errp); > + > +#endif /* CUTILS_H_ */ > diff --git a/qga/meson.build b/qga/meson.build > index 6d9f39bb32..35fe2229e9 100644 > --- a/qga/meson.build > +++ b/qga/meson.build > @@ -65,6 +65,7 @@ qga_ss.add(files( > 'commands.c', > 'guest-agent-command-state.c', > 'main.c', > + 'cutils.c', > )) > qga_ss.add(when: 'CONFIG_POSIX', if_true: files( > 'channel-posix.c',
I'd drop the @errp parameter, see my review of the next patch. Recommendation, not demand, so Reviewed-by: Markus Armbruster <arm...@redhat.com>