1 /** 2 * @file glob_filter.cpp 3 * Filter strings based on globbed exclude/include list 4 * 5 * @remark Copyright 2002 OProfile authors 6 * @remark Read the file COPYING 7 * 8 * @author Philippe Elie 9 * @author John Levon 10 */ 11 12 #include <fnmatch.h> 13 14 #include <algorithm> 15 16 #include "glob_filter.h" 17 #include "string_manip.h" 18 19 using namespace std; 20 operator ()(string const & s)21bool glob_filter::fnmatcher::operator()(string const & s) 22 { 23 return fnmatch(s.c_str(), str_.c_str(), 0) != FNM_NOMATCH; 24 } 25 26 match(string const & str) const27bool glob_filter::match(string const & str) const 28 { 29 vector<string>::const_iterator cit; 30 cit = find_if(exclude.begin(), exclude.end(), fnmatcher(str)); 31 if (cit != exclude.end()) 32 return false; 33 34 cit = find_if(include.begin(), include.end(), fnmatcher(str)); 35 if (include.empty() || cit != include.end()) 36 return true; 37 38 return false; 39 } 40