Put local variables footer in all c, h files.
[idzebra-moved-to-github.git] / index / attribute.c
index 11914bd..a637f99 100644 (file)
@@ -1,6 +1,6 @@
-/* $Id: attribute.c,v 1.14 2002-08-02 19:26:55 adam Exp $
-   Copyright (C) 1995,1996,1997,1998,1999,2000,2001,2002
-   Index Data Aps
+/* $Id: attribute.c,v 1.22 2006-05-10 08:13:20 adam Exp $
+   Copyright (C) 1995-2005
+   Index Data ApS
 
 This file is part of the Zebra server.
 
@@ -20,32 +20,33 @@ Free Software Foundation, 59 Temple Place - Suite 330, Boston, MA
 02111-1307, USA.
 */
 
-
-
 #include <stdio.h>
 
 #include <yaz/log.h>
-#include <res.h>
-#include <zebrautl.h>
+#include <idzebra/res.h>
+#include <idzebra/util.h>
 #include "index.h"
 
-static data1_att *getatt(data1_attset *p, int att)
+static data1_att *getatt(data1_attset *p, int att, const char *sattr)
 {
     data1_att *a;
     data1_attset_child *c;
 
     /* scan local set */
     for (a = p->atts; a; a = a->next)
-       if (a->value == att)
+       if (sattr && !yaz_matchstr(sattr, a->name))
+           return a;
+       else if (a->value == att)
            return a;
     /* scan included sets */
     for (c = p->children; c; c = c->next)
-       if ((a = getatt(c->child, att)))
+       if ((a = getatt(c->child, att, sattr)))
            return a;
     return 0;
 }
 
-int att_getentbyatt(ZebraHandle zi, attent *res, oid_value set, int att)
+int att_getentbyatt(ZebraHandle zi, attent *res, oid_value set, int att,
+               const char *sattr)
 {
     data1_att *r;
     data1_attset *p;
@@ -55,11 +56,24 @@ int att_getentbyatt(ZebraHandle zi, attent *res, oid_value set, int att)
        zebraExplain_loadAttsets (zi->reg->dh, zi->res);
        p = data1_attset_search_id (zi->reg->dh, set);
     }
-    if (!p)
-       return -2;
-    if (!(r = getatt(p, att)))
+    if (!p)   /* set undefined */
+    {
+       if (sattr)     
+           return -1; /* return bad string attribute */
+       else
+           return -2; /* return bad set */
+    }
+    if (!(r = getatt(p, att, sattr)))
        return -1;
     res->attset_ordinal = r->parent->reference;
     res->local_attributes = r->locals;
     return 0;
 }
+/*
+ * Local variables:
+ * c-basic-offset: 4
+ * indent-tabs-mode: nil
+ * End:
+ * vim: shiftwidth=4 tabstop=8 expandtab
+ */
+