summaryrefslogtreecommitdiff
path: root/libs/utils/String8.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'libs/utils/String8.cpp')
-rw-r--r--libs/utils/String8.cpp17
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)
{