From: Yu Watanabe Date: Thu, 23 Mar 2023 03:39:36 +0000 (+0900) Subject: nulstr-util: introduce strv_parse_nulstr_full() that optionally drop trailing empty... X-Git-Tag: v254-rc1~938^2~2 X-Git-Url: http://git.ipfire.org/gitweb.cgi?a=commitdiff_plain;h=a4f66f90ad7ead6aeea24a596425d8844902712d;p=thirdparty%2Fsystemd.git nulstr-util: introduce strv_parse_nulstr_full() that optionally drop trailing empty strings --- diff --git a/src/basic/nulstr-util.c b/src/basic/nulstr-util.c index 98d68e0b011..2acc61886bd 100644 --- a/src/basic/nulstr-util.c +++ b/src/basic/nulstr-util.c @@ -4,7 +4,7 @@ #include "string-util.h" #include "strv.h" -char** strv_parse_nulstr(const char *s, size_t l) { +char** strv_parse_nulstr_full(const char *s, size_t l, bool drop_trailing_nuls) { /* l is the length of the input data, which will be split at NULs into elements of the resulting * strv. Hence, the number of items in the resulting strv will be equal to one plus the number of NUL * bytes in the l bytes starting at s, unless s[l-1] is NUL, in which case the final empty string is @@ -18,6 +18,10 @@ char** strv_parse_nulstr(const char *s, size_t l) { assert(s || l <= 0); + if (drop_trailing_nuls) + while (l > 0 && s[l-1] == '\0') + l--; + if (l <= 0) return new0(char*, 1); diff --git a/src/basic/nulstr-util.h b/src/basic/nulstr-util.h index fd0ed445282..d7bc5fd1ced 100644 --- a/src/basic/nulstr-util.h +++ b/src/basic/nulstr-util.h @@ -20,7 +20,10 @@ static inline bool nulstr_contains(const char *nulstr, const char *needle) { return nulstr_get(nulstr, needle); } -char** strv_parse_nulstr(const char *s, size_t l); +char** strv_parse_nulstr_full(const char *s, size_t l, bool drop_trailing_nuls); +static inline char** strv_parse_nulstr(const char *s, size_t l) { + return strv_parse_nulstr_full(s, l, false); +} char** strv_split_nulstr(const char *s); int strv_make_nulstr(char * const *l, char **p, size_t *n); int set_make_nulstr(Set *s, char **ret, size_t *ret_size);