/*
* ngIRCd -- The Next Generation IRC Daemon
- * Copyright (c)2001-2012 Alexander Barton (alex@barton.de) and Contributors.
+ * Copyright (c)2001-2014 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
* Wildcard pattern matching
*/
-#include "imp.h"
#include <assert.h>
#include <string.h>
-#include "exp.h"
-#include "match.h"
#include "defines.h"
#include "tool.h"
+#include "match.h"
/*
* The pattern matching functions [Matche(), Matche_After_Star()] are based
* "public domain": <http://c.snippets.org/snip_lister.php?fname=match.c>
*/
-
static int Matche PARAMS(( const char *p, const char *t ));
static int Matche_After_Star PARAMS(( const char *p, const char *t ));
-
#define MATCH_PATTERN 6 /**< bad pattern */
#define MATCH_LITERAL 5 /**< match failure on literal match */
#define MATCH_RANGE 4 /**< match failure on [..] construct */
#define MATCH_END 2 /**< premature end of pattern string */
#define MATCH_VALID 1 /**< valid match */
-
/**
* Match string with pattern.
*
GLOBAL bool
Match( const char *Pattern, const char *String )
{
- if( Matche( Pattern, String ) == MATCH_VALID ) return true;
- else return false;
+ if (Matche(Pattern, String) == MATCH_VALID)
+ return true;
+ else
+ return false;
} /* Match */
-
/**
* Match string with pattern case-insensitive.
*
GLOBAL bool
MatchCaseInsensitive(const char *Pattern, const char *String)
{
- char haystack[COMMAND_LEN];
+ char needle[COMMAND_LEN], haystack[COMMAND_LEN];
+ strlcpy(needle, Pattern, sizeof(needle));
strlcpy(haystack, String, sizeof(haystack));
- return Match(Pattern, ngt_LowerStr(haystack));
-} /* MatchCaseInsensitive */
+ return Match(ngt_LowerStr(needle), ngt_LowerStr(haystack));
+} /* MatchCaseInsensitive */
/**
* Match string with pattern case-insensitive.
MatchCaseInsensitiveList(const char *Pattern, const char *String,
const char *Separator)
{
- char tmp_pattern[COMMAND_LEN], haystack[COMMAND_LEN], *ptr;
+ char tmp_pattern[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))
+ if (MatchCaseInsensitive(ptr, String))
return true;
ptr = strtok(NULL, Separator);
}
return false;
} /* MatchCaseInsensitive */
-
static int
Matche( const char *p, const char *t )
{
else return MATCH_VALID;
} /* Matche */
-
static int
Matche_After_Star( const char *p, const char *t )
{
return match;
} /* Matche_After_Star */
-
/* -eof- */