X-Git-Url: http://ftp.carnet.hr/carnet-debian/scm?a=blobdiff_plain;f=src%2Fos_regex%2Fos_regex_match.c;h=a62bd7508a600ba4e98f1ed7c1acd76e7341ea04;hb=927951d1c1ad45ba9e7325f07d996154a91c911b;hp=8094133f7591db0edb96e574400cd842e2111f8d;hpb=914feba5d54f979cd5d7e69c349c3d01f630042a;p=ossec-hids.git diff --git a/src/os_regex/os_regex_match.c b/src/os_regex/os_regex_match.c index 8094133..a62bd75 100755 --- a/src/os_regex/os_regex_match.c +++ b/src/os_regex/os_regex_match.c @@ -5,7 +5,7 @@ * * This program is a free software; you can redistribute it * and/or modify it under the terms of the GNU General Public - * License (version 3) as published by the FSF - Free Software + * License (version 2) as published by the FSF - Free Software * Foundation */ @@ -14,11 +14,13 @@ #include #include #include + +#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 @@ -26,15 +28,15 @@ /** 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); @@ -57,9 +59,9 @@ int OS_WordMatch(char *pattern, char *str) continue; } } - + count++; - + }while(pattern[count] != '\0'); /* Last check until end of string */ @@ -67,25 +69,25 @@ int OS_WordMatch(char *pattern, char *str) } /* 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); @@ -96,37 +98,37 @@ int _InternalMatch(char *pattern, char *str, int pattern_size) /* 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');