Use json_object_object_add_ex if defined.

The json-c lib changed json_object_object_add() prototype to return int,
this is backward incompatible.
This commit is contained in:
Milan Broz
2019-01-02 13:59:04 +01:00
parent e8a92b67c3
commit ee7ff024c1
2 changed files with 13 additions and 12 deletions

View File

@@ -352,6 +352,7 @@ LIBS=$saved_LIBS
dnl Check for JSON-C used in LUKS2
PKG_CHECK_MODULES([JSON_C], [json-c])
AC_CHECK_DECLS([json_object_object_add_ex], [], [], [#include <json-c/json.h>])
dnl Crypto backend configuration.
AC_ARG_WITH([crypto_backend],

View File

@@ -1963,24 +1963,24 @@ void LUKS2_hdr_repair(struct crypt_device *cd, json_object *hdr_jobj)
void json_object_object_del_by_uint(json_object *jobj, unsigned key)
{
int r;
char key_name[4];
char key_name[16];
r = snprintf(key_name, sizeof(key_name), "%u", key);
if (r >= 0 && (size_t)r < sizeof(key_name))
json_object_object_del(jobj, key_name);
if (snprintf(key_name, sizeof(key_name), "%u", key) < 1)
return;
json_object_object_del(jobj, key_name);
}
int json_object_object_add_by_uint(json_object *jobj, unsigned key, json_object *jobj_val)
{
int r;
char key_name[4];
char key_name[16];
r = snprintf(key_name, sizeof(key_name), "%u", key);
if (r < 0 || (size_t)r >= sizeof(key_name))
if (snprintf(key_name, sizeof(key_name), "%u", key) < 1)
return -EINVAL;
json_object_object_add(jobj, key_name, jobj_val);
return 0;
#if HAVE_DECL_JSON_OBJECT_OBJECT_ADD_EX
return json_object_object_add_ex(jobj, key_name, jobj_val, 0) ? -ENOMEM : 0;
#else
json_object_object_add(jobj, key_name, jobj_val);
return 0;
#endif
}