+#include "odr-priv.h"
+#include <yaz/xmalloc.h>
+
+/* ------------------------ NIBBLE MEMORY ---------------------- */
+
+/*
+ * Extract the memory control block from o.
+ */
+NMEM odr_extract_mem(ODR o)
+{
+ NMEM r = o->mem;
+
+ o->mem = 0;
+ return r;
+}
+
+void *odr_malloc(ODR o, int size)
+{
+ if (o && !o->mem)
+ o->mem = nmem_create();
+ return nmem_malloc(o ? o->mem : 0, size);
+}
+
+char *odr_strdup(ODR o, const char *str)
+{
+ return nmem_strdup(o->mem, str);
+}
+
+char *odr_strdupn(ODR o, const char *str, size_t n)
+{
+ return nmem_strdupn(o->mem, str, n);
+}
+
+int *odr_intdup(ODR o, int v)
+{
+ return nmem_intdup(o->mem, v);
+}
+
+int odr_total(ODR o)
+{
+ return o->mem ? nmem_total(o->mem) : 0;
+}