static void node_dump_text(knot_node_t *node, void *data) { dump_params_t *params = (dump_params_t *)data; // Zone apex rrsets. if (node->owner == params->origin) { apex_node_dump_text(node, params); return; } const knot_rrset_t **rrsets = knot_node_rrsets(node); // Dump non-apex rrsets. for (uint16_t i = 0; i < node->rrset_count; i++) { if (knot_rrset_txt_dump(rrsets[i], params->buf, params->buflen, params->style) < 0) { params->ret = KNOT_ENOMEM; free(rrsets); return; } params->rr_count += rrsets[i]->rdata_count; if (rrsets[i]->rrsigs != NULL) { params->rr_count += rrsets[i]->rrsigs->rdata_count; } fprintf(params->file, "%s", params->buf); } free(rrsets); params->ret = KNOT_EOK; }
static void apex_node_dump_text(knot_node_t *node, dump_params_t *params) { knot_rrset_t *rr = knot_node_get_rrset(node, KNOT_RRTYPE_SOA); // Dump SOA record as a first. if (knot_rrset_txt_dump(rr, params->buf, params->buflen, params->style) < 0) { params->ret = KNOT_ENOMEM; return; } params->rr_count += rr->rdata_count; if (rr->rrsigs != NULL) { params->rr_count += rr->rrsigs->rdata_count; } fprintf(params->file, "%s", params->buf); const knot_rrset_t **rrsets = knot_node_rrsets(node); // Dump other records. for (uint16_t i = 0; i < node->rrset_count; i++) { if (rrsets[i]->type != KNOT_RRTYPE_SOA) { if (knot_rrset_txt_dump(rrsets[i], params->buf, params->buflen, params->style) < 0) { params->ret = KNOT_ENOMEM; free(rrsets); return; } params->rr_count += rrsets[i]->rdata_count; if (rrsets[i]->rrsigs != NULL) { params->rr_count += rrsets[i]->rrsigs->rdata_count; } fprintf(params->file, "%s", params->buf); } } free(rrsets); params->ret = KNOT_EOK; }
static void print_section_full(const knot_rrset_t *rrsets, const uint16_t count, const style_t *style, const bool no_tsig) { size_t buflen = 8192; char *buf = calloc(buflen, 1); for (size_t i = 0; i < count; i++) { // Ignore OPT records. if (rrsets[i].type == KNOT_RRTYPE_OPT) { continue; } // Exclude TSIG record. if (no_tsig && rrsets[i].type == KNOT_RRTYPE_TSIG) { continue; } while (knot_rrset_txt_dump(&rrsets[i], buf, buflen, &(style->style)) < 0) { buflen += 4096; // Oversize protection. if (buflen > 100000) { WARN("can't print whole section\n"); break; } char *newbuf = realloc(buf, buflen); if (newbuf == NULL) { WARN("can't print whole section\n"); break; } buf = newbuf; } printf("%s", buf); } free(buf); }