nmem_strsplit(se->session_nmem, ",", s, &stylesheets, &num);
for (i = 0; i < num; i++)
{
+ WRBUF fname = conf_get_fname(se->service, stylesheets[i]);
+
(*m) = nmem_malloc(se->session_nmem, sizeof(**m));
(*m)->next = 0;
-
+
// XSLT
if (!strcmp(&stylesheets[i][strlen(stylesheets[i])-4], ".xsl"))
{
(*m)->marcmap = NULL;
- if (!((*m)->stylesheet = conf_load_stylesheet(se->service, stylesheets[i])))
+ if (!((*m)->stylesheet =
+ xsltParseStylesheetFile((xmlChar *) wrbuf_cstr(fname))))
{
yaz_log(YLOG_FATAL|YLOG_ERRNO, "Unable to load stylesheet: %s",
stylesheets[i]);
+ wrbuf_destroy(fname);
return -1;
}
}
else if (!strcmp(&stylesheets[i][strlen(stylesheets[i])-5], ".mmap"))
{
(*m)->stylesheet = NULL;
- if (!((*m)->marcmap = marcmap_load(stylesheets[i], se->session_nmem)))
+ if (!((*m)->marcmap = marcmap_load(wrbuf_cstr(fname), se->session_nmem)))
{
yaz_log(YLOG_FATAL|YLOG_ERRNO, "Unable to load marcmap: %s",
stylesheets[i]);
+ wrbuf_destroy(fname);
return -1;
}
}
-
+ wrbuf_destroy(fname);
m = &(*m)->next;
}
}
int subnum;
int subi;
struct database_criterion *new = nmem_malloc(m, sizeof(*new));
- char *eq = strchr(values[i], '=');
+ char *eq;
+ if (eq = strchr(values[i], '='))
+ new->type = PAZPAR2_STRING_MATCH;
+ if (eq = strchr(values[i], '~'))
+ new->type = PAZPAR2_SUBSTRING_MATCH;
if (!eq)
{
- yaz_log(YLOG_WARN, "Missing equal-sign in filter");
+ yaz_log(YLOG_WARN, "Missing equal-signi/tilde in filter");
return 0;
}
*(eq++) = '\0';
return mergekey_norm;
}
-static const char *str_tok_n(const char *s, const char *delim,
- const char **res, size_t *len)
-{
- *res = s;
- while (*s && !strchr(delim, *s))
- s++;
- *len = s - *res;
- if (*len == 0)
- return 0;
- if (*s && strchr(delim, *s))
- s++;
- return s;
-}
-
/** \brief see if metadata for pz:recordfilter exists
\param root xml root element of normalized record
\param sdb session database for client
xmlChar *type = xmlGetProp(n, (xmlChar *) "type");
if (type)
{
- const char *s1 = s;
size_t len;
- const char *value;
- while ((s1 = str_tok_n(s1, ",", &value, &len)) != 0)
+ const char *eq = strchr(s, '=');
+ if (eq)
+ len = eq - s;
+ else
+ len = strlen(s);
+ if (len == strlen((const char *)type) &&
+ !memcmp((const char *) type, s, len))
{
- if (len == strlen((const char *)type) &&
- !memcmp((const char *) type, s, len))
+ xmlChar *value = xmlNodeGetContent(n);
+ if (value && *value)
{
- xmlChar *value = xmlNodeGetContent(n);
- if (value && *value)
- {
- xmlFree(value);
+ if (!eq || strstr((const char *) value, eq+1))
match = 1;
- }
}
+ xmlFree(value);
}
xmlFree(type);
}