annotate foosdk/sdk/pfc/wildcard.cpp @ 1:20d02a178406 default tip

*: check in everything else yay
author Paper <paper@tflc.us>
date Mon, 05 Jan 2026 02:15:46 -0500
parents
children
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
1
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1 #include "pfc-lite.h"
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2 #include "wildcard.h"
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
3 #include "string_base.h"
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
4
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
5 static bool test_recur(const char * fn,const char * rm,bool b_sep)
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
6 {
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
7 for(;;)
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
8 {
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
9 if ((b_sep && *rm==';') || *rm==0) return *fn==0;
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
10 else if (*rm=='*')
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
11 {
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
12 rm++;
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
13 do
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
14 {
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
15 if (test_recur(fn,rm,b_sep)) return true;
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
16 } while(pfc::utf8_advance(fn));
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
17 return false;
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
18 }
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
19 else if (*fn==0) return false;
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
20 else if (*rm!='?' && pfc::charLower(pfc::utf8_get_char(fn))!=pfc::charLower(pfc::utf8_get_char(rm))) return false;
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
21
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
22 fn = pfc::utf8_char_next(fn); rm = pfc::utf8_char_next(rm);
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
23 }
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
24 }
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
25
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
26 bool wildcard_helper::test_path(const char * path,const char * pattern,bool b_sep) {return test(path + pfc::scan_filename(path),pattern,b_sep);}
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
27
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
28 bool wildcard_helper::test(const char * fn,const char * pattern,bool b_sep)
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
29 {
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
30 if (!b_sep) return test_recur(fn,pattern,false);
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
31 const char * rm=pattern;
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
32 while(*rm)
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
33 {
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
34 if (test_recur(fn,rm,true)) return true;
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
35 while(*rm && *rm!=';') rm++;
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
36 if (*rm==';')
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
37 {
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
38 while(*rm==';') rm++;
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
39 while(*rm==' ') rm++;
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
40 }
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
41 };
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
42
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
43 return false;
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
44 }
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
45
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
46 bool wildcard_helper::has_wildcards(const char * str) {return strchr(str,'*') || strchr(str,'?');}
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
47
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
48 const char * wildcard_helper::get_wildcard_list() {return "*?";}
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
49
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
50 bool wildcard_helper::is_wildcard(char c) {
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
51 return c == '*' || c == '?';
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
52 }