Movatterモバイル変換
[0]ホーム
This is the mail archive of thelibc-alpha@sourceware.orgmailing list for theglibc project.
Re: [PATCH] string/stratcliff.c: Replace int with size_t [BZ #21982]
On Tue, Aug 22, 2017 at 5:07 AM, Stefan Liebler <stli@linux.vnet.ibm.com> wrote:> On 08/22/2017 01:05 AM, H.J. Lu wrote:>>>> On Mon, Aug 21, 2017 at 8:41 AM, Stefan Liebler <stli@linux.vnet.ibm.com>>> wrote:>>>>>> On 08/21/2017 04:53 PM, H.J. Lu wrote:>>>>>>>>>>>> On Mon, Aug 21, 2017 at 6:48 AM, Stefan Liebler>>>> <stli@linux.vnet.ibm.com>>>>> wrote:>>>>>>>>>>>>>>> On 08/20/2017 07:17 PM, H.J. Lu wrote:>>>>>>>>>>>>>>>>>>>>>>>> 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]>>>>>>>>>>>> OK for master?>>>>>>>>>>>> H.J.>>>>>> --->>>>>> [BZ #21982]>>>>>> * string/stratcliff.c (do_test): Declare size, nchars,>>>>>> inner,>>>>>> middle and outer with size_t instead of int. Repleace %d>>>>>> with>>>>>> %Zd in printf.>>>>>> --->>>>>> string/stratcliff.c | 72>>>>>> ++++++++++++++++++++++++++--------------------------->>>>>> 1 file changed, 36 insertions(+), 36 deletions(-)>>>>>>>>>>>> diff --git a/string/stratcliff.c b/string/stratcliff.c>>>>>> index e28b0c5058..ae780379cb 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,7 @@ do_test (void)>>>>>> }>>>>>> else>>>>>> {>>>>>> - int inner, middle, outer;>>>>>> + size_t inner, middle, outer;>>>>>>>>>>>> mprotect (adr, size, PROT_NONE);>>>>>> mprotect (adr + 2 * nchars, size, PROT_NONE);>>>>>> @@ -101,7 +101,7 @@ do_test (void)>>>>>>>>>>>> if (STRLEN (&adr[outer]) != (size_t) (inner - outer))>>>>>> {>>>>>> - printf ("%s flunked for outer = %d, inner = %d\n",>>>>>> + printf ("%s flunked for outer = %Zd, inner = %Zd\n",>>>>>> STRINGIFY (STRLEN), outer, inner);>>>>>> result = 1;>>>>>> }>>>>>> {>>>>>> - printf ("%s flunked for outer = %d, middle = %d\n",>>>>>> + printf ("%s flunked for outer = %Zd, middle =>>>>>> %Zd\n",>>>>>> STRINGIFY (rawmemchr), outer, middle);>>>>>> result = 1;>>>>>> }>>>>>> Hi H.J. Lu,>>>>>>>>>>>>>>>>>>>>>>>>> I've applied your patch and the warnings does not occur anymore on>>>>> s390.>>>>>>>>>>>>>>>> Great.>>>>>>>>> The outer loops of the string tests are all using the following:>>>>> size_t nchars, outer;>>>>> for (outer = nchars - 1; outer >= MAX (0, nchars - 128); --outer)>>>>>>>>>> I think we can assume, that nchars is always > 128 as it is derived by>>>>> the>>>>> pagesize.>>>>> But if nchars would be equal to 128, this would result in an infinite>>>>> loop>>>>> (outer >= 0)?>>>>> If nchars would be less than 128, the tests would be skipped.>>>>>>>>>> Should we add a check that nchars > 128 at the beginning and replace>>>>> the>>>>> "MAX (0, nchars - 128)" with only "nchars - 128"?>>>>>>>>>>>>>>>> This is a separate issue beyond BZ #21982.>>>>>>>>>>> Your patch is introducing this behaviour.>>> Before your patch, nchars and outer was an int and the for-loop-condition>>> "outer >= MAX (0, nchars - 128)" does not lead to an infinite loop or to>>> skipping the test if nchars <= 128.>>>>>>> How about this patch?>>> This solves the cases if nchars < 128.> But if nchars == 128, then the condition of the for-loop is "size_t outer >=> 0", which is always true.>> Could we check once if nchars > 128 and exit the test with an error if> nchars is <= 128?> Are there architectures where the page size is < 4096?> Or where wchar_t > 4byte?>Here is the updated patch. I added if (outer == 0) break;at the end of loop.-- H.J.From f951e4aa927efdf3112be92006b11d31cb75ef2b Mon Sep 17 00:00:00 2001From: "H.J. Lu" <hjl.tools@gmail.com>Date: Sun, 20 Aug 2017 10:11:38 -0700Subject: [PATCH] string/stratcliff.c: Replace int with size_t [BZ #21982]MIME-Version: 1.0Content-Type: text/plain; charset=UTF-8Content-Transfer-Encoding: 8bitFix 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 andnchars. Also exit loop when outer == 0.--- string/stratcliff.c | 276 +++++++++++++++++++++++++++++++--------------------- 1 file changed, 167 insertions(+), 109 deletions(-)diff --git a/string/stratcliff.c b/string/stratcliff.cindex 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 } -- 2.13.5
[8]ページ先頭