mk_version.tcl: read version from IDMETA
[idzebra-moved-to-github.git] / index / mod_dom.c
index f16fba7..de2a872 100644 (file)
@@ -1,5 +1,5 @@
 /* This file is part of the Zebra server.
-   Copyright (C) 1995-2008 Index Data
+   Copyright (C) 1994-2011 Index Data
 
 Zebra 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
@@ -17,6 +17,9 @@ Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA
 
 */
 
+#if HAVE_CONFIG_H
+#include <config.h>
+#endif
 #include <stdio.h>
 #include <assert.h>
 #include <ctype.h>
@@ -921,7 +924,13 @@ static void set_record_info(struct filter_info *tinfo,
     
 
     if (id_p && *id_p)
-        sscanf((const char *)id_p, "%255s", extctr->match_criteria);
+    {
+        size_t l = strlen(id_p);
+        if (l >= sizeof(extctr->match_criteria))
+            l = sizeof(extctr->match_criteria)-1;
+        memcpy(extctr->match_criteria, id_p, l);
+        extctr->match_criteria[l] = '\0';
+    }
 
     if (rank_p && *rank_p)
         extctr->staticrank = atozint((const char *)rank_p);
@@ -1021,9 +1030,6 @@ static int attr_content_pi(const char **c_ptr, const char *name,
     const char *look = *c_ptr;
     int ret = 0;
 
-    *value = '\0';
-    while (*look && ' ' == *look)
-        look++;
     if (strlen(look) > name_len)
     {
         if (look[name_len] == '=' && !memcmp(look, name, name_len))
@@ -1040,8 +1046,6 @@ static int attr_content_pi(const char **c_ptr, const char *name,
             ret = 1;
         }
     }
-    while (*look && ' ' == *look)
-        look++;
     *c_ptr = look;
     return ret;
 }
@@ -1069,18 +1073,27 @@ static void process_xml_pi_node(struct filter_info *tinfo,
             *rank = '\0';
             *type = '\0';
             look += 6;
-            while (*look)
+            for (;;)
+            {
+                /* eat whitespace */
+                while (' ' == *look)
+                    look++;
+                if (*look == '\0')
+                    break;
                 if (attr_content_pi(&look, "id", id, sizeof(id)))
                     ;
                 else if (attr_content_pi(&look, "rank", rank, sizeof(rank)))
                     ;
                 else if (attr_content_pi(&look, "type", type, sizeof(type)))
+                    ;
+                else
                 {
                     dom_log(YLOG_WARN, tinfo, node,
                             "content '%s', can not parse '%s'",
                             pi_p, look);
                     break;
                 }
+            }
             set_record_info(tinfo, extctr, node, id, rank, type);
         } 
         /* parsing index instruction */
@@ -1418,7 +1431,8 @@ static int filter_extract(void *clientData, struct recExtractCtrl *p)
 static int ioread_ret(void *context, char *buffer, int len)
 {
     struct recRetrieveCtrl *p = context;
-    return p->stream->readf(p->stream, buffer, len);
+    int r = p->stream->readf(p->stream, buffer, len);
+    return r;
 }
 
 static int ioclose_ret(void *context)
@@ -1456,7 +1470,7 @@ static int filter_retrieve(void *clientData, struct recRetrieveCtrl *p)
     {
         p->diagnostic =
             YAZ_BIB1_SPECIFIED_ELEMENT_SET_NAME_NOT_VALID_FOR_SPECIFIED_;
-        p->addinfo = odr_strdup(p->odr, esn);
+        p->addinfo = odr_strdup_null(p->odr, esn);
         return 0;
     }
 
@@ -1550,7 +1564,7 @@ static struct recType filter_type = {
 };
 
 RecType
-#ifdef IDZEBRA_STATIC_DOM
+#if IDZEBRA_STATIC_DOM
 idzebra_filter_dom
 #else
 idzebra_filter
@@ -1563,6 +1577,7 @@ idzebra_filter
 /*
  * Local variables:
  * c-basic-offset: 4
+ * c-file-style: "Stroustrup"
  * indent-tabs-mode: nil
  * End:
  * vim: shiftwidth=4 tabstop=8 expandtab