summaryrefslogtreecommitdiff
path: root/lib9p/srv.c
diff options
context:
space:
mode:
Diffstat (limited to 'lib9p/srv.c')
-rw-r--r--lib9p/srv.c40
1 files changed, 19 insertions, 21 deletions
diff --git a/lib9p/srv.c b/lib9p/srv.c
index 1a6bbb1..dad1814 100644
--- a/lib9p/srv.c
+++ b/lib9p/srv.c
@@ -612,8 +612,6 @@ _HANDLER_PROTO(sread);
_HANDLER_PROTO(swrite);
#endif
-typedef void (*tmessage_handler)(struct srv_req *, void *);
-
void lib9p_srv_worker(struct srv_req *ctx) {
uint8_t *host_req = NULL;
@@ -631,35 +629,35 @@ void lib9p_srv_worker(struct srv_req *ctx) {
srv_msglog(ctx, typ, host_req);
/* Handle it. ********************************************************/
- tmessage_handler handler;
+#define CASE(typ) case LIB9P_TYP_##typ: handle_##typ(ctx, (void *)host_req); break
LM_PARTIAL_SWITCH (typ) {
- case LIB9P_TYP_Tversion: handler = (tmessage_handler)handle_Tversion; break;
+ CASE(Tversion);
#if _LIB9P_ENABLE_stat
- case LIB9P_TYP_Tauth: handler = (tmessage_handler)handle_Tauth; break;
- case LIB9P_TYP_Tattach: handler = (tmessage_handler)handle_Tattach; break;
- case LIB9P_TYP_Tflush: handler = (tmessage_handler)handle_Tflush; break;
- case LIB9P_TYP_Twalk: handler = (tmessage_handler)handle_Twalk; break;
- case LIB9P_TYP_Topen: handler = (tmessage_handler)handle_Topen; break;
- case LIB9P_TYP_Tcreate: handler = (tmessage_handler)handle_Tcreate; break;
- case LIB9P_TYP_Tread: handler = (tmessage_handler)handle_Tread; break;
- case LIB9P_TYP_Twrite: handler = (tmessage_handler)handle_Twrite; break;
- case LIB9P_TYP_Tclunk: handler = (tmessage_handler)handle_Tclunk; break;
- case LIB9P_TYP_Tremove: handler = (tmessage_handler)handle_Tremove; break;
- case LIB9P_TYP_Tstat: handler = (tmessage_handler)handle_Tstat; break;
- case LIB9P_TYP_Twstat: handler = (tmessage_handler)handle_Twstat; break;
+ CASE(Tauth);
+ CASE(Tattach);
+ CASE(Tflush);
+ CASE(Twalk);
+ CASE(Topen);
+ CASE(Tcreate);
+ CASE(Tread);
+ CASE(Twrite);
+ CASE(Tclunk);
+ CASE(Tremove);
+ CASE(Tstat);
+ CASE(Twstat);
#endif
#if CONFIG_9P_ENABLE_9P2000_p9p
- case LIB9P_TYP_Topenfd: handler = (tmessage_handler)handle_Topenfd; break;
+ CASE(Topenfd);
#endif
#if CONFIG_9P_ENABLE_9P2000_e
- case LIB9P_TYP_Tsession: handler = (tmessage_handler)handle_Tsession; break;
- case LIB9P_TYP_Tsread: handler = (tmessage_handler)handle_Tsread; break;
- case LIB9P_TYP_Tswrite: handler = (tmessage_handler)handle_Tswrite; break;
+ CASE(Tsession);
+ CASE(Tsread);
+ CASE(Tswrite);
#endif
+#undef CASE
default:
assert_notreached("lib9p_Tmsg_validate() should have rejected unknown typ");
}
- handler(ctx, (void *)host_req);
assert(ctx->responded);
/* Release resources. ************************************************/