Welcome to mirror list, hosted at ThFree Co, Russian Federation.

cygwin.com/git/newlib-cygwin.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJeff Johnston <jjohnstn@redhat.com>2006-02-13 20:27:50 +0300
committerJeff Johnston <jjohnstn@redhat.com>2006-02-13 20:27:50 +0300
commitd6593503c64c42c7ce7b46716c26338856f1664c (patch)
tree38fbd34d431e1466704236159f80e301993a80a1 /newlib/libc
parent3801e59ad881f230b7b71bb580dff32d07ba2e53 (diff)
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/libc')
-rw-r--r--newlib/libc/string/strndup_r.c14
-rw-r--r--newlib/libc/string/strnlen.c2
2 files changed, 11 insertions, 5 deletions
diff --git a/newlib/libc/string/strndup_r.c b/newlib/libc/string/strndup_r.c
index 86d9eec44..2acf63dec 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 92826eeb2..ed60e9371 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;