} range_start, range_end;
GList *ranges;
void *list; /* Only needed for sanity checking the caller */
+ unsigned int struct_nesting;
};
static StringOutputVisitor *to_sov(Visitor *v)
StringOutputVisitor *sov = to_sov(v);
GList *l;
+ if (sov->struct_nesting) {
+ return true;
+ }
+
switch (sov->list_mode) {
case LM_NONE:
string_output_append(sov, *obj);
uint64_t val;
char *out, *psize;
+ if (sov->struct_nesting) {
+ return true;
+ }
+
if (!sov->human) {
out = g_strdup_printf("%"PRIu64, *obj);
string_output_set(sov, out);
Error **errp)
{
StringOutputVisitor *sov = to_sov(v);
+
+ if (sov->struct_nesting) {
+ return true;
+ }
+
string_output_set(sov, g_strdup(*obj ? "true" : "false"));
return true;
}
StringOutputVisitor *sov = to_sov(v);
char *out;
+ if (sov->struct_nesting) {
+ return true;
+ }
+
if (sov->human) {
out = *obj ? g_strdup_printf("\"%s\"", *obj) : g_strdup("<null>");
} else {
Error **errp)
{
StringOutputVisitor *sov = to_sov(v);
+
+ if (sov->struct_nesting) {
+ return true;
+ }
+
string_output_set(sov, g_strdup_printf("%.17g", *obj));
return true;
}
StringOutputVisitor *sov = to_sov(v);
char *out;
+ if (sov->struct_nesting) {
+ return true;
+ }
+
if (sov->human) {
out = g_strdup("<null>");
} else {
static bool start_struct(Visitor *v, const char *name, void **obj,
size_t size, Error **errp)
{
+ StringOutputVisitor *sov = to_sov(v);
+
+ sov->struct_nesting++;
return true;
}
{
StringOutputVisitor *sov = to_sov(v);
+ if (--sov->struct_nesting) {
+ return;
+ }
+
/* TODO actually print struct fields */
string_output_set(sov, g_strdup("<omitted>"));
}
{
StringOutputVisitor *sov = to_sov(v);
+ if (sov->struct_nesting) {
+ return true;
+ }
+
/* we can't traverse a list in a list */
assert(sov->list_mode == LM_NONE);
/* We don't support visits without a list */
StringOutputVisitor *sov = to_sov(v);
GenericList *ret = tail->next;
+ if (sov->struct_nesting) {
+ return ret;
+ }
+
if (ret && !ret->next) {
sov->list_mode = LM_END;
}
{
StringOutputVisitor *sov = to_sov(v);
+ if (sov->struct_nesting) {
+ return;
+ }
+
assert(sov->list == obj);
assert(sov->list_mode == LM_STARTED ||
sov->list_mode == LM_END ||