C++ compilation.
[idzebra-moved-to-github.git] / recctrl / recgrs.c
index a8ed698..680dde2 100644 (file)
@@ -4,7 +4,13 @@
  * Sebastian Hammer, Adam Dickmeiss
  *
  * $Log: recgrs.c,v $
- * Revision 1.27  1999-05-20 12:57:18  adam
+ * Revision 1.29  1999-05-26 07:49:14  adam
+ * C++ compilation.
+ *
+ * Revision 1.28  1999/05/21 12:00:17  adam
+ * Better diagnostics for extraction process.
+ *
+ * Revision 1.27  1999/05/20 12:57:18  adam
  * Implemented TCL filter. Updated recctrl system.
  *
  * Revision 1.26  1999/03/02 16:15:44  quinn
@@ -201,8 +207,9 @@ struct grs_handlers {
     struct grs_handler *handlers;
 };
 
-static data1_node *read_grs_type (struct grs_handlers *h,
-                                 struct grs_read_info *p, const char *type)
+static int read_grs_type (struct grs_handlers *h,
+                         struct grs_read_info *p, const char *type,
+                         data1_node **root)
 {
     struct grs_handler *gh = h->handlers;
     const char *cp = strchr (type, '.');
@@ -218,24 +225,23 @@ static data1_node *read_grs_type (struct grs_handlers *h,
     {
         if (!memcmp (type, gh->type->type, cp-type))
        {
-           data1_node *node;
            if (!gh->initFlag)
            {
                gh->initFlag = 1;
                gh->clientData = (*gh->type->init)();
            }
            p->clientData = gh->clientData;
-            node = (gh->type->read)(p);
+            *root = (gh->type->read)(p);
            gh->clientData = p->clientData;
-           return node;
+           return 0;
        }
     }
-    return NULL;
+    return 1;
 }
 
 static void grs_add_handler (struct grs_handlers *h, RecTypeGrs t)
 {
-    struct grs_handler *gh = malloc (sizeof(*gh));
+    struct grs_handler *gh = (struct grs_handler *) malloc (sizeof(*gh));
     gh->next = h->handlers;
     h->handlers = gh;
     gh->initFlag = 0;
@@ -245,7 +251,7 @@ static void grs_add_handler (struct grs_handlers *h, RecTypeGrs t)
 
 static void *grs_init(RecType recType)
 {
-    struct grs_handlers *h = malloc (sizeof(*h));
+    struct grs_handlers *h = (struct grs_handlers *) malloc (sizeof(*h));
     h->handlers = 0;
 
     grs_add_handler (h, recTypeGrs_sgml);
@@ -259,7 +265,7 @@ static void *grs_init(RecType recType)
 
 static void grs_destroy(void *clientData)
 {
-    struct grs_handlers *h = clientData;
+    struct grs_handlers *h = (struct grs_handlers *) clientData;
     struct grs_handler *gh = h->handlers, *gh_next;
     while (gh)
     {
@@ -404,7 +410,7 @@ static int grs_extract(void *clientData, struct recExtractCtrl *p)
     struct grs_read_info gri;
     oident oe;
     int oidtmp[OID_SIZE];
-    struct grs_handlers *h = clientData;
+    struct grs_handlers *h = (struct grs_handlers *) clientData;
 
     mem = nmem_create (); 
     gri.readf = p->readf;
@@ -416,9 +422,10 @@ static int grs_extract(void *clientData, struct recExtractCtrl *p)
     gri.mem = mem;
     gri.dh = p->dh;
 
-    n = read_grs_type (h, &gri, p->subType);
+    if (read_grs_type (h, &gri, p->subType, &n))
+       return RECCTRL_EXTRACT_ERROR;
     if (!n)
-        return -1;
+        return RECCTRL_EXTRACT_EOF;
 
     oe.proto = PROTO_Z3950;
     oe.oclass = CLASS_SCHEMA;
@@ -429,11 +436,11 @@ static int grs_extract(void *clientData, struct recExtractCtrl *p)
     if (dumpkeys(n, p, 0) < 0)
     {
        data1_free_tree(p->dh, n);
-       return -2;
+       return RECCTRL_EXTRACT_ERROR;
     }
     data1_free_tree(p->dh, n);
     nmem_destroy(mem);
-    return 0;
+    return RECCTRL_EXTRACT_OK;
 }
 
 /*
@@ -519,7 +526,7 @@ static int grs_retrieve(void *clientData, struct recRetrieveCtrl *p)
     NMEM mem;
     struct grs_read_info gri;
     char *tagname;
-    struct grs_handlers *h = clientData;
+    struct grs_handlers *h = (struct grs_handlers *) clientData;
     
     mem = nmem_create();
     gri.readf = p->readf;
@@ -532,7 +539,12 @@ static int grs_retrieve(void *clientData, struct recRetrieveCtrl *p)
     gri.dh = p->dh;
 
     logf (LOG_DEBUG, "grs_retrieve");
-    node = read_grs_type (h, &gri, p->subType);
+    if (read_grs_type (h, &gri, p->subType, &node))
+    {
+       p->diagnostic = 14;
+        nmem_destroy (mem);
+       return 0;
+    }
     if (!node)
     {
        p->diagnostic = 14;
@@ -605,7 +617,7 @@ static int grs_retrieve(void *clientData, struct recRetrieveCtrl *p)
                                               "schemaIdentifier", mem)))
            {
                dnew->u.data.what = DATA1I_oid;
-               dnew->u.data.data = nmem_malloc(mem, p - tmp);
+               dnew->u.data.data = (char *) nmem_malloc(mem, p - tmp);
                memcpy(dnew->u.data.data, tmp, p - tmp);
                dnew->u.data.len = p - tmp;
            }
@@ -659,21 +671,21 @@ static int grs_retrieve(void *clientData, struct recRetrieveCtrl *p)
                                              p->odr, &dummy)))
                p->diagnostic = 238; /* not available in requested syntax */
            else
-               p->rec_len = -1;
+               p->rec_len = (size_t) (-1);
            break;
        case VAL_EXPLAIN:
            if (!(p->rec_buf = data1_nodetoexplain(p->dh, node, selected,
                                                   p->odr)))
                p->diagnostic = 238;
            else
-               p->rec_len = -1;
+               p->rec_len = (size_t) (-1);
            break;
        case VAL_SUMMARY:
            if (!(p->rec_buf = data1_nodetosummary(p->dh, node, selected,
                                                   p->odr)))
                p->diagnostic = 238;
            else
-               p->rec_len = -1;
+               p->rec_len = (size_t) (-1);
            break;
        case VAL_SUTRS:
            if (!(p->rec_buf = data1_nodetobuf(p->dh, node, selected,