Better ODR diagnostics for missing elements which includes additional
[yaz-moved-to-github.git] / odr / odr_oct.c
index b1c400d..c0458dd 100644 (file)
@@ -1,9 +1,9 @@
 /*
- * Copyright (c) 1995-2002, Index Data
+ * Copyright (c) 1995-2003, Index Data
  * See the file LICENSE for details.
  * Sebastian Hammer, Adam Dickmeiss
  *
- * $Id: odr_oct.c,v 1.19 2002-09-24 08:05:41 adam Exp $
+ * $Id: odr_oct.c,v 1.22 2003-05-20 19:55:30 adam Exp $
  */
 #if HAVE_CONFIG_H
 #include <config.h>
@@ -27,10 +27,10 @@ int odr_octetstring(ODR o, Odr_oct **p, int opt, const char *name)
        o->t_class = ODR_UNIVERSAL;
        o->t_tag = ODR_OCTETSTRING;
     }
-    if ((res = ber_tag(o, p, o->t_class, o->t_tag, &cons, opt)) < 0)
+    if ((res = ber_tag(o, p, o->t_class, o->t_tag, &cons, opt, name)) < 0)
        return 0;
     if (!res)
-       return opt;
+       return odr_missing(o, opt, name);
     if (o->direction == ODR_PRINT)
     {
         int i;
@@ -57,7 +57,7 @@ int odr_octetstring(ODR o, Odr_oct **p, int opt, const char *name)
     }
     if (ber_octetstring(o, *p, cons))
        return 1;
-    o->error = OOTHER;
+    odr_seterror(o, OOTHER, 43);
     return 0;
 }
 
@@ -76,10 +76,10 @@ int odr_cstring(ODR o, char **p, int opt, const char *name)
        o->t_class = ODR_UNIVERSAL;
        o->t_tag = ODR_OCTETSTRING;
     }
-    if ((res = ber_tag(o, p, o->t_class, o->t_tag, &cons, opt)) < 0)
+    if ((res = ber_tag(o, p, o->t_class, o->t_tag, &cons, opt, name)) < 0)
        return 0;
     if (!res)
-       return opt;
+       return odr_missing(o, opt, name);
     if (o->direction == ODR_PRINT)
     {
        odr_prname(o, name);
@@ -123,10 +123,10 @@ int odr_iconv_string(ODR o, char **p, int opt, const char *name)
        o->t_class = ODR_UNIVERSAL;
        o->t_tag = ODR_OCTETSTRING;
     }
-    if ((res = ber_tag(o, p, o->t_class, o->t_tag, &cons, opt)) < 0)
+    if ((res = ber_tag(o, p, o->t_class, o->t_tag, &cons, opt, name)) < 0)
        return 0;
     if (!res)
-       return opt;
+       return odr_missing(o, opt, name);
     if (o->direction == ODR_PRINT)
     {
        odr_prname(o, name);
@@ -152,7 +152,7 @@ int odr_iconv_string(ODR o, char **p, int opt, const char *name)
                              &outbuf, &outleft);
             if (ret == (size_t)(-1))
             {
-                o->error = ODATA;
+                odr_seterror(o, ODATA, 44);
                 return 0;
             }
             t->size = t->len = outbuf - (char*) t->buf;
@@ -189,7 +189,7 @@ int odr_iconv_string(ODR o, char **p, int opt, const char *name)
                              &outbuf, &outleft);
             if (ret == (size_t)(-1))
             {
-                o->error = ODATA;
+                odr_seterror(o, ODATA, 45);
                 return 0;
             }
             inleft = outbuf - (char*) *p;