@@ -688,11 +688,11 @@ struct stat st; @try { OFFile *file; - if (stat([path cStringWithEncoding: OF_STRING_ENCODING_NATIVE], + if (stat([path cStringUsingEncoding: OF_STRING_ENCODING_NATIVE], &st) == -1) @throw [OFOpenFileFailedException exceptionWithClass: [self class] path: path mode: @"rb"]; @@ -822,20 +822,28 @@ } return self; } -- (const char*)UTF8String +- (const char*)cStringUsingEncoding: (of_string_encoding_t)encoding { const of_unichar_t *unicodeString = [self unicodeString]; char *UTF8String; - size_t i, j = 0, length = [self length]; - size_t UTF8StringLength = length; + size_t i, j = 0, length, UTF8StringLength; OFObject *object; + if (encoding != OF_STRING_ENCODING_UTF_8) + /* TODO: Implement! */ + @throw [OFNotImplementedException + exceptionWithClass: [self class] + selector: _cmd]; + + unicodeString = [self unicodeString]; + length = [self length]; object = [[[OFObject alloc] init] autorelease]; UTF8String = [object allocMemoryWithSize: (length * 4) + 1]; + UTF8StringLength = length; for (i = 0; i < length; i++) { char buffer[4]; size_t len = of_string_utf8_encode(unicodeString[i], buffer); @@ -880,31 +888,34 @@ } return UTF8String; } -- (const char*)cStringWithEncoding: (of_string_encoding_t)encoding -{ - if (encoding == OF_STRING_ENCODING_UTF_8) - return [self UTF8String]; - - /* TODO: Implement! */ - @throw [OFNotImplementedException exceptionWithClass: [self class] - selector: _cmd]; +- (const char*)UTF8String +{ + return [self cStringUsingEncoding: OF_STRING_ENCODING_UTF_8]; } - (size_t)length { @throw [OFNotImplementedException exceptionWithClass: [self class] selector: _cmd]; } -- (size_t)UTF8StringLength +- (size_t)lengthOfBytesUsingEncoding: (of_string_encoding_t)encoding { - const of_unichar_t *unicodeString = [self unicodeString]; - size_t length = [self length]; - size_t i, UTF8StringLength = 0; + const of_unichar_t *unicodeString; + size_t i, length, UTF8StringLength = 0; + + if (encoding != OF_STRING_ENCODING_UTF_8) + /* TODO: Implement! */ + @throw [OFNotImplementedException + exceptionWithClass: [self class] + selector: _cmd]; + + unicodeString = [self unicodeString]; + length = [self length]; for (i = 0; i < length; i++) { char buffer[4]; size_t len = of_string_utf8_encode(unicodeString[i], buffer); @@ -916,18 +927,13 @@ } return UTF8StringLength; } -- (size_t)cStringLengthWithEncoding: (of_string_encoding_t)encoding -{ - if (encoding == OF_STRING_ENCODING_UTF_8) - return [self UTF8StringLength]; - - /* TODO: Implement! */ - @throw [OFNotImplementedException exceptionWithClass: [self class] - selector: _cmd]; +- (size_t)UTF8StringLength +{ + return [self lengthOfBytesUsingEncoding: OF_STRING_ENCODING_UTF_8]; } - (of_unichar_t)characterAtIndex: (size_t)index { @throw [OFNotImplementedException exceptionWithClass: [self class]