e1a3e66b150100bcb49a4d995aeb38ff95fe43d2
kent
  Thu Jun 8 23:28:29 2017 -0700
Made nextStringBetween for when you are looking repeatedly for a pattern.

diff --git src/lib/common.c src/lib/common.c
index 1fc01b9..c7cafb0 100644
--- src/lib/common.c
+++ src/lib/common.c
@@ -1440,51 +1440,65 @@
 }
 
 char *rStringIn(char *needle, char *haystack)
 /* Return last position of needle in haystack, or NULL if it's not there. */
 {
 int nSize = strlen(needle);
 char *pos;
 for (pos = haystack + strlen(haystack) - nSize; pos >= haystack; pos -= 1)
     {
     if (memcmp(needle, pos, nSize) == 0)
         return pos;
     }
 return NULL;
 }
 
-char *stringBetween(char *start, char *end, char *haystack)
-/* Return string between start and end strings, or NULL if
- * none found.  The first such instance is returned.
- * String must be freed by caller. */
+char *nextStringBetween(char *start, char *end, char **pHaystack)
+/* Return next string that occurs between start and end strings
+ * starting seach at *pHaystack.  This will update *pHaystack to after 
+ * end, so it can be called repeatedly. Returns NULL when
+ * no more to be found*/
 {
 char *pos, *p;
 int len;
+char *haystack = *pHaystack;
+if (isEmpty(haystack))
+    return NULL;
 if ((p = stringIn(start, haystack)) != NULL)
     {
     pos = p + strlen(start);
     if ((p = stringIn(end, pos)) != NULL)
         {
         len = p - pos;
         pos = cloneMem(pos, len + 1);
         pos[len] = 0;
+	*pHaystack = p;
         return pos;
         }
     }
+*pHaystack = NULL;
 return NULL;
 }
 
+char *stringBetween(char *start, char *end, char *haystack)
+/* Return string between start and end strings, or NULL if
+ * none found.  The first such instance is returned.
+ * String must be freed by caller. */
+{
+return nextStringBetween(start, end, &haystack);
+}
+
 boolean endsWith(char *string, char *end)
 /* Returns TRUE if string ends with end. */
 {
 int sLen, eLen, offset;
 sLen = strlen(string);
 eLen = strlen(end);
 offset = sLen - eLen;
 if (offset < 0)
     return FALSE;
 return sameString(string+offset, end);
 }
 
 char lastChar(char *s)
 /* Return last character in string. */
 {