diff options
author | Andreas Huber <andih@google.com> | 2010-06-10 11:14:26 -0700 |
---|---|---|
committer | Andreas Huber <andih@google.com> | 2010-06-10 11:25:51 -0700 |
commit | 62a2aa01528e70c63aef60a6f48929da5a06761a (patch) | |
tree | 605561d8fddc392de300c72b5acd95a410f535ae /libs/utils/String8.cpp | |
parent | 66b89a62aa6d5599ad4d11d891b5028587d4c6be (diff) | |
download | frameworks_base-62a2aa01528e70c63aef60a6f48929da5a06761a.zip frameworks_base-62a2aa01528e70c63aef60a6f48929da5a06761a.tar.gz frameworks_base-62a2aa01528e70c63aef60a6f48929da5a06761a.tar.bz2 |
Fix String8 to free its memory only after assignment operations based on pointers are finished in case that pointer referred to the string's original contents.
Change-Id: I6961f3cf10ba3b728579ea63262db750a4cf8577
Diffstat (limited to 'libs/utils/String8.cpp')
-rw-r--r-- | libs/utils/String8.cpp | 12 |
1 files changed, 8 insertions, 4 deletions
diff --git a/libs/utils/String8.cpp b/libs/utils/String8.cpp index 636cd83..82776f4 100644 --- a/libs/utils/String8.cpp +++ b/libs/utils/String8.cpp @@ -301,8 +301,9 @@ void String8::setTo(const String8& other) status_t String8::setTo(const char* other) { + const char *newString = allocFromUTF8(other, strlen(other)); SharedBuffer::bufferFromData(mString)->release(); - mString = allocFromUTF8(other, strlen(other)); + mString = newString; if (mString) return NO_ERROR; mString = getEmptyString(); @@ -311,8 +312,9 @@ status_t String8::setTo(const char* other) status_t String8::setTo(const char* other, size_t len) { + const char *newString = allocFromUTF8(other, len); SharedBuffer::bufferFromData(mString)->release(); - mString = allocFromUTF8(other, len); + mString = newString; if (mString) return NO_ERROR; mString = getEmptyString(); @@ -321,8 +323,9 @@ status_t String8::setTo(const char* other, size_t len) status_t String8::setTo(const char16_t* other, size_t len) { + const char *newString = allocFromUTF16(other, len); SharedBuffer::bufferFromData(mString)->release(); - mString = allocFromUTF16(other, len); + mString = newString; if (mString) return NO_ERROR; mString = getEmptyString(); @@ -331,8 +334,9 @@ status_t String8::setTo(const char16_t* other, size_t len) status_t String8::setTo(const char32_t* other, size_t len) { + const char *newString = allocFromUTF32(other, len); SharedBuffer::bufferFromData(mString)->release(); - mString = allocFromUTF32(other, len); + mString = newString; if (mString) return NO_ERROR; mString = getEmptyString(); |