From e4253ae822ec819a6258b98023c90378b894896a Mon Sep 17 00:00:00 2001 From: John Baldwin Date: Tue, 18 Apr 2023 11:21:50 -0700 Subject: rpc.rstatd/rwalld: Use more accurate function pointer types. Reviewed by: zlei, rmacklem Differential Revision: https://reviews.freebsd.org/D39521 --- libexec/rpc.rstatd/rstat_proc.c | 33 +++++++++++++++++---------------- libexec/rpc.rwalld/rwalld.c | 19 ++++++++++--------- 2 files changed, 27 insertions(+), 25 deletions(-) diff --git a/libexec/rpc.rstatd/rstat_proc.c b/libexec/rpc.rstatd/rstat_proc.c index f0f2ffd65b57..1f1bb7cf4048 100644 --- a/libexec/rpc.rstatd/rstat_proc.c +++ b/libexec/rpc.rstatd/rstat_proc.c @@ -406,9 +406,10 @@ rstat_service(struct svc_req *rqstp, SVCXPRT *transp) union { int fill; } argument; - char *result; - bool_t (*xdr_argument)(), (*xdr_result)(); - char *(*local)(); + void *result; + xdrproc_t xdr_argument, xdr_result; + typedef void *(svc_cb)(void *arg, struct svc_req *rqstp); + svc_cb *local; switch (rqstp->rq_proc) { case NULLPROC: @@ -416,17 +417,17 @@ rstat_service(struct svc_req *rqstp, SVCXPRT *transp) goto leave; case RSTATPROC_STATS: - xdr_argument = xdr_void; - xdr_result = xdr_statstime; + xdr_argument = (xdrproc_t)xdr_void; + xdr_result = (xdrproc_t)xdr_statstime; switch (rqstp->rq_vers) { case RSTATVERS_ORIG: - local = (char *(*)()) rstatproc_stats_1_svc; + local = (svc_cb *)rstatproc_stats_1_svc; break; case RSTATVERS_SWTCH: - local = (char *(*)()) rstatproc_stats_2_svc; + local = (svc_cb *)rstatproc_stats_2_svc; break; case RSTATVERS_TIME: - local = (char *(*)()) rstatproc_stats_3_svc; + local = (svc_cb *)rstatproc_stats_3_svc; break; default: svcerr_progvers(transp, RSTATVERS_ORIG, RSTATVERS_TIME); @@ -436,17 +437,17 @@ rstat_service(struct svc_req *rqstp, SVCXPRT *transp) break; case RSTATPROC_HAVEDISK: - xdr_argument = xdr_void; - xdr_result = xdr_u_int; + xdr_argument = (xdrproc_t)xdr_void; + xdr_result = (xdrproc_t)xdr_u_int; switch (rqstp->rq_vers) { case RSTATVERS_ORIG: - local = (char *(*)()) rstatproc_havedisk_1_svc; + local = (svc_cb *)rstatproc_havedisk_1_svc; break; case RSTATVERS_SWTCH: - local = (char *(*)()) rstatproc_havedisk_2_svc; + local = (svc_cb *)rstatproc_havedisk_2_svc; break; case RSTATVERS_TIME: - local = (char *(*)()) rstatproc_havedisk_3_svc; + local = (svc_cb *)rstatproc_havedisk_3_svc; break; default: svcerr_progvers(transp, RSTATVERS_ORIG, RSTATVERS_TIME); @@ -460,16 +461,16 @@ rstat_service(struct svc_req *rqstp, SVCXPRT *transp) goto leave; } bzero((char *)&argument, sizeof(argument)); - if (!svc_getargs(transp, (xdrproc_t)xdr_argument, &argument)) { + if (!svc_getargs(transp, xdr_argument, &argument)) { svcerr_decode(transp); goto leave; } result = (*local)(&argument, rqstp); if (result != NULL && - !svc_sendreply(transp, (xdrproc_t)xdr_result, result)) { + !svc_sendreply(transp, xdr_result, result)) { svcerr_systemerr(transp); } - if (!svc_freeargs(transp, (xdrproc_t)xdr_argument, &argument)) + if (!svc_freeargs(transp, xdr_argument, &argument)) errx(1, "unable to free arguments"); leave: if (from_inetd) diff --git a/libexec/rpc.rwalld/rwalld.c b/libexec/rpc.rwalld/rwalld.c index 1261b2301277..adde226cfba8 100644 --- a/libexec/rpc.rwalld/rwalld.c +++ b/libexec/rpc.rwalld/rwalld.c @@ -167,9 +167,10 @@ wallprog_1(struct svc_req *rqstp, SVCXPRT *transp) union { char *wallproc_wall_1_arg; } argument; - char *result; - bool_t (*xdr_argument)(), (*xdr_result)(); - char *(*local)(); + void *result; + xdrproc_t xdr_argument, xdr_result; + typedef void *(svc_cb)(void *arg, struct svc_req *rqstp); + svc_cb *local; switch (rqstp->rq_proc) { case NULLPROC: @@ -177,9 +178,9 @@ wallprog_1(struct svc_req *rqstp, SVCXPRT *transp) goto leave; case WALLPROC_WALL: - xdr_argument = xdr_wrapstring; - xdr_result = xdr_void; - local = (char *(*)()) wallproc_wall_1_svc; + xdr_argument = (xdrproc_t)xdr_wrapstring; + xdr_result = (xdrproc_t)xdr_void; + local = (svc_cb *)wallproc_wall_1_svc; break; default: @@ -187,16 +188,16 @@ wallprog_1(struct svc_req *rqstp, SVCXPRT *transp) goto leave; } bzero(&argument, sizeof(argument)); - if (!svc_getargs(transp, (xdrproc_t)xdr_argument, &argument)) { + if (!svc_getargs(transp, xdr_argument, &argument)) { svcerr_decode(transp); goto leave; } result = (*local)(&argument, rqstp); if (result != NULL && - !svc_sendreply(transp, (xdrproc_t)xdr_result, result)) { + !svc_sendreply(transp, xdr_result, result)) { svcerr_systemerr(transp); } - if (!svc_freeargs(transp, (xdrproc_t)xdr_argument, &argument)) { + if (!svc_freeargs(transp, xdr_argument, &argument)) { syslog(LOG_ERR, "unable to free arguments"); exit(1); } -- cgit v1.2.3