@@ -467,10 +467,17 @@ return (id)[[OFString_UTF8 alloc] initWithCString: cString encoding: encoding length: cStringLength]; } + +- initWithData: (OFData *)data + encoding: (of_string_encoding_t)encoding +{ + return (id)[[OFString_UTF8 alloc] initWithData: data + encoding: encoding]; +} - initWithString: (OFString *)string { return (id)[[OFString_UTF8 alloc] initWithString: string]; } @@ -673,10 +680,17 @@ { return [[[self alloc] initWithCString: cString encoding: encoding length: cStringLength] autorelease]; } + ++ (instancetype)stringWithData: (OFData *)data + encoding: (of_string_encoding_t)encoding +{ + return [[[self alloc] initWithData: data + encoding: encoding] autorelease]; +} + (instancetype)stringWithString: (OFString *)string { return [[[self alloc] initWithString: string] autorelease]; } @@ -851,10 +865,28 @@ encoding: (of_string_encoding_t)encoding length: (size_t)cStringLength { OF_INVALID_INIT_METHOD } + +- initWithData: (OFData *)data + encoding: (of_string_encoding_t)encoding +{ + @try { + if ([data itemSize] != 1) + @throw [OFInvalidArgumentException exception]; + + self = [self initWithCString: [data items] + encoding: encoding + length: [data count]]; + } @catch (id e) { + [self release]; + @throw e; + } + + return self; +} - initWithString: (OFString *)string { OF_INVALID_INIT_METHOD }