struct virQEMUQAPISchemaTraverseContext {
virHashTablePtr schema;
- char **query;
+ char **queries;
virJSONValuePtr returnType;
};
+static void
+virQEMUQAPISchemaTraverseContextInit(struct virQEMUQAPISchemaTraverseContext *ctxt,
+ char **queries,
+ virHashTablePtr schema)
+{
+ memset(ctxt, 0, sizeof(*ctxt));
+ ctxt->schema = schema;
+ ctxt->queries = queries;
+}
+
+
+static const char *
+virQEMUQAPISchemaTraverseContextNextQuery(struct virQEMUQAPISchemaTraverseContext *ctxt)
+{
+ const char *query = ctxt->queries[0];
+ ctxt->queries++;
+ return query;
+}
+
+
+static bool
+virQEMUQAPISchemaTraverseContextHasNextQuery(struct virQEMUQAPISchemaTraverseContext *ctxt)
+{
+ return !!ctxt->queries[0];
+}
+
+
static int
virQEMUQAPISchemaTraverse(const char *baseName,
struct virQEMUQAPISchemaTraverseContext *ctxt);
struct virQEMUQAPISchemaTraverseContext *ctxt)
{
virJSONValuePtr obj;
- const char *query = *ctxt->query;
+ const char *query = virQEMUQAPISchemaTraverseContextNextQuery(ctxt);
char modifier = *query;
if (!c_isalpha(modifier))
if (!obj)
return 0;
- ctxt->query++;
-
return virQEMUQAPISchemaTraverse(virJSONValueObjectGetString(obj, "type"), ctxt);
}
virQEMUQAPISchemaTraverseCommand(virJSONValuePtr cur,
struct virQEMUQAPISchemaTraverseContext *ctxt)
{
+ const char *query = virQEMUQAPISchemaTraverseContextNextQuery(ctxt);
const char *querytype;
- if (!(querytype = virJSONValueObjectGetString(cur, *ctxt->query)))
+ if (!(querytype = virJSONValueObjectGetString(cur, query)))
return 0;
- ctxt->query++;
-
return virQEMUQAPISchemaTraverse(querytype, ctxt);
}
if (!(cur = virHashLookup(ctxt->schema, baseName)))
return 0;
- if (!ctxt->query[0]) {
+ if (!virQEMUQAPISchemaTraverseContextHasNextQuery(ctxt)) {
ctxt->returnType = cur;
return 1;
}
virJSONValuePtr *entry)
{
VIR_AUTOSTRINGLIST elems = NULL;
- struct virQEMUQAPISchemaTraverseContext ctxt = { .schema = schema };
+ struct virQEMUQAPISchemaTraverseContext ctxt;
int rc;
if (entry)
return -1;
}
- ctxt.query = elems + 1;
+ virQEMUQAPISchemaTraverseContextInit(&ctxt, elems, schema);
- rc = virQEMUQAPISchemaTraverse(elems[0], &ctxt);
+ rc = virQEMUQAPISchemaTraverse(virQEMUQAPISchemaTraverseContextNextQuery(&ctxt), &ctxt);
if (entry)
*entry = ctxt.returnType;