about summary refs log tree commit diff
path: root/src
diff options
context:
space:
mode:
authorAlexander Barton <alex@barton.de>2012-08-26 13:11:45 +0200
committerAlexander Barton <alex@barton.de>2012-08-26 13:11:45 +0200
commitab1fcebeff1593bf50bd091706a9b2f447db88cf (patch)
treec4ad3dfee4b281202a35aba251030d97c927e8d7 /src
parenta6dd2e33c2c9e60bbd286bb07a7a6273566dec7d (diff)
downloadngircd-ab1fcebeff1593bf50bd091706a9b2f447db88cf.tar.gz
ngircd-ab1fcebeff1593bf50bd091706a9b2f447db88cf.zip
New function MatchCaseInsensitiveList() to check list of patterns
Diffstat (limited to 'src')
-rw-r--r--src/ngircd/match.c49
-rw-r--r--src/ngircd/match.h12
2 files changed, 48 insertions, 13 deletions
diff --git a/src/ngircd/match.c b/src/ngircd/match.c
index 79699ea0..75bf4358 100644
--- a/src/ngircd/match.c
+++ b/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, const char *t ));
 /**
  * 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,17 +64,46 @@ 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 */
 
 
diff --git a/src/ngircd/match.h b/src/ngircd/match.h
index 2efe3f5b..d4107fb6 100644
--- a/src/ngircd/match.h
+++ b/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,8 +17,14 @@
  * 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