Ver Fonte

make use of memchr() in strnlen() replacement after all

turns out the comment advising against it was bogus - unlike for
memcmp(), the standard does indeed prescribe that the memchr()
implementation may not read past the first occurrence of the searched
char.
Oswald Buddenhagen há 8 anos atrás
pai
commit
3eea668052
1 ficheiros alterados com 2 adições e 5 exclusões
  1. 2 5
      src/util.c

+ 2 - 5
src/util.c

@@ -225,11 +225,8 @@ memrchr( const void *s, int c, size_t n )
 size_t
 strnlen( const char *str, size_t maxlen )
 {
-	size_t len;
-
-	/* It's tempting to use memchr(), but it's allowed to read past the end of the actual string. */
-	for (len = 0; len < maxlen && str[len]; len++) {}
-	return len;
+	const char *estr = memchr( str, 0, maxlen );
+	return estr ? (size_t)(estr - str) : maxlen;
 }
 
 #endif