static bool IsString1PrefixedByString2_NoCase(const wchar_t *u, const char *a)
{
  for (;;)
  {
    char c = *a;
    if (c == 0)
      return true;
    if (MyCharLower_Ascii(c) != MyCharLower_Ascii(*u))
      return false;
    a++;
    u++;
  }
}
Esempio n. 2
0
bool ParseVolumeSizes(const UString &s, CRecordVector<UInt64> &values)
{
  values.Clear();
  bool prevIsNumber = false;
  for (unsigned i = 0; i < s.Len();)
  {
    wchar_t c = s[i++];
    if (c == L' ')
      continue;
    if (c == L'-')
      return true;
    if (prevIsNumber)
    {
      prevIsNumber = false;
      unsigned numBits = 0;
      switch (MyCharLower_Ascii(c))
      {
        case 'b': continue;
        case 'k': numBits = 10; break;
        case 'm': numBits = 20; break;
        case 'g': numBits = 30; break;
        case 't': numBits = 40; break;
      }
      if (numBits != 0)
      {
        UInt64 &val = values.Back();
        if (val >= ((UInt64)1 << (64 - numBits)))
          return false;
        val <<= numBits;

        for (; i < s.Len(); i++)
          if (s[i] == L' ')
            break;
        continue;
      }
    }
    i--;
    const wchar_t *start = s.Ptr(i);
    const wchar_t *end;
    UInt64 val = ConvertStringToUInt64(start, &end);
    if (start == end)
      return false;
    if (val == 0)
      return false;
    values.Add(val);
    prevIsNumber = true;
    i += (unsigned)(end - start);
  }
  return true;
}
Esempio n. 3
0
 CRefItem(UInt32 index, const CUpdateItem &ui, bool sortByType):
   UpdateItem(&ui),
   Index(index),
   ExtensionPos(0),
   NamePos(0),
   ExtensionIndex(0)
 {
   if (sortByType)
   {
     int slashPos = GetReverseSlashPos(ui.Name);
     NamePos = slashPos + 1;
     int dotPos = ui.Name.ReverseFind(L'.');
     if (dotPos < 0 || dotPos < slashPos)
       ExtensionPos = ui.Name.Len();
     else
     {
       ExtensionPos = dotPos + 1;
       if (ExtensionPos != ui.Name.Len())
       {
         AString s;
         for (unsigned pos = ExtensionPos;; pos++)
         {
           wchar_t c = ui.Name[pos];
           if (c >= 0x80)
             break;
           if (c == 0)
           {
             ExtensionIndex = GetExtIndex(s);
             break;
           }
           s += (char)MyCharLower_Ascii((char)c);
         }
       }
     }
   }
 }