Coverage Report

Created: 2025-06-22 07:06

/src/selinux/libsepol/cil/src/cil_log.c
Line
Count
Source (jump to first uncovered line)
1
/*
2
 * Copyright 2011 Tresys Technology, LLC. All rights reserved.
3
 * 
4
 * Redistribution and use in source and binary forms, with or without
5
 * modification, are permitted provided that the following conditions are met:
6
 * 
7
 *    1. Redistributions of source code must retain the above copyright notice,
8
 *       this list of conditions and the following disclaimer.
9
 * 
10
 *    2. Redistributions in binary form must reproduce the above copyright notice,
11
 *       this list of conditions and the following disclaimer in the documentation
12
 *       and/or other materials provided with the distribution.
13
 * 
14
 * THIS SOFTWARE IS PROVIDED BY TRESYS TECHNOLOGY, LLC ``AS IS'' AND ANY EXPRESS
15
 * OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
16
 * MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO
17
 * EVENT SHALL TRESYS TECHNOLOGY, LLC OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT,
18
 * INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,
19
 * BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
20
 * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF
21
 * LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE
22
 * OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF
23
 * ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
24
 * 
25
 * The views and conclusions contained in the software and documentation are those
26
 * of the authors and should not be interpreted as representing official policies,
27
 * either expressed or implied, of Tresys Technology, LLC.
28
 */
29
30
#include <stdlib.h>
31
#include <stdio.h>
32
#include <stdarg.h>
33
#include <string.h>
34
35
#include <cil/cil.h>
36
#include "cil_log.h"
37
38
static enum cil_log_level cil_log_level = CIL_ERR;
39
40
static void cil_default_log_handler(__attribute__((unused)) int lvl, const char *msg)
41
0
{
42
0
  fprintf(stderr, "%s", msg);
43
0
}
44
45
static void (*cil_log_handler)(int lvl, const char *msg) = &cil_default_log_handler;
46
47
void cil_set_log_handler(void (*handler)(int lvl, const char *msg))
48
13.3k
{
49
13.3k
  cil_log_handler = handler;
50
13.3k
}
51
52
__attribute__ ((format (printf, 2, 0))) void cil_vlog(enum cil_log_level lvl, const char *msg, va_list args)
53
8.55M
{
54
8.55M
  if (cil_log_level >= lvl) {
55
3.27M
    char buff[MAX_LOG_SIZE];
56
3.27M
    int n = vsnprintf(buff, MAX_LOG_SIZE, msg, args);
57
3.27M
    if (n > 0) {
58
3.27M
      (*cil_log_handler)(cil_log_level, buff);
59
3.27M
      if (n >= MAX_LOG_SIZE) {
60
2.64k
        (*cil_log_handler)(cil_log_level, " <LOG MESSAGE TRUNCATED>");
61
2.64k
      }
62
3.27M
    }
63
3.27M
  }
64
8.55M
}
65
66
__attribute__ ((format (printf, 2, 3))) void cil_log(enum cil_log_level lvl, const char *msg, ...)
67
5.94M
{
68
5.94M
    va_list args;
69
5.94M
    va_start(args, msg);
70
5.94M
    cil_vlog(lvl, msg, args);
71
5.94M
    va_end(args);
72
5.94M
}
73
74
void cil_set_log_level(enum cil_log_level lvl)
75
13.3k
{
76
13.3k
  cil_log_level = lvl;
77
13.3k
}
78
79
enum cil_log_level cil_get_log_level(void)
80
87.8k
{
81
87.8k
  return cil_log_level;
82
87.8k
}