Merge branch 'jl/interrupt-clone-remove-separate-git-dir' into maint
[gitweb.git] / strbuf.c
index 5256c2a0863803433f50b1edde0e952788c5a0f8..05d0693eba1eba4e2f21057388368c0890e668fe 100644 (file)
--- a/strbuf.c
+++ b/strbuf.c
@@ -106,29 +106,27 @@ void strbuf_ltrim(struct strbuf *sb)
        sb->buf[sb->len] = '\0';
 }
 
-struct strbuf **strbuf_split_buf(const char *str, size_t slen, int delim, int max)
+struct strbuf **strbuf_split_buf(const char *str, size_t slen,
+                                int terminator, int max)
 {
        struct strbuf **ret = NULL;
        size_t nr = 0, alloc = 0;
-       const char *n, *p;
        struct strbuf *t;
 
-       p = n = str;
-       while (n < str + slen) {
-               int len;
-               if (max <= 0 || nr + 1 < max)
-                       n = memchr(n, delim, slen - (n - str));
-               else
-                       n = NULL;
-               if (!n)
-                       n = str + slen - 1;
-               len = n - p + 1;
+       while (slen) {
+               int len = slen;
+               if (max <= 0 || nr + 1 < max) {
+                       const char *end = memchr(str, terminator, slen);
+                       if (end)
+                               len = end - str + 1;
+               }
                t = xmalloc(sizeof(struct strbuf));
                strbuf_init(t, len);
-               strbuf_add(t, p, len);
+               strbuf_add(t, str, len);
                ALLOC_GROW(ret, nr + 2, alloc);
                ret[nr++] = t;
-               p = ++n;
+               str += len;
+               slen -= len;
        }
        ALLOC_GROW(ret, nr + 1, alloc); /* In case string was empty */
        ret[nr] = NULL;