void ldns_rr_set_class(ldns_rr *, ldns_rr_class);
bool ldns_rr_push_rdf(ldns_rr *, ldns_rdf *);
ldns_rdf *ldns_rr_rdf(const ldns_rr *, uint16_t);
+ldns_rdf * ldns_rr_set_rdf(ldns_rr *rr, ldns_rdf *f, uint16_t position);
ldns_rdf *ldns_rr_owner(const ldns_rr *);
uint32_t ldns_rr_ttl(const ldns_rr *);
uint16_t ldns_rr_rd_count(const ldns_rr *);
rr->_rr_class = rr_class;
}
+/**
+ * set a rdf member, it will be set on the
+ * position given. The old value is returned, like pop
+ */
+ldns_rdf *
+ldns_rr_set_rdf(ldns_rr *rr, ldns_rdf *f, uint16_t position)
+{
+ uint16_t rd_count;
+ ldns_rdf *pop;
+ ldns_rdf **rdata_fields;
+
+ rd_count = ldns_rr_rd_count(rr);
+ if (position > rd_count) {
+ return NULL;
+ }
+
+ rdata_fields = rr->_rdata_fields;
+ /* dicard the old one */
+ pop = rr->_rdata_fields[position];
+ rr->_rdata_fields[position] = f;
+ return pop;
+}
+
+
/**
* set rd_field member, it will be
* placed in the next available spot