* Sebastian Hammer, Adam Dickmeiss
*
* $Log: ber_oct.c,v $
- * Revision 1.1 1995-02-02 16:21:52 quinn
+ * Revision 1.4 1995-02-10 15:55:28 quinn
+ * Bug fixes, mostly.
+ *
+ * Revision 1.3 1995/02/03 17:04:34 quinn
+ * *** empty log message ***
+ *
+ * Revision 1.2 1995/02/02 20:38:50 quinn
+ * Updates.
+ *
+ * Revision 1.1 1995/02/02 16:21:52 quinn
* First kick.
*
*/
#include <odr.h>
-static int more_chunks(ODR o, unsigned char *base, int len)
-{
- if (!len)
- return 0;
- if (len < 0) /* indefinite length */
- {
- if (*o->bp == 0 && *(o->bp + 1) == 0)
- {
- o->bp += 2;
- o->left -= 2;
- return 0;
- }
- else
- return 1;
- }
- else
- return o->bp - base < len;
-}
-
-int ber_octetstring(ODR o, ODR_OCT *p, int cons)
+int ber_octetstring(ODR o, Odr_oct *p, int cons)
{
int res, len;
unsigned char *base, *c;
if (cons) /* fetch component strings */
{
base = o->bp;
- while (more_chunks(o, base, len))
+ while (odp_more_chunks(o, base, len))
if (!odr_octetstring(o, &p, 0))
return 0;
return 1;
/* primitive octetstring */
if (len < 0)
return 0;
- if (len == 0)
- return 1;
- if (len > p->size - p->len)
+ if (len + 1 > p->size - p->len)
{
- c = nalloc(o, p->size += len);
+ c = nalloc(o, p->size += len + 1);
if (p->len)
memcpy(c, p->buf, p->len);
p->buf = c;
}
- memcpy(p->buf + p->len, o->bp, len);
+ if (len)
+ memcpy(p->buf + p->len, o->bp, len);
p->len += len;
o->bp += len;
o->left -= len;