]> git.ipfire.org Git - thirdparty/systemd.git/commitdiff
strbuf: make length for strbuf_add_string() optional 33284/head
authorYu Watanabe <watanabe.yu+github@gmail.com>
Tue, 11 Jun 2024 18:25:57 +0000 (03:25 +0900)
committerYu Watanabe <watanabe.yu+github@gmail.com>
Wed, 12 Jun 2024 09:19:29 +0000 (18:19 +0900)
src/basic/strbuf.c
src/basic/strbuf.h
src/libsystemd/sd-journal/catalog.c
src/shared/hwdb-util.c
src/test/test-strbuf.c

index c81ba8a4878840d060dac44b2d0ed72a845d1036..226893842bbf8c4e171cb8c57467b2291f133cda 100644 (file)
@@ -105,13 +105,16 @@ static void bubbleinsert(struct strbuf_node *node,
 }
 
 /* add string, return the index/offset into the buffer */
-ssize_t strbuf_add_string(struct strbuf *str, const char *s, size_t len) {
+ssize_t strbuf_add_string_full(struct strbuf *str, const char *s, size_t len) {
         uint8_t c;
         ssize_t off;
 
         assert(str);
         assert(s || len == 0);
 
+        if (len == SIZE_MAX)
+                len = strlen(s);
+
         if (!str->root)
                 return -EINVAL;
 
index 6187c0868322ab5ce9aaacd773624c23f7f2dfb7..405b34717ee98bffa14b8e0ed753984fec01c4db 100644 (file)
@@ -33,7 +33,10 @@ struct strbuf_child_entry {
 };
 
 struct strbuf* strbuf_new(void);
-ssize_t strbuf_add_string(struct strbuf *str, const char *s, size_t len);
+ssize_t strbuf_add_string_full(struct strbuf *str, const char *s, size_t len);
+static inline ssize_t strbuf_add_string(struct strbuf *str, const char *s) {
+        return strbuf_add_string_full(str, s, SIZE_MAX);
+}
 void strbuf_complete(struct strbuf *str);
 struct strbuf* strbuf_free(struct strbuf *str);
 DEFINE_TRIVIAL_CLEANUP_FUNC(struct strbuf*, strbuf_free);
index a0b673f65fc9721e727e5919884f4f32fbd2d36b..7dcc35d8d5840aff362155637e23167fbaf29620 100644 (file)
@@ -461,7 +461,7 @@ int catalog_update(const char* database, const char* root, const char* const* di
                           SD_ID128_FORMAT_VAL(i->id),
                           isempty(i->language) ? "C" : i->language);
 
-                offset = strbuf_add_string(sb, payload, strlen(payload));
+                offset = strbuf_add_string(sb, payload);
                 if (offset < 0)
                         return log_oom();
 
index d96902c7f26fe737eb1f38f6340c55dcad9c5384..c99f5102363dfb1623d1c7dd8a5a760ddb860898 100644 (file)
@@ -138,15 +138,15 @@ static int trie_node_add_value(struct trie *trie, struct trie_node *node,
         ssize_t k, v, fn = 0;
         struct trie_value_entry *val;
 
-        k = strbuf_add_string(trie->strings, key, strlen(key));
+        k = strbuf_add_string(trie->strings, key);
         if (k < 0)
                 return k;
-        v = strbuf_add_string(trie->strings, value, strlen(value));
+        v = strbuf_add_string(trie->strings, value);
         if (v < 0)
                 return v;
 
         if (!compat) {
-                fn = strbuf_add_string(trie->strings, filename, strlen(filename));
+                fn = strbuf_add_string(trie->strings, filename);
                 if (fn < 0)
                         return fn;
         }
@@ -224,7 +224,7 @@ static int trie_insert(struct trie *trie, struct trie_node *node, const char *se
                         if (!s)
                                 return -ENOMEM;
 
-                        off = strbuf_add_string(trie->strings, s, p);
+                        off = strbuf_add_string_full(trie->strings, s, p);
                         if (off < 0)
                                 return off;
 
@@ -254,7 +254,7 @@ static int trie_insert(struct trie *trie, struct trie_node *node, const char *se
                         if (!new_child)
                                 return -ENOMEM;
 
-                        off = strbuf_add_string(trie->strings, search + i+1, strlen(search + i+1));
+                        off = strbuf_add_string(trie->strings, search + i+1);
                         if (off < 0)
                                 return off;
 
index c0a4d1167edaeb51de834295805db0c23b752a3c..49ff205c53f624e0b5ff8f1ac49fdaca9aecd82f 100644 (file)
@@ -8,10 +8,6 @@
 #include "strv.h"
 #include "tests.h"
 
-static ssize_t add_string(struct strbuf *sb, const char *s) {
-        return strbuf_add_string(sb, s, strlen(s));
-}
-
 TEST(strbuf) {
         _cleanup_(strbuf_freep) struct strbuf *sb = NULL;
         _cleanup_strv_free_ char **l = NULL;
@@ -19,14 +15,14 @@ TEST(strbuf) {
 
         sb = strbuf_new();
 
-        a = add_string(sb, "waldo");
-        b = add_string(sb, "foo");
-        c = add_string(sb, "bar");
-        d = add_string(sb, "waldo");   /* duplicate */
-        e = add_string(sb, "aldo");    /* duplicate */
-        f = add_string(sb, "do");      /* duplicate */
-        g = add_string(sb, "waldorf"); /* not a duplicate: matches from tail */
-        h = add_string(sb, "");
+        a = strbuf_add_string(sb, "waldo");
+        b = strbuf_add_string(sb, "foo");
+        c = strbuf_add_string(sb, "bar");
+        d = strbuf_add_string(sb, "waldo");   /* duplicate */
+        e = strbuf_add_string(sb, "aldo");    /* duplicate */
+        f = strbuf_add_string(sb, "do");      /* duplicate */
+        g = strbuf_add_string(sb, "waldorf"); /* not a duplicate: matches from tail */
+        h = strbuf_add_string(sb, "");
 
         /* check the content of the buffer directly */
         l = strv_parse_nulstr(sb->buf, sb->len);