diff options
author | Craig Tiller <ctiller@google.com> | 2016-11-14 07:41:18 -0800 |
---|---|---|
committer | Craig Tiller <ctiller@google.com> | 2016-11-14 07:41:18 -0800 |
commit | d5a7a8a61eb3c1d5759f79c9cb4667a4d2df0d25 (patch) | |
tree | e34e18d05c48e58387eb12b3495b10443dc28704 | |
parent | 7cdad96fc49090eb5e3a12a7cca5a9f257d3f301 (diff) |
Add missing function
-rw-r--r-- | src/core/lib/support/string.c | 25 |
1 files changed, 24 insertions, 1 deletions
diff --git a/src/core/lib/support/string.c b/src/core/lib/support/string.c index cafeb4364d..4db3f9a66c 100644 --- a/src/core/lib/support/string.c +++ b/src/core/lib/support/string.c @@ -267,5 +267,28 @@ int gpr_stricmp(const char *a, const char *b) { return ca - cb; } +static void add_string_to_split(const char *beg, const char *end, char ***strs, + size_t *nstrs, size_t *capstrs) { + char *out = gpr_malloc((size_t)(end - beg) + 1); + memcpy(out, beg, end - beg); + out[end - beg] = 0; + if (*nstrs == *capstrs) { + *capstrs = GPR_MAX(8, 2 * *capstrs); + *strs = gpr_realloc(*strs, sizeof(*strs) * *capstrs); + } + (*strs)[*nstrs] = out; + ++*nstrs; +} + void gpr_string_split(const char *input, const char *sep, char ***strs, - size_t *nstrs) {} + size_t *nstrs) { + char *next; + *strs = NULL; + *nstrs = 0; + size_t capstrs = 0; + while ((next = strstr(input, sep))) { + add_string_to_split(input, next, strs, nstrs, &capstrs); + input = next + strlen(sep); + } + add_string_to_split(input, input + strlen(input), strs, nstrs, &capstrs); +} |