aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorLexi Winter <ivy@FreeBSD.org>2026-08-03 14:04:16 +0000
committerLexi Winter <ivy@FreeBSD.org>2026-08-03 14:04:16 +0000
commitcb2daf8ce116d475597d7ab95f2454ea54c968e6 (patch)
treedd431dbb7e48c82350b9b085a2c1b8c4866f9e08
parentf1d98862044f7748c6f930e9d4339abc166a5b16 (diff)
rpcgen: Const correctness for C23
On some platforms, e.g. Linux Clang 22.1.8 / glibc 2.43, strchr() now implements the C23 behaviour where passing a const pointer to strchr() also returns a const pointer. This breaks rpcgen during the bootstrap build, since it assumes the return value is always a mutable pointer. For mkfile_output(), the pointed-to value is never modified, so fix this by making the pointer const as well. For open_log_file(), the current code modifies the supposedly const value in-place to remove the filename suffix, which happens to work but is wrong even in older versions of C. Change the code to use a printf "%.*s" format specifier to strip the suffix instead. MFC after: 1 week Reviewed by: brooks Sponsored by: The FreeBSD Foundation Differential Revision: https://reviews.freebsd.org/D58489
-rw-r--r--usr.bin/rpcgen/rpc_main.c3
-rw-r--r--usr.bin/rpcgen/rpc_svcout.c19
2 files changed, 15 insertions, 7 deletions
diff --git a/usr.bin/rpcgen/rpc_main.c b/usr.bin/rpcgen/rpc_main.c
index 8d5afad86cff..4c69be1ed333 100644
--- a/usr.bin/rpcgen/rpc_main.c
+++ b/usr.bin/rpcgen/rpc_main.c
@@ -868,7 +868,8 @@ static void mkfile_output(struct commandline *cmd)
{
const char *mkfilename, *clientname, *clntname, *xdrname, *hdrname;
const char *servername, *svcname, *servprogname, *clntprogname;
- char *temp, *mkftemp;
+ const char *temp;
+ char *mkftemp;
svcname = file_name(cmd->infile, "_svc.c");
clntname = file_name(cmd->infile, "_clnt.c");
diff --git a/usr.bin/rpcgen/rpc_svcout.c b/usr.bin/rpcgen/rpc_svcout.c
index 2c6849714d75..bbeed976c2d2 100644
--- a/usr.bin/rpcgen/rpc_svcout.c
+++ b/usr.bin/rpcgen/rpc_svcout.c
@@ -31,6 +31,7 @@
* rpc_svcout.c, Server-skeleton outputter for the RPC protocol compiler
* Copyright (C) 1987, Sun Microsystems, Inc.
*/
+#include <limits.h>
#include <stdio.h>
#include <string.h>
#include "rpc_parse.h"
@@ -931,14 +932,20 @@ write_rpc_svc_fg(const char *infile, const char *sp)
static void
open_log_file(const char *infile, const char *sp)
{
- char *s;
+ const char *s;
s = strrchr(infile, '.');
- if (s)
- *s = '\0';
- f_print(fout, "%sopenlog(\"%s\", LOG_PID, LOG_DAEMON);\n", sp, infile);
- if (s)
- *s = '.';
+ if (s) {
+ size_t len;
+
+ len = s - infile;
+ if (len > INT_MAX)
+ len = INT_MAX;
+ f_print(fout, "%sopenlog(\"%.*s\", LOG_PID, LOG_DAEMON);\n",
+ sp, (int)len, infile);
+ } else
+ f_print(fout, "%sopenlog(\"%s\", LOG_PID, LOG_DAEMON);\n",
+ sp, infile);
}