X-Git-Url: http://git.indexdata.com/?a=blobdiff_plain;f=index%2Fmod_dom.c;h=fca04eb75ce2c6812a49a48b8af6184080a8a4e2;hb=7bc692d5bc6971008fc2e1e37d63c080383d6a3e;hp=4457c954e2f2440c6e7b75796cc5e4eca163b4ec;hpb=e306088f1dbf196ce1355541c5cae201cc388554;p=idzebra-moved-to-github.git diff --git a/index/mod_dom.c b/index/mod_dom.c index 4457c95..fca04eb 100644 --- a/index/mod_dom.c +++ b/index/mod_dom.c @@ -1,4 +1,4 @@ -/* $Id: mod_dom.c,v 1.16 2007-02-18 21:53:22 adam Exp $ +/* $Id: mod_dom.c,v 1.26 2007-03-03 21:39:10 adam Exp $ Copyright (C) 1995-2007 Index Data ApS @@ -23,9 +23,11 @@ #include #include #include +#include #include #include +#include #include #include @@ -106,12 +108,43 @@ struct filter_info { struct filter_retrieve *retrieve_list; struct filter_input *input_list; struct filter_store *store; + int record_info_invoked; }; + + #define XML_STRCMP(a,b) strcmp((char*)a, b) #define XML_STRLEN(a) strlen((char*)a) +#define FOR_EACH_ELEMENT(ptr) for (; ptr; ptr = ptr->next) if (ptr->type == XML_ELEMENT_NODE) + +static void dom_log(int level, struct filter_info *tinfo, xmlNodePtr ptr, + const char *fmt, ...) +#ifdef __GNUC__ + __attribute__ ((format (printf, 4, 5))) +#endif + ; + +static void dom_log(int level, struct filter_info *tinfo, xmlNodePtr ptr, + const char *fmt, ...) +{ + va_list ap; + char buf[4096]; + + va_start(ap, fmt); + yaz_vsnprintf(buf, sizeof(buf)-1, fmt, ap); + if (ptr) + { + yaz_log(level, "%s:%ld: %s", tinfo->fname ? tinfo->fname : "none", + xmlGetLineNo(ptr), buf); + } + else + { + yaz_log(level, "%s: %s", tinfo->fname ? tinfo->fname : "none", buf); + } + va_end(ap); +} static void set_param_str(const char **params, const char *name, @@ -151,6 +184,7 @@ static void *filter_init(Res res, RecType recType) tinfo->input_list = 0; tinfo->store = 0; tinfo->doc_config = 0; + tinfo->record_info_invoked = 0; #if YAZ_HAVE_EXSLT exsltRegisterAll(); @@ -233,10 +267,7 @@ static ZEBRA_RES parse_convert(struct filter_info *tinfo, xmlNodePtr ptr, struct convert_s **l) { *l = 0; - for(; ptr; ptr = ptr->next) - { - if (ptr->type != XML_ELEMENT_NODE) - continue; + FOR_EACH_ELEMENT(ptr) { if (!XML_STRCMP(ptr->name, "xslt")) { struct _xmlAttr *attr; @@ -252,13 +283,8 @@ static ZEBRA_RES parse_convert(struct filter_info *tinfo, xmlNodePtr ptr, ; else { - xmlChar *node_path = xmlGetNodePath(ptr); - yaz_log(YLOG_WARN, "%s: dom filter: " - "%s bad attribute @%s, " - "expected @stylesheet", - tinfo->fname, - node_path, attr->name); - xmlFree(node_path); + dom_log(YLOG_WARN, tinfo, ptr, + "bad attribute @%s", attr->name); } if (p->stylesheet) { @@ -268,10 +294,9 @@ static ZEBRA_RES parse_convert(struct filter_info *tinfo, xmlNodePtr ptr, NULL, tmp_xslt_full_name)) { - yaz_log(YLOG_WARN, "%s: dom filter: " + dom_log(YLOG_WARN, tinfo, 0, "stylesheet %s not found in " "path %s", - tinfo->fname, p->stylesheet, tinfo->profile_path); return ZEBRA_FAIL; @@ -282,33 +307,25 @@ static ZEBRA_RES parse_convert(struct filter_info *tinfo, xmlNodePtr ptr, tmp_xslt_full_name); if (!p->stylesheet_xsp) { - yaz_log(YLOG_WARN, "%s: dom filter: " - "could not parse xslt " - "stylesheet %s", - tinfo->fname, tmp_xslt_full_name); + dom_log(YLOG_WARN, tinfo, 0, + "could not parse xslt stylesheet %s", + tmp_xslt_full_name); return ZEBRA_FAIL; } - } - else - { - xmlChar *node_path = xmlGetNodePath(ptr); - yaz_log(YLOG_WARN, "%s: dom filter: " - "%s missing attribute 'stylesheet' ", - tinfo->fname, node_path); - xmlFree(node_path); - return ZEBRA_FAIL; - } - *l = p; - l = &p->next; + } + else + { + dom_log(YLOG_WARN, tinfo, ptr, + "missing attribute 'stylesheet' "); + return ZEBRA_FAIL; + } + *l = p; + l = &p->next; } else { - xmlChar *node_path = xmlGetNodePath(ptr); - yaz_log(YLOG_LOG, - "%s: dom filter: " - "%s bad node '%s'", - tinfo->fname, node_path, ptr->name); - xmlFree(node_path); + dom_log(YLOG_WARN, tinfo, ptr, + "bad element '%s', expected ", ptr->name); return ZEBRA_FAIL; } } @@ -316,6 +333,7 @@ static ZEBRA_RES parse_convert(struct filter_info *tinfo, xmlNodePtr ptr, } static ZEBRA_RES perform_convert(struct filter_info *tinfo, + struct recExtractCtrl *extctr, struct convert_s *convert, const char **params, xmlDocPtr *doc, @@ -323,12 +341,34 @@ static ZEBRA_RES perform_convert(struct filter_info *tinfo, { for (; convert; convert = convert->next) { + xmlChar *buf_out = 0; + int len_out = 0; xmlDocPtr res_doc = xsltApplyStylesheet(convert->stylesheet_xsp, *doc, params); if (last_xsp) *last_xsp = convert->stylesheet_xsp; + + if (!res_doc) + break; + + /* now saving into buffer and re-reading into DOM to avoid annoing + XSLT problem with thrown-out indentation text nodes */ + xsltSaveResultToString(&buf_out, &len_out, res_doc, + convert->stylesheet_xsp); + xmlFreeDoc(res_doc); + xmlFreeDoc(*doc); - *doc = res_doc; + + *doc = xmlParseMemory((const char *) buf_out, len_out); + + /* writing debug info out */ + if (extctr->flagShowRecords) + yaz_log(YLOG_LOG, "%s: XSLT %s\n %.*s", + tinfo->fname ? tinfo->fname : "(none)", + convert->stylesheet, + len_out, buf_out); + + xmlFree(buf_out); } return ZEBRA_OK; } @@ -349,13 +389,9 @@ static struct filter_input *new_input(struct filter_info *tinfo, int type) } static ZEBRA_RES parse_input(struct filter_info *tinfo, xmlNodePtr ptr, - const char *syntax, - const char *name) + const char *syntax, const char *name) { - for (; ptr; ptr = ptr->next) - { - if (ptr->type != XML_ELEMENT_NODE) - continue; + FOR_EACH_ELEMENT(ptr) { if (!XML_STRCMP(ptr->name, "marc")) { yaz_iconv_t iconv = 0; @@ -364,28 +400,20 @@ static ZEBRA_RES parse_input(struct filter_info *tinfo, xmlNodePtr ptr, for (attr = ptr->properties; attr; attr = attr->next) { - if (attr_content(attr, "charset", &input_charset)) + if (attr_content(attr, "inputcharset", &input_charset)) ; else { - xmlChar *node_path = xmlGetNodePath(ptr); - yaz_log(YLOG_WARN, "%s: dom filter: " - "%s bad attribute @%s," - " expected @charset", - tinfo->fname, - node_path, attr->name); - xmlFree(node_path); + dom_log(YLOG_WARN, tinfo, ptr, + "bad attribute @%s, expected @inputcharset", + attr->name); } } iconv = yaz_iconv_open("utf-8", input_charset); if (!iconv) { - xmlChar *node_path = xmlGetNodePath(ptr); - yaz_log(YLOG_WARN, "%s: dom filter: " - "%s unsupported @charset '%s'", - tinfo->fname, node_path, - input_charset); - xmlFree(node_path); + dom_log(YLOG_WARN, tinfo, ptr, + "unsupported @charset '%s'", input_charset); return ZEBRA_FAIL; } else @@ -420,13 +448,9 @@ static ZEBRA_RES parse_input(struct filter_info *tinfo, xmlNodePtr ptr, ; else { - xmlChar *node_path = xmlGetNodePath(ptr); - yaz_log(YLOG_WARN, "%s: dom filter: " - "%s bad attribute @%s," - " expected @level", - tinfo->fname, node_path, + dom_log(YLOG_WARN, tinfo, ptr, + "bad attribute @%s, expected @level", attr->name); - xmlFree(node_path); } } if (level_str) @@ -439,12 +463,9 @@ static ZEBRA_RES parse_input(struct filter_info *tinfo, xmlNodePtr ptr, } else { - xmlChar *node_path = xmlGetNodePath(ptr); - yaz_log(YLOG_WARN, "%s: dom filter: " - "%s bad element <%s>," - " expected |", - tinfo->fname, node_path, ptr->name); - xmlFree(node_path); + dom_log(YLOG_WARN, tinfo, ptr, + "bad element <%s>, expected |", + ptr->name); return ZEBRA_FAIL; } } @@ -467,7 +488,7 @@ static ZEBRA_RES parse_dom(struct filter_info *tinfo, const char *fname) yaz_log(YLOG_LOG, "%s dom filter: " "loading config file %s", tinfo->fname, tinfo->full_name); - + doc = xmlParseFile(tinfo->full_name); if (!doc) { @@ -483,19 +504,14 @@ static ZEBRA_RES parse_dom(struct filter_info *tinfo, const char *fname) if (!ptr || ptr->type != XML_ELEMENT_NODE || XML_STRCMP(ptr->name, "dom")) { - xmlChar *node_path = xmlGetNodePath(ptr); - yaz_log(YLOG_WARN, "%s: dom filter: " - "%s bad root element <%s>," - " expected root element ", - tinfo->fname, node_path, ptr->name); - xmlFree(node_path); + dom_log(YLOG_WARN, tinfo, ptr, + "bad root element <%s>, expected root element ", + ptr->name); return ZEBRA_FAIL; } - for (ptr = ptr->children; ptr; ptr = ptr->next) - { - if (ptr->type != XML_ELEMENT_NODE) - continue; + ptr = ptr->children; + FOR_EACH_ELEMENT(ptr) { if (!XML_STRCMP(ptr->name, "extract")) { /* @@ -517,13 +533,9 @@ static ZEBRA_RES parse_dom(struct filter_info *tinfo, const char *fname) ; else { - xmlChar *node_path = xmlGetNodePath(ptr); - yaz_log(YLOG_WARN, "%s: dom filter: " - "%s bad attribute @%s" - " expected @name", - tinfo->fname, - node_path, attr->name); - xmlFree(node_path); + dom_log(YLOG_WARN, tinfo, ptr, + "bad attribute @%s, expected @name", + attr->name); } } parse_convert(tinfo, ptr->children, &f->convert); @@ -559,13 +571,9 @@ static ZEBRA_RES parse_dom(struct filter_info *tinfo, const char *fname) ; else { - xmlChar *node_path = xmlGetNodePath(ptr); - yaz_log(YLOG_WARN, "%s: dom filter: " - "%s bad attribute @%s" - " expected @identifier|@name", - tinfo->fname, - node_path, attr->name); - xmlFree(node_path); + dom_log(YLOG_WARN, tinfo, ptr, + "bad attribute @%s, expected @identifier|@name", + attr->name); } } parse_convert(tinfo, ptr->children, &f->convert); @@ -606,25 +614,19 @@ static ZEBRA_RES parse_dom(struct filter_info *tinfo, const char *fname) ; else { - xmlChar *node_path = xmlGetNodePath(ptr); - yaz_log(YLOG_WARN, "%s: dom filter: " - "%s bad attribute @%s" - " expected @syntax|@name", - tinfo->fname, - node_path, attr->name); - xmlFree(node_path); + dom_log(YLOG_WARN, tinfo, ptr, + "bad attribute @%s, expected @syntax|@name", + attr->name); } } parse_input(tinfo, ptr->children, syntax, name); } else { - xmlChar *node_path = xmlGetNodePath(ptr); - yaz_log(YLOG_WARN, "%s: dom filter: " - "%s bad element <%s>," - " expected |||", - tinfo->fname, node_path, ptr->name); - xmlFree(node_path); + dom_log(YLOG_WARN, tinfo, ptr, + "bad element <%s>, " + "expected |||", + ptr->name); return ZEBRA_FAIL; } } @@ -713,91 +715,114 @@ static void index_value_of(struct filter_info *tinfo, xmlNodePtr node, xmlChar * index_p) { - xmlChar *text = xmlNodeGetContent(node); - size_t text_len = strlen((const char *)text); - - - /* if there is no text, we do not need to proceed */ - if (text_len) - { - xmlChar *look = index_p; - xmlChar *bval; - xmlChar *eval; - - xmlChar index[256]; - xmlChar type[256]; + if (tinfo->record_info_invoked == 1) + { + xmlChar *text = xmlNodeGetContent(node); + size_t text_len = strlen((const char *)text); + + /* if there is no text, we do not need to proceed */ + if (text_len) + { + xmlChar *look = index_p; + xmlChar *bval; + xmlChar *eval; + + xmlChar index[256]; + xmlChar type[256]; - /* assingning text to be indexed */ - recword->term_buf = (const char *)text; - recword->term_len = text_len; + /* assingning text to be indexed */ + recword->term_buf = (const char *)text; + recword->term_len = text_len; - /* parsing all index name/type pairs */ - /* may not start with ' ' or ':' */ - while (*look && ' ' != *look && ':' != *look) - { - /* setting name and type to zero */ - *index = '\0'; - *type = '\0'; - - /* parsing one index name */ - bval = look; - while (*look && ':' != *look && ' ' != *look) + /* parsing all index name/type pairs */ + /* may not start with ' ' or ':' */ + while (*look && ' ' != *look && ':' != *look) { - look++; - } - eval = look; - strncpy((char *)index, (const char *)bval, eval - bval); - index[eval - bval] = '\0'; - + /* setting name and type to zero */ + *index = '\0'; + *type = '\0'; - /* parsing one index type, if existing */ - if (':' == *look) - { - look++; - + /* parsing one index name */ bval = look; - while (*look && ' ' != *look) + while (*look && ':' != *look && ' ' != *look) { look++; } eval = look; - strncpy((char *)type, (const char *)bval, eval - bval); - type[eval - bval] = '\0'; - } - - /* actually indexing the text given */ - yaz_log(YLOG_DEBUG, "%s dom filter: " - "INDEX '%s:%s' '%s'", - tinfo->fname, index, type, text); - - recword->index_name = (const char *)index; - if (type && *type) - recword->index_type = *type; - (extctr->tokenAdd)(recword); + strncpy((char *)index, (const char *)bval, eval - bval); + index[eval - bval] = '\0'; + + + /* parsing one index type, if existing */ + if (':' == *look) + { + look++; + + bval = look; + while (*look && ' ' != *look) + { + look++; + } + eval = look; + strncpy((char *)type, (const char *)bval, eval - bval); + type[eval - bval] = '\0'; + } - /* eat whitespaces */ - if (*look && ' ' == *look && *(look+1)) - { - look++; - } + /* actually indexing the text given */ + dom_log(YLOG_DEBUG, tinfo, 0, + "INDEX '%s:%s' '%s'", + index ? (const char *) index : "null", + type ? (const char *) type : "null", + text ? (const char *) text : "null"); + + recword->index_name = (const char *)index; + if (type && *type) + recword->index_type = *type; + + /* writing debug out */ + if (extctr->flagShowRecords) + dom_log(YLOG_LOG, tinfo, 0, + "INDEX '%s:%s' '%s'", + index ? (const char *) index : "null", + type ? (const char *) type : "null", + text ? (const char *) text : "null"); + + /* actually indexing the text given */ + recword->index_name = (const char *)index; + if (type && *type) + recword->index_type = *type; + (extctr->tokenAdd)(recword); + + /* eat whitespaces */ + if (*look && ' ' == *look && *(look+1)) + { + look++; + } + } } + xmlFree(text); } - - xmlFree(text); } /* DOM filter style indexing */ static void set_record_info(struct filter_info *tinfo, struct recExtractCtrl *extctr, + xmlNodePtr node, xmlChar * id_p, xmlChar * rank_p, xmlChar * type_p) { - yaz_log(YLOG_DEBUG, "%s dom filter: " - "RECORD id=%s rank=%s type=%s", - tinfo->fname, id_p, rank_p, type_p); + + /* writing debug info out */ + if (extctr->flagShowRecords) + dom_log(YLOG_LOG, tinfo, 0, + "RECORD id=%s rank=%s type=%s", + id_p ? (const char *) id_p : "(null)", + rank_p ? (const char *) rank_p : "(null)", + type_p ? (const char *) type_p : "(null)"); + if (id_p) sscanf((const char *)id_p, "%255s", extctr->match_criteria); @@ -807,10 +832,16 @@ static void set_record_info(struct filter_info *tinfo, /* if (!strcmp("update", type_str)) */ /* index_node(tinfo, ctrl, ptr, recword); */ /* else if (!strcmp("delete", type_str)) */ - /* yaz_log(YLOG_WARN, "dom filter delete: to be implemented"); */ + /* dom_log(YLOG_WARN, tinfo, ptr, "dom filter delete: to be implemented"); */ /* else */ - /* yaz_log(YLOG_WARN, "dom filter: unknown record type '%s'", */ + /* dom_log(YLOG_WARN, tinfo, ptr, "dom filter: unknown record type '%s'", */ /* type_str); */ + if (tinfo->record_info_invoked == 1) + { + /* warn about multiple only once */ + dom_log(YLOG_WARN, tinfo, node, "multiple record elements"); + } + tinfo->record_info_invoked++; } @@ -837,11 +868,9 @@ static void process_xml_element_zebra_node(struct filter_info *tinfo, } else { - xmlChar *node_path = xmlGetNodePath(node); - yaz_log(YLOG_WARN,"%s dom filter: " - "%s bad attribute @%s, expected @name", - tinfo->fname, node_path, attr->name); - xmlFree(node_path); + dom_log(YLOG_WARN, tinfo, node, + "bad attribute @%s, expected @name", + attr->name); } } } @@ -862,37 +891,26 @@ static void process_xml_element_zebra_node(struct filter_info *tinfo, ; else { - xmlChar *node_path = xmlGetNodePath(node); - yaz_log(YLOG_WARN,"%s dom filter: " - "%s bad attribute @%s," - " expected @id|@rank|@type", - tinfo->fname, node_path, attr->name); - xmlFree(node_path); + dom_log(YLOG_WARN, tinfo, node, + "bad attribute @%s, expected @id|@rank|@type", + attr->name); } if (type_p && 0 != strcmp("update", (const char *)type_p)) { - xmlChar *node_path = xmlGetNodePath(node); - yaz_log(YLOG_WARN,"%s dom filter: " - "%s attribute @%s," - " only implemented '@type='update'", - tinfo->fname, node_path, attr->name); - xmlFree(node_path); + dom_log(YLOG_WARN, tinfo, node, + "attribute @%s, only implemented '@type='update'", + attr->name); } - - } - set_record_info(tinfo, extctr, id_p, rank_p, type_p); + set_record_info(tinfo, extctr, node, id_p, rank_p, type_p); } else { - xmlChar *node_path = xmlGetNodePath(node); - yaz_log(YLOG_WARN,"%s dom filter: " - "%s bad element <%s>," + dom_log(YLOG_WARN, tinfo, node, + "bad element <%s>," " expected | in namespace '%s'", - tinfo->fname, node_path, node->name, zebra_dom_ns); - xmlFree(node_path); } } } @@ -964,14 +982,12 @@ static void process_xml_pi_node(struct filter_info *tinfo, if (look && '\0' != *look) { - xmlChar *node_path = xmlGetNodePath(node); - yaz_log(YLOG_WARN,"%s dom filter: " - "%s content '%s', can not parse '%s'", - tinfo->fname, node_path, pi_p, look); - xmlFree(node_path); + dom_log(YLOG_WARN, tinfo, node, + "content '%s', can not parse '%s'", + pi_p, look); } else - set_record_info(tinfo, extctr, id, rank, 0); + set_record_info(tinfo, extctr, node, id, rank, 0); } /* parsing index instruction */ @@ -988,11 +1004,9 @@ static void process_xml_pi_node(struct filter_info *tinfo, } else { - xmlChar *node_path = xmlGetNodePath(node); - yaz_log(YLOG_WARN,"%s dom filter: " - "%s content '%s', can not parse '%s'", - tinfo->fname, node_path, pi_p, look); - xmlFree(node_path); + dom_log(YLOG_WARN, tinfo, node, + "content '%s', can not parse '%s'", + pi_p, look); } } } @@ -1039,20 +1053,11 @@ static void extract_dom_doc_node(struct filter_info *tinfo, struct recExtractCtrl *extctr, xmlDocPtr doc) { - xmlChar *buf_out; - int len_out; - /* only need to do the initialization once, reuse recword for all terms */ RecWord recword; (*extctr->init)(extctr, &recword); - if (extctr->flagShowRecords) - { - xmlDocDumpMemory(doc, &buf_out, &len_out); - fwrite(buf_out, len_out, 1, stdout); - xmlFree(buf_out); - } - + tinfo->record_info_invoked = 0; process_xml_element_node(tinfo, extctr, &recword, (xmlNodePtr)doc); } @@ -1075,13 +1080,13 @@ static int convert_extract_doc(struct filter_info *tinfo, set_param_str(params, "schema", zebra_dom_ns, tinfo->odr_record); /* input conversion */ - perform_convert(tinfo, input->convert, params, &doc, 0); + perform_convert(tinfo, p, input->convert, params, &doc, 0); if (tinfo->store) { /* store conversion */ store_doc = xmlCopyDoc(doc, 1); - perform_convert(tinfo, tinfo->store->convert, + perform_convert(tinfo, p, tinfo->store->convert, params, &store_doc, &last_xsp); } @@ -1090,8 +1095,10 @@ static int convert_extract_doc(struct filter_info *tinfo, store_doc ? store_doc : doc, last_xsp); else xmlDocDumpMemory(store_doc ? store_doc : doc, &buf_out, &len_out); - if (p->flagShowRecords) - fwrite(buf_out, len_out, 1, stdout); + + /* if (p->flagShowRecords) + fwrite(buf_out, len_out, 1, stdout); */ + (*p->setStoreData)(p, buf_out, len_out); xmlFree(buf_out); @@ -1099,16 +1106,17 @@ static int convert_extract_doc(struct filter_info *tinfo, xmlFreeDoc(store_doc); /* extract conversion */ - perform_convert(tinfo, tinfo->extract->convert, params, &doc, 0); + perform_convert(tinfo, p, tinfo->extract->convert, params, &doc, 0); /* finally, do the indexing */ if (doc) - { extract_dom_doc_node(tinfo, p, doc); - /* extract_doc_alvis(tinfo, p, doc); */ + + if (doc) xmlFreeDoc(doc); - } + if (tinfo->record_info_invoked == 0) + return RECCTRL_EXTRACT_SKIP; return RECCTRL_EXTRACT_OK; } @@ -1149,6 +1157,18 @@ static int extract_xml_split(struct filter_info *tinfo, xmlDocSetRootElement(doc, ptr2); + /* writing debug info out */ + if (p->flagShowRecords) + { + xmlChar *buf_out = 0; + int len_out = 0; + xmlDocDumpMemory(doc, &buf_out, &len_out); + yaz_log(YLOG_LOG, "%s: XMLREADER depth: %i\n%.*s", + tinfo->fname ? tinfo->fname : "(none)", + depth, len_out, buf_out); + xmlFree(buf_out); + } + return convert_extract_doc(tinfo, input, p, doc); } else @@ -1200,9 +1220,9 @@ static int extract_iso2709(struct filter_info *tinfo, { int i; - yaz_log(YLOG_WARN, "%s dom filter: " + dom_log(YLOG_WARN, tinfo, 0, "MARC: Skipping bad byte %d (0x%02X)", - tinfo->fname, *buf & 0xff, *buf & 0xff); + *buf & 0xff, *buf & 0xff); for (i = 0; i<4; i++) buf[i] = buf[i+1]; @@ -1212,25 +1232,23 @@ static int extract_iso2709(struct filter_info *tinfo, record_length = atoi_n (buf, 5); if (record_length < 25) { - yaz_log (YLOG_WARN, "%s dom filter: " - "MARC record length < 25, is %d", - tinfo->fname, record_length); + dom_log(YLOG_WARN, tinfo, 0, + "MARC record length < 25, is %d", record_length); return RECCTRL_EXTRACT_ERROR_GENERIC; } read_bytes = p->stream->readf(p->stream, buf+5, record_length-5); if (read_bytes < record_length-5) { - yaz_log (YLOG_WARN, "%s dom filter: " - "Couldn't read whole MARC record", - tinfo->fname); + dom_log(YLOG_WARN, tinfo, 0, + "couldn't read whole MARC record"); return RECCTRL_EXTRACT_ERROR_GENERIC; } r = yaz_marc_read_iso2709(input->u.marc.handle, buf, record_length); if (r < record_length) { - yaz_log (YLOG_WARN, "%s dom filter: " - "Parsing of MARC record failed r=%d length=%d", - tinfo->fname, r, record_length); + dom_log (YLOG_WARN, tinfo, 0, + "parsing of MARC record failed r=%d length=%d", + r, record_length); return RECCTRL_EXTRACT_ERROR_GENERIC; } else @@ -1344,7 +1362,7 @@ static int filter_retrieve (void *clientData, struct recRetrieveCtrl *p) } /* retrieve conversion */ - perform_convert(tinfo, retrieve->convert, params, &doc, &last_xsp); + perform_convert(tinfo, 0, retrieve->convert, params, &doc, &last_xsp); if (!doc) { p->diagnostic = YAZ_BIB1_SYSTEM_ERROR_IN_PRESENTING_RECORDS;