Keep log level app2,app3. It is still being used
[yaz-moved-to-github.git] / util / marcdump.c
index 34700cf..ca9b324 100644 (file)
@@ -2,7 +2,7 @@
  * Copyright (C) 1995-2005, Index Data ApS
  * See the file LICENSE for details.
  *
- * $Id: marcdump.c,v 1.27 2005-02-08 13:51:31 adam Exp $
+ * $Id: marcdump.c,v 1.30 2005-04-20 13:17:29 adam Exp $
  */
 
 #if HAVE_CONFIG_H
@@ -193,34 +193,60 @@ int main (int argc, char **argv)
                 while (1)
                 {
                     int len;
-                    char *result;
+                    char *result = 0;
                     int rlen;
                     
                     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 -->\n", r);
                         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 data -->\n");
+                       break;
+                   }
                    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)
+                   {
+                       long off = ftell(inf) - 5;
+                       printf("Bad Length %d read at offset %ld (%lx)\n",
+                              len, (long) off, (long) off);
                         break;
+                   }
                     len = len - 5;
                     r = fread (buf + 5, 1, len, inf);
                     if (r < len)
                         break;
                     r = yaz_marc_decode_buf (mt, buf, -1, &result, &rlen);
-                    if (r <= 0)
-                        break;
-                   fwrite (result, rlen, 1, stdout);
+                   if (result)
+                       fwrite (result, rlen, 1, stdout);
 #if HAVE_XML2
-                   if (libxml_dom_test)
+                   if (r > 0 && libxml_dom_test)
                    {
                        xmlDocPtr doc = xmlParseMemory(result, rlen);
                        if (!doc)
@@ -256,7 +282,7 @@ int main (int argc, char **argv)
                        }
                    }
 #endif
-                    if (cfile)
+                    if (r > 0 && cfile)
                     {
                         char *p = buf;
                         int i;
@@ -276,6 +302,8 @@ int main (int argc, char **argv)
                         fprintf (cfile, "\"\n");
                     }
                    num++;
+                   if (verbose)
+                       printf("\n");
                 }
                 count++;
                 if (cd)