static isc_result_t table_towire(isccc_sexpr_t *alist, isccc_region_t *target) { isccc_sexpr_t *kv, *elt, *k, *v; char *ks; isc_result_t result; size_t len; for (elt = isccc_alist_first(alist); elt != NULL; elt = ISCCC_SEXPR_CDR(elt)) { kv = ISCCC_SEXPR_CAR(elt); k = ISCCC_SEXPR_CAR(kv); ks = isccc_sexpr_tostring(k); v = ISCCC_SEXPR_CDR(kv); len = strlen(ks); INSIST(len <= 255U); /* * Emit the key name. */ if (REGION_SIZE(*target) < 1 + len) return (ISC_R_NOSPACE); PUT8(len, target->rstart); PUT_MEM(ks, len, target->rstart); /* * Emit the value. */ result = value_towire(v, target); if (result != ISC_R_SUCCESS) return (result); } return (ISC_R_SUCCESS); }
void isccc_alist_prettyprint(isccc_sexpr_t *sexpr, unsigned int indent, FILE *stream) { isccc_sexpr_t *elt, *kv, *k, *v; if (isccc_alist_alistp(sexpr)) { fprintf(stream, "{\n"); indent += 4; for (elt = isccc_alist_first(sexpr); elt != NULL; elt = CDR(elt)) { kv = CAR(elt); INSIST(isccc_sexpr_listp(kv)); k = CAR(kv); v = CDR(kv); INSIST(isccc_sexpr_stringp(k)); fprintf(stream, "%.*s%s => ", (int)indent, spaces, isccc_sexpr_tostring(k)); isccc_alist_prettyprint(v, indent, stream); if (CDR(elt) != NULL) fprintf(stream, ","); fprintf(stream, "\n"); } indent -= 4; fprintf(stream, "%.*s}", (int)indent, spaces); } else if (isccc_sexpr_listp(sexpr)) { fprintf(stream, "(\n"); indent += 4; for (elt = sexpr; elt != NULL; elt = CDR(elt)) { fprintf(stream, "%.*s", (int)indent, spaces); isccc_alist_prettyprint(CAR(elt), indent, stream); if (CDR(elt) != NULL) fprintf(stream, ","); fprintf(stream, "\n"); } indent -= 4; fprintf(stream, "%.*s)", (int)indent, spaces); } else isccc_sexpr_print(sexpr, stream); }