mirror of
https://github.com/gnif/LookingGlass.git
synced 2024-11-25 23:07:18 +00:00
[common] option: handle ini lines without trailing newline
Before, if the last line of an ini file has no trailing \n, it is ignored. This commit changes the parser to process such lines.
This commit is contained in:
parent
21d86dd31d
commit
7300d00f66
@ -370,6 +370,29 @@ static char * file_parse_module(FILE * fp)
|
|||||||
return NULL;
|
return NULL;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static bool process_option_line(const char * module, const char * name,
|
||||||
|
char * value, int valueLen, int lineno)
|
||||||
|
{
|
||||||
|
if (!module)
|
||||||
|
{
|
||||||
|
DEBUG_ERROR("Syntax error on line %d, module not specified for option", lineno);
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
struct Option * o = option_get(module, name);
|
||||||
|
if (!o)
|
||||||
|
DEBUG_WARN("Ignored unknown option %s:%s", module, name);
|
||||||
|
else
|
||||||
|
{
|
||||||
|
if (value)
|
||||||
|
value[valueLen] = '\0';
|
||||||
|
|
||||||
|
if (!option_set(o, value))
|
||||||
|
DEBUG_ERROR("Failed to set the option value");
|
||||||
|
}
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
bool option_load(const char * filename)
|
bool option_load(const char * filename)
|
||||||
{
|
{
|
||||||
FILE * fp = fopen(filename, "r");
|
FILE * fp = fopen(filename, "r");
|
||||||
@ -431,28 +454,12 @@ bool option_load(const char * filename)
|
|||||||
continue;
|
continue;
|
||||||
|
|
||||||
case '\n':
|
case '\n':
|
||||||
if (name)
|
if (name && !process_option_line(module, name, value, valueLen, lineno))
|
||||||
{
|
{
|
||||||
if (!module)
|
|
||||||
{
|
|
||||||
DEBUG_ERROR("Syntax error on line %d, module not specified for option", lineno);
|
|
||||||
result = false;
|
result = false;
|
||||||
goto exit;
|
goto exit;
|
||||||
}
|
}
|
||||||
|
|
||||||
struct Option * o = option_get(module, name);
|
|
||||||
if (!o)
|
|
||||||
DEBUG_WARN("Ignored unknown option %s:%s", module, name);
|
|
||||||
else
|
|
||||||
{
|
|
||||||
if (value)
|
|
||||||
value[valueLen] = '\0';
|
|
||||||
|
|
||||||
if (!option_set(o, value))
|
|
||||||
DEBUG_ERROR("Failed to set the option value");
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
line = true;
|
line = true;
|
||||||
expectLine = false;
|
expectLine = false;
|
||||||
expectValue = false;
|
expectValue = false;
|
||||||
@ -527,6 +534,9 @@ bool option_load(const char * filename)
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if (name && !process_option_line(module, name, value, valueLen, lineno))
|
||||||
|
result = false;
|
||||||
|
|
||||||
exit:
|
exit:
|
||||||
fclose(fp);
|
fclose(fp);
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user