blobmsg: introduce BLOBMSG_CAST_INT64
authorDaniel Golle <daniel@makrotopia.org>
Tue, 4 Aug 2020 00:27:09 +0000 (01:27 +0100)
committerDaniel Golle <daniel@makrotopia.org>
Thu, 6 Aug 2020 13:29:36 +0000 (14:29 +0100)
commit9e52171d70def760a6949676800d0b73f85ee22d
tree8a69d6ff6d46ba0ccd8ec3d710375701be8b268b
parentf4e9bf73ac5c0ee6b8f240e2a2100e70ca56d705
blobmsg: introduce BLOBMSG_CAST_INT64

When dealing with 64-bit integers in JSON documents, blobmsg_parse
becomes useless as blobmsg-json only uses BLOBMSG_TYPE_INT64 if the
value exceeds the range of a 32-bit integer, otherwise
BLOBMSG_TYPE_INT32 is used. This is because blobmsg-json parses the
JSON document ad-hoc without knowing the schema in advance and hence
a result of the design of blobmsg-json (and the absence of JSON
schema definitions).
In practise, this made code less readable as instead of using
blobmsg_parse() one had to to deal with *all* attributes manually just
to catch fields which can be both, BLOBMSG_TYPE_INT32 or
BLOBMSG_TYPE_INT64, but are always dealt with as uint64_t in code as
they potentially could exceed the 32-bit range.

To resolve this issue, introduce as special wildcard attribute
type BLOBMSG_CAST_INT64 which should only be used in policies used
by blobmsg_parse(). If used for an attribute in the policy,
blobmsg_parse shall accept all integer types and allow the user
to retrieve the value using the uint64_t blobmsg_cast_u64() and
int64_t blobmsg_cast_s64() functions which is also introduced by this
commit.

Signed-off-by: Daniel Golle <daniel@makrotopia.org>
blobmsg.c
blobmsg.h