329b588
From 32876859aeee3722398d98abfb6b6307e701091f Mon Sep 17 00:00:00 2001
d4cdad5
From: Amit Shah <amit.shah@redhat.com>
d4cdad5
Date: Mon, 21 Mar 2011 20:32:58 +0100
329b588
Subject: [PATCH 103/114] iohandlers: Add enable/disable_write_fd_handler()
d4cdad5
 functions
d4cdad5
d4cdad5
These will be used to provide a cleaner API for the nonblocking case.
d4cdad5
d4cdad5
Signed-off-by: Amit Shah <amit.shah@redhat.com>
d4cdad5
---
d4cdad5
 iohandler.c |   35 +++++++++++++++++++++++++++++++++++
d4cdad5
 main-loop.h |    3 +++
329b588
 2 files changed, 38 insertions(+)
d4cdad5
d4cdad5
diff --git a/iohandler.c b/iohandler.c
329b588
index 3c74de6..250fd0e 100644
d4cdad5
--- a/iohandler.c
d4cdad5
+++ b/iohandler.c
d4cdad5
@@ -45,6 +45,41 @@ typedef struct IOHandlerRecord {
d4cdad5
 static QLIST_HEAD(, IOHandlerRecord) io_handlers =
d4cdad5
     QLIST_HEAD_INITIALIZER(io_handlers);
329b588
 
d4cdad5
+static IOHandlerRecord *find_iohandler(int fd)
d4cdad5
+{
d4cdad5
+    IOHandlerRecord *ioh;
d4cdad5
+
d4cdad5
+    QLIST_FOREACH(ioh, &io_handlers, next) {
d4cdad5
+        if (ioh->fd == fd) {
d4cdad5
+            return ioh;
d4cdad5
+        }
d4cdad5
+    }
d4cdad5
+    return NULL;
d4cdad5
+}
d4cdad5
+
d4cdad5
+void enable_write_fd_handler(int fd, IOHandler *fd_write)
d4cdad5
+{
d4cdad5
+    IOHandlerRecord *ioh;
d4cdad5
+
d4cdad5
+    ioh = find_iohandler(fd);
d4cdad5
+    if (!ioh) {
d4cdad5
+        return;
d4cdad5
+    }
d4cdad5
+
d4cdad5
+    ioh->fd_write = fd_write;
d4cdad5
+}
d4cdad5
+
d4cdad5
+void disable_write_fd_handler(int fd)
d4cdad5
+{
d4cdad5
+    IOHandlerRecord *ioh;
d4cdad5
+
d4cdad5
+    ioh = find_iohandler(fd);
d4cdad5
+    if (!ioh) {
d4cdad5
+        return;
d4cdad5
+    }
d4cdad5
+
d4cdad5
+    ioh->fd_write = NULL;
d4cdad5
+}
329b588
 
d4cdad5
 /* XXX: fd_read_poll should be suppressed, but an API change is
d4cdad5
    necessary in the character devices to suppress fd_can_read(). */
d4cdad5
diff --git a/main-loop.h b/main-loop.h
329b588
index dce1cd9..eb31273 100644
d4cdad5
--- a/main-loop.h
d4cdad5
+++ b/main-loop.h
329b588
@@ -175,6 +175,9 @@ typedef void IOReadHandler(void *opaque, const uint8_t *buf, int size);
d4cdad5
 typedef int IOCanReadHandler(void *opaque);
d4cdad5
 typedef void IOHandler(void *opaque);
329b588
 
d4cdad5
+void enable_write_fd_handler(int fd, IOHandler *fd_write);
d4cdad5
+void disable_write_fd_handler(int fd);
d4cdad5
+
d4cdad5
 /**
d4cdad5
  * qemu_set_fd_handler2: Register a file descriptor with the main loop
d4cdad5
  *
d4cdad5
-- 
329b588
1.7.10.4
d4cdad5