chiark / gitweb /
util: Break out pollbadbit()
authorIan Jackson <ijackson@chiark.greenend.org.uk>
Wed, 1 Oct 2014 17:02:19 +0000 (18:02 +0100)
committerIan Jackson <ijackson@chiark.greenend.org.uk>
Thu, 2 Oct 2014 15:40:18 +0000 (16:40 +0100)
Signed-off-by: Ian Jackson <ijackson@chiark.greenend.org.uk>
util.c
util.h

diff --git a/util.c b/util.c
index 240155a6a1691237e7bbd023d634d0eef75c839b..b2cd0e87cc04140bd454bb320c68a35d0c244fbc 100644 (file)
--- a/util.c
+++ b/util.c
@@ -611,6 +611,17 @@ int iaddr_socklen(const union iaddr *ia)
     }
 }
 
+const char *pollbadbit(int revents)
+{
+#define BADBIT(b) \
+    if ((revents & b)) return #b
+    BADBIT(POLLERR);
+    BADBIT(POLLHUP);
+    BADBIT(POLLNVAL);
+#undef BADBIT
+    return 0;
+}
+
 enum async_linebuf_result
 async_linebuf_read(struct pollfd *pfd, struct buffer_if *buf,
                   const char **emsg_out)
@@ -618,12 +629,9 @@ async_linebuf_read(struct pollfd *pfd, struct buffer_if *buf,
     int revents=pfd->revents;
 
 #define BAD(m) do{ *emsg_out=(m); return async_linebuf_broken; }while(0)
-#define BADBIT(b) \
-    if (!(revents & b)) ; else BAD(#b)
-    BADBIT(POLLERR);
-    BADBIT(POLLHUP);
-    BADBIT(POLLNVAL);
-#undef BADBIT
+
+    const char *badbit=pollbadbit(revents);
+    if (badbit) BAD(badbit);
 
     if (!(revents & POLLIN))
        return async_linebuf_nothing;
diff --git a/util.h b/util.h
index e1dc69f3371429b31ba765916c3abc3502c866c3..82ed8223ffc6aeff3a1bd70739273d5cd5704bb1 100644 (file)
--- a/util.h
+++ b/util.h
@@ -99,6 +99,8 @@ enum async_linebuf_result {
     async_linebuf_broken,
 };
 
+const char *pollbadbit(int revents); /* returns 0, or bad bit description */
+
 enum async_linebuf_result
 async_linebuf_read(struct pollfd *pfd, struct buffer_if *buf,
                   const char **emsg_out);