]> git.ipfire.org Git - thirdparty/systemd.git/commitdiff
nulstr-util: introduce strv_parse_nulstr_full() that optionally drop trailing empty...
authorYu Watanabe <watanabe.yu+github@gmail.com>
Thu, 23 Mar 2023 03:39:36 +0000 (12:39 +0900)
committerYu Watanabe <watanabe.yu+github@gmail.com>
Fri, 24 Mar 2023 06:21:59 +0000 (15:21 +0900)
src/basic/nulstr-util.c
src/basic/nulstr-util.h

index 98d68e0b011486819960de2b5ac1f9506127d2c6..2acc61886bd98fa9d3782940563f56dfcb970e20 100644 (file)
@@ -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);
 
index fd0ed445282b1d2d00a9a664d4f9de3f6fcdcbc6..d7bc5fd1ced9523ad8ce1bfc3d42136a19520237 100644 (file)
@@ -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);