diff options
author | Marc-André Lureau <marcandre.lureau@redhat.com> | 2016-10-22 12:52:56 +0300 |
---|---|---|
committer | Paolo Bonzini <pbonzini@redhat.com> | 2016-10-24 15:27:21 +0200 |
commit | 386f07d1fc02fb4316039994b855c4feb9b091ce (patch) | |
tree | b75ed9ec7099a31a1236de8ef31ee229c2f90141 | |
parent | 5345fdb4467816c44f6752b3a1f4e73aa25919f9 (diff) |
char: fold qemu_chr_set_handlers in qemu_chr_fe_set_handlers
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 <marcandre.lureau@redhat.com>
Message-Id: <20161022095318.17775-17-marcandre.lureau@redhat.com>
Signed-off-by: Paolo Bonzini <pbonzini@redhat.com>
-rw-r--r-- | include/sysemu/char.h | 3 | ||||
-rw-r--r-- | 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); } } |