X-Git-Url: http://git.indexdata.com/?p=yaz-moved-to-github.git;a=blobdiff_plain;f=src%2Fber_tag.c;h=0443857f2b61bb929afd722c8f5e08737be7a389;hp=64908d7a044591623d148529e9e138cd63823c9d;hb=5564216deccb49e138f665e223c81fe6c1edd79d;hpb=fb6d99a0c7e07d9cc4a315c447deaf6564a85505 diff --git a/src/ber_tag.c b/src/ber_tag.c index 64908d7..0443857 100644 --- a/src/ber_tag.c +++ b/src/ber_tag.c @@ -1,11 +1,9 @@ -/* - * Copyright (C) 1995-2005, Index Data ApS +/* This file is part of the YAZ toolkit. + * Copyright (C) Index Data * See the file LICENSE for details. - * - * $Id: ber_tag.c,v 1.5 2005-06-25 15:46:03 adam Exp $ */ -/** +/** * \file ber_tag.c * \brief Implements BER tags encoding and decoding * @@ -19,15 +17,19 @@ #include #include "odr-priv.h" -/* ber_tag +/** + * \brief Encode/decode BER tags + * * On encoding: + * \verbatim * if p: write tag. return 1 (success) or -1 (error). * if !p: return 0. + * \endverbatim * On decoding: + * \verbatim * if tag && zclass match up, advance pointer and return 1. set cons. * else leave pointer unchanged. Return 0. - * - * Should perhaps be odr_tag? + * \endverbatim */ int ber_tag(ODR o, void *p, int zclass, int tag, int *constructed, int opt, const char *name) @@ -38,12 +40,12 @@ int ber_tag(ODR o, void *p, int zclass, int tag, int *constructed, int opt, if (o->direction == ODR_DECODE) *pp = 0; - o->t_class = -1; - if (o->op->stackp < 0) + o->op->t_class = -1; + if (ODR_STACK_EMPTY(o)) { odr_seek(o, ODR_S_SET, 0); - o->top = 0; - o->bp = o->buf; + o->op->top = 0; + o->op->bp = o->op->buf; odr_ber_tag->lclass = -1; } switch (o->direction) @@ -60,14 +62,9 @@ int ber_tag(ODR o, void *p, int zclass, int tag, int *constructed, int opt, } if ((rd = ber_enctag(o, zclass, tag, *constructed)) < 0) return -1; -#ifdef ODR_DEBUG - fprintf(stderr, "\n[class=%d,tag=%d,cons=%d,stackp=%d]", zclass, tag, - *constructed, o->op->stackp); -#endif return 1; - case ODR_DECODE: - if (o->op->stackp > -1 && !odr_constructed_more(o)) + if (ODR_STACK_NOT_EMPTY(o) && !odr_constructed_more(o)) { if (!opt) { @@ -79,7 +76,7 @@ int ber_tag(ODR o, void *p, int zclass, int tag, int *constructed, int opt, if (odr_ber_tag->lclass < 0) { if ((odr_ber_tag->br = - ber_dectag(o->bp, &odr_ber_tag->lclass, + ber_dectag(o->op->bp, &odr_ber_tag->lclass, &odr_ber_tag->ltag, &odr_ber_tag->lcons, odr_max(o))) <= 0) { @@ -87,16 +84,10 @@ int ber_tag(ODR o, void *p, int zclass, int tag, int *constructed, int opt, odr_setelement(o, name); return 0; } -#ifdef ODR_DEBUG - fprintf(stderr, - "\n[class=%d,tag=%d,cons=%d,stackp=%d]", - odr_ber_tag->lclass, odr_ber_tag->ltag, - odr_ber_tag->lcons, o->op->stackp); -#endif } if (zclass == odr_ber_tag->lclass && tag == odr_ber_tag->ltag) { - o->bp += odr_ber_tag->br; + o->op->bp += odr_ber_tag->br; *constructed = odr_ber_tag->lcons; odr_ber_tag->lclass = -1; return 1; @@ -124,9 +115,10 @@ int ber_tag(ODR o, void *p, int zclass, int tag, int *constructed, int opt, } } -/* ber_enctag - * BER-encode a zclass/tag/constructed package (identifier octets). Return - * number of bytes encoded, or -1 if out of bounds. +/** + * \brief BER-encode a zclass/tag/constructed package (identifier octets). + * + * Return number of bytes encoded, or -1 if out of bounds. */ int ber_enctag(ODR o, int zclass, int tag, int constructed) { @@ -165,12 +157,15 @@ int ber_enctag(ODR o, int zclass, int tag, int constructed) } } -/* ber_dectag - * Decode BER identifier octets. Return number of bytes read or -1 for error. +/** + * \brief Decodes BER identifier octets. + * + * Returns number of bytes read or -1 for error. */ -int ber_dectag(const unsigned char *b, int *zclass, int *tag, +int ber_dectag(const char *cp, int *zclass, int *tag, int *constructed, int max) { + const unsigned char *b = (const unsigned char *) cp; int l = 1; if (l > max) @@ -194,6 +189,7 @@ int ber_dectag(const unsigned char *b, int *zclass, int *tag, /* * Local variables: * c-basic-offset: 4 + * c-file-style: "Stroustrup" * indent-tabs-mode: nil * End: * vim: shiftwidth=4 tabstop=8 expandtab