git: 18d47c1856f4 - main - rpc: correct resultproc_t's type
- Go to: [ bottom of page ] [ top of archives ] [ this month ]
Date: Mon, 02 Feb 2026 21:20:36 UTC
The branch main has been updated by brooks:
URL: https://cgit.FreeBSD.org/src/commit/?id=18d47c1856f4ec3f7a2f9a726bba2ebe64d63dd7
commit 18d47c1856f4ec3f7a2f9a726bba2ebe64d63dd7
Author: Brooks Davis <brooks@FreeBSD.org>
AuthorDate: 2026-02-02 21:20:16 +0000
Commit: Brooks Davis <brooks@FreeBSD.org>
CommitDate: 2026-02-02 21:20:16 +0000
rpc: correct resultproc_t's type
It takes exactly three arguments of known type.
Tweak the types of various resultproc_t functions to match the type (mostly
added const to struct pointers) allowing us to drop casts.
Effort: CHERI upstreaming
Reviewed by: vangyzen, glebius
Sponsored by: DARPA, AFRL
Differential Revision: https://reviews.freebsd.org/D54941
---
contrib/netbsd-tests/lib/libc/rpc/t_rpc.c | 5 +++--
include/rpc/clnt.h | 3 ++-
lib/libc/rpc/rpc_soc.c | 8 +++++---
usr.bin/rpcinfo/rpcinfo.c | 8 +++++---
4 files changed, 15 insertions(+), 9 deletions(-)
diff --git a/contrib/netbsd-tests/lib/libc/rpc/t_rpc.c b/contrib/netbsd-tests/lib/libc/rpc/t_rpc.c
index 3000f6aec98b..2737151826bf 100644
--- a/contrib/netbsd-tests/lib/libc/rpc/t_rpc.c
+++ b/contrib/netbsd-tests/lib/libc/rpc/t_rpc.c
@@ -39,7 +39,8 @@ __RCSID("$NetBSD: t_rpc.c,v 1.10 2016/08/27 14:36:22 christos Exp $");
#define RPCBPROC_NULL 0
static int
-reply(caddr_t replyp, struct netbuf * raddrp, struct netconfig * nconf)
+reply(caddr_t replyp, const struct netbuf * raddrp,
+ const struct netconfig * nconf)
{
char host[NI_MAXHOST];
struct sockaddr *sock = raddrp->buf;
@@ -244,7 +245,7 @@ allhosts(const char *transp)
clnt_stat = rpc_broadcast(RPCBPROG, RPCBVERS, RPCBPROC_NULL,
(xdrproc_t)xdr_void, NULL, (xdrproc_t)xdr_void,
- NULL, (resultproc_t)reply, transp);
+ NULL, reply, transp);
if (clnt_stat != RPC_SUCCESS && clnt_stat != RPC_TIMEDOUT)
ERRX(EXIT_FAILURE, "%s", clnt_sperrno(clnt_stat));
}
diff --git a/include/rpc/clnt.h b/include/rpc/clnt.h
index eb5e1f5b350f..d7b3e2beb8c0 100644
--- a/include/rpc/clnt.h
+++ b/include/rpc/clnt.h
@@ -514,7 +514,8 @@ __END_DECLS
* const char *nettype; -- Transport type
*/
-typedef bool_t (*resultproc_t)(caddr_t, ...);
+typedef bool_t (*resultproc_t)(caddr_t, const struct netbuf *,
+ const struct netconfig *);
__BEGIN_DECLS
extern enum clnt_stat rpc_broadcast(const rpcprog_t, const rpcvers_t,
diff --git a/lib/libc/rpc/rpc_soc.c b/lib/libc/rpc/rpc_soc.c
index e986593badf4..24a19624d366 100644
--- a/lib/libc/rpc/rpc_soc.c
+++ b/lib/libc/rpc/rpc_soc.c
@@ -72,7 +72,8 @@
static CLIENT *clnt_com_create(struct sockaddr_in *, rpcprog_t, rpcvers_t,
int *, u_int, u_int, char *);
static SVCXPRT *svc_com_create(int, u_int, u_int, char *);
-static bool_t rpc_wrap_bcast(char *, struct netbuf *, struct netconfig *);
+static bool_t rpc_wrap_bcast(char *, const struct netbuf *,
+ const struct netconfig *);
/* XXX */
#define IN4_LOCALHOST_STRING "127.0.0.1"
@@ -318,7 +319,8 @@ static _Thread_local clnt_broadcast_resultproc_t clnt_broadcast_result;
*/
/* ARGSUSED */
static bool_t
-rpc_wrap_bcast(char *resultp, struct netbuf *addr, struct netconfig *nconf)
+rpc_wrap_bcast(char *resultp, const struct netbuf *addr,
+ const struct netconfig *nconf)
/*
* char *resultp; // results of the call
* struct netbuf *addr; // address of the guy who responded
@@ -355,7 +357,7 @@ clnt_broadcast(u_long prog, u_long vers, u_long proc, xdrproc_t xargs,
ret = rpc_broadcast((rpcprog_t)prog, (rpcvers_t)vers,
(rpcproc_t)proc, xargs, argsp, xresults, resultsp,
- (resultproc_t) rpc_wrap_bcast, "udp");
+ rpc_wrap_bcast, "udp");
clnt_broadcast_result = NULL;
return (ret);
diff --git a/usr.bin/rpcinfo/rpcinfo.c b/usr.bin/rpcinfo/rpcinfo.c
index 5f2dd4433292..5156dd2db4e0 100644
--- a/usr.bin/rpcinfo/rpcinfo.c
+++ b/usr.bin/rpcinfo/rpcinfo.c
@@ -125,7 +125,8 @@ static void pmapdump(int, char **);
static void get_inet_address(struct sockaddr_in *, char *);
#endif
-static bool_t reply_proc(void *, struct netbuf *, struct netconfig *);
+static bool_t reply_proc(char *, const struct netbuf *,
+ const struct netconfig *);
static void brdcst(int, char **);
static void addrping(char *, char *, int, char **);
static void progping(char *, int, char **);
@@ -584,7 +585,8 @@ get_inet_address(struct sockaddr_in *addr, char *host)
/*ARGSUSED*/
static bool_t
-reply_proc(void *res, struct netbuf *who, struct netconfig *nconf)
+reply_proc(char *res __unused, const struct netbuf *who,
+ const struct netconfig *nconf)
/* void *res; Nothing comes back */
/* struct netbuf *who; Who sent us the reply */
/* struct netconfig *nconf; On which transport the reply came */
@@ -621,7 +623,7 @@ brdcst(int argc, char **argv)
vers = getvers(argv[1]);
rpc_stat = rpc_broadcast(prognum, vers, NULLPROC,
(xdrproc_t) xdr_void, (char *)NULL, (xdrproc_t) xdr_void,
- (char *)NULL, (resultproc_t) reply_proc, NULL);
+ (char *)NULL, reply_proc, NULL);
if ((rpc_stat != RPC_SUCCESS) && (rpc_stat != RPC_TIMEDOUT))
errx(1, "broadcast failed: %s", clnt_sperrno(rpc_stat));
exit(0);