}
+int
+virQEMUBuildCommandLineJSONArrayNumbered(const char *key,
+ const virJSONValue *array,
+ virBufferPtr buf)
+{
+ const virJSONValue *member;
+ size_t nelems = virJSONValueArraySize(array);
+ char *prefix = NULL;
+ size_t i;
+ int ret = 0;
+
+ for (i = 0; i < nelems; i++) {
+ member = virJSONValueArrayGet((virJSONValuePtr) array, i);
+
+ if (virAsprintf(&prefix, "%s.%zu", key, i) < 0)
+ goto cleanup;
+
+ if (virQEMUBuildCommandLineJSONRecurse(prefix, member, buf,
+ virQEMUBuildCommandLineJSONArrayNumbered,
+ true) < 0)
+ goto cleanup;
+
+ VIR_FREE(prefix);
+ }
+
+ ret = 0;
+
+ cleanup:
+ VIR_FREE(prefix);
+ return ret;
+}
+
+
/* internal iterator to handle nested object formatting */
static int
virQEMUBuildCommandLineJSONIterate(const char *key,
{
const char *props;
const char *expectprops;
+ virQEMUBuildCommandLineJSONArrayFormatFunc arrayfunc;
} testQemuCommandBuildObjectFromJSONData;
static int
return -1;
}
- if (virQEMUBuildCommandLineJSON(val, &buf,
- virQEMUBuildCommandLineJSONArrayBitmap) < 0) {
+ if (virQEMUBuildCommandLineJSON(val, &buf, data->arrayfunc) < 0) {
fprintf(stderr,
"\nvirQEMUBuildCommandlineJSON failed process JSON:\n%s\n",
data->props);
virTestCounterReset("testQemuCommandBuildFromJSON");
-#define DO_TEST_COMMAND_OBJECT_FROM_JSON(PROPS, EXPECT) \
+#define DO_TEST_COMMAND_FROM_JSON(PROPS, ARRAYFUNC, EXPECT) \
do { \
data1.props = PROPS; \
data1.expectprops = EXPECT; \
+ data1.arrayfunc = ARRAYFUNC; \
if (virTestRun(virTestCounterNext(), \
testQemuCommandBuildFromJSON, \
&data1) < 0) \
ret = -1; \
} while (0)
+#define DO_TEST_COMMAND_OBJECT_FROM_JSON(PROPS, EXPECT) \
+ DO_TEST_COMMAND_FROM_JSON(PROPS, virQEMUBuildCommandLineJSONArrayBitmap, EXPECT)
+
+#define DO_TEST_COMMAND_DRIVE_FROM_JSON(PROPS, EXPECT) \
+ DO_TEST_COMMAND_FROM_JSON(PROPS, virQEMUBuildCommandLineJSONArrayNumbered, EXPECT)
+
DO_TEST_COMMAND_OBJECT_FROM_JSON("{}", NULL);
DO_TEST_COMMAND_OBJECT_FROM_JSON("{\"string\":\"qwer\"}", "string=qwer");
DO_TEST_COMMAND_OBJECT_FROM_JSON("{\"string\":\"qw,e,r\"}", "string=qw,,e,,r");
"}",
"nest.boolean=yes,nest.hyphen-name=1234,"
"nest.some_string=bleah,nest.bleah=bl,,eah");
+ DO_TEST_COMMAND_DRIVE_FROM_JSON("{\"driver\":\"gluster\","
+ "\"volume\":\"test\","
+ "\"path\":\"img\","
+ "\"server\":[ { \"type\":\"tcp\","
+ "\"host\":\"example.com\","
+ "\"port\":\"1234\""
+ "},"
+ "{ \"type\":\"unix\","
+ "\"socket\":\"/path/socket\""
+ "},"
+ "{ \"type\":\"tcp\","
+ "\"host\":\"example.com\""
+ "}"
+ "]"
+ "}",
+ "driver=gluster,volume=test,path=img,"
+ "server.0.type=tcp,"
+ "server.0.host=example.com,"
+ "server.0.port=1234,"
+ "server.1.type=unix,"
+ "server.1.socket=/path/socket,"
+ "server.2.type=tcp,"
+ "server.2.host=example.com");
return ret;