diff options
author | Andreas Schneider <asn@cryptomilk.org> | 2018-06-08 16:48:39 +0200 |
---|---|---|
committer | Andreas Schneider <asn@cryptomilk.org> | 2018-06-11 15:04:40 +0200 |
commit | 6221da1907a183c8564a2e93641bbb169006d324 (patch) | |
tree | 583eef0aeb929e607ac2cad6b92987ad4161e6f5 /src/cmocka.c | |
parent | d30e4bf5964978d39cdafb7b4e1f3ce612a1f9ab (diff) | |
download | cmocka-6221da1907a183c8564a2e93641bbb169006d324.tar.gz cmocka-6221da1907a183c8564a2e93641bbb169006d324.tar.xz cmocka-6221da1907a183c8564a2e93641bbb169006d324.zip |
cmocka: Add c_strmatch() function
Diffstat (limited to 'src/cmocka.c')
-rw-r--r-- | src/cmocka.c | 58 |
1 files changed, 58 insertions, 0 deletions
diff --git a/src/cmocka.c b/src/cmocka.c index 0479251..5058695 100644 --- a/src/cmocka.c +++ b/src/cmocka.c @@ -464,6 +464,64 @@ static int c_strreplace(char *src, return 0; } +static int c_strmatch(const char *str, const char *pattern) +{ + int ok; + + if (str == NULL || pattern == NULL) { + return 0; + } + + for (;;) { + /* Check if pattern is done */ + if (*pattern == '\0') { + /* If string is at the end, we're good */ + if (*str == '\0') { + return 1; + } + + return 0; + } + + if (*pattern == '*') { + /* Move on */ + pattern++; + + /* If we are at the end, everything is fine */ + if (*pattern == '\0') { + return 1; + } + + /* Try to match each position */ + for (; *str != '\0'; str++) { + ok = c_strmatch(str, pattern); + if (ok) { + return 1; + } + } + + /* No match */ + return 0; + } + + /* If we are at the end, leave */ + if (*str == '\0') { + return 0; + } + + /* Check if we have a single wildcard or matching char */ + if (*pattern != '?' && *str != *pattern) { + return 0; + } + + /* Move string and pattern */ + str++; + pattern++; + } + + return 0; +} + /* Create function results and expected parameter lists. */ void initialize_testing(const char *test_name) { (void)test_name; |