git: cb2daf8ce116 - main - rpcgen: Const correctness for C23
- Go to: [ bottom of page ] [ top of archives ] [ this month ]
Date: Mon, 03 Aug 2026 14:30:41 UTC
The branch main has been updated by ivy:
URL: https://cgit.FreeBSD.org/src/commit/?id=cb2daf8ce116d475597d7ab95f2454ea54c968e6
commit cb2daf8ce116d475597d7ab95f2454ea54c968e6
Author: Lexi Winter <ivy@FreeBSD.org>
AuthorDate: 2026-08-03 14:04:16 +0000
Commit: Lexi Winter <ivy@FreeBSD.org>
CommitDate: 2026-08-03 14:04:16 +0000
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
---
usr.bin/rpcgen/rpc_main.c | 3 ++-
usr.bin/rpcgen/rpc_svcout.c | 19 +++++++++++++------
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);
}