From mboxrd@z Thu Jan 1 00:00:00 1970 Received: from eggs.gnu.org ([2001:4830:134:3::10]:35336) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1ZlY5H-0003gC-GH for qemu-devel@nongnu.org; Mon, 12 Oct 2015 04:03:52 -0400 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1ZlY5E-0006s0-1D for qemu-devel@nongnu.org; Mon, 12 Oct 2015 04:03:51 -0400 Received: from mx1.redhat.com ([209.132.183.28]:35175) by eggs.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1ZlY5D-0006rw-S6 for qemu-devel@nongnu.org; Mon, 12 Oct 2015 04:03:47 -0400 Received: from int-mx09.intmail.prod.int.phx2.redhat.com (int-mx09.intmail.prod.int.phx2.redhat.com [10.5.11.22]) by mx1.redhat.com (Postfix) with ESMTPS id 7BE3BC0C1B10 for ; Mon, 12 Oct 2015 08:03:47 +0000 (UTC) From: Paolo Bonzini Date: Mon, 12 Oct 2015 10:03:15 +0200 Message-Id: <1444637004-20195-13-git-send-email-pbonzini@redhat.com> In-Reply-To: <1444637004-20195-1-git-send-email-pbonzini@redhat.com> References: <1444637004-20195-1-git-send-email-pbonzini@redhat.com> Subject: [Qemu-devel] [PATCH 12/21] qemu-char: convert mux backend to data-driven creation List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , To: qemu-devel@nongnu.org Cc: armbru@redhat.com Signed-off-by: Paolo Bonzini --- qemu-char.c | 25 ++++++++++++++----------- 1 file changed, 14 insertions(+), 11 deletions(-) diff --git a/qemu-char.c b/qemu-char.c index 3e48a47..8e3a79a 100644 --- a/qemu-char.c +++ b/qemu-char.c @@ -682,11 +682,20 @@ static GSource *mux_chr_add_watch(CharDriverState *s, GIOCondition cond) return d->drv->chr_add_watch(d->drv, cond); } -static CharDriverState *qemu_chr_open_mux(CharDriverState *drv) +static CharDriverState *qemu_chr_open_mux(const char *id, + ChardevBackend *backend, + ChardevReturn *ret, Error **errp) { - CharDriverState *chr; + ChardevMux *mux = backend->mux; + CharDriverState *chr, *drv; MuxDriver *d; + drv = qemu_chr_find(mux->chardev); + if (drv == NULL) { + error_setg(errp, "mux: base chardev %s not found", mux->chardev); + return NULL; + } + chr = qemu_chr_alloc(); d = g_new0(MuxDriver, 1); @@ -4257,7 +4266,7 @@ ChardevReturn *qmp_chardev_add(const char *id, ChardevBackend *backend, Error **errp) { ChardevReturn *ret = g_new0(ChardevReturn, 1); - CharDriverState *base, *chr = NULL; + CharDriverState *chr = NULL; Error *local_err = NULL; GSList *i; CharDriver *cd; @@ -4309,13 +4318,7 @@ ChardevReturn *qmp_chardev_add(const char *id, ChardevBackend *backend, abort(); break; case CHARDEV_BACKEND_KIND_MUX: - base = qemu_chr_find(backend->mux->chardev); - if (base == NULL) { - error_setg(&local_err, "mux: base chardev %s not found", - backend->mux->chardev); - break; - } - chr = qemu_chr_open_mux(base); + abort(); break; case CHARDEV_BACKEND_KIND_MSMOUSE: chr = qemu_chr_open_msmouse(); @@ -4441,7 +4444,7 @@ static void register_types(void) register_char_driver("pipe", CHARDEV_BACKEND_KIND_PIPE, qemu_chr_parse_pipe, qemu_chr_open_pipe); register_char_driver("mux", CHARDEV_BACKEND_KIND_MUX, qemu_chr_parse_mux, - NULL); + qemu_chr_open_mux); /* Bug-compatibility: */ register_char_driver("memory", CHARDEV_BACKEND_KIND_MEMORY, qemu_chr_parse_ringbuf, NULL); -- 2.5.0