- while (fgets(buf = line, 512, f))
- {
- while (*buf && isspace(*buf))
- buf++;
- if (!*buf || *buf == '#')
- continue;
- break;
- }
- if (*buf == '}')
- return r;
- if (sscanf(buf, "(%d,%[^)])", &type, value) != 2)
- {
- logf(LOG_WARN, "Bad data in '%s'", buf);
- return 0;
- }
- if (!type && *value == '0')
- return r;
- if (!(buf = strchr(buf, ')')))
- return 0;
- buf++;
- while (*buf && isspace(*buf))
- buf++;
- if (!*buf)
- return 0;
- if (!r)
- {
- r = odr_malloc(o, sizeof(*r));
- r->elements = odr_malloc(o, sizeof(Z_TaggedElement*) *
- GRS_MAX_FIELDS);
- r->num_elements = 0;
- }
- r->elements[r->num_elements] = t = odr_malloc(o,
- sizeof(Z_TaggedElement));
- t->tagType = odr_malloc(o, sizeof(int));
- *t->tagType = type;
- t->tagValue = odr_malloc(o, sizeof(Z_StringOrNumeric));
- if ((ivalue = atoi(value)))
- {
- t->tagValue->which = Z_StringOrNumeric_numeric;
- t->tagValue->u.numeric = odr_malloc(o, sizeof(int));
- *t->tagValue->u.numeric = ivalue;
- }
- else
- {
- t->tagValue->which = Z_StringOrNumeric_string;
- t->tagValue->u.string = odr_malloc(o, strlen(value)+1);
- strcpy(t->tagValue->u.string, value);
- }
- t->tagOccurrence = 0;
- t->metaData = 0;
- t->appliedVariant = 0;
- t->content = c = odr_malloc(o, sizeof(Z_ElementData));
- if (*buf == '{')
- {
- c->which = Z_ElementData_subtree;
- c->u.subtree = read_grs1(f, o);
- }
- else
- {
- c->which = Z_ElementData_string;
- buf[strlen(buf)-1] = '\0';
- c->u.string = odr_malloc(o, strlen(buf)+1);
- strcpy(c->u.string, buf);
- }
- r->num_elements++;
+ while (fgets(buf = line, 512, f))
+ {
+ while (*buf && isspace(*(unsigned char *) buf))
+ buf++;
+ if (!*buf || *buf == '#')
+ continue;
+ break;
+ }
+ if (*buf == '}')
+ return r;
+ if (sscanf(buf, "(%d,%[^)])", &type, value) != 2)
+ {
+ yaz_log(YLOG_WARN, "Bad data in '%s'", buf);
+ return 0;
+ }
+ if (!type && *value == '0')
+ return r;
+ if (!(buf = strchr(buf, ')')))
+ return 0;
+ buf++;
+ while (*buf && isspace(*(unsigned char *) buf))
+ buf++;
+ if (!*buf)
+ return 0;
+ if (!r)
+ {
+ r = (Z_GenericRecord *)odr_malloc(o, sizeof(*r));
+ r->elements = (Z_TaggedElement **)
+ odr_malloc(o, sizeof(Z_TaggedElement*) * GRS_MAX_FIELDS);
+ r->num_elements = 0;
+ }
+ r->elements[r->num_elements] = t = (Z_TaggedElement *)
+ odr_malloc(o, sizeof(Z_TaggedElement));
+ t->tagType = odr_intdup(o, type);
+ t->tagValue = (Z_StringOrNumeric *)
+ odr_malloc(o, sizeof(Z_StringOrNumeric));
+ if ((ivalue = atoi(value)))
+ {
+ t->tagValue->which = Z_StringOrNumeric_numeric;
+ t->tagValue->u.numeric = odr_intdup(o, ivalue);
+ }
+ else
+ {
+ t->tagValue->which = Z_StringOrNumeric_string;
+ t->tagValue->u.string = (char *)odr_malloc(o, strlen(value)+1);
+ strcpy(t->tagValue->u.string, value);
+ }
+ t->tagOccurrence = 0;
+ t->metaData = 0;
+ t->appliedVariant = 0;
+ t->content = c = (Z_ElementData *)odr_malloc(o, sizeof(Z_ElementData));
+ if (*buf == '{')
+ {
+ c->which = Z_ElementData_subtree;
+ c->u.subtree = read_grs1(f, o);
+ }
+ else
+ {
+ c->which = Z_ElementData_string;
+ buf[strlen(buf)-1] = '\0';
+ c->u.string = odr_strdup(o, buf);
+ }
+ r->num_elements++;