Tidy up debugging output
[yaz-moved-to-github.git] / odr / ber_any.c
index 1280040..6094f9a 100644 (file)
@@ -2,36 +2,36 @@
  * Copyright (c) 1995-2003, Index Data
  * See the file LICENSE for details.
  *
- * $Id: ber_any.c,v 1.20 2003-01-06 08:20:27 adam Exp $
+ * $Id: ber_any.c,v 1.25 2003-05-20 17:22:54 adam Exp $
  */
 #if HAVE_CONFIG_H
 #include <config.h>
 #endif
+
 #include "odr-priv.h"
 
 int ber_any(ODR o, Odr_any **p)
 {
     int res;
-    int left = o->size - (o->bp - o->buf);
-
+    
     switch (o->direction)
     {
-       case ODR_DECODE:
-           if ((res = completeBER(o->bp, left)) <= 0)        /* FIX THIS */
-           {
-               o->error = OPROTO;
-               return 0;
-           }
-           (*p)->buf = (unsigned char *)odr_malloc(o, res);
-           memcpy((*p)->buf, o->bp, res);
-           (*p)->len = (*p)->size = res;
-           o->bp += res;
-           return 1;
-       case ODR_ENCODE:
-           if (odr_write(o, (*p)->buf, (*p)->len) < 0)
-               return 0;
-           return 1;
-       default: o->error = OOTHER; return 0;
+    case ODR_DECODE:
+        if ((res = completeBER(o->bp, odr_max(o))) <= 0)        /* FIX THIS */
+        {
+            odr_seterror(o, OPROTO, 2);
+            return 0;
+        }
+        (*p)->buf = (unsigned char *)odr_malloc(o, res);
+        memcpy((*p)->buf, o->bp, res);
+        (*p)->len = (*p)->size = res;
+        o->bp += res;
+        return 1;
+    case ODR_ENCODE:
+        if (odr_write(o, (*p)->buf, (*p)->len) < 0)
+            return 0;
+        return 1;
+    default: odr_seterror(o, OOTHER, 3); return 0;
     }
 }
 
@@ -47,13 +47,13 @@ int completeBER(const unsigned char *buf, int len)
        return 0;
     if (!buf[0] && !buf[1])
        return 0;
-    if ((res = ber_dectag(b, &zclass, &tag, &cons)) <= 0)
+    if ((res = ber_dectag(b, &zclass, &tag, &cons, len)) <= 0)
        return 0;
     if (res > len)
        return 0;
     b += res;
     len -= res;
-    if ((res = ber_declen(b, &ll)) <= 0)
+    if ((res = ber_declen(b, &ll, len)) <= 0)
        return 0;
     if (res > len)
        return 0;