diff options
author | Marko Kiiskila <marko@runtime.io> | 2016-07-12 17:24:41 -0700 |
---|---|---|
committer | Marko Kiiskila <marko@runtime.io> | 2016-07-12 17:24:41 -0700 |
commit | 350eb2aa27be58e32102a3772124be47978fa52e (patch) | |
tree | 9475d579cefb30fd76b6d657ff4134488a7bff0b /sys | |
parent | 5806fa0d948684cf0b54d7bce47de07f0143894e (diff) |
mn_socket; replace socket pointer with a user-defined void * in
socket callback arguments.
Diffstat (limited to 'sys')
-rw-r--r-- | sys/mn_socket/include/mn_socket/mn_socket.h | 13 | ||||
-rw-r--r-- | sys/mn_socket/include/mn_socket/mn_socket_ops.h | 6 |
2 files changed, 12 insertions, 7 deletions
diff --git a/sys/mn_socket/include/mn_socket/mn_socket.h b/sys/mn_socket/include/mn_socket/mn_socket.h index 75ebc8c8..6b457be9 100644 --- a/sys/mn_socket/include/mn_socket/mn_socket.h +++ b/sys/mn_socket/include/mn_socket/mn_socket.h @@ -57,6 +57,7 @@ struct os_mbuf; struct mn_socket { const union mn_socket_cb *ms_cbs; /* filled in by user */ + void *ms_cb_arg; /* filled in by user */ const struct mn_socket_ops *ms_ops; /* filled in by mn_socket */ }; @@ -66,11 +67,11 @@ struct mn_socket { */ union mn_socket_cb { struct { - void (*readable)(struct mn_socket *, int err); - void (*writable)(struct mn_socket *, int err); + void (*readable)(void *cb_arg, int err); + void (*writable)(void *cb_arg, int err); } socket; struct { - int (*newconn)(struct mn_socket *listen, struct mn_socket *new); + int (*newconn)(void *cb_arg, struct mn_socket *new); } listen; }; @@ -131,7 +132,11 @@ int mn_getpeername(struct mn_socket *, struct mn_sockaddr *); int mn_close(struct mn_socket *); -#define mn_socket_set_cbs(sock, cbs) (sock)->ms_cbs = (cbs) +#define mn_socket_set_cbs(sock, cb_arg, cbs) \ + do { \ + (sock)->ms_cbs = (cbs); \ + (sock)->ms_cb_arg = (cb_arg); \ + } while (0) /* * Address conversion diff --git a/sys/mn_socket/include/mn_socket/mn_socket_ops.h b/sys/mn_socket/include/mn_socket/mn_socket_ops.h index 6e768eba..61be0540 100644 --- a/sys/mn_socket/include/mn_socket/mn_socket_ops.h +++ b/sys/mn_socket/include/mn_socket/mn_socket_ops.h @@ -57,7 +57,7 @@ static inline void mn_socket_writable(struct mn_socket *s, int error) { if (s->ms_cbs && s->ms_cbs->socket.writable) { - s->ms_cbs->socket.writable(s, error); + s->ms_cbs->socket.writable(s->ms_cb_arg, error); } } @@ -65,7 +65,7 @@ static inline void mn_socket_readable(struct mn_socket *s, int error) { if (s->ms_cbs && s->ms_cbs->socket.readable) { - s->ms_cbs->socket.readable(s, error); + s->ms_cbs->socket.readable(s->ms_cb_arg, error); } } @@ -73,7 +73,7 @@ static inline int mn_socket_newconn(struct mn_socket *s, struct mn_socket *new) { if (s->ms_cbs && s->ms_cbs->listen.newconn) { - return s->ms_cbs->listen.newconn(s, new); + return s->ms_cbs->listen.newconn(s->ms_cb_arg, new); } else { return -1; } |