Merge branch 'master' of ssh://git.indexdata.com/home/git/pub/pazpar2
[pazpar2-moved-to-github.git] / src / pazpar2_config.c
index f6baa27..43d5bcf 100644 (file)
@@ -1,5 +1,5 @@
 /* This file is part of Pazpar2.
-   Copyright (C) 2006-2008 Index Data
+   Copyright (C) 2006-2009 Index Data
 
 Pazpar2 is free software; you can redistribute it and/or modify it under
 the terms of the GNU General Public License as published by the Free
@@ -32,6 +32,7 @@ Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA
 #include <yaz/yaz-util.h>
 #include <yaz/nmem.h>
 #include <yaz/snprintf.h>
+#include <yaz/tpath.h>
 
 #define CONFIG_NOEXTERNS
 #include "pazpar2_config.h"
@@ -384,6 +385,7 @@ static struct conf_service *parse_service(xmlNode *node)
             xmlFree(xml_type);
             xmlFree(xml_termlist);
             xmlFree(xml_rank);
+            xmlFree(xml_setting);
             md_node++;
         }
         else
@@ -401,7 +403,16 @@ static char *parse_settings(xmlNode *node)
     char *r;
 
     if (src)
-        r = nmem_strdup(nmem, (const char *) src);
+    {
+        if (yaz_is_abspath((const char *) src))
+            r = nmem_strdup(nmem, (const char *) src);
+        else
+        {
+            r = nmem_malloc(nmem,
+                            strlen(confdir) + strlen((const char *) src) + 2);
+            sprintf(r, "%s/%s", confdir, src);
+        }
+    }
     else
     {
         yaz_log(YLOG_FATAL, "Must specify src in targetprofile");
@@ -470,15 +481,21 @@ static struct conf_server *parse_server(xmlNode *node)
         }
         else if (!strcmp((const char *) n->name, "relevance"))
         {
-            server->relevance_pct = pp2_charset_create_xml(n->children);
+            server->relevance_pct = pp2_charset_create_xml(n);
+            if (!server->relevance_pct)
+                return 0;
         }
         else if (!strcmp((const char *) n->name, "sort"))
         {
-            server->sort_pct = pp2_charset_create_xml(n->children);
+            server->sort_pct = pp2_charset_create_xml(n);
+            if (!server->sort_pct)
+                return 0;
         }
         else if (!strcmp((const char *) n->name, "mergekey"))
         {
-            server->mergekey_pct = pp2_charset_create_xml(n->children);
+            server->mergekey_pct = pp2_charset_create_xml(n);
+            if (!server->mergekey_pct)
+                return 0;
         }
         else if (!strcmp((const char *) n->name, "service"))
         {
@@ -505,7 +522,7 @@ static struct conf_server *parse_server(xmlNode *node)
 xsltStylesheet *conf_load_stylesheet(const char *fname)
 {
     char path[256];
-    if (*fname == '/')
+    if (yaz_is_abspath(fname))
         yaz_snprintf(path, sizeof(path), fname);
     else
         yaz_snprintf(path, sizeof(path), "%s/%s", confdir, fname);
@@ -604,7 +621,13 @@ int read_config(const char *fname)
         yaz_log(YLOG_FATAL, "Failed to read %s", fname);
         exit(1);
     }
-    if ((p = strrchr(fname, '/')))
+    if ((p = strrchr(fname, 
+#ifdef WIN32
+                     '\\'
+#else
+                     '/'
+#endif
+             )))
     {
         int len = p - fname;
         if (len >= sizeof(confdir))
@@ -625,7 +648,9 @@ int read_config(const char *fname)
 /*
  * Local variables:
  * c-basic-offset: 4
+ * c-file-style: "Stroustrup"
  * indent-tabs-mode: nil
  * End:
  * vim: shiftwidth=4 tabstop=8 expandtab
  */
+