bool LogFilterExactMatch::DoesMatch(const LogMessage &message) const { switch (m_filter_target) { case eFilterTargetActivity: // Empty fields never match a condition. if (!message.HasActivity()) return false; return m_match_text == message.GetActivity(); case eFilterTargetActivityChain: // Empty fields never match a condition. if (!message.HasActivity()) return false; return m_match_text == message.GetActivityChain(); case eFilterTargetCategory: // Empty fields never match a condition. if (!message.HasCategory()) return false; return m_match_text == message.GetCategory(); case eFilterTargetMessage: { const char *message_text = message.GetMessage(); return (message_text != nullptr) && (m_match_text == message_text); } case eFilterTargetSubsystem: // Empty fields never match a condition. if (!message.HasSubsystem()) return false; return m_match_text == message.GetSubsystem(); default: // We don't know this type. return false; } }
bool LogFilterRegex::DoesMatch(const LogMessage &message) const { switch (m_filter_target) { case eFilterTargetActivity: // Empty fields never match a condition. if (!message.HasActivity()) return false; return ::regexec(&m_regex, message.GetActivity(), 0, nullptr, 0) == 0; case eFilterTargetActivityChain: // Empty fields never match a condition. if (!message.HasActivity()) return false; return ::regexec(&m_regex, message.GetActivityChain().c_str(), 0, nullptr, 0) == 0; case eFilterTargetCategory: // Empty fields never match a condition. if (!message.HasCategory()) return false; return ::regexec(&m_regex, message.GetCategory(), 0, nullptr, 0) == 0; case eFilterTargetMessage: { const char *message_text = message.GetMessage(); if (!message_text) { DNBLogThreadedIf(LOG_DARWIN_LOG, "LogFilterRegex: regex " "\"%s\" no match due to nullptr message.", m_regex_text.c_str()); return false; } bool match = ::regexec(&m_regex, message_text, 0, nullptr, 0) == 0; DNBLogThreadedIf(LOG_DARWIN_LOG, "LogFilterRegex: regex " "\"%s\" %s message \"%s\".", m_regex_text.c_str(), match ? "matches" : "does not match", message_text); return match; } case eFilterTargetSubsystem: // Empty fields never match a condition. if (!message.HasSubsystem()) return false; return ::regexec(&m_regex, message.GetSubsystem(), 0, nullptr, 0) == 0; default: // We don't know this type. return false; } }