+
+ wrbuf_write(record, input_record_buf, input_record_len);
+ for (; ret == 0 && r; r = r->next)
+ {
+ if (r->which == YAZ_RECORD_CONV_RULE_MARC)
+ {
+ yaz_marc_t mt = yaz_marc_create();
+
+ yaz_marc_xml(mt, r->u.marc.output_format);
+
+ if (r->u.marc.iconv_t)
+ yaz_marc_iconv(mt, r->u.marc.iconv_t);
+ if (r->u.marc.input_format == YAZ_MARC_ISO2709)
+ {
+ int sz = yaz_marc_read_iso2709(mt, wrbuf_buf(record),
+ wrbuf_len(record));
+ if (sz > 0)
+ ret = 0;
+ else
+ ret = -1;
+ }
+ else if (r->u.marc.input_format == YAZ_MARC_MARCXML)
+ {
+ xmlDocPtr doc = xmlParseMemory(wrbuf_buf(record),
+ wrbuf_len(record));
+ if (!doc)
+ {
+ wrbuf_printf(p->wr_error, "xmlParseMemory failed");
+ ret = -1;
+ }
+ else
+ {
+ ret = yaz_marc_read_xml(mt, xmlDocGetRootElement(doc));
+ if (ret)
+ wrbuf_printf(p->wr_error, "yaz_marc_read_xml failed");
+ }
+ xmlFreeDoc(doc);
+ }
+ else
+ {
+ wrbuf_printf(p->wr_error, "unsupported input format");
+ ret = -1;
+ }
+ if (ret == 0)
+ {
+ wrbuf_rewind(record);
+ ret = yaz_marc_write_mode(mt, record);
+ if (ret)
+ wrbuf_printf(p->wr_error, "yaz_marc_write_mode failed");
+ }
+ yaz_marc_destroy(mt);
+ }
+#if YAZ_HAVE_XSLT
+ else if (r->which == YAZ_RECORD_CONV_RULE_XSLT)
+ {
+ xmlDocPtr doc = xmlParseMemory(wrbuf_buf(record),
+ wrbuf_len(record));
+ if (!doc)
+ {
+ wrbuf_printf(p->wr_error, "xmlParseMemory failed");
+ ret = -1;
+ }
+ else
+ {
+ xmlDocPtr res = xsltApplyStylesheet(r->u.xslt.xsp, doc, 0);
+ if (res)
+ {
+ xmlChar *out_buf = 0;
+ int out_len;