@@ -16,10 +16,11 @@ #include "config.h" #import "OFTarArchiveEntry.h" #import "OFTarArchiveEntry+Private.h" #import "OFDate.h" +#import "OFNumber.h" #import "OFStream.h" #import "OFString.h" #import "OFOutOfRangeException.h" @@ -81,12 +82,17 @@ - (instancetype)of_init { self = [super init]; - _type = OFTarArchiveEntryTypeFile; - _mode = 0644; + @try { + _type = OFTarArchiveEntryTypeFile; + _mode = [[OFNumber alloc] initWithUnsignedShort: 0644]; + } @catch (id e) { + [self release]; + @throw e; + } return self; } - (instancetype)of_initWithHeader: (unsigned char [512])header @@ -97,16 +103,16 @@ @try { void *pool = objc_autoreleasePoolPush(); OFString *targetFileName; _fileName = [stringFromBuffer(header, 100, encoding) copy]; - _mode = (unsigned long)octalValueFromBuffer( - header + 100, 8, ULONG_MAX); - _UID = (unsigned long)octalValueFromBuffer( - header + 108, 8, ULONG_MAX); - _GID = (unsigned long)octalValueFromBuffer( - header + 116, 8, ULONG_MAX); + _mode = [[OFNumber alloc] initWithUnsignedLongLong: + octalValueFromBuffer(header + 100, 8, ULONG_MAX)]; + _UID = [[OFNumber alloc] initWithUnsignedLongLong: + octalValueFromBuffer(header + 108, 8, ULONG_MAX)]; + _GID = [[OFNumber alloc] initWithUnsignedLongLong: + octalValueFromBuffer(header + 116, 8, ULONG_MAX)]; _uncompressedSize = (unsigned long long)octalValueFromBuffer( header + 124, 12, ULLONG_MAX); _compressedSize = _uncompressedSize + (512 - _uncompressedSize % 512); _modificationDate = [[OFDate alloc] @@ -155,10 +161,13 @@ } - (void)dealloc { [_fileName release]; + [_mode release]; + [_UID release]; + [_GID release]; [_modificationDate release]; [_targetFileName release]; [_owner release]; [_group release]; @@ -197,21 +206,21 @@ - (OFString *)fileName { return _fileName; } -- (unsigned long)mode +- (OFNumber *)mode { return _mode; } -- (unsigned long)UID +- (OFNumber *)UID { return _UID; } -- (unsigned long)GID +- (OFNumber *)GID { return _GID; } - (unsigned long long)compressedSize