X-Git-Url: http://git.indexdata.com/?p=yaz-moved-to-github.git;a=blobdiff_plain;f=src%2Fber_len.c;h=47c6f0f2a291c330b0636d90f342bf3f18df7059;hp=4075ea67e0e9166811f4035ea6650921e40aa0bb;hb=053c92d650501a953d68b228ad74d96b4606eaf6;hpb=4c176312acdc3444c9afc820f76a393e64668e52 diff --git a/src/ber_len.c b/src/ber_len.c index 4075ea6..47c6f0f 100644 --- a/src/ber_len.c +++ b/src/ber_len.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_len.c,v 1.3 2005-01-15 19:47:11 adam Exp $ */ -/** +/** * \file ber_len.c * \brief Implements BER length octet encoding and decoding * @@ -35,62 +33,56 @@ int ber_enclen(ODR o, int len, int lenlen, int exact) int n = 0; int lenpos, end; -#ifdef ODR_DEBUG - fprintf(stderr, "[len=%d]", len); -#endif if (len < 0) /* Indefinite */ { - if (odr_putc(o, 0x80) < 0) - return 0; -#ifdef ODR_DEBUG - fprintf(stderr, "[indefinite]"); -#endif - return 0; + if (odr_putc(o, 0x80) < 0) + return 0; + return 0; } if (len <= 127 && (lenlen == 1 || !exact)) /* definite short form */ { - if (odr_putc(o, (unsigned char) len) < 0) - return 0; - return 1; + if (odr_putc(o, (unsigned char) len) < 0) + return 0; + return 1; } if (lenlen == 1) { - if (odr_putc(o, 0x80) < 0) - return 0; - return 0; + if (odr_putc(o, 0x80) < 0) + return 0; + return 0; } /* definite long form */ do { - octs[n++] = len; - len >>= 8; + octs[n++] = len; + len >>= 8; } while (len); if (n >= lenlen) - return -1; + return -1; lenpos = odr_tell(o); /* remember length-of-length position */ if (odr_putc(o, 0) < 0) /* dummy */ - return 0; + return 0; if (exact) - while (n < --lenlen) /* pad length octets */ - if (odr_putc(o, 0) < 0) - return 0; + while (n < --lenlen) /* pad length octets */ + if (odr_putc(o, 0) < 0) + return 0; while (n--) - if (odr_putc(o, octs[n]) < 0) - return 0; + if (odr_putc(o, octs[n]) < 0) + return 0; /* set length of length */ end = odr_tell(o); odr_seek(o, ODR_S_SET, lenpos); if (odr_putc(o, (end - lenpos - 1) | 0X80) < 0) - return 0; + return 0; odr_seek(o, ODR_S_END, 0); return odr_tell(o) - lenpos; } /** * ber_declen: - * Decode BER length octets. Returns - * > 0 : number of bytes read + * Decode BER length octets. Returns + * > 0 : number of bytes read * -1 : not enough room to read bytes within max bytes * -2 : other error * @@ -98,32 +90,26 @@ int ber_enclen(ODR o, int len, int lenlen, int exact) * len = -1 indefinite length. * len >= 0 definite length */ -int ber_declen(const unsigned char *buf, int *len, int max) +int ber_declen(const char *buf, int *len, int max) { - const unsigned char *b = buf; + const unsigned char *b = (const unsigned char *) buf; int n; if (max < 1) return -1; if (*b == 0X80) /* Indefinite */ { - *len = -1; -#ifdef ODR_DEBUG - fprintf(stderr, "[len=%d]", *len); -#endif - return 1; + *len = -1; + return 1; } if (!(*b & 0X80)) /* Definite short form */ { - *len = (int) *b; -#ifdef ODR_DEBUG - fprintf(stderr, "[len=%d]", *len); -#endif - return 1; + *len = (int) *b; + return 1; } if (*b == 0XFF) /* reserved value */ - return -2; - /* indefinite long form */ + return -2; + /* indefinite long form */ n = *b & 0X7F; if (n >= max) return -1; @@ -131,13 +117,19 @@ int ber_declen(const unsigned char *buf, int *len, int max) b++; while (--n >= 0) { - *len <<= 8; - *len |= *(b++); + *len <<= 8; + *len |= *(b++); } if (*len < 0) return -2; -#ifdef ODR_DEBUG - fprintf(stderr, "[len=%d]", *len); -#endif - return (b - buf); + return ((const char *) b - buf); } +/* + * Local variables: + * c-basic-offset: 4 + * c-file-style: "Stroustrup" + * indent-tabs-mode: nil + * End: + * vim: shiftwidth=4 tabstop=8 expandtab + */ +