asar coverage - build #266


src/asar/
File: src/asar/warnings.cpp
Date: 2025-03-01 20:27:29
Lines:
55/56
98.2%
Functions:
8/8
100.0%
Branches:
48/55
87.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 810 void asar_throw_warning_impl(int whichpass, asar_warning_id warnid, const char* fmt, ...)
19 {
20
2/2
✓ Branch 0 taken 404 times.
✓ Branch 1 taken 406 times.
810 if (pass == whichpass)
21 {
22
3/4
✓ Branch 0 taken 404 times.
✗ Branch 1 not taken.
✓ Branch 2 taken 207 times.
✓ Branch 3 taken 197 times.
404 assert(warnid >= 0 && warnid < warning_id_end);
23
24
5/5
✓ Branch 0 taken 20 times.
✓ Branch 1 taken 177 times.
✓ Branch 2 taken 207 times.
✓ Branch 3 taken 24 times.
✓ Branch 4 taken 183 times.
404 if (current_warnings_state.enabled[warnid])
25 {
26 24 char warning_buffer[1024];
27 24 va_list args;
28 44 va_start(args, fmt);
29
30
2/2
✓ Branch 0 taken 20 times.
✓ Branch 1 taken 24 times.
44 vsnprintf(warning_buffer, sizeof(warning_buffer), fmt, args);
31
32 44 va_end(args);
33
1/2
✓ Branch 0 taken 44 times.
✗ Branch 1 not taken.
44 warn((int)warnid, warning_buffer);
34 }
35 }
36 810 }
37
38 88 const char* get_warning_name(asar_warning_id warnid)
39 {
40
3/4
✓ Branch 0 taken 88 times.
✗ Branch 1 not taken.
✓ Branch 2 taken 48 times.
✓ Branch 3 taken 40 times.
88 assert(warnid >= 0 && warnid < warning_id_end);
41
42 88 const asar_warning_mapping& warning = asar_all_warnings[warnid];
43
44 88 return warning.name;
45 }
46
47
48
49 68 void set_warning_enabled(asar_warning_id warnid, bool enabled)
50 {
51
3/4
✓ Branch 0 taken 68 times.
✗ Branch 1 not taken.
✓ Branch 2 taken 35 times.
✓ Branch 3 taken 33 times.
68 assert(warnid >= 0 && warnid < warning_id_end);
52
53 68 current_warnings_state.enabled[warnid] = enabled;
54 68 }
55
56 86 asar_warning_id parse_warning_id_from_string(const char* string)
57 {
58 86 const char* pos = string;
59
60
1/2
✗ Branch 0 not taken.
✓ Branch 1 taken 86 times.
86 if (pos == nullptr)
61 {
62 return warning_id_end;
63 }
64
65
66
6/6
✓ Branch 0 taken 42 times.
✓ Branch 1 taken 44 times.
✓ Branch 2 taken 33 times.
✓ Branch 3 taken 9 times.
✓ Branch 4 taken 35 times.
✓ Branch 5 taken 9 times.
86 if (pos[0] == 'w' || pos[0] == 'W')
67 {
68 68 ++pos;
69 }
70
2/2
✓ Branch 0 taken 1127 times.
✓ Branch 1 taken 18 times.
1145 for(int i = 0; i < warning_id_end; i++)
71 {
72
4/4
✓ Branch 0 taken 33 times.
✓ Branch 1 taken 522 times.
✓ Branch 2 taken 35 times.
✓ Branch 3 taken 537 times.
1127 if(!stricmpwithlower(pos, asar_all_warnings[i].name+1))
73 {
74 68 return asar_warning_id(i);
75 }
76 }
77
78 18 return warning_id_end;
79 }
80
81 286 void reset_warnings_to_default()
82 {
83
2/2
✓ Branch 0 taken 4576 times.
✓ Branch 1 taken 286 times.
4862 for (int i = 0; i < (int)warning_id_end; ++i)
84 {
85 4576 const asar_warning_mapping& warning = asar_all_warnings[i];
86
87
1/2
✗ Branch 0 not taken.
✓ Branch 1 taken 2560 times.
4576 current_warnings_state.enabled[i] = warning.default_enabled;
88 }
89 286 }
90
91 850 void push_warnings(bool warnings_command)
92 {
93
2/2
✓ Branch 0 taken 24 times.
✓ Branch 1 taken 826 times.
850 if (warnings_command)
94 {
95 24 warnings_state_stack.append(current_warnings_state);
96 }
97 else
98 {
99 826 main_warnings_state = current_warnings_state;
100 }
101 850 }
102
103 840 void pull_warnings(bool warnings_command)
104 {
105
4/4
✓ Branch 0 taken 822 times.
✓ Branch 1 taken 18 times.
✓ Branch 2 taken 816 times.
✓ Branch 3 taken 6 times.
840 if (warnings_state_stack.count > 0 || !warnings_command)
106 {
107 465 warnings_state prev_state;
108
109
2/2
✓ Branch 0 taken 18 times.
✓ Branch 1 taken 816 times.
834 if (warnings_command)
110 {
111
1/2
✓ Branch 0 taken 18 times.
✗ Branch 1 not taken.
18 prev_state = warnings_state_stack[warnings_state_stack.count - 1];
112 }
113 else
114 {
115 816 prev_state = main_warnings_state;
116 }
117
118 834 current_warnings_state = prev_state;
119
120
2/2
✓ Branch 0 taken 18 times.
✓ Branch 1 taken 816 times.
834 if (warnings_command)
121 {
122 18 warnings_state_stack.remove(warnings_state_stack.count - 1);
123 }
124 369 }
125 else
126 {
127 6 asar_throw_error(0, error_type_block, error_id_pullwarnings_without_pushwarnings);
128 }
129 834 }
130
131 816 void verify_warnings()
132 {
133
2/2
✓ Branch 0 taken 6 times.
✓ Branch 1 taken 810 times.
816 if (warnings_state_stack.count > 0)
134 {
135 6 asar_throw_error(0, error_type_null, error_id_pushwarnings_without_pullwarnings);
136
137 6 warnings_state_stack.reset();
138 }
139 816 }
140