X-Git-Url: http://jsfdemo.indexdata.com/?a=blobdiff_plain;f=src%2Fpazpar2_config.c;h=5c808b8a612a34388d7770a4a9150a4973935a6b;hb=5b4ea0cf66dd82c871ed7d69a5801d78789087b2;hp=f4539a06036de6169020b8bce12593e9bb7083b7;hpb=7d0d04af0ae9a019adf0ee16248b5e9c8ea21922;p=pazpar2-moved-to-github.git diff --git a/src/pazpar2_config.c b/src/pazpar2_config.c index f4539a0..5c808b8 100644 --- a/src/pazpar2_config.c +++ b/src/pazpar2_config.c @@ -412,8 +412,7 @@ static struct conf_service *parse_service(struct conf_config *config, } sortkey_offset = sk_node; - conf_service_add_sortkey( -service, sk_node, + conf_service_add_sortkey(service, sk_node, (const char *) xml_name, sk_type); sk_node++; @@ -461,7 +460,7 @@ static char *parse_settings(struct conf_config *config, if (src) { - if (yaz_is_abspath((const char *) src)) + if (yaz_is_abspath((const char *) src) || !wrbuf_len(config->confdir)) r = nmem_strdup(nmem, (const char *) src); else { @@ -607,9 +606,9 @@ xsltStylesheet *conf_load_stylesheet(struct conf_config *config, const char *fname) { char path[256]; - if (yaz_is_abspath(fname)) + if (yaz_is_abspath(fname) || !config || !wrbuf_len(config->confdir)) yaz_snprintf(path, sizeof(path), fname); - else if (config) + else yaz_snprintf(path, sizeof(path), "%s/%s", wrbuf_cstr(config->confdir), fname); return xsltParseStylesheetFile((xmlChar *) path); @@ -696,9 +695,43 @@ static int parse_config(struct conf_config *config, xmlNode *root) return 0; } +static void config_include_src(struct conf_config *config, xmlNode *n, + const char *src) +{ + xmlDoc *doc = xmlParseFile(src); + yaz_log(YLOG_LOG, "processing incldue src=%s", src); + if (doc) + { + xmlNodePtr t = xmlDocGetRootElement(doc); + xmlReplaceNode(n, xmlCopyNode(t, 1)); + xmlFreeDoc(doc); + } +} + +static void process_config_includes(struct conf_config *config, xmlNode *n) +{ + for (; n; n = n->next) + { + if (n->type == XML_ELEMENT_NODE) + { + if (!strcmp((const char *) n->name, "include")) + { + xmlChar *src = xmlGetProp(n, (xmlChar *) "src"); + if (src) + { + config_include_src(config, n, (const char *) src); + xmlFree(src); + } + } + } + process_config_includes(config, n->children); + } +} + struct conf_config *read_config(const char *fname) { xmlDoc *doc = xmlParseFile(fname); + xmlNode *n; const char *p; int r; NMEM nmem = nmem_create(); @@ -728,7 +761,11 @@ struct conf_config *read_config(const char *fname) wrbuf_write(config->confdir, fname, len); } wrbuf_puts(config->confdir, ""); - r = parse_config(config, xmlDocGetRootElement(doc)); + + n = xmlDocGetRootElement(doc); + process_config_includes(config, n); + xmlDocFormatDump(stdout, doc, 0); + r = parse_config(config, n); xmlFreeDoc(doc); if (r)