-/*
- * 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: odr_oct.c,v 1.9 2005-06-25 15:46:04 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->direction == ODR_DECODE)
{
*p = (Odr_oct *)odr_malloc(o, sizeof(Odr_oct));
- (*p)->size= 0;
(*p)->len = 0;
(*p)->buf = 0;
}
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 = (Odr_oct *)odr_malloc(o, sizeof(Odr_oct)); /* wrapper for octstring */
if (o->direction == ODR_ENCODE)
{
- t->buf = (unsigned char *) *p;
- t->size = t->len = strlen(*p);
+ t->buf = *p;
+ t->len = strlen(*p);
}
else
{
- t->size= 0;
t->len = 0;
t->buf = 0;
}
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);
size_t outleft = 4 * inleft + 2;
char *outbuf = (char *) odr_malloc (o, outleft);
size_t ret;
-
- t->buf = (unsigned char *) outbuf;
-
- ret = yaz_iconv (o->op->iconv_handle, &inbuf, &inleft,
- &outbuf, &outleft);
+
+ t->buf = outbuf;
+
+ 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);
return 0;
}
- t->size = t->len = outbuf - (char*) t->buf;
+ t->len = outbuf - (char*) t->buf;
}
if (!t->buf)
{
- t->buf = (unsigned char *) *p;
- t->size = t->len = strlen(*p);
+ t->buf = *p;
+ t->len = strlen(*p);
}
}
else
{
- t->size= 0;
t->len = 0;
t->buf = 0;
}
size_t ret;
*p = outbuf;
-
+
ret = yaz_iconv (o->op->iconv_handle, &inbuf, &inleft,
&outbuf, &outleft);
if (ret == (size_t)(-1))
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 */
}
if (!*p)
/*
* Local variables:
* c-basic-offset: 4
+ * c-file-style: "Stroustrup"
* indent-tabs-mode: nil
* End:
* vim: shiftwidth=4 tabstop=8 expandtab