string/stratcliff.c: Replace int with size_t [BZ #21982]

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.
This commit is contained in:
H.J. Lu 2017-08-23 08:22:52 -07:00
parent 2b0b9a1c85
commit 376b40a27a
2 changed files with 176 additions and 109 deletions

View File

@ -1,3 +1,12 @@
2017-08-23 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-08-23 Adhemerval Zanella <adhemerval.zanella@linaro.org> 2017-08-23 Adhemerval Zanella <adhemerval.zanella@linaro.org>
* include/fcntl.h (__fcntl_nocancel): Remove definition. * include/fcntl.h (__fcntl_nocancel): Remove definition.

View File

@ -58,8 +58,8 @@
int int
do_test (void) do_test (void)
{ {
int size = sysconf (_SC_PAGESIZE); size_t size = sysconf (_SC_PAGESIZE);
int nchars = size / sizeof (CHAR); size_t nchars = size / sizeof (CHAR);
CHAR *adr; CHAR *adr;
CHAR *dest; CHAR *dest;
int result = 0; int result = 0;
@ -80,7 +80,17 @@ do_test (void)
} }
else 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, size, PROT_NONE);
mprotect (adr + 2 * nchars, size, PROT_NONE); mprotect (adr + 2 * nchars, size, PROT_NONE);
@ -93,59 +103,65 @@ do_test (void)
MEMSET (adr, L('T'), nchars); MEMSET (adr, L('T'), nchars);
/* strlen/wcslen test */ /* 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'); adr[inner] = L('\0');
if (STRLEN (&adr[outer]) != (size_t) (inner - outer)) 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); STRINGIFY (STRLEN), outer, inner);
result = 1; result = 1;
} }
adr[inner] = L('T'); adr[inner] = L('T');
} }
if (outer == 0)
break;
} }
/* strnlen/wcsnlen test */ /* 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'); adr[inner] = L('\0');
if (STRNLEN (&adr[outer], inner - outer + 1) if (STRNLEN (&adr[outer], inner - outer + 1)
!= (size_t) (inner - outer)) != (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); STRINGIFY (STRNLEN), outer, inner);
result = 1; result = 1;
} }
adr[inner] = L('T'); 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) if (STRNLEN (&adr[outer], inner - outer)
!= (size_t) (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); STRINGIFY (STRNLEN), outer, inner);
result = 1; result = 1;
} }
} }
if (outer == 0)
break;
} }
/* strchr/wcschr test */ /* 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) for (inner = middle; inner < nchars; ++inner)
{ {
@ -158,8 +174,8 @@ do_test (void)
|| (inner != middle || (inner != middle
&& (cp - &adr[outer]) != middle - outer)) && (cp - &adr[outer]) != middle - outer))
{ {
printf ("%s flunked for outer = %d, middle = %d, " printf ("%s flunked for outer = %zu, middle = %zu, "
"inner = %d\n", "inner = %zu\n",
STRINGIFY (STRCHR), outer, middle, inner); STRINGIFY (STRCHR), outer, middle, inner);
result = 1; result = 1;
} }
@ -168,6 +184,8 @@ do_test (void)
adr[middle] = L('T'); adr[middle] = L('T');
} }
} }
if (outer == 0)
break;
} }
/* Special test. */ /* Special test. */
@ -180,9 +198,9 @@ do_test (void)
} }
/* strrchr/wcsrchr test */ /* 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) for (inner = middle; inner < nchars; ++inner)
{ {
@ -195,8 +213,8 @@ do_test (void)
|| (inner != middle || (inner != middle
&& (cp - &adr[outer]) != middle - outer)) && (cp - &adr[outer]) != middle - outer))
{ {
printf ("%s flunked for outer = %d, middle = %d, " printf ("%s flunked for outer = %zu, middle = %zu, "
"inner = %d\n", "inner = %zu\n",
STRINGIFY (STRRCHR), outer, middle, inner); STRINGIFY (STRRCHR), outer, middle, inner);
result = 1; result = 1;
} }
@ -205,12 +223,14 @@ do_test (void)
adr[middle] = L('T'); adr[middle] = L('T');
} }
} }
if (outer == 0)
break;
} }
/* memchr test */ /* 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'); adr[middle] = L('V');
@ -218,32 +238,36 @@ do_test (void)
if (cp - &adr[outer] != middle - outer) 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); STRINGIFY (MEMCHR), outer, middle);
result = 1; result = 1;
} }
adr[middle] = L('T'); 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); CHAR *cp = MEMCHR (&adr[outer], L('V'), nchars - outer);
if (cp != NULL) if (cp != NULL)
{ {
printf ("%s flunked for outer = %d\n", printf ("%s flunked for outer = %zu\n",
STRINGIFY (MEMCHR), outer); STRINGIFY (MEMCHR), outer);
result = 1; result = 1;
} }
if (outer == 0)
break;
} }
/* These functions only exist for single-byte characters. */ /* These functions only exist for single-byte characters. */
#ifndef WCSTEST #ifndef WCSTEST
/* rawmemchr test */ /* 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'); adr[middle] = L('V');
@ -251,19 +275,21 @@ do_test (void)
if (cp - &adr[outer] != middle - outer) 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); STRINGIFY (rawmemchr), outer, middle);
result = 1; result = 1;
} }
adr[middle] = L('T'); adr[middle] = L('T');
} }
if (outer == 0)
break;
} }
/* memrchr test */ /* 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'); adr[middle] = L('V');
@ -271,44 +297,50 @@ do_test (void)
if (cp - &adr[outer] != middle - outer) 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); STRINGIFY (memrchr), outer, middle);
result = 1; result = 1;
} }
adr[middle] = L('T'); 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); CHAR *cp = memrchr (&adr[outer], L('V'), nchars - outer);
if (cp != NULL) if (cp != NULL)
{ {
printf ("%s flunked for outer = %d\n", printf ("%s flunked for outer = %zu\n",
STRINGIFY (memrchr), outer); STRINGIFY (memrchr), outer);
result = 1; result = 1;
} }
if (outer == 0)
break;
} }
#endif #endif
/* strcpy/wcscpy test */ /* 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'); adr[inner] = L('\0');
if (STRCPY (dest, &adr[outer]) != dest if (STRCPY (dest, &adr[outer]) != dest
|| STRLEN (dest) != (size_t) (inner - outer)) || 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); STRINGIFY (STRCPY), outer, inner);
result = 1; result = 1;
} }
adr[inner] = L('T'); adr[inner] = L('T');
} }
if (outer == 0)
break;
} }
/* strcmp/wcscmp tests */ /* strcmp/wcscmp tests */
@ -322,14 +354,14 @@ do_test (void)
if (STRCMP (adr + middle, dest + nchars - outer) <= 0) 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); STRINGIFY (STRCMP), outer, middle);
result = 1; result = 1;
} }
if (STRCMP (dest + nchars - outer, adr + middle) >= 0) 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); STRINGIFY (STRCMP), outer, middle);
result = 1; result = 1;
} }
@ -348,16 +380,16 @@ do_test (void)
{ {
if (STRNCMP (adr + middle, dest + nchars - outer, inner) != 0) if (STRNCMP (adr + middle, dest + nchars - outer, inner) != 0)
{ {
printf ("%s 1 flunked for outer = %d, middle = %d, " printf ("%s 1 flunked for outer = %zu, middle = %zu, "
"inner = %d\n", "inner = %zu\n",
STRINGIFY (STRNCMP), outer, middle, inner); STRINGIFY (STRNCMP), outer, middle, inner);
result = 1; result = 1;
} }
if (STRNCMP (dest + nchars - outer, adr + middle, inner) != 0) if (STRNCMP (dest + nchars - outer, adr + middle, inner) != 0)
{ {
printf ("%s 2 flunked for outer = %d, middle = %d, " printf ("%s 2 flunked for outer = %zu, middle = %zu, "
"inner = %d\n", "inner = %zu\n",
STRINGIFY (STRNCMP), outer, middle, inner); STRINGIFY (STRNCMP), outer, middle, inner);
result = 1; result = 1;
} }
@ -365,14 +397,14 @@ do_test (void)
if (STRNCMP (adr + middle, dest + nchars - outer, outer) >= 0) 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); STRINGIFY (STRNCMP), outer, middle);
result = 1; result = 1;
} }
if (STRNCMP (dest + nchars - outer, adr + middle, outer) <= 0) 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); STRINGIFY (STRNCMP), outer, middle);
result = 1; result = 1;
} }
@ -380,7 +412,7 @@ do_test (void)
/* strncpy/wcsncpy tests */ /* strncpy/wcsncpy tests */
adr[nchars - 1] = L('T'); adr[nchars - 1] = L('T');
for (outer = nchars; outer >= MAX (0, nchars - 128); --outer) for (outer = nchars; outer >= max128; --outer)
{ {
size_t len; size_t len;
@ -389,17 +421,19 @@ do_test (void)
if (STRNCPY (dest, &adr[outer], len) != dest if (STRNCPY (dest, &adr[outer], len) != dest
|| MEMCMP (dest, &adr[outer], len) != 0) || 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); STRINGIFY (STRNCPY), outer, len);
result = 1; result = 1;
} }
} }
if (outer == 0)
break;
} }
adr[nchars - 1] = L('\0'); 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; size_t len;
@ -413,8 +447,8 @@ do_test (void)
|| (inner - outer < len || (inner - outer < len
&& STRLEN (dest) != (inner - outer))) && STRLEN (dest) != (inner - outer)))
{ {
printf ("%s flunked for outer = %d, inner = %d, " printf ("%s flunked for outer = %zu, inner = %zu, "
"len = %Zd\n", "len = %zu\n",
STRINGIFY (STRNCPY), outer, inner, len); STRINGIFY (STRNCPY), outer, inner, len);
result = 1; result = 1;
} }
@ -424,8 +458,8 @@ do_test (void)
|| (inner - outer < len || (inner - outer < len
&& STRLEN (dest + 1) != (inner - outer))) && STRLEN (dest + 1) != (inner - outer)))
{ {
printf ("%s+1 flunked for outer = %d, inner = %d, " printf ("%s+1 flunked for outer = %zu, inner = %zu, "
"len = %Zd\n", "len = %zu\n",
STRINGIFY (STRNCPY), outer, inner, len); STRINGIFY (STRNCPY), outer, inner, len);
result = 1; result = 1;
} }
@ -433,29 +467,33 @@ do_test (void)
adr[inner] = L('T'); adr[inner] = L('T');
} }
if (outer == 0)
break;
} }
/* stpcpy/wcpcpy test */ /* 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'); adr[inner] = L('\0');
if ((STPCPY (dest, &adr[outer]) - dest) != inner - outer) 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); STRINGIFY (STPCPY), outer, inner);
result = 1; result = 1;
} }
adr[inner] = L('T'); adr[inner] = L('T');
} }
if (outer == 0)
break;
} }
/* stpncpy/wcpncpy test */ /* stpncpy/wcpncpy test */
adr[nchars - 1] = L('T'); adr[nchars - 1] = L('T');
for (outer = nchars; outer >= MAX (0, nchars - 128); --outer) for (outer = nchars; outer >= max128; --outer)
{ {
size_t len; size_t len;
@ -464,17 +502,19 @@ do_test (void)
if (STPNCPY (dest, &adr[outer], len) != dest + len if (STPNCPY (dest, &adr[outer], len) != dest + len
|| MEMCMP (dest, &adr[outer], len) != 0) || 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); STRINGIFY (STPNCPY), outer, len);
result = 1; result = 1;
} }
} }
if (outer == 0)
break;
} }
adr[nchars - 1] = L('\0'); 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'); adr[middle] = L('\0');
@ -483,8 +523,8 @@ do_test (void)
if ((STPNCPY (dest, &adr[outer], inner) - dest) if ((STPNCPY (dest, &adr[outer], inner) - dest)
!= MIN (inner, middle - outer)) != MIN (inner, middle - outer))
{ {
printf ("%s flunked for outer = %d, middle = %d, " printf ("%s flunked for outer = %zu, middle = %zu, "
"inner = %d\n", "inner = %zu\n",
STRINGIFY (STPNCPY), outer, middle, inner); STRINGIFY (STPNCPY), outer, middle, inner);
result = 1; result = 1;
} }
@ -492,66 +532,84 @@ do_test (void)
adr[middle] = L('T'); adr[middle] = L('T');
} }
if (outer == 0)
break;
} }
/* memcpy/wmemcpy test */ /* memcpy/wmemcpy test */
for (outer = nchars; outer >= MAX (0, nchars - 128); --outer) for (outer = nchars; outer >= max128; --outer)
for (inner = 0; inner < nchars - outer; ++inner) {
if (MEMCPY (dest, &adr[outer], inner) != dest) 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); printf ("%s flunked for outer = %zu, inner = %zu\n",
result = 1; STRINGIFY (MEMCPY), outer, inner);
} result = 1;
}
if (outer == 0)
break;
}
/* mempcpy/wmempcpy test */ /* mempcpy/wmempcpy test */
for (outer = nchars; outer >= MAX (0, nchars - 128); --outer) for (outer = nchars; outer >= max128; --outer)
for (inner = 0; inner < nchars - outer; ++inner) {
if (MEMPCPY (dest, &adr[outer], inner) != dest + inner) 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); printf ("%s flunked for outer = %zu, inner = %zu\n",
result = 1; STRINGIFY (MEMPCPY), outer, inner);
} result = 1;
}
if (outer == 0)
break;
}
/* This function only exists for single-byte characters. */ /* This function only exists for single-byte characters. */
#ifndef WCSTEST #ifndef WCSTEST
/* memccpy test */ /* memccpy test */
memset (adr, '\0', nchars); memset (adr, '\0', nchars);
for (outer = nchars; outer >= MAX (0, nchars - 128); --outer) for (outer = nchars; outer >= max128; --outer)
for (inner = 0; inner < nchars - outer; ++inner) {
if (memccpy (dest, &adr[outer], L('\1'), inner) != NULL) 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)
{ {
adr[outer + inner] = L('\1'); printf ("memccpy flunked full copy for outer = %zu, inner = %zu\n",
outer, inner);
if (memccpy (dest, &adr[outer], '\1', middle + 128) result = 1;
!= 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');
} }
} 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 #endif
} }