summaryrefslogtreecommitdiff
path: root/string
diff options
context:
space:
mode:
authorUlrich Drepper <drepper@redhat.com>2001-11-03 09:05:11 +0000
committerUlrich Drepper <drepper@redhat.com>2001-11-03 09:05:11 +0000
commitfb4fb5428d50d3d0c092a60f5ef4410f250ed2c4 (patch)
tree5729b64ff57a4aa16283a7f2904c7acba8fca711 /string
parent5f73e77144a76a585f108c971e6c7aa5c9008944 (diff)
Update.
2001-11-02 Jakub Jelinek <jakub@redhat.com> * string/bits/string2.h (__strndup): If n is smaller than len, set len to n + 1. * string/tester.c (test_strndup): New function. (main): Call it. * sunrpc/rpc_main.c: Optimize variable definitions a bit.
Diffstat (limited to 'string')
-rw-r--r--string/bits/string2.h2
-rw-r--r--string/tester.c27
2 files changed, 28 insertions, 1 deletions
diff --git a/string/bits/string2.h b/string/bits/string2.h
index aafb578915..e8ac063e03 100644
--- a/string/bits/string2.h
+++ b/string/bits/string2.h
@@ -1216,7 +1216,7 @@ extern char *__strndup (__const char *__string, size_t __n)
size_t __n = (n); \
char *__retval; \
if (__n < __len) \
- __len = __n; \
+ __len = __n + 1; \
__retval = (char *) malloc (__len); \
if (__retval != NULL) \
{ \
diff --git a/string/tester.c b/string/tester.c
index bd2445f0d1..39ae0d837e 100644
--- a/string/tester.c
+++ b/string/tester.c
@@ -1257,6 +1257,30 @@ test_bzero (void)
}
static void
+test_strndup (void)
+{
+ char *p, *q;
+ it = "strndup";
+ p = strndup("abcdef", 12);
+ check(p != NULL, 1);
+ if (p != NULL)
+ {
+ equal(p, "abcdef", 2);
+ q = strndup(p + 1, 2);
+ check(q != NULL, 3);
+ if (q != NULL)
+ equal(q, "bc", 4);
+ free (q);
+ }
+ free (p);
+ p = strndup("abc def", 3);
+ check(p != NULL, 5);
+ if (p != NULL)
+ equal(p, "abc", 6);
+ free (p);
+}
+
+static void
test_bcmp (void)
{
it = "bcmp";
@@ -1382,6 +1406,9 @@ main (void)
/* bcmp - somewhat like memcmp. */
test_bcmp ();
+ /* strndup. */
+ test_strndup ();
+
/* strerror - VERY system-dependent. */
test_strerror ();