Movatterモバイル変換


[0]ホーム

URL:


This is the mail archive of thelibc-alpha@sourceware.orgmailing list for theglibc project.


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav:[Date Prev] [Date Next][Thread Prev] [Thread Next]
Other format:[Raw text]

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

Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav:[Date Prev] [Date Next][Thread Prev] [Thread Next]

[8]ページ先頭

©2009-2026 Movatter.jp