+ 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 != mask.end() && *wild == '*')
+ {
+ if (++wild == mask.end())
+ return 1;
+
+ mp = wild;
+ cp = string;
+
+ if (cp != str.end())
+ cp++;
+ }
+ else
+ if ((string != str.end() && wild != mask.end()) && ((*wild == *string) || (*wild == '?')))
+ {
+ wild++;
+ string++;
+ }
+ else
+ {
+ wild = mp;
+ if (cp == str.end())
+ cp = str.end();
+ else
+ string = cp++;
+ }
+
+ }
+
+ while ((wild != mask.end()) && (*wild == '*'))
+ wild++;
+
+ return wild == mask.end();