51 lines
1.2 KiB
C++
51 lines
1.2 KiB
C++
#include "pfc.h"
|
|
|
|
static bool test_recur(const char * fn,const char * rm,bool b_sep)
|
|
{
|
|
for(;;)
|
|
{
|
|
if ((b_sep && *rm==';') || *rm==0) return *fn==0;
|
|
else if (*rm=='*')
|
|
{
|
|
rm++;
|
|
do
|
|
{
|
|
if (test_recur(fn,rm,b_sep)) return true;
|
|
} while(pfc::utf8_advance(fn));
|
|
return false;
|
|
}
|
|
else if (*fn==0) return false;
|
|
else if (*rm!='?' && pfc::charLower(pfc::utf8_get_char(fn))!=pfc::charLower(pfc::utf8_get_char(rm))) return false;
|
|
|
|
fn = pfc::utf8_char_next(fn); rm = pfc::utf8_char_next(rm);
|
|
}
|
|
}
|
|
|
|
bool wildcard_helper::test_path(const char * path,const char * pattern,bool b_sep) {return test(path + pfc::scan_filename(path),pattern,b_sep);}
|
|
|
|
bool wildcard_helper::test(const char * fn,const char * pattern,bool b_sep)
|
|
{
|
|
if (!b_sep) return test_recur(fn,pattern,false);
|
|
const char * rm=pattern;
|
|
while(*rm)
|
|
{
|
|
if (test_recur(fn,rm,true)) return true;
|
|
while(*rm && *rm!=';') rm++;
|
|
if (*rm==';')
|
|
{
|
|
while(*rm==';') rm++;
|
|
while(*rm==' ') rm++;
|
|
}
|
|
};
|
|
|
|
return false;
|
|
}
|
|
|
|
bool wildcard_helper::has_wildcards(const char * str) {return strchr(str,'*') || strchr(str,'?');}
|
|
|
|
const char * wildcard_helper::get_wildcard_list() {return "*?";}
|
|
|
|
bool wildcard_helper::is_wildcard(char c) {
|
|
return c == '*' || c == '?';
|
|
}
|