-/*
- * Copyright (C) 1995-2007, Index Data ApS
+/* This file is part of the YAZ toolkit.
+ * Copyright (C) 1995-2008 Index Data
* See the file LICENSE for details.
- *
- * $Id: odr_oct.c,v 1.10 2007-01-03 08:42:15 adam Exp $
*/
/**
* \file odr_oct.c
if (o->error)
return 0;
- if (o->t_class < 0)
+ if (o->op->t_class < 0)
{
- o->t_class = ODR_UNIVERSAL;
- o->t_tag = ODR_OCTETSTRING;
+ o->op->t_class = ODR_UNIVERSAL;
+ o->op->t_tag = ODR_OCTETSTRING;
}
- if ((res = ber_tag(o, p, o->t_class, o->t_tag, &cons, opt, name)) < 0)
+ res = ber_tag(o, p, o->op->t_class, o->op->t_tag, &cons, opt, name);
+ if (res < 0)
return 0;
if (!res)
return odr_missing(o, opt, name);
odr_prname(o, name);
odr_printf(o, "OCTETSTRING(len=%d) ", (*p)->len);
- o->op->stream_write(o, o->print, ODR_OCTETSTRING,
+ o->op->stream_write(o, o->op->print, ODR_OCTETSTRING,
(char*) (*p)->buf, (*p)->len);
odr_printf(o, "\n");
return 1;
if (o->error)
return 0;
- if (o->t_class < 0)
+ if (o->op->t_class < 0)
{
- o->t_class = ODR_UNIVERSAL;
- o->t_tag = ODR_OCTETSTRING;
+ o->op->t_class = ODR_UNIVERSAL;
+ o->op->t_tag = ODR_OCTETSTRING;
}
- if ((res = ber_tag(o, p, o->t_class, o->t_tag, &cons, opt, name)) < 0)
+ res = ber_tag(o, p, o->op->t_class, o->op->t_tag, &cons, opt, name);
+ if (res < 0)
return 0;
if (!res)
return odr_missing(o, opt, name);
if (o->error)
return 0;
- if (o->t_class < 0)
+ if (o->op->t_class < 0)
{
- o->t_class = ODR_UNIVERSAL;
- o->t_tag = ODR_OCTETSTRING;
+ o->op->t_class = ODR_UNIVERSAL;
+ o->op->t_tag = ODR_OCTETSTRING;
}
- if ((res = ber_tag(o, p, o->t_class, o->t_tag, &cons, opt, name)) < 0)
+ res = ber_tag(o, p, o->op->t_class, o->op->t_tag, &cons, opt, name);
+ if (res < 0)
return 0;
if (!res)
return odr_missing(o, opt, name);
t->buf = (unsigned char *) outbuf;
- ret = yaz_iconv (o->op->iconv_handle, &inbuf, &inleft,
- &outbuf, &outleft);
+ ret = yaz_iconv(o->op->iconv_handle, &inbuf, &inleft,
+ &outbuf, &outleft);
+ if (ret == (size_t)(-1))
+ {
+ odr_seterror(o, ODATA, 44);
+ return 0;
+ }
+ ret = yaz_iconv(o->op->iconv_handle, 0, 0,
+ &outbuf, &outleft);
+
if (ret == (size_t)(-1))
{
odr_seterror(o, ODATA, 44);
odr_seterror(o, ODATA, 45);
return 0;
}
+ ret = yaz_iconv(o->op->iconv_handle, 0, 0,
+ &outbuf, &outleft);
+ if (ret == (size_t)(-1))
+ {
+ odr_seterror(o, ODATA, 45);
+ return 0;
+ }
inleft = outbuf - (char*) *p;
(*p)[inleft] = '\0'; /* null terminate it */