2 * Copyright (C) 1994, Index Data I/S
4 * Sebastian Hammer, Adam Dickmeiss
7 * Revision 1.3 1995-02-09 15:51:48 quinn
10 * Revision 1.2 1995/02/07 17:52:59 quinn
11 * A damn mess, but now things work, I think.
13 * Revision 1.1 1995/02/02 16:21:53 quinn
20 int odr_constructed_begin(ODR o, void *p, int class, int tag)
30 if (o->direction == ODR_DECODE)
32 if ((res = ber_tag(o, *(char**)p, o->t_class, o->t_tag, &cons)) < 0)
37 o->stack[++(o->stackp)].lenb = o->bp;
38 if (o->direction == ODR_ENCODE || o->direction == ODR_PRINT)
40 o->stack[o->stackp].lenlen = 1;
44 else if (o->direction == ODR_DECODE)
46 if ((res = ber_declen(o->bp, &o->stack[o->stackp].len)) < 0)
48 o->stack[o->stackp].lenlen = res;
54 o->stack[o->stackp].base = o->bp;
58 int odr_constructed_end(ODR o)
67 if (o->stack[o->stackp].len < 0)
69 if (*o->bp++ == 0 && *(o->bp++) == 0)
77 else if (o->bp - o->stack[o->stackp].base !=
78 o->stack[o->stackp].len)
83 if ((res = ber_enclen(o->stack[o->stackp].lenb,
84 o->bp - o->stack[o->stackp].base,
85 o->stack[o->stackp].lenlen, 1)) < 0)
87 if (res == 0) /* indefinite encoding */
89 *(o->bp++) = *(o->bp++) = 0;
94 case ODR_PRINT: return 1;