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;