On Mon, Oct 13, 2025 at 5:41 PM Vladimir Sementsov-Ogievskiy <[email protected]> wrote: > > We are going to share new chardev_init_logfd() with further > alternative initialization interface. Let qemu_char_open() be > a wrapper for .open(), and its artifacts (handle be_opened if > was not set to false by backend, and filename). > > Signed-off-by: Vladimir Sementsov-Ogievskiy <[email protected]>
Reviewed-by: Marc-André Lureau <[email protected]> > --- > chardev/char.c | 49 +++++++++++++++++++++++++++++++------------------ > 1 file changed, 31 insertions(+), 18 deletions(-) > > diff --git a/chardev/char.c b/chardev/char.c > index a43b7e5481..d5a2533e8e 100644 > --- a/chardev/char.c > +++ b/chardev/char.c > @@ -250,22 +250,6 @@ static void qemu_char_open(Chardev *chr, ChardevBackend > *backend, > bool *be_opened, Error **errp) > { > ChardevClass *cc = CHARDEV_GET_CLASS(chr); > - /* Any ChardevCommon member would work */ maybe keep that comment? > - ChardevCommon *common = backend ? backend->u.null.data : NULL; > - > - if (common && common->logfile) { > - int flags = O_WRONLY; > - if (common->has_logappend && > - common->logappend) { > - flags |= O_APPEND; > - } else { > - flags |= O_TRUNC; > - } > - chr->logfd = qemu_create(common->logfile, flags, 0666, errp); > - if (chr->logfd < 0) { > - return; > - } > - } > > if (cc->open) { > cc->open(chr, backend, be_opened, errp); > @@ -1000,6 +984,28 @@ void qemu_chr_set_feature(Chardev *chr, > return set_bit(feature, chr->features); > } > > +static bool chardev_init_logfd(Chardev *chr, ChardevBackend *backend, > + Error **errp) > +{ > + ChardevCommon *common = backend ? backend->u.null.data : NULL; > + > + if (common && common->logfile) { > + int flags = O_WRONLY; > + if (common->has_logappend && > + common->logappend) { > + flags |= O_APPEND; > + } else { > + flags |= O_TRUNC; > + } > + chr->logfd = qemu_create(common->logfile, flags, 0666, errp); > + if (chr->logfd < 0) { > + return false; > + } > + } > + > + return true; > +} > + > static Chardev *chardev_new(const char *id, const char *typename, > ChardevBackend *backend, > GMainContext *gcontext, > @@ -1020,11 +1026,14 @@ static Chardev *chardev_new(const char *id, const > char *typename, > chr->label = g_strdup(id); > chr->gcontext = gcontext; > > + if (!chardev_init_logfd(chr, backend, errp)) { > + goto fail; > + } > + > qemu_char_open(chr, backend, &be_opened, &local_err); > if (local_err) { > error_propagate(errp, local_err); > - object_unref(obj); > - return NULL; > + goto fail; > } > > if (!chr->filename) { > @@ -1035,6 +1044,10 @@ static Chardev *chardev_new(const char *id, const char > *typename, > } > > return chr; > + > +fail: > + object_unref(obj); > + return NULL; > } > > Chardev *qemu_chardev_new(const char *id, const char *typename, > -- > 2.48.1 > > -- Marc-André Lureau
