Files
bootloader/apps/elftosb/common/ExcludesListMatcher.cpp
László Monda e6c1fce5b4 Add KBOOT.
2016-08-10 01:45:15 +02:00

88 lines
2.2 KiB
C++

/*
* File: ExcludesListMatcher.cpp
*
* Copyright (c) Freescale Semiconductor, Inc. All rights reserved.
* See included license file for license details.
*/
#include "ExcludesListMatcher.h"
using namespace elftosb;
ExcludesListMatcher::ExcludesListMatcher()
: GlobMatcher("")
{
}
ExcludesListMatcher::~ExcludesListMatcher()
{
}
//! \param isInclude True if this pattern is an include, false if it is an exclude.
//! \param pattern String containing the glob pattern.
void ExcludesListMatcher::addPattern(bool isInclude, const std::string &pattern)
{
glob_list_item_t item;
item.m_isInclude = isInclude;
item.m_glob = pattern;
// add to end of list
m_patterns.push_back(item);
}
//! If there are no entries in the match list, the match fails.
//!
//! \param testValue The string to match against the pattern list.
//! \retval true The \a testValue argument matches.
//! \retval false No match was made against the argument.
bool ExcludesListMatcher::match(const std::string &testValue)
{
if (!m_patterns.size())
{
return false;
}
// Iterate over the match list. Includes act as an OR operator, while
// excludes act as an AND operator.
bool didMatch = false;
bool isFirstItem = true;
glob_list_t::iterator it = m_patterns.begin();
for (; it != m_patterns.end(); ++it)
{
glob_list_item_t &item = *it;
// if this pattern is an include and it doesn't match, or
// if this pattern is an exclude and it does match, then the match fails
bool didItemMatch = globMatch(testValue.c_str(), item.m_glob.c_str());
if (item.m_isInclude)
{
// Include
if (isFirstItem)
{
didMatch = didItemMatch;
}
else
{
didMatch = didMatch || didItemMatch;
}
}
else
{
// Exclude
if (isFirstItem)
{
didMatch = !didItemMatch;
}
else
{
didMatch = didMatch && !didItemMatch;
}
}
isFirstItem = false;
}
return didMatch;
}