Index: src/OFArray.m ================================================================== --- src/OFArray.m +++ src/OFArray.m @@ -238,19 +238,17 @@ buffer[i] = [self objectAtIndex: range.location + i]; } - (id const *)objects { - OFObject *container; - size_t count; + size_t count = self.count; + OFMutableData *data = [OFMutableData dataWithItemSize: sizeof(id) + capacity: count]; id *buffer; - container = [[[OFObject alloc] init] autorelease]; - count = self.count; - buffer = [container allocMemoryWithSize: sizeof(*buffer) - count: count]; - + [data increaseCountBy: count]; + buffer = data.mutableItems; [self getObjects: buffer inRange: of_range(0, count)]; return buffer; } Index: src/OFBitSetCharacterSet.m ================================================================== --- src/OFBitSetCharacterSet.m +++ src/OFBitSetCharacterSet.m @@ -47,12 +47,11 @@ @throw [OFOutOfRangeException exception]; newSize = OF_ROUND_UP_POW2(8, c + 1) / 8; - _bitset = [self resizeMemory: _bitset - size: newSize]; + _bitset = of_realloc(_bitset, newSize, 1); memset(_bitset + _size, '\0', newSize - _size); _size = newSize; } @@ -65,14 +64,21 @@ @throw e; } return self; } + +- (void)dealloc +{ + free(_bitset); + + [super dealloc]; +} - (bool)characterIsMember: (of_unichar_t)character { if (character / 8 >= _size) return false; return of_bitset_isset(_bitset, character); } @end Index: src/OFBytesValue.m ================================================================== --- src/OFBytesValue.m +++ src/OFBytesValue.m @@ -29,20 +29,27 @@ self = [super init]; @try { _size = of_sizeof_type_encoding(objCType); _objCType = objCType; - _bytes = [self allocMemoryWithSize: _size]; + _bytes = of_malloc(1, _size); memcpy(_bytes, bytes, _size); } @catch (id e) { [self release]; @throw e; } return self; } + +- (void)dealloc +{ + free(_bytes); + + [super dealloc]; +} - (void)getValue: (void *)value size: (size_t)size { if (size != _size) Index: src/OFDNSResolver.m ================================================================== --- src/OFDNSResolver.m +++ src/OFDNSResolver.m @@ -557,10 +557,11 @@ [_settings release]; [_delegate release]; [_queryData release]; [_TCPSocket release]; [_TCPQueryData release]; + free(_TCPBuffer); [_cancelTimer release]; [super dealloc]; } @end @@ -1135,12 +1136,11 @@ context->_responseLength = 0; return nil; } if (context->_TCPBuffer == nil) - context->_TCPBuffer = - [context allocMemoryWithSize: MAX_DNS_RESPONSE_LENGTH]; + context->_TCPBuffer = of_malloc(MAX_DNS_RESPONSE_LENGTH, 1); [sock asyncReadIntoBuffer: context->_TCPBuffer exactLength: 2]; return nil; } Index: src/OFInflateStream.m ================================================================== --- src/OFInflateStream.m +++ src/OFInflateStream.m @@ -194,12 +194,11 @@ #ifdef OF_INFLATE64_STREAM_M _slidingWindowMask = 0xFFFF; #else _slidingWindowMask = 0x7FFF; #endif - _slidingWindow = [self allocZeroedMemoryWithSize: - _slidingWindowMask + 1]; + _slidingWindow = of_calloc(_slidingWindowMask + 1, 1); } @catch (id e) { [self release]; @throw e; } @@ -209,14 +208,19 @@ - (void)dealloc { if (_stream != nil) [self close]; - if (_state == HUFFMAN_TREE) + free(_slidingWindow); + + if (_state == HUFFMAN_TREE) { + free(_context.huffmanTree.lengths); + if (_context.huffmanTree.codeLenTree != NULL) of_huffman_tree_release( _context.huffmanTree.codeLenTree); + } if (_state == HUFFMAN_TREE || _state == HUFFMAN_BLOCK) { if (_context.huffman.litLenTree != fixedLitLenTree) of_huffman_tree_release(_context.huffman.litLenTree); if (_context.huffman.distTree != fixedDistTree) @@ -374,12 +378,11 @@ CTX.codeLenCodesCount = bits; } if OF_LIKELY (CTX.lengths == NULL) - CTX.lengths = [self - allocZeroedMemoryWithSize: 19]; + CTX.lengths = of_calloc(19, 1); for (uint16_t i = CTX.receivedCount; i < CTX.codeLenCodesCount + 4; i++) { if OF_UNLIKELY (!tryReadBits(self, &bits, 3)) { CTX.receivedCount = i; @@ -391,19 +394,19 @@ CTX.codeLenTree = of_huffman_tree_construct( CTX.lengths, 19); CTX.treeIter = CTX.codeLenTree; - [self freeMemory: CTX.lengths]; + free(CTX.lengths); CTX.lengths = NULL; CTX.receivedCount = 0; CTX.value = 0xFF; } if OF_LIKELY (CTX.lengths == NULL) - CTX.lengths = [self allocMemoryWithSize: - CTX.litLenCodesCount + CTX.distCodesCount + 258]; + CTX.lengths = of_malloc( + CTX.litLenCodesCount + CTX.distCodesCount + 258, 1); for (uint16_t i = CTX.receivedCount; i < CTX.litLenCodesCount + CTX.distCodesCount + 258;) { uint8_t j, count; @@ -482,11 +485,11 @@ CTX.litLenCodesCount + 257); CTX.distTree = of_huffman_tree_construct( CTX.lengths + CTX.litLenCodesCount + 257, CTX.distCodesCount + 1); - [self freeMemory: CTX.lengths]; + free(CTX.lengths); /* * litLenTree and distTree are at the same location in * _context.huffman and _context.huffmanTree, thus no need to * set them. Index: src/OFLHADecompressingStream.m ================================================================== --- src/OFLHADecompressingStream.m +++ src/OFLHADecompressingStream.m @@ -108,12 +108,11 @@ _distanceBits = distanceBits; _dictionaryBits = dictionaryBits; _slidingWindowMask = (1u << dictionaryBits) - 1; - _slidingWindow = [self allocMemoryWithSize: - _slidingWindowMask + 1]; + _slidingWindow = of_malloc(_slidingWindowMask + 1, 1); memset(_slidingWindow, ' ', _slidingWindowMask + 1); } @catch (id e) { [self release]; @throw e; } @@ -123,17 +122,21 @@ - (void)dealloc { if (_stream != nil) [self close]; + + free(_slidingWindow); if (_codeLenTree != NULL) of_huffman_tree_release(_codeLenTree); if (_litLenTree != NULL) of_huffman_tree_release(_litLenTree); if (_distTree != NULL) of_huffman_tree_release(_distTree); + + free(_codesLengths); [super dealloc]; } - (size_t)lowlevelReadIntoBuffer: (void *)buffer_ @@ -172,11 +175,11 @@ goto start; } _codesCount = bits; _codesReceived = 0; - _codesLengths = [self allocZeroedMemoryWithSize: bits]; + _codesLengths = of_calloc(bits, 1); _skip = true; _state = STATE_CODE_LEN_TREE; goto start; case STATE_CODE_LEN_TREE: @@ -223,11 +226,12 @@ _codesReceived++; } _codeLenTree = of_huffman_tree_construct(_codesLengths, _codesCount); - [self freeMemory: _codesLengths]; + free(_codesLengths); + _codesLengths = NULL; _state = STATE_LITLEN_CODES_COUNT; goto start; case STATE_CODE_LEN_TREE_SINGLE: if OF_UNLIKELY (!tryReadBits(self, &bits, 5)) @@ -252,11 +256,11 @@ goto start; } _codesCount = bits; _codesReceived = 0; - _codesLengths = [self allocZeroedMemoryWithSize: bits]; + _codesLengths = of_calloc(bits, 1); _skip = false; _treeIter = _codeLenTree; _state = STATE_LITLEN_TREE; goto start; @@ -312,11 +316,12 @@ _codesLengths[_codesReceived++] = value - 2; } _litLenTree = of_huffman_tree_construct(_codesLengths, _codesCount); - [self freeMemory: _codesLengths]; + free(_codesLengths); + _codesLengths = NULL; of_huffman_tree_release(_codeLenTree); _codeLenTree = NULL; _state = STATE_DIST_CODES_COUNT; @@ -341,11 +346,11 @@ goto start; } _codesCount = bits; _codesReceived = 0; - _codesLengths = [self allocZeroedMemoryWithSize: bits]; + _codesLengths = of_calloc(bits, 1); _treeIter = _codeLenTree; _state = STATE_DIST_TREE; goto start; case STATE_DIST_TREE: @@ -376,11 +381,12 @@ _codesReceived++; } _distTree = of_huffman_tree_construct(_codesLengths, _codesCount); - [self freeMemory: _codesLengths]; + free(_codesLengths); + _codesLengths = NULL; _treeIter = _litLenTree; _state = STATE_BLOCK_LITLEN; goto start; case STATE_DIST_TREE_SINGLE: Index: src/OFMapTable.m ================================================================== --- src/OFMapTable.m +++ src/OFMapTable.m @@ -161,12 +161,11 @@ _capacity *= 2; if (_capacity < MIN_CAPACITY) _capacity = MIN_CAPACITY; - _buckets = [self allocZeroedMemoryWithSize: sizeof(*_buckets) - count: _capacity]; + _buckets = of_calloc(_capacity, sizeof(*_buckets)); if (of_hash_seed != 0) _rotate = of_random16() & 31; } @catch (id e) { [self release]; @@ -180,12 +179,16 @@ { for (unsigned long i = 0; i < _capacity; i++) { if (_buckets[i] != NULL && _buckets[i] != &deleted) { _keyFunctions.release(_buckets[i]->key); _objectFunctions.release(_buckets[i]->object); + + free(_buckets[i]); } } + + free(_buckets); [super dealloc]; } - (bool)isEqual: (id)object @@ -320,12 +323,11 @@ * below the minimum capacity. */ if ((capacity < _capacity && count > _count) || capacity < MIN_CAPACITY) return; - buckets = [self allocZeroedMemoryWithSize: sizeof(*buckets) - count: capacity]; + buckets = of_calloc(capacity, sizeof(*buckets)); for (unsigned long i = 0; i < _capacity; i++) { if (_buckets[i] != NULL && _buckets[i] != &deleted) { unsigned long j, last; @@ -347,11 +349,11 @@ buckets[j] = _buckets[i]; } } - [self freeMemory: _buckets]; + free(_buckets); _buckets = buckets; _capacity = capacity; } - (void)of_setObject: (void *)object @@ -410,24 +412,24 @@ } if (i >= last) @throw [OFOutOfRangeException exception]; - bucket = [self allocMemoryWithSize: sizeof(*bucket)]; + bucket = of_malloc(1, sizeof(*bucket)); @try { bucket->key = _keyFunctions.retain(key); } @catch (id e) { - [self freeMemory: bucket]; + free(bucket); @throw e; } @try { bucket->object = _objectFunctions.retain(object); } @catch (id e) { _keyFunctions.release(bucket->key); - [self freeMemory: bucket]; + free(bucket); @throw e; } bucket->hash = hash; @@ -468,11 +470,11 @@ _mutations++; _keyFunctions.release(_buckets[i]->key); _objectFunctions.release(_buckets[i]->object); - [self freeMemory: _buckets[i]]; + free(_buckets[i]); _buckets[i] = &deleted; _count--; [self of_resizeForCount: _count]; @@ -492,11 +494,11 @@ if (_keyFunctions.equal(_buckets[i]->key, key)) { _keyFunctions.release(_buckets[i]->key); _objectFunctions.release(_buckets[i]->object); - [self freeMemory: _buckets[i]]; + free(_buckets[i]); _buckets[i] = &deleted; _count--; _mutations++; [self of_resizeForCount: _count]; @@ -516,20 +518,18 @@ } _keyFunctions.release(_buckets[i]->key); _objectFunctions.release(_buckets[i]->object); - [self freeMemory: _buckets[i]]; + free(_buckets[i]); _buckets[i] = NULL; } } _count = 0; _capacity = MIN_CAPACITY; - _buckets = [self resizeMemory: _buckets - size: sizeof(*_buckets) - count: _capacity]; + _buckets = of_realloc(_buckets, _capacity, sizeof(*_buckets)); /* * Get a new random value for _rotate, so that it is not less secure * than creating a new hash map. */ Index: src/OFMethodSignature.m ================================================================== --- src/OFMethodSignature.m +++ src/OFMethodSignature.m @@ -595,11 +595,11 @@ length = strlen(types); if (length == 0) @throw [OFInvalidFormatException exception]; - _types = [self allocMemoryWithSize: length + 1]; + _types = of_malloc(length + 1, 1); memcpy(_types, types, length); _typesPointers = [[OFMutableData alloc] initWithItemSize: sizeof(char *)]; _offsets = [[OFMutableData alloc] @@ -669,10 +669,11 @@ return self; } - (void)dealloc { + free(_types); [_typesPointers release]; [_offsets release]; [super dealloc]; } Index: src/OFOptionsParser.m ================================================================== --- src/OFOptionsParser.m +++ src/OFOptionsParser.m @@ -84,16 +84,14 @@ *iter->argumentPtr = nil; count++; } + _options = of_malloc(count + 1, sizeof(*_options)); _longOptions = [[OFMapTable alloc] initWithKeyFunctions: keyFunctions objectFunctions: objectFunctions]; - _options = [self - allocMemoryWithSize: sizeof(*_options) - count: count + 1]; for (iter = options, iter2 = _options; iter->shortOption != '\0' || iter->longOption != nil; iter++, iter2++) { iter2->shortOption = iter->shortOption; @@ -144,10 +142,11 @@ - (void)dealloc { of_options_parser_option_t *iter; + free(_options); [_longOptions release]; if (_options != NULL) for (iter = _options; iter->shortOption != '\0' || iter->longOption != nil; Index: src/OFPollKernelEventObserver.m ================================================================== --- src/OFPollKernelEventObserver.m +++ src/OFPollKernelEventObserver.m @@ -50,12 +50,11 @@ _FDs = [[OFMutableData alloc] initWithItemSize: sizeof(struct pollfd)]; [_FDs addItem: &p]; _maxFD = _cancelFD[0]; - _FDToObject = [self allocMemoryWithSize: sizeof(id) - count: (size_t)_maxFD + 1]; + _FDToObject = of_malloc((size_t)_maxFD + 1, sizeof(id)); } @catch (id e) { [self release]; @throw e; } @@ -63,10 +62,11 @@ } - (void)dealloc { [_FDs release]; + free(_FDToObject); [super dealloc]; } - (void)of_addObject: (id)object @@ -96,13 +96,12 @@ if (!found) { struct pollfd p = { fd, events, 0 }; if (fd > _maxFD) { _maxFD = fd; - _FDToObject = [self resizeMemory: _FDToObject - size: sizeof(id) - count: (size_t)_maxFD + 1]; + _FDToObject = of_realloc(_FDToObject, + (size_t)_maxFD + 1, sizeof(id)); } _FDToObject[fd] = object; [_FDs addItem: &p]; } Index: src/OFSeekableStream.m ================================================================== --- src/OFSeekableStream.m +++ src/OFSeekableStream.m @@ -53,12 +53,12 @@ offset -= _readBufferLength; offset = [self lowlevelSeekToOffset: offset whence: whence]; - [self freeMemory: _readBufferMemory]; + free(_readBufferMemory); _readBuffer = _readBufferMemory = NULL; _readBufferLength = 0; return offset; } @end Index: src/OFStream.m ================================================================== --- src/OFStream.m +++ src/OFStream.m @@ -90,10 +90,18 @@ @throw e; } return self; } + +- (void)dealloc +{ + free(_readBufferMemory); + free(_writeBuffer); + + [super dealloc]; +} - (bool)lowlevelIsAtEndOfStream { OF_UNRECOGNIZED_SELECTOR } @@ -141,12 +149,11 @@ length: MIN_READ_SIZE]; if (bytesRead > length) { memcpy(buffer, tmp, length); - readBuffer = [self allocMemoryWithSize: - bytesRead - length]; + readBuffer = of_malloc(bytesRead - length, 1); memcpy(readBuffer, tmp + length, bytesRead - length); _readBuffer = _readBufferMemory = readBuffer; _readBufferLength = bytesRead - length; @@ -164,11 +171,11 @@ if (length >= _readBufferLength) { size_t ret = _readBufferLength; memcpy(buffer, _readBuffer, _readBufferLength); - [self freeMemory: _readBufferMemory]; + free(_readBufferMemory); _readBuffer = _readBufferMemory = NULL; _readBufferLength = 0; return ret; } else { @@ -752,11 +759,11 @@ ret = [OFString stringWithCString: _readBuffer encoding: encoding length: retLength]; - [self freeMemory: _readBufferMemory]; + free(_readBufferMemory); _readBuffer = _readBufferMemory = NULL; _readBufferLength = 0; _waitingForDelimiter = false; return ret; @@ -791,23 +798,21 @@ if (bufferLength > 0) { /* * Append data to _readBuffer * to prevent loss of data. */ - readBuffer = [self - allocMemoryWithSize: + readBuffer = of_malloc( _readBufferLength + - bufferLength]; + bufferLength, 1); memcpy(readBuffer, _readBuffer, _readBufferLength); memcpy(readBuffer + _readBufferLength, buffer, bufferLength); - [self freeMemory: - _readBufferMemory]; + free(_readBufferMemory); _readBuffer = readBuffer; _readBufferMemory = readBuffer; _readBufferLength += bufferLength; } @@ -815,17 +820,16 @@ @throw e; } @finally { free(retCString); } - readBuffer = [self - allocMemoryWithSize: bufferLength - i - 1]; + readBuffer = of_malloc(bufferLength - i - 1, 1); if (readBuffer != NULL) memcpy(readBuffer, buffer + i + 1, bufferLength - i - 1); - [self freeMemory: _readBufferMemory]; + free(_readBufferMemory); _readBuffer = _readBufferMemory = readBuffer; _readBufferLength = bufferLength - i - 1; _waitingForDelimiter = false; return ret; @@ -832,18 +836,18 @@ } } /* There was no newline or \0 */ if (bufferLength > 0) { - readBuffer = [self allocMemoryWithSize: - _readBufferLength + bufferLength]; + readBuffer = of_malloc(_readBufferLength + bufferLength, + 1); memcpy(readBuffer, _readBuffer, _readBufferLength); memcpy(readBuffer + _readBufferLength, buffer, bufferLength); - [self freeMemory: _readBufferMemory]; + free(_readBufferMemory); _readBuffer = _readBufferMemory = readBuffer; _readBufferLength += bufferLength; } } @finally { free(buffer); @@ -986,11 +990,11 @@ ret = [OFString stringWithCString: _readBuffer encoding: encoding length: _readBufferLength]; - [self freeMemory: _readBufferMemory]; + free(_readBufferMemory); _readBuffer = _readBufferMemory = NULL; _readBufferLength = 0; _waitingForDelimiter = false; return ret; @@ -1035,23 +1039,21 @@ if (bufferLength > 0) { /* * Append data to _readBuffer * to prevent loss of data. */ - readBuffer = [self - allocMemoryWithSize: + readBuffer = of_malloc( _readBufferLength + - bufferLength]; + bufferLength, 1); memcpy(readBuffer, _readBuffer, _readBufferLength); memcpy(readBuffer + _readBufferLength, buffer, bufferLength); - [self freeMemory: - _readBufferMemory]; + free(_readBufferMemory); _readBuffer = readBuffer; _readBufferMemory = readBuffer; _readBufferLength += bufferLength; } @@ -1059,17 +1061,16 @@ @throw e; } @finally { free(retCString); } - readBuffer = [self allocMemoryWithSize: - bufferLength - i - 1]; + readBuffer = of_malloc(bufferLength - i - 1, 1); if (readBuffer != NULL) memcpy(readBuffer, buffer + i + 1, bufferLength - i - 1); - [self freeMemory: _readBufferMemory]; + free(_readBufferMemory); _readBuffer = _readBufferMemory = readBuffer; _readBufferLength = bufferLength - i - 1; _waitingForDelimiter = false; return ret; @@ -1076,18 +1077,18 @@ } } /* Neither the delimiter nor \0 was found */ if (bufferLength > 0) { - readBuffer = [self allocMemoryWithSize: - _readBufferLength + bufferLength]; + readBuffer = of_malloc(_readBufferLength + bufferLength, + 1); memcpy(readBuffer, _readBuffer, _readBufferLength); memcpy(readBuffer + _readBufferLength, buffer, bufferLength); - [self freeMemory: _readBufferMemory]; + free(_readBufferMemory); _readBuffer = _readBufferMemory = readBuffer; _readBufferLength += bufferLength; } } @finally { free(buffer); @@ -1129,11 +1130,11 @@ return; [self lowlevelWriteBuffer: _writeBuffer length: _writeBufferLength]; - [self freeMemory: _writeBuffer]; + free(_writeBuffer); _writeBuffer = NULL; _writeBufferLength = 0; } - (size_t)writeBuffer: (const void *)buffer @@ -1150,12 +1151,12 @@ bytesWritten: bytesWritten errNo: 0]; return bytesWritten; } else { - _writeBuffer = [self resizeMemory: _writeBuffer - size: _writeBufferLength + length]; + _writeBuffer = of_realloc(_writeBuffer, + _writeBufferLength + length, 1); memcpy(_writeBuffer + _writeBufferLength, buffer, length); _writeBufferLength += length; return length; } @@ -1871,28 +1872,28 @@ char *readBuffer; if (length > SIZE_MAX - _readBufferLength) @throw [OFOutOfRangeException exception]; - readBuffer = [self allocMemoryWithSize: _readBufferLength + length]; + readBuffer = of_malloc(_readBufferLength + length, 1); memcpy(readBuffer, buffer, length); memcpy(readBuffer + length, _readBuffer, _readBufferLength); - [self freeMemory: _readBufferMemory]; + free(_readBufferMemory); _readBuffer = _readBufferMemory = readBuffer; _readBufferLength += length; } - (void)close { - [self freeMemory: _readBufferMemory]; + free(_readBufferMemory); _readBuffer = _readBufferMemory = NULL; _readBufferLength = 0; - [self freeMemory: _writeBuffer]; + free(_writeBuffer); _writeBuffer = NULL; _writeBufferLength = 0; _buffersWrites = false; _waitingForDelimiter = false; } @end Index: utils/ofhttp/OFHTTP.m ================================================================== --- utils/ofhttp/OFHTTP.m +++ utils/ofhttp/OFHTTP.m @@ -302,11 +302,11 @@ forKey: @"User-Agent"]; _HTTPClient = [[OFHTTPClient alloc] init]; _HTTPClient.delegate = self; - _buffer = [self allocMemoryWithSize: [OFSystemInfo pageSize]]; + _buffer = of_malloc(1, [OFSystemInfo pageSize]); } @catch (id e) { [self release]; @throw e; }