Bump copyright year
[idzebra-moved-to-github.git] / index / mod_dom.c
index e38a3c4..fd59866 100644 (file)
@@ -1,5 +1,5 @@
 /* This file is part of the Zebra server.
-   Copyright (C) 1994-2009 Index Data
+   Copyright (C) 1994-2010 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
@@ -921,7 +921,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 +1027,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 +1043,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 +1070,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 +1428,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 +1467,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;
     }
 
@@ -1563,6 +1574,7 @@ idzebra_filter
 /*
  * Local variables:
  * c-basic-offset: 4
+ * c-file-style: "Stroustrup"
  * indent-tabs-mode: nil
  * End:
  * vim: shiftwidth=4 tabstop=8 expandtab