]> mj.ucw.cz Git - libucw.git/commitdiff
match_pattern_nocase
authorMartin Mares <mj@ucw.cz>
Fri, 2 May 1997 17:20:39 +0000 (17:20 +0000)
committerMartin Mares <mj@ucw.cz>
Fri, 2 May 1997 17:20:39 +0000 (17:20 +0000)
lib/lib.h
lib/patimatch.c [new file with mode: 0644]

index 929fa9bf1fde08bb9bcac2292ff7550c5de36eaf..5ece34a6b2291141054e8c61de29896a83a836a4 100644 (file)
--- a/lib/lib.h
+++ b/lib/lib.h
@@ -114,9 +114,10 @@ FILE *create_obj_file(byte *, ulg);
 
 int wordsplit(byte *, byte **, uns);
 
-/* patmatch.c */
+/* pat(i)match.c */
 
 int match_pattern(byte *, byte *);
+int match_pattern_nocase(byte *, byte *);
 
 /* md5hex.c */
 
diff --git a/lib/patimatch.c b/lib/patimatch.c
new file mode 100644 (file)
index 0000000..5458d32
--- /dev/null
@@ -0,0 +1,38 @@
+/*
+ *     Sherlock Library -- Shell-Like Case-Insensitive Pattern Matching (currently only '?' and '*')
+ *
+ *     (c) 1997 Martin Mares, <mj@atrey.karlin.mff.cuni.cz>
+ */
+
+#include <stdio.h>
+#include <string.h>
+
+#include "lib.h"
+#include "string.h"
+
+int
+match_pattern_nocase(byte *p, byte *s)
+{
+  while (*p)
+    {
+      if (*p == '?' && *s)
+       p++, s++;
+      else if (*p == '*')
+       {
+         int z = p[1];
+
+         if (!z)
+           return 1;
+         while (s = strchr(s, z))
+           {
+             if (match_pattern_nocase(p+1, s))
+               return 1;
+             s++;
+           }
+         return 0;
+       }
+      else if (Cupcase(*p++) != Cupcase(*s++))
+       return 0;
+    }
+  return !*s;
+}