diff --git a/src/kits/support/String.cpp b/src/kits/support/String.cpp index f22631bf97..f8c9aa73a1 100644 --- a/src/kits/support/String.cpp +++ b/src/kits/support/String.cpp @@ -86,17 +86,24 @@ int32 BString::CountChars() const { int32 count = 0; - char *ptr = _privateData; - - if (ptr == NULL) - return 0; - + const char *ptr = String(); + while (*ptr) { + // Jump to next UTF8 character // ejaesler: BGA's nifty function ptr += utf8_char_len(*ptr); count++; } +#if 0 + while (*ptr++) + { + count++; + + // Jump to next UTF8 character + for (; (*ptr & 0xc0) == 0x80; ptr++); + } +#endif return count; } @@ -1503,7 +1510,9 @@ BString::_GrowBy(int32 size) ASSERT(curLen + size >= 0); if (_privateData != NULL) + { _privateData -= sizeof(int32); + } _privateData = (char*)realloc(_privateData, curLen + size + sizeof(int32) + 1); @@ -1517,7 +1526,7 @@ BString::_GrowBy(int32 size) } -char* +char * BString::_OpenAtBy(int32 offset, int32 length) { ASSERT(offset >= 0); diff --git a/src/kits/support/support.src b/src/kits/support/support.src index 23dd01e671..7229fcf690 100644 --- a/src/kits/support/support.src +++ b/src/kits/support/support.src @@ -6,6 +6,6 @@ SUPPORT_KIT_SOURCE = List.cpp Locker.cpp StopWatch.cpp - #String.cpp - #string_helper.cpp + String.cpp + string_helper.cpp ; diff --git a/src/tests/kits/support/bstring/StringAccessTest.cpp b/src/tests/kits/support/bstring/StringAccessTest.cpp index a63830ea3a..9c64c36401 100644 --- a/src/tests/kits/support/bstring/StringAccessTest.cpp +++ b/src/tests/kits/support/bstring/StringAccessTest.cpp @@ -1,5 +1,6 @@ #include "StringAccessTest.h" #include "cppunit/TestCaller.h" +#include #include #include diff --git a/src/tests/kits/support/bstring/StringSearchTest.cpp b/src/tests/kits/support/bstring/StringSearchTest.cpp index 6feb716725..45f56bf3aa 100644 --- a/src/tests/kits/support/bstring/StringSearchTest.cpp +++ b/src/tests/kits/support/bstring/StringSearchTest.cpp @@ -51,12 +51,14 @@ StringSearchTest::PerformTest(void) CPPUNIT_ASSERT(i == B_ERROR); delete string1; - //Commented, since crashes R5 - //NextSubTest(); - //string1 = new BString("string"); - //i = string1->FindFirst((char*)NULL); - //CPPUNIT_ASSERT(i == B_BAD_VALUE); - //delete string1; +#ifndef TEST_R5 +// Commented, since crashes R5 + NextSubTest(); + string1 = new BString("string"); + i = string1->FindFirst((char*)NULL); + CPPUNIT_ASSERT(i == B_BAD_VALUE); + delete string1; +#endif //FindFirst(BString&, int32) NextSubTest(); @@ -102,12 +104,14 @@ StringSearchTest::PerformTest(void) CPPUNIT_ASSERT(i == B_ERROR); delete string1; +#ifndef TEST_R5 //Commented since crashes R5 - //NextSubTest(); - //string1 = new BString("abc abc abc"); - //i = string1->FindFirst((char*)NULL, 3); - //CPPUNIT_ASSERT(i == B_BAD_VALUE); - //delete string1; + NextSubTest(); + string1 = new BString("abc abc abc"); + i = string1->FindFirst((char*)NULL, 3); + CPPUNIT_ASSERT(i == B_BAD_VALUE); + delete string1; +#endif //FindFirst(char) NextSubTest(); @@ -170,13 +174,15 @@ StringSearchTest::PerformTest(void) i = string1->FindLast("some text"); CPPUNIT_ASSERT(i == B_ERROR); delete string1; - + +#ifndef TEST_R5 //Commented since crashes R5 - //NextSubTest(); - //string1 = new BString("string"); - //i = string1->FindLast((char*)NULL); - //CPPUNIT_ASSERT(i == B_BAD_VALUE); - //delete string1; + NextSubTest(); + string1 = new BString("string"); + i = string1->FindLast((char*)NULL); + CPPUNIT_ASSERT(i == B_BAD_VALUE); + delete string1; +#endif //FindLast(BString&, int32) NextSubTest(); @@ -207,13 +213,15 @@ StringSearchTest::PerformTest(void) i = string1->FindLast("abc", -10); CPPUNIT_ASSERT(i == B_ERROR); delete string1; - + +#ifndef TEST_R5 //Commented since crashes r5 - //NextSubTest(); - //string1 = new BString("abc abc abc"); - //i = string1->FindLast((char*)NULL, 3); - //CPPUNIT_ASSERT(i == B_BAD_VALUE); - //delete string1; + NextSubTest(); + string1 = new BString("abc abc abc"); + i = string1->FindLast((char*)NULL, 3); + CPPUNIT_ASSERT(i == B_BAD_VALUE); + delete string1; +#endif //FindLast(char) NextSubTest(); @@ -299,12 +307,14 @@ StringSearchTest::PerformTest(void) CPPUNIT_ASSERT(i == B_ERROR); delete string1; +#ifndef TEST_R5 //Commented, since crashes R5 - //NextSubTest(); - //string1 = new BString("string"); - //i = string1->IFindFirst((char*)NULL); - //CPPUNIT_ASSERT(i == B_BAD_VALUE); - //delete string1; + NextSubTest(); + string1 = new BString("string"); + i = string1->IFindFirst((char*)NULL); + CPPUNIT_ASSERT(i == B_BAD_VALUE); + delete string1; +#endif //IFindFirst(BString&, int32) NextSubTest(); @@ -364,22 +374,24 @@ StringSearchTest::PerformTest(void) CPPUNIT_ASSERT(i == B_ERROR); delete string1; +#ifndef TEST_R5 //IFindLast(BString&) - //NextSubTest(); - //string1 = new BString("last but not least"); - //string2 = new BString("st"); - //i = string1->IFindLast(*string2); - //CPPUNIT_ASSERT(i == 16); - //delete string1; - //delete string2; + NextSubTest(); + string1 = new BString("last but not least"); + string2 = new BString("st"); + i = string1->IFindLast(*string2); + CPPUNIT_ASSERT(i == 16); + delete string1; + delete string2; - //NextSubTest(); - //string1 = new BString("laSt but NOT leaSt"); - //string2 = new BString("sT"); - //i = string1->IFindLast(*string2); - //CPPUNIT_ASSERT(i == 16); - //delete string1; - //delete string2; + NextSubTest(); + string1 = new BString("laSt but NOT leaSt"); + string2 = new BString("sT"); + i = string1->IFindLast(*string2); + CPPUNIT_ASSERT(i == 16); + delete string1; + delete string2; +#endif NextSubTest(); string1 = new BString; @@ -408,12 +420,14 @@ StringSearchTest::PerformTest(void) CPPUNIT_ASSERT(i == B_ERROR); delete string1; +#ifndef TEST_R5 //Commented since crashes R5 - //NextSubTest(); - //string1 = new BString("string"); - //i = string1->IFindLast((char*)NULL); - //CPPUNIT_ASSERT(i == B_BAD_VALUE); - //delete string1; + NextSubTest(); + string1 = new BString("string"); + i = string1->IFindLast((char*)NULL); + CPPUNIT_ASSERT(i == B_BAD_VALUE); + delete string1; +#endif //FindLast(BString&, int32) NextSubTest();