From: "Daniel P. Berrange" <berrange(a)redhat.com>
While the QEMU monitor/agent do not want JSON strings pretty
printed, other parts of libvirt might. Instead of hardcoding
QEMU's desired behaviour in virJSONValueToString(), add a
boolean flag to control pretty printing
Signed-off-by: Daniel P. Berrange <berrange(a)redhat.com>
---
src/qemu/qemu_agent.c | 10 +++++-----
src/qemu/qemu_monitor_json.c | 12 ++++++------
src/util/json.c | 9 +++++----
src/util/json.h | 3 ++-
4 files changed, 18 insertions(+), 16 deletions(-)
diff --git a/src/qemu/qemu_agent.c b/src/qemu/qemu_agent.c
index 15af758..513f1d5 100644
--- a/src/qemu/qemu_agent.c
+++ b/src/qemu/qemu_agent.c
@@ -993,7 +993,7 @@ qemuAgentCommand(qemuAgentPtr mon,
memset(&msg, 0, sizeof(msg));
- if (!(cmdstr = virJSONValueToString(cmd))) {
+ if (!(cmdstr = virJSONValueToString(cmd, false))) {
virReportOOMError();
goto cleanup;
}
@@ -1107,8 +1107,8 @@ qemuAgentCheckError(virJSONValuePtr cmd,
{
if (virJSONValueObjectHasKey(reply, "error")) {
virJSONValuePtr error = virJSONValueObjectGet(reply, "error");
- char *cmdstr = virJSONValueToString(cmd);
- char *replystr = virJSONValueToString(reply);
+ char *cmdstr = virJSONValueToString(cmd, false);
+ char *replystr = virJSONValueToString(reply, false);
/* Log the full JSON formatted command & error */
VIR_DEBUG("unable to execute QEMU command %s: %s",
@@ -1129,8 +1129,8 @@ qemuAgentCheckError(virJSONValuePtr cmd,
VIR_FREE(replystr);
return -1;
} else if (!virJSONValueObjectHasKey(reply, "return")) {
- char *cmdstr = virJSONValueToString(cmd);
- char *replystr = virJSONValueToString(reply);
+ char *cmdstr = virJSONValueToString(cmd, false);
+ char *replystr = virJSONValueToString(reply, false);
VIR_DEBUG("Neither 'return' nor 'error' is set in the JSON
reply %s: %s",
cmdstr, replystr);
diff --git a/src/qemu/qemu_monitor_json.c b/src/qemu/qemu_monitor_json.c
index 3ede88d..14842e9 100644
--- a/src/qemu/qemu_monitor_json.c
+++ b/src/qemu/qemu_monitor_json.c
@@ -243,7 +243,7 @@ qemuMonitorJSONCommandWithFd(qemuMonitorPtr mon,
}
}
- if (!(cmdstr = virJSONValueToString(cmd))) {
+ if (!(cmdstr = virJSONValueToString(cmd, false))) {
virReportOOMError();
goto cleanup;
}
@@ -328,8 +328,8 @@ qemuMonitorJSONCheckError(virJSONValuePtr cmd,
{
if (virJSONValueObjectHasKey(reply, "error")) {
virJSONValuePtr error = virJSONValueObjectGet(reply, "error");
- char *cmdstr = virJSONValueToString(cmd);
- char *replystr = virJSONValueToString(reply);
+ char *cmdstr = virJSONValueToString(cmd, false);
+ char *replystr = virJSONValueToString(reply, false);
/* Log the full JSON formatted command & error */
VIR_DEBUG("unable to execute QEMU command %s: %s",
@@ -350,8 +350,8 @@ qemuMonitorJSONCheckError(virJSONValuePtr cmd,
VIR_FREE(replystr);
return -1;
} else if (!virJSONValueObjectHasKey(reply, "return")) {
- char *cmdstr = virJSONValueToString(cmd);
- char *replystr = virJSONValueToString(reply);
+ char *cmdstr = virJSONValueToString(cmd, false);
+ char *replystr = virJSONValueToString(reply, false);
VIR_DEBUG("Neither 'return' nor 'error' is set in the JSON
reply %s: %s",
cmdstr, replystr);
@@ -3354,7 +3354,7 @@ int qemuMonitorJSONArbitraryCommand(qemuMonitorPtr mon,
if (qemuMonitorJSONCommand(mon, cmd, &reply) < 0)
goto cleanup;
- if (!(*reply_str = virJSONValueToString(reply)))
+ if (!(*reply_str = virJSONValueToString(reply, false)))
goto cleanup;
}
diff --git a/src/util/json.c b/src/util/json.c
index 5132989..8687a16 100644
--- a/src/util/json.c
+++ b/src/util/json.c
@@ -1054,14 +1054,15 @@ static int virJSONValueToStringOne(virJSONValuePtr object,
return 0;
}
-char *virJSONValueToString(virJSONValuePtr object)
+char *virJSONValueToString(virJSONValuePtr object,
+ bool pretty)
{
yajl_gen g;
const unsigned char *str;
char *ret = NULL;
yajl_size_t len;
# ifndef HAVE_YAJL2
- yajl_gen_config conf = { 0, " " }; /* Turns off pretty printing since QEMU
can't cope */
+ yajl_gen_config conf = { pretty ? 1 : 0, pretty ? " " : " "};
# endif
VIR_DEBUG("object=%p", object);
@@ -1069,8 +1070,8 @@ char *virJSONValueToString(virJSONValuePtr object)
# ifdef HAVE_YAJL2
g = yajl_gen_alloc(NULL);
if (g) {
- yajl_gen_config(g, yajl_gen_beautify, 0);
- yajl_gen_config(g, yajl_gen_indent_string, " ");
+ yajl_gen_config(g, yajl_gen_beautify, pretty ? 1 : 0);
+ yajl_gen_config(g, yajl_gen_indent_string, pretty ? " " : "
");
yajl_gen_config(g, yajl_gen_validate_utf8, 1);
}
# else
diff --git a/src/util/json.h b/src/util/json.h
index c8bd504..bdba3dd 100644
--- a/src/util/json.h
+++ b/src/util/json.h
@@ -132,6 +132,7 @@ int virJSONValueObjectAppendBoolean(virJSONValuePtr object, const char
*key, int
int virJSONValueObjectAppendNull(virJSONValuePtr object, const char *key);
virJSONValuePtr virJSONValueFromString(const char *jsonstring);
-char *virJSONValueToString(virJSONValuePtr object);
+char *virJSONValueToString(virJSONValuePtr object,
+ bool pretty);
#endif /* __VIR_JSON_H_ */
--
1.7.11.2