diff --git a/common/utils/Regex.cpp b/common/utils/Regex.cpp index d064158292088972001f5acba442fef435295b5b..60a91ce24e797c9e28c5b71f79978db0d3a4a7b3 100644 --- a/common/utils/Regex.cpp +++ b/common/utils/Regex.cpp @@ -27,10 +27,10 @@ namespace cta { namespace utils { -Regex::Regex(const char * re_str) : m_set(false) { - if (int rc = ::regcomp(&m_re, re_str, REG_EXTENDED)) { +Regex::Regex(const std::string & re_str) : m_reStr(re_str), m_set(false) { + if (int rc = ::regcomp(&m_re, m_reStr.c_str(), REG_EXTENDED)) { std::string error("Could not compile regular expression: \""); - error += re_str; + error += m_reStr; error += "\""; char re_err[1024]; if (::regerror(rc, &m_re, re_err, sizeof (re_err))) { @@ -42,6 +42,10 @@ Regex::Regex(const char * re_str) : m_set(false) { m_set = true; } +Regex::Regex(const Regex& o) { + Regex(o.m_reStr); +} + Regex::~Regex() { if (m_set) ::regfree(&m_re); diff --git a/common/utils/Regex.hpp b/common/utils/Regex.hpp index 6a8cab971738017ed5d7740adef079b5f9f01d30..5b5bf259d72a88d159f9c253345a7a8fdff418aa 100644 --- a/common/utils/Regex.hpp +++ b/common/utils/Regex.hpp @@ -29,7 +29,8 @@ namespace cta { namespace utils { class Regex { public: - Regex(const char * re_str); + Regex(const std::string & re_str); + Regex(const Regex & o); virtual ~Regex(); /*! @@ -45,6 +46,8 @@ class Regex { } private: + // We keep around the string from which the RE was compiled to allow copying. + std::string m_reStr; regex_t m_re; bool m_set; };