18cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd/** 28cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd * @file glob_filter.cpp 38cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd * Filter strings based on globbed exclude/include list 48cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd * 58cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd * @remark Copyright 2002 OProfile authors 68cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd * @remark Read the file COPYING 78cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd * 88cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd * @author Philippe Elie 98cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd * @author John Levon 108cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd */ 118cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd 128cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd#include <fnmatch.h> 138cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd 148cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd#include <algorithm> 158cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd 168cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd#include "glob_filter.h" 178cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd#include "string_manip.h" 188cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd 198cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Doddusing namespace std; 208cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd 218cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Doddbool glob_filter::fnmatcher::operator()(string const & s) 228cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd{ 238cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd return fnmatch(s.c_str(), str_.c_str(), 0) != FNM_NOMATCH; 248cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd} 258cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd 268cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd 278cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Doddbool glob_filter::match(string const & str) const 288cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd{ 298cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd vector<string>::const_iterator cit; 308cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd cit = find_if(exclude.begin(), exclude.end(), fnmatcher(str)); 318cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd if (cit != exclude.end()) 328cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd return false; 338cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd 348cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd cit = find_if(include.begin(), include.end(), fnmatcher(str)); 358cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd if (include.empty() || cit != include.end()) 368cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd return true; 378cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd 388cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd return false; 398cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd} 40