aboutsummaryrefslogtreecommitdiff
path: root/src/cmocka.c
diff options
context:
space:
mode:
authorAndreas Schneider <asn@cryptomilk.org>2018-06-08 16:48:39 +0200
committerAndreas Schneider <asn@cryptomilk.org>2018-06-11 15:04:40 +0200
commit6221da1907a183c8564a2e93641bbb169006d324 (patch)
tree583eef0aeb929e607ac2cad6b92987ad4161e6f5 /src/cmocka.c
parentd30e4bf5964978d39cdafb7b4e1f3ce612a1f9ab (diff)
downloadcmocka-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.c58
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;