LCOV - code coverage report
Current view: top level - libbpfilter - logger.c (source / functions) Coverage Total Hit
Test: coverage.lcov Lines: 100.0 % 50 50
Test Date: 2025-11-24 12:34:34 Functions: 100.0 % 6 6
Branches: 98.4 % 62 61

             Branch data     Line data    Source code
       1                 :             : /* SPDX-License-Identifier: GPL-2.0-only */
       2                 :             : /*
       3                 :             :  * Copyright (c) 2023 Meta Platforms, Inc. and affiliates.
       4                 :             :  */
       5                 :             : 
       6                 :             : #include "bpfilter/logger.h"
       7                 :             : 
       8                 :             : #include <stdbool.h>
       9                 :             : #include <stdio.h>
      10                 :             : #include <unistd.h>
      11                 :             : 
      12                 :             : /// If true, log messages will be printed in colors.
      13                 :             : static bool _bf_can_print_color = false;
      14                 :             : 
      15                 :             : /** Default log level for log messages. All the logs below this level will
      16                 :             :  * be ignored (not printed). */
      17                 :             : static enum bf_log_level _bf_log_level = BF_LOG_INFO;
      18                 :             : 
      19                 :         954 : void bf_logger_setup(void)
      20                 :             : {
      21   [ +  +  -  + ]:         954 :     _bf_can_print_color = isatty(fileno(stdout)) && isatty(fileno(stderr));
      22                 :         954 : }
      23                 :             : 
      24                 :        7218 : const char *bf_logger_get_color(enum bf_color color, enum bf_style style)
      25                 :             : {
      26         [ +  + ]:        7218 :     if (!_bf_can_print_color) {
      27                 :             :         return "";
      28                 :             :     }
      29                 :             : 
      30   [ +  +  +  +  :          35 :     switch (color) {
          +  +  +  +  +  
          +  +  +  +  +  
             +  +  +  + ]
      31                 :           2 :     case BF_COLOR_DEFAULT:
      32         [ +  + ]:           2 :         return (style == BF_STYLE_BOLD) ? "\033[1;39m" : "\033[0;39m";
      33                 :           2 :     case BF_COLOR_BLACK:
      34         [ +  + ]:           2 :         return (style == BF_STYLE_BOLD) ? "\033[1;30m" : "\033[0;30m";
      35                 :           2 :     case BF_COLOR_RED:
      36         [ +  + ]:           2 :         return (style == BF_STYLE_BOLD) ? "\033[1;31m" : "\033[0;31m";
      37                 :           2 :     case BF_COLOR_GREEN:
      38         [ +  + ]:           2 :         return (style == BF_STYLE_BOLD) ? "\033[1;32m" : "\033[0;32m";
      39                 :           2 :     case BF_COLOR_YELLOW:
      40         [ +  + ]:           2 :         return (style == BF_STYLE_BOLD) ? "\033[1;33m" : "\033[0;33m";
      41                 :           2 :     case BF_COLOR_BLUE:
      42         [ +  + ]:           2 :         return (style == BF_STYLE_BOLD) ? "\033[1;34m" : "\033[0;34m";
      43                 :           2 :     case BF_COLOR_MAGENTA:
      44         [ +  + ]:           2 :         return (style == BF_STYLE_BOLD) ? "\033[1;35m" : "\033[0;35m";
      45                 :           2 :     case BF_COLOR_CYAN:
      46         [ +  + ]:           2 :         return (style == BF_STYLE_BOLD) ? "\033[1;36m" : "\033[0;36m";
      47                 :           2 :     case BF_COLOR_LIGHT_GRAY:
      48         [ +  + ]:           2 :         return (style == BF_STYLE_BOLD) ? "\033[1;37m" : "\033[0;37m";
      49                 :           2 :     case BF_COLOR_DARK_GRAY:
      50         [ +  + ]:           2 :         return (style == BF_STYLE_BOLD) ? "\033[1;90m" : "\033[0;90m";
      51                 :           2 :     case BF_COLOR_LIGHT_RED:
      52         [ +  + ]:           2 :         return (style == BF_STYLE_BOLD) ? "\033[1;91m" : "\033[0;91m";
      53                 :           2 :     case BF_COLOR_LIGHT_GREEN:
      54         [ +  + ]:           2 :         return (style == BF_STYLE_BOLD) ? "\033[1;92m" : "\033[0;92m";
      55                 :           2 :     case BF_COLOR_LIGHT_YELLOW:
      56         [ +  + ]:           2 :         return (style == BF_STYLE_BOLD) ? "\033[1;93m" : "\033[0;93m";
      57                 :           2 :     case BF_COLOR_LIGHT_BLUE:
      58         [ +  + ]:           2 :         return (style == BF_STYLE_BOLD) ? "\033[1;94m" : "\033[0;94m";
      59                 :           2 :     case BF_COLOR_LIGHT_MAGENTA:
      60         [ +  + ]:           2 :         return (style == BF_STYLE_BOLD) ? "\033[1;95m" : "\033[0;95m";
      61                 :           2 :     case BF_COLOR_LIGHT_CYAN:
      62         [ +  + ]:           2 :         return (style == BF_STYLE_BOLD) ? "\033[1;96m" : "\033[0;96m";
      63                 :           2 :     case BF_COLOR_WHITE:
      64         [ +  + ]:           2 :         return (style == BF_STYLE_BOLD) ? "\033[1;97m" : "\033[0;97m";
      65                 :             :     default:
      66                 :             :         return "\033[0m";
      67                 :             :     }
      68                 :             : }
      69                 :             : 
      70                 :        5272 : enum bf_log_level bf_log_get_level(void)
      71                 :             : {
      72                 :        5272 :     return _bf_log_level;
      73                 :             : }
      74                 :             : 
      75                 :          28 : void bf_log_set_level(enum bf_log_level level)
      76                 :             : {
      77                 :          28 :     _bf_log_level = level;
      78                 :          28 : }
      79                 :             : 
      80                 :             : static const char *_bf_log_level_strs[] = {
      81                 :             :     [BF_LOG_DBG] = "debug", [BF_LOG_INFO] = "info",   [BF_LOG_WARN] = "warning",
      82                 :             :     [BF_LOG_ERR] = "error", [BF_LOG_ABORT] = "abort",
      83                 :             : };
      84                 :             : static_assert(ARRAY_SIZE(_bf_log_level_strs) == _BF_LOG_MAX,
      85                 :             :               "missing entries in _bf_log_level_strs strings array");
      86                 :             : 
      87                 :        3571 : const char *bf_log_level_to_str(enum bf_log_level level)
      88                 :             : {
      89                 :        3571 :     return _bf_log_level_strs[level];
      90                 :             : }
      91                 :             : 
      92                 :          13 : enum bf_log_level bf_log_level_from_str(const char *str)
      93                 :             : {
      94                 :             :     bf_assert(str);
      95                 :             : 
      96         [ +  + ]:          48 :     for (enum bf_log_level level = 0; level < _BF_LOG_MAX; ++level) {
      97         [ +  + ]:          45 :         if (bf_streq(_bf_log_level_strs[level], str))
      98                 :             :             return level;
      99                 :             :     }
     100                 :             : 
     101                 :             :     return -EINVAL;
     102                 :             : }
        

Generated by: LCOV version 2.0-1