@@ -43,10 +43,12 @@ [ret appendString: component]; first = false; } + + [ret makeImmutable]; objc_autoreleasePoolPop(pool); return ret; } @@ -59,18 +61,18 @@ - (OFArray *)pathComponents { OFMutableArray OF_GENERIC(OFString *) *ret = [OFMutableArray array]; void *pool = objc_autoreleasePoolPush(); const char *cString = [self UTF8String]; - size_t i, last = 0, pathCStringLength = [self UTF8StringLength]; + size_t i, last = 0, cStringLength = [self UTF8StringLength]; - if (pathCStringLength == 0) { + if (cStringLength == 0) { objc_autoreleasePoolPop(pool); return ret; } - for (i = 0; i < pathCStringLength; i++) { + for (i = 0; i < cStringLength; i++) { if (cString[i] == '/') { if (i == 0) [ret addObject: @"/"]; else if (i - last != 0) [ret addObject: [OFString @@ -93,31 +95,31 @@ - (OFString *)lastPathComponent { void *pool = objc_autoreleasePoolPush(); const char *cString = [self UTF8String]; - size_t pathCStringLength = [self UTF8StringLength]; + size_t cStringLength = [self UTF8StringLength]; ssize_t i; OFString *ret; - if (pathCStringLength == 0) { + if (cStringLength == 0) { objc_autoreleasePoolPop(pool); return @""; } - if (cString[pathCStringLength - 1] == '/') - pathCStringLength--; + if (cString[cStringLength - 1] == '/') + cStringLength--; - if (pathCStringLength == 0) { + if (cStringLength == 0) { objc_autoreleasePoolPop(pool); return @"/"; } - if (pathCStringLength - 1 > SSIZE_MAX) + if (cStringLength - 1 > SSIZE_MAX) @throw [OFOutOfRangeException exception]; - for (i = pathCStringLength - 1; i >= 0; i--) { + for (i = cStringLength - 1; i >= 0; i--) { if (cString[i] == '/') { i++; break; } } @@ -128,11 +130,11 @@ */ if (i < 0) i = 0; ret = [[OFString alloc] initWithUTF8String: cString + i - length: pathCStringLength - i]; + length: cStringLength - i]; objc_autoreleasePoolPop(pool); return [ret autorelease]; } @@ -161,27 +163,27 @@ - (OFString *)stringByDeletingLastPathComponent { void *pool = objc_autoreleasePoolPush(); const char *cString = [self UTF8String]; - size_t pathCStringLength = [self UTF8StringLength]; + size_t cStringLength = [self UTF8StringLength]; OFString *ret; - if (pathCStringLength == 0) { + if (cStringLength == 0) { objc_autoreleasePoolPop(pool); return @""; } - if (cString[pathCStringLength - 1] == '/') - pathCStringLength--; + if (cString[cStringLength - 1] == '/') + cStringLength--; - if (pathCStringLength == 0) { + if (cStringLength == 0) { objc_autoreleasePoolPop(pool); return @"/"; } - for (size_t i = pathCStringLength; i >= 1; i--) { + for (size_t i = cStringLength; i >= 1; i--) { if (cString[i - 1] == '/') { if (i == 1) { objc_autoreleasePoolPop(pool); return @"/"; }