diff options
Diffstat (limited to 'newlib/libc/string/strndup_r.c')
-rw-r--r-- | newlib/libc/string/strndup_r.c | 14 |
1 files changed, 4 insertions, 10 deletions
diff --git a/newlib/libc/string/strndup_r.c b/newlib/libc/string/strndup_r.c index 2acf63dec..86d9eec44 100644 --- a/newlib/libc/string/strndup_r.c +++ b/newlib/libc/string/strndup_r.c @@ -2,22 +2,16 @@ #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) { - _CONST char *ptr = str; - size_t len; - char *copy; - - while (n-- > 0 && *ptr) - ptr++; - - len = ptr - str; - - copy = _malloc_r (reent_ptr, len + 1); + size_t len = MIN(strlen (str), n); + char *copy = _malloc_r (reent_ptr, len + 1); if (copy) { memcpy (copy, str, len); |