[git commit] *: placate warnings where strchr/strstr returns constant pointer
Denys Vlasenko
vda.linux at googlemail.com
Sun Feb 15 14:15:30 UTC 2026
commit: https://git.busybox.net/busybox/commit/?id=b668e52c906b664b353d5a99cfa3ff36f73b341d
branch: https://git.busybox.net/busybox/log/?h=master
Newer glibc is now smarter and can propagate const-ness from those!
function old new delta
readtoken1 3111 3108 -3
Signed-off-by: Denys Vlasenko <vda.linux at googlemail.com>
---
coreutils/od_bloaty.c | 7 ++++---
coreutils/printf.c | 2 +-
editors/awk.c | 2 +-
klibc-utils/resume.c | 2 +-
libbb/get_last_path_component.c | 4 ++--
libbb/replace.c | 3 ++-
libbb/strrstr.c | 4 ++--
libbb/xfuncs_printf.c | 2 +-
libpwdgrp/uidgid_get.c | 3 ++-
miscutils/bc.c | 2 +-
networking/httpd.c | 2 +-
networking/ifconfig.c | 2 +-
networking/ifupdown.c | 2 +-
networking/nbd-client.c | 2 +-
networking/route.c | 36 ++++++++++++++++++------------------
networking/udhcp/d6_socket.c | 3 ++-
networking/udhcp/socket.c | 3 ++-
printutils/lpr.c | 2 +-
procps/nmeter.c | 5 +++--
procps/powertop.c | 5 +++--
scripts/kconfig/confdata.c | 2 +-
shell/ash.c | 14 +++++++-------
22 files changed, 58 insertions(+), 51 deletions(-)
diff --git a/coreutils/od_bloaty.c b/coreutils/od_bloaty.c
index e886a4ed2..c0e6681f2 100644
--- a/coreutils/od_bloaty.c
+++ b/coreutils/od_bloaty.c
@@ -1155,7 +1155,7 @@ dump_strings(off_t address, off_t end_offset)
leading '+' return nonzero and set *OFFSET to the offset it denotes. */
static int
-parse_old_offset(const char *s, off_t *offset)
+parse_old_offset(char *s, off_t *offset)
{
static const struct suffix_mult Bb[] ALIGN_SUFFIX = {
{ "B", 1024 },
@@ -1181,7 +1181,8 @@ parse_old_offset(const char *s, off_t *offset)
radix = 16;
*offset = xstrtooff_sfx(s, radix, Bb);
- if (p) p[0] = '.';
+ if (p)
+ p[0] = '.'; /* undo cheating */
return (*offset >= 0);
}
@@ -1234,7 +1235,7 @@ int od_main(int argc UNUSED_PARAM, char **argv)
static const uint8_t doxn_address_pad_len_char[] ALIGN1 = {
'7', '7', '6', /* '?' */
};
- char *p;
+ const char *p;
int pos;
p = strchr(doxn, str_A[0]);
if (!p)
diff --git a/coreutils/printf.c b/coreutils/printf.c
index 4edcfa9b5..3cd48cfcc 100644
--- a/coreutils/printf.c
+++ b/coreutils/printf.c
@@ -354,7 +354,7 @@ static char **print_formatted(char *f, char **argv, int *conv_err)
/* Add "ll" if integer modifier, then print */
{
static const char format_chars[] ALIGN1 = "diouxXfeEgGcs";
- char *p = strchr(format_chars, *f);
+ char *p = (char*)strchr(format_chars, *f);
/* needed - try "printf %" without it */
if (p == NULL || *f == '\0') {
bb_error_msg("%s: invalid format", direc_start);
diff --git a/editors/awk.c b/editors/awk.c
index beba487fb..dd8f4ac42 100644
--- a/editors/awk.c
+++ b/editors/awk.c
@@ -2841,7 +2841,7 @@ static NOINLINE var *exec_builtin(node *op, var *res)
l = strlen(as[0]) - ll;
if (ll > 0 && l >= 0) {
if (!icase) {
- char *s = strstr(as[0], as[1]);
+ const char *s = strstr(as[0], as[1]);
if (s)
n = (s - as[0]) + 1;
} else {
diff --git a/klibc-utils/resume.c b/klibc-utils/resume.c
index 179413627..cb8314c75 100644
--- a/klibc-utils/resume.c
+++ b/klibc-utils/resume.c
@@ -31,7 +31,7 @@
* - /dev/ram (alias to /dev/ram0)
* - /dev/mtd
*/
-static dev_t name_to_dev_t(const char *devname)
+static dev_t name_to_dev_t(char *devname)
{
char devfile[sizeof(int)*3 * 2 + 4];
char *sysname;
diff --git a/libbb/get_last_path_component.c b/libbb/get_last_path_component.c
index 04fdf2a3e..f9d56ad23 100644
--- a/libbb/get_last_path_component.c
+++ b/libbb/get_last_path_component.c
@@ -24,12 +24,12 @@ const char* FAST_FUNC bb_basename(const char *name)
*/
char* FAST_FUNC bb_get_last_path_component_nostrip(const char *path)
{
- char *slash = strrchr(path, '/');
+ const char *slash = strrchr(path, '/');
if (!slash || (slash == path && !slash[1]))
return (char*)path;
- return slash + 1;
+ return (char*)slash + 1;
}
/*
diff --git a/libbb/replace.c b/libbb/replace.c
index bc26b04cc..273330f8a 100644
--- a/libbb/replace.c
+++ b/libbb/replace.c
@@ -28,7 +28,8 @@ unsigned FAST_FUNC count_strstr(const char *str, const char *sub)
char* FAST_FUNC xmalloc_substitute_string(const char *src, int count, const char *sub, const char *repl)
{
- char *buf, *dst, *end;
+ char *buf, *dst;
+ const char *end;
size_t sub_len = strlen(sub);
size_t repl_len = strlen(repl);
diff --git a/libbb/strrstr.c b/libbb/strrstr.c
index a173b034f..bea5d1773 100644
--- a/libbb/strrstr.c
+++ b/libbb/strrstr.c
@@ -19,10 +19,10 @@ char* FAST_FUNC strrstr(const char *haystack, const char *needle)
if (!needle[0])
return (char*)haystack + strlen(haystack);
while (1) {
- char *p = strstr(haystack, needle);
+ const char *p = strstr(haystack, needle);
if (!p)
return r;
- r = p;
+ r = (char *)p;
haystack = p + 1;
}
}
diff --git a/libbb/xfuncs_printf.c b/libbb/xfuncs_printf.c
index ed10084b3..8afa1ef68 100644
--- a/libbb/xfuncs_printf.c
+++ b/libbb/xfuncs_printf.c
@@ -379,7 +379,7 @@ void FAST_FUNC bb_unsetenv(const char *var)
char onstack[128 - 16]; /* smaller stack setup code on x86 */
char *tp;
- tp = strchr(var, '=');
+ tp = (char*)strchr(var, '=');
if (tp) {
/* In case var was putenv'ed, we can't replace '='
* with NUL and unsetenv(var) - it won't work,
diff --git a/libpwdgrp/uidgid_get.c b/libpwdgrp/uidgid_get.c
index d76eb8298..2aa444416 100644
--- a/libpwdgrp/uidgid_get.c
+++ b/libpwdgrp/uidgid_get.c
@@ -32,7 +32,8 @@ int FAST_FUNC get_uidgid(struct bb_uidgid_t *u, const char *ug)
{
struct passwd *pwd;
struct group *gr;
- char *user, *group;
+ char *user;
+ const char *group;
unsigned n;
user = (char*)ug;
diff --git a/miscutils/bc.c b/miscutils/bc.c
index 28bc40c8b..1ef8f418d 100644
--- a/miscutils/bc.c
+++ b/miscutils/bc.c
@@ -5525,7 +5525,7 @@ static void xc_program_printString(const char *str)
char c = *str++;
if (c == '\\') {
static const char esc[] ALIGN1 = "nabfrt""e\\";
- char *n;
+ const char *n;
c = *str++;
n = strchr(esc, c); // note: if c is NUL, n = \0 at end of esc
diff --git a/networking/httpd.c b/networking/httpd.c
index 3739fd55f..3b811cb71 100644
--- a/networking/httpd.c
+++ b/networking/httpd.c
@@ -1846,7 +1846,7 @@ static void send_cgi_and_exit(
*/
static NOINLINE void send_file_and_exit(const char *url, int what)
{
- char *suffix;
+ const char *suffix;
int fd;
ssize_t count;
diff --git a/networking/ifconfig.c b/networking/ifconfig.c
index 9ee232a66..32638e2a3 100644
--- a/networking/ifconfig.c
+++ b/networking/ifconfig.c
@@ -336,7 +336,7 @@ int ifconfig_main(int argc UNUSED_PARAM, char **argv)
#endif
char *p;
/*char host[128];*/
- const char *host = NULL; /* make gcc happy */
+ char *host = NULL; /* make gcc happy */
IF_FEATURE_IFCONFIG_STATUS(char *show_all_param;)
did_flags = 0;
diff --git a/networking/ifupdown.c b/networking/ifupdown.c
index bc2dca506..6832ee0d4 100644
--- a/networking/ifupdown.c
+++ b/networking/ifupdown.c
@@ -363,7 +363,7 @@ static char *parse(const char *command, struct interface_defn_t *ifd)
break;
case '%':
{
- char *nextpercent;
+ const char *nextpercent;
char *varvalue;
command++;
diff --git a/networking/nbd-client.c b/networking/nbd-client.c
index 556fa8c97..4fda66125 100644
--- a/networking/nbd-client.c
+++ b/networking/nbd-client.c
@@ -260,7 +260,7 @@ int nbdclient_main(int argc, char **argv)
// needs some other process to sit in ioctl(nbd, NBD_DO_IT).
if (fork() == 0) {
/* child */
- char *s = strrchr(device, '/');
+ const char *s = strrchr(device, '/');
sprintf(data, "/sys/block/%.32s/pid", s ? s + 1 : device);
// Is it up yet?
for (;;) {
diff --git a/networking/route.c b/networking/route.c
index 6e2d30cfd..9d9b72416 100644
--- a/networking/route.c
+++ b/networking/route.c
@@ -179,7 +179,7 @@ static NOINLINE void INET_setroute(int action, char **args)
memset(rt, 0, sizeof(*rt));
{
- const char *target = *args++;
+ char *target = *args++;
char *prefix;
/* recognize x.x.x.x/mask format. */
@@ -353,25 +353,25 @@ static NOINLINE void INET6_setroute(int action, char **args)
int prefix_len, skfd;
const char *devname;
- /* We know args isn't NULL from the check in route_main. */
- const char *target = *args++;
-
- if (strcmp(target, "default") == 0) {
- prefix_len = 0;
- memset(&sa6, 0, sizeof(sa6));
+ /* We know args isn't NULL from the check in route_main. */
+ char *target = *args++;
+
+ if (strcmp(target, "default") == 0) {
+ prefix_len = 0;
+ memset(&sa6, 0, sizeof(sa6));
+ } else {
+ char *cp;
+ cp = strchr(target, '/'); /* Yes... const to non is ok. */
+ if (cp) {
+ *cp = '\0';
+ prefix_len = xatoul_range(cp + 1, 0, 128);
} else {
- char *cp;
- cp = strchr(target, '/'); /* Yes... const to non is ok. */
- if (cp) {
- *cp = '\0';
- prefix_len = xatoul_range(cp + 1, 0, 128);
- } else {
- prefix_len = 128;
- }
- if (INET6_resolve(target, (struct sockaddr_in6 *) &sa6) < 0) {
- bb_error_msg_and_die("resolving %s", target);
- }
+ prefix_len = 128;
}
+ if (INET6_resolve(target, (struct sockaddr_in6 *) &sa6) < 0) {
+ bb_error_msg_and_die("resolving %s", target);
+ }
+ }
/* Clean out the RTREQ structure. */
memset(&rt, 0, sizeof(rt));
diff --git a/networking/udhcp/d6_socket.c b/networking/udhcp/d6_socket.c
index acf108367..83df4b396 100644
--- a/networking/udhcp/d6_socket.c
+++ b/networking/udhcp/d6_socket.c
@@ -116,7 +116,8 @@ int FAST_FUNC d6_listen_socket(int port, const char *inf)
bb_simple_perror_msg_and_die("SO_BROADCAST");
/* SO_BINDTODEVICE doesn't work on ethernet aliases (ethN:M) */
- colon = strrchr(inf, ':');
+ colon = (char*)strrchr(inf, ':');
+ /* NB: inf can really be a *const* string if it's a default, but defaults have no ':' */
if (colon)
*colon = '\0';
diff --git a/networking/udhcp/socket.c b/networking/udhcp/socket.c
index 35e10688b..5d2283eaf 100644
--- a/networking/udhcp/socket.c
+++ b/networking/udhcp/socket.c
@@ -90,7 +90,8 @@ int FAST_FUNC udhcp_listen_socket(/*uint32_t ip,*/ int port, const char *inf)
bb_simple_perror_msg_and_die("SO_BROADCAST");
/* SO_BINDTODEVICE doesn't work on ethernet aliases (ethN:M) */
- colon = strrchr(inf, ':');
+ colon = (char*)strrchr(inf, ':');
+ /* NB: inf can really be a *const* string if it's a default, but defaults have no ':' */
if (colon)
*colon = '\0';
diff --git a/printutils/lpr.c b/printutils/lpr.c
index 25b0f7235..464208c65 100644
--- a/printutils/lpr.c
+++ b/printutils/lpr.c
@@ -122,7 +122,7 @@ int lpqr_main(int argc UNUSED_PARAM, char **argv)
{
// queue name is to the left of '@'
- char *s = strchr(queue, '@');
+ char *s = (char *)strchr(queue, '@');
if (s) {
// server name is to the right of '@'
*s = '\0';
diff --git a/procps/nmeter.c b/procps/nmeter.c
index dca07eac6..fd8907aac 100644
--- a/procps/nmeter.c
+++ b/procps/nmeter.c
@@ -913,7 +913,8 @@ int nmeter_main(int argc UNUSED_PARAM, char **argv)
// parameters as seen by e.g. ps. Making a copy...
cur = xstrdup(argv[0]);
while (1) {
- char *param, *p;
+ char *param;
+ const char *p;
prev = cur;
again:
cur = strchr(cur, '%');
@@ -929,7 +930,7 @@ int nmeter_main(int argc UNUSED_PARAM, char **argv)
// format: %[foptstring]
cur++;
p = strchr(options, cur[0]);
- param = cur+1;
+ param = cur + 1;
while (cur[0] != ']') {
if (!cur[0])
bb_show_usage();
diff --git a/procps/powertop.c b/procps/powertop.c
index 6fe892540..a24748efc 100644
--- a/procps/powertop.c
+++ b/procps/powertop.c
@@ -238,7 +238,7 @@ static void save_line(const char *string, int count)
#if ENABLE_FEATURE_POWERTOP_PROCIRQ
static int is_hpet_irq(const char *name)
{
- char *p;
+ const char *p;
# if BLOATY_HPET_IRQ_NUM_DETECTION
long hpet_chan;
@@ -423,7 +423,8 @@ static NOINLINE int process_timer_stats(void)
// 1, 2159 udisks-daemon hrtimer_start_range_ns (hrtimer_wakeup)
// 331 total events, 249.059 events/sec
while (fgets(buf, sizeof(buf), fp)) {
- const char *count, *process, *func;
+ const char *process, *func;
+ char *count;
char *p;
int idx;
unsigned cnt;
diff --git a/scripts/kconfig/confdata.c b/scripts/kconfig/confdata.c
index 249a3195e..d13a7d66b 100644
--- a/scripts/kconfig/confdata.c
+++ b/scripts/kconfig/confdata.c
@@ -348,7 +348,7 @@ int conf_write(const char *name)
dirname[0] = 0;
if (name && name[0]) {
struct stat st;
- char *slash;
+ const char *slash;
if (!stat(name, &st) && S_ISDIR(st.st_mode)) {
strcpy(dirname, name);
diff --git a/shell/ash.c b/shell/ash.c
index 4f824e1b2..19623a9a0 100644
--- a/shell/ash.c
+++ b/shell/ash.c
@@ -8725,7 +8725,7 @@ test_exec(/*const char *fullname,*/ struct stat *statb)
}
/* Circular dep: find_command->find_builtin->builtintab[]->hashcmd->find_command */
-static struct builtincmd *find_builtin(const char *name);
+static const struct builtincmd *find_builtin(const char *name);
#if ENABLE_ASH_BASH_NOT_FOUND_HOOK
static int evalfun(struct funcnode *func, int argc, char **argv, int flags);
#endif
@@ -8746,7 +8746,7 @@ find_command(char *name, struct cmdentry *entry, int act, const char *path)
struct stat statb;
int e;
int updatetbl;
- struct builtincmd *bcmd;
+ const struct builtincmd *bcmd;
int len;
/* If name contains a slash, don't use PATH or hash table */
@@ -10836,10 +10836,10 @@ static const struct builtincmd builtintab[] = {
/*
* Search the table of builtin commands.
*/
-static struct builtincmd *
+static const struct builtincmd *
find_builtin(const char *name)
{
- struct builtincmd *bp;
+ const struct builtincmd *bp;
bp = bsearch(
name, builtintab, ARRAY_SIZE(builtintab), sizeof(builtintab[0]),
@@ -12927,12 +12927,12 @@ decode_dollar_squote(void)
{
static const char C_escapes[] ALIGN1 = "nrbtfav""x\\01234567";
int c, cnt;
- char *p;
char buf[4];
c = pgetc();
- p = strchr(C_escapes, c);
- if (p) {
+ if (strchr(C_escapes, c)) {
+ char *p;
+
buf[0] = c;
p = buf;
cnt = 3;
More information about the busybox-cvs
mailing list