diff options
Diffstat (limited to 'lib/parser.c')
| -rw-r--r-- | lib/parser.c | 62 | 
1 files changed, 56 insertions, 6 deletions
diff --git a/lib/parser.c b/lib/parser.c index 807b2aaa33f..b6d11631231 100644 --- a/lib/parser.c +++ b/lib/parser.c @@ -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);  | 
