GQuark dbusErrorQuark(void);
- std::vector<std::string> tokenizeString(std::string& in, const char* delim);
+ std::vector<std::string> tokenizeString(const std::string& in, const char* delim);
} }
* limitations under the License.
*/
+#include <cstring>
#include <SharedUtil.h>
#define ERROR_PREFIX CTX_DBUS_IFACE "Error."
return (GQuark)quarkVolatile;
}
-EXPORT_API std::vector<std::string> util::tokenizeString(std::string& in, const char* delim)
+EXPORT_API std::vector<std::string> util::tokenizeString(const std::string& in, const char* delim)
{
std::vector<std::string> tokens;
- std::size_t begin = 0;
- std::size_t end = in.find(delim, 0);
+ char* inputStr = g_strdup(in.c_str());
- while (end != std::string::npos) {
- tokens.push_back(in.substr(begin, end - begin));
- begin = end + 1;
- end = in.find(delim, begin);
+ IF_FAIL_RETURN_TAG(inputStr, tokens, _E, "Memory allocation failed");
+
+ char* savePtr = NULL;
+ char* token = strtok_r(inputStr, delim, &savePtr);
+
+ while (token != NULL) {
+ tokens.push_back(token);
+ token = strtok_r(NULL, delim, &savePtr);
}
+ g_free(inputStr);
return tokens;
}