mirror of
https://sourceware.org/git/glibc.git
synced 2024-11-05 21:00:05 +00:00
Fix the implementation. We cannot use memchr.
This commit is contained in:
parent
16195d2026
commit
9b7783a79b
@ -1,5 +1,5 @@
|
||||
/* Find the length of STRING, but scan at most MAXLEN characters.
|
||||
Copyright (C) 1996, 1997, 1998, 2000 Free Software Foundation, Inc.
|
||||
Copyright (C) 1996, 1997, 1998, 2000, 2001 Free Software Foundation, Inc.
|
||||
This file is part of the GNU C Library.
|
||||
|
||||
The GNU C Library is free software; you can redistribute it and/or
|
||||
@ -19,13 +19,26 @@
|
||||
|
||||
#include <string.h>
|
||||
|
||||
/* Find the length of STRING, but scan at most MAXLEN characters.
|
||||
If no '\0' terminator is found in that many characters, return MAXLEN. */
|
||||
/* Find the length of S, but scan at most MAXLEN characters. If no
|
||||
'\0' terminator is found in that many characters, return MAXLEN. */
|
||||
|
||||
size_t
|
||||
__strnlen (const char *string, size_t maxlen)
|
||||
__strnlen (const char *s, size_t maxlen)
|
||||
{
|
||||
const char *end = memchr (string, '\0', maxlen);
|
||||
return end ? (size_t) (end - string) : maxlen;
|
||||
size_t len = 0;
|
||||
|
||||
while (s[len] != '\0' && maxlen > 0)
|
||||
{
|
||||
if (s[++len] == '\0' || --maxlen == 0)
|
||||
return len;
|
||||
if (s[++len] == '\0' || --maxlen == 0)
|
||||
return len;
|
||||
if (s[++len] == '\0' || --maxlen == 0)
|
||||
return len;
|
||||
++len;
|
||||
--maxlen;
|
||||
}
|
||||
|
||||
return len;
|
||||
}
|
||||
weak_alias (__strnlen, strnlen)
|
||||
|
Loading…
Reference in New Issue
Block a user