aboutsummaryrefslogtreecommitdiff
path: root/libexec
diff options
context:
space:
mode:
authorJohn Baldwin <jhb@FreeBSD.org>2023-04-18 18:21:50 +0000
committerJohn Baldwin <jhb@FreeBSD.org>2023-04-18 18:21:50 +0000
commite4253ae822ec819a6258b98023c90378b894896a (patch)
tree0d022b7e69d86be378b6fd0c3cc6074f4eb99802 /libexec
parent8b356c888167dfc5f5783679d373555053982f02 (diff)
downloadsrc-e4253ae822ec819a6258b98023c90378b894896a.tar.gz
src-e4253ae822ec819a6258b98023c90378b894896a.zip
rpc.rstatd/rwalld: Use more accurate function pointer types.
Reviewed by: zlei, rmacklem Differential Revision: https://reviews.freebsd.org/D39521
Diffstat (limited to 'libexec')
-rw-r--r--libexec/rpc.rstatd/rstat_proc.c33
-rw-r--r--libexec/rpc.rwalld/rwalld.c19
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);
}