summaryrefslogtreecommitdiffstats
path: root/src/Daemon/Settings.cpp
diff options
context:
space:
mode:
authorDenys Vlasenko <vda.linux@googlemail.com>2009-11-18 13:21:15 +0100
committerDenys Vlasenko <vda.linux@googlemail.com>2009-11-18 13:21:15 +0100
commit2ccbb0e4bce7c22a44e67f2de9e5a155bd0aed86 (patch)
tree4ea69f9bf08405c742da54409508fa30d925c957 /src/Daemon/Settings.cpp
parentc76bab5d699030a22ab85b67422e5092d92fa376 (diff)
downloadabrt-2ccbb0e4bce7c22a44e67f2de9e5a155bd0aed86.tar.gz
abrt-2ccbb0e4bce7c22a44e67f2de9e5a155bd0aed86.tar.xz
abrt-2ccbb0e4bce7c22a44e67f2de9e5a155bd0aed86.zip
add support for \" escaping in config file
Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com>
Diffstat (limited to 'src/Daemon/Settings.cpp')
-rw-r--r--src/Daemon/Settings.cpp61
1 files changed, 44 insertions, 17 deletions
diff --git a/src/Daemon/Settings.cpp b/src/Daemon/Settings.cpp
index 7f419ec5..18767281 100644
--- a/src/Daemon/Settings.cpp
+++ b/src/Daemon/Settings.cpp
@@ -78,8 +78,11 @@ static set_string_t ParseList(const char* pList)
return set;
}
+/* (What format do we parse here?) */
static vector_pair_string_string_t ParseListWithArgs(const char *pValue)
{
+ VERB3 log(" ParseListWithArgs(%s)", pValue);
+
vector_pair_string_string_t pluginsWithArgs;
unsigned int ii;
std::string item;
@@ -88,39 +91,55 @@ static vector_pair_string_string_t ParseListWithArgs(const char *pValue)
bool is_arg = false;
for (ii = 0; pValue[ii]; ii++)
{
- if (pValue[ii] == '\"')
+ if (is_quote && pValue[ii] == '\\' && pValue[ii+1])
+ {
+ item += pValue[ii];
+ ii++;
+ item += pValue[ii];
+ continue;
+ }
+ if (pValue[ii] == '"')
{
is_quote = !is_quote;
item += pValue[ii];
+ continue;
+ }
+ if (is_quote)
+ {
+ item += pValue[ii];
+ continue;
}
- else if (pValue[ii] == '(' && !is_quote)
+ if (pValue[ii] == '(')
{
action = item;
item = "";
is_arg = true;
+ continue;
}
- else if (pValue[ii] == ')' && is_arg && !is_quote)
+ if (pValue[ii] == ')' && is_arg)
{
+ VERB3 log(" adding (%s,%s)", action.c_str(), item.c_str());
pluginsWithArgs.push_back(make_pair(action, item));
item = "";
is_arg = false;
action = "";
+ continue;
}
- else if (pValue[ii] == ',' && !is_quote && !is_arg)
+ if (pValue[ii] == ',' && !is_arg)
{
if (item != "")
{
+ VERB3 log(" adding (%s,%s)", item.c_str(), "");
pluginsWithArgs.push_back(make_pair(item, ""));
item = "";
}
+ continue;
}
- else
- {
- item += pValue[ii];
- }
+ item += pValue[ii];
}
if (item != "")
{
+ VERB3 log(" adding (%s,%s)", item.c_str(), "");
pluginsWithArgs.push_back(make_pair(item, ""));
}
return pluginsWithArgs;
@@ -255,42 +274,50 @@ void LoadSettings()
std::string value;
for (ii = 0; ii < line.length(); ii++)
{
+ if (is_quote && line[ii] == '\\' && ii+1 < line.length())
+ {
+ value += line[ii];
+ ii++;
+ value += line[ii];
+ continue;
+ }
if (isspace(line[ii]) && !is_quote)
{
continue;
}
- else if (line[ii] == '#' && !is_quote && key == "")
+ if (line[ii] == '#' && !is_quote && key == "")
{
break;
}
- else if (line[ii] == '[' && !is_quote)
+ if (line[ii] == '[' && !is_quote)
{
is_section = true;
section = "";
+ continue;
}
- else if (line[ii] == '\"')
+ if (line[ii] == '"')
{
is_quote = !is_quote;
value += line[ii];
+ continue;
}
- else if (is_section)
+ if (is_section)
{
if (line[ii] == ']')
{
break;
}
section += line[ii];
+ continue;
}
- else if (line[ii] == '=' && !is_quote)
+ if (line[ii] == '=' && !is_quote)
{
is_key = false;
key = value;
value = "";
+ continue;
}
- else
- {
- value += line[ii];
- }
+ value += line[ii];
}
if (!is_key && !is_quote)
{