#include <stdlib.h>
#include <string.h>
#include <ctype.h>
+
+#include "os_regex.h"
#include "os_regex_internal.h"
/* Algorithm:
* Go as faster as you can :)
- *
+ *
* Supports:
* '|' to separate multiple OR patterns
* '^' to match the begining of a string
/** Prototypes **/
-int _InternalMatch(char *pattern, char *str,int count);
+static int _InternalMatch(const char *pattern, const char *str,size_t count) __attribute__((nonnull));
-/* OS_WordMatch v0.3:
- * Searches for pattern in the string
+/* OS_WordMatch v0.3:
+ * Searches for pattern in the string
*/
-int OS_WordMatch(char *pattern, char *str)
+int OS_WordMatch(const char *pattern, const char *str)
{
- int count = 0;
+ size_t count = 0;
if(*pattern == '\0')
return(FALSE);
continue;
}
}
-
+
count++;
-
+
}while(pattern[count] != '\0');
/* Last check until end of string */
}
/* Internal match function */
-int _InternalMatch(char *pattern, char *str, int pattern_size)
+static int _InternalMatch(const char *pattern, const char *str, size_t pattern_size)
{
- uchar *pt = (uchar *)pattern;
- uchar *st = (uchar *)str;
+ const uchar *pt = (const uchar *)pattern;
+ const uchar *st = (const uchar *)str;
- uchar last_char = pattern[pattern_size];
-
+ const uchar last_char = (const uchar) pattern[pattern_size];
- /* Return true for some odd expressions */
+
+ /* Return true for some odd expressions */
if(*pattern == '\0')
return(TRUE);
-
+
/* If '^' specified, just do a strncasecmp */
else if(*pattern == '^')
{
pattern++;
pattern_size --;
-
+
/* Compare two string */
if(strncasecmp(pattern,str,pattern_size) == 0)
return(TRUE);
/* Null line */
else if(*st == '\0')
return(FALSE);
-
-
+
+
/* Look to match the first pattern */
do
{
/* Match */
if(charmap[*st] == charmap[*pt])
{
- str = (char *)st++;
+ str = (const char *)st++;
pt++;
-
+
while(*pt != last_char)
{
if(*st == '\0')
return(FALSE);
-
+
else if(charmap[*pt] != charmap[*st])
goto error;
-
- st++;pt++;
+
+ st++;pt++;
}
/* Return here if pt == last_char */
return(TRUE);
-
+
error:
- st = (uchar *)str;
- pt = (uchar *)pattern;
-
+ st = (const uchar *)str;
+ pt = (const uchar *)pattern;
+
}
-
+
st++;
}while(*st != '\0');