+ std::string::const_iterator cp, mp;
+
+ //unsigned char *cp = NULL, *mp = NULL;
+ //unsigned char* string = (unsigned char*)str;
+ //unsigned char* wild = (unsigned char*)mask;
+
+ std::string::const_iterator wild = mask.begin();
+ std::string::const_iterator string = str.begin();
+
+ if (mask.empty())
+ return false;
+
+ while ((string != str.end()) && (wild != mask.end()) && (*wild != '*'))
+ {
+ if ((*wild != *string) && (*wild != '?'))
+ return 0;
+
+ wild++;
+ string++;
+ }
+
+ while (string != str.end())
+ {
+ if (*wild == '*')
+ {
+ if (++wild == mask.end())
+ return 1;
+
+ mp = wild;
+ cp = string;
+ cp++;
+ }
+ else
+ if ((*wild == *string) || (*wild == '?'))
+ {
+ wild++;
+ string++;
+ }
+ else
+ {
+ wild = mp;
+ string = cp++;
+ }
+
+ }
+
+ while ((wild != mask.end()) && (*wild == '*'))
+ wild++;
+
+ return wild == mask.end();