diff options
author | thing1 <thing1@seacrossedlovers.xyz> | 2025-02-25 08:30:12 +0000 |
---|---|---|
committer | thing1 <thing1@seacrossedlovers.xyz> | 2025-02-25 08:30:12 +0000 |
commit | 62ea717a452cb1641362dbd5e09926a107d0b9e4 (patch) | |
tree | 5cc3ec1973abd4d20c4a727176d0c8c372eb5ff9 /util.c | |
parent | ab3e311216249bc4401fa10f88f95ef0d5e002a1 (diff) |
Diffstat (limited to 'util.c')
-rw-r--r-- | util.c | 29 |
1 files changed, 29 insertions, 0 deletions
@@ -25,6 +25,35 @@ die(const char *fmt, ...) exit(1); } +/* + * Splits a string into segments according to a separator. A '\0' is written to + * the end of every segment. The beginning of every segment is written to + * 'pbegin'. Only the first 'maxcount' segments will be written if + * maxcount > 0. Inspired by python's split. + * + * Used exclusively by fakesignal() to split arguments. + */ +size_t +split(char *s, const char* sep, char **pbegin, size_t maxcount) { + + char *p, *q; + const size_t seplen = strlen(sep); + size_t count = 0; + + maxcount = maxcount == 0 ? (size_t)-1 : maxcount; + p = s; + while ((q = strstr(p, sep)) != NULL && count < maxcount) { + pbegin[count] = p; + *q = '\0'; + p = q + seplen; + count++; + } + if (count < maxcount) { + pbegin[count] = p; + count++; + } + return count; +} void * ecalloc(size_t nmemb, size_t size) |