return YACErrUnexpectedEOC;
}
}
+ printf("%04zd ", *off);
for (ptrdiff_t i = 0; i < state->indent; i++) {
fputs(" ", stdout);
}
enum YACErr err = YACErrInvalid;
switch (atom->typ) {
case YACItemEOC:
- fputs("]\n", stdout);
break;
case YACItemNIL:
fputs("NIL\n", stdout);
break;
case YACItemUUID:
printf(
- "UUID[%02x%02x%02x%02x-%02x%02x-%02x%02x-%02x%02x-%02x%02x%02x%02x%02x%02x]\n",
+ "UUID(%02x%02x%02x%02x-%02x%02x-%02x%02x-%02x%02x-%02x%02x%02x%02x%02x%02x)\n",
atom->val.buf[0],
atom->val.buf[1],
atom->val.buf[2],
fprintf(stdout, "%zd\n", atom->val.sint);
break;
case YACItemList:
- fputs("LIST [\n", stdout);
+ fputs("[\n", stdout);
state->indent++;
err = YACIterList(cbState, atom, off, buf, len, myCb);
if (err != YACErrNo) {
return err;
}
+ fputs("]\n", stdout);
break;
case YACItemMap:
- fputs("MAP [\n", stdout);
+ fputs("{\n", stdout);
state->indent++;
err = YACIterMap(cbState, atom, off, buf, len, myCb);
if (err != YACErrNo) {
return err;
}
+ fputs("}\n", stdout);
break;
case YACItemBlob:
- fputs("BLOB [\n", stdout);
+ fputs("BLOB(\n", stdout);
state->indent++;
err = YACIterBlob(cbState, atom, off, buf, len, myCb);
if (err != YACErrNo) {
return err;
}
+ fputs(")\n", stdout);
break;
case YACItemFloat:
fputs("FLOAT: TODO\n", stdout);
case YACItemTAI64:
if ((atom->len) == 16) {
hex = HexEnc(atom->val.buf, atom->len);
- fprintf(stdout, "TAI64NA: %s\n", hex);
+ fprintf(stdout, "TAI64NA(%s)\n", hex);
free(hex);
break;
}
switch (atom->len) {
case 8:
- fputs("TAI64: ", stdout);
+ fputs("TAI64(", stdout);
break;
case 12:
- fputs("TAI64N: ", stdout);
+ fputs("TAI64N(", stdout);
break;
}
struct timeval tv;
err = YACTAI64ToTimeval(&tv, atom->val.buf, atom->len);
if (err == YACErrTAI64BadNsec) {
hex = HexEnc(atom->val.buf, atom->len);
- fprintf(stdout, "unrepresentable: %s\n", hex);
+ fprintf(stdout, "unrepresentable: %s)\n", hex);
free(hex);
break;
}
struct tm *tm = localtime(&t);
if (tm == NULL) {
hex = HexEnc(atom->val.buf, atom->len);
- fprintf(stdout, "unrepresentable: %s\n", hex);
+ fprintf(stdout, "unrepresentable: %s)\n", hex);
free(hex);
break;
}
if ((atom->len) == 12) {
fprintf(stdout, ".%zu", tv.tv_usec);
}
- fputs("\n", stdout);
+ fputs(")\n", stdout);
break;
case YACItemBin:
hex = HexEnc(atom->val.buf, atom->len);
- fprintf(stdout, "BIN(%s)\n", hex);
+ fprintf(stdout, "%zu:%s\n", atom->len, hex);
free(hex);
break;
case YACItemStr:
break;
case YACItemChunk:
hex = HexEnc(atom->val.buf, atom->len);
- fprintf(stdout, "CHUNK(%s)\n", hex);
+ fprintf(stdout, "%s\n", hex);
free(hex);
break;
case YACItemChunkLen:
- fprintf(stdout, "chunkLen: %zu\n", atom->val.uint);
+ fprintf(stdout, "l=%zu\n", atom->val.uint);
break;
case YACItemRaw:
hex = HexEnc(atom->val.buf, atom->len);
- fprintf(stdout, "RAW: 0x%X %s\n", atom->tag, hex);
+ fprintf(stdout, "(t=0x%X l=%zu v=%s)\n", atom->tag, atom->len, hex);
free(hex);
break;
default:
fprintf(stderr, "map err: %d\n", err);
return EXIT_FAILURE;
}
- if (atom.typ != YACItemMap) {
- fputs("non map\n", stderr);
- return EXIT_FAILURE;
- }
off += atom.off;
- struct CbState cbState = {.indent = 1};
- fputs("MAP [\n", stdout);
- err = YACIterMap(&cbState, &atom, &off, buf, len, myCb);
+ struct CbState cbState = {.indent = 0};
+ err = myCb(NULL, 0, -1, &cbState, &atom, &off, buf, len);
if (err != YACErrNo) {
- fprintf(stderr, "iter err: %d\n", err);
+ fprintf(stderr, "err: %d\n", err);
return EXIT_FAILURE;
}
assert(cbState.indent == 0);
return YACErrLenTooBig;
}
atom->typ = YACItemChunkLen;
- err = cb(NULL, 0, 0, cbState, atom, off, buf, len);
+ err = cb(NULL, 0, -1, cbState, atom, off, buf, len);
if (err != YACErrNo) {
return err;
}
if (((ptrdiff_t)len - *off) <= (ptrdiff_t)chunkLen) {
return YACErrBlobShortChunk;
}
+ atom->typ = YACItemChunk;
atom->val.buf = buf + *off;
atom->len = chunkLen;
(*off) += chunkLen;
default:
return YACErrBlobBadAtom;
}
- if ((atom->len) > 0) {
- atom->typ = YACItemChunk;
- err = cb(NULL, 0, (ptrdiff_t)n, cbState, atom, off, buf, len);
- if (err != YACErrNo) {
- return err;
- }
+ err = cb(NULL, 0, (ptrdiff_t)n, cbState, atom, off, buf, len);
+ if (err != YACErrNo) {
+ return err;
}
}
atom->typ = YACItemEOC;