serialize: add serialize_bool_elide() helper
In many case we serialize into objects that have been zero-initialized. To save some time and resources when there are a lot of booleans, add a helper that serializes only when the boolean is true.
This commit is contained in:
@@ -19,6 +19,9 @@ int serialize_strv(FILE *f, const char *key, char **l);
|
||||
static inline int serialize_bool(FILE *f, const char *key, bool b) {
|
||||
return serialize_item(f, key, yes_no(b));
|
||||
}
|
||||
static inline int serialize_bool_elide(FILE *f, const char *key, bool b) {
|
||||
return b ? serialize_item(f, key, yes_no(b)) : 0;
|
||||
}
|
||||
|
||||
int deserialize_usec(const char *value, usec_t *timestamp);
|
||||
int deserialize_dual_timestamp(const char *value, dual_timestamp *t);
|
||||
|
||||
@@ -22,19 +22,23 @@ TEST(serialize_item) {
|
||||
assert_se(serialize_item(f, "a", NULL) == 0);
|
||||
assert_se(serialize_item(f, "a", "bbb") == 1);
|
||||
assert_se(serialize_item(f, "a", "bbb") == 1);
|
||||
assert_se(serialize_bool_elide(f, "c", true) == 1);
|
||||
assert_se(serialize_bool_elide(f, "d", false) == 0);
|
||||
assert_se(serialize_item(f, "a", long_string) == -EINVAL);
|
||||
assert_se(serialize_item(f, long_string, "a") == -EINVAL);
|
||||
assert_se(serialize_item(f, long_string, long_string) == -EINVAL);
|
||||
|
||||
rewind(f);
|
||||
|
||||
_cleanup_free_ char *line1 = NULL, *line2 = NULL, *line3 = NULL;
|
||||
_cleanup_free_ char *line1 = NULL, *line2 = NULL, *line3 = NULL, *line4 = NULL;
|
||||
assert_se(read_line(f, LONG_LINE_MAX, &line1) > 0);
|
||||
assert_se(streq(line1, "a=bbb"));
|
||||
assert_se(read_line(f, LONG_LINE_MAX, &line2) > 0);
|
||||
assert_se(streq(line2, "a=bbb"));
|
||||
assert_se(read_line(f, LONG_LINE_MAX, &line3) == 0);
|
||||
assert_se(streq(line3, ""));
|
||||
assert_se(read_line(f, LONG_LINE_MAX, &line3) > 0);
|
||||
assert_se(streq(line3, "c=yes"));
|
||||
assert_se(read_line(f, LONG_LINE_MAX, &line4) == 0);
|
||||
assert_se(streq(line4, ""));
|
||||
}
|
||||
|
||||
TEST(serialize_item_escaped) {
|
||||
|
||||
Reference in New Issue
Block a user