Do nothing when freeing NULL (#141)

This commit is contained in:
Bailey Thompson
2020-10-02 19:22:31 -04:00
committed by GitHub
parent a08924b28a
commit cc17f4c6d0
32 changed files with 108 additions and 50 deletions

View File

@@ -203,7 +203,8 @@ bk_err array_get(void *const data, array me, const size_t index)
/**
* Frees the array memory. Performing further operations after calling this
* function results in undefined behavior.
* function results in undefined behavior. Freeing NULL is legal, and causes
* no operation to be performed.
*
* @param me the array to free from memory
*

View File

@@ -646,7 +646,8 @@ bk_err deque_clear(deque me)
/**
* Destroys the deque. Performing further operations after calling this function
* results in undefined behavior.
* results in undefined behavior. Freeing NULL is legal, and causes no operation
* to be performed.
*
* @param me the deque to destroy
*
@@ -654,11 +655,13 @@ bk_err deque_clear(deque me)
*/
deque deque_destroy(deque me)
{
size_t i;
for (i = me->alloc_block_start; i <= me->alloc_block_end; i++) {
free(me->data[i]);
if (me) {
size_t i;
for (i = me->alloc_block_start; i <= me->alloc_block_end; i++) {
free(me->data[i]);
}
free(me->data);
free(me);
}
free(me->data);
free(me);
return NULL;
}

View File

@@ -488,7 +488,8 @@ void forward_list_clear(forward_list me)
/**
* Destroys the singly-linked list. Performing further operations after calling
* this function results in undefined behavior.
* this function results in undefined behavior. Freeing NULL is legal, and
* causes no operation to be performed.
*
* @param me the singly-linked list to destroy
*
@@ -496,7 +497,9 @@ void forward_list_clear(forward_list me)
*/
forward_list forward_list_destroy(forward_list me)
{
forward_list_clear(me);
free(me);
if (me) {
forward_list_clear(me);
free(me);
}
return NULL;
}

View File

@@ -512,7 +512,8 @@ void list_clear(list me)
/**
* Destroys the doubly-linked list. Performing further operations after calling
* this function results in undefined behavior.
* this function results in undefined behavior. Freeing NULL is legal, and
* causes no operation to be performed.
*
* @param me the doubly-linked list to destroy
*
@@ -520,7 +521,9 @@ void list_clear(list me)
*/
list list_destroy(list me)
{
list_clear(me);
free(me);
if (me) {
list_clear(me);
free(me);
}
return NULL;
}

View File

@@ -886,7 +886,8 @@ void map_clear(map me)
/**
* Frees the map memory. Performing further operations after calling this
* function results in undefined behavior.
* function results in undefined behavior. Freeing NULL is legal, and causes
* no operation to be performed.
*
* @param me the map to free from memory
*
@@ -894,7 +895,9 @@ void map_clear(map me)
*/
map map_destroy(map me)
{
map_clear(me);
free(me);
if (me) {
map_clear(me);
free(me);
}
return NULL;
}

View File

@@ -1075,7 +1075,8 @@ void multimap_clear(multimap me)
/**
* Frees the multi-map memory. Performing further operations after calling this
* function results in undefined behavior.
* function results in undefined behavior. Freeing NULL is legal, and causes no
* operation to be performed.
*
* @param me the multi-map to free from memory
*
@@ -1083,7 +1084,9 @@ void multimap_clear(multimap me)
*/
multimap multimap_destroy(multimap me)
{
multimap_clear(me);
free(me);
if (me) {
multimap_clear(me);
free(me);
}
return NULL;
}

View File

@@ -929,7 +929,8 @@ void multiset_clear(multiset me)
/**
* Frees the multi-set memory. Performing further operations after calling this
* function results in undefined behavior.
* function results in undefined behavior. Freeing NULL is legal, and causes no
* operation to be performed.
*
* @param me the multi-set to free from memory
*
@@ -937,7 +938,9 @@ void multiset_clear(multiset me)
*/
multiset multiset_destroy(multiset me)
{
multiset_clear(me);
free(me);
if (me) {
multiset_clear(me);
free(me);
}
return NULL;
}

View File

@@ -236,7 +236,8 @@ bk_err priority_queue_clear(priority_queue me)
/**
* Frees the priority queue memory. Performing further operations after calling
* this function results in undefined behavior.
* this function results in undefined behavior. Freeing NULL is legal, and
* causes no operation to be performed.
*
* @param me the priority queue to free from memory
*
@@ -244,7 +245,9 @@ bk_err priority_queue_clear(priority_queue me)
*/
priority_queue priority_queue_destroy(priority_queue me)
{
vector_destroy(me->data);
free(me);
if (me) {
vector_destroy(me->data);
free(me);
}
return NULL;
}

View File

@@ -174,7 +174,8 @@ bk_err queue_clear(queue me)
/**
* Destroys the queue. Performing further operations after calling this function
* results in undefined behavior.
* results in undefined behavior. Freeing NULL is legal, and causes no operation
* to be performed.
*
* @param me the queue to destroy
*

View File

@@ -849,7 +849,8 @@ void set_clear(set me)
/**
* Frees the set memory. Performing further operations after calling this
* function results in undefined behavior.
* function results in undefined behavior. Freeing NULL is legal, and causes
* no operation to be performed.
*
* @param me the set to free from memory
*
@@ -857,7 +858,9 @@ void set_clear(set me)
*/
set set_destroy(set me)
{
set_clear(me);
free(me);
if (me) {
set_clear(me);
free(me);
}
return NULL;
}

View File

@@ -158,7 +158,8 @@ bk_err stack_clear(stack me)
/**
* Frees the stack memory. Performing further operations after calling this
* function results in undefined behavior.
* function results in undefined behavior. Freeing NULL is legal, and causes
* no operation to be performed.
*
* @param me the stack to destroy
*

View File

@@ -440,7 +440,8 @@ int unordered_map_clear(unordered_map me)
/**
* Frees the unordered map memory. Performing further operations after calling
* this function results in undefined behavior.
* this function results in undefined behavior. Freeing NULL is legal, and
* causes no operation to be performed.
*
* @param me the unordered map to free from memory
*
@@ -448,8 +449,10 @@ int unordered_map_clear(unordered_map me)
*/
unordered_map unordered_map_destroy(unordered_map me)
{
unordered_map_clear(me);
free(me->buckets);
free(me);
if (me) {
unordered_map_clear(me);
free(me->buckets);
free(me);
}
return NULL;
}

View File

@@ -577,7 +577,8 @@ bk_err unordered_multimap_clear(unordered_multimap me)
/**
* Frees the unordered multi-map memory. Performing further operations after
* calling this function results in undefined behavior.
* calling this function results in undefined behavior. Freeing NULL is legal,
* and causes no operation to be performed.
*
* @param me the unordered multi-map to free from memory
*
@@ -585,9 +586,11 @@ bk_err unordered_multimap_clear(unordered_multimap me)
*/
unordered_multimap unordered_multimap_destroy(unordered_multimap me)
{
unordered_multimap_clear(me);
free(me->iterate_key);
free(me->buckets);
free(me);
if (me) {
unordered_multimap_clear(me);
free(me->iterate_key);
free(me->buckets);
free(me);
}
return NULL;
}

View File

@@ -501,7 +501,8 @@ bk_err unordered_multiset_clear(unordered_multiset me)
/**
* Frees the unordered multi-set memory. Performing further operations after
* calling this function results in undefined behavior.
* calling this function results in undefined behavior. Freeing NULL is legal,
* and causes no operation to be performed.
*
* @param me the unordered multi-set to free from memory
*
@@ -509,8 +510,10 @@ bk_err unordered_multiset_clear(unordered_multiset me)
*/
unordered_multiset unordered_multiset_destroy(unordered_multiset me)
{
unordered_multiset_clear(me);
free(me->buckets);
free(me);
if (me) {
unordered_multiset_clear(me);
free(me->buckets);
free(me);
}
return NULL;
}

View File

@@ -393,7 +393,8 @@ int unordered_set_clear(unordered_set me)
/**
* Frees the unordered set memory. Performing further operations after calling
* this function results in undefined behavior.
* this function results in undefined behavior. Freeing NULL is legal, and
* causes no operation to be performed.
*
* @param me the unordered set to free from memory
*
@@ -401,8 +402,10 @@ int unordered_set_clear(unordered_set me)
*/
unordered_set unordered_set_destroy(unordered_set me)
{
unordered_set_clear(me);
free(me->buckets);
free(me);
if (me) {
unordered_set_clear(me);
free(me->buckets);
free(me);
}
return NULL;
}

View File

@@ -489,7 +489,8 @@ bk_err vector_clear(vector me)
/**
* Frees the vector memory. Performing further operations after calling this
* function results in undefined behavior.
* function results in undefined behavior. Freeing NULL is legal, and causes
* no operation to be performed.
*
* @param me the vector to free from memory
*
@@ -497,7 +498,9 @@ bk_err vector_clear(vector me)
*/
vector vector_destroy(vector me)
{
free(me->data);
free(me);
if (me) {
free(me->data);
free(me);
}
return NULL;
}

View File

@@ -160,4 +160,5 @@ void test_array(void)
#endif
test_big_object();
test_add_all();
array_destroy(NULL);
}

View File

@@ -674,4 +674,5 @@ void test_deque(void)
test_block_reuse_forwards();
test_block_reuse_backwards();
test_trim_both_sides();
deque_destroy(NULL);
}

View File

@@ -444,4 +444,5 @@ void test_forward_list(void)
assert(test_puzzle_backwards(2, 10) == 5);
test_big_object();
test_add_all();
forward_list_destroy(NULL);
}

View File

@@ -432,4 +432,5 @@ void test_list(void)
assert(test_puzzle_backwards(2, 10) == 5);
test_big_object();
test_add_all();
list_destroy(NULL);
}

View File

@@ -711,4 +711,5 @@ void test_map(void)
#endif
test_big_object();
test_ordered_retrieval();
map_destroy(NULL);
}

View File

@@ -786,4 +786,5 @@ void test_multimap(void)
#endif
test_big_object();
test_ordered_retrieval();
multimap_destroy(NULL);
}

View File

@@ -715,4 +715,5 @@ void test_multiset(void)
#endif
test_big_object();
test_ordered_retrieval();
multiset_destroy(NULL);
}

View File

@@ -239,4 +239,5 @@ void test_priority_queue(void)
test_push_out_of_memory();
#endif
test_big_object();
priority_queue_destroy(NULL);
}

View File

@@ -188,4 +188,5 @@ void test_queue(void)
assert(test_puzzle(2, 5) == 4);
assert(test_puzzle(2, 10) == 5);
test_big_object();
queue_destroy(NULL);
}

View File

@@ -683,4 +683,5 @@ void test_set(void)
#endif
test_big_object();
test_ordered_retrieval();
set_destroy(NULL);
}

View File

@@ -112,4 +112,5 @@ void test_stack(void)
test_basic();
test_automated_trim();
test_big_object();
stack_destroy(NULL);
}

View File

@@ -355,4 +355,5 @@ void test_unordered_map(void)
test_clear_out_of_memory();
#endif
test_big_object();
unordered_map_destroy(NULL);
}

View File

@@ -478,4 +478,5 @@ void test_unordered_multimap(void)
test_clear_out_of_memory();
#endif
test_big_object();
unordered_multimap_destroy(NULL);
}

View File

@@ -402,4 +402,5 @@ void test_unordered_multiset(void)
test_clear_out_of_memory();
#endif
test_big_object();
unordered_multiset_destroy(NULL);
}

View File

@@ -342,4 +342,5 @@ void test_unordered_set(void)
test_clear_out_of_memory();
#endif
test_big_object();
unordered_set_destroy(NULL);
}

View File

@@ -354,4 +354,5 @@ void test_vector(void)
#endif
test_big_object();
test_add_all();
vector_destroy(NULL);
}