Index: src/OFString.h ================================================================== --- src/OFString.h +++ src/OFString.h @@ -120,10 +120,20 @@ * \param string The unicode string * \return A new autoreleased OFString */ + stringWithUnicodeString: (of_unichar_t*)string; +/** + * Creates a new OFString from a unicode string with the specified length. + * + * \param string The unicode string + * \param length The length of the unicode string + * \return A new autoreleased OFString + */ ++ stringWithUnicodeString: (of_unichar_t*)string + length: (size_t)length; + /** * Creates a new OFString from a format string. * See printf for the format syntax. * * \param format A string used as format to initialize the OFString @@ -240,10 +250,21 @@ * \param string The unicode string * \return An initialized OFString */ - initWithUnicodeString: (of_unichar_t*)string; +/** + * Initializes an already allocated OFString with a unicode string with the + * specified length. + * + * \param string The unicode string + * \param length The length of the unicode string + * \return An initialized OFString + */ +- initWithUnicodeString: (of_unichar_t*)string + length: (size_t)length; + /** * Initializes an already allocated OFString with a format string. * See printf for the format syntax. * * \param format A string used as format to initialize the OFString Index: src/OFString.m ================================================================== --- src/OFString.m +++ src/OFString.m @@ -296,10 +296,17 @@ + stringWithUnicodeString: (of_unichar_t*)string { return [[[self alloc] initWithUnicodeString: string] autorelease]; } + ++ stringWithUnicodeString: (of_unichar_t*)string + length: (size_t)length +{ + return [[[self alloc] initWithUnicodeString: string + length: length] autorelease]; +} + stringWithFormat: (OFString*)format, ... { id ret; va_list arguments; @@ -541,26 +548,36 @@ return self; } - initWithUnicodeString: (of_unichar_t*)string_ { + return [self initWithUnicodeString: string_ + length: of_unicode_string_length(string_)]; +} + +- initWithUnicodeString: (of_unichar_t*)string_ + length: (size_t)length_ +{ self = [super init]; @try { char buffer[4]; size_t i = 0; BOOL swap = NO; - if (*string_ == 0xFEFF) + if (*string_ == 0xFEFF) { string_++; + length_--; + } if (*string_ == 0xFFFE0000) { swap = YES; string_++; + length_--; } - length = of_unicode_string_length(string_); + length = length_; string = [self allocMemoryWithSize: length + 1]; while (*string_ != '\0') { size_t characterLen;