David Carne <davidcarne@gmail.com>
* libc/string/strndup_r.c (_strndup_r): Use strnlen logic
instead of strlen to determine number of bytes to copy.
* libc/string/strnlen.c (strnlen): Fix so check for max limit occurs
before looking at storage location.
+2006-02-13 Jeff Johnston <jjohnstn@redhat.com>
+ David Carne <davidcarne@gmail.com>
+
+ * libc/string/strndup_r.c (_strndup_r): Use strnlen logic
+ instead of strlen to determine number of bytes to copy.
+ * libc/string/strnlen.c (strnlen): Fix so check for max limit occurs
+ before looking at storage location.
+
2006-02-07 Paul Brook <paul@codesourcery.com>
* libc/machine/arm/setjmp.S: Add Thumb-2 support.
#include <stdlib.h>
#include <string.h>
-#define MIN(a,b) ((a) < (b) ? (a) : (b))
-
char *
_DEFUN (_strndup_r, (reent_ptr, str, n),
struct _reent *reent_ptr _AND
_CONST char *str _AND
size_t n)
{
- size_t len = MIN(strlen (str), n);
- char *copy = _malloc_r (reent_ptr, len + 1);
+ _CONST char *ptr = str;
+ size_t len;
+ char *copy;
+
+ while (n-- > 0 && *ptr)
+ ptr++;
+
+ len = ptr - str;
+
+ copy = _malloc_r (reent_ptr, len + 1);
if (copy)
{
memcpy (copy, str, len);
{
_CONST char *start = str;
- while (*str && n-- > 0)
+ while (n-- > 0 && *str)
str++;
return str - start;