fixed bugs in log parser
authorVictor Kirhenshtein <victor@netxms.org>
Tue, 20 Jun 2017 18:58:03 +0000 (21:58 +0300)
committerVictor Kirhenshtein <victor@netxms.org>
Tue, 20 Jun 2017 18:58:03 +0000 (21:58 +0300)
include/nms_util.h
include/nxlpapi.h
src/libnetxms/strmap.cpp
src/libnxlp/parser.cpp

index f290958..037c0d0 100644 (file)
@@ -884,7 +884,7 @@ public:
        void setPreallocated(TCHAR *key, TCHAR *value) { setObject(key, value, true); }
        void set(const TCHAR *key, UINT32 value);
 
-   void addAll(StringMap *src);
+   void addAll(const StringMap *src);
 
        const TCHAR *get(const TCHAR *key) const { return (const TCHAR *)getObject(key); }
    INT32 getInt32(const TCHAR *key, INT32 defaultValue) const;
index 0271b39..2b20759 100644 (file)
@@ -249,7 +249,7 @@ private:
 
 public:
        LogParser();
-       LogParser(LogParser *src);
+       LogParser(const LogParser *src);
        ~LogParser();
 
        static ObjectArray<LogParser> *createFromXml(const char *xml, int xmlLen = -1,
index ba5fbcb..60994f9 100644 (file)
@@ -70,7 +70,7 @@ StringMap& StringMap::operator =(const StringMap &src)
 /**
  * Add all values from another string map
  */
-void StringMap::addAll(StringMap *src)
+void StringMap::addAll(const StringMap *src)
 {
    StringMapEntry *entry, *tmp;
    HASH_ITER(hh, src->m_data, entry, tmp)
index 0cda510..f532858 100644 (file)
@@ -129,13 +129,17 @@ LogParser::LogParser()
 /**
  * Parser copy constructor
  */
-LogParser::LogParser(LogParser *src)
+LogParser::LogParser(const LogParser *src)
 {
    int count = src->m_rules->size();
    m_rules = new ObjectArray<LogParserRule>(count, 16, true);
        for(int i = 0; i < count; i++)
                m_rules->add(new LogParserRule(src->m_rules->get(i), this));
 
+       m_macros.addAll(&src->m_macros);
+       m_contexts.addAll(&src->m_contexts);
+       m_exclusionSchedules.addAll(&src->m_exclusionSchedules);
+
        m_cb = src->m_cb;
        m_userArg = src->m_userArg;
        m_name = _tcsdup_ex(src->m_name);
@@ -597,7 +601,7 @@ static void EndElement(void *userData, const char *name)
        else if (!strcmp(name, "file"))
        {
                ps->files.add(ps->file);
-               ps->file = _T("");
+               ps->file.clear();
                ps->state = XML_STATE_PARSER;
        }
        else if (!strcmp(name, "macros"))
@@ -607,6 +611,8 @@ static void EndElement(void *userData, const char *name)
        else if (!strcmp(name, "macro"))
        {
                ps->parser->addMacro(ps->macroName, ps->macro);
+               ps->macroName.clear();
+               ps->macro.clear();
                ps->state = XML_STATE_MACROS;
        }
        else if (!strcmp(name, "rules"))
@@ -711,6 +717,7 @@ static void EndElement(void *userData, const char *name)
    else if (!strcmp(name, "schedule"))
    {
       ps->parser->addExclusionSchedule(ps->schedule);
+      ps->schedule.clear();
       ps->state = XML_STATE_EXCLUSION_SCHEDULES;
    }
 }
@@ -893,7 +900,6 @@ bool LogParser::isExclusionPeriod()
    if (m_exclusionSchedules.isEmpty())
       return false;
 
-   localtime(NULL);
    time_t now = time(NULL);
    struct tm localTime;
 #if HAVE_LOCALTIME_R