+static int csp_qstring(vbuf *vb, const char *dp) {
+ return csp_textdata(vb, dp, strlen(dp));
+}
+
+static adns_status cs_str(vbuf *vb, const void *datap) {
+ const char *const *rrp= datap;
+
+ return csp_qstring(vb,*rrp) ? adns_s_ok : adns_s_nolocalmem;
+}
+
+static adns_status cs_intstr(vbuf *vb, const void *datap) {
+ const adns_rr_intstr *rrp= datap;
+ char buf[10];
+
+ sprintf(buf,"%u ",rrp->i);
+ return (adns__vbuf_appendstr(vb,buf) &&
+ csp_qstring(vb,rrp->str)) ? adns_s_ok : adns_s_nolocalmem;
+}
+
+static adns_status cs_manyistr(vbuf *vb, const void *datap) {
+ const adns_rr_intstr *const *rrp= datap;
+ const adns_rr_intstr *current;
+ int spc;
+
+ for (spc=0, current= *rrp; current->i >= 0; current++) {
+ if (spc)
+ if (!adns__vbuf_append(vb," ",1)) goto x_nomem;
+ if (!csp_textdata(vb,current->str,current->i)) goto x_nomem;
+ }
+ return adns_s_ok;