- char* catpath=strdup(catalog_path.c_str());
- char* sep=nullptr;
- char* start=catpath;
- while (start && *start) {
- sep=strchr(start,PATH_SEPARATOR_CHAR);
- if (sep)
- *sep=0;
- auto_ptr_XMLCh temp(start);
- m_validatingPool->loadCatalog(temp.get());
- start = sep ? sep + 1 : nullptr;
- }
- free(catpath);
+ vector<string> catpaths;
+ split(catpaths, catalog_path, is_any_of(PATH_SEPARATOR_STR), algorithm::token_compress_on);
+ for_each(
+ catpaths.begin(), catpaths.end(),
+ // Call loadCatalog with an inner call to s->c_str() on each entry.
+ lambda::bind(static_cast<bool (ParserPool::*)(const char*)>(&ParserPool::loadCatalog), m_validatingPool, lambda::bind(&string::c_str,_1))
+ );