free xpath regexp
[idzebra-moved-to-github.git] / recctrl / recgrs.c
index ae5a782..a0cdef7 100644 (file)
@@ -1,5 +1,5 @@
-/* $Id: recgrs.c,v 1.72 2003-02-04 12:06:47 pop Exp $
-   Copyright (C) 1995,1996,1997,1998,1999,2000,2001,2002
+/* $Id: recgrs.c,v 1.75 2003-03-08 14:27:58 pop Exp $
+   Copyright (C) 1995,1996,1997,1998,1999,2000,2001,2002,2003
    Index Data Aps
 
 This file is part of the Zebra server.
@@ -214,7 +214,7 @@ data1_termlist *xpath_termlist_by_tagpath(char *tagpath, data1_node *n)
     struct xpath_location_step *xp;
 
 #endif
-    char *pexpr = malloc(strlen(tagpath)+2);
+    char *pexpr = xmalloc(strlen(tagpath)+2);
     int ok = 0;
     
     sprintf (pexpr, "%s\n", tagpath);
@@ -279,6 +279,8 @@ data1_termlist *xpath_termlist_by_tagpath(char *tagpath, data1_node *n)
        }
         xpe = xpe->next;
     } 
+
+    xfree(pexpr);
     
     if (ok) {
       logf(LOG_DEBUG,"Got it");
@@ -968,14 +970,25 @@ static int grs_retrieve(void *clientData, struct recRetrieveCtrl *p)
 #if 0
     data1_pr_tree (p->dh, node, stdout);
 #endif
+#if YAZ_VERSIONL >= 0x010903L
     if (p->comp && p->comp->which == Z_RecordComp_complex &&
        p->comp->u.complex->generic &&
-       p->comp->u.complex->generic->schema)
+        p->comp->u.complex->generic->which == Z_Schema_oid &&
+        p->comp->u.complex->generic->schema.oid)
+    {
+       oident *oe = oid_getentbyoid (p->comp->u.complex->generic->schema.oid);
+       if (oe)
+           requested_schema = oe->value;
+    }
+#else
+    if (p->comp && p->comp->which == Z_RecordComp_complex &&
+       p->comp->u.complex->generic && p->comp->u.complex->generic->schema)
     {
        oident *oe = oid_getentbyoid (p->comp->u.complex->generic->schema);
        if (oe)
            requested_schema = oe->value;
     }
+#endif
 
     /* If schema has been specified, map if possible, then check that
      * we got the right one