summaryrefslogtreecommitdiffstats
path: root/newlib/libc/string/strndup_r.c
diff options
context:
space:
mode:
Diffstat (limited to 'newlib/libc/string/strndup_r.c')
-rw-r--r--newlib/libc/string/strndup_r.c14
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);