* ngIRCd -- The Next Generation IRC Daemon
* Copyright (c)2001,2002 by Alexander Barton (alex@barton.de)
*
- * Dieses Programm ist freie Software. Sie koennen es unter den Bedingungen
- * der GNU General Public License (GPL), wie von der Free Software Foundation
- * herausgegeben, weitergeben und/oder modifizieren, entweder unter Version 2
- * der Lizenz oder (wenn Sie es wuenschen) jeder spaeteren Version.
- * Naehere Informationen entnehmen Sie bitter der Datei COPYING. Eine Liste
- * der an ngIRCd beteiligten Autoren finden Sie in der Datei AUTHORS.
+ * 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
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ * Please read the file COPYING, README and AUTHORS for more information.
*
- * $Id: match.c,v 1.1 2002/06/26 15:42:58 alex Exp $
- *
- * match.c: Wildcard Pattern Matching
+ * Wildcard pattern matching
*/
#include "portab.h"
+static char UNUSED id[] = "$Id: match.c,v 1.4 2005/07/31 20:13:08 alex Exp $";
+
#include "imp.h"
#include <assert.h>
#include <string.h>
*/
-LOCAL INT Matche PARAMS(( REGISTER CHAR *p, REGISTER CHAR *t ));
-LOCAL INT Matche_After_Star PARAMS(( REGISTER CHAR *p, REGISTER CHAR *t ));
+static int Matche PARAMS(( char *p, char *t ));
+static int Matche_After_Star PARAMS(( char *p, char *t ));
#define MATCH_PATTERN 6 /* bad pattern */
#define MATCH_VALID 1 /* valid match */
-GLOBAL BOOLEAN
-Match( CHAR *Pattern, CHAR *String )
+GLOBAL bool
+Match( char *Pattern, char *String )
{
/* Pattern mit String vergleichen */
- if( Matche( Pattern, String ) == MATCH_VALID ) return TRUE;
- else return FALSE;
+ if( Matche( Pattern, String ) == MATCH_VALID ) return true;
+ else return false;
} /* Match */
-LOCAL INT
-Matche( REGISTER CHAR *p, REGISTER CHAR *t )
+static int
+Matche( char *p, char *t )
{
- REGISTER CHAR range_start, range_end;
- BOOLEAN invert;
- BOOLEAN member_match;
- BOOLEAN loop;
+ register char range_start, range_end;
+ bool invert;
+ bool member_match;
+ bool loop;
for( ; *p; p++, t++ )
{
p++;
/* check if this is a member match or exclusion match */
- invert = FALSE;
+ invert = false;
if( *p == '!' || *p == '^' )
{
- invert = TRUE;
+ invert = true;
p++;
}
/* if closing bracket here or at range start then we have a malformed pattern */
if ( *p == ']' ) return MATCH_PATTERN;
- member_match = FALSE;
- loop = TRUE;
+ member_match = false;
+ loop = true;
while( loop )
{
/* if end of construct then loop is done */
if( *p == ']' )
{
- loop = FALSE;
+ loop = false;
continue;
}
{
if( *t >= range_start && *t <= range_end )
{
- member_match = TRUE;
- loop = FALSE;
+ member_match = true;
+ loop = false;
}
}
else
{
if( *t >= range_end && *t <= range_start )
{
- member_match = TRUE;
- loop = FALSE;
+ member_match = true;
+ loop = false;
}
}
}
} /* Matche */
-LOCAL INT
-Matche_After_Star( REGISTER CHAR *p, REGISTER CHAR *t )
+static int
+Matche_After_Star( char *p, char *t )
{
- REGISTER INT nextp, match = 0;
+ register int nextp, match = 0;
/* pass over existing ? and * in pattern */
while( *p == '?' || *p == '*' )