Add odr_prepend()
[yaz-moved-to-github.git] / include / yaz / odr.h
index 629b7f6..1a2e690 100644 (file)
@@ -23,7 +23,7 @@
  * LIABILITY, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE
  * OF THIS SOFTWARE.
  *
- * $Id: odr.h,v 1.7 2003-01-06 08:20:27 adam Exp $
+ * $Id: odr.h,v 1.14 2003-11-26 16:24:04 mike Exp $
  */
 
 #ifndef ODR_H
@@ -178,11 +178,16 @@ typedef struct odr_arm
 #define OSTACK          9
 #define OCONLEN        10
 #define OLENOV         11
+#define OHTTP          12
 
 extern char *odr_errlist[];
 
 YAZ_EXPORT int odr_geterror(ODR o);
-YAZ_EXPORT void odr_perror(ODR o, char *message);
+YAZ_EXPORT int odr_geterrorx(ODR o, int *x);
+YAZ_EXPORT void odr_seterror(ODR o, int errorno, int errorid);
+YAZ_EXPORT void odr_setelement(ODR o, const char *addinfo);
+YAZ_EXPORT char *odr_getelement(ODR o);
+YAZ_EXPORT void odr_perror(ODR o, const char *message);
 YAZ_EXPORT void odr_setprint(ODR o, FILE *file);
 YAZ_EXPORT ODR odr_createmem(int direction);
 YAZ_EXPORT void odr_reset(ODR o);
@@ -191,27 +196,20 @@ YAZ_EXPORT void odr_setbuf(ODR o, char *buf, int len, int can_grow);
 YAZ_EXPORT char *odr_getbuf(ODR o, int *len, int *size);
 YAZ_EXPORT void *odr_malloc(ODR o, int size);
 YAZ_EXPORT char *odr_strdup(ODR o, const char *str);
+YAZ_EXPORT char *odr_strdupn(ODR o, const char *str, size_t n);
 YAZ_EXPORT int *odr_intdup(ODR o, int v);
 YAZ_EXPORT NMEM odr_extract_mem(ODR o);
 YAZ_EXPORT Odr_null *odr_nullval(void);
 #define odr_release_mem(m) nmem_destroy(m)
 #define ODR_MEM NMEM
 
-#define odr_implicit(o, t, p, cl, tg, opt)\
-        (odr_implicit_settag((o), cl, tg), t ((o), (p), (opt), 0) )
-
 #define odr_implicit_tag(o, t, p, cl, tg, opt, name)\
         (odr_implicit_settag((o), cl, tg), t ((o), (p), (opt), name) )
 
-#define odr_explicit(o, t, p, cl, tg, opt)\
-        ((int) (odr_constructed_begin((o), (p), (cl), (tg), 0) ? \
-        t ((o), (p), (opt), 0) &&\
-        odr_constructed_end(o) : opt))
-
 #define odr_explicit_tag(o, t, p, cl, tg, opt, name)\
         ((int) (odr_constructed_begin((o), (p), (cl), (tg), 0) ? \
         t ((o), (p), (opt), name) &&\
-        odr_constructed_end(o) : opt))
+        odr_constructed_end(o) : odr_missing((o), opt, name)))
 
 #define ODR_MASK_ZERO(mask)\
     ((void) (memset((mask)->bits, 0, ODR_BITMASK_SIZE),\
@@ -238,16 +236,16 @@ YAZ_EXPORT Odr_null *odr_nullval(void);
 
 YAZ_EXPORT int ber_boolean(ODR o, int *val);
 YAZ_EXPORT int ber_tag(ODR o, void *p, int zclass, int tag,
-                      int *constructed, int opt);
+                      int *constructed, int opt, const char *name);
 YAZ_EXPORT int ber_enctag(ODR o, int zclass, int tag, int constructed);
 YAZ_EXPORT int ber_dectag(const unsigned char *buf, int *zclass,
-                         int *tag, int *constructed);
+                         int *tag, int *constructed, int max);
 YAZ_EXPORT int odr_bool(ODR o, int **p, int opt, const char *name);
 YAZ_EXPORT int odr_integer(ODR o, int **p, int opt, const char *name);
 YAZ_EXPORT int odr_enum(ODR o, int **p, int opt, const char *name);
 YAZ_EXPORT int odr_implicit_settag(ODR o, int zclass, int tag);
 YAZ_EXPORT int ber_enclen(ODR o, int len, int lenlen, int exact);
-YAZ_EXPORT int ber_declen(const unsigned char *buf, int *len);
+YAZ_EXPORT int ber_declen(const unsigned char *buf, int *len, int max);
 YAZ_EXPORT void odr_prname(ODR o, const char *name);
 YAZ_EXPORT int ber_null(ODR o);
 YAZ_EXPORT int odr_null(ODR o, Odr_null **p, int opt, const char *name);
@@ -298,6 +296,8 @@ YAZ_EXPORT Odr_oid *odr_getoidbystr_nmem(NMEM o, const char *str);
 YAZ_EXPORT int odr_initmember(ODR o, void *p, int size);
 YAZ_EXPORT int odr_peektag(ODR o, int *zclass, int *tag, int *cons);
 YAZ_EXPORT void odr_setlenlen(ODR o, int len);
+YAZ_EXPORT int odr_missing(ODR o, int opt, const char *name);
+YAZ_EXPORT char *odr_prepend(ODR o, const char *prefix, const char *old);
 
 typedef struct Odr_external
 {