From 73660474fdfdd99e74463a0c47a6e3b89b0b2f96 Mon Sep 17 00:00:00 2001 From: Adam Dickmeiss Date: Thu, 24 Apr 2014 12:26:14 +0200 Subject: [PATCH] Implement --- doc/pazpar2_conf.xml | 10 ++++++++++ src/pazpar2_config.c | 24 +++++++++++++++++++++--- 2 files changed, 31 insertions(+), 3 deletions(-) diff --git a/doc/pazpar2_conf.xml b/doc/pazpar2_conf.xml index c6325f4..eea4f75 100644 --- a/doc/pazpar2_conf.xml +++ b/doc/pazpar2_conf.xml @@ -73,6 +73,16 @@ in main thread). + + file + + This configuration takes one attribute path which + specifies a path to search for local files, such as XSLTs and settings. + The path is a colon separated list of directories. Its default value + is "." which is equivalent to the location of the + main configuration file (where indeed the file element is given). + + server diff --git a/src/pazpar2_config.c b/src/pazpar2_config.c index 0688b8e..785293e 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) @@ -1244,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"); @@ -1290,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(); -- 1.7.10.4