X-Git-Url: http://ftp.carnet.hr/carnet-debian/scm?p=ossec-hids.git;a=blobdiff_plain;f=src%2Fos_regex%2Fos_regex_match.c;fp=src%2Fos_regex%2Fos_regex_match.c;h=5097b31df8d3349809d2f836df58d6cf77fd1418;hp=a62bd7508a600ba4e98f1ed7c1acd76e7341ea04;hb=3f728675941dc69d4e544d3a880a56240a6e394a;hpb=927951d1c1ad45ba9e7325f07d996154a91c911b diff --git a/src/os_regex/os_regex_match.c b/src/os_regex/os_regex_match.c old mode 100755 new mode 100644 index a62bd75..5097b31 --- a/src/os_regex/os_regex_match.c +++ b/src/os_regex/os_regex_match.c @@ -1,5 +1,3 @@ -/* $OSSEC, os_regex_match.c, v0.3, 2005/06/09, Daniel B. Cid$ */ - /* Copyright (C) 2009 Trend Micro Inc. * All right reserved. * @@ -9,7 +7,6 @@ * Foundation */ - #include #include #include @@ -19,42 +16,35 @@ #include "os_regex_internal.h" /* Algorithm: - * Go as faster as you can :) + * Go as fast as you can :) * * Supports: * '|' to separate multiple OR patterns - * '^' to match the begining of a string + * '^' to match the beginning of a string */ +/* Prototypes */ +static int _InternalMatch(const char *pattern, const char *str, size_t count) __attribute__((nonnull)); -/** Prototypes **/ -static int _InternalMatch(const char *pattern, const char *str,size_t count) __attribute__((nonnull)); - -/* OS_WordMatch v0.3: - * Searches for pattern in the string - */ +/* Search for pattern in the string */ int OS_WordMatch(const char *pattern, const char *str) { size_t count = 0; - if(*pattern == '\0') - return(FALSE); + if (*pattern == '\0') { + return (FALSE); + } - do - { - if(pattern[count] == '|') - { + do { + if (pattern[count] == '|') { /* If we match '|' , search with * we have so far. */ - if(_InternalMatch(pattern, str, count)) - { - return(TRUE); - } - else - { - pattern += count+1; + if (_InternalMatch(pattern, str, count)) { + return (TRUE); + } else { + pattern += count + 1; count = 0; continue; } @@ -62,76 +52,70 @@ int OS_WordMatch(const char *pattern, const char *str) count++; - }while(pattern[count] != '\0'); + } while (pattern[count] != '\0'); /* Last check until end of string */ - return(_InternalMatch(pattern, str,count)); + return (_InternalMatch(pattern, str, count)); } -/* Internal match function */ static int _InternalMatch(const char *pattern, const char *str, size_t pattern_size) { const uchar *pt = (const uchar *)pattern; const uchar *st = (const uchar *)str; - const uchar last_char = (const uchar) pattern[pattern_size]; - - /* Return true for some odd expressions */ - if(*pattern == '\0') - return(TRUE); - + if (*pattern == '\0') { + return (TRUE); + } /* If '^' specified, just do a strncasecmp */ - else if(*pattern == '^') - { + else if (*pattern == '^') { pattern++; pattern_size --; - /* Compare two string */ - if(strncasecmp(pattern,str,pattern_size) == 0) - return(TRUE); - return(FALSE); + /* Compare two strings */ + if (strncasecmp(pattern, str, pattern_size) == 0) { + return (TRUE); + } + return (FALSE); } - /* Null line */ - else if(*st == '\0') - return(FALSE); - + else if (*st == '\0') { + return (FALSE); + } /* Look to match the first pattern */ - do - { + do { /* Match */ - if(charmap[*st] == charmap[*pt]) - { + if (charmap[*st] == charmap[*pt]) { str = (const char *)st++; pt++; - while(*pt != last_char) - { - if(*st == '\0') - return(FALSE); + while (*pt != last_char) { + if (*st == '\0') { + return (FALSE); + } - else if(charmap[*pt] != charmap[*st]) + else if (charmap[*pt] != charmap[*st]) { goto error; + } - st++;pt++; + st++; + pt++; } /* Return here if pt == last_char */ - return(TRUE); - - error: - st = (const uchar *)str; - pt = (const uchar *)pattern; + return (TRUE); +error: + st = (const uchar *)str; + pt = (const uchar *)pattern; } st++; - }while(*st != '\0'); + } while (*st != '\0'); - return(FALSE); + return (FALSE); } -/* EOF */ +