@@ -655,11 +655,11 @@ - (OFData *)readDataUntilEndOfStream { OFMutableData *data = [OFMutableData data]; size_t pageSize = [OFSystemInfo pageSize]; - char *buffer = [self allocMemoryWithSize: pageSize]; + char *buffer = of_malloc(1, pageSize); @try { while (!self.atEndOfStream) { size_t length; @@ -667,11 +667,11 @@ length: pageSize]; [data addItems: buffer count: length]; } } @finally { - [self freeMemory: buffer]; + free(buffer); } [data makeImmutable]; return data; @@ -685,38 +685,38 @@ - (OFString *)readStringWithLength: (size_t)length encoding: (of_string_encoding_t)encoding { OFString *ret; - char *buffer = [self allocMemoryWithSize: length + 1]; + char *buffer = of_malloc(length + 1, 1); buffer[length] = 0; @try { [self readIntoBuffer: buffer exactLength: length]; ret = [OFString stringWithCString: buffer encoding: encoding]; } @finally { - [self freeMemory: buffer]; + free(buffer); } return ret; } - (OFString *)tryReadLineWithEncoding: (of_string_encoding_t)encoding { - size_t pageSize, bufferLength, retLength; - char *retCString, *buffer, *readBuffer; + size_t pageSize, bufferLength; + char *buffer, *readBuffer; OFString *ret; /* Look if there's a line or \0 in our buffer */ if (!_waitingForDelimiter && _readBuffer != NULL) { for (size_t i = 0; i < _readBufferLength; i++) { if OF_UNLIKELY (_readBuffer[i] == '\n' || _readBuffer[i] == '\0') { - retLength = i; + size_t retLength = i; if (i > 0 && _readBuffer[i - 1] == '\r') retLength--; ret = [OFString stringWithCString: _readBuffer @@ -732,14 +732,16 @@ } } /* Read and see if we got a newline or \0 */ pageSize = [OFSystemInfo pageSize]; - buffer = [self allocMemoryWithSize: pageSize]; + buffer = of_malloc(1, pageSize); @try { if ([self lowlevelIsAtEndOfStream]) { + size_t retLength; + if (_readBuffer == NULL) { _waitingForDelimiter = false; return nil; } @@ -765,13 +767,12 @@ /* Look if there's a newline or \0 */ for (size_t i = 0; i < bufferLength; i++) { if OF_UNLIKELY (buffer[i] == '\n' || buffer[i] == '\0') { - retLength = _readBufferLength + i; - retCString = [self - allocMemoryWithSize: retLength]; + size_t retLength = _readBufferLength + i; + char *retCString = of_malloc(retLength, 1); if (_readBuffer != NULL) memcpy(retCString, _readBuffer, _readBufferLength); memcpy(retCString + _readBufferLength, @@ -780,17 +781,14 @@ if (retLength > 0 && retCString[retLength - 1] == '\r') retLength--; @try { - char *rcs = retCString; - size_t rl = retLength; - ret = [OFString - stringWithCString: rcs + stringWithCString: retCString encoding: encoding - length: rl]; + length: retLength]; } @catch (id e) { if (bufferLength > 0) { /* * Append data to _readBuffer * to prevent loss of data. @@ -814,11 +812,11 @@ bufferLength; } @throw e; } @finally { - [self freeMemory: retCString]; + free(retCString); } readBuffer = [self allocMemoryWithSize: bufferLength - i - 1]; if (readBuffer != NULL) @@ -846,11 +844,11 @@ [self freeMemory: _readBufferMemory]; _readBuffer = _readBufferMemory = readBuffer; _readBufferLength += bufferLength; } } @finally { - [self freeMemory: buffer]; + free(buffer); } _waitingForDelimiter = true; return nil; } @@ -938,12 +936,12 @@ - (OFString *)tryReadTillDelimiter: (OFString *)delimiter encoding: (of_string_encoding_t)encoding { const char *delimiterCString; - size_t j, delimiterLength, pageSize, bufferLength, retLength; - char *retCString, *buffer, *readBuffer; + size_t j, delimiterLength, pageSize, bufferLength; + char *buffer, *readBuffer; OFString *ret; delimiterCString = [delimiter cStringWithEncoding: encoding]; delimiterLength = [delimiter cStringLengthWithEncoding: encoding]; j = 0; @@ -975,11 +973,11 @@ } } /* Read and see if we got a delimiter or \0 */ pageSize = [OFSystemInfo pageSize]; - buffer = [self allocMemoryWithSize: pageSize]; + buffer = of_malloc(1, pageSize); @try { if ([self lowlevelIsAtEndOfStream]) { if (_readBuffer == NULL) { _waitingForDelimiter = false; @@ -1005,17 +1003,19 @@ for (size_t i = 0; i < bufferLength; i++) { if (buffer[i] != delimiterCString[j++]) j = 0; if (j == delimiterLength || buffer[i] == '\0') { + size_t retLength; + char *retCString; + if (buffer[i] == '\0') delimiterLength = 1; retLength = _readBufferLength + i + 1 - delimiterLength; - retCString = [self - allocMemoryWithSize: retLength]; + retCString = of_malloc(retLength, 1); if (_readBuffer != NULL && _readBufferLength <= retLength) memcpy(retCString, _readBuffer, _readBufferLength); @@ -1025,17 +1025,14 @@ if (i >= delimiterLength) memcpy(retCString + _readBufferLength, buffer, i + 1 - delimiterLength); @try { - char *rcs = retCString; - size_t rl = retLength; - ret = [OFString - stringWithCString: rcs + stringWithCString: retCString encoding: encoding - length: rl]; + length: retLength]; } @catch (id e) { if (bufferLength > 0) { /* * Append data to _readBuffer * to prevent loss of data. @@ -1059,11 +1056,11 @@ bufferLength; } @throw e; } @finally { - [self freeMemory: retCString]; + free(retCString); } readBuffer = [self allocMemoryWithSize: bufferLength - i - 1]; if (readBuffer != NULL) @@ -1091,11 +1088,11 @@ [self freeMemory: _readBufferMemory]; _readBuffer = _readBufferMemory = readBuffer; _readBufferLength += bufferLength; } } @finally { - [self freeMemory: buffer]; + free(buffer); } _waitingForDelimiter = true; return nil; } @@ -1336,21 +1333,20 @@ #ifdef OF_BIG_ENDIAN [self writeBuffer: buffer length: size]; #else - uint16_t *tmp = [self allocMemoryWithSize: sizeof(uint16_t) - count: count]; + uint16_t *tmp = of_malloc(count, sizeof(uint16_t)); @try { for (size_t i = 0; i < count; i++) tmp[i] = OF_BSWAP16(buffer[i]); [self writeBuffer: tmp length: size]; } @finally { - [self freeMemory: tmp]; + free(tmp); } #endif return size; } @@ -1367,21 +1363,20 @@ #ifdef OF_BIG_ENDIAN [self writeBuffer: buffer length: size]; #else - uint32_t *tmp = [self allocMemoryWithSize: sizeof(uint32_t) - count: count]; + uint32_t *tmp = of_malloc(count, sizeof(uint32_t)); @try { for (size_t i = 0; i < count; i++) tmp[i] = OF_BSWAP32(buffer[i]); [self writeBuffer: tmp length: size]; } @finally { - [self freeMemory: tmp]; + free(tmp); } #endif return size; } @@ -1398,21 +1393,20 @@ #ifdef OF_BIG_ENDIAN [self writeBuffer: buffer length: size]; #else - uint64_t *tmp = [self allocMemoryWithSize: sizeof(uint64_t) - count: count]; + uint64_t *tmp = of_malloc(count, sizeof(uint64_t)); @try { for (size_t i = 0; i < count; i++) tmp[i] = OF_BSWAP64(buffer[i]); [self writeBuffer: tmp length: size]; } @finally { - [self freeMemory: tmp]; + free(tmp); } #endif return size; } @@ -1429,21 +1423,20 @@ #ifdef OF_FLOAT_BIG_ENDIAN [self writeBuffer: buffer length: size]; #else - float *tmp = [self allocMemoryWithSize: sizeof(float) - count: count]; + float *tmp = of_malloc(count, sizeof(float)); @try { for (size_t i = 0; i < count; i++) tmp[i] = OF_BSWAP_FLOAT(buffer[i]); [self writeBuffer: tmp length: size]; } @finally { - [self freeMemory: tmp]; + free(tmp); } #endif return size; } @@ -1460,21 +1453,20 @@ #ifdef OF_FLOAT_BIG_ENDIAN [self writeBuffer: buffer length: size]; #else - double *tmp = [self allocMemoryWithSize: sizeof(double) - count: count]; + double *tmp = of_malloc(count, sizeof(double)); @try { for (size_t i = 0; i < count; i++) tmp[i] = OF_BSWAP_DOUBLE(buffer[i]); [self writeBuffer: tmp length: size]; } @finally { - [self freeMemory: tmp]; + free(tmp); } #endif return size; } @@ -1531,21 +1523,20 @@ #ifndef OF_BIG_ENDIAN [self writeBuffer: buffer length: size]; #else - uint16_t *tmp = [self allocMemoryWithSize: sizeof(uint16_t) - count: count]; + uint16_t *tmp = of_malloc(count, sizeof(uint16_t)); @try { for (size_t i = 0; i < count; i++) tmp[i] = OF_BSWAP16(buffer[i]); [self writeBuffer: tmp length: size]; } @finally { - [self freeMemory: tmp]; + free(tmp); } #endif return size; } @@ -1562,21 +1553,20 @@ #ifndef OF_BIG_ENDIAN [self writeBuffer: buffer length: size]; #else - uint32_t *tmp = [self allocMemoryWithSize: sizeof(uint32_t) - count: count]; + uint32_t *tmp = of_malloc(count, sizeof(uint32_t)); @try { for (size_t i = 0; i < count; i++) tmp[i] = OF_BSWAP32(buffer[i]); [self writeBuffer: tmp length: size]; } @finally { - [self freeMemory: tmp]; + free(tmp); } #endif return size; } @@ -1593,21 +1583,20 @@ #ifndef OF_BIG_ENDIAN [self writeBuffer: buffer length: size]; #else - uint64_t *tmp = [self allocMemoryWithSize: sizeof(uint64_t) - count: count]; + uint64_t *tmp = of_malloc(count, sizeof(uint64_t)); @try { for (size_t i = 0; i < count; i++) tmp[i] = OF_BSWAP64(buffer[i]); [self writeBuffer: tmp length: size]; } @finally { - [self freeMemory: tmp]; + free(tmp); } #endif return size; } @@ -1624,21 +1613,20 @@ #ifndef OF_FLOAT_BIG_ENDIAN [self writeBuffer: buffer length: size]; #else - float *tmp = [self allocMemoryWithSize: sizeof(float) - count: count]; + float *tmp = of_malloc(count, sizeof(float)); @try { for (size_t i = 0; i < count; i++) tmp[i] = OF_BSWAP_FLOAT(buffer[i]); [self writeBuffer: tmp length: size]; } @finally { - [self freeMemory: tmp]; + free(tmp); } #endif return size; } @@ -1655,21 +1643,20 @@ #ifndef OF_FLOAT_BIG_ENDIAN [self writeBuffer: buffer length: size]; #else - double *tmp = [self allocMemoryWithSize: sizeof(double) - count: count]; + double *tmp = of_malloc(count, sizeof(double)); @try { for (size_t i = 0; i < count; i++) tmp[i] = OF_BSWAP_DOUBLE(buffer[i]); [self writeBuffer: tmp length: size]; } @finally { - [self freeMemory: tmp]; + free(tmp); } #endif return size; } @@ -1729,21 +1716,21 @@ encoding: (of_string_encoding_t)encoding { size_t stringLength = [string cStringLengthWithEncoding: encoding]; char *buffer; - buffer = [self allocMemoryWithSize: stringLength + 1]; + buffer = of_malloc(stringLength + 1, 1); @try { memcpy(buffer, [string cStringWithEncoding: encoding], stringLength); buffer[stringLength] = '\n'; [self writeBuffer: buffer length: stringLength + 1]; } @finally { - [self freeMemory: buffer]; + free(buffer); } return stringLength + 1; }