Fix the implementation. We cannot use memchr.
authorUlrich Drepper <drepper@redhat.com>
Tue, 21 Aug 2001 01:40:45 +0000 (01:40 +0000)
committerUlrich Drepper <drepper@redhat.com>
Tue, 21 Aug 2001 01:40:45 +0000 (01:40 +0000)
string/strnlen.c

index 83a6f44..a777b35 100644 (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
 
 #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)