asar coverage - build #255


src/asar/
File: src/asar/warnings.cpp
Date: 2025-02-21 21:38:22
Lines:
52/53
98.1%
Functions:
8/8
100.0%
Branches:
34/44
77.3%

Line Branch Exec Source
1 #include "warnings.h"
2
3 #include "asar.h"
4 #include <cassert>
5 #include <cstdarg>
6
7 #include "interface-shared.h"
8
9 struct warnings_state
10 {
11 bool enabled[warning_id_end];
12 };
13
14 static warnings_state current_warnings_state;
15 static autoarray<warnings_state> warnings_state_stack;
16 static warnings_state main_warnings_state;
17
18 2166 void asar_throw_warning_impl(int whichpass, asar_warning_id warnid, const char* fmt, ...)
19 {
20
2/2
✓ Branch 0 taken 1105 times.
✓ Branch 1 taken 1061 times.
2166 if (pass == whichpass)
21 {
22
2/4
✓ Branch 0 taken 557 times.
✗ Branch 1 not taken.
✓ Branch 2 taken 557 times.
✗ Branch 3 not taken.
557 assert(warnid >= 0 && warnid < warning_id_end);
23
24
2/2
✓ Branch 0 taken 124 times.
✓ Branch 1 taken 981 times.
1105 if (current_warnings_state.enabled[warnid])
25 {
26 char warning_buffer[1024];
27 va_list args;
28 124 va_start(args, fmt);
29
30 124 vsnprintf(warning_buffer, sizeof(warning_buffer), fmt, args);
31
32 124 va_end(args);
33
1/2
✓ Branch 0 taken 64 times.
✗ Branch 1 not taken.
124 warn((int)warnid, warning_buffer);
34 }
35 }
36 2166 }
37
38 208 const char* get_warning_name(asar_warning_id warnid)
39 {
40
2/4
✓ Branch 0 taken 108 times.
✗ Branch 1 not taken.
✓ Branch 2 taken 108 times.
✗ Branch 3 not taken.
108 assert(warnid >= 0 && warnid < warning_id_end);
41
42 108 const asar_warning_mapping& warning = asar_all_warnings[warnid];
43
44 208 return warning.name;
45 }
46
47
48
49 200 void set_warning_enabled(asar_warning_id warnid, bool enabled)
50 {
51
2/4
✓ Branch 0 taken 101 times.
✗ Branch 1 not taken.
✓ Branch 2 taken 101 times.
✗ Branch 3 not taken.
101 assert(warnid >= 0 && warnid < warning_id_end);
52
53 200 current_warnings_state.enabled[warnid] = enabled;
54 200 }
55
56 254 asar_warning_id parse_warning_id_from_string(const char* string)
57 {
58 128 const char* pos = string;
59
60
1/2
✗ Branch 0 not taken.
✓ Branch 1 taken 254 times.
254 if (pos == nullptr)
61 {
62 return warning_id_end;
63 }
64
65
66
3/4
✓ Branch 0 taken 254 times.
✗ Branch 1 not taken.
✓ Branch 2 taken 200 times.
✓ Branch 3 taken 54 times.
254 if (pos[0] == 'w' || pos[0] == 'W')
67 {
68 200 ++pos;
69 }
70
2/2
✓ Branch 0 taken 1709 times.
✓ Branch 1 taken 1692 times.
3401 for(int i = 0; i < warning_id_end; i++)
71 {
72
2/2
✓ Branch 0 taken 200 times.
✓ Branch 1 taken 3147 times.
3347 if(!stricmpwithlower(pos, asar_all_warnings[i].name+1))
73 {
74 200 return asar_warning_id(i);
75 }
76 }
77
78 27 return warning_id_end;
79 }
80
81 774 void reset_warnings_to_default()
82 {
83
2/2
✓ Branch 0 taken 12384 times.
✓ Branch 1 taken 774 times.
13158 for (int i = 0; i < (int)warning_id_end; ++i)
84 {
85 6448 const asar_warning_mapping& warning = asar_all_warnings[i];
86
87 12384 current_warnings_state.enabled[i] = warning.default_enabled;
88 }
89 774 }
90
91 2319 void push_warnings(bool warnings_command)
92 {
93
2/2
✓ Branch 0 taken 72 times.
✓ Branch 1 taken 2247 times.
2319 if (warnings_command)
94 {
95 72 warnings_state_stack.append(current_warnings_state);
96 }
97 else
98 {
99 2247 main_warnings_state = current_warnings_state;
100 }
101 2319 }
102
103 2289 void pull_warnings(bool warnings_command)
104 {
105
4/4
✓ Branch 0 taken 2235 times.
✓ Branch 1 taken 54 times.
✓ Branch 2 taken 2217 times.
✓ Branch 3 taken 18 times.
2289 if (warnings_state_stack.count > 0 || !warnings_command)
106 {
107 warnings_state prev_state;
108
109
2/2
✓ Branch 0 taken 54 times.
✓ Branch 1 taken 1155 times.
1209 if (warnings_command)
110 {
111
1/2
✓ Branch 0 taken 27 times.
✗ Branch 1 not taken.
54 prev_state = warnings_state_stack[warnings_state_stack.count - 1];
112 }
113 else
114 {
115 2217 prev_state = main_warnings_state;
116 }
117
118 2271 current_warnings_state = prev_state;
119
120
2/2
✓ Branch 0 taken 54 times.
✓ Branch 1 taken 2217 times.
2271 if (warnings_command)
121 {
122 54 warnings_state_stack.remove(warnings_state_stack.count - 1);
123 }
124 1182 }
125 else
126 {
127 18 asar_throw_error(0, error_type_block, error_id_pullwarnings_without_pushwarnings);
128 }
129 2271 }
130
131 2217 void verify_warnings()
132 {
133
2/2
✓ Branch 0 taken 18 times.
✓ Branch 1 taken 2199 times.
2217 if (warnings_state_stack.count > 0)
134 {
135 18 asar_throw_error(0, error_type_null, error_id_pushwarnings_without_pullwarnings);
136
137 18 warnings_state_stack.reset();
138 }
139 2217 }
140