LCOV - code coverage report
Current view: top level - src - show_difference.c (source / functions) Coverage Total Hit
Test: coverage.info Lines: 85.0 % 40 34
Test Date: 2026-03-01 04:31:48 Functions: 100.0 % 2 2
Branches: 64.3 % 28 18

             Branch data     Line data    Source code
       1                 :             : #include "precizer.h"
       2                 :             : 
       3                 :             : /**
       4                 :             :  * @brief Retrieve a const pointer to a flag descriptor by index.
       5                 :             :  *
       6                 :             :  * Uses the mem helper to obtain a typed readonly view of the @ref Flags array and
       7                 :             :  * performs bounds checking. Returns NULL if the descriptor is missing, type
       8                 :             :  * verification fails, or the index is out of range.
       9                 :             :  */
      10                 :           8 : static const Flags *lookup(
      11                 :             :         const memory *flags,
      12                 :             :         size_t       index)
      13                 :             : {
      14                 :           8 :         const Flags *flags_data = cdata(Flags,flags);
      15                 :             : 
      16   [ +  -  -  + ]:           8 :         if(flags_data == NULL || index >= flags->length)
      17                 :             :         {
      18                 :           0 :                 return(NULL);
      19                 :             :         }
      20                 :             : 
      21                 :           8 :         return(&flags_data[index]);
      22                 :             : }
      23                 :             : 
      24                 :           2 : Return show_difference(
      25                 :             :         Changed         change_flags_mask,
      26                 :             :         const CmpctStat *before,
      27                 :             :         const CmpctStat *after)
      28                 :             : {
      29                 :             :         /* Validate input parameters */
      30   [ +  -  -  + ]:           2 :         if(NULL == before || NULL == after)
      31                 :             :         {
      32                 :           0 :                 return(FAILURE);
      33                 :             :         }
      34                 :             : 
      35         [ -  + ]:           2 :         if(change_flags_mask == IDENTICAL)
      36                 :             :         {
      37                 :           0 :                 return(SUCCESS);
      38                 :             :         }
      39                 :             : 
      40                 :             :         /* Status returned by this function through provide()
      41                 :             :            Default value assumes successful completion */
      42                 :           2 :         Return status = SUCCESS;
      43                 :             : 
      44                 :           2 :         create(Flags,flags);
      45   [ -  +  -  + ]:           2 :         call(resize(flags,4));
      46                 :             : 
      47                 :           2 :         Flags *flags_data = data(Flags,flags);
      48                 :             : 
      49         [ -  + ]:           2 :         if(flags_data == NULL)
      50                 :             :         {
      51                 :           0 :                 del(flags);
      52                 :           0 :                 provide(FAILURE);
      53                 :             :         }
      54                 :             : 
      55                 :           2 :         flags_data[0] = (Flags){SIZE_CHANGED,"lsize"};
      56                 :           2 :         flags_data[1] = (Flags){ALLOCATED_SIZE_CHANGED,"asize"};
      57                 :           2 :         flags_data[2] = (Flags){STATUS_CHANGED_TIME,"ctime"};
      58                 :           2 :         flags_data[3] = (Flags){MODIFICATION_TIME_CHANGED,"mtime"};
      59                 :             : 
      60                 :           2 :         unsigned int flags_found = 0;
      61                 :           2 :         bool first_word = true;
      62                 :             : 
      63                 :             :         /* Check each flag */
      64         [ +  + ]:          10 :         for(size_t i = 0; i < flags->length; i++)
      65                 :             :         {
      66                 :           8 :                 const Flags *flag = lookup(flags,i);
      67                 :             : 
      68         [ -  + ]:           8 :                 if(flag == NULL)
      69                 :             :                 {
      70                 :           0 :                         break;
      71                 :             :                 }
      72                 :             : 
      73         [ +  + ]:           8 :                 if(((unsigned int)change_flags_mask & (unsigned int)flag->flag_value) != 0u)
      74                 :             :                 {
      75         [ +  + ]:           4 :                         if(first_word == true)
      76                 :             :                         {
      77                 :           2 :                                 slog(ERROR,"Database file details: ");
      78                 :           2 :                                 first_word = false;
      79                 :             :                         }
      80                 :             : 
      81                 :             :                         /* Add separator if not the first flag */
      82         [ +  + ]:           4 :                         if(flags_found > 0)
      83                 :             :                         {
      84                 :           2 :                                 slog(ERROR|UNDECOR," & ");
      85                 :             :                         }
      86                 :           4 :                         slog(ERROR|UNDECOR,"%s",flag->flag_name);
      87                 :           4 :                         show_metadata(ERROR,flag->flag_value,before,after);
      88                 :           4 :                         flags_found++;
      89                 :             :                 }
      90                 :             :         }
      91                 :             : 
      92         [ +  - ]:           2 :         if(flags_found > 0)
      93                 :             :         {
      94                 :           2 :                 slog(ERROR|UNDECOR,"\n");
      95                 :             :         }
      96                 :             : 
      97                 :           2 :         del(flags);
      98                 :             : 
      99                 :           2 :         provide(SUCCESS);
     100                 :             : }
        

Generated by: LCOV version 2.0-1