@@ -263,42 +263,23 @@ } #ifdef OF_HAVE_FILES - (instancetype)initWithContentsOfFile: (OFString *)path { - char *buffer = NULL; - OFStreamOffset fileSize; - - @try { - void *pool = objc_autoreleasePoolPush(); - OFFile *file = [OFFile fileWithPath: path mode: @"r"]; - fileSize = [file seekToOffset: 0 whence: OFSeekEnd]; - - if (fileSize < 0 || (unsigned long long)fileSize > SIZE_MAX) - @throw [OFOutOfRangeException exception]; - - [file seekToOffset: 0 whence: OFSeekSet]; - - buffer = OFAllocMemory((size_t)fileSize, 1); - [file readIntoBuffer: buffer exactLength: (size_t)fileSize]; - - objc_autoreleasePoolPop(pool); - } @catch (id e) { - OFFreeMemory(buffer); - [self release]; - - @throw e; - } - - @try { - self = [self initWithItemsNoCopy: buffer - count: (size_t)fileSize - freeWhenDone: true]; - } @catch (id e) { - OFFreeMemory(buffer); - @throw e; - } + void *pool = objc_autoreleasePoolPush(); + OFIRI *IRI; + + @try { + IRI = [OFIRI fileIRIWithPath: path]; + } @catch (id e) { + [self release]; + @throw e; + } + + self = [self initWithContentsOfIRI: IRI]; + + objc_autoreleasePoolPop(pool); return self; } #endif