@@ -127,10 +127,15 @@ andArguments: args] autorelease]; va_end(args); return ret; } + ++ stringWithString: (OFString*)str +{ + return [[[self alloc] initWithString: str] autorelease]; +} - init { [super init]; @@ -228,10 +233,33 @@ @throw e; } return self; } + +- initWithString: (OFString*)str +{ + self = [super init]; + + string = strdup([str cString]); + length = [str length]; + + @try { + [self addItemToMemoryPool: string]; + } @catch (OFException *e) { + /* + * We can't use [super dealloc] on OS X here. + * Compiler bug? Anyway, [self dealloc] will do here as we + * don't reimplement dealloc. + */ + free(string); + [self dealloc]; + @throw e; + } + + return self; +} - (const char*)cString { return string; } @@ -246,11 +274,11 @@ return [self retain]; } - (id)mutableCopy { - return [[OFMutableString alloc] initWithCString: string]; + return [[OFMutableString alloc] initWithString: self]; } - (BOOL)isEqual: (id)obj { if (![obj isKindOf: [OFString class]])