|
@@ -192,6 +192,56 @@ int match_hex(substring_t *s, int *result)
|
|
return match_number(s, result, 16);
|
|
return match_number(s, result, 16);
|
|
}
|
|
}
|
|
|
|
|
|
|
|
+/**
|
|
|
|
+ * match_wildcard: - parse if a string matches given wildcard pattern
|
|
|
|
+ * @pattern: wildcard pattern
|
|
|
|
+ * @str: the string to be parsed
|
|
|
|
+ *
|
|
|
|
+ * Description: Parse the string @str to check if matches wildcard
|
|
|
|
+ * pattern @pattern. The pattern may contain two type wildcardes:
|
|
|
|
+ * '*' - matches zero or more characters
|
|
|
|
+ * '?' - matches one character
|
|
|
|
+ * If it's matched, return true, else return false.
|
|
|
|
+ */
|
|
|
|
+bool match_wildcard(const char *pattern, const char *str)
|
|
|
|
+{
|
|
|
|
+ const char *s = str;
|
|
|
|
+ const char *p = pattern;
|
|
|
|
+ bool star = false;
|
|
|
|
+
|
|
|
|
+ while (*s) {
|
|
|
|
+ switch (*p) {
|
|
|
|
+ case '?':
|
|
|
|
+ s++;
|
|
|
|
+ p++;
|
|
|
|
+ break;
|
|
|
|
+ case '*':
|
|
|
|
+ star = true;
|
|
|
|
+ str = s;
|
|
|
|
+ if (!*++p)
|
|
|
|
+ return true;
|
|
|
|
+ pattern = p;
|
|
|
|
+ break;
|
|
|
|
+ default:
|
|
|
|
+ if (*s == *p) {
|
|
|
|
+ s++;
|
|
|
|
+ p++;
|
|
|
|
+ } else {
|
|
|
|
+ if (!star)
|
|
|
|
+ return false;
|
|
|
|
+ str++;
|
|
|
|
+ s = str;
|
|
|
|
+ p = pattern;
|
|
|
|
+ }
|
|
|
|
+ break;
|
|
|
|
+ }
|
|
|
|
+ }
|
|
|
|
+
|
|
|
|
+ if (*p == '*')
|
|
|
|
+ ++p;
|
|
|
|
+ return !*p;
|
|
|
|
+}
|
|
|
|
+
|
|
/**
|
|
/**
|
|
* match_strlcpy: - Copy the characters from a substring_t to a sized buffer
|
|
* match_strlcpy: - Copy the characters from a substring_t to a sized buffer
|
|
* @dest: where to copy to
|
|
* @dest: where to copy to
|
|
@@ -235,5 +285,6 @@ EXPORT_SYMBOL(match_token);
|
|
EXPORT_SYMBOL(match_int);
|
|
EXPORT_SYMBOL(match_int);
|
|
EXPORT_SYMBOL(match_octal);
|
|
EXPORT_SYMBOL(match_octal);
|
|
EXPORT_SYMBOL(match_hex);
|
|
EXPORT_SYMBOL(match_hex);
|
|
|
|
+EXPORT_SYMBOL(match_wildcard);
|
|
EXPORT_SYMBOL(match_strlcpy);
|
|
EXPORT_SYMBOL(match_strlcpy);
|
|
EXPORT_SYMBOL(match_strdup);
|
|
EXPORT_SYMBOL(match_strdup);
|