@@ -403,19 +403,17 @@ return self; } - initWithUTF8StringNoCopy: (const char*)UTF8String - freeWhenDone: (BOOL)freeWhenDone + freeWhenDone: (BOOL)freeWhenDone_ { self = [super init]; @try { size_t UTF8StringLength = strlen(UTF8String); - - if (freeWhenDone) - s->freeWhenDone = (char*)UTF8String; + char *freeWhenDone = (char*)UTF8String; if (UTF8StringLength >= 3 && !memcmp(UTF8String, "\xEF\xBB\xBF", 3)) { UTF8String += 3; UTF8StringLength -= 3; @@ -424,10 +422,13 @@ s = &s_store; s->cString = (char*)UTF8String; s->cStringLength = UTF8StringLength; + if (freeWhenDone_) + s->freeWhenDone = freeWhenDone; + switch (of_string_utf8_check(UTF8String, UTF8StringLength, &s->length)) { case 1: s->isUTF8 = YES; break;