#include "nvme.h"
#include "common.h"
+#define ERROR_MSG_LEN 100
+
static const uint8_t zero_uuid[16] = { 0 };
void json_nvme_id_ns(struct nvme_id_ns *ns, bool cap_only)
json_output_object(root);
}
+
+void json_output_error(const char *msg, va_list ap)
+{
+ struct json_object *root = json_create_object();
+ int len = ERROR_MSG_LEN;
+ char *error = (char *)malloc(ERROR_MSG_LEN);
+
+ if (!error)
+ return;
+
+ len = vsnprintf(error, len, msg, ap) + 1;
+ if (len > ERROR_MSG_LEN) {
+ error = (char *)realloc(error, len);
+ if (!error)
+ return;
+ vsnprintf(error, len, msg, ap);
+ }
+
+ json_object_add_value_string(root, "error", error);
+
+ json_output_object(root);
+
+ free(error);
+}
struct nvme_nvmset_predictable_lat_log *plpns_log,
__u16 nvmset_id);
void json_output_status(int status);
+void json_output_error(const char *msg, va_list ap);
/* fabrics.c */
void json_discovery_log(struct nvmf_discovery_log *log, int numrec);
#define json_predictable_latency_event_agg_log(pea_log, log_entries)
#define json_predictable_latency_per_nvmset(plpns_log, nvmset_id)
#define json_output_status(status)
+#define json_output_error(const char *msg, va_list ap)
/* fabrics.c */
#define json_discovery_log(log, numrec)
else
nvme_show_simple_topology(r, ranking);
}
+
+void nvme_show_error(const char *msg, ...)
+{
+ va_list ap;
+ va_start(ap, msg);
+
+ if (argconfig_output_format_json(false))
+ return json_output_error(msg, ap);
+
+ vfprintf(stderr, msg, ap);
+
+ printf("\n");
+
+ va_end(ap);
+}
const char *nvme_pel_event_to_string(int type);
const char *get_sanitize_log_sstat_status_str(__u16 status);
const char *nvme_ana_state_to_string(enum nvme_ana_state state);
+void nvme_show_error(const char *msg, ...);
#endif
if (flags < 0)
return err;
if (flags != JSON && flags != NORMAL) {
- fprintf(stderr, "Invalid output format\n");
+ nvme_show_error("Invalid output format");
return -EINVAL;
}
if (cfg.verbose)
r = nvme_create_root(stderr, map_log_level(cfg.verbose, false));
if (!r) {
- fprintf(stderr, "Failed to create topology root: %s\n",
- nvme_strerror(errno));
+ nvme_show_error("Failed to create topology root: %s", nvme_strerror(errno));
return -errno;
}
err = nvme_scan_topology(r, NULL, NULL);
if (err < 0) {
- fprintf(stderr, "Failed to scan topology: %s\n",
- nvme_strerror(errno));
+ nvme_show_error("Failed to scan topology: %s", nvme_strerror(errno));
nvme_free_tree(r);
return err;
}