[Initng-svn] r4047 - initng/trunk/src

svn at initng.thinktux.net svn at initng.thinktux.net
Mon May 8 07:24:28 CEST 2006


Author: jimmy
Date: Mon May  8 07:24:26 2006
New Revision: 4047

Modified:
   initng/trunk/src/initng_string_tools.c

Log:
service_match to count all '/' chars, it must be equal to have a correct match.


Modified: initng/trunk/src/initng_string_tools.c
==============================================================================
--- initng/trunk/src/initng_string_tools.c	(original)
+++ initng/trunk/src/initng_string_tools.c	Mon May  8 07:24:26 2006
@@ -275,6 +275,7 @@
  * This search for a pattern.
  * If string is "net/eth0" then pattern "net/et*" and pattern "net/eth?"
  * should return true.
+ * The number of '/' chars must be equal on string and pattern.
  */
  // examples:
  // string           pattern            do_match
@@ -285,6 +286,9 @@
 
 int service_match(const char *string, const char *pattern)
 {
+	int stringslash=0;
+	int patternslash=0;
+	const char *tmp;
 	assert(string);
 	assert(pattern);
 	D_("matching string: \"%s\", to pattern: \"%s\"\n", string, pattern);
@@ -296,9 +300,24 @@
 		   string);
 		return (FALSE);
 	}
+	
+	/* check if its a match */
+	if(fnmatch(pattern, string, FNM_CASEFOLD) != 0)
+		return(FALSE);
+	
+	/* count '/' in string */
+	tmp=string-1;
+	while((tmp=strchr(++tmp, '/')))
+		stringslash++;
+	/* count '/' in pattern */
+	tmp=pattern-1;
+	while((tmp=strchr(++tmp, '/')))
+		patternslash++;	
+
+	/*D_("service_match(%s, %s): %i, %i\n", string, pattern, stringslash, patternslash); */
 
 	/* use fnmatch that shud serve us well as these matches looks like filename matching */
-	return (fnmatch(pattern, string, FNM_CASEFOLD) == 0);
+	return (stringslash==patternslash);
 }
 
 /*


More information about the Initng-svn mailing list