Index: src/OFMutableString.m ================================================================== --- src/OFMutableString.m +++ src/OFMutableString.m @@ -33,11 +33,11 @@ #endif @implementation OFMutableString - (id)copy { - return [[OFString alloc] initWithCString: string]; + return [[OFString alloc] initWithString: self]; } - setToCString: (const char*)str { size_t len; Index: src/OFString.h ================================================================== --- src/OFString.h +++ src/OFString.h @@ -33,66 +33,82 @@ #endif BOOL is_utf8; } /** - * \return A new autoreleased OFMutableString + * \return A new autoreleased OFString */ + string; /** * Creates a new OFString from a C string. * - * \param str A C string to initialize the OFMutableString with - * \return A new autoreleased OFMutableString + * \param str A C string to initialize the OFString with + * \return A new autoreleased OFString */ + stringWithCString: (const char*)str; /** - * Creates a new OFString from a format C string. + * Creates a new OFString from a format string. * See printf for the format syntax. * - * \param fmt A string used as format to initialize the OFMutableString - * \return A new autoreleased OFMutableString + * \param fmt A string used as format to initialize the OFString + * \return A new autoreleased OFString */ + stringWithFormat: (OFString*)fmt, ...; +/** + * Creates a new OFString from another string. + * + * \param str A string to initialize the OFString with + * \return A new autoreleased OFString + */ ++ stringWithString: (OFString*)str; + /** * Initializes an already allocated OFString. * * \return An initialized OFString */ - init; /** - * Initializes an already allocated OFMutableString from a C string. + * Initializes an already allocated OFString with a C string. * - * \param str A C string to initialize the OFMutableString with - * \return An initialized OFMutableString + * \param str A C string to initialize the OFString with + * \return An initialized OFString */ - initWithCString: (const char*)str; /** - * Initializes an already allocated OFMutableString from a format C string. + * Initializes an already allocated OFString with a format string. * See printf for the format syntax. * - * \param fmt A string used as format to initialize the OFMutableString - * \return An initialized OFMutableString + * \param fmt A string used as format to initialize the OFString + * \return An initialized OFString */ - initWithFormat: (OFString*)fmt, ...; /** - * Initializes an already allocated OFMutableString from a format C string. + * Initializes an already allocated OFString with a format string. * See printf for the format syntax. * - * \param fmt A string used as format to initialize the OFMutableString + * \param fmt A string used as format to initialize the OFString * \param args The arguments used in the format string - * \return An initialized OFMutableString + * \return An initialized OFString */ - initWithFormat: (OFString*)fmt andArguments: (va_list)args; +/** + * Initializes an already allocated OFString with another string. + * + * \param str A string to initialize the OFString with + * \return An initialized OFString + */ +- initWithString: (OFString*)str; + /** * \return The OFString as a C string */ - (const char*)cString; Index: src/OFString.m ================================================================== --- src/OFString.m +++ src/OFString.m @@ -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]])