X-Git-Url: http://jsfdemo.indexdata.com/?a=blobdiff_plain;ds=sidebyside;f=src%2Fpazpar2_config.c;h=dbfd850ce3451e4985bbcf36cf71cd1cdd8adc23;hb=f7bf5626d6ae623cbcf86b8c4c9f9ed023a92499;hp=433239750af5b7007b25e7868ef223795044d3c7;hpb=77682ed3596450ab7b3caff707999d2f7977d614;p=pazpar2-moved-to-github.git diff --git a/src/pazpar2_config.c b/src/pazpar2_config.c index 4332397..dbfd850 100644 --- a/src/pazpar2_config.c +++ b/src/pazpar2_config.c @@ -54,6 +54,7 @@ struct conf_config int no_threads; WRBUF confdir; + char *path; iochan_man_t iochan_man; database_hosts_t database_hosts; }; @@ -256,13 +257,20 @@ int conf_service_sortkey_field_id(struct conf_service *service, static void conf_dir_path(struct conf_config *config, WRBUF w, const char *src) { - if (config->confdir && wrbuf_len(config->confdir) > 0 && - !yaz_is_abspath(src)) + char full_path[1024]; + if (yaz_filepath_resolve(src, config->path, + wrbuf_len(config->confdir) > 0 ? + wrbuf_cstr(config->confdir) : ".", + full_path)) { - wrbuf_printf(w, "%s/%s", wrbuf_cstr(config->confdir), src); + wrbuf_puts(w, full_path); } else + { + yaz_log(YLOG_WARN, "File not found: fname=%s path=%s base=%s", src, + config->path, wrbuf_cstr(config->confdir)); wrbuf_puts(w, src); + } } void service_destroy(struct conf_service *service) @@ -639,9 +647,14 @@ static struct conf_service *service_create_static(struct conf_server *server, || !strcmp((const char *) n->name, "facet")) { - yaz_log(YLOG_FATAL, "No longer supported: <%s>", n->name); - yaz_log(YLOG_LOG, "Use .. instead", n->name); - return 0; + if (!service->charsets) + service->charsets = pp2_charset_fact_create(); + if (pp2_charset_fact_define(service->charsets, n, + (const char *) n->name)) + { + yaz_log(YLOG_FATAL, "ICU chain definition error"); + return 0; + } } else if (!strcmp((const char *) n->name, (const char *) "metadata")) { @@ -937,9 +950,14 @@ static struct conf_server *server_create(struct conf_config *config, || !strcmp((const char *) n->name, "mergekey") || !strcmp((const char *) n->name, "facet")) { - yaz_log(YLOG_FATAL, "No longer supported: <%s>", n->name); - yaz_log(YLOG_LOG, "Use .. instead", n->name); - return 0; + if (!server->charsets) + server->charsets = pp2_charset_fact_create(); + if (pp2_charset_fact_define(server->charsets, n, + (const char *) n->name)) + { + yaz_log(YLOG_FATAL, "ICU chain definition error"); + return 0; + } } else if (!strcmp((const char *) n->name, "service")) { @@ -1234,6 +1252,15 @@ static int parse_config(struct conf_config *config, xmlNode *root) xmlFree(number); } } + else if (!strcmp((const char *) n->name, "file")) + { + xmlChar *path = xmlGetProp(n, (xmlChar *) "path"); + if (path) + { + config->path = nmem_strdup(config->nmem, (const char *) path); + xmlFree(path); + } + } else if (!strcmp((const char *) n->name, "targetprofiles")) { yaz_log(YLOG_FATAL, "targetprofiles unsupported here. Must be part of service"); @@ -1249,7 +1276,7 @@ static int parse_config(struct conf_config *config, xmlNode *root) return 0; } -struct conf_config *config_create(const char *fname, int verbose) +struct conf_config *config_create(const char *fname) { xmlDoc *doc = xmlReadFile(fname, NULL, @@ -1280,6 +1307,7 @@ struct conf_config *config_create(const char *fname, int verbose) config->nmem = nmem; config->servers = 0; + config->path = nmem_strdup(nmem, "."); config->no_threads = 0; config->iochan_man = 0; config->database_hosts = database_hosts_create(); @@ -1302,16 +1330,13 @@ struct conf_config *config_create(const char *fname, int verbose) r = yaz_xml_include_simple(n, wrbuf_cstr(config->confdir)); if (r == 0) /* OK */ { - if (verbose) - { - yaz_log(YLOG_LOG, "Configuration %s after include processing", - fname); + yaz_log(YLOG_LOG, "Configuration %s after include processing", + fname); #if LIBXML_VERSION >= 20600 - xmlDocFormatDump(yaz_log_file(), doc, 0); + xmlDocFormatDump(yaz_log_file(), doc, 0); #else - xmlDocDump(yaz_log_file(), doc); + xmlDocDump(yaz_log_file(), doc); #endif - } r = parse_config(config, n); } xmlFreeDoc(doc);