From 0ec1808956ac6eaa08973a4ad609ce99bde4e6d3 Mon Sep 17 00:00:00 2001 From: Max Kellermann Date: Wed, 22 Jan 2014 23:17:42 +0100 Subject: db/proxy: simplify csvToStrings() --- src/db/upnp/Util.cxx | 64 ++++++++++++++-------------------------------------- 1 file changed, 17 insertions(+), 47 deletions(-) diff --git a/src/db/upnp/Util.cxx b/src/db/upnp/Util.cxx index fba63983d..0fd0d03db 100644 --- a/src/db/upnp/Util.cxx +++ b/src/db/upnp/Util.cxx @@ -143,56 +143,26 @@ csvToStrings(const char *s, T &tokens) { std::string current; tokens.clear(); - enum states {TOKEN, ESCAPE}; - states state = TOKEN; - - while (*s != 0) { - const char ch = *s++; - - switch (ch) { - case ',': - switch(state) { - case TOKEN: - tokens.push_back(current); - current.clear(); - continue; - case ESCAPE: - current += ','; - state = TOKEN; - continue; - } - break; - case '\\': - switch(state) { - case TOKEN: - state=ESCAPE; - continue; - case ESCAPE: - current += '\\'; - state = TOKEN; - continue; - } - break; - default: - switch(state) { - case ESCAPE: - state = TOKEN; - break; - case TOKEN: - break; - } - current += ch; + while (true) { + char ch = *s++; + if (ch == 0) { + tokens.push_back(current); + return true; } + + if (ch == '\\') { + ch = *s++; + if (ch == 0) + return false; + } else if (ch == ',') { + tokens.push_back(current); + current.clear(); + continue; + } + + current.push_back(ch); } - switch(state) { - case TOKEN: - tokens.push_back(current); - break; - case ESCAPE: - return false; - } - return true; } template bool csvToStrings>(const char *, std::list &); -- cgit v1.2.3