diff options
author | Luke T. Shumaker <lukeshu@lukeshu.com> | 2025-05-15 13:16:20 -0600 |
---|---|---|
committer | Luke T. Shumaker <lukeshu@lukeshu.com> | 2025-05-15 13:37:11 -0600 |
commit | a226a1adf5e07f4281fcf95d3a69b7964159a95a (patch) | |
tree | ed6c3ad462e1c43a44a49c2ec8f8f59f317a0ad8 | |
parent | be7a0efac25f186cd0b5ad49e9d001e99d025b74 (diff) |
lib9p: srv.c: Simplify handler calling
-rw-r--r-- | build-aux/measurestack/app_plugins.py | 21 | ||||
-rw-r--r-- | lib9p/srv.c | 40 |
2 files changed, 19 insertions, 42 deletions
diff --git a/build-aux/measurestack/app_plugins.py b/build-aux/measurestack/app_plugins.py index 1b10b67..f9dfe40 100644 --- a/build-aux/measurestack/app_plugins.py +++ b/build-aux/measurestack/app_plugins.py @@ -255,9 +255,6 @@ class LibCRIPCPlugin: class Lib9PPlugin: - re_tmessage_handler = re.compile( - r"^\s*\[LIB9P_TYP_T[^]]+\]\s*=\s*\(tmessage_handler\)\s*(?P<handler>\S+),\s*$" - ) re_lib9p_msg_entry = re.compile(r"^\s*_MSG_(?:[A-Z]+)\((?P<typ>\S+)\),$") re_lib9p_caller = re.compile( r"^lib9p_(?P<grp>[TR])msg_(?P<meth>validate|unmarshal|marshal)$" @@ -266,7 +263,6 @@ class Lib9PPlugin: r"^(?P<meth>validate|unmarshal|marshal)_(?P<msg>(?P<grp>[TR]).*)$" ) - tmessage_handlers: set[QName] | None lib9p_msgs: set[str] _CONFIG_9P_MAX_CONNS: int | None _CONFIG_9P_MAX_REQS: int | None @@ -323,16 +319,6 @@ class Lib9PPlugin: # Read sources ######################################################### - tmessage_handlers: set[QName] | None = None - if lib9p_srv_c_fname: - tmessage_handlers = set() - with open(lib9p_srv_c_fname, "r", encoding="utf-8") as fh: - for line in fh: - line = line.rstrip() - if m := self.re_tmessage_handler.fullmatch(line): - tmessage_handlers.add(QName(m.group("handler"))) - self.tmessage_handlers = tmessage_handlers - lib9p_msgs: set[str] = set() if lib9p_generated_c_fname: with open(lib9p_generated_c_fname, "r", encoding="utf-8") as fh: @@ -369,13 +355,6 @@ class Lib9PPlugin: ) -> tuple[typing.Collection[QName], bool] | None: if "/3rd-party/" in loc: return None - if ( - self.tmessage_handlers - and "/srv.c:" in loc - and "tmessage_handlers[typ](" in line - ): - # Functions for disabled protocol extensions will be missing. - return self.tmessage_handlers, True if self.lib9p_msgs and "/9p.c:" in loc: for meth in ["validate", "unmarshal", "marshal"]: if line.startswith(f"tentry.{meth}("): 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. ************************************************/ |