string-util: add new strdupcspn()/strdupspn()

These combine strndup() + strspn()/strcspn() into one.

There are a bunch of strndupa() calls that could use similar treatment
(or should be converted to strdup[c]spn(), but this commit doesn't
bother with that.
This commit is contained in:
Lennart Poettering
2023-01-20 13:14:42 +01:00
parent 71c6f0ac52
commit e8bec6242b
8 changed files with 27 additions and 13 deletions

View File

@@ -1201,3 +1201,19 @@ size_t strspn_from_end(const char *str, const char *accept) {
return n;
}
char *strdupspn(const char *a, const char *accept) {
if (isempty(a) || isempty(accept))
return strdup("");
return strndup(a, strspn(a, accept));
}
char *strdupcspn(const char *a, const char *reject) {
if (isempty(a))
return strdup("");
if (isempty(reject))
return strdup(a);
return strndup(a, strcspn(a, reject));
}