]> xenbits.xensource.com Git - people/liuw/libxenctrl-split/libvirt.git/commitdiff
Allow control over JSON string pretty printing
authorDaniel P. Berrange <berrange@redhat.com>
Thu, 9 Aug 2012 10:46:29 +0000 (11:46 +0100)
committerDaniel P. Berrange <berrange@redhat.com>
Wed, 15 Aug 2012 09:55:51 +0000 (10:55 +0100)
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@redhat.com>
src/qemu/qemu_agent.c
src/qemu/qemu_monitor_json.c
src/util/json.c
src/util/json.h

index 15af7581c137fb5f8edf7c7be8de899c237702ed..513f1d5ddcfe0a5b8b328e11396b24e97573ae14 100644 (file)
@@ -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);
index 7e482d132bef6693e0f028746105863b83a11959..cba97a70c6d6a3ec2ce52a2b1a1bbbe2db17ff92 100644 (file)
@@ -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;
     }
 
index 40d50a1db364436024fc07360ccbc9f10b0cd1c6..30184acfd0371f9c32867f6ae585e05278a53d7f 100644 (file)
@@ -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
index c8bd5049dcad16268feecf250e703a57e18617e5..bdba3ddb946e87dc78a2426c9386801348ec8f44 100644 (file)
@@ -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_ */