Index: src/OFDataArray.m ================================================================== --- src/OFDataArray.m +++ src/OFDataArray.m @@ -346,10 +346,13 @@ } } - (void)removeLastItem { + if (count < 1) + @throw [OFOutOfRangeException exceptionWithClass: isa]; + count--; @try { data = [self resizeMemory: data toNItems: count ofSize: itemSize]; @@ -575,6 +578,30 @@ if (size != newSize) data = [self resizeMemory: data toSize: newSize]; size = newSize; } + +- (void)removeLastItem +{ + size_t newSize, lastPageByte; + + if (count < 1) + @throw [OFOutOfRangeException exceptionWithClass: isa]; + + count--; + lastPageByte = of_pagesize - 1; + newSize = (count * itemSize + lastPageByte) & ~lastPageByte; + + if (size != newSize) { + @try { + data = [self resizeMemory: data + toNItems: count + ofSize: newSize]; + } @catch (OFOutOfMemoryException *e) { + /* We don't care, as we only made it smaller */ + } + + size = newSize; + } +} @end