summaryrefslogtreecommitdiff
path: root/sys
diff options
context:
space:
mode:
authorMarko Kiiskila <marko@runtime.io>2016-07-12 17:24:41 -0700
committerMarko Kiiskila <marko@runtime.io>2016-07-12 17:24:41 -0700
commit350eb2aa27be58e32102a3772124be47978fa52e (patch)
tree9475d579cefb30fd76b6d657ff4134488a7bff0b /sys
parent5806fa0d948684cf0b54d7bce47de07f0143894e (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.h13
-rw-r--r--sys/mn_socket/include/mn_socket/mn_socket_ops.h6
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;
}