[BACK]Return to bwstring.c CVS log [TXT][DIR] Up to [local] / src / usr.bin / sort

Diff for /src/usr.bin/sort/bwstring.c between version 1.8 and 1.9

version 1.8, 2019/05/15 09:07:46 version 1.9, 2019/05/15 09:33:34
Line 684 
Line 684 
         if (len1 <= offset)          if (len1 <= offset)
                 return (len2 <= offset) ? 0 : -1;                  return (len2 <= offset) ? 0 : -1;
   
                 if (len2 <= offset)          if (len2 <= offset)
                         return 1;                  return 1;
   
                         len1 -= offset;          len1 -= offset;
                         len2 -= offset;          len2 -= offset;
   
                         if (sort_mb_cur_max == 1) {          if (sort_mb_cur_max == 1) {
                                 const unsigned char *s1, *s2;                  const unsigned char *s1, *s2;
                                 int res;                  int res;
   
                                 s1 = bws1->data.cstr + offset;                  s1 = bws1->data.cstr + offset;
                                 s2 = bws2->data.cstr + offset;                  s2 = bws2->data.cstr + offset;
   
                                         if (len1 > len2) {                  if (len1 > len2) {
                                                 res = memcmp(s1, s2, len2);                          res = memcmp(s1, s2, len2);
                                                 if (!res)                          if (!res)
                                                         res = +1;                                  res = +1;
                                         } else if (len1 < len2) {                  } else if (len1 < len2) {
                                                 res = memcmp(s1, s2, len1);                          res = memcmp(s1, s2, len1);
                                                 if (!res)                          if (!res)
                                                         res = -1;                                  res = -1;
                                         } else                  } else
                                                 res = memcmp(s1, s2, len1);                          res = memcmp(s1, s2, len1);
   
                                         return res;                  return res;
                         } else {          } else {
                                 const wchar_t *s1, *s2;                  const wchar_t *s1, *s2;
                                 size_t i, maxlen;                  size_t i, maxlen;
                                 int res = 0;                  int res = 0;
   
                                 s1 = bws1->data.wstr + offset;                  s1 = bws1->data.wstr + offset;
                                 s2 = bws2->data.wstr + offset;                  s2 = bws2->data.wstr + offset;
   
                                 i = 0;                  i = 0;
                                 maxlen = len1;                  maxlen = len1;
   
                                 if (maxlen > len2)                  if (maxlen > len2)
                                         maxlen = len2;                          maxlen = len2;
   
                                 while (i < maxlen) {                  while (i < maxlen) {
   
                                         /* goto next non-zero part: */                          /* goto next non-zero part: */
                                         while ((i < maxlen) &&                          while (i < maxlen &&
                                             !s1[i] && !s2[i])                              s1[i] == L'\0' && s2[i] == L'\0')
                                                 ++i;                                  ++i;
   
                                         if (i >= maxlen)                          if (i >= maxlen)
                                                 break;                                  break;
   
                                         if (s1[i] == 0) {                          if (s1[i] == L'\0') {
                                                 if (s2[i] == 0)                                  if (s2[i] == L'\0')
                                                         /* NOTREACHED */                                          /* NOTREACHED */
                                                         err(2, "bwscoll error 1");                                          err(2, "bwscoll error 1");
                                                 else                                  else
                                                         return -1;                                          return -1;
                                         } else if (s2[i] == 0)                          } else if (s2[i] == L'\0')
                                                 return 1;                                  return 1;
   
                                         res = wide_str_coll(s1 + i, s2 + i);                          res = wide_str_coll(s1 + i, s2 + i);
                                         if (res)                          if (res)
                                                 return res;                                  return res;
   
                                         while ((i < maxlen) && s1[i] && s2[i])                          while (i < maxlen && s1[i] != L'\0' && s2[i] != L'\0')
                                                 ++i;                                  ++i;
   
                                         if (i >= maxlen)                          if (i >= maxlen)
                                                 break;                                  break;
   
                                         if (s1[i] == 0) {                          if (s1[i] == L'\0') {
                                                 if (s2[i] == 0) {                                  if (s2[i] == L'\0') {
                                                         ++i;                                          ++i;
                                                         continue;                                          continue;
                                                 } else                                  } else
                                                         return -1;                                          return -1;
                                         } else if (s2[i] == 0)                          } else if (s2[i] == L'\0')
                                                 return 1;                                  return 1;
                                         else                          else
                                                 /* NOTREACHED */                                  /* NOTREACHED */
                                                 err(2, "bwscoll error 2");                                  err(2, "bwscoll error 2");
                                 }                  }
   
                                 if (len1 == len2)                  if (len1 == len2)
                                         return 0;                          return 0;
                                 return len1 < len2 ? -1 : 1;                  return len1 < len2 ? -1 : 1;
                         }          }
 }  }
   
 /*  /*

Legend:
Removed from v.1.8  
changed lines
  Added in v.1.9