}
/* 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;
};
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);
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();
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;
}
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;
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;
#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;
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);