/* This file is part of the YAZ toolkit.
- * Copyright (C) 1995-2011 Index Data
+ * Copyright (C) 1995-2013 Index Data
* See the file LICENSE for details.
*/
-/**
+/**
* \file ber_oct.c
* \brief Implements ber_octetstring
*
#endif
#include "odr-priv.h"
+#include <yaz/log.h>
+#include <assert.h>
int ber_octetstring(ODR o, Odr_oct *p, int cons)
{
int res, len;
- const unsigned char *base;
+ const char *base;
+#if OCT_SIZE
unsigned char *c;
+#endif
switch (o->direction)
{
odr_seterror(o, OOTHER, 16);
return 0;
}
+#if OCT_SIZE
+ assert(p->size == 0);
+ assert(p->len == 0);
if (len + 1 > p->size - p->len)
{
c = (unsigned char *)odr_malloc(o, p->size += len + 1);
/* it helps somes applications that assumes C strings */
if (len)
p->buf[p->len] = '\0';
+#else
+ p->len = len;
+ p->buf = odr_malloc(o, len + 1);
+ memcpy(p->buf, o->bp, len);
+ p->buf[len] = '\0';
+ o->bp += len;
+#endif
return 1;
case ODR_ENCODE:
if ((res = ber_enclen(o, p->len, 5, 0)) < 0)