# HG changeset patch # User Mike Becker # Date 1727531714 -7200 # Node ID 49d8cff6f0ee95f7ca3aebd6d325cfc1454bc757 # Parent 54565fd74e74604880d7f85047255b9ac382198d make all function attributes leading - fixes #425 diff -r 54565fd74e74 -r 49d8cff6f0ee src/cx/allocator.h --- a/src/cx/allocator.h Sat Sep 28 15:47:28 2024 +0200 +++ b/src/cx/allocator.h Sat Sep 28 15:55:14 2024 +0200 @@ -54,12 +54,12 @@ /** * The allocator's realloc() implementation. */ + __attribute__((__warn_unused_result__)) void *(*realloc)( void *data, void *mem, size_t n - ) - __attribute__((__warn_unused_result__)); + ); /** * The allocator's calloc() implementation. @@ -73,11 +73,11 @@ /** * The allocator's free() implementation. */ + __attribute__((__nonnull__)) void (*free)( void *data, void *mem - ) - __attribute__((__nonnull__)); + ); } cx_allocator_class; /** @@ -114,7 +114,8 @@ * * @param memory a pointer to the object to destruct */ -typedef void (*cx_destructor_func)(void *memory) __attribute__((__nonnull__)); +__attribute__((__nonnull__)) +typedef void (*cx_destructor_func)(void *memory); /** * Function pointer type for destructor functions. @@ -127,10 +128,11 @@ * @param data an optional pointer to custom data * @param memory a pointer to the object to destruct */ +__attribute__((__nonnull__(2))) typedef void (*cx_destructor_func2)( void *data, void *memory -) __attribute__((__nonnull__(2))); +); /** * Re-allocate a previously allocated block and changes the pointer in-place, if necessary. @@ -142,11 +144,11 @@ * @param n the new size in bytes * @return zero on success, non-zero on failure */ +__attribute__((__nonnull__)) int cx_reallocate( void **mem, size_t n -) -__attribute__((__nonnull__)); +); /** * Allocate \p n bytes of memory. @@ -155,12 +157,12 @@ * @param n the number of bytes * @return a pointer to the allocated memory */ +__attribute__((__malloc__)) +__attribute__((__alloc_size__(2))) void *cxMalloc( const CxAllocator *allocator, size_t n -) -__attribute__((__malloc__)) -__attribute__((__alloc_size__(2))); +); /** * Re-allocate the previously allocated block in \p mem, making the new block \p n bytes long. @@ -174,13 +176,13 @@ * @param n the new size in bytes * @return a pointer to the re-allocated memory */ +__attribute__((__warn_unused_result__)) +__attribute__((__alloc_size__(3))) void *cxRealloc( const CxAllocator *allocator, void *mem, size_t n -) -__attribute__((__warn_unused_result__)) -__attribute__((__alloc_size__(3))); +); /** * Re-allocate a previously allocated block and changes the pointer in-place, if necessary. @@ -196,12 +198,12 @@ * @param n the new size in bytes * @return zero on success, non-zero on failure */ +__attribute__((__nonnull__)) int cxReallocate( const CxAllocator *allocator, void **mem, size_t n -) -__attribute__((__nonnull__)); +); /** * Allocate \p nelem elements of \p n bytes each, all initialized to zero. @@ -211,13 +213,13 @@ * @param n the size of each element in bytes * @return a pointer to the allocated memory */ +__attribute__((__malloc__)) +__attribute__((__alloc_size__(2, 3))) void *cxCalloc( const CxAllocator *allocator, size_t nelem, size_t n -) -__attribute__((__malloc__)) -__attribute__((__alloc_size__(2, 3))); +); /** * Free a block allocated by this allocator. @@ -227,11 +229,11 @@ * @param allocator the allocator * @param mem a pointer to the block to free */ +__attribute__((__nonnull__)) void cxFree( const CxAllocator *allocator, void *mem -) -__attribute__((__nonnull__)); +); #ifdef __cplusplus } // extern "C" diff -r 54565fd74e74 -r 49d8cff6f0ee src/cx/array_list.h --- a/src/cx/array_list.h Sat Sep 28 15:47:28 2024 +0200 +++ b/src/cx/array_list.h Sat Sep 28 15:55:14 2024 +0200 @@ -159,6 +159,7 @@ * if reallocation shall not happen * @return zero on success, non-zero error code on failure */ +__attribute__((__nonnull__(1, 2, 5))) enum cx_array_result cx_array_copy( void **target, size_t *size, @@ -168,7 +169,7 @@ size_t elem_size, size_t elem_count, struct cx_array_reallocator_s *reallocator -) __attribute__((__nonnull__(1, 2, 5))); +); /** * Convenience macro that uses cx_array_copy() with a default layout and the default reallocator. @@ -236,6 +237,7 @@ * @param reallocator the array reallocator to use * @return zero on success, non-zero error code on failure */ +__attribute__((__nonnull__)) enum cx_array_result cx_array_insert_sorted( void **target, size_t *size, @@ -245,7 +247,7 @@ size_t elem_size, size_t elem_count, struct cx_array_reallocator_s *reallocator -) __attribute__((__nonnull__)); +); /** * Inserts an element into a sorted array. @@ -315,13 +317,14 @@ * @param cmp_func the compare function * @return the index of the largest lower bound, or \p size */ +__attribute__((__nonnull__)) size_t cx_array_binary_search_inf( const void *arr, size_t size, size_t elem_size, const void *elem, cx_compare_func cmp_func -) __attribute__((__nonnull__)); +); /** * Searches an item in a sorted array. @@ -402,12 +405,13 @@ * @param idx1 index of first element * @param idx2 index of second element */ +__attribute__((__nonnull__)) void cx_array_swap( void *arr, size_t elem_size, size_t idx1, size_t idx2 -) __attribute__((__nonnull__)); +); /** * Allocates an array list for storing elements with \p elem_size bytes each. diff -r 54565fd74e74 -r 49d8cff6f0ee src/cx/linked_list.h --- a/src/cx/linked_list.h Sat Sep 28 15:47:28 2024 +0200 +++ b/src/cx/linked_list.h Sat Sep 28 15:55:14 2024 +0200 @@ -104,12 +104,13 @@ * @param index the search index * @return the node found at the specified index */ +__attribute__((__nonnull__)) void *cx_linked_list_at( const void *start, size_t start_index, ptrdiff_t loc_advance, size_t index -) __attribute__((__nonnull__)); +); /** * Finds the index of an element within a linked list. @@ -121,13 +122,14 @@ * @param elem a pointer to the element to find * @return the index of the element or a negative value if it could not be found */ +__attribute__((__nonnull__)) ssize_t cx_linked_list_find( const void *start, ptrdiff_t loc_advance, ptrdiff_t loc_data, cx_compare_func cmp_func, const void *elem -) __attribute__((__nonnull__)); +); /** * Finds the node containing an element within a linked list. @@ -141,6 +143,7 @@ * @param elem a pointer to the element to find * @return the index of the element or a negative value if it could not be found */ +__attribute__((__nonnull__)) ssize_t cx_linked_list_find_node( void **result, const void *start, @@ -148,7 +151,7 @@ ptrdiff_t loc_data, cx_compare_func cmp_func, const void *elem -) __attribute__((__nonnull__)); +); /** * Finds the first node in a linked list. @@ -161,10 +164,11 @@ * @param loc_prev the location of the \c prev pointer * @return a pointer to the first node */ +__attribute__((__nonnull__)) void *cx_linked_list_first( const void *node, ptrdiff_t loc_prev -) __attribute__((__nonnull__)); +); /** * Finds the last node in a linked list. @@ -177,10 +181,11 @@ * @param loc_next the location of the \c next pointer * @return a pointer to the last node */ +__attribute__((__nonnull__)) void *cx_linked_list_last( const void *node, ptrdiff_t loc_next -) __attribute__((__nonnull__)); +); /** * Finds the predecessor of a node in case it is not linked. @@ -192,11 +197,12 @@ * @param node the successor of the node to find * @return the node or \c NULL if \p node has no predecessor */ +__attribute__((__nonnull__)) void *cx_linked_list_prev( const void *begin, ptrdiff_t loc_next, const void *node -) __attribute__((__nonnull__)); +); /** * Adds a new node to a linked list. @@ -210,13 +216,14 @@ * @param loc_next the location of a \c next pointer within your node struct (required) * @param new_node a pointer to the node that shall be appended */ +__attribute__((__nonnull__(5))) void cx_linked_list_add( void **begin, void **end, ptrdiff_t loc_prev, ptrdiff_t loc_next, void *new_node -) __attribute__((__nonnull__(5))); +); /** * Prepends a new node to a linked list. @@ -230,13 +237,14 @@ * @param loc_next the location of a \c next pointer within your node struct (required) * @param new_node a pointer to the node that shall be prepended */ +__attribute__((__nonnull__(5))) void cx_linked_list_prepend( void **begin, void **end, ptrdiff_t loc_prev, ptrdiff_t loc_next, void *new_node -) __attribute__((__nonnull__(5))); +); /** * Links two nodes. @@ -246,12 +254,13 @@ * @param loc_prev the location of a \c prev pointer within your node struct (negative if your struct does not have one) * @param loc_next the location of a \c next pointer within your node struct (required) */ +__attribute__((__nonnull__)) void cx_linked_list_link( void *left, void *right, ptrdiff_t loc_prev, ptrdiff_t loc_next -) __attribute__((__nonnull__)); +); /** * Unlinks two nodes. @@ -263,12 +272,13 @@ * @param loc_prev the location of a \c prev pointer within your node struct (negative if your struct does not have one) * @param loc_next the location of a \c next pointer within your node struct (required) */ +__attribute__((__nonnull__)) void cx_linked_list_unlink( void *left, void *right, ptrdiff_t loc_prev, ptrdiff_t loc_next -) __attribute__((__nonnull__)); +); /** * Inserts a new node after a given node of a linked list. @@ -284,6 +294,7 @@ * @param node the node after which to insert (\c NULL if you want to prepend the node to the list) * @param new_node a pointer to the node that shall be inserted */ +__attribute__((__nonnull__(6))) void cx_linked_list_insert( void **begin, void **end, @@ -291,7 +302,7 @@ ptrdiff_t loc_next, void *node, void *new_node -) __attribute__((__nonnull__(6))); +); /** * Inserts a chain of nodes after a given node of a linked list. @@ -313,6 +324,7 @@ * @param insert_begin a pointer to the first node of the chain that shall be inserted * @param insert_end a pointer to the last node of the chain (or NULL if the last node shall be determined) */ +__attribute__((__nonnull__(6))) void cx_linked_list_insert_chain( void **begin, void **end, @@ -321,7 +333,7 @@ void *node, void *insert_begin, void *insert_end -) __attribute__((__nonnull__(6))); +); /** * Inserts a node into a sorted linked list. @@ -337,6 +349,7 @@ * @param new_node a pointer to the node that shall be inserted * @param cmp_func a compare function that will receive the node pointers */ +__attribute__((__nonnull__(1, 5, 6))) void cx_linked_list_insert_sorted( void **begin, void **end, @@ -344,7 +357,7 @@ ptrdiff_t loc_next, void *new_node, cx_compare_func cmp_func -) __attribute__((__nonnull__(1, 5, 6))); +); /** * Inserts a chain of nodes into a sorted linked list. @@ -365,6 +378,7 @@ * @param insert_begin a pointer to the first node of the chain that shall be inserted * @param cmp_func a compare function that will receive the node pointers */ +__attribute__((__nonnull__(1, 5, 6))) void cx_linked_list_insert_sorted_chain( void **begin, void **end, @@ -372,7 +386,7 @@ ptrdiff_t loc_next, void *insert_begin, cx_compare_func cmp_func -) __attribute__((__nonnull__(1, 5, 6))); +); /** * Removes a node from the linked list. @@ -393,13 +407,14 @@ * @param loc_next the location of a \c next pointer within your node struct (required) * @param node the node to remove */ +__attribute__((__nonnull__(5))) void cx_linked_list_remove( void **begin, void **end, ptrdiff_t loc_prev, ptrdiff_t loc_next, void *node -) __attribute__((__nonnull__(5))); +); /** @@ -435,6 +450,7 @@ * @param loc_data the location of the \c data pointer within your node struct * @param cmp_func the compare function defining the sort order */ +__attribute__((__nonnull__(1, 6))) void cx_linked_list_sort( void **begin, void **end, @@ -442,7 +458,7 @@ ptrdiff_t loc_next, ptrdiff_t loc_data, cx_compare_func cmp_func -) __attribute__((__nonnull__(1, 6))); +); /** @@ -458,13 +474,14 @@ * @return the first non-zero result of invoking \p cmp_func or: negative if the left list is smaller than the * right list, positive if the left list is larger than the right list, zero if both lists are equal. */ +__attribute__((__nonnull__(5))) int cx_linked_list_compare( const void *begin_left, const void *begin_right, ptrdiff_t loc_advance, ptrdiff_t loc_data, cx_compare_func cmp_func -) __attribute__((__nonnull__(5))); +); /** * Reverses the order of the nodes in a linked list. @@ -474,12 +491,13 @@ * @param loc_prev the location of a \c prev pointer within your node struct (negative if your struct does not have one) * @param loc_next the location of a \c next pointer within your node struct (required) */ +__attribute__((__nonnull__(1))) void cx_linked_list_reverse( void **begin, void **end, ptrdiff_t loc_prev, ptrdiff_t loc_next -) __attribute__((__nonnull__(1))); +); #ifdef __cplusplus } // extern "C"