summaryrefslogtreecommitdiff
path: root/util.c
diff options
context:
space:
mode:
authorthing1 <thing1@seacrossedlovers.xyz>2025-02-25 08:30:12 +0000
committerthing1 <thing1@seacrossedlovers.xyz>2025-02-25 08:30:12 +0000
commit62ea717a452cb1641362dbd5e09926a107d0b9e4 (patch)
tree5cc3ec1973abd4d20c4a727176d0c8c372eb5ff9 /util.c
parentab3e311216249bc4401fa10f88f95ef0d5e002a1 (diff)
Diffstat (limited to 'util.c')
-rw-r--r--util.c29
1 files changed, 29 insertions, 0 deletions
diff --git a/util.c b/util.c
index 8e26a51..0eff265 100644
--- a/util.c
+++ b/util.c
@@ -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)