* Sebastian Hammer, Adam Dickmeiss
*
* $Log: odr.c,v $
- * Revision 1.2 1995-03-07 10:19:05 quinn
+ * Revision 1.9 1995-04-10 10:23:11 quinn
+ * Smallish changes.
+ *
+ * Revision 1.8 1995/03/17 10:17:43 quinn
+ * Added memory management.
+ *
+ * Revision 1.7 1995/03/10 11:44:41 quinn
+ * Fixed serious stack-bug in odr_cons_begin
+ *
+ * Revision 1.6 1995/03/08 12:12:15 quinn
+ * Added better error checking.
+ *
+ * Revision 1.5 1995/03/07 13:28:57 quinn
+ * *** empty log message ***
+ *
+ * Revision 1.4 1995/03/07 13:16:13 quinn
+ * Fixed bug in odr_reset
+ *
+ * Revision 1.3 1995/03/07 10:21:31 quinn
+ * odr_errno-->odr_error
+ *
+ * Revision 1.2 1995/03/07 10:19:05 quinn
* Addded some method functions to the ODR type.
*
* Revision 1.1 1995/03/07 09:23:15 quinn
char *odr_errlist[] =
{
"No (unknown) error",
- "Memoy allocation failed",
+ "Memory allocation failed",
"System error",
"No space in buffer",
"Required data element missing",
"Unexpected tag",
- "Other error"
+ "Other error",
+ "Protocol error",
+ "Malformed data",
+ "Stack overflow"
};
void odr_perror(ODR o, char *message)
fprintf(stderr, "%s: %s\n", message, odr_errlist[o->error]);
}
-int odr_errno(ODR o)
+int odr_geterror(ODR o)
{
return o->error;
}
if (!(r = malloc(sizeof(*r))))
return 0;
r->direction = direction;
- r->print = stdout;
+ r->print = stderr;
r->buf = 0;
r->buflen = 0;
+ r->mem = 0;
odr_reset(r);
return r;
}
void odr_reset(ODR o)
{
o->error = ONONE;
- o->bp = 0;
+ o->bp = o->buf;
o->left = o->buflen;
o->t_class = -1;
o->t_tag = -1;
o->indent = 0;
- o->stackp = 0;
+ o->stackp = -1;
+ odr_release_mem(o->mem);
+ o->mem = 0;
}
void odr_destroy(ODR o)
{
+ odr_release_mem(o->mem);
+ if (o->print != stderr)
+ fclose(o->print);
free(o);
}
{
*len = o->bp - o->buf;
return (char *) o->buf;
-}
+}