X-Git-Url: http://git.indexdata.com/?a=blobdiff_plain;f=src%2Fber_any.c;h=939fb74ab38a6435e561cf9d2b98d758df1c23f4;hb=5bc2ee09e4dff0f872ce738a5327bced915e3474;hp=fd3dbe7130db1e3865369a2674f75fa6f2ca2ba2;hpb=2788a4851b551e1a3efb320a2878b809f2d8a9d7;p=yaz-moved-to-github.git diff --git a/src/ber_any.c b/src/ber_any.c index fd3dbe7..939fb74 100644 --- a/src/ber_any.c +++ b/src/ber_any.c @@ -1,9 +1,9 @@ /* This file is part of the YAZ toolkit. - * Copyright (C) 1995-2009 Index Data + * Copyright (C) 1995-2012 Index Data * See the file LICENSE for details. */ -/** +/** * \file ber_any.c * \brief Implements BER ANY encoding and decoding. * @@ -21,7 +21,7 @@ int ber_any(ODR o, Odr_any **p) { int res; - + switch (o->direction) { case ODR_DECODE: @@ -49,7 +49,7 @@ int completeBER_n(const unsigned char *buf, int len, int level) { int res, ll, zclass, tag, cons; const unsigned char *b = buf; - + if (level > 1000) { #if BER_ANY_DEBUG @@ -74,7 +74,7 @@ int completeBER_n(const unsigned char *buf, int len, int level) #endif return -1; /* error */ } - if (res == -1) + if (res == -1) { #if BER_ANY_DEBUG yaz_log(YLOG_LOG, "<<<<<<<<< return2 lev=%d res=%d", level, res); @@ -109,10 +109,9 @@ int completeBER_n(const unsigned char *buf, int len, int level) { if (b[0] == 0 && b[1] == 0) break; - if (!(res = completeBER_n(b, len, level+1))) - return 0; - if (res == -1) - return -1; + res = completeBER_n(b, len, level+1); + if (res <= 0) + return res; b += res; len -= res; } @@ -134,6 +133,7 @@ int completeBER(const unsigned char *buf, int len) /* * Local variables: * c-basic-offset: 4 + * c-file-style: "Stroustrup" * indent-tabs-mode: nil * End: * vim: shiftwidth=4 tabstop=8 expandtab