X-Git-Url: http://git.indexdata.com/?p=yaz-moved-to-github.git;a=blobdiff_plain;f=src%2Fodr_cons.c;h=81fa4e13ddf54aff06c1a93a40a85e71e2651dc9;hp=7f455dd606a1f2975df38724bf5d7fd15f51fdb7;hb=4c176312acdc3444c9afc820f76a393e64668e52;hpb=c6e47cbbff56f39f6d81b079ebaeac41d793d4d9 diff --git a/src/odr_cons.c b/src/odr_cons.c index 7f455dd..81fa4e1 100644 --- a/src/odr_cons.c +++ b/src/odr_cons.c @@ -1,10 +1,16 @@ /* - * Copyright (c) 1995-2003, Index Data + * Copyright (C) 1995-2005, Index Data ApS * See the file LICENSE for details. * - * $Id: odr_cons.c,v 1.1 2003-10-27 12:21:33 adam Exp $ + * $Id: odr_cons.c,v 1.5 2005-01-15 19:47:14 adam Exp $ * */ + +/** + * \file odr_cons.c + * \brief Implements ODR constructed codec. + */ + #if HAVE_CONFIG_H #include #endif @@ -43,6 +49,8 @@ int odr_constructed_begin(ODR o, void *p, int zclass, int tag, } o->op->stack[++(o->op->stackp)].lenb = o->bp; o->op->stack[o->op->stackp].len_offset = odr_tell(o); + o->op->stack_names[o->op->stackp] = name ? name : "?"; + o->op->stack_names[o->op->stackp + 1] = 0; #ifdef ODR_DEBUG fprintf(stderr, "[cons_begin(%d)]", o->op->stackp); #endif @@ -54,6 +62,7 @@ int odr_constructed_begin(ODR o, void *p, int zclass, int tag, if (odr_write(o, dummy, lenlen) < 0) /* dummy */ { + o->op->stack_names[o->op->stackp] = 0; --(o->op->stackp); return 0; } @@ -64,6 +73,7 @@ int odr_constructed_begin(ODR o, void *p, int zclass, int tag, odr_max(o))) < 0) { odr_seterror(o, OOTHER, 31); + o->op->stack_names[o->op->stackp] = 0; --(o->op->stackp); return 0; } @@ -72,6 +82,7 @@ int odr_constructed_begin(ODR o, void *p, int zclass, int tag, if (o->op->stack[o->op->stackp].len > odr_max(o)) { odr_seterror(o, OOTHER, 32); + o->op->stack_names[o->op->stackp] = 0; --(o->op->stackp); return 0; } @@ -79,12 +90,13 @@ int odr_constructed_begin(ODR o, void *p, int zclass, int tag, else if (o->direction == ODR_PRINT) { odr_prname(o, name); - fprintf(o->print, "{\n"); + odr_printf(o, "{\n"); o->indent++; } else { odr_seterror(o, OOTHER, 33); + o->op->stack_names[o->op->stackp] = 0; --(o->op->stackp); return 0; } @@ -117,6 +129,7 @@ int odr_constructed_end(ODR o) odr_seterror(o, OOTHER, 34); return 0; } + o->op->stack_names[o->op->stackp] = 0; switch (o->direction) { case ODR_DECODE: @@ -171,7 +184,7 @@ int odr_constructed_end(ODR o) o->op->stackp--; o->indent--; odr_prname(o, 0); - fprintf(o->print, "}\n"); + odr_printf(o, "}\n"); return 1; default: odr_seterror(o, OOTHER, 38);