X-Git-Url: http://git.indexdata.com/?p=yaz-moved-to-github.git;a=blobdiff_plain;f=src%2Fber_len.c;h=47c6f0f2a291c330b0636d90f342bf3f18df7059;hp=bb4c08af9cdf0190a48b4d7ef043258c0ee4e6d1;hb=c753bab9ac07a09f1bd7ba1dc363e58310e307a7;hpb=c6e47cbbff56f39f6d81b079ebaeac41d793d4d9 diff --git a/src/ber_len.c b/src/ber_len.c index bb4c08a..47c6f0f 100644 --- a/src/ber_len.c +++ b/src/ber_len.c @@ -1,10 +1,16 @@ -/* - * Copyright (C) 1995-2003, Index Data. +/* This file is part of the YAZ toolkit. + * Copyright (C) Index Data * See the file LICENSE for details. - * Sebastian Hammer, Adam Dickmeiss + */ + +/** + * \file ber_len.c + * \brief Implements BER length octet encoding and decoding * - * $Id: ber_len.c,v 1.1 2003-10-27 12:21:30 adam Exp $ + * This source file implements BER encoding and decoding of + * the length octets. */ + #if HAVE_CONFIG_H #include #endif @@ -12,7 +18,8 @@ #include #include "odr-priv.h" -/* +/** + * ber_enclen: * Encode BER length octets. If exact, lenlen is the exact desired * encoding size, else, lenlen is the max available space. Len < 0 = * Indefinite encoding. @@ -26,61 +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; } -/* - * Decode BER length octets. Returns - * > 0 : number of bytes read +/** + * ber_declen: + * Decode BER length octets. Returns + * > 0 : number of bytes read * -1 : not enough room to read bytes within max bytes * -2 : other error * @@ -88,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; @@ -121,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 + */ +