Skip to content

Commit 5dfef48

Browse files
authored
Merge pull request #4452 from Goober5000/default_enabled_nprintf_categories
set up debug_filter.cfg to have default filters that can be turned off
2 parents f280f11 + 8698993 commit 5dfef48

File tree

1 file changed

+37
-25
lines changed

1 file changed

+37
-25
lines changed

code/osapi/outwnd.cpp

Lines changed: 37 additions & 25 deletions
Original file line numberDiff line numberDiff line change
@@ -25,11 +25,19 @@
2525
#include "cfile/cfilesystem.h"
2626
#include "parse/parselo.h"
2727

28+
static const char *FILTERS_ENABLED_BY_DEFAULT[] =
29+
{
30+
"error",
31+
"warning",
32+
"general"
33+
};
34+
2835
struct outwnd_filter_struct {
2936
char name[NAME_LENGTH];
3037
bool enabled;
3138
};
3239

40+
// This technique is necessary to avoid a crash in FRED. See commit e624f6c1.
3341
static SCP_vector<outwnd_filter_struct>& filter_vector()
3442
{
3543
static SCP_vector<outwnd_filter_struct> vec;
@@ -58,7 +66,16 @@ void load_filter_info()
5866
FILE* fp;
5967
char pathname[MAX_PATH_LEN];
6068
char inbuf[NAME_LENGTH + 4];
61-
outwnd_filter_struct new_filter;
69+
outwnd_filter_struct* filter_ptr;
70+
71+
// add default-enabled filters
72+
for (const char *name : FILTERS_ENABLED_BY_DEFAULT) {
73+
filter_vector().emplace_back();
74+
filter_ptr = &filter_vector().back();
75+
76+
strcpy_s(filter_ptr->name, name);
77+
filter_ptr->enabled = true;
78+
}
6279

6380
outwnd_filter_loaded = 1;
6481

@@ -69,30 +86,18 @@ void load_filter_info()
6986

7087
if (!fp) {
7188
Outwnd_no_filter_file = 1;
72-
73-
strcpy_s( new_filter.name, "error" );
74-
new_filter.enabled = true;
75-
filter_vector().push_back( new_filter );
76-
77-
strcpy_s( new_filter.name, "general" );
78-
new_filter.enabled = true;
79-
filter_vector().push_back( new_filter );
80-
81-
strcpy_s( new_filter.name, "warning" );
82-
new_filter.enabled = true;
83-
filter_vector().push_back( new_filter );
84-
8589
return;
8690
}
8791

8892
Outwnd_no_filter_file = 0;
8993

9094
while ( fgets(inbuf, NAME_LENGTH+3, fp) ) {
95+
bool enabled;
9196

9297
if (*inbuf == '+')
93-
new_filter.enabled = true;
98+
enabled = true;
9499
else if (*inbuf == '-')
95-
new_filter.enabled = false;
100+
enabled = false;
96101
else
97102
continue; // skip everything else
98103

@@ -101,17 +106,24 @@ void load_filter_info()
101106
inbuf[z] = 0;
102107

103108
Assert( strlen(inbuf+1) < NAME_LENGTH );
104-
strcpy_s(new_filter.name, inbuf + 1);
105-
106-
if ( !stricmp(new_filter.name, "error") ) {
107-
new_filter.enabled = true;
108-
} else if ( !stricmp(new_filter.name, "general") ) {
109-
new_filter.enabled = true;
110-
} else if ( !stricmp(new_filter.name, "warning") ) {
111-
new_filter.enabled = true;
109+
const char *name = &inbuf[1];
110+
111+
// find it, or create it
112+
filter_ptr = nullptr;
113+
for (auto &filter : filter_vector()) {
114+
if (!stricmp(filter.name, name)) {
115+
filter_ptr = &filter;
116+
break;
117+
}
118+
}
119+
if (filter_ptr == nullptr) {
120+
filter_vector().emplace_back();
121+
filter_ptr = &filter_vector().back();
122+
strcpy_s(filter_ptr->name, name);
112123
}
113124

114-
filter_vector().push_back( new_filter );
125+
// set it as enabled or not, depending on config
126+
filter_ptr->enabled = enabled;
115127
}
116128

117129
if ( ferror(fp) && !feof(fp) )

0 commit comments

Comments
 (0)