| >From c8cf564bc5c080540287ecd5bd944d85873755df Mon Sep 17 00:00:00 2001 |
| From: Amit Shah <amit.shah@redhat.com> |
| Date: Mon, 21 Mar 2011 20:32:58 +0100 |
| Subject: [PATCH 03/28] iohandlers: Add enable/disable_write_fd_handler() |
| functions |
| |
| These will be used to provide a cleaner API for the nonblocking case. |
| |
| Signed-off-by: Amit Shah <amit.shah@redhat.com> |
| |
| iohandler.c | 35 +++++++++++++++++++++++++++++++++++ |
| qemu-char.h | 3 +++ |
| 2 files changed, 38 insertions(+), 0 deletions(-) |
| |
| diff --git a/iohandler.c b/iohandler.c |
| index 2b82421..8e6628b 100644 |
| |
| |
| @@ -44,6 +44,41 @@ typedef struct IOHandlerRecord { |
| static QLIST_HEAD(, IOHandlerRecord) io_handlers = |
| QLIST_HEAD_INITIALIZER(io_handlers); |
| |
| +static IOHandlerRecord *find_iohandler(int fd) |
| +{ |
| + IOHandlerRecord *ioh; |
| + |
| + QLIST_FOREACH(ioh, &io_handlers, next) { |
| + if (ioh->fd == fd) { |
| + return ioh; |
| + } |
| + } |
| + return NULL; |
| +} |
| + |
| +void enable_write_fd_handler(int fd, IOHandler *fd_write) |
| +{ |
| + IOHandlerRecord *ioh; |
| + |
| + ioh = find_iohandler(fd); |
| + if (!ioh) { |
| + return; |
| + } |
| + |
| + ioh->fd_write = fd_write; |
| +} |
| + |
| +void disable_write_fd_handler(int fd) |
| +{ |
| + IOHandlerRecord *ioh; |
| + |
| + ioh = find_iohandler(fd); |
| + if (!ioh) { |
| + return; |
| + } |
| + |
| + ioh->fd_write = NULL; |
| +} |
| |
| /* XXX: fd_read_poll should be suppressed, but an API change is |
| necessary in the character devices to suppress fd_can_read(). */ |
| diff --git a/qemu-char.h b/qemu-char.h |
| index b8372ea..9fe1b82 100644 |
| |
| |
| @@ -123,6 +123,9 @@ size_t qemu_chr_mem_osize(const CharDriverState *chr); |
| |
| /* async I/O support */ |
| |
| +void enable_write_fd_handler(int fd, IOHandler *fd_write); |
| +void disable_write_fd_handler(int fd); |
| + |
| int qemu_set_fd_handler2(int fd, |
| IOCanReadHandler *fd_read_poll, |
| IOHandler *fd_read, |
| -- |
| 1.7.5.1 |
| |