/*
- * Copyright (c) 1995-1997, Index Data.
+ * Copyright (c) 1995-1999, Index Data.
* See the file LICENSE for details.
* Sebastian Hammer, Adam Dickmeiss
*
* $Log: d1_grs.c,v $
- * Revision 1.13 1998-02-11 11:53:35 adam
+ * Revision 1.20 2002-05-13 14:13:37 adam
+ * XML reader for data1 (EXPAT)
+ *
+ * Revision 1.19 2002/04/15 09:06:30 adam
+ * Fix explain tags for XML writer
+ *
+ * Revision 1.18 2002/04/12 14:40:07 adam
+ * GRS-1 writer accepts non-abs
+ *
+ * Revision 1.17 1999/11/30 13:47:12 adam
+ * Improved installation. Moved header files to include/yaz.
+ *
+ * Revision 1.16 1999/08/27 09:40:32 adam
+ * Renamed logf function to yaz_log. Removed VC++ project files.
+ *
+ * Revision 1.15 1999/03/31 11:18:25 adam
+ * Implemented odr_strdup. Added Reference ID to backend server API.
+ *
+ * Revision 1.14 1998/03/16 12:21:15 adam
+ * Fixed problem with tag names that weren't set to the right value
+ * when wildcards were used.
+ *
+ * Revision 1.13 1998/02/11 11:53:35 adam
* Changed code so that it compiles as C++.
*
* Revision 1.12 1997/11/24 11:33:56 adam
#include <assert.h>
#include <stdlib.h>
-#include <proto.h>
-#include <log.h>
-
-#include <data1.h>
+#include <yaz/proto.h>
+#include <yaz/log.h>
+#include <yaz/data1.h>
#define D1_VARIANTARRAY 20 /* fixed max length on sup'd variant-list. Lazy me */
{
case DATA1K_string:
t->which = Z_Triple_internationalString;
- t->value.internationalString = (char *)odr_malloc(o,
- strlen(p->u.variant.value)+1);
- strcpy(t->value.internationalString, p->u.variant.value);
+ t->value.internationalString =
+ odr_strdup(o, p->u.variant.value);
break;
default:
- logf(LOG_WARN, "Unable to handle value for variant %s",
- p->u.variant.type->name);
+ yaz_log(LOG_WARN, "Unable to handle value for variant %s",
+ p->u.variant.type->name);
return 0;
}
}
D1_VARIANTARRAY);
else if (m->num_supportedVariants >= D1_VARIANTARRAY)
{
- logf(LOG_WARN, "Too many variants (D1_VARIANTARRAY==%d)",
- D1_VARIANTARRAY);
+ yaz_log(LOG_WARN, "Too many variants (D1_VARIANTARRAY==%d)",
+ D1_VARIANTARRAY);
return -1;
}
break;
case DATA1I_text:
toget = n->u.data.len;
- if (p->u.tag.get_bytes > 0 && p->u.tag.get_bytes < toget)
+ if (p && p->u.tag.get_bytes > 0 && p->u.tag.get_bytes < toget)
toget = p->u.tag.get_bytes;
res->which = Z_ElementData_string;
res->u.string = (char *)odr_malloc(o, toget+1);
*len += n->u.data.len;
break;
default:
- logf(LOG_WARN, "Can't handle datatype.");
+ yaz_log(LOG_WARN, "Can't handle datatype.");
return 0;
}
}
*/
else if (n->which == DATA1N_data || n->which == DATA1N_variant)
{
- if (!(tag = data1_gettagbyname (dh, n->root->u.root.absyn->tagset,
+ if (n->root->u.root.absyn &&
+ !(tag = data1_gettagbyname (dh, n->root->u.root.absyn->tagset,
"wellKnown")))
{
- logf(LOG_WARN, "Unable to locate tag for 'wellKnown'");
+ yaz_log(LOG_WARN, "Unable to locate tag for 'wellKnown'");
return 0;
}
data = n;
}
else
{
- logf(LOG_WARN, "Bad data.");
+ yaz_log(LOG_WARN, "Bad data.");
return 0;
}
{
char *tagstr;
- if (tag) /* well-known tag */
- tagstr = tag->value.string;
- else /* tag local to this file */
- tagstr = n->u.tag.tag;
-
+ if (n->which == DATA1N_tag)
+ tagstr = n->u.tag.tag; /* tag at node */
+ else if (tag)
+ tagstr = tag->value.string; /* no take from well-known */
+ else
+ tagstr = "???"; /* no tag at all! */
res->tagValue->which = Z_StringOrNumeric_string;
- res->tagValue->u.string = (char *)odr_malloc(o, strlen(tagstr)+1);
- strcpy(res->tagValue->u.string, tagstr);
+ res->tagValue->u.string = odr_strdup(o, tagstr);
}
res->tagOccurrence = 0;
res->appliedVariant = 0;