sdbr_match.c (803B)
1 #include "std.h" 2 3 char 4 sdbr_match(char *k, char *v) 5 { 6 size_t l, n; 7 8 if (!k) 9 sysfatal("sdbr_match: nil key"); 10 if (!v) 11 sysfatal("sdbr_match: nil value"); 12 if (k[0] == '*' && k[1] == '\0') 13 return *v ? 1 : 0; 14 if (*k == '>') { 15 if (*++k == '=') 16 return strcmp(v, k + 1) >= 0 ? 1 : 0; 17 return strcmp(v, k) > 0 ? 1 : 0; 18 } else if (*k == '<') { 19 if (*++k == '=') 20 return strcmp(v, k + 1) <= 0 ? 1 : 0; 21 return strcmp(v, k) < 0 ? 1 : 0; 22 } 23 for (;*k;) { 24 if (*k == '*') { 25 if (!*++k) 26 return 1; 27 if (k[strcspn(k, "*\\")]) { 28 v = strchr(v, *k); 29 return v == NULL ? 0 : sdbr_match(k, v); 30 } 31 l = strlen(k); 32 n = strlen(v); 33 if (l > n) 34 return 0; 35 v += n - l; 36 } 37 if (*k == '\\' && *(k + 1) == '*') 38 ++k; 39 if (*k++ != *v++) 40 return 0; 41 } 42 return !*v ? 1 : 0; 43 }