X-Git-Url: http://git.indexdata.com/?a=blobdiff_plain;f=util%2Fmarcdisp.c;h=ad67e227ec23cfe3dc8dcdb0dd7a0dc7a44a475b;hb=eb403d586a08851dc75cdb8d1e70200f8e154fcb;hp=3806681cc0f0338324b6a972679a64cb8e662296;hpb=d9ee01635f03f9095a66f71b73580560d48798e8;p=yaz-moved-to-github.git diff --git a/util/marcdisp.c b/util/marcdisp.c index 3806681..ad67e22 100644 --- a/util/marcdisp.c +++ b/util/marcdisp.c @@ -1,10 +1,15 @@ /* - * Copyright (c) 1995, Index Data + * Copyright (c) 1995-2000, Index Data * See the file LICENSE for details. - * Sebastian Hammer, Adam Dickmeiss * * $Log: marcdisp.c,v $ - * Revision 1.8 1999-11-30 13:47:12 adam + * Revision 1.10 2000-02-05 10:47:19 adam + * Identifier-length and indicator-lenght no longer set to 2 (forced). + * + * Revision 1.9 1999/12/21 16:24:48 adam + * More robust ISO2709 handling (in case of real bad formats). + * + * Revision 1.8 1999/11/30 13:47:12 adam * Improved installation. Moved header files to include/yaz. * * Revision 1.7 1997/09/24 13:29:40 adam @@ -52,12 +57,16 @@ int marc_display_ex (const char *buf, FILE *outf, int debug) record_length = atoi_n (buf, 5); if (record_length < 25) return -1; - indicator_length = atoi_n (buf+10, 1); - identifier_length = atoi_n (buf+11, 1); + if (isdigit(buf[10])) + indicator_length = atoi_n (buf+10, 1); + else + indicator_length = 2; + if (isdigit(buf[11])) + identifier_length = atoi_n (buf+11, 1); + else + identifier_length = 2; base_address = atoi_n (buf+12, 4); - indicator_length = identifier_length = 2; - length_data_entry = atoi_n (buf+20, 1); length_starting = atoi_n (buf+21, 1); length_implementation = atoi_n (buf+22, 1); @@ -73,7 +82,11 @@ int marc_display_ex (const char *buf, FILE *outf, int debug) fprintf (outf, "Length implementation %5d\n", length_implementation); } for (entry_p = 24; buf[entry_p] != ISO2709_FS; ) + { entry_p += 3+length_data_entry+length_starting; + if (entry_p >= record_length) + return -1; + } base_address = entry_p+1; for (entry_p = 24; buf[entry_p] != ISO2709_FS; ) {