diff --git a/src/db/upnp/ContentDirectoryService.cxx b/src/db/upnp/ContentDirectoryService.cxx index d49a6b6fd..b666716f7 100644 --- a/src/db/upnp/ContentDirectoryService.cxx +++ b/src/db/upnp/ContentDirectoryService.cxx @@ -249,7 +249,7 @@ ContentDirectoryService::getSearchCapabilities(UpnpClient_Handle hdl, if (!tbuf.compare("*")) { result.insert(result.end(), "*"); } else if (!tbuf.empty()) { - if (!csvToStrings(tbuf, result)) { + if (!csvToStrings(tbuf.c_str(), result)) { error.Set(upnp_domain, "Bad response"); return false; } diff --git a/src/db/upnp/Util.cxx b/src/db/upnp/Util.cxx index ddc54bbe0..df731f94d 100644 --- a/src/db/upnp/Util.cxx +++ b/src/db/upnp/Util.cxx @@ -139,14 +139,17 @@ stringToTokens(const std::string &str, template bool -csvToStrings(const std::string &s, T &tokens) +csvToStrings(const char *s, T &tokens) { std::string current; tokens.clear(); enum states {TOKEN, ESCAPE}; states state = TOKEN; - for (unsigned int i = 0; i < s.length(); i++) { - switch (s[i]) { + + while (*s != 0) { + const char ch = *s++; + + switch (ch) { case ',': switch(state) { case TOKEN: @@ -179,7 +182,7 @@ csvToStrings(const std::string &s, T &tokens) case TOKEN: break; } - current += s[i]; + current += ch; } } switch(state) { @@ -193,5 +196,5 @@ csvToStrings(const std::string &s, T &tokens) } //template bool csvToStrings >(const string &, list &); -template bool csvToStrings >(const std::string &, std::vector &); -template bool csvToStrings >(const std::string &, std::set &); +template bool csvToStrings >(const char *, std::vector &); +template bool csvToStrings >(const char *, std::set &); diff --git a/src/db/upnp/Util.hxx b/src/db/upnp/Util.hxx index 005dd3360..58e382faa 100644 --- a/src/db/upnp/Util.hxx +++ b/src/db/upnp/Util.hxx @@ -40,6 +40,7 @@ stringToTokens(const std::string &str, const char *delims = "/", bool skipinit = true); template -bool csvToStrings(const std::string& s, T &tokens); +bool +csvToStrings(const char *s, T &tokens); #endif /* _UPNPP_H_X_INCLUDED_ */