* Sebastian Hammer, Adam Dickmeiss
*
* $Log: marc.c,v $
- * Revision 1.7 1995-11-09 15:24:02 adam
+ * Revision 1.9 1996-07-03 13:31:13 adam
+ * The xmalloc/xfree functions from YAZ are used to manage memory.
+ *
+ * Revision 1.8 1995/11/14 16:48:00 adam
+ * Bug fix: record extraction in line mode merged lines with same tag.
+ *
+ * Revision 1.7 1995/11/09 15:24:02 adam
* Allow charsets [..] in record match.
*
* Revision 1.6 1995/08/28 12:21:22 adam
*size = atoi_n (length, 5);
if (*size <= 6)
return NULL;
- if (!(buf = malloc (*size+1)))
+ if (!(buf = xmalloc (*size+1)))
return NULL;
if (fread (buf+5, 1, *size-5, inf) != (*size-5))
{
- free (buf);
+ xfree (buf);
return NULL;
}
memcpy (buf, length, 5);
char ptag[4];
int mode = 0;
- *ptag = '\0';
if (!strcmp (argv[3], "field"))
mode = 'f';
else if (!strcmp (argv[3], "line"))
char indicator[128];
char identifier[128];
+ *ptag = '\0';
memcpy (tag, buf+entry_p, 3);
entry_p += 3;
tag[3] = '\0';
}
if (marc_compare (identifier, argv[6])==0)
{
- char *data = malloc (i-i0+1);
+ char *data = xmalloc (i-i0+1);
memcpy (data, buf+i0, i-i0);
data[i-i0] = '\0';
}
else
Tcl_AppendElement (interp, data);
- free (data);
+ xfree (data);
}
}
+ if (mode == 'l' && *ptag)
+ Tcl_AppendResult (interp, "}} ", NULL);
if (i < end_offset)
logf (LOG_WARN, "MARC: separator but not at end of field");
if (buf[i] != ISO2709_RS && buf[i] != ISO2709_FS)
logf (LOG_WARN, "MARC: no separator at end of field");
}
- if (mode == 'l' && *ptag)
- Tcl_AppendResult (interp, "}} ", NULL);
return TCL_OK;
}