https://bugs.gentoo.org/969697 https://github.com/vmware/open-vm-tools/pull/779 From b309f5d40619f033bbddef5c95682beed31659ac Mon Sep 17 00:00:00 2001 From: Rudi Heitbaum Date: Mon, 26 Jan 2026 11:55:03 +0000 Subject: [PATCH] fix initialization discards 'const' qualifier from pointer target type Since glibc-2.43: For ISO C23, the functions bsearch, memchr, strchr, strpbrk, strrchr, strstr, wcschr, wcspbrk, wcsrchr, wcsstr and wmemchr that return pointers into their input arrays now have definitions as macros that return a pointer to a const-qualified type when the input argument is a pointer to a const-qualified type. https://lists.gnu.org/archive/html/info-gnu/2026-01/msg00005.html Signed-off-by: Rudi Heitbaum --- open-vm-tools/lib/hgfs/hgfsEscape.c | 6 +++--- open-vm-tools/lib/hgfsServer/hgfsServerLinux.c | 2 +- open-vm-tools/lib/misc/strutil.c | 7 ++++--- open-vm-tools/lib/nicInfo/nicInfoPosix.c | 2 +- open-vm-tools/libvmtools/i18n.c | 2 +- open-vm-tools/services/plugins/vix/vixTools.c | 2 +- 6 files changed, 11 insertions(+), 10 deletions(-) diff --git a/lib/hgfs/hgfsEscape.c b/lib/hgfs/hgfsEscape.c index c4d39b12d..212ea1c79 100644 --- a/lib/hgfs/hgfsEscape.c +++ b/lib/hgfs/hgfsEscape.c @@ -175,7 +175,7 @@ HgfsAddEscapeCharacter(char const * bufIn, // IN: input name HgfsEscapeContext *escapeContext = (HgfsEscapeContext *)context; uint32 charactersToCopy; uint32 outputSpace; - char* illegal; + const char* illegal; Bool result = TRUE; ASSERT(offset >= escapeContext->processedOffset); // Scanning forward @@ -573,7 +573,7 @@ HgfsIsEscapeSequence(char const *bufIn, // IN: input name uint32 length) // IN: length of the name in characters { if (bufIn[offset] == HGFS_ESCAPE_CHAR && offset > 0) { - char *substitute; + const char *substitute; if (bufIn[offset - 1] == HGFS_ESCAPE_SUBSTITUE_CHAR && offset > 1) { /* * Possibly a valid sequence, check it must be preceded with a substitute @@ -887,7 +887,7 @@ HgfsEscapeUndoComponent(char *bufIn, // IN: Characters to be unesc size_t offset = escapePointer - bufIn; if (HgfsIsEscapeSequence(bufIn, offset, sizeIn)) { - char* substitute = strchr(HGFS_SUBSTITUTE_CHARS, bufIn[offset - 1]); + const char* substitute = strchr(HGFS_SUBSTITUTE_CHARS, bufIn[offset - 1]); if (substitute != NULL) { bufIn[offset - 1] = HGFS_ILLEGAL_CHARS[substitute - HGFS_SUBSTITUTE_CHARS]; } else if (bufIn[offset - 1] == HGFS_ESCAPE_SUBSTITUE_CHAR) { diff --git a/lib/hgfsServer/hgfsServerLinux.c b/lib/hgfsServer/hgfsServerLinux.c index 4a0bc9378..fd1db4a29 100644 --- a/lib/hgfsServer/hgfsServerLinux.c +++ b/lib/hgfsServer/hgfsServerLinux.c @@ -1364,7 +1364,7 @@ static void HgfsGetHiddenAttr(char const *fileName, // IN: Input filename HgfsFileAttrInfo *attr) // OUT: Struct to copy into { - char *baseName; + const char *baseName; ASSERT(fileName); ASSERT(attr); diff --git a/lib/misc/strutil.c b/lib/misc/strutil.c index 4fc6502e4..4be63b7b8 100644 --- a/lib/misc/strutil.c +++ b/lib/misc/strutil.c @@ -1454,6 +1454,7 @@ StrUtil_ReplaceAll(const char *orig, // IN char *result; const char *current; char *tmp; + const char *tmp2; size_t lenWhat; size_t lenWith; size_t occurrences = 0; @@ -1467,8 +1468,8 @@ StrUtil_ReplaceAll(const char *orig, // IN lenWith = strlen(with); current = orig; - while ((tmp = strstr(current, what)) != NULL) { - current = tmp + lenWhat; + while ((tmp2 = strstr(current, what)) != NULL) { + current = tmp2 + lenWhat; ++occurrences; } @@ -1695,7 +1696,7 @@ StrUtilHasListItem(char const *list, // IN: char const *item, // IN: int (*ncmp)(char const *, char const*, size_t)) // IN: { - char *foundDelim; + const char *foundDelim; int itemLen = strlen(item); if (list == NULL) { diff --git a/lib/nicInfo/nicInfoPosix.c b/lib/nicInfo/nicInfoPosix.c index 0135e6a09..922b4efe2 100644 --- a/lib/nicInfo/nicInfoPosix.c +++ b/lib/nicInfo/nicInfoPosix.c @@ -263,7 +263,7 @@ static Bool IpEntryMatchesDevice(const char *devName, const char *label) { - char *p; + const char *p; size_t n; if ((p = strchr(label, ':')) != NULL) { diff --git a/libvmtools/i18n.c b/libvmtools/i18n.c index 3085f72d7..f61406d14 100644 --- a/libvmtools/i18n.c +++ b/libvmtools/i18n.c @@ -698,7 +698,7 @@ VMTools_BindTextDomain(const char *domain, * If we couldn't find the catalog file for the user's language, see if * we can find a more generic language (e.g., for "en_US", also try "en"). */ - char *sep = Str_Strrchr(lang, '_'); + const char *sep = Str_Strrchr(lang, '_'); if (sep != NULL) { if (usrlang == NULL) { usrlang = Util_SafeStrdup(lang); diff --git a/services/plugins/vix/vixTools.c b/services/plugins/vix/vixTools.c index 654512c5e..5c79ca12a 100644 --- a/services/plugins/vix/vixTools.c +++ b/services/plugins/vix/vixTools.c @@ -930,7 +930,7 @@ VixToolsBuildUserEnvironmentTable(const char * const *envp) // IN: optional for (; NULL != *envp; envp++) { char *name; char *value; - char *whereToSplit; + const char *whereToSplit; size_t nameLen; whereToSplit = strchr(*envp, '=');