]> git.kernelconcepts.de Git - karo-tx-linux.git/blobdiff - lib/parser.c
sun4M: add include of slab.h for kzalloc
[karo-tx-linux.git] / lib / parser.c
index 807b2aaa33fa42488c88e1adff522fa17b4368f3..b6d11631231b67e330b03eae74ecdf8373073866 100644 (file)
@@ -113,6 +113,7 @@ int match_token(char *s, const match_table_t table, substring_t args[])
 
        return p->token;
 }
+EXPORT_SYMBOL(match_token);
 
 /**
  * match_number: scan a number in the given base from a substring_t
@@ -163,6 +164,7 @@ int match_int(substring_t *s, int *result)
 {
        return match_number(s, result, 0);
 }
+EXPORT_SYMBOL(match_int);
 
 /**
  * match_octal: - scan an octal representation of an integer from a substring_t
@@ -177,6 +179,7 @@ int match_octal(substring_t *s, int *result)
 {
        return match_number(s, result, 8);
 }
+EXPORT_SYMBOL(match_octal);
 
 /**
  * match_hex: - scan a hex representation of an integer from a substring_t
@@ -191,6 +194,58 @@ int match_hex(substring_t *s, int *result)
 {
        return match_number(s, result, 16);
 }
+EXPORT_SYMBOL(match_hex);
+
+/**
+ * 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;
+}
+EXPORT_SYMBOL(match_wildcard);
 
 /**
  * match_strlcpy: - Copy the characters from a substring_t to a sized buffer
@@ -213,6 +268,7 @@ size_t match_strlcpy(char *dest, const substring_t *src, size_t size)
        }
        return ret;
 }
+EXPORT_SYMBOL(match_strlcpy);
 
 /**
  * match_strdup: - allocate a new string with the contents of a substring_t
@@ -230,10 +286,4 @@ char *match_strdup(const substring_t *s)
                match_strlcpy(p, s, sz);
        return p;
 }
-
-EXPORT_SYMBOL(match_token);
-EXPORT_SYMBOL(match_int);
-EXPORT_SYMBOL(match_octal);
-EXPORT_SYMBOL(match_hex);
-EXPORT_SYMBOL(match_strlcpy);
 EXPORT_SYMBOL(match_strdup);