]> granicus.if.org Git - icinga2/commitdiff
Implement String::GetData.
authorGunnar Beutner <gunnar@beutner.name>
Tue, 5 Nov 2013 17:52:13 +0000 (18:52 +0100)
committerGunnar Beutner <gunnar@beutner.name>
Tue, 5 Nov 2013 17:59:39 +0000 (18:59 +0100)
Fixes #5008

components/livestatus/attributefilter.cpp
lib/base/qstring.cpp
lib/base/qstring.h

index 76dcf508e7786b14b6bc5580c8c3e43d96898321..bb325402d10e3cfa03b3fffd1f917591aec7f6e4 100644 (file)
@@ -61,13 +61,10 @@ bool AttributeFilter::Apply(const Table::Ptr& table, const Value& row)
                        else
                                return (static_cast<String>(value) == m_Operand);
                } else if (m_Operator == "~") {
-                       boost::regex expr(static_cast<std::string>(m_Operand));
+                       boost::regex expr(m_Operand.GetData());
+                       String operand = value;
                        boost::smatch what;
-                       String val = static_cast<String>(value);
-                       std::string::const_iterator begin = val.Begin();
-                       std::string::const_iterator end = val.End();
-
-                       bool ret = boost::regex_search(begin, end, what, expr);
+                       bool ret = boost::regex_search(operand.GetData(), what, expr);
 
                        //Log(LogDebug, "livestatus", "Attribute filter '" + m_Operand + " " + m_Operator + " " +
                        //    static_cast<String>(value) + "' " + (ret ? "matches" : "doesn't match") + "." );
@@ -76,13 +73,10 @@ bool AttributeFilter::Apply(const Table::Ptr& table, const Value& row)
                } else if (m_Operator == "=~") {
                        return string_iless()(value, m_Operand);
                } else if (m_Operator == "~~") {
-                       boost::regex expr(static_cast<std::string>(m_Operand), boost::regex::icase);
+                       boost::regex expr(m_Operand.GetData(), boost::regex::icase);
+                       String operand = value;
                        boost::smatch what;
-                       String val = static_cast<String>(value);
-                       std::string::const_iterator begin = val.Begin();
-                       std::string::const_iterator end = val.End();
-
-                       bool ret = boost::regex_search(begin, end, what, expr);
+                       bool ret = boost::regex_search(operand.GetData(), what, expr);
 
                        //Log(LogDebug, "livestatus", "Attribute filter '" + m_Operand + " " + m_Operator + " " +
                        //    static_cast<String>(value) + "' " + (ret ? "matches" : "doesn't match") + "." );
index beb41b6aea10c051661653192f0037ad015e033d..80e08261a95c9c610ef035ce78c433bb236a4967 100644 (file)
@@ -122,6 +122,11 @@ size_t String::GetLength(void) const
        return m_Data.size();
 }
 
+std::string& String::GetData(void)
+{
+       return m_Data;
+}
+
 size_t String::Find(const String& str, size_t pos) const
 {
        return m_Data.find(str, pos);
index 52aa3122cbcf7c5a9aa439e4cfc08c0a68fa765f..e26717fca7fc50f6013e2cbc63da140154645095 100644 (file)
@@ -76,6 +76,8 @@ public:
        void Clear(void);
        size_t GetLength(void) const;
 
+       std::string& GetData(void);
+
        size_t Find(const String& str, size_t pos = 0) const;
        size_t FindFirstOf(const char *s, size_t pos = 0) const;
        size_t FindFirstOf(char ch, size_t pos = 0) const;