Fix the implementation. We cannot use memchr.

This commit is contained in:
Ulrich Drepper 2001-08-21 01:40:45 +00:00
parent 16195d2026
commit 9b7783a79b
1 changed files with 19 additions and 6 deletions

View File

@ -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)