LCOV - code coverage report
Current view: top level - libs/mem/src - mem_array_item_writable.c (source / functions) Coverage Total Hit
Test: coverage.info Lines: 100.0 % 12 12
Test Date: 2026-07-12 01:01:34 Functions: 100.0 % 1 1
Branches: 100.0 % 6 6

             Branch data     Line data    Source code
       1                 :             : #include "mem.h"
       2                 :             : 
       3                 :             : /**
       4                 :             :  * @brief Return a writable pointer to one typed descriptor element
       5                 :             :  *
       6                 :             :  * The function validates that @p index is inside the descriptor's logical
       7                 :             :  * element range and then delegates descriptor integrity and element-size checks
       8                 :             :  * to @ref mem_data_writable. It returns `NULL` for invalid descriptors,
       9                 :             :  * mismatched element sizes, empty descriptors, and out-of-range indexes
      10                 :             :  *
      11                 :             :  * @param memory_structure Pointer to the descriptor that stores an array
      12                 :             :  * @param index Zero-based index of the requested element
      13                 :             :  * @param expected_single_element_size Expected element size in bytes, usually `sizeof(T)`
      14                 :             :  * @return Writable element pointer on success. `NULL` when the element cannot be addressed safely
      15                 :             :  */
      16                 :           5 : void *mem_array_item_writable(
      17                 :             :         memory *memory_structure,
      18                 :             :         size_t index,
      19                 :             :         size_t expected_single_element_size)
      20                 :             : {
      21         [ +  + ]:           5 :         if(memory_structure == NULL)
      22                 :             :         {
      23                 :           1 :                 report("Memory management; Descriptor is NULL");
      24                 :           1 :                 return(NULL);
      25                 :             :         }
      26                 :             : 
      27         [ +  + ]:           4 :         if(index >= memory_structure->length)
      28                 :             :         {
      29                 :           2 :                 report("Memory management; Item index %zu is out of range for descriptor length %zu",index,memory_structure->length);
      30                 :           2 :                 return(NULL);
      31                 :             :         }
      32                 :             : 
      33                 :           2 :         void *data = mem_data_writable(memory_structure,expected_single_element_size);
      34                 :             : 
      35         [ +  + ]:           2 :         if(data == NULL)
      36                 :             :         {
      37                 :           1 :                 return(NULL);
      38                 :             :         }
      39                 :             : 
      40                 :           1 :         unsigned char *item_data = data;
      41                 :             : 
      42                 :           1 :         return(&item_data[index * expected_single_element_size]);
      43                 :             : }
        

Generated by: LCOV version 2.0-1