summaryrefslogtreecommitdiff
path: root/src/util/config
diff options
context:
space:
mode:
authornavewindre <boneyaard@gmail.com>2025-09-10 12:25:00 +0200
committernavewindre <boneyaard@gmail.com>2025-09-10 12:25:00 +0200
commit235926dadb686589f0b5480162c3ab929159e570 (patch)
tree9fc482720a2bafabaca207befbc611d373d1c7ca /src/util/config
parent8be4ca70798fafd57dba947edfb18d0de594013d (diff)
unfuck
Diffstat (limited to 'src/util/config')
-rw-r--r--src/util/config/config.cpp67
1 files changed, 28 insertions, 39 deletions
diff --git a/src/util/config/config.cpp b/src/util/config/config.cpp
index 6c2d021..a41e455 100644
--- a/src/util/config/config.cpp
+++ b/src/util/config/config.cpp
@@ -12,21 +12,18 @@ void cfg_seterr( CFG_PARSER* p, const char* fmt, ... ) {
}
inline U8 is_whitespace( char c ) {
- return c == ' ' || c == '\t' || c == '\n' || c == '\r'; // Added \r
+ return c == ' ' || c == '\t' || c == '\n' || c == '\r';
}
inline void trim_whitespace( char* buf ) {
if (!buf || !*buf) return;
-
- // Find first non-whitespace character
+
U32 start = 0;
while( buf[start] && is_whitespace( buf[start] ) ) start++;
-
- // Find last non-whitespace character
+
U32 end = strlen( buf );
while( end > start && is_whitespace( buf[end - 1] ) ) end--;
-
- // Move string to beginning and null-terminate
+
U32 len = end - start;
memmove( buf, buf + start, len );
buf[len] = '\0';
@@ -184,20 +181,17 @@ void parse_section( CFG_PARSER* parser, CFG_SECTION* current_section ) {
while( fgets( line, sizeof(line), parser->file ) ) {
parser->linen++;
-
- // Remove all whitespace including \r\n
+
trim_whitespace( line );
-
- // Skip empty lines
- if( strlen(line) == 0 ) continue;
-
- // Use a copy for tokenization to preserve original
+ if( strlen( line ) == 0 )
+ continue;
+
char line_copy[8192];
strcpy( line_copy, line );
-
- token = strtok( line_copy, " \t\r\n" ); // Added \r
+
+ token = strtok( line_copy, " \t\r\n" );
if( !token ) continue;
-
+
if( strcmp( token, "{" ) == 0 ) {
continue;
} else if( strcmp( token, "}" ) == 0 ) {
@@ -205,36 +199,33 @@ void parse_section( CFG_PARSER* parser, CFG_SECTION* current_section ) {
} else if( strcmp( token, cfg_types[CFGT_SECTION].def ) == 0 ) {
next_token = strtok( NULL, " \t\r\n" );
if( !next_token ) {
- cfg_seterr( parser, "Missing section name at line %d", parser->linen );
+ cfg_seterr( parser, "missing section name at line %d", parser->linen );
return;
}
-
+
char sectname[64];
strncpy( sectname, next_token, sizeof(sectname) - 1 );
sectname[sizeof(sectname) - 1] = '\0';
trim_whitespace( sectname );
CFG_SECTION* new_section = cfg_section_new( sectname, (CFG_NODE*)current_section );
-
- // Look for opening brace
+
char* brace = strtok( NULL, " \t\r\n" );
if( !brace || strcmp( brace, "{" ) != 0 ) {
- cfg_seterr( parser, "Expected '{' after section name at line %d", parser->linen );
+ cfg_seterr( parser, "expected '{' after section name at line %d", parser->linen );
return;
}
-
+
parse_section( parser, new_section );
} else {
- // Parse variable declaration
char name[64];
strncpy( name, token, sizeof(name) - 1 );
name[sizeof(name) - 1] = '\0';
trim_whitespace( name );
- // Find the variable name (between type and =)
token = strtok( NULL, "=[" );
if( !token ) {
- cfg_seterr( parser, "Invalid variable declaration at line %d", parser->linen );
+ cfg_seterr( parser, "invalid variable declaration at line %d", parser->linen );
continue;
}
@@ -243,24 +234,22 @@ void parse_section( CFG_PARSER* parser, CFG_SECTION* current_section ) {
varname[sizeof(varname) - 1] = '\0';
trim_whitespace( varname );
- // Find matching parser
- bool found = false;
+ U8 found = 0;
for( I32 i = 0; i < sizeof(cfg_types) / sizeof(CFG_TYPE); ++i ) {
const CFG_TYPE* fn = &cfg_types[i];
if( strcmp( name, fn->def ) == 0 ) {
- // Reset strtok to work on original line for parser
strcpy( line_copy, line );
- strtok( line_copy, " \t\r\n" ); // Skip type
- strtok( NULL, "=[" ); // Skip variable name
-
+ strtok( line_copy, " \t\r\n" );
+ strtok( NULL, "=[" );
+
fn->parser( parser, current_section, varname );
found = true;
break;
}
}
-
+
if( !found ) {
- cfg_seterr( parser, "Unknown type '%s' at line %d", name, parser->linen );
+ cfg_seterr( parser, "unknown type '%s' at line %d", name, parser->linen );
return;
}
@@ -273,26 +262,26 @@ void parse_section( CFG_PARSER* parser, CFG_SECTION* current_section ) {
}
CFG_SECTION* cfg_load( const char* path ) {
- FILE* f = fopen( path, "r" ); // Changed from "rb" to "r" for text mode
+ FILE* f = fopen( path, "r" );
if( !f )
return 0;
CFG_PARSER p;
- memset( &p, 0, sizeof(p) ); // Initialize all fields
+ memset( &p, 0, sizeof(p) );
p.iserr = 0;
p.file = f;
p.linen = 0;
p.root = cfg_section_new( "root", 0 );
-
+
parse_section( &p, p.root );
fclose( f );
-
+
if( p.iserr ) {
cfg_free( (CFG_NODE*)p.root );
return 0;
}
-
+
return p.root;
}