cbor print ok

This commit is contained in:
merlokk 2018-11-17 01:31:08 +02:00
commit 563086c935

View file

@ -121,7 +121,8 @@ static CborError dumpelm(CborValue *it, bool *got_next, int nestingLevel) {
return CborNoError; return CborNoError;
} }
static CborError dumprecursive(CborValue *it, int nestingLevel) { static CborError dumprecursive(CborValue *it, bool isMapType, int nestingLevel) {
int elmCount = 0;
while (!cbor_value_at_end(it)) { while (!cbor_value_at_end(it)) {
CborError err; CborError err;
CborType type = cbor_value_get_type(it); CborType type = cbor_value_get_type(it);
@ -129,63 +130,35 @@ static CborError dumprecursive(CborValue *it, int nestingLevel) {
bool got_next; bool got_next;
switch (type) { switch (type) {
case CborMapType: /*{ case CborMapType:
// recursive type
CborValue recursed;
assert(cbor_value_is_container(it));
printf("Map[\n");
err = cbor_value_enter_container(it, &recursed);
if (err)
return err; // parse error
// name
err = dumpelm(&recursed, next!!!!, nestingLevel + 1);
if (err)
return err;
printf(":");
err = cbor_value_advance_fixed(it);
if (err)
return err;
// value
printf("*");
err = dumprecursive(&recursed, nestingLevel + 1);
if (err)
return err; // parse error
err = cbor_value_leave_container(it, &recursed);
if (err)
return err; // parse error
indent(nestingLevel);
printf("]\n");
continue;
}*/
case CborArrayType: { case CborArrayType: {
// recursive type // recursive type
CborValue recursed; CborValue recursed;
assert(cbor_value_is_container(it)); assert(cbor_value_is_container(it));
if (!(isMapType && (elmCount % 2)))
indent(nestingLevel); indent(nestingLevel);
printf(type == CborArrayType ? "Array[\n" : "Map[\n"); printf(type == CborArrayType ? "Array[\n" : "Map[\n");
err = cbor_value_enter_container(it, &recursed); err = cbor_value_enter_container(it, &recursed);
if (err) if (err)
return err; // parse error return err; // parse error
err = dumprecursive(&recursed, nestingLevel + 1); err = dumprecursive(&recursed, (type == CborMapType), nestingLevel + 1);
if (err) if (err)
return err; // parse error return err; // parse error
err = cbor_value_leave_container(it, &recursed); err = cbor_value_leave_container(it, &recursed);
if (err) if (err)
return err; // parse error return err; // parse error
indent(nestingLevel); indent(nestingLevel);
printf("]\n"); printf("]");
continue; got_next = true;
break;
} }
default: { default: {
err = dumpelm(it, &got_next, nestingLevel); err = dumpelm(it, &got_next, (isMapType && (elmCount % 2)) ? 0 : nestingLevel);
printf("\n");
if (err) if (err)
return err; return err;
// if (nestingLevel == 1 && isMapType && !(elmCount % 2))
// printf(" ()");
break; break;
} }
} }
@ -195,6 +168,12 @@ printf("*");
if (err) if (err)
return err; return err;
} }
if (isMapType && !(elmCount % 2)) {
printf(": ");
} else {
printf("\n");
}
elmCount++;
} }
return CborNoError; return CborNoError;
} }
@ -217,7 +196,7 @@ int TinyCborPrintFIDOPackage(uint8_t *data, size_t length) {
CborError err = dumprecursive(&cb, 0); CborError err = dumprecursive(&cb, false, 0);
if (err) { if (err) {
fprintf(stderr, "CBOR parsing failure at offset %d: %s\n", fprintf(stderr, "CBOR parsing failure at offset %d: %s\n",