654 lines
19 KiB
Diff
654 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
|
||
}
|
||
|
||
|