From: Luca Boccassi Date: Thu, 1 Jun 2023 18:32:29 +0000 (+0100) Subject: serialize: add deserialize_strv helper X-Git-Tag: v254-rc1~236^2 X-Git-Url: http://git.ipfire.org/gitweb.cgi?a=commitdiff_plain;h=refs%2Fpull%2F27980%2Fhead;p=thirdparty%2Fsystemd.git serialize: add deserialize_strv helper --- diff --git a/src/shared/serialize.c b/src/shared/serialize.c index 9d1a21360fd..5396062a8be 100644 --- a/src/shared/serialize.c +++ b/src/shared/serialize.c @@ -131,6 +131,20 @@ int serialize_strv(FILE *f, const char *key, char **l) { return ret; } +int deserialize_strv(char ***l, const char *value) { + ssize_t unescaped_len; + char *unescaped; + + assert(l); + assert(value); + + unescaped_len = cunescape(value, 0, &unescaped); + if (unescaped_len < 0) + return unescaped_len; + + return strv_consume(l, unescaped); +} + int deserialize_usec(const char *value, usec_t *ret) { int r; diff --git a/src/shared/serialize.h b/src/shared/serialize.h index 6d4f1ef4181..8fdc6dc304e 100644 --- a/src/shared/serialize.h +++ b/src/shared/serialize.h @@ -23,5 +23,6 @@ static inline int serialize_bool(FILE *f, const char *key, bool b) { int deserialize_usec(const char *value, usec_t *timestamp); int deserialize_dual_timestamp(const char *value, dual_timestamp *t); int deserialize_environment(const char *value, char ***environment); +int deserialize_strv(char ***l, const char *value); int open_serialization_fd(const char *ident); diff --git a/src/test/test-serialize.c b/src/test/test-serialize.c index bcf2e843b09..a297e9515ed 100644 --- a/src/test/test-serialize.c +++ b/src/test/test-serialize.c @@ -124,10 +124,7 @@ TEST(serialize_strv) { const char *t = startswith(line, "strv3="); assert_se(t); - - char *un; - assert_se(cunescape(t, 0, &un) >= 0); - assert_se(strv_consume(&strv2, un) >= 0); + assert_se(deserialize_strv(&strv2, t) >= 0); } assert_se(strv_equal(strv, strv2));