X-Git-Url: http://lists.indexdata.com/cgi-bin?a=blobdiff_plain;f=grs.c;h=f5e4d22390ebbe74549ac9d13ee8af5ed71ae9e7;hb=4b0a2dcc8145c6b721a23c2a9bfe9f3f9596fb5a;hp=c58d7c61a7518431e5951e34effbaac1a19d38e3;hpb=bc6bd3345159c5d9619098bb96327f2d87fad667;p=ir-tcl-moved-to-github.git diff --git a/grs.c b/grs.c index c58d7c6..f5e4d22 100644 --- a/grs.c +++ b/grs.c @@ -1,11 +1,26 @@ /* * IR toolkit for tcl/tk - * (c) Index Data 1995 + * (c) Index Data 1995-1996 * See the file LICENSE for details. * Sebastian Hammer, Adam Dickmeiss * * $Log: grs.c,v $ - * Revision 1.4 1996-05-29 06:37:42 adam + * Revision 1.9 1996-08-16 15:07:44 adam + * First work on Explain. + * + * Revision 1.8 1996/07/03 13:31:10 adam + * The xmalloc/xfree functions from YAZ are used to manage memory. + * + * Revision 1.7 1996/06/05 09:26:20 adam + * Bug fix: the change above introduced an error. + * + * Revision 1.6 1996/06/05 08:59:23 adam + * Changed syntax of element specs in GRS-1 retrieval. + * + * Revision 1.5 1996/05/29 20:28:08 adam + * Bug fix: Function ir_tcl_grs_del sometimes free'd bad memory. + * + * Revision 1.4 1996/05/29 06:37:42 adam * Function ir_tcl_get_grs_r enhanced so that specific elements can be * extracted. * @@ -45,27 +60,27 @@ void ir_tcl_grs_del (IrTcl_GRS_Record **grs_record) e = (*grs_record)->entries; for (i = 0; i < (*grs_record)->noTags; i++, e++) { - switch (e->tagType) + switch (e->tagWhich) { case Z_StringOrNumeric_numeric: break; default: - free (e->tagVal.str); + xfree (e->tagVal.str); } switch (e->dataWhich) { case Z_ElementData_octets: - free (e->tagData.octets.buf); + xfree (e->tagData.octets.buf); break; case Z_ElementData_numeric: break; case Z_ElementData_date: - free (e->tagData.str); + xfree (e->tagData.str); break; case Z_ElementData_ext: break; case Z_ElementData_string: - free (e->tagData.str); + xfree (e->tagData.str); break; case Z_ElementData_trueOrFalse: case Z_ElementData_oid: @@ -80,8 +95,8 @@ void ir_tcl_grs_del (IrTcl_GRS_Record **grs_record) break; } } - free ((*grs_record)->entries); - free (*grs_record); + xfree ((*grs_record)->entries); + xfree (*grs_record); *grs_record = NULL; } @@ -171,12 +186,14 @@ static int ir_tcl_get_grs_r (Tcl_Interp *interp, IrTcl_GRS_Record *grs_record, else { const char *cp0 = argv[argno]; - const char *cp1 = strchr (cp0, '.'); + const char *cp1 = strchr (cp0, ','); if (!cp1 || cp1-cp0 < 1) yes = 1; else { + if (*cp0 == '(') + cp0++; if (atoi(cp0) == e->tagType) { if (e->tagWhich == Z_StringOrNumeric_numeric) @@ -186,7 +203,11 @@ static int ir_tcl_get_grs_r (Tcl_Interp *interp, IrTcl_GRS_Record *grs_record, } else { - if (!strcmp (cp1+1, e->tagVal.str)) + int len = strlen(cp1+1); + if (cp1[len] == ')') + len--; + if (len && strlen(e->tagVal.str) == len && + !memcmp (cp1+1, e->tagVal.str, len)) yes = 1; } }