2 * InspIRCd -- Internet Relay Chat Daemon
4 * Copyright (C) 2008 Robin Burchell <robin+git@viroteck.net>
5 * Copyright (C) 2003, 2006-2008 Craig Edwards <craigedwards@brainbox.cc>
6 * Copyright (C) 2007-2008 Dennis Friis <peavey@inspircd.org>
8 * This file is part of InspIRCd. InspIRCd is free software: you can
9 * redistribute it and/or modify it under the terms of the GNU General Public
10 * License as published by the Free Software Foundation, version 2.
12 * This program is distributed in the hope that it will be useful, but WITHOUT
13 * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS
14 * FOR A PARTICULAR PURPOSE. See the GNU General Public License for more
17 * You should have received a copy of the GNU General Public License
18 * along with this program. If not, see <http://www.gnu.org/licenses/>.
26 #include "inspstring.h"
28 static bool match_internal(const unsigned char *str, const unsigned char *mask, unsigned const char *map)
30 unsigned char *cp = NULL, *mp = NULL;
31 unsigned char* string = (unsigned char*)str;
32 unsigned char* wild = (unsigned char*)mask;
34 while ((*string) && (*wild != '*'))
36 if ((map[*wild] != map[*string]) && (*wild != '?'))
56 if ((map[*wild] == map[*string]) || (*wild == '?'))
77 /********************************************************************
78 * Below here is all wrappers around match_internal
79 ********************************************************************/
81 CoreExport bool InspIRCd::Match(const std::string &str, const std::string &mask, unsigned const char *map)
84 map = national_case_insensitive_map;
86 return match_internal((const unsigned char *)str.c_str(), (const unsigned char *)mask.c_str(), map);
89 CoreExport bool InspIRCd::Match(const char *str, const char *mask, unsigned const char *map)
92 map = national_case_insensitive_map;
93 return match_internal((const unsigned char *)str, (const unsigned char *)mask, map);
96 CoreExport bool InspIRCd::MatchCIDR(const std::string &str, const std::string &mask, unsigned const char *map)
98 if (irc::sockets::MatchCIDR(str, mask, true))
102 map = national_case_insensitive_map;
104 // Fall back to regular match
105 return InspIRCd::Match(str, mask, map);
108 CoreExport bool InspIRCd::MatchCIDR(const char *str, const char *mask, unsigned const char *map)
110 if (irc::sockets::MatchCIDR(str, mask, true))
114 map = national_case_insensitive_map;
116 // Fall back to regular match
117 return InspIRCd::Match(str, mask, map);