From: Lennart Poettering Date: Wed, 28 Sep 2022 09:35:47 +0000 (+0200) Subject: json: add dispatchers for 16bit integers X-Git-Tag: v252-rc1~53^2~14 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=e085625f099ce8cf39be512b411d7032fc9af219;p=thirdparty%2Fsystemd.git json: add dispatchers for 16bit integers --- diff --git a/src/shared/json.c b/src/shared/json.c index 44a1838a7d2..87e87091b04 100644 --- a/src/shared/json.c +++ b/src/shared/json.c @@ -4404,6 +4404,36 @@ int json_dispatch_int32(const char *name, JsonVariant *variant, JsonDispatchFlag return 0; } +int json_dispatch_int16(const char *name, JsonVariant *variant, JsonDispatchFlags flags, void *userdata) { + int16_t *i = ASSERT_PTR(userdata); + + assert(variant); + + if (!json_variant_is_integer(variant)) + return json_log(variant, flags, SYNTHETIC_ERRNO(EINVAL), "JSON field '%s' is not an integer.", strna(name)); + + if (json_variant_integer(variant) < INT16_MIN || json_variant_integer(variant) > INT16_MAX) + return json_log(variant, flags, SYNTHETIC_ERRNO(ERANGE), "JSON field '%s' out of bounds.", strna(name)); + + *i = (int16_t) json_variant_integer(variant); + return 0; +} + +int json_dispatch_uint16(const char *name, JsonVariant *variant, JsonDispatchFlags flags, void *userdata) { + uint16_t *i = ASSERT_PTR(userdata); + + assert(variant); + + if (!json_variant_is_unsigned(variant)) + return json_log(variant, flags, SYNTHETIC_ERRNO(EINVAL), "JSON field '%s' is not an unsigned integer.", strna(name)); + + if (json_variant_unsigned(variant) > UINT16_MAX) + return json_log(variant, flags, SYNTHETIC_ERRNO(ERANGE), "JSON field '%s' out of bounds.", strna(name)); + + *i = (uint16_t) json_variant_unsigned(variant); + return 0; +} + int json_dispatch_string(const char *name, JsonVariant *variant, JsonDispatchFlags flags, void *userdata) { char **s = ASSERT_PTR(userdata); int r; diff --git a/src/shared/json.h b/src/shared/json.h index c75dfe87419..06311cbf4b1 100644 --- a/src/shared/json.h +++ b/src/shared/json.h @@ -369,6 +369,8 @@ int json_dispatch_int64(const char *name, JsonVariant *variant, JsonDispatchFlag int json_dispatch_uint64(const char *name, JsonVariant *variant, JsonDispatchFlags flags, void *userdata); int json_dispatch_uint32(const char *name, JsonVariant *variant, JsonDispatchFlags flags, void *userdata); int json_dispatch_int32(const char *name, JsonVariant *variant, JsonDispatchFlags flags, void *userdata); +int json_dispatch_uint16(const char *name, JsonVariant *variant, JsonDispatchFlags flags, void *userdata); +int json_dispatch_int16(const char *name, JsonVariant *variant, JsonDispatchFlags flags, void *userdata); int json_dispatch_uid_gid(const char *name, JsonVariant *variant, JsonDispatchFlags flags, void *userdata); int json_dispatch_user_group_name(const char *name, JsonVariant *variant, JsonDispatchFlags flags, void *userdata); int json_dispatch_id128(const char *name, JsonVariant *variant, JsonDispatchFlags flags, void *userdata);