Coverage Report

Created: 2026-06-30 07:05

next uncovered line (L), next uncovered region (R), next uncovered branch (B)
/src/dcmtk/oficonv/libsrc/oficonv_logger.c
Line
Count
Source
1
/*
2
 *
3
 *  Copyright (C) 2022, OFFIS e.V.
4
 *  All rights reserved.  See COPYRIGHT file for details.
5
 *
6
 *  This software and supporting documentation were developed by
7
 *
8
 *    OFFIS e.V.
9
 *    R&D Division Health
10
 *    Escherweg 2
11
 *    D-26121 Oldenburg, Germany
12
 *
13
 *
14
 *  Module:  ofstd
15
 *
16
 *  Author:  Marco Eichelberg
17
 *
18
 *  Purpose: logging function for oficonv
19
 *
20
 */
21
22
#include "dcmtk/config/osconfig.h"
23
#include "dcmtk/oficonv/iconv.h"
24
#include "citrus_lock.h"
25
#include <stdio.h>
26
27
#ifdef WITH_THREADS
28
#ifdef HAVE_WINDOWS_H
29
static SRWLOCK logger_lock = SRWLOCK_INIT;
30
#elif defined(HAVE_PTHREAD_H)
31
static pthread_rwlock_t logger_lock = PTHREAD_RWLOCK_INITIALIZER;
32
#endif
33
#endif
34
35
static oficonv_logger_callback_t logger_callback = NULL;
36
static int log_level = 3;
37
38
void set_oficonv_logger_callback(oficonv_logger_callback_t callback)
39
0
{
40
0
  WLOCK(&logger_lock);
41
0
  logger_callback = callback;
42
0
  UNLOCK(&logger_lock);
43
0
}
44
45
oficonv_logger_callback_t get_oficonv_logger_callback()
46
0
{
47
0
  RLOCK(&logger_lock);
48
0
  oficonv_logger_callback_t result = logger_callback;
49
0
  UNRLOCK(&logger_lock);
50
0
  return result;
51
0
}
52
53
void set_oficonv_log_level(int level)
54
0
{
55
0
  log_level = level;
56
0
}
57
58
void oficonv_log(int level, const char *text1, const char *text2, const char *text3)
59
0
{
60
0
  RLOCK(&logger_lock);
61
0
  if (logger_callback) logger_callback(level, text1, text2, text3);
62
0
  else
63
0
  {
64
0
    const char *level_text;
65
0
    switch (level)
66
0
    {
67
0
      case 0:
68
0
        level_text = "T:";
69
0
        break;
70
0
      case 1:
71
0
        level_text = "D:";
72
0
        break;
73
0
      case 2:
74
0
        level_text = "I:";
75
0
        break;
76
0
      case 3:
77
0
        level_text = "W:";
78
0
        break;
79
0
      case 4:
80
0
        level_text = "E:";
81
0
        break;
82
0
      default:
83
0
        level_text = "F:";
84
0
        break;
85
0
    }
86
0
    if (level >= log_level) fprintf(stderr, "%s %s%s%s\n", level_text, text1, text2, text3);
87
0
  }
88
0
  UNRLOCK(&logger_lock);
89
0
}