+ return 0;
+}
+
+int sru_decode_surrogate_diagnostics(const char *buf, size_t len,
+ Z_SRW_diagnostic **diag,
+ int *num, ODR odr)
+{
+ int ret = 0;
+ xmlDocPtr doc = xmlParseMemory(buf, len);
+ if (doc)
+ {
+ xmlNodePtr ptr = xmlDocGetRootElement(doc);
+ while (ptr && ptr->type != XML_ELEMENT_NODE)
+ ptr = ptr->next;
+ if (ptr && ptr->ns
+ && !xmlStrcmp(ptr->ns->href,
+ BAD_CAST "http://www.loc.gov/zing/srw/diagnostic/"))
+ {
+ ret = yaz_srw_decode_diagnostics(odr, ptr, diag, num, 0, 0);
+ }
+ xmlFreeDoc(doc);
+ }
+ return ret;
+}
+
+static int yaz_srw_diagnostics(ODR o, xmlNodePtr pptr, Z_SRW_diagnostic **recs,
+ int *num, void *client_data, const char *ns)
+{
+ if (o->direction == ODR_DECODE)
+ {
+ return yaz_srw_decode_diagnostics(o, pptr->children, recs, num, client_data, ns);
+ }