projects
/
yaz-moved-to-github.git
/ commitdiff
commit
grep
author
committer
pickaxe
?
search:
re
summary
|
shortlog
|
log
|
commit
| commitdiff |
tree
raw
|
patch
|
inline
| side by side (parent:
4602e6f
)
yaz-marcdump skips non-digit chars betwen recs and warns about it
author
Adam Dickmeiss
<adam@indexdata.dk>
Wed, 20 Apr 2005 13:04:04 +0000
(13:04 +0000)
committer
Adam Dickmeiss
<adam@indexdata.dk>
Wed, 20 Apr 2005 13:04:04 +0000
(13:04 +0000)
util/marcdump.c
patch
|
blob
|
history
diff --git
a/util/marcdump.c
b/util/marcdump.c
index
6dd79d1
..
82377b3
100644
(file)
--- a/
util/marcdump.c
+++ b/
util/marcdump.c
@@
-2,7
+2,7
@@
* Copyright (C) 1995-2005, Index Data ApS
* See the file LICENSE for details.
*
* Copyright (C) 1995-2005, Index Data ApS
* See the file LICENSE for details.
*
- * $Id: marcdump.c,v 1.28 2005-03-06 21:27:09 adam Exp $
+ * $Id: marcdump.c,v 1.29 2005-04-20 13:04:04 adam Exp $
*/
#if HAVE_CONFIG_H
*/
#if HAVE_CONFIG_H
@@
-199,18
+199,45
@@
int main (int argc, char **argv)
r = fread (buf, 1, 5, inf);
if (r < 5)
{
r = fread (buf, 1, 5, inf);
if (r < 5)
{
- if (r && print_offset)
- printf ("Extra %d bytes", r);
+ if (r && print_offset && verbose)
+ printf ("Extra %d bytes at end of file", r);
break;
}
break;
}
+ while (*buf < '0' || *buf > '9')
+ {
+ int i;
+ long off = ftell(inf) - 5;
+ if (verbose || print_offset)
+ printf("Skipping bad byte %d (0x%02X) at offset "
+ "%ld (0x%lx)\n",
+ *buf & 0xff, *buf & 0xff,
+ off, off);
+ for (i = 0; i<4; i++)
+ buf[i] = buf[i+1];
+ r = fread(buf+4, 1, 1, inf);
+ if (r < 1)
+ break;
+ }
+ if (r < 1)
+ {
+ if (verbose || print_offset)
+ printf ("End of file with extra garbage\n");
+ break;
+ }
if (print_offset)
{
if (print_offset)
{
- long off = ftell(inf);
- printf ("Record %d offset %ld\n", num, (long) off);
+ long off = ftell(inf) - 5;
+ printf ("Record %d offset %ld (0x%lx)\n", num,
+ off, off);
}
len = atoi_n(buf, 5);
if (len < 25 || len > 100000)
}
len = atoi_n(buf, 5);
if (len < 25 || len > 100000)
+ {
+ long off = ftell(inf) - 5;
+ printf("Bad Length %d read at offset %ld (%lx)\n",
+ len, (long) off, (long) off);
break;
break;
+ }
len = len - 5;
r = fread (buf + 5, 1, len, inf);
if (r < len)
len = len - 5;
r = fread (buf + 5, 1, len, inf);
if (r < len)