sbr/brkstring.c: replaced static brkany() with call to strchr(); plus cleanups
authormarkus schnalke <meillo@marmaro.de>
Wed, 4 Jan 2012 08:54:43 +0000 (09:54 +0100)
committermarkus schnalke <meillo@marmaro.de>
Wed, 4 Jan 2012 08:54:43 +0000 (09:54 +0100)
sbr/brkstring.c

index 4e71ab5..68c7b70 100644 (file)
 static char **broken = NULL;    /* array of substring start addresses */
 static int len = 0;             /* current size of "broken"           */
 
+
 /*
-** static prototypes
+** returns pointer to static memory
 */
-static int brkany(char, char *);
-
-
 char **
 brkstring(char *str, char *brksep, char *brkterm)
 {
@@ -31,7 +29,7 @@ brkstring(char *str, char *brksep, char *brkterm)
        /* allocate initial space for pointers on first call */
        if (!broken) {
                len = NUMBROKEN;
-               broken = (char **) mh_xmalloc((size_t) (len * sizeof(*broken)));
+               broken = (char **)mh_xmalloc((size_t)(len * sizeof(*broken)));
        }
 
        /*
@@ -39,53 +37,34 @@ brkstring(char *str, char *brksep, char *brkterm)
        ** and enter start addresses in "broken".
        */
        s = str;
-
        for (i = 0;; i++) {
-
-       /* enlarge pointer array, if necessary */
-       if (i >= len) {
-               len += NUMBROKEN;
-               broken = mh_xrealloc(broken, (size_t) (len * sizeof(*broken)));
-       }
-
-       while (brkany(c = *s, brksep))
-               *s++ = '\0';
-
-       /*
-       ** we are either at the end of the string, or the
-       ** terminator found has been found, so finish up.
-       */
-       if (!c || brkany(c, brkterm)) {
-               *s = '\0';
-               broken[i] = NULL;
-               return broken;
-       }
-
-       /* set next start addr */
-       broken[i] = s;
-
-       while ((c = *++s) && !brkany(c, brksep) && !brkany(c, brkterm))
-               ;    /* empty body */
-       }
-
-       return broken;  /* NOT REACHED */
-}
-
-
-/*
-** If the character is in the string,
-** return 1, else return 0.
-*/
-
-static int
-brkany(char c, char *str)
-{
-       char *s;
-
-       if (str) {
-       for (s = str; *s; s++)
-               if (c == *s)
-               return 1;
+               /* enlarge pointer array, if necessary */
+               if (i >= len) {
+                       len += NUMBROKEN;
+                       broken = mh_xrealloc(broken,
+                                       (size_t)(len * sizeof(*broken)));
+               }
+
+               /* handle separators */
+               while (strchr(brksep, c = *s)) {
+                       *s++ = '\0';
+               }
+
+               /*
+               ** we are either at the end of the string, or the
+               ** terminator found has been found, so finish up.
+               */
+               if (!c || strchr(brkterm, c)) {
+                       *s = '\0';
+                       broken[i] = NULL;
+                       return broken;
+               }
+
+               /* set next start addr and walk over word */
+               broken[i] = s;
+               while ((c=*++s) && !strchr(brksep, c) && !strchr(brkterm, c)) {
+                       continue;
+               }
        }
-       return 0;
+       adios("brkstring()", "reached unreachable point");
 }