From: Lennart Poettering Date: Mon, 26 May 2025 10:15:27 +0000 (+0200) Subject: sd-json: add json_dispatch_const_filename() X-Git-Tag: v258-rc1~480^2~3 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=cb062410ecdc3e208b254e8e915a9583758cd899;p=thirdparty%2Fsystemd.git sd-json: add json_dispatch_const_filename() json_dispatch_const_filename() is to json_dispatch_filename() what json_dispatch_const_path() is to json_dispatch_path(). --- diff --git a/src/libsystemd/sd-json/json-util.c b/src/libsystemd/sd-json/json-util.c index 2c7f3240b61..61cf697f0ac 100644 --- a/src/libsystemd/sd-json/json-util.c +++ b/src/libsystemd/sd-json/json-util.c @@ -174,23 +174,37 @@ int json_dispatch_path(const char *name, sd_json_variant *variant, sd_json_dispa return 0; } -int json_dispatch_filename(const char *name, sd_json_variant *variant, sd_json_dispatch_flags_t flags, void *userdata) { - char **s = ASSERT_PTR(userdata); - const char *n; +int json_dispatch_const_filename(const char *name, sd_json_variant *variant, sd_json_dispatch_flags_t flags, void *userdata) { + const char **n = ASSERT_PTR(userdata); if (sd_json_variant_is_null(variant)) { - *s = mfree(*s); + *n = NULL; return 0; } if (!sd_json_variant_is_string(variant)) return json_log(variant, flags, SYNTHETIC_ERRNO(EINVAL), "JSON field '%s' is not a string.", strna(name)); - n = sd_json_variant_string(variant); - if (!filename_is_valid(n)) + const char *filename = sd_json_variant_string(variant); + if (!filename_is_valid(filename)) return json_log(variant, flags, SYNTHETIC_ERRNO(EINVAL), "JSON field '%s' is not a valid file name.", strna(name)); - if (free_and_strdup(s, n) < 0) + *n = filename; + return 0; +} + +int json_dispatch_filename(const char *name, sd_json_variant *variant, sd_json_dispatch_flags_t flags, void *userdata) { + char **n = ASSERT_PTR(userdata); + const char *filename; + int r; + + assert_return(variant, -EINVAL); + + r = json_dispatch_const_filename(name, variant, flags, &filename); + if (r < 0) + return r; + + if (free_and_strdup(n, filename) < 0) return json_log_oom(variant, flags); return 0; diff --git a/src/libsystemd/sd-json/json-util.h b/src/libsystemd/sd-json/json-util.h index 0d0f41bf378..758296d01f5 100644 --- a/src/libsystemd/sd-json/json-util.h +++ b/src/libsystemd/sd-json/json-util.h @@ -116,6 +116,7 @@ int json_dispatch_in_addr(const char *name, sd_json_variant *variant, sd_json_di int json_dispatch_path(const char *name, sd_json_variant *variant, sd_json_dispatch_flags_t flags, void *userdata); int json_dispatch_const_path(const char *name, sd_json_variant *variant, sd_json_dispatch_flags_t flags, void *userdata); int json_dispatch_filename(const char *name, sd_json_variant *variant, sd_json_dispatch_flags_t flags, void *userdata); +int json_dispatch_const_filename(const char *name, sd_json_variant *variant, sd_json_dispatch_flags_t flags, void *userdata); int json_dispatch_pidref(const char *name, sd_json_variant *variant, sd_json_dispatch_flags_t flags, void *userdata); int json_dispatch_devnum(const char *name, sd_json_variant *variant, sd_json_dispatch_flags_t flags, void *userdata); int json_dispatch_ifindex(const char *name, sd_json_variant *variant, sd_json_dispatch_flags_t flags, void *userdata);