On Sat, May 30, 2026, 12:28 AM Bin Guo <[email protected]> wrote:
> There are only three call sites, and strnlen() is available on all > supported platforms (POSIX.1-2008, Windows via UCRT, MinGW). Remove > the hand-rolled wrapper and use the standard function directly. > > While here, align bsd-user/uaccess.c to use size_t for max_len/len, > matching linux-user/uaccess.c and eliminating a signed/unsigned mismatch. > > Also remove the stale qemu_strnlen() entry from docs/devel/style.rst. > > Suggested-by: Philippe Mathieu-Daudé <[email protected]> > Reviewed-by: Philippe Mathieu-Daudé <[email protected]> > Signed-off-by: Bin Guo <[email protected]> > --- > bsd-user/uaccess.c | 4 ++-- > docs/devel/style.rst | 1 - > include/qemu/cutils.h | 17 +---------------- > linux-user/uaccess.c | 2 +- > util/cutils.c | 15 +-------------- > 5 files changed, 5 insertions(+), 34 deletions(-) > Reviewed-by: Warner Losh <[email protected]> Normally not a fan of while I'm here fixes, but this one is correct and too small to split out. Warner diff --git a/bsd-user/uaccess.c b/bsd-user/uaccess.c > index 89163257f4..7ad4b580f4 100644 > --- a/bsd-user/uaccess.c > +++ b/bsd-user/uaccess.c > @@ -43,7 +43,7 @@ abi_long target_strlen(abi_ulong guest_addr1) > { > uint8_t *ptr; > abi_ulong guest_addr; > - int max_len, len; > + size_t max_len, len; > > guest_addr = guest_addr1; > for (;;) { > @@ -51,7 +51,7 @@ abi_long target_strlen(abi_ulong guest_addr1) > ptr = lock_user(VERIFY_READ, guest_addr, max_len, 1); > if (!ptr) > return -TARGET_EFAULT; > - len = qemu_strnlen((const char *)ptr, max_len); > + len = strnlen((const char *)ptr, max_len); > unlock_user(ptr, guest_addr, 0); > guest_addr += len; > /* we don't allow wrapping or integer overflow */ > diff --git a/docs/devel/style.rst b/docs/devel/style.rst > index d025933808..0b854ae042 100644 > --- a/docs/devel/style.rst > +++ b/docs/devel/style.rst > @@ -519,7 +519,6 @@ QEMU provides other useful string functions: > > int strstart(const char *str, const char *val, const char **ptr) > int stristart(const char *str, const char *val, const char **ptr) > - int qemu_strnlen(const char *s, int max_len) > > There are also replacement character processing macros for isxyz and > toxyz, > so instead of e.g. isalnum you should use qemu_isalnum. > diff --git a/include/qemu/cutils.h b/include/qemu/cutils.h > index 36c68ce86c..d249f22676 100644 > --- a/include/qemu/cutils.h > +++ b/include/qemu/cutils.h > @@ -101,22 +101,7 @@ int strstart(const char *str, const char *val, const > char **ptr); > * false otherwise. > */ > int stristart(const char *str, const char *val, const char **ptr); > -/** > - * qemu_strnlen: > - * @s: string > - * @max_len: maximum number of bytes in @s to scan > - * > - * Return the length of the string @s, like strlen(), but do not > - * examine more than @max_len bytes of the memory pointed to by @s. > - * If no NUL terminator is found within @max_len bytes, then return > - * @max_len instead. > - * > - * This function has the same behaviour as the POSIX strnlen() > - * function. > - * > - * Returns: length of @s in bytes, or @max_len, whichever is smaller. > - */ > -int qemu_strnlen(const char *s, int max_len); > + > /** > * qemu_strsep: > * @input: pointer to string to parse > diff --git a/linux-user/uaccess.c b/linux-user/uaccess.c > index 27e841e651..f9bd713edd 100644 > --- a/linux-user/uaccess.c > +++ b/linux-user/uaccess.c > @@ -99,7 +99,7 @@ ssize_t target_strlen(abi_ulong guest_addr1) > ptr = lock_user(VERIFY_READ, guest_addr, max_len, 1); > if (!ptr) > return -TARGET_EFAULT; > - len = qemu_strnlen((const char *)ptr, max_len); > + len = strnlen((const char *)ptr, max_len); > unlock_user(ptr, guest_addr, 0); > guest_addr += len; > /* we don't allow wrapping or integer overflow */ > diff --git a/util/cutils.c b/util/cutils.c > index 9803f11a59..f39a97e509 100644 > --- a/util/cutils.c > +++ b/util/cutils.c > @@ -54,7 +54,7 @@ > > void strpadcpy(char *buf, int buf_size, const char *str, char pad) > { > - int len = qemu_strnlen(str, buf_size); > + size_t len = strnlen(str, buf_size); > memcpy(buf, str, len); > memset(buf + len, pad, buf_size - len); > } > @@ -118,19 +118,6 @@ int stristart(const char *str, const char *val, const > char **ptr) > return 1; > } > > -/* XXX: use host strnlen if available ? */ > -int qemu_strnlen(const char *s, int max_len) > -{ > - int i; > - > - for(i = 0; i < max_len; i++) { > - if (s[i] == '\0') { > - break; > - } > - } > - return i; > -} > - > char *qemu_strsep(char **input, const char *delim) > { > char *result = *input; > -- > 2.50.1 (Apple Git-155) > >
