--- a/src/transport_fd.c Tue Apr 28 23:09:28 2009 +0300
+++ b/src/transport_fd.c Tue Apr 28 23:10:30 2009 +0300
@@ -7,19 +7,23 @@
#include <assert.h>
/**
- * Our pseudo-transport_type
- */
-static struct transport_type transport_fd_type;
-
-/**
* Our libevent callback
*/
-static void transport_fd_on_event (evutil_socket_t _fd, short what, void *arg)
+static void transport_fd_on_event (evutil_socket_t _fd, short ev_what, void *arg)
{
struct transport_fd *fd = arg;
(void) _fd;
+ short what = 0;
+
+ // build flags
+ if (ev_what & EV_READ)
+ what |= TRANSPORT_READ;
+
+ if (ev_what & EV_WRITE)
+ what |= TRANSPORT_WRITE;
+
// invoke user callback
fd->cb_func(fd, what, fd->cb_arg);
}
@@ -31,6 +35,8 @@
{
struct transport_fd *fd = transport_check(transport, &transport_fd_type);
int ret;
+
+ RESET_ERROR(err);
// read(), and detect non-EAGAIN or EOF
if ((ret = read(fd->fd, buf, *len)) < 0 && errno != EAGAIN)
@@ -60,6 +66,8 @@
struct transport_fd *fd = transport_check(transport, &transport_fd_type);
int ret;
+ RESET_ERROR(err);
+
// write(), and detect non-EAGAIN or EOF
if ((ret = write(fd->fd, buf, *len)) < 0 && errno != EAGAIN)
// unexpected error
@@ -87,19 +95,19 @@
return SUCCESS;
}
-err_t transport_fd_methods_events (transport_t *transport, short mask, error_t *err)
+err_t transport_fd_methods_events (transport_t *transport, short ev_mask, error_t *err)
{
struct transport_fd *fd = transport_check(transport, &transport_fd_type);
- short _mask = 0;
+ short mask = 0;
// enable read as requested
- if (mask & TRANSPORT_READ)
- _mask |= TRANSPORT_READ;
+ if (ev_mask & TRANSPORT_READ)
+ mask |= TRANSPORT_READ;
// enable write if requested and it's currently enabled
- if ((mask & TRANSPORT_WRITE) && event_pending(fd->ev_write, EV_WRITE, NULL))
- _mask |= TRANSPORT_WRITE;
+ if ((ev_mask & TRANSPORT_WRITE) && event_pending(fd->ev_write, EV_WRITE, NULL))
+ mask |= TRANSPORT_WRITE;
// set
return (ERROR_CODE(err) = transport_fd_events(fd, mask));
@@ -112,11 +120,14 @@
transport_fd_destroy(fd);
}
-const struct transport_methods transport_fd_methods = {
- .read = transport_fd_methods_read,
- .write = transport_fd_methods_write,
- .events = transport_fd_methods_events,
- .destroy = _transport_fd_destroy
+const struct transport_type transport_fd_type = {
+ .parent = NULL,
+ .methods = {
+ .read = transport_fd_methods_read,
+ .write = transport_fd_methods_write,
+ .events = transport_fd_methods_events,
+ .destroy = _transport_fd_destroy
+ }
};
/**