asar coverage - build #185


src/asar/
File: src/asar/warnings.cpp
Date: 2024-01-30 00:10:53
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 2144 void asar_throw_warning_impl(int whichpass, asar_warning_id warnid, const char* fmt, ...)
19 {
20
2/2
✓ Branch 0 taken 1095 times.
✓ Branch 1 taken 1049 times.
2144 if (pass == whichpass)
21 {
22
2/4
✓ Branch 0 taken 550 times.
✗ Branch 1 not taken.
✓ Branch 2 taken 550 times.
✗ Branch 3 not taken.
550 assert(warnid >= 0 && warnid < warning_id_end);
23
24
2/2
✓ Branch 0 taken 122 times.
✓ Branch 1 taken 973 times.
1095 if (current_warnings_state.enabled[warnid])
25 {
26 char warning_buffer[1024];
27 va_list args;
28 122 va_start(args, fmt);
29
30 122 vsnprintf(warning_buffer, sizeof(warning_buffer), fmt, args);
31
32 122 va_end(args);
33
1/2
✓ Branch 0 taken 62 times.
✗ Branch 1 not taken.
122 warn((int)warnid, warning_buffer);
34 }
35 }
36 2144 }
37
38 204 const char* get_warning_name(asar_warning_id warnid)
39 {
40
2/4
✓ Branch 0 taken 104 times.
✗ Branch 1 not taken.
✓ Branch 2 taken 104 times.
✗ Branch 3 not taken.
104 assert(warnid >= 0 && warnid < warning_id_end);
41
42 104 const asar_warning_mapping& warning = asar_all_warnings[warnid];
43
44 204 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 758 void reset_warnings_to_default()
82 {
83
2/2
✓ Branch 0 taken 12128 times.
✓ Branch 1 taken 758 times.
12886 for (int i = 0; i < (int)warning_id_end; ++i)
84 {
85 6240 const asar_warning_mapping& warning = asar_all_warnings[i];
86
87 12128 current_warnings_state.enabled[i] = warning.default_enabled;
88 }
89 758 }
90
91 2271 void push_warnings(bool warnings_command)
92 {
93
2/2
✓ Branch 0 taken 72 times.
✓ Branch 1 taken 2199 times.
2271 if (warnings_command)
94 {
95 72 warnings_state_stack.append(current_warnings_state);
96 }
97 else
98 {
99 2199 main_warnings_state = current_warnings_state;
100 }
101 2271 }
102
103 2241 void pull_warnings(bool warnings_command)
104 {
105
4/4
✓ Branch 0 taken 2187 times.
✓ Branch 1 taken 54 times.
✓ Branch 2 taken 2169 times.
✓ Branch 3 taken 18 times.
2241 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 1116 times.
1170 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 2169 prev_state = main_warnings_state;
116 }
117
118 2223 current_warnings_state = prev_state;
119
120
2/2
✓ Branch 0 taken 54 times.
✓ Branch 1 taken 2169 times.
2223 if (warnings_command)
121 {
122 54 warnings_state_stack.remove(warnings_state_stack.count - 1);
123 }
124 1143 }
125 else
126 {
127 18 asar_throw_error(0, error_type_block, error_id_pullwarnings_without_pushwarnings);
128 }
129 2223 }
130
131 2169 void verify_warnings()
132 {
133
2/2
✓ Branch 0 taken 18 times.
✓ Branch 1 taken 2151 times.
2169 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 2169 }
140