X-Git-Url: http://jsfdemo.indexdata.com/?a=blobdiff_plain;ds=inline;f=recctrl%2Frecgrs.c;h=680dde2edae8317dcabfa0c0e6498a667a65b050;hb=d960df9d3f91d209797047fca679027e365e8d02;hp=a8ed698be7f480acbb2ba92965a6de08b628e85d;hpb=4415da5dbbba04e50d4524347486d60113ed569c;p=idzebra-moved-to-github.git diff --git a/recctrl/recgrs.c b/recctrl/recgrs.c index a8ed698..680dde2 100644 --- a/recctrl/recgrs.c +++ b/recctrl/recgrs.c @@ -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,