summaryrefslogtreecommitdiff
path: root/base
diff options
context:
space:
mode:
Diffstat (limited to 'base')
-rw-r--r--base/inifile.cc30
-rw-r--r--base/inifile.hh3
2 files changed, 31 insertions, 2 deletions
diff --git a/base/inifile.cc b/base/inifile.cc
index 52468f46e..7e7485bcb 100644
--- a/base/inifile.cc
+++ b/base/inifile.cc
@@ -367,14 +367,40 @@ IniFile::findDefault(const string &_section, const string &entry,
string &value) const
{
string section = _section;
- while (!find(section, entry, value)) {
- if (!find(section, "default", section))
+ while (!findAppend(section, entry, value)) {
+ if (!find(section, "default", section)) {
return false;
+ }
}
return true;
}
+bool
+IniFile::findAppend(const string &_section, const string &entry,
+ string &value) const
+{
+ string section = _section;
+ bool ret = false;
+ bool first = true;
+
+ do {
+ string val;
+ if (find(section, entry, val)) {
+ ret = true;
+ if (first) {
+ value = val;
+ first = false;
+ } else {
+ value += " ";
+ value += val;
+ }
+
+ }
+ } while (find(section, "append", section));
+
+ return ret;
+}
bool
IniFile::Section::printUnreferenced(const string &sectionName)
diff --git a/base/inifile.hh b/base/inifile.hh
index 3a82f2d4d..34424eb4b 100644
--- a/base/inifile.hh
+++ b/base/inifile.hh
@@ -196,6 +196,9 @@ class IniFile
bool findDefault(const std::string &section, const std::string &entry,
std::string &value) const;
+ bool findAppend(const std::string &section, const std::string &entry,
+ std::string &value) const;
+
/// Print unreferenced entries in object. Iteratively calls
/// printUnreferend() on all the constituent sections.
bool printUnreferenced();