LCOV - code coverage report
Current view: top level - src - extract_relative_path.c (source / functions) Coverage Total Hit
Test: coverage.info Lines: 100.0 % 10 10
Test Date: 2026-03-01 04:31:48 Functions: 100.0 % 1 1
Branches: 87.5 % 8 7

             Branch data     Line data    Source code
       1                 :             : #include "precizer.h"
       2                 :             : 
       3                 :             : /**
       4                 :             :  * @brief Returns the relative path by removing a given prefix from an absolute or relative path.
       5                 :             :  *
       6                 :             :  * This function checks if the given absolute path starts with the specified prefix.
       7                 :             :  * If it does, the function returns the portion of the path after the prefix.
       8                 :             :  * If the prefix is not found at the beginning, the original path is returned unchanged.
       9                 :             :  *
      10                 :             :  * Special cases:
      11                 :             :  * - If the prefix is "/", the function removes the leading slash and returns the rest of the path.
      12                 :             :  * - If the entire absolute path matches the prefix, it returns "." to indicate the current directory.
      13                 :             :  * - If the absolute path does not start with the prefix, it is returned unchanged.
      14                 :             :  *
      15                 :             :  * @param path The absolute or relative path to be processed.
      16                 :             :  * @param prefix The prefix to remove from the path.
      17                 :             :  * @return A pointer to the relative path within the given absolute path.
      18                 :             :  */
      19                 :       25904 : const char *extract_relative_path(
      20                 :             :         const char *path,
      21                 :             :         const char *prefix)
      22                 :             : {
      23                 :       25904 :         size_t prefix_len = strlen(prefix);
      24                 :             : 
      25                 :             :         // Check if the prefix matches the beginning of the absolute path
      26         [ +  + ]:       25904 :         if(strncmp(path,prefix,prefix_len) == 0)
      27                 :             :         {
      28                 :       25902 :                 const char *relative_path = path + prefix_len;
      29                 :             : 
      30                 :             :                 // Skip the leading '/' or '\' if present after the prefix
      31   [ +  +  -  + ]:       25902 :                 if(*relative_path == '/' || *relative_path == '\\')
      32                 :             :                 {
      33                 :       25372 :                         relative_path++;
      34                 :             :                 }
      35                 :             : 
      36                 :             :                 // If the resulting path is empty, return "." to represent the current directory
      37         [ +  + ]:       25902 :                 if(*relative_path == '\0')
      38                 :             :                 {
      39                 :         524 :                         return ".";
      40                 :             :                 }
      41                 :             : 
      42                 :       25378 :                 return relative_path;
      43                 :             :         }
      44                 :             : 
      45                 :             :         // If the prefix doesn't match, return the original path
      46                 :           2 :         return path;
      47                 :             : }
        

Generated by: LCOV version 2.0-1