Addded some method functions to the ODR type.
[yaz-moved-to-github.git] / odr / ber_oct.c
index 41c568b..a8f6e07 100644 (file)
@@ -4,33 +4,23 @@
  * Sebastian Hammer, Adam Dickmeiss
  *
  * $Log: ber_oct.c,v $
- * Revision 1.1  1995-02-02 16:21:52  quinn
+ * Revision 1.4  1995-02-10 15:55:28  quinn
+ * Bug fixes, mostly.
+ *
+ * Revision 1.3  1995/02/03  17:04:34  quinn
+ * *** empty log message ***
+ *
+ * Revision 1.2  1995/02/02  20:38:50  quinn
+ * Updates.
+ *
+ * Revision 1.1  1995/02/02  16:21:52  quinn
  * First kick.
  *
  */
 
 #include <odr.h>
 
-static int more_chunks(ODR o, unsigned char *base, int len)
-{
-    if (!len)
-       return 0;
-    if (len < 0) /* indefinite length */
-    {
-       if (*o->bp == 0 && *(o->bp + 1) == 0)
-       {
-           o->bp += 2;
-           o->left -= 2;
-           return 0;
-       }
-       else
-           return 1;
-    }
-    else
-        return o->bp - base < len;
-}
-
-int ber_octetstring(ODR o, ODR_OCT *p, int cons)
+int ber_octetstring(ODR o, Odr_oct *p, int cons)
 {
     int res, len;
     unsigned char *base, *c;
@@ -45,7 +35,7 @@ int ber_octetstring(ODR o, ODR_OCT *p, int cons)
            if (cons)       /* fetch component strings */
            {
                base = o->bp;
-               while (more_chunks(o, base, len))
+               while (odp_more_chunks(o, base, len))
                    if (!odr_octetstring(o, &p, 0))
                        return 0;
                return 1;
@@ -53,16 +43,15 @@ int ber_octetstring(ODR o, ODR_OCT *p, int cons)
            /* primitive octetstring */
            if (len < 0)
                return 0;
-           if (len == 0)
-               return 1;
-           if (len > p->size - p->len)
+           if (len + 1 > p->size - p->len)
            {
-               c = nalloc(o, p->size += len);
+               c = nalloc(o, p->size += len + 1);
                if (p->len)
                    memcpy(c, p->buf, p->len);
                p->buf = c;
            }
-           memcpy(p->buf + p->len, o->bp, len);
+           if (len)
+               memcpy(p->buf + p->len, o->bp, len);
            p->len += len;
            o->bp += len;
            o->left -= len;