X-Git-Url: http://git.indexdata.com/?p=yaz-moved-to-github.git;a=blobdiff_plain;f=src%2Fber_any.c;h=7243e3d050d7e4e56509a81bafdc676eb32b5f63;hp=0c73bd73c6f24fe27327bd08352850847d6e3a8d;hb=05193e78a2553c93a61da19a39e1276b1a509bac;hpb=346311370361ec56af79a2f7756c9a8db4f55a68 diff --git a/src/ber_any.c b/src/ber_any.c index 0c73bd7..7243e3d 100644 --- a/src/ber_any.c +++ b/src/ber_any.c @@ -1,11 +1,9 @@ -/* - * Copyright (C) 1995-2006, Index Data ApS +/* This file is part of the YAZ toolkit. + * Copyright (C) Index Data * See the file LICENSE for details. - * - * $Id: ber_any.c,v 1.5 2006-08-24 13:10:03 adam Exp $ */ -/** +/** * \file ber_any.c * \brief Implements BER ANY encoding and decoding. * @@ -23,19 +21,19 @@ int ber_any(ODR o, Odr_any **p) { int res; - + switch (o->direction) { case ODR_DECODE: - if ((res = completeBER(o->bp, odr_max(o))) <= 0) /* FIX THIS */ + if ((res = completeBER(o->op->bp, odr_max(o))) <= 0) /* FIX THIS */ { odr_seterror(o, OPROTO, 2); return 0; } - (*p)->buf = (unsigned char *)odr_malloc(o, res); - memcpy((*p)->buf, o->bp, res); - (*p)->len = (*p)->size = res; - o->bp += res; + (*p)->buf = (char *)odr_malloc(o, res); + memcpy((*p)->buf, o->op->bp, res); + (*p)->len = res; + o->op->bp += res; return 1; case ODR_ENCODE: if (odr_write(o, (*p)->buf, (*p)->len) < 0) @@ -47,11 +45,11 @@ int ber_any(ODR o, Odr_any **p) #define BER_ANY_DEBUG 0 -int completeBER_n(const unsigned char *buf, int len, int level) +int completeBER_n(const char *buf, int len, int level) { int res, ll, zclass, tag, cons; - const unsigned char *b = buf; - + const char *b = buf; + if (level > 1000) { #if BER_ANY_DEBUG @@ -76,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); @@ -111,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; } @@ -123,7 +120,7 @@ int completeBER_n(const unsigned char *buf, int len, int level) return (b - buf) + 2; } -int completeBER(const unsigned char *buf, int len) +int completeBER(const char *buf, int len) { int res = completeBER_n(buf, len, 0); #if BER_ANY_DEBUG @@ -136,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