summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--build-aux/measurestack/app_plugins.py21
-rw-r--r--lib9p/srv.c40
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. ************************************************/