]> code.citadel.org Git - citadel.git/commitdiff
Optimize num_tokens() to use only one pass through the string
authorArt Cancro <ajc@citadel.org>
Thu, 2 Aug 2007 20:21:46 +0000 (20:21 +0000)
committerArt Cancro <ajc@citadel.org>
Thu, 2 Aug 2007 20:21:46 +0000 (20:21 +0000)
citadel/tools.c
webcit/tools.c

index a19f5c68e567626eb9c7876379452ad99ed034d2..5c457de3b3e90617bc82029ae014f0d24a42a57a 100644 (file)
@@ -82,15 +82,22 @@ int strncasecmp(char *lstr, char *rstr, int len)
 /*
  * num_tokens()  -  discover number of parameters/tokens in a string
  */
 /*
  * num_tokens()  -  discover number of parameters/tokens in a string
  */
-int num_tokens(const char *source, char tok) {
-       int a;
+int num_tokens(char *source, char tok)
+{
        int count = 1;
        int count = 1;
+       char *ptr = source;
+
+       if (source == NULL) {
+               return (0);
+       }
 
 
-       if (source == NULL) return(0);
-       for (a=0; a<strlen(source); ++a) {
-               if (source[a]==tok) ++count;
+       while (*ptr != '\0') {
+               if (*ptr++ == tok) {
+                       ++count;
+               }
        }
        }
-       return(count);
+       
+       return (count);
 }
 
 
 }
 
 
index f0ebcaca5c08c34720d6ea7d9edd5476551a0a5e..a237a7e4322687e0510476eb7ff3f521e5735aac 100644 (file)
@@ -52,7 +52,7 @@ int num_tokens(char *source, char tok)
                return (0);
        }
 
                return (0);
        }
 
-       while (*ptr) {
+       while (*ptr != '\0') {
                if (*ptr++ == tok) {
                        ++count;
                }
                if (*ptr++ == tok) {
                        ++count;
                }