#endif
#include <stdexcept>
+#include <boost/ptr_container/ptr_vector.hpp>
+
#if defined(XMLTOOLING_LOG4SHIB)
# include <log4shib/PropertyConfigurator.hh>
# include <log4shib/OstreamAppender.hh>
using namespace xmltooling::logging;
using namespace xmltooling;
using namespace xercesc;
+using namespace boost;
using namespace std;
#ifdef WIN32
namespace {
static XMLToolingInternalConfig g_config;
#ifndef XMLTOOLING_NO_XMLSEC
- static vector<Mutex*> g_openssl_locks;
+ static ptr_vector<Mutex> g_openssl_locks;
extern "C" void openssl_locking_callback(int mode,int n,const char *file,int line)
{
if (mode & CRYPTO_LOCK)
- g_openssl_locks[n]->lock();
+ g_openssl_locks[n].lock();
else
- g_openssl_locks[n]->unlock();
+ g_openssl_locks[n].unlock();
}
# ifndef WIN32
XMLToolingInternalConfig::~XMLToolingInternalConfig()
{
- delete m_lock;
}
bool XMLToolingInternalConfig::log_config(const char* config)
#endif
}
catch (const ConfigureFailure& e) {
- string msg = string("failed to configure logging: ") + e.what();
+ string msg = string("error in file permissions or logging configuration: ") + e.what();
Category::getInstance(XMLTOOLING_LOGCAT".Logging").crit(msg);
#ifdef WIN32
LogEvent(nullptr, EVENTLOG_ERROR_TYPE, 2100, nullptr, msg.c_str());
m_parserPool=new ParserPool();
m_validatingPool=new ParserPool(true,true);
- // Load catalogs from path.
- if (!catalog_path.empty()) {
- 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);
- }
+ // Load catalogs from deprecated path setting.
+ if (!catalog_path.empty())
+ m_validatingPool->loadCatalogs(catalog_path.c_str());
// default registrations
XMLObjectBuilder::registerDefaultBuilder(new UnknownElementBuilder());
#ifndef XMLTOOLING_NO_XMLSEC
CRYPTO_set_locking_callback(nullptr);
- for_each(g_openssl_locks.begin(), g_openssl_locks.end(), xmltooling::cleanup<Mutex>());
g_openssl_locks.clear();
#endif
throw runtime_error(string("detected error in xmltooling_extension_init: ") + resolved);
SetErrorMode(em);
}
- catch(exception&) {
+ catch(std::exception&) {
if (handle)
FreeLibrary(handle);
SetErrorMode(em);
if (fn(context)!=0)
throw runtime_error(string("detected error in xmltooling_extension_init in ") + resolved);
}
- catch(exception&) {
+ catch(std::exception&) {
if (handle)
dlclose(handle);
throw;