rpc: fix dispatch() in svc_register()
Theo Buehler <[email protected]> Thu, 6 Aug 2026 10:58:03 +0200
| Newsgroups | gmane.os.openbsd.tech |
|---|---|
| Message-ID | <[email protected]> |
The rpc/svc.h header declares svc_register() as follows:
extern bool_t svc_register(SVCXPRT *, unsigned long, unsigned long,
void (*)(struct svc_req *, SVCXPRT *), int);
The diff below adjusts the function definition to match and does the
same with the sc_dispatch() member of struct svc_callout.
The rpc(3) documentation already says this further down:
The procedure dispatch has the following
form: int dispatch(struct svc_req *request, SVCXPRT *xprt) The
svc_register() routine returns one if it succeeds, and zero otherwise.
All svc_register() callers (in C code or generated code) pass a function
pointer of the correct signature.
The diff does not change the generated assembly on aarch64 and silences
a -Wdeprecated-non-prototype warning.
Index: lib/libc/rpc/rpc.3
===================================================================
RCS file: /cvs/src/lib/libc/rpc/rpc.3,v
diff -u -p -r1.50 rpc.3
--- lib/libc/rpc/rpc.3 13 Jun 2025 18:34:00 -0000 1.50
+++ lib/libc/rpc/rpc.3 9 Jul 2026 19:40:41 -0000
@@ -201,7 +201,7 @@
.Ft int
.Fn svc_getreq "int rdfds"
.Ft int
-.Fn svc_register "SVCXPRT *xprt" "u_long prognum" "u_long versnum" "void (*dispatch)()" "u_long protocol"
+.Fn svc_register "SVCXPRT *xprt" "u_long prognum" "u_long versnum" "void (*dispatch)(struct svc_req *, SVCXPRT *)" "u_long protocol"
.Ft int
.Fn svc_run "void"
.Ft int
Index: lib/libc/rpc/svc.c
===================================================================
RCS file: /cvs/src/lib/libc/rpc/svc.c,v
diff -u -p -r1.29 svc.c
--- lib/libc/rpc/svc.c 5 Oct 2015 01:23:17 -0000 1.29
+++ lib/libc/rpc/svc.c 10 Jul 2026 11:20:11 -0000
@@ -63,7 +63,7 @@ static struct svc_callout {
struct svc_callout *sc_next;
u_long sc_prog;
u_long sc_vers;
- void (*sc_dispatch)();
+ void (*sc_dispatch)(struct svc_req *, SVCXPRT *);
} *svc_head;
static struct svc_callout *svc_find(u_long, u_long, struct svc_callout **);
@@ -289,8 +289,8 @@ DEF_WEAK(xprt_unregister);
* program number comes in.
*/
bool_t
-svc_register(SVCXPRT *xprt, u_long prog, u_long vers, void (*dispatch)(),
- int protocol)
+svc_register(SVCXPRT *xprt, u_long prog, u_long vers,
+ void (*dispatch)(struct svc_req *, SVCXPRT *), int protocol)
{
struct svc_callout *prev;
struct svc_callout *s;