diff options
Diffstat (limited to 'src')
-rw-r--r-- | src/Document.cxx | 29 |
1 files changed, 13 insertions, 16 deletions
diff --git a/src/Document.cxx b/src/Document.cxx index 4765248d1..595c4ba9a 100644 --- a/src/Document.cxx +++ b/src/Document.cxx @@ -1890,14 +1890,14 @@ Sci::Position Document::FindText(Sci::Position minPos, Sci::Position maxPos, con } else if (SC_CP_UTF8 == dbcsCodePage) { const size_t maxFoldingExpansion = 4; std::vector<char> searchThing((lengthFind+1) * UTF8MaxBytes * maxFoldingExpansion + 1); - const int lenSearch = static_cast<int>( - pcf->Fold(&searchThing[0], searchThing.size(), search, lengthFind)); + const size_t lenSearch = + pcf->Fold(&searchThing[0], searchThing.size(), search, lengthFind); char bytes[UTF8MaxBytes + 1]; char folded[UTF8MaxBytes * maxFoldingExpansion + 1]; while (forward ? (pos < endPos) : (pos >= endPos)) { int widthFirstCharacter = 0; Sci::Position posIndexDocument = pos; - int indexSearch = 0; + size_t indexSearch = 0; bool characterMatches = true; for (;;) { const unsigned char leadByte = static_cast<unsigned char>(cb.CharAt(posIndexDocument)); @@ -1914,10 +1914,9 @@ Sci::Position Document::FindText(Sci::Position minPos, Sci::Position maxPos, con widthFirstCharacter = widthChar; if ((posIndexDocument + widthChar) > limitPos) break; - const int lenFlat = static_cast<int>(pcf->Fold(folded, sizeof(folded), bytes, widthChar)); - folded[lenFlat] = 0; + const size_t lenFlat = pcf->Fold(folded, sizeof(folded), bytes, widthChar); // memcmp may examine lenFlat bytes in both arguments so assert it doesn't read past end of searchThing - assert(static_cast<size_t>(indexSearch + lenFlat) <= searchThing.size()); + assert((indexSearch + lenFlat) <= searchThing.size()); // Does folded match the buffer characterMatches = 0 == memcmp(folded, &searchThing[0] + indexSearch, lenFlat); if (!characterMatches) @@ -1927,7 +1926,7 @@ Sci::Position Document::FindText(Sci::Position minPos, Sci::Position maxPos, con if (indexSearch >= lenSearch) break; } - if (characterMatches && (indexSearch == static_cast<int>(lenSearch))) { + if (characterMatches && (indexSearch == lenSearch)) { if (MatchesWordOptions(word, wordStart, pos, posIndexDocument - pos)) { *length = posIndexDocument - pos; return pos; @@ -1944,33 +1943,31 @@ Sci::Position Document::FindText(Sci::Position minPos, Sci::Position maxPos, con const size_t maxBytesCharacter = 2; const size_t maxFoldingExpansion = 4; std::vector<char> searchThing((lengthFind+1) * maxBytesCharacter * maxFoldingExpansion + 1); - const int lenSearch = static_cast<int>( - pcf->Fold(&searchThing[0], searchThing.size(), search, lengthFind)); + const size_t lenSearch = pcf->Fold(&searchThing[0], searchThing.size(), search, lengthFind); while (forward ? (pos < endPos) : (pos >= endPos)) { - int indexDocument = 0; - int indexSearch = 0; + Sci::Position indexDocument = 0; + size_t indexSearch = 0; bool characterMatches = true; while (characterMatches && ((pos + indexDocument) < limitPos) && (indexSearch < lenSearch)) { char bytes[maxBytesCharacter + 1]; bytes[0] = cb.CharAt(pos + indexDocument); - const int widthChar = IsDBCSLeadByte(bytes[0]) ? 2 : 1; + const Sci::Position widthChar = IsDBCSLeadByte(bytes[0]) ? 2 : 1; if (widthChar == 2) bytes[1] = cb.CharAt(pos + indexDocument + 1); if ((pos + indexDocument + widthChar) > limitPos) break; char folded[maxBytesCharacter * maxFoldingExpansion + 1]; - const int lenFlat = static_cast<int>(pcf->Fold(folded, sizeof(folded), bytes, widthChar)); - folded[lenFlat] = 0; + const size_t lenFlat = pcf->Fold(folded, sizeof(folded), bytes, widthChar); // memcmp may examine lenFlat bytes in both arguments so assert it doesn't read past end of searchThing - assert(static_cast<size_t>(indexSearch + lenFlat) <= searchThing.size()); + assert((indexSearch + lenFlat) <= searchThing.size()); // Does folded match the buffer characterMatches = 0 == memcmp(folded, &searchThing[0] + indexSearch, lenFlat); indexDocument += widthChar; indexSearch += lenFlat; } - if (characterMatches && (indexSearch == static_cast<int>(lenSearch))) { + if (characterMatches && (indexSearch == lenSearch)) { if (MatchesWordOptions(word, wordStart, pos, indexDocument)) { *length = indexDocument; return pos; |