Check for config.h (currently not generated).
[yaz-moved-to-github.git] / odr / ber_tag.c
index 9e6d362..03b9c79 100644 (file)
@@ -1,10 +1,33 @@
 /*
- * Copyright (c) 1995, Index Data
+ * Copyright (c) 1995-2000, Index Data
  * See the file LICENSE for details.
  * Sebastian Hammer, Adam Dickmeiss
  *
  * $Log: ber_tag.c,v $
- * Revision 1.15  1997-09-01 08:51:06  adam
+ * Revision 1.22  2000-02-29 13:44:55  adam
+ * Check for config.h (currently not generated).
+ *
+ * Revision 1.21  2000/01/31 13:15:21  adam
+ * Removed uses of assert(3). Cleanup of ODR. CCL parser update so
+ * that some characters are not surrounded by spaces in resulting term.
+ * ILL-code updates.
+ *
+ * Revision 1.20  1999/11/30 13:47:11  adam
+ * Improved installation. Moved header files to include/yaz.
+ *
+ * Revision 1.19  1999/01/08 11:23:25  adam
+ * Added const modifier to some of the BER/ODR encoding routines.
+ *
+ * Revision 1.18  1998/02/11 11:53:34  adam
+ * Changed code so that it compiles as C++.
+ *
+ * Revision 1.17  1997/09/30 09:33:10  adam
+ * Minor changes - removed indentation of ifdef.
+ *
+ * Revision 1.16  1997/09/17 12:10:33  adam
+ * YAZ version 1.4.
+ *
+ * Revision 1.15  1997/09/01 08:51:06  adam
  * New windows NT/95 port using MSV5.0. Had to avoid a few static
  * variables used in function ber_tag. These are now part of the
  * ODR structure.
  * First kick.
  *
  */
+#if HAVE_CONFIG_H
+#include <config.h>
+#endif
 
 #include <stdio.h>
-#include <odr.h>
+#include <yaz/odr.h>
 
 /* ber_tag
  * On encoding:
  *      else leave pointer unchanged. Return 0.
  *
  * Should perhaps be odr_tag?
-*/
+ */
 int ber_tag(ODR o, void *p, int zclass, int tag, int *constructed, int opt)
 {
-#if 0
-    static int lclass = -1, ltag, br, lcons; /* save t&c rather than
-                                               decoding twice */
-#endif
     Odr_ber_tag *odr_ber_tag = &o->odr_ber_tag;
     int rd;
-    char **pp = p;
+    char **pp = (char **)p;
 
     if (o->direction == ODR_DECODE)
        *pp = 0;
@@ -83,7 +105,7 @@ int ber_tag(ODR o, void *p, int zclass, int tag, int *constructed, int opt)
     if (o->stackp < 0)
     {
        odr_seek(o, ODR_S_SET, 0);
-        o->ecb.top = 0;
+        o->top = 0;
        o->bp = o->buf;
         odr_ber_tag->lclass = -1;
     }
@@ -119,15 +141,16 @@ int ber_tag(ODR o, void *p, int zclass, int tag, int *constructed, int opt)
                     o->error = OPROTO;
                            return 0;
                 }
-    #ifdef ODR_DEBUG
-                       fprintf(stderr, "\n[class=%d,tag=%d,cons=%d,stackp=%d]", odr_ber_tag->lclass, odr_ber_tag->ltag,
-                       odr_ber_tag->lcons, o->stackp);
-    #endif
+#ifdef ODR_DEBUG
+                   fprintf(stderr,
+                           "\n[class=%d,tag=%d,cons=%d,stackp=%d]",
+                           odr_ber_tag->lclass, odr_ber_tag->ltag,
+                           odr_ber_tag->lcons, o->stackp);
+#endif
                }
                if (zclass == odr_ber_tag->lclass && tag == odr_ber_tag->ltag)
                {
                    o->bp += odr_ber_tag->br;
-                   o->left -= odr_ber_tag->br;
                    *constructed = odr_ber_tag->lcons;
                    odr_ber_tag->lclass = -1;
                    return 1;
@@ -192,9 +215,9 @@ int ber_enctag(ODR o, int zclass, int tag, int constructed)
 /* ber_dectag
  * Decode BER identifier octets. Return number of bytes read or -1 for error.
  */
-int ber_dectag(unsigned char *buf, int *zclass, int *tag, int *constructed)
+int ber_dectag(const unsigned char *buf, int *zclass, int *tag, int *constructed)
 {
-    unsigned char *b = buf;
+    const unsigned char *b = buf;
 
     *zclass = *b >> 6;
     *constructed = (*b >> 5) & 0X01;