* Sebastian Hammer, Adam Dickmeiss
*
* $Log: dumpber.c,v $
- * Revision 1.1 1995-06-19 12:38:45 quinn
+ * Revision 1.5 1995-10-18 16:12:55 quinn
+ * Better diagnostics. Added special case in NULL to handle WAIS server.
+ *
+ * Revision 1.4 1995/09/29 17:12:21 quinn
+ * Smallish
+ *
+ * Revision 1.3 1995/09/27 15:02:57 quinn
+ * Modified function heads & prototypes.
+ *
+ * Revision 1.2 1995/06/27 13:20:51 quinn
+ * Fixed sign-clash. Non-fatal warning
+ *
+ * Revision 1.1 1995/06/19 12:38:45 quinn
* Added BER dumper.
*
*
#include <odr.h>
#include <stdio.h>
-static int do_dumpBER(FILE *f, char *buf, int len, int level)
+static int do_dumpBER(FILE *f, char *buf, int len, int level, int offset)
{
int res, ll, class, tag, cons;
char *b = buf;
return 0;
if (!buf[0] && !buf[1])
return 0;
- if ((res = ber_dectag(b, &class, &tag, &cons)) <= 0)
+ if ((res = ber_dectag((unsigned char*)b, &class, &tag, &cons)) <= 0)
return 0;
if (res > len)
{
fprintf(stderr, "Unexpected end of buffer\n");
return 0;
}
- fprintf(stderr, "%*s", level * 4, "");
+ fprintf(stderr, "%5d: %*s", offset, level * 4, "");
if (class == ODR_UNIVERSAL)
{
static char *nl[] =
fprintf(stderr, "[%d:%d]", class, tag);
b += res;
len -= res;
- if ((res = ber_declen(b, &ll)) <= 0)
+ if ((res = ber_declen((unsigned char*)b, &ll)) <= 0)
{
fprintf(stderr, "bad length\n");
return 0;
{
if (ll == -1 && *b == 0 && *(b + 1) == 0)
break;
- if (!(res = do_dumpBER(f, b, len, level + 1)))
+ if (!(res = do_dumpBER(f, b, len, level + 1, offset + (b - buf))))
{
fprintf(stderr, "Dump of content element failed.\n");
return 0;
int odr_dumpBER(FILE *f, char *buf, int len)
{
- return do_dumpBER(f, buf, len, 0);
+ return do_dumpBER(f, buf, len, 0, 0);
}