diff options
author | Jeff Johnston <jjohnstn@redhat.com> | 2006-02-13 17:27:50 +0000 |
---|---|---|
committer | Jeff Johnston <jjohnstn@redhat.com> | 2006-02-13 17:27:50 +0000 |
commit | d6593503c64c42c7ce7b46716c26338856f1664c (patch) | |
tree | 38fbd34d431e1466704236159f80e301993a80a1 /newlib | |
parent | 3801e59ad881f230b7b71bb580dff32d07ba2e53 (diff) | |
download | newlib-d6593503c64c42c7ce7b46716c26338856f1664c.zip newlib-d6593503c64c42c7ce7b46716c26338856f1664c.tar.gz newlib-d6593503c64c42c7ce7b46716c26338856f1664c.tar.bz2 |
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.
Diffstat (limited to 'newlib')
-rw-r--r-- | newlib/ChangeLog | 8 | ||||
-rw-r--r-- | newlib/libc/string/strndup_r.c | 14 | ||||
-rw-r--r-- | newlib/libc/string/strnlen.c | 2 |
3 files changed, 19 insertions, 5 deletions
diff --git a/newlib/ChangeLog b/newlib/ChangeLog index 8f00398..eb81765 100644 --- a/newlib/ChangeLog +++ b/newlib/ChangeLog @@ -1,3 +1,11 @@ +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. diff --git a/newlib/libc/string/strndup_r.c b/newlib/libc/string/strndup_r.c index 86d9eec..2acf63d 100644 --- a/newlib/libc/string/strndup_r.c +++ b/newlib/libc/string/strndup_r.c @@ -2,16 +2,22 @@ #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); diff --git a/newlib/libc/string/strnlen.c b/newlib/libc/string/strnlen.c index 92826ee..ed60e93 100644 --- a/newlib/libc/string/strnlen.c +++ b/newlib/libc/string/strnlen.c @@ -42,7 +42,7 @@ _DEFUN (strnlen, (str, n), { _CONST char *start = str; - while (*str && n-- > 0) + while (n-- > 0 && *str) str++; return str - start; |