X-Git-Url: https://git.ozlabs.org/?p=ccan;a=blobdiff_plain;f=tools%2Fsplit.c;fp=tools%2Fsplit.c;h=f5d016a9c874bd5beae39a30f7bff40397a18e1f;hp=0000000000000000000000000000000000000000;hb=437fa285d12183a0f1e7450b3a01cbe5620a3507;hpb=b2def1c863e7e936eca2ee5d0fb1ccd7c83e4be7 diff --git a/tools/split.c b/tools/split.c new file mode 100644 index 00000000..f5d016a9 --- /dev/null +++ b/tools/split.c @@ -0,0 +1,29 @@ +#include "tools.h" +#include "talloc/talloc.h" +#include + +/* This is a dumb one which copies. We could mangle instead. */ +char **split(const void *ctx, const char *text, const char *delims, + unsigned int *nump) +{ + char **lines = NULL; + unsigned int max = 64, num = 0; + + lines = talloc_array(ctx, char *, max+1); + + while (*text != '\0') { + unsigned int len = strcspn(text, delims); + lines[num] = talloc_array(lines, char, len + 1); + memcpy(lines[num], text, len); + lines[num][len] = '\0'; + text += len; + text += strspn(text, delims); + if (++num == max) + lines = talloc_realloc(ctx, lines, char *, max*=2 + 1); + } + lines[num] = NULL; + if (nump) + *nump = num; + return lines; +} +