Index: src/OFData.m ================================================================== --- src/OFData.m +++ src/OFData.m @@ -205,11 +205,11 @@ exactLength: (size_t)size]; } @finally { [file release]; } } @catch (id e) { - of_free(buffer); + free(buffer); [self release]; @throw e; } @@ -216,11 +216,11 @@ @try { self = [self initWithItemsNoCopy: buffer count: (size_t)size freeWhenDone: true]; } @catch (id e) { - of_free(buffer); + free(buffer); @throw e; } return self; } @@ -264,11 +264,11 @@ size: _count + length]; memcpy(_items + _count, buffer, length); _count += length; } } @finally { - of_free(buffer); + free(buffer); } objc_autoreleasePoolPop(pool); } @catch (id e) { [self release]; @@ -384,11 +384,11 @@ } - (void)dealloc { if (_freeWhenDone) - of_free(_items); + free(_items); [_parentData release]; [super dealloc]; } Index: src/OFDate.m ================================================================== --- src/OFDate.m +++ src/OFDate.m @@ -792,11 +792,11 @@ @throw [OFOutOfRangeException exception]; ret = [OFString stringWithUTF16String: buffer]; #endif } @finally { - of_free(buffer); + free(buffer); } return ret; } @@ -852,11 +852,11 @@ @throw [OFOutOfRangeException exception]; ret = [OFString stringWithUTF16String: buffer]; #endif } @finally { - of_free(buffer); + free(buffer); } return ret; } Index: src/OFFile.m ================================================================== --- src/OFFile.m +++ src/OFFile.m @@ -96,11 +96,11 @@ handle->next->previous = handle->previous; if (firstHandle == handle) firstHandle = handle->next; - of_free(handle); + free(handle); } OF_DESTRUCTOR() { for (of_file_handle_t iter = firstHandle; iter != NULL; @@ -303,11 +303,11 @@ if (firstHandle != NULL) firstHandle->previous = handle; firstHandle = handle; } @catch (id e) { - of_free(handle); + free(handle); @throw e; } #endif objc_autoreleasePoolPop(pool); Index: src/OFFileManager.m ================================================================== --- src/OFFileManager.m +++ src/OFFileManager.m @@ -716,11 +716,11 @@ @throw e; } @finally { [sourceStream close]; [destinationStream close]; - of_free(buffer); + free(buffer); } } else if ([type isEqual: of_file_type_symbolic_link]) { @try { OFString *linkDestination = attributes.fileSymbolicLinkDestination; Index: src/OFHTTPClient.m ================================================================== --- src/OFHTTPClient.m +++ src/OFHTTPClient.m @@ -522,11 +522,11 @@ @try { key = [OFString stringWithUTF8StringNoCopy: keyC freeWhenDone: true]; } @catch (id e) { - of_free(keyC); + free(keyC); @throw e; } do { tmp++; Index: src/OFObject+KeyValueCoding.m ================================================================== --- src/OFObject+KeyValueCoding.m +++ src/OFObject+KeyValueCoding.m @@ -58,11 +58,11 @@ name[2] = of_ascii_toupper(name[2]); selector = sel_registerName(name); } @finally { - of_free(name); + free(name); } methodSignature = [self methodSignatureForSelector: selector]; if (methodSignature == NULL) { @@ -170,11 +170,11 @@ name[3] = of_ascii_toupper(name[3]); selector = sel_registerName(name); } @finally { - of_free(name); + free(name); } methodSignature = [self methodSignatureForSelector: selector]; if (methodSignature == nil || Index: src/OFObject.h ================================================================== --- src/OFObject.h +++ src/OFObject.h @@ -1329,10 +1329,12 @@ #ifdef __cplusplus extern "C" { #endif /** * @brief Allocates memory for the specified number of items. + * + * To free the allocated memory, use `free()`. * * Throws @ref OFOutOfMemoryException if allocating failed and * @ref OFOutOfRangeException if the requested size exceeds the address space. * * @param count The number of items to allocate @@ -1344,10 +1346,12 @@ OF_WARN_UNUSED_RESULT; /** * @brief Allocates memory for the specified number of items and initializes it * with zeros. + * + * To free the allocated memory, use `free()`. * * Throws @ref OFOutOfMemoryException if allocating failed and * @ref OFOutOfRangeException if the requested size exceeds the address space. * * @param size The size of each item to allocate @@ -1358,10 +1362,12 @@ extern void *_Nullable of_calloc(size_t count, size_t size) OF_WARN_UNUSED_RESULT; /** * @brief Resizes memory to the specific number of items of the specified size. + * + * To free the allocated memory, use `free()`. * * If the pointer is NULL, this is equivalent to allocating memory. * If the size or number of items is 0, this is equivalent to freeing memory. * * Throws @ref OFOutOfMemoryException if allocating failed and @@ -1373,19 +1379,10 @@ * @return A pointer to the resized memory chunk */ extern void *_Nullable of_realloc(void *_Nullable pointer, size_t count, size_t size) OF_WARN_UNUSED_RESULT; -/** - * @brief Frees allocated memory. - * - * Does nothing if the pointer is NULL. - * - * @param pointer A pointer to the allocated memory - */ -extern void of_free(void *_Nullable pointer); - #ifdef OF_APPLE_RUNTIME extern void *_Null_unspecified objc_autoreleasePoolPush(void); extern void objc_autoreleasePoolPop(void *_Null_unspecified pool); # ifndef __OBJC2__ extern id _Nullable objc_constructInstance(Class _Nullable class_, Index: src/OFObject.m ================================================================== --- src/OFObject.m +++ src/OFObject.m @@ -159,16 +159,10 @@ exceptionWithRequestedSize: size]; return pointer; } -void -of_free(void *pointer) -{ - free(pointer); -} - #if !defined(HAVE_ARC4RANDOM) && !defined(HAVE_GETRANDOM) static void initRandom(void) { struct timeval tv; Index: src/OFSecureData.m ================================================================== --- src/OFSecureData.m +++ src/OFSecureData.m @@ -126,11 +126,11 @@ # endif page = preallocatedPages[numPreallocatedPages]; if (numPreallocatedPages == 0) { - of_free(preallocatedPages); + free(preallocatedPages); preallocatedPages = NULL; # if !defined(OF_HAVE_COMPILER_TLS) && defined(OF_HAVE_THREADS) OF_ENSURE(of_tlskey_set(preallocatedPagesKey, preallocatedPages)); # endif @@ -142,18 +142,18 @@ page = of_malloc(1, sizeof(*page)); @try { page->map = of_calloc(1, mapSize); } @catch (id e) { - of_free(page); + free(page); @throw e; } @try { page->page = mapPages(1); } @catch (id e) { - of_free(page->map); - of_free(page); + free(page->map); + free(page); @throw e; } of_explicit_memset(page->page, 0, pageSize); # if !defined(OF_HAVE_COMPILER_TLS) && defined(OF_HAVE_THREADS) @@ -191,11 +191,11 @@ for (size_t i = 0; i < mapSize; i++) if (map[i] != 0) return; unmapPages(page->page, 1); - of_free(page->map); + free(page->map); if (page->previous != NULL) page->previous->next = page->next; if (page->next != NULL) page->next->previous = page->previous; @@ -210,11 +210,11 @@ OF_ENSURE(of_tlskey_set(firstPageKey, page->next)); if (of_tlskey_get(lastPageKey) == page) OF_ENSURE(of_tlskey_set(lastPageKey, page->previous)); # endif - of_free(page); + free(page); } static void * allocateMemory(struct page *page, size_t bytes) { @@ -304,11 +304,11 @@ preallocatedPages[i] = addPage(false); } @catch (id e) { for (size_t j = 0; j < i; j++) removePageIfEmpty(preallocatedPages[j]); - of_free(preallocatedPages); + free(preallocatedPages); preallocatedPages = NULL; @throw e; } Index: src/OFStream.m ================================================================== --- src/OFStream.m +++ src/OFStream.m @@ -644,11 +644,11 @@ ret = [OFData dataWithItemsNoCopy: buffer itemSize: itemSize count: count freeWhenDone: true]; } @catch (id e) { - of_free(buffer); + free(buffer); @throw e; } return ret; } Index: src/OFString+JSONParsing.m ================================================================== --- src/OFString+JSONParsing.m +++ src/OFString+JSONParsing.m @@ -152,11 +152,11 @@ while (*pointer < stop) { /* Parse escape codes */ if (**pointer == '\\') { if (++(*pointer) >= stop) { - of_free(buffer); + free(buffer); return nil; } switch (**pointer) { case '"': @@ -191,26 +191,26 @@ of_unichar_t c; size_t l; c1 = parseUnicodeEscape(*pointer - 1, stop); if (c1 == 0xFFFF) { - of_free(buffer); + free(buffer); return nil; } /* Low surrogate */ if ((c1 & 0xFC00) == 0xDC00) { - of_free(buffer); + free(buffer); return nil; } /* Normal character */ if ((c1 & 0xFC00) != 0xD800) { l = of_string_utf8_encode(c1, buffer + i); if (l == 0) { - of_free(buffer); + free(buffer); return nil; } i += l; *pointer += 5; @@ -223,20 +223,20 @@ * surrogate and now need to get the other one * in order to produce UTF-8 and not CESU-8. */ c2 = parseUnicodeEscape(*pointer + 5, stop); if (c2 == 0xFFFF) { - of_free(buffer); + free(buffer); return nil; } c = (((c1 & 0x3FF) << 10) | (c2 & 0x3FF)) + 0x10000; l = of_string_utf8_encode(c, buffer + i); if (l == 0) { - of_free(buffer); + free(buffer); return nil; } i += l; *pointer += 11; @@ -254,11 +254,11 @@ case '\n': (*pointer)++; (*line)++; break; default: - of_free(buffer); + free(buffer); return nil; } /* End of string found */ } else if (**pointer == delimiter) { OFString *ret; @@ -265,28 +265,28 @@ @try { ret = [OFString stringWithUTF8String: buffer length: i]; } @finally { - of_free(buffer); + free(buffer); } (*pointer)++; return ret; /* Newlines in strings are disallowed */ } else if (**pointer == '\n' || **pointer == '\r') { (*line)++; - of_free(buffer); + free(buffer); return nil; } else { buffer[i++] = **pointer; (*pointer)++; } } - of_free(buffer); + free(buffer); return nil; } static inline OFString * parseIdentifier(const char **pointer, const char *stop) @@ -308,31 +308,31 @@ of_char16_t c1, c2; of_unichar_t c; size_t l; if (++(*pointer) >= stop || **pointer != 'u') { - of_free(buffer); + free(buffer); return nil; } c1 = parseUnicodeEscape(*pointer - 1, stop); if (c1 == 0xFFFF) { - of_free(buffer); + free(buffer); return nil; } /* Low surrogate */ if ((c1 & 0xFC00) == 0xDC00) { - of_free(buffer); + free(buffer); return nil; } /* Normal character */ if ((c1 & 0xFC00) != 0xD800) { l = of_string_utf8_encode(c1, buffer + i); if (l == 0) { - of_free(buffer); + free(buffer); return nil; } i += l; *pointer += 5; @@ -345,37 +345,37 @@ * surrogate and now need to get the other one in order * to produce UTF-8 and not CESU-8. */ c2 = parseUnicodeEscape(*pointer + 5, stop); if (c2 == 0xFFFF) { - of_free(buffer); + free(buffer); return nil; } c = (((c1 & 0x3FF) << 10) | (c2 & 0x3FF)) + 0x10000; l = of_string_utf8_encode(c, buffer + i); if (l == 0) { - of_free(buffer); + free(buffer); return nil; } i += l; *pointer += 11; } else { OFString *ret; if (i == 0 || (buffer[0] >= '0' && buffer[0] <= '9')) { - of_free(buffer); + free(buffer); return nil; } @try { ret = [OFString stringWithUTF8String: buffer length: i]; } @finally { - of_free(buffer); + free(buffer); } return ret; } } @@ -382,11 +382,11 @@ /* * It is never possible to end with an identifier, thus we should never * reach stop. */ - of_free(buffer); + free(buffer); return nil; } static inline OFMutableArray * parseArray(const char **pointer, const char *stop, size_t *line, Index: src/OFString+URLEncoding.m ================================================================== --- src/OFString+URLEncoding.m +++ src/OFString+URLEncoding.m @@ -110,11 +110,11 @@ else if (c >= 'A' && c <= 'F') byte += (c - 'A' + 10) << shift; else if (c >= 'a' && c <= 'f') byte += (c - 'a' + 10) << shift; else { - of_free(retCString); + free(retCString); @throw [OFInvalidFormatException exception]; } if (++state == 3) { retCString[i++] = byte; @@ -128,11 +128,11 @@ retCString[i] = '\0'; objc_autoreleasePoolPop(pool); if (state != 0) { - of_free(retCString); + free(retCString); @throw [OFInvalidFormatException exception]; } @try { retCString = of_realloc(retCString, 1, i + 1); Index: src/OFString+XMLEscaping.m ================================================================== --- src/OFString+XMLEscaping.m +++ src/OFString+XMLEscaping.m @@ -82,11 +82,11 @@ if (append != NULL) { @try { retCString = of_realloc(retCString, 1, retLength + appendLen); } @catch (id e) { - of_free(retCString); + free(retCString); @throw e; } retLength += appendLen - 1; memcpy(retCString + j, append, appendLen); @@ -100,10 +100,10 @@ @try { ret = [OFString stringWithUTF8String: retCString length: retLength]; } @finally { - of_free(retCString); + free(retCString); } return ret; } @end Index: src/OFString.m ================================================================== --- src/OFString.m +++ src/OFString.m @@ -840,11 +840,11 @@ @try { ret = [self initWithUTF8String: UTF8String]; } @finally { if (freeWhenDone) - of_free(UTF8String); + free(UTF8String); } return ret; } @@ -857,11 +857,11 @@ @try { ret = [self initWithUTF8String: UTF8String length: UTF8StringLength]; } @finally { if (freeWhenDone) - of_free(UTF8String); + free(UTF8String); } return ret; } @@ -1035,11 +1035,11 @@ mode: @"r"]; [file readIntoBuffer: tmp exactLength: (size_t)fileSize]; } @catch (id e) { - of_free(tmp); + free(tmp); @throw e; } @finally { [file release]; } @@ -1057,11 +1057,11 @@ @try { self = [self initWithCString: tmp encoding: encoding length: (size_t)fileSize]; } @finally { - of_free(tmp); + free(tmp); } } return self; } @@ -1885,11 +1885,11 @@ searchLength); } } } } @finally { - of_free(characters); + free(characters); } objc_autoreleasePoolPop(pool); return of_range(OF_NOT_FOUND, 0); @@ -1947,11 +1947,11 @@ @selector(characterIsMember:), characters[i])) return range.location + i; } } @finally { - of_free(characters); + free(characters); } return OF_NOT_FOUND; } Index: src/OFValue.m ================================================================== --- src/OFValue.m +++ src/OFValue.m @@ -185,11 +185,11 @@ value = of_malloc(1, size); @try { otherValue = of_malloc(1, size); } @catch (id e) { - of_free(value); + free(value); @throw e; } @try { [self getValue: value @@ -197,12 +197,12 @@ [object getValue: otherValue size: size]; ret = (memcmp(value, otherValue, size) == 0); } @finally { - of_free(value); - of_free(otherValue); + free(value); + free(otherValue); } return ret; } @@ -222,11 +222,11 @@ for (size_t i = 0; i < size; i++) OF_HASH_ADD(hash, value[i]); OF_HASH_FINALIZE(hash); } @finally { - of_free(value); + free(value); } return hash; } @@ -323,14 +323,14 @@ [ret appendString: @" "]; [ret appendFormat: @"%02x", value[i]]; } } @finally { - of_free(value); + free(value); } [ret appendString: @">"]; [ret makeImmutable]; return ret; } @end Index: src/huffman_tree.m ================================================================== --- src/huffman_tree.m +++ src/huffman_tree.m @@ -102,12 +102,12 @@ if (length > 0) insertTree(tree, nextCode[length]++, length, i); } } @finally { - of_free(lengthCount); - of_free(nextCode); + free(lengthCount); + free(nextCode); } return tree; } @@ -126,7 +126,7 @@ { for (uint_fast8_t i = 0; i < 2; i++) if OF_LIKELY (tree->leaves[i] != NULL) of_huffman_tree_release(tree->leaves[i]); - of_free(tree); + free(tree); }