commit ab1fcebeff1593bf50bd091706a9b2f447db88cf from: Alexander Barton date: Sun Aug 26 11:11:45 2012 UTC New function MatchCaseInsensitiveList() to check list of patterns commit - a6dd2e33c2c9e60bbd286bb07a7a6273566dec7d commit + ab1fcebeff1593bf50bd091706a9b2f447db88cf blob - 79699ea0d8740b7cf555af732d3c22ec1dfc9861 blob + 75bf4358395d27fa21b8a9c213c307a82a2196d6 --- src/ngircd/match.c +++ src/ngircd/match.c @@ -1,6 +1,6 @@ /* * ngIRCd -- The Next Generation IRC Daemon - * Copyright (c)2001,2002 by Alexander Barton (alex@barton.de) + * Copyright (c)2001-2012 Alexander Barton (alex@barton.de) and Contributors. * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by @@ -48,9 +48,9 @@ static int Matche_After_Star PARAMS(( const char *p, c /** * Match string with pattern. * - * @param Pattern Pattern to match with - * @param String Input string - * @return true if pattern matches + * @param Pattern Pattern to match with + * @param String Input string + * @return true if pattern matches */ GLOBAL bool Match( const char *Pattern, const char *String ) @@ -64,20 +64,49 @@ Match( const char *Pattern, const char *String ) /** * Match string with pattern case-insensitive. * - * @param pattern Pattern to match with - * @param searchme Input string, at most COMMAND_LEN-1 characters long - * @return true if pattern matches + * @param Pattern Pattern to match with + * @param String Input string, at most COMMAND_LEN-1 characters long + * @return true if pattern matches */ GLOBAL bool -MatchCaseInsensitive(const char *pattern, const char *searchme) +MatchCaseInsensitive(const char *Pattern, const char *String) { char haystack[COMMAND_LEN]; - strlcpy(haystack, searchme, sizeof(haystack)); - return Match(pattern, ngt_LowerStr(haystack)); + strlcpy(haystack, String, sizeof(haystack)); + return Match(Pattern, ngt_LowerStr(haystack)); } /* MatchCaseInsensitive */ +/** + * Match string with pattern case-insensitive. + * + * @param pattern Pattern to match with + * @param String Input string, at most COMMAND_LEN-1 characters long + * @param Separator Character separating the individual patterns in the list + * @return true if pattern matches + */ +GLOBAL bool +MatchCaseInsensitiveList(const char *Pattern, const char *String, + const char *Separator) +{ + char tmp_pattern[COMMAND_LEN], haystack[COMMAND_LEN], *ptr; + + strlcpy(tmp_pattern, Pattern, sizeof(tmp_pattern)); + strlcpy(haystack, String, sizeof(haystack)); + ngt_LowerStr(haystack); + + ptr = strtok(tmp_pattern, Separator); + while (ptr) { + ngt_TrimStr(ptr); + if (Match(ptr, haystack)) + return true; + ptr = strtok(NULL, Separator); + } + return false; +} /* MatchCaseInsensitive */ + + static int Matche( const char *p, const char *t ) { blob - 2efe3f5ba7ad81b08d0d237487b7112b77e22ebc blob + d4107fb65d357fcdab95677685fa6340378b53d5 --- src/ngircd/match.h +++ src/ngircd/match.h @@ -1,6 +1,6 @@ /* * ngIRCd -- The Next Generation IRC Daemon - * Copyright (c)2001,2002 by Alexander Barton (alex@barton.de) + * Copyright (c)2001-2012 Alexander Barton (alex@barton.de) and Contributors. * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by @@ -17,9 +17,15 @@ * Wildcard pattern matching (header) */ -GLOBAL bool Match PARAMS(( const char *Pattern, const char *String )); -GLOBAL bool MatchCaseInsensitive PARAMS(( const char *Pattern, const char *searchme )); +GLOBAL bool Match PARAMS((const char *Pattern, const char *String)); +GLOBAL bool MatchCaseInsensitive PARAMS((const char *Pattern, + const char *String)); + +GLOBAL bool MatchCaseInsensitiveList PARAMS((const char *Pattern, + const char *String, + const char *Separator)); + #endif /* -eof- */