diff options
Diffstat (limited to 'libs/utils/String8.cpp')
-rw-r--r-- | libs/utils/String8.cpp | 17 |
1 files changed, 13 insertions, 4 deletions
diff --git a/libs/utils/String8.cpp b/libs/utils/String8.cpp index 413928abb3..e852d77b79 100644 --- a/libs/utils/String8.cpp +++ b/libs/utils/String8.cpp @@ -47,16 +47,12 @@ void initialize_string8(); static inline char* getEmptyString() { - if (!gEmptyStringBuf) initialize_string8(); - gEmptyStringBuf->acquire(); return gEmptyString; } void initialize_string8() { - if (gEmptyStringBuf) return; - // HACK: This dummy dependency forces linking libutils Static.cpp, // which is needed to initialize String8/String16 classes. // These variables are named for Darwin, but are needed elsewhere too, @@ -146,6 +142,19 @@ String8::String8() { } +String8::String8(StaticLinkage) + : mString(0) +{ + // this constructor is used when we can't rely on the static-initializers + // having run. In this case we always allocate an empty string. It's less + // efficient than using getEmptyString(), but we assume it's uncommon. + + char* data = static_cast<char*>( + SharedBuffer::alloc(sizeof(char))->data()); + data[0] = 0; + mString = data; +} + String8::String8(const String8& o) : mString(o.mString) { |