655 lines
19 KiB
Diff
655 lines
19 KiB
Diff
|
From 56ce01906ecb0a3e04411f8ceb60b27f4877f070 Mon Sep 17 00:00:00 2001
|
|||
|
From: "H.J. Lu" <hjl.tools@gmail.com>
|
|||
|
Date: Wed, 23 Aug 2017 08:22:52 -0700
|
|||
|
Subject: [PATCH 37] string/stratcliff.c: Replace int with size_t [BZ
|
|||
|
#21982]
|
|||
|
MIME-Version: 1.0
|
|||
|
Content-Type: text/plain; charset=UTF-8
|
|||
|
Content-Transfer-Encoding: 8bit
|
|||
|
|
|||
|
Fix GCC 7 errors when string/stratcliff.c is compiled with -O3:
|
|||
|
|
|||
|
stratcliff.c: In function ‘do_test’:
|
|||
|
cc1: error: assuming signed overflow does not occur when assuming that (X - c) <= X is always true [-Werror=strict-overflow]
|
|||
|
|
|||
|
[BZ #21982]
|
|||
|
* string/stratcliff.c (do_test): Declare size, nchars, inner,
|
|||
|
middle and outer with size_t instead of int. Repleace %d and
|
|||
|
%Zd with %zu in printf. Update "MAX (0, nchars - 128)" and
|
|||
|
"MAX (outer, nchars - 64)" to support unsigned outer and
|
|||
|
nchars. Also exit loop when outer == 0.
|
|||
|
|
|||
|
(cherry picked from commit 376b40a27a6783ea7f73ae577be320df66aeb36d)
|
|||
|
---
|
|||
|
ChangeLog | 9 ++
|
|||
|
string/stratcliff.c | 276 +++++++++++++++++++++++++++++++---------------------
|
|||
|
2 files changed, 176 insertions(+), 109 deletions(-)
|
|||
|
|
|||
|
diff --git a/ChangeLog b/ChangeLog
|
|||
|
index c180f8dbca..84721f6265 100644
|
|||
|
--- a/ChangeLog
|
|||
|
+++ b/ChangeLog
|
|||
|
@@ -1,3 +1,12 @@
|
|||
|
+2017-09-11 H.J. Lu <hongjiu.lu@intel.com>
|
|||
|
+
|
|||
|
+ [BZ #21982]
|
|||
|
+ * string/stratcliff.c (do_test): Declare size, nchars, inner,
|
|||
|
+ middle and outer with size_t instead of int. Repleace %d and
|
|||
|
+ %Zd with %zu in printf. Update "MAX (0, nchars - 128)" and
|
|||
|
+ "MAX (outer, nchars - 64)" to support unsigned outer and
|
|||
|
+ nchars. Also exit loop when outer == 0.
|
|||
|
+
|
|||
|
2017-09-08 Markus Trippelsdorf <markus@trippelsdorf.de>
|
|||
|
|
|||
|
* sysdeps/x86_64/fpu/libm-test-ulps: Update for AMD Ryzen.
|
|||
|
diff --git a/string/stratcliff.c b/string/stratcliff.c
|
|||
|
index e28b0c5058..4320336c9a 100644
|
|||
|
--- a/string/stratcliff.c
|
|||
|
+++ b/string/stratcliff.c
|
|||
|
@@ -58,8 +58,8 @@
|
|||
|
int
|
|||
|
do_test (void)
|
|||
|
{
|
|||
|
- int size = sysconf (_SC_PAGESIZE);
|
|||
|
- int nchars = size / sizeof (CHAR);
|
|||
|
+ size_t size = sysconf (_SC_PAGESIZE);
|
|||
|
+ size_t nchars = size / sizeof (CHAR);
|
|||
|
CHAR *adr;
|
|||
|
CHAR *dest;
|
|||
|
int result = 0;
|
|||
|
@@ -80,7 +80,17 @@ do_test (void)
|
|||
|
}
|
|||
|
else
|
|||
|
{
|
|||
|
- int inner, middle, outer;
|
|||
|
+ size_t inner, middle, outer, nchars64, max128;
|
|||
|
+
|
|||
|
+ if (nchars > 64)
|
|||
|
+ nchars64 = nchars - 64;
|
|||
|
+ else
|
|||
|
+ nchars64 = 0;
|
|||
|
+
|
|||
|
+ if (nchars > 128)
|
|||
|
+ max128 = nchars - 128;
|
|||
|
+ else
|
|||
|
+ max128 = 0;
|
|||
|
|
|||
|
mprotect (adr, size, PROT_NONE);
|
|||
|
mprotect (adr + 2 * nchars, size, PROT_NONE);
|
|||
|
@@ -93,59 +103,65 @@ do_test (void)
|
|||
|
MEMSET (adr, L('T'), nchars);
|
|||
|
|
|||
|
/* strlen/wcslen test */
|
|||
|
- for (outer = nchars - 1; outer >= MAX (0, nchars - 128); --outer)
|
|||
|
+ for (outer = nchars - 1; outer >= max128; --outer)
|
|||
|
{
|
|||
|
- for (inner = MAX (outer, nchars - 64); inner < nchars; ++inner)
|
|||
|
+ for (inner = MAX (outer, nchars64); inner < nchars; ++inner)
|
|||
|
{
|
|||
|
adr[inner] = L('\0');
|
|||
|
|
|||
|
if (STRLEN (&adr[outer]) != (size_t) (inner - outer))
|
|||
|
{
|
|||
|
- printf ("%s flunked for outer = %d, inner = %d\n",
|
|||
|
+ printf ("%s flunked for outer = %zu, inner = %zu\n",
|
|||
|
STRINGIFY (STRLEN), outer, inner);
|
|||
|
result = 1;
|
|||
|
}
|
|||
|
|
|||
|
adr[inner] = L('T');
|
|||
|
}
|
|||
|
+ if (outer == 0)
|
|||
|
+ break;
|
|||
|
}
|
|||
|
|
|||
|
/* strnlen/wcsnlen test */
|
|||
|
- for (outer = nchars; outer >= MAX (0, nchars - 128); --outer)
|
|||
|
+ for (outer = nchars; outer >= max128; --outer)
|
|||
|
{
|
|||
|
- for (inner = MAX (outer, nchars - 64); inner < nchars; ++inner)
|
|||
|
+ for (inner = MAX (outer, nchars64); inner < nchars; ++inner)
|
|||
|
{
|
|||
|
adr[inner] = L('\0');
|
|||
|
|
|||
|
if (STRNLEN (&adr[outer], inner - outer + 1)
|
|||
|
!= (size_t) (inner - outer))
|
|||
|
{
|
|||
|
- printf ("%s flunked for outer = %d, inner = %d\n",
|
|||
|
+ printf ("%s flunked for outer = %zu, inner = %zu\n",
|
|||
|
STRINGIFY (STRNLEN), outer, inner);
|
|||
|
result = 1;
|
|||
|
}
|
|||
|
|
|||
|
adr[inner] = L('T');
|
|||
|
}
|
|||
|
+ if (outer == 0)
|
|||
|
+ break;
|
|||
|
}
|
|||
|
- for (outer = nchars; outer >= MAX (0, nchars - 128); --outer)
|
|||
|
+ for (outer = nchars; outer >= max128; --outer)
|
|||
|
{
|
|||
|
- for (inner = MAX (outer, nchars - 64); inner <= nchars; ++inner)
|
|||
|
+ for (inner = MAX (outer, nchars64); inner <= nchars; ++inner)
|
|||
|
{
|
|||
|
if (STRNLEN (&adr[outer], inner - outer)
|
|||
|
!= (size_t) (inner - outer))
|
|||
|
{
|
|||
|
- printf ("%s flunked bounded for outer = %d, inner = %d\n",
|
|||
|
+ printf ("%s flunked bounded for outer = %zu, inner = %zu\n",
|
|||
|
STRINGIFY (STRNLEN), outer, inner);
|
|||
|
result = 1;
|
|||
|
}
|
|||
|
}
|
|||
|
+ if (outer == 0)
|
|||
|
+ break;
|
|||
|
}
|
|||
|
|
|||
|
/* strchr/wcschr test */
|
|||
|
- for (outer = nchars - 1; outer >= MAX (0, nchars - 128); --outer)
|
|||
|
+ for (outer = nchars - 1; outer >= max128; --outer)
|
|||
|
{
|
|||
|
- for (middle = MAX (outer, nchars - 64); middle < nchars; ++middle)
|
|||
|
+ for (middle = MAX (outer, nchars64); middle < nchars; ++middle)
|
|||
|
{
|
|||
|
for (inner = middle; inner < nchars; ++inner)
|
|||
|
{
|
|||
|
@@ -158,8 +174,8 @@ do_test (void)
|
|||
|
|| (inner != middle
|
|||
|
&& (cp - &adr[outer]) != middle - outer))
|
|||
|
{
|
|||
|
- printf ("%s flunked for outer = %d, middle = %d, "
|
|||
|
- "inner = %d\n",
|
|||
|
+ printf ("%s flunked for outer = %zu, middle = %zu, "
|
|||
|
+ "inner = %zu\n",
|
|||
|
STRINGIFY (STRCHR), outer, middle, inner);
|
|||
|
result = 1;
|
|||
|
}
|
|||
|
@@ -168,6 +184,8 @@ do_test (void)
|
|||
|
adr[middle] = L('T');
|
|||
|
}
|
|||
|
}
|
|||
|
+ if (outer == 0)
|
|||
|
+ break;
|
|||
|
}
|
|||
|
|
|||
|
/* Special test. */
|
|||
|
@@ -180,9 +198,9 @@ do_test (void)
|
|||
|
}
|
|||
|
|
|||
|
/* strrchr/wcsrchr test */
|
|||
|
- for (outer = nchars - 1; outer >= MAX (0, nchars - 128); --outer)
|
|||
|
+ for (outer = nchars - 1; outer >= max128; --outer)
|
|||
|
{
|
|||
|
- for (middle = MAX (outer, nchars - 64); middle < nchars; ++middle)
|
|||
|
+ for (middle = MAX (outer, nchars64); middle < nchars; ++middle)
|
|||
|
{
|
|||
|
for (inner = middle; inner < nchars; ++inner)
|
|||
|
{
|
|||
|
@@ -195,8 +213,8 @@ do_test (void)
|
|||
|
|| (inner != middle
|
|||
|
&& (cp - &adr[outer]) != middle - outer))
|
|||
|
{
|
|||
|
- printf ("%s flunked for outer = %d, middle = %d, "
|
|||
|
- "inner = %d\n",
|
|||
|
+ printf ("%s flunked for outer = %zu, middle = %zu, "
|
|||
|
+ "inner = %zu\n",
|
|||
|
STRINGIFY (STRRCHR), outer, middle, inner);
|
|||
|
result = 1;
|
|||
|
}
|
|||
|
@@ -205,12 +223,14 @@ do_test (void)
|
|||
|
adr[middle] = L('T');
|
|||
|
}
|
|||
|
}
|
|||
|
+ if (outer == 0)
|
|||
|
+ break;
|
|||
|
}
|
|||
|
|
|||
|
/* memchr test */
|
|||
|
- for (outer = nchars - 1; outer >= MAX (0, nchars - 128); --outer)
|
|||
|
+ for (outer = nchars - 1; outer >= max128; --outer)
|
|||
|
{
|
|||
|
- for (middle = MAX (outer, nchars - 64); middle < nchars; ++middle)
|
|||
|
+ for (middle = MAX (outer, nchars64); middle < nchars; ++middle)
|
|||
|
{
|
|||
|
adr[middle] = L('V');
|
|||
|
|
|||
|
@@ -218,32 +238,36 @@ do_test (void)
|
|||
|
|
|||
|
if (cp - &adr[outer] != middle - outer)
|
|||
|
{
|
|||
|
- printf ("%s flunked for outer = %d, middle = %d\n",
|
|||
|
+ printf ("%s flunked for outer = %zu, middle = %zu\n",
|
|||
|
STRINGIFY (MEMCHR), outer, middle);
|
|||
|
result = 1;
|
|||
|
}
|
|||
|
|
|||
|
adr[middle] = L('T');
|
|||
|
}
|
|||
|
+ if (outer == 0)
|
|||
|
+ break;
|
|||
|
}
|
|||
|
- for (outer = nchars; outer >= MAX (0, nchars - 128); --outer)
|
|||
|
+ for (outer = nchars; outer >= max128; --outer)
|
|||
|
{
|
|||
|
CHAR *cp = MEMCHR (&adr[outer], L('V'), nchars - outer);
|
|||
|
|
|||
|
if (cp != NULL)
|
|||
|
{
|
|||
|
- printf ("%s flunked for outer = %d\n",
|
|||
|
+ printf ("%s flunked for outer = %zu\n",
|
|||
|
STRINGIFY (MEMCHR), outer);
|
|||
|
result = 1;
|
|||
|
}
|
|||
|
+ if (outer == 0)
|
|||
|
+ break;
|
|||
|
}
|
|||
|
|
|||
|
/* These functions only exist for single-byte characters. */
|
|||
|
#ifndef WCSTEST
|
|||
|
/* rawmemchr test */
|
|||
|
- for (outer = nchars - 1; outer >= MAX (0, nchars - 128); --outer)
|
|||
|
+ for (outer = nchars - 1; outer >= max128; --outer)
|
|||
|
{
|
|||
|
- for (middle = MAX (outer, nchars - 64); middle < nchars; ++middle)
|
|||
|
+ for (middle = MAX (outer, nchars64); middle < nchars; ++middle)
|
|||
|
{
|
|||
|
adr[middle] = L('V');
|
|||
|
|
|||
|
@@ -251,19 +275,21 @@ do_test (void)
|
|||
|
|
|||
|
if (cp - &adr[outer] != middle - outer)
|
|||
|
{
|
|||
|
- printf ("%s flunked for outer = %d, middle = %d\n",
|
|||
|
+ printf ("%s flunked for outer = %zu, middle = %zu\n",
|
|||
|
STRINGIFY (rawmemchr), outer, middle);
|
|||
|
result = 1;
|
|||
|
}
|
|||
|
|
|||
|
adr[middle] = L('T');
|
|||
|
}
|
|||
|
+ if (outer == 0)
|
|||
|
+ break;
|
|||
|
}
|
|||
|
|
|||
|
/* memrchr test */
|
|||
|
- for (outer = nchars - 1; outer >= MAX (0, nchars - 128); --outer)
|
|||
|
+ for (outer = nchars - 1; outer >= max128; --outer)
|
|||
|
{
|
|||
|
- for (middle = MAX (outer, nchars - 64); middle < nchars; ++middle)
|
|||
|
+ for (middle = MAX (outer, nchars64); middle < nchars; ++middle)
|
|||
|
{
|
|||
|
adr[middle] = L('V');
|
|||
|
|
|||
|
@@ -271,44 +297,50 @@ do_test (void)
|
|||
|
|
|||
|
if (cp - &adr[outer] != middle - outer)
|
|||
|
{
|
|||
|
- printf ("%s flunked for outer = %d, middle = %d\n",
|
|||
|
+ printf ("%s flunked for outer = %zu, middle = %zu\n",
|
|||
|
STRINGIFY (memrchr), outer, middle);
|
|||
|
result = 1;
|
|||
|
}
|
|||
|
|
|||
|
adr[middle] = L('T');
|
|||
|
}
|
|||
|
+ if (outer == 0)
|
|||
|
+ break;
|
|||
|
}
|
|||
|
- for (outer = nchars; outer >= MAX (0, nchars - 128); --outer)
|
|||
|
+ for (outer = nchars; outer >= max128; --outer)
|
|||
|
{
|
|||
|
CHAR *cp = memrchr (&adr[outer], L('V'), nchars - outer);
|
|||
|
|
|||
|
if (cp != NULL)
|
|||
|
{
|
|||
|
- printf ("%s flunked for outer = %d\n",
|
|||
|
+ printf ("%s flunked for outer = %zu\n",
|
|||
|
STRINGIFY (memrchr), outer);
|
|||
|
result = 1;
|
|||
|
}
|
|||
|
+ if (outer == 0)
|
|||
|
+ break;
|
|||
|
}
|
|||
|
#endif
|
|||
|
|
|||
|
/* strcpy/wcscpy test */
|
|||
|
- for (outer = nchars - 1; outer >= MAX (0, nchars - 128); --outer)
|
|||
|
+ for (outer = nchars - 1; outer >= max128; --outer)
|
|||
|
{
|
|||
|
- for (inner = MAX (outer, nchars - 64); inner < nchars; ++inner)
|
|||
|
+ for (inner = MAX (outer, nchars64); inner < nchars; ++inner)
|
|||
|
{
|
|||
|
adr[inner] = L('\0');
|
|||
|
|
|||
|
if (STRCPY (dest, &adr[outer]) != dest
|
|||
|
|| STRLEN (dest) != (size_t) (inner - outer))
|
|||
|
{
|
|||
|
- printf ("%s flunked for outer = %d, inner = %d\n",
|
|||
|
+ printf ("%s flunked for outer = %zu, inner = %zu\n",
|
|||
|
STRINGIFY (STRCPY), outer, inner);
|
|||
|
result = 1;
|
|||
|
}
|
|||
|
|
|||
|
adr[inner] = L('T');
|
|||
|
}
|
|||
|
+ if (outer == 0)
|
|||
|
+ break;
|
|||
|
}
|
|||
|
|
|||
|
/* strcmp/wcscmp tests */
|
|||
|
@@ -322,14 +354,14 @@ do_test (void)
|
|||
|
|
|||
|
if (STRCMP (adr + middle, dest + nchars - outer) <= 0)
|
|||
|
{
|
|||
|
- printf ("%s 1 flunked for outer = %d, middle = %d\n",
|
|||
|
+ printf ("%s 1 flunked for outer = %zu, middle = %zu\n",
|
|||
|
STRINGIFY (STRCMP), outer, middle);
|
|||
|
result = 1;
|
|||
|
}
|
|||
|
|
|||
|
if (STRCMP (dest + nchars - outer, adr + middle) >= 0)
|
|||
|
{
|
|||
|
- printf ("%s 2 flunked for outer = %d, middle = %d\n",
|
|||
|
+ printf ("%s 2 flunked for outer = %zu, middle = %zu\n",
|
|||
|
STRINGIFY (STRCMP), outer, middle);
|
|||
|
result = 1;
|
|||
|
}
|
|||
|
@@ -348,16 +380,16 @@ do_test (void)
|
|||
|
{
|
|||
|
if (STRNCMP (adr + middle, dest + nchars - outer, inner) != 0)
|
|||
|
{
|
|||
|
- printf ("%s 1 flunked for outer = %d, middle = %d, "
|
|||
|
- "inner = %d\n",
|
|||
|
+ printf ("%s 1 flunked for outer = %zu, middle = %zu, "
|
|||
|
+ "inner = %zu\n",
|
|||
|
STRINGIFY (STRNCMP), outer, middle, inner);
|
|||
|
result = 1;
|
|||
|
}
|
|||
|
|
|||
|
if (STRNCMP (dest + nchars - outer, adr + middle, inner) != 0)
|
|||
|
{
|
|||
|
- printf ("%s 2 flunked for outer = %d, middle = %d, "
|
|||
|
- "inner = %d\n",
|
|||
|
+ printf ("%s 2 flunked for outer = %zu, middle = %zu, "
|
|||
|
+ "inner = %zu\n",
|
|||
|
STRINGIFY (STRNCMP), outer, middle, inner);
|
|||
|
result = 1;
|
|||
|
}
|
|||
|
@@ -365,14 +397,14 @@ do_test (void)
|
|||
|
|
|||
|
if (STRNCMP (adr + middle, dest + nchars - outer, outer) >= 0)
|
|||
|
{
|
|||
|
- printf ("%s 1 flunked for outer = %d, middle = %d, full\n",
|
|||
|
+ printf ("%s 1 flunked for outer = %zu, middle = %zu, full\n",
|
|||
|
STRINGIFY (STRNCMP), outer, middle);
|
|||
|
result = 1;
|
|||
|
}
|
|||
|
|
|||
|
if (STRNCMP (dest + nchars - outer, adr + middle, outer) <= 0)
|
|||
|
{
|
|||
|
- printf ("%s 2 flunked for outer = %d, middle = %d, full\n",
|
|||
|
+ printf ("%s 2 flunked for outer = %zu, middle = %zu, full\n",
|
|||
|
STRINGIFY (STRNCMP), outer, middle);
|
|||
|
result = 1;
|
|||
|
}
|
|||
|
@@ -380,7 +412,7 @@ do_test (void)
|
|||
|
|
|||
|
/* strncpy/wcsncpy tests */
|
|||
|
adr[nchars - 1] = L('T');
|
|||
|
- for (outer = nchars; outer >= MAX (0, nchars - 128); --outer)
|
|||
|
+ for (outer = nchars; outer >= max128; --outer)
|
|||
|
{
|
|||
|
size_t len;
|
|||
|
|
|||
|
@@ -389,17 +421,19 @@ do_test (void)
|
|||
|
if (STRNCPY (dest, &adr[outer], len) != dest
|
|||
|
|| MEMCMP (dest, &adr[outer], len) != 0)
|
|||
|
{
|
|||
|
- printf ("outer %s flunked for outer = %d, len = %Zd\n",
|
|||
|
+ printf ("outer %s flunked for outer = %zu, len = %zu\n",
|
|||
|
STRINGIFY (STRNCPY), outer, len);
|
|||
|
result = 1;
|
|||
|
}
|
|||
|
}
|
|||
|
+ if (outer == 0)
|
|||
|
+ break;
|
|||
|
}
|
|||
|
adr[nchars - 1] = L('\0');
|
|||
|
|
|||
|
- for (outer = nchars - 1; outer >= MAX (0, nchars - 128); --outer)
|
|||
|
+ for (outer = nchars - 1; outer >= max128; --outer)
|
|||
|
{
|
|||
|
- for (inner = MAX (outer, nchars - 64); inner < nchars; ++inner)
|
|||
|
+ for (inner = MAX (outer, nchars64); inner < nchars; ++inner)
|
|||
|
{
|
|||
|
size_t len;
|
|||
|
|
|||
|
@@ -413,8 +447,8 @@ do_test (void)
|
|||
|
|| (inner - outer < len
|
|||
|
&& STRLEN (dest) != (inner - outer)))
|
|||
|
{
|
|||
|
- printf ("%s flunked for outer = %d, inner = %d, "
|
|||
|
- "len = %Zd\n",
|
|||
|
+ printf ("%s flunked for outer = %zu, inner = %zu, "
|
|||
|
+ "len = %zu\n",
|
|||
|
STRINGIFY (STRNCPY), outer, inner, len);
|
|||
|
result = 1;
|
|||
|
}
|
|||
|
@@ -424,8 +458,8 @@ do_test (void)
|
|||
|
|| (inner - outer < len
|
|||
|
&& STRLEN (dest + 1) != (inner - outer)))
|
|||
|
{
|
|||
|
- printf ("%s+1 flunked for outer = %d, inner = %d, "
|
|||
|
- "len = %Zd\n",
|
|||
|
+ printf ("%s+1 flunked for outer = %zu, inner = %zu, "
|
|||
|
+ "len = %zu\n",
|
|||
|
STRINGIFY (STRNCPY), outer, inner, len);
|
|||
|
result = 1;
|
|||
|
}
|
|||
|
@@ -433,29 +467,33 @@ do_test (void)
|
|||
|
|
|||
|
adr[inner] = L('T');
|
|||
|
}
|
|||
|
+ if (outer == 0)
|
|||
|
+ break;
|
|||
|
}
|
|||
|
|
|||
|
/* stpcpy/wcpcpy test */
|
|||
|
- for (outer = nchars - 1; outer >= MAX (0, nchars - 128); --outer)
|
|||
|
+ for (outer = nchars - 1; outer >= max128; --outer)
|
|||
|
{
|
|||
|
- for (inner = MAX (outer, nchars - 64); inner < nchars; ++inner)
|
|||
|
+ for (inner = MAX (outer, nchars64); inner < nchars; ++inner)
|
|||
|
{
|
|||
|
adr[inner] = L('\0');
|
|||
|
|
|||
|
if ((STPCPY (dest, &adr[outer]) - dest) != inner - outer)
|
|||
|
{
|
|||
|
- printf ("%s flunked for outer = %d, inner = %d\n",
|
|||
|
+ printf ("%s flunked for outer = %zu, inner = %zu\n",
|
|||
|
STRINGIFY (STPCPY), outer, inner);
|
|||
|
result = 1;
|
|||
|
}
|
|||
|
|
|||
|
adr[inner] = L('T');
|
|||
|
}
|
|||
|
+ if (outer == 0)
|
|||
|
+ break;
|
|||
|
}
|
|||
|
|
|||
|
/* stpncpy/wcpncpy test */
|
|||
|
adr[nchars - 1] = L('T');
|
|||
|
- for (outer = nchars; outer >= MAX (0, nchars - 128); --outer)
|
|||
|
+ for (outer = nchars; outer >= max128; --outer)
|
|||
|
{
|
|||
|
size_t len;
|
|||
|
|
|||
|
@@ -464,17 +502,19 @@ do_test (void)
|
|||
|
if (STPNCPY (dest, &adr[outer], len) != dest + len
|
|||
|
|| MEMCMP (dest, &adr[outer], len) != 0)
|
|||
|
{
|
|||
|
- printf ("outer %s flunked for outer = %d, len = %Zd\n",
|
|||
|
+ printf ("outer %s flunked for outer = %zu, len = %zu\n",
|
|||
|
STRINGIFY (STPNCPY), outer, len);
|
|||
|
result = 1;
|
|||
|
}
|
|||
|
}
|
|||
|
+ if (outer == 0)
|
|||
|
+ break;
|
|||
|
}
|
|||
|
adr[nchars - 1] = L('\0');
|
|||
|
|
|||
|
- for (outer = nchars - 1; outer >= MAX (0, nchars - 128); --outer)
|
|||
|
+ for (outer = nchars - 1; outer >= max128; --outer)
|
|||
|
{
|
|||
|
- for (middle = MAX (outer, nchars - 64); middle < nchars; ++middle)
|
|||
|
+ for (middle = MAX (outer, nchars64); middle < nchars; ++middle)
|
|||
|
{
|
|||
|
adr[middle] = L('\0');
|
|||
|
|
|||
|
@@ -483,8 +523,8 @@ do_test (void)
|
|||
|
if ((STPNCPY (dest, &adr[outer], inner) - dest)
|
|||
|
!= MIN (inner, middle - outer))
|
|||
|
{
|
|||
|
- printf ("%s flunked for outer = %d, middle = %d, "
|
|||
|
- "inner = %d\n",
|
|||
|
+ printf ("%s flunked for outer = %zu, middle = %zu, "
|
|||
|
+ "inner = %zu\n",
|
|||
|
STRINGIFY (STPNCPY), outer, middle, inner);
|
|||
|
result = 1;
|
|||
|
}
|
|||
|
@@ -492,66 +532,84 @@ do_test (void)
|
|||
|
|
|||
|
adr[middle] = L('T');
|
|||
|
}
|
|||
|
+ if (outer == 0)
|
|||
|
+ break;
|
|||
|
}
|
|||
|
|
|||
|
/* memcpy/wmemcpy test */
|
|||
|
- for (outer = nchars; outer >= MAX (0, nchars - 128); --outer)
|
|||
|
- for (inner = 0; inner < nchars - outer; ++inner)
|
|||
|
- if (MEMCPY (dest, &adr[outer], inner) != dest)
|
|||
|
- {
|
|||
|
- printf ("%s flunked for outer = %d, inner = %d\n",
|
|||
|
- STRINGIFY (MEMCPY), outer, inner);
|
|||
|
- result = 1;
|
|||
|
- }
|
|||
|
+ for (outer = nchars; outer >= max128; --outer)
|
|||
|
+ {
|
|||
|
+ for (inner = 0; inner < nchars - outer; ++inner)
|
|||
|
+ if (MEMCPY (dest, &adr[outer], inner) != dest)
|
|||
|
+ {
|
|||
|
+ printf ("%s flunked for outer = %zu, inner = %zu\n",
|
|||
|
+ STRINGIFY (MEMCPY), outer, inner);
|
|||
|
+ result = 1;
|
|||
|
+ }
|
|||
|
+ if (outer == 0)
|
|||
|
+ break;
|
|||
|
+ }
|
|||
|
|
|||
|
/* mempcpy/wmempcpy test */
|
|||
|
- for (outer = nchars; outer >= MAX (0, nchars - 128); --outer)
|
|||
|
- for (inner = 0; inner < nchars - outer; ++inner)
|
|||
|
- if (MEMPCPY (dest, &adr[outer], inner) != dest + inner)
|
|||
|
- {
|
|||
|
- printf ("%s flunked for outer = %d, inner = %d\n",
|
|||
|
- STRINGIFY (MEMPCPY), outer, inner);
|
|||
|
- result = 1;
|
|||
|
- }
|
|||
|
+ for (outer = nchars; outer >= max128; --outer)
|
|||
|
+ {
|
|||
|
+ for (inner = 0; inner < nchars - outer; ++inner)
|
|||
|
+ if (MEMPCPY (dest, &adr[outer], inner) != dest + inner)
|
|||
|
+ {
|
|||
|
+ printf ("%s flunked for outer = %zu, inner = %zu\n",
|
|||
|
+ STRINGIFY (MEMPCPY), outer, inner);
|
|||
|
+ result = 1;
|
|||
|
+ }
|
|||
|
+ if (outer == 0)
|
|||
|
+ break;
|
|||
|
+ }
|
|||
|
|
|||
|
/* This function only exists for single-byte characters. */
|
|||
|
#ifndef WCSTEST
|
|||
|
/* memccpy test */
|
|||
|
memset (adr, '\0', nchars);
|
|||
|
- for (outer = nchars; outer >= MAX (0, nchars - 128); --outer)
|
|||
|
- for (inner = 0; inner < nchars - outer; ++inner)
|
|||
|
- if (memccpy (dest, &adr[outer], L('\1'), inner) != NULL)
|
|||
|
- {
|
|||
|
- printf ("memccpy flunked full copy for outer = %d, inner = %d\n",
|
|||
|
- outer, inner);
|
|||
|
- result = 1;
|
|||
|
- }
|
|||
|
- for (outer = nchars - 1; outer >= MAX (0, nchars - 128); --outer)
|
|||
|
- for (middle = 0; middle < nchars - outer; ++middle)
|
|||
|
- {
|
|||
|
- memset (dest, L('\2'), middle + 1);
|
|||
|
- for (inner = 0; inner < middle; ++inner)
|
|||
|
+ for (outer = nchars; outer >= max128; --outer)
|
|||
|
+ {
|
|||
|
+ for (inner = 0; inner < nchars - outer; ++inner)
|
|||
|
+ if (memccpy (dest, &adr[outer], L('\1'), inner) != NULL)
|
|||
|
{
|
|||
|
- adr[outer + inner] = L('\1');
|
|||
|
-
|
|||
|
- if (memccpy (dest, &adr[outer], '\1', middle + 128)
|
|||
|
- != dest + inner + 1)
|
|||
|
- {
|
|||
|
- printf ("\
|
|||
|
-memccpy flunked partial copy for outer = %d, middle = %d, inner = %d\n",
|
|||
|
- outer, middle, inner);
|
|||
|
- result = 1;
|
|||
|
- }
|
|||
|
- else if (dest[inner + 1] != L('\2'))
|
|||
|
- {
|
|||
|
- printf ("\
|
|||
|
-memccpy copied too much for outer = %d, middle = %d, inner = %d\n",
|
|||
|
- outer, middle, inner);
|
|||
|
- result = 1;
|
|||
|
- }
|
|||
|
- adr[outer + inner] = L('\0');
|
|||
|
+ printf ("memccpy flunked full copy for outer = %zu, inner = %zu\n",
|
|||
|
+ outer, inner);
|
|||
|
+ result = 1;
|
|||
|
}
|
|||
|
- }
|
|||
|
+ if (outer == 0)
|
|||
|
+ break;
|
|||
|
+ }
|
|||
|
+ for (outer = nchars - 1; outer >= max128; --outer)
|
|||
|
+ {
|
|||
|
+ for (middle = 0; middle < nchars - outer; ++middle)
|
|||
|
+ {
|
|||
|
+ memset (dest, L('\2'), middle + 1);
|
|||
|
+ for (inner = 0; inner < middle; ++inner)
|
|||
|
+ {
|
|||
|
+ adr[outer + inner] = L('\1');
|
|||
|
+
|
|||
|
+ if (memccpy (dest, &adr[outer], '\1', middle + 128)
|
|||
|
+ != dest + inner + 1)
|
|||
|
+ {
|
|||
|
+ printf ("\
|
|||
|
+ memccpy flunked partial copy for outer = %zu, middle = %zu, inner = %zu\n",
|
|||
|
+ outer, middle, inner);
|
|||
|
+ result = 1;
|
|||
|
+ }
|
|||
|
+ else if (dest[inner + 1] != L('\2'))
|
|||
|
+ {
|
|||
|
+ printf ("\
|
|||
|
+ memccpy copied too much for outer = %zu, middle = %zu, inner = %zu\n",
|
|||
|
+ outer, middle, inner);
|
|||
|
+ result = 1;
|
|||
|
+ }
|
|||
|
+ adr[outer + inner] = L('\0');
|
|||
|
+ }
|
|||
|
+ }
|
|||
|
+ if (outer == 0)
|
|||
|
+ break;
|
|||
|
+ }
|
|||
|
#endif
|
|||
|
}
|
|||
|
|
|||
|
|