@@ -88,6 +88,9 @@
/* Define to 1 if you have the `__secure_getenv' function. */
#mesondefine HAVE___SECURE_GETENV
+/* Define to 1 if you have json_object_new_uint64 in json-c */
+#mesondefine HAVE_JSON_U64
+
/* Define to the sub-directory where libtool stores uninstalled libraries. */
#mesondefine LT_OBJDIR
@@ -159,17 +159,17 @@ static struct json_object *util_cxl_memdev_health_to_json(
}
field = cxl_cmd_health_info_get_dirty_shutdowns(cmd);
- jobj = json_object_new_int64(field);
+ jobj = util_json_new_u64(field);
if (jobj)
json_object_object_add(jhealth, "dirty_shutdowns", jobj);
field = cxl_cmd_health_info_get_volatile_errors(cmd);
- jobj = json_object_new_int64(field);
+ jobj = util_json_new_u64(field);
if (jobj)
json_object_object_add(jhealth, "volatile_errors", jobj);
field = cxl_cmd_health_info_get_pmem_errors(cmd);
- jobj = json_object_new_int64(field);
+ jobj = util_json_new_u64(field);
if (jobj)
json_object_object_add(jhealth, "pmem_errors", jobj);
@@ -190,7 +190,7 @@ struct json_object *util_daxctl_region_to_json(struct daxctl_region *region,
align = daxctl_region_get_align(region);
if (align < ULONG_MAX) {
- jobj = json_object_new_int64(align);
+ jobj = util_json_new_u64(align);
if (!jobj)
goto err;
json_object_object_add(jregion, "align", jobj);
@@ -241,6 +241,12 @@ foreach ident : ['secure_getenv', '__secure_getenv']
conf.set10('HAVE_' + ident.to_upper(), cc.has_function(ident))
endforeach
+conf.set10('HAVE_JSON_U64',
+ cc.has_function('json_object_new_uint64',
+ prefix : '''#include <json-c/json.h>''',
+ dependencies : json,
+ )
+)
ndctlconf_dir = sysconfdir / 'ndctl.conf.d'
ndctlconf = ndctlconf_dir / 'monitor.conf'
@@ -168,7 +168,7 @@ static struct json_object *dump_label_json(struct ndctl_dimm *dimm,
break;
json_object_object_add(jlabel, "isetcookie", jobj);
- jobj = json_object_new_int64(le64_to_cpu(nslabel.lbasize));
+ jobj = util_json_new_u64(le64_to_cpu(nslabel.lbasize));
if (!jobj)
break;
json_object_object_add(jlabel, "lbasize", jobj);
@@ -357,7 +357,7 @@ static struct json_object *util_##type##_build_size_array(struct ndctl_##type *a
int64_t align; \
\
align = get_elem(arg, i); \
- jobj = json_object_new_int64(align); \
+ jobj = util_json_new_u64(align); \
if (!jobj) \
goto err; \
json_object_array_add(arr, jobj); \
@@ -550,7 +550,7 @@ struct json_object *util_region_badblocks_to_json(struct ndctl_region *region,
if (!jbb)
goto err_array;
- jobj = json_object_new_int64(bb->offset);
+ jobj = util_json_new_u64(bb->offset);
if (!jobj)
goto err;
json_object_object_add(jbb, "offset", jobj);
@@ -604,7 +604,7 @@ static struct json_object *util_namespace_badblocks_to_json(
if (!jbb)
goto err_array;
- jobj = json_object_new_int64(bb->offset);
+ jobj = util_json_new_u64(bb->offset);
if (!jobj)
goto err;
json_object_object_add(jbb, "offset", jobj);
@@ -682,7 +682,7 @@ static struct json_object *dev_badblocks_to_json(struct ndctl_region *region,
if (!jbb)
goto err_array;
- jobj = json_object_new_int64(offset);
+ jobj = util_json_new_u64(offset);
if (!jobj)
goto err;
json_object_object_add(jbb, "offset", jobj);
@@ -972,7 +972,7 @@ struct json_object *util_namespace_to_json(struct ndctl_namespace *ndns,
}
if (align) {
- jobj = json_object_new_int64(align);
+ jobj = util_json_new_u64(align);
if (!jobj)
goto err;
json_object_object_add(jndns, "align", jobj);
@@ -82,7 +82,7 @@ struct json_object *util_json_object_size(unsigned long long size,
struct json_object *util_json_object_hex(unsigned long long val,
unsigned long flags)
{
- struct json_object *jobj = json_object_new_int64(val);
+ struct json_object *jobj = util_json_new_u64(val);
if (jobj && (flags & UTIL_JSON_HUMAN))
json_object_set_serializer(jobj, display_hex, NULL, NULL);
@@ -4,6 +4,7 @@
#define __UTIL_JSON_H__
#include <stdio.h>
#include <stdbool.h>
+#include <json-c/json.h>
enum util_json_flags {
UTIL_JSON_IDLE = (1 << 0),
@@ -19,11 +20,21 @@ enum util_json_flags {
UTIL_JSON_HEALTH = (1 << 10),
};
-struct json_object;
void util_display_json_array(FILE *f_out, struct json_object *jarray,
unsigned long flags);
struct json_object *util_json_object_size(unsigned long long size,
unsigned long flags);
struct json_object *util_json_object_hex(unsigned long long val,
unsigned long flags);
+#if HAVE_JSON_U64
+static inline struct json_object *util_json_new_u64(unsigned long long val)
+{
+ return json_object_new_uint64(val);
+}
+#else /* fallback to signed */
+static inline struct json_object *util_json_new_u64(unsigned long long val)
+{
+ return json_object_new_int64(val);
+}
+#endif /* HAVE_JSON_U64 */
#endif /* __UTIL_JSON_H__ */
Recent versions of json-c add a proper u64 type. However since ndctl still needs to build against older json-c add build infrastructure to fallback to s64. Signed-off-by: Dan Williams <dan.j.williams@intel.com> --- config.h.meson | 3 +++ cxl/json.c | 6 +++--- daxctl/json.c | 2 +- meson.build | 6 ++++++ ndctl/dimm.c | 2 +- ndctl/json.c | 10 +++++----- util/json.c | 2 +- util/json.h | 13 ++++++++++++- 8 files changed, 32 insertions(+), 12 deletions(-)