X-Git-Url: http://git.indexdata.com/?a=blobdiff_plain;f=odr%2Fodr_enum.c;fp=odr%2Fodr_enum.c;h=078593dc24d617eedbef3c92626f7ebbd25721ff;hb=74582047b4f19d220c6722a85f4651dc742f083f;hp=0000000000000000000000000000000000000000;hpb=90b607d71dc080e2d6d9bd9670d8e20431c9f2a0;p=yaz-moved-to-github.git diff --git a/odr/odr_enum.c b/odr/odr_enum.c new file mode 100644 index 0000000..078593d --- /dev/null +++ b/odr/odr_enum.c @@ -0,0 +1,47 @@ +/* + * Copyright (c) 1995-1998, Index Data + * See the file LICENSE for details. + * Sebastian Hammer, Adam Dickmeiss + * + * $Log: odr_enum.c,v $ + * Revision 1.1 1998-03-20 14:45:01 adam + * Implemented odr_enum and odr_set_of. + * + */ + +#include +#include + +/* + * Top level enum en/decoder. + * Returns 1 on success, 0 on error. + */ +int odr_enum(ODR o, int **p, int opt) +{ + int res, cons = 0; + + if (o->error) + return 0; + if (o->t_class < 0) + { + o->t_class = ODR_UNIVERSAL; + o->t_tag = ODR_ENUM; + } + if ((res = ber_tag(o, p, o->t_class, o->t_tag, &cons, opt)) < 0) + return 0; + if (!res) + return opt; + if (o->direction == ODR_PRINT) + { + fprintf(o->print, "%s%d\n", odr_indent(o), **p); + return 1; + } + if (cons) + { + o->error = OPROTO; + return 0; + } + if (o->direction == ODR_DECODE) + *p = (int *)odr_malloc(o, sizeof(int)); + return ber_integer(o, *p); +}