From 386f07d1fc02fb4316039994b855c4feb9b091ce Mon Sep 17 00:00:00 2001 From: =?utf8?q?Marc-Andr=C3=A9=20Lureau?= Date: Sat, 22 Oct 2016 12:52:56 +0300 Subject: [PATCH] char: fold qemu_chr_set_handlers in qemu_chr_fe_set_handlers MIME-Version: 1.0 Content-Type: text/plain; charset=utf8 Content-Transfer-Encoding: 8bit qemu_chr_add_handlers*() have been removed in previous change, so the common qemu_chr_set_handlers() is no longer needed. Signed-off-by: Marc-André Lureau Message-Id: <20161022095318.17775-17-marcandre.lureau@redhat.com> Signed-off-by: Paolo Bonzini --- include/sysemu/char.h | 3 +- qemu-char.c | 78 ++++++++++++++++++++++----------------------------- 2 files changed, 35 insertions(+), 46 deletions(-) diff --git a/include/sysemu/char.h b/include/sysemu/char.h index 816c536789..f2b3999735 100644 --- a/include/sysemu/char.h +++ b/include/sysemu/char.h @@ -460,7 +460,8 @@ CharDriverState *qemu_chr_fe_get_driver(CharBackend *be); * @opaque: an opaque pointer for the callbacks * @context: a main loop context or NULL for the default * - * Set the front end char handlers. + * Set the front end char handlers. The front end takes the focus if + * any of the handler is non-NULL. */ void qemu_chr_fe_set_handlers(CharBackend *b, IOCanReadHandler *fd_can_read, diff --git a/qemu-char.c b/qemu-char.c index dce86ca6ab..115909fd48 100644 --- a/qemu-char.c +++ b/qemu-char.c @@ -467,46 +467,6 @@ void qemu_chr_fe_printf(CharBackend *be, const char *fmt, ...) } static void remove_fd_in_watch(CharDriverState *chr); - -static void -qemu_chr_set_handlers(CharBackend *be, - IOCanReadHandler *fd_can_read, - IOReadHandler *fd_read, - IOEventHandler *fd_event, - void *opaque, - GMainContext *context) -{ - CharDriverState *s = be->chr; - int fe_open; - - if (!opaque && !fd_can_read && !fd_read && !fd_event) { - fe_open = 0; - remove_fd_in_watch(s); - } else { - fe_open = 1; - } - s->chr_can_read = fd_can_read; - s->chr_read = fd_read; - s->chr_event = fd_event; - s->handler_opaque = opaque; - if (s->chr_update_read_handler) { - s->chr_update_read_handler(s, context, be->tag); - } - - if (!s->explicit_fe_open) { - qemu_chr_fe_set_open(be, fe_open); - } - - /* We're connecting to an already opened device, so let's make sure we - also get the open event */ - if (fe_open) { - qemu_chr_fe_take_focus(be); - if (s->be_open) { - qemu_chr_be_generic_open(s); - } - } -} - static int mux_chr_new_handler_tag(CharDriverState *chr, Error **errp); static void mux_chr_set_handlers(CharDriverState *chr, GMainContext *context); static void mux_set_focus(MuxDriver *d, int focus); @@ -931,15 +891,43 @@ void qemu_chr_fe_set_handlers(CharBackend *b, void *opaque, GMainContext *context) { - if (!b->chr) { + CharDriverState *s; + int fe_open; + + s = b->chr; + if (!s) { return; } - qemu_chr_set_handlers(b, fd_can_read, fd_read, - fd_event, opaque, context); + if (!opaque && !fd_can_read && !fd_read && !fd_event) { + fe_open = 0; + remove_fd_in_watch(s); + } else { + fe_open = 1; + } + s->chr_can_read = fd_can_read; + s->chr_read = fd_read; + s->chr_event = fd_event; + s->handler_opaque = opaque; + if (s->chr_update_read_handler) { + s->chr_update_read_handler(s, context, b->tag); + } + + if (!s->explicit_fe_open) { + qemu_chr_fe_set_open(b, fe_open); + } - if (b->chr->is_mux) { - mux_chr_set_handlers(b->chr, context); + if (fe_open) { + qemu_chr_fe_take_focus(b); + /* We're connecting to an already opened device, so let's make sure we + also get the open event */ + if (s->be_open) { + qemu_chr_be_generic_open(s); + } + } + + if (s->is_mux) { + mux_chr_set_handlers(s, context); } } -- 2.11.4.GIT