Added memory management.
authorSebastian Hammer <quinn@indexdata.com>
Fri, 17 Mar 1995 10:17:25 +0000 (10:17 +0000)
committerSebastian Hammer <quinn@indexdata.com>
Fri, 17 Mar 1995 10:17:25 +0000 (10:17 +0000)
16 files changed:
asn/proto.c
odr/Makefile
odr/ber_any.c
odr/ber_oct.c
odr/odr.c
odr/odr_any.c
odr/odr_bit.c
odr/odr_bool.c
odr/odr_int.c
odr/odr_mem.c
odr/odr_oct.c
odr/odr_oid.c
odr/odr_seq.c
odr/odr_util.c
odr/test.c
server/seshigh.c

index ce6e304..019d144 100644 (file)
@@ -4,7 +4,10 @@
  * Sebastian Hammer, Adam Dickmeiss
  *
  * $Log: proto.c,v $
  * Sebastian Hammer, Adam Dickmeiss
  *
  * $Log: proto.c,v $
- * Revision 1.10  1995-03-15 11:17:40  quinn
+ * Revision 1.11  1995-03-17 10:17:25  quinn
+ * Added memory management.
+ *
+ * Revision 1.10  1995/03/15  11:17:40  quinn
  * Fixed some return-checks from choice.. need better ay to handle those..
  *
  * Revision 1.9  1995/03/15  08:37:06  quinn
  * Fixed some return-checks from choice.. need better ay to handle those..
  *
  * Revision 1.9  1995/03/15  08:37:06  quinn
@@ -164,7 +167,7 @@ int z_DatabaseSpecificUnit(ODR o, Z_DatabaseSpecificUnit **p, int opt)
 int z_DatabaseSpecific(ODR o, Z_DatabaseSpecific **p, int opt)
 {
     if (o->direction == ODR_DECODE)
 int z_DatabaseSpecific(ODR o, Z_DatabaseSpecific **p, int opt)
 {
     if (o->direction == ODR_DECODE)
-       *p = nalloc(o, sizeof(**p));
+       *p = odr_malloc(o, sizeof(**p));
     else if (!*p)
        return opt;
 
     else if (!*p)
        return opt;
 
@@ -191,7 +194,7 @@ int z_ElementSetNames(ODR o, Z_ElementSetNames **p, int opt)
        return opt;
 
     if (o->direction == ODR_DECODE)
        return opt;
 
     if (o->direction == ODR_DECODE)
-       *p = nalloc(o, sizeof(**p));
+       *p = odr_malloc(o, sizeof(**p));
 
     if (odr_choice(o, arm, &(*p)->u, &(*p)->which) &&
        odr_constructed_end(o))
 
     if (odr_choice(o, arm, &(*p)->u, &(*p)->which) &&
        odr_constructed_end(o))
@@ -243,7 +246,7 @@ int z_Operator(ODR o, Z_Operator **p, int opt)
     if (!odr_constructed_begin(o, p, ODR_CONTEXT, 46))
        return opt;
     if (o->direction == ODR_DECODE)
     if (!odr_constructed_begin(o, p, ODR_CONTEXT, 46))
        return opt;
     if (o->direction == ODR_DECODE)
-       *p = nalloc(o, sizeof(**p));
+       *p = odr_malloc(o, sizeof(**p));
     else
        (*p)->u.and = &dummy;
 
     else
        (*p)->u.and = &dummy;
 
@@ -264,7 +267,7 @@ int z_Operand(ODR o, Z_Operand **p, int opt)
     };
 
     if (o->direction ==ODR_DECODE)
     };
 
     if (o->direction ==ODR_DECODE)
-       *p = nalloc(o, sizeof(**p));
+       *p = odr_malloc(o, sizeof(**p));
     else if (!*p)
        return opt;
     if (odr_choice(o, arm, &(*p)->u, &(*p)->which))
     else if (!*p)
        return opt;
     if (odr_choice(o, arm, &(*p)->u, &(*p)->which))
@@ -296,7 +299,7 @@ int z_RPNStructure(ODR o, Z_RPNStructure **p, int opt)
     };
 
     if (o->direction == ODR_DECODE)
     };
 
     if (o->direction == ODR_DECODE)
-       *p = nalloc(o, sizeof(**p));
+       *p = odr_malloc(o, sizeof(**p));
     else if (!*p)
        return opt;
     if (odr_choice(o, arm, &(*p)->u, &(*p)->which))
     else if (!*p)
        return opt;
     if (odr_choice(o, arm, &(*p)->u, &(*p)->which))
@@ -327,7 +330,7 @@ int z_Query(ODR o, Z_Query **p, int opt)
     };
 
     if (o->direction == ODR_DECODE)
     };
 
     if (o->direction == ODR_DECODE)
-       *p = nalloc(o, sizeof(**p));
+       *p = odr_malloc(o, sizeof(**p));
     else if (!*p)
        return opt;
     if (odr_choice(o, arm, &(*p)->u, &(*p)->which))
     else if (!*p)
        return opt;
     if (odr_choice(o, arm, &(*p)->u, &(*p)->which))
@@ -410,7 +413,7 @@ int z_NamePlusRecord(ODR o, Z_NamePlusRecord **p, int opt)
 int z_NamePlusRecordList(ODR o, Z_NamePlusRecordList **p, int opt)
 {
     if (o->direction == ODR_DECODE)
 int z_NamePlusRecordList(ODR o, Z_NamePlusRecordList **p, int opt)
 {
     if (o->direction == ODR_DECODE)
-       *p = nalloc(o, sizeof(**p));
+       *p = odr_malloc(o, sizeof(**p));
     if (odr_sequence_of(o, z_NamePlusRecord, &(*p)->records,
        &(*p)->num_records))
        return 1;
     if (odr_sequence_of(o, z_NamePlusRecord, &(*p)->records,
        &(*p)->num_records))
        return 1;
@@ -428,7 +431,7 @@ int z_Records(ODR o, Z_Records **p, int opt)
     };
 
     if (o->direction == ODR_DECODE)
     };
 
     if (o->direction == ODR_DECODE)
-       *p = nalloc(o, sizeof(**p));
+       *p = odr_malloc(o, sizeof(**p));
     else if (!*p)
        return opt;
     if (odr_choice(o, arm, &(*p)->u, &(*p)->which))
     else if (!*p)
        return opt;
     if (odr_choice(o, arm, &(*p)->u, &(*p)->which))
@@ -527,7 +530,7 @@ int z_APDU(ODR o, Z_APDU **p, int opt)
     };
 
     if (o->direction == ODR_DECODE)
     };
 
     if (o->direction == ODR_DECODE)
-       *p = nalloc(o, sizeof(**p));
+       *p = odr_malloc(o, sizeof(**p));
     if (!odr_choice(o, arm, &(*p)->u, &(*p)->which))
     {
        if (o->direction == ODR_DECODE)
     if (!odr_choice(o, arm, &(*p)->u, &(*p)->which))
     {
        if (o->direction == ODR_DECODE)
index 522f7e2..24a2d47 100644 (file)
@@ -1,7 +1,7 @@
 # Copyright (C) 1994, Index Data I/S 
 # All rights reserved.
 # Sebastian Hammer, Adam Dickmeiss
 # Copyright (C) 1994, Index Data I/S 
 # All rights reserved.
 # Sebastian Hammer, Adam Dickmeiss
-# $Id: Makefile,v 1.7 1995-03-14 10:27:34 quinn Exp $
+# $Id: Makefile,v 1.8 1995-03-17 10:17:37 quinn Exp $
 
 SHELL=/bin/sh
 INCLUDE=-I../include -I.
 
 SHELL=/bin/sh
 INCLUDE=-I../include -I.
@@ -14,7 +14,7 @@ LIBS=-lodr
 PO = odr_bool.o ber_bool.o ber_len.o ber_tag.o odr_util.o odr_null.o \
        ber_null.o odr_int.o ber_int.o odr_tag.o odr_cons.o odr_seq.o\
        odr_oct.o ber_oct.o odr_bit.o ber_bit.o odr_oid.o ber_oid.o odr_use.o \
 PO = odr_bool.o ber_bool.o ber_len.o ber_tag.o odr_util.o odr_null.o \
        ber_null.o odr_int.o ber_int.o odr_tag.o odr_cons.o odr_seq.o\
        odr_oct.o ber_oct.o odr_bit.o ber_bit.o odr_oid.o ber_oid.o odr_use.o \
-       odr_choice.o odr_any.o ber_any.o odr.o
+       odr_choice.o odr_any.o ber_any.o odr.o odr_mem.o
 CPP=cc -E
 
 all: $(LIBDIR) $(LIB)
 CPP=cc -E
 
 all: $(LIBDIR) $(LIB)
index 6492398..2e9a3ce 100644 (file)
@@ -4,7 +4,10 @@
  * Sebastian Hammer, Adam Dickmeiss
  *
  * $Log: ber_any.c,v $
  * Sebastian Hammer, Adam Dickmeiss
  *
  * $Log: ber_any.c,v $
- * Revision 1.6  1995-03-08 12:12:02  quinn
+ * Revision 1.7  1995-03-17 10:17:39  quinn
+ * Added memory management.
+ *
+ * Revision 1.6  1995/03/08  12:12:02  quinn
  * Added better error checking.
  *
  * Revision 1.5  1995/02/14  20:39:54  quinn
  * Added better error checking.
  *
  * Revision 1.5  1995/02/14  20:39:54  quinn
@@ -38,7 +41,7 @@ int ber_any(ODR o, Odr_any **p)
                o->error = OPROTO;
                return 0;
            }
                o->error = OPROTO;
                return 0;
            }
-           (*p)->buf = nalloc(o, res);
+           (*p)->buf = odr_malloc(o, res);
            memcpy((*p)->buf, o->bp, res);
            (*p)->len = (*p)->size = res;
            o->bp += res;
            memcpy((*p)->buf, o->bp, res);
            (*p)->len = (*p)->size = res;
            o->bp += res;
index 2169842..9c8eda4 100644 (file)
@@ -4,7 +4,10 @@
  * Sebastian Hammer, Adam Dickmeiss
  *
  * $Log: ber_oct.c,v $
  * Sebastian Hammer, Adam Dickmeiss
  *
  * $Log: ber_oct.c,v $
- * Revision 1.5  1995-03-08 12:12:10  quinn
+ * Revision 1.6  1995-03-17 10:17:41  quinn
+ * Added memory management.
+ *
+ * Revision 1.5  1995/03/08  12:12:10  quinn
  * Added better error checking.
  *
  * Revision 1.4  1995/02/10  15:55:28  quinn
  * Added better error checking.
  *
  * Revision 1.4  1995/02/10  15:55:28  quinn
@@ -54,7 +57,7 @@ int ber_octetstring(ODR o, Odr_oct *p, int cons)
            }
            if (len + 1 > p->size - p->len)
            {
            }
            if (len + 1 > p->size - p->len)
            {
-               c = nalloc(o, p->size += len + 1);
+               c = odr_malloc(o, p->size += len + 1);
                if (p->len)
                    memcpy(c, p->buf, p->len);
                p->buf = c;
                if (p->len)
                    memcpy(c, p->buf, p->len);
                p->buf = c;
index bfa8334..24b15b3 100644 (file)
--- a/odr/odr.c
+++ b/odr/odr.c
@@ -4,7 +4,10 @@
  * Sebastian Hammer, Adam Dickmeiss
  *
  * $Log: odr.c,v $
  * Sebastian Hammer, Adam Dickmeiss
  *
  * $Log: odr.c,v $
- * Revision 1.7  1995-03-10 11:44:41  quinn
+ * Revision 1.8  1995-03-17 10:17:43  quinn
+ * Added memory management.
+ *
+ * Revision 1.7  1995/03/10  11:44:41  quinn
  * Fixed serious stack-bug in odr_cons_begin
  *
  * Revision 1.6  1995/03/08  12:12:15  quinn
  * Fixed serious stack-bug in odr_cons_begin
  *
  * Revision 1.6  1995/03/08  12:12:15  quinn
@@ -72,6 +75,7 @@ ODR odr_createmem(int direction)
     r->print = stdout;
     r->buf = 0;
     r->buflen = 0;
     r->print = stdout;
     r->buf = 0;
     r->buflen = 0;
+    r->mem = 0;
     odr_reset(r);
     return r;
 }
     odr_reset(r);
     return r;
 }
@@ -85,10 +89,13 @@ void odr_reset(ODR o)
     o->t_tag = -1;
     o->indent = 0;
     o->stackp = -1;
     o->t_tag = -1;
     o->indent = 0;
     o->stackp = -1;
+    odr_release_mem(o->mem);
+    o->mem = 0;
 }
     
 void odr_destroy(ODR o)
 {
 }
     
 void odr_destroy(ODR o)
 {
+    odr_release_mem(o->mem);
     free(o);
 }
 
     free(o);
 }
 
index bb9effd..cfbff27 100644 (file)
@@ -4,7 +4,10 @@
  * Sebastian Hammer, Adam Dickmeiss
  *
  * $Log: odr_any.c,v $
  * Sebastian Hammer, Adam Dickmeiss
  *
  * $Log: odr_any.c,v $
- * Revision 1.2  1995-03-08 12:12:18  quinn
+ * Revision 1.3  1995-03-17 10:17:46  quinn
+ * Added memory management.
+ *
+ * Revision 1.2  1995/03/08  12:12:18  quinn
  * Added better error checking.
  *
  * Revision 1.1  1995/02/09  15:51:47  quinn
  * Added better error checking.
  *
  * Revision 1.1  1995/02/09  15:51:47  quinn
@@ -30,7 +33,7 @@ int odr_any(ODR o, Odr_any **p, int opt)
        return 1;
     }
     if (o->direction == ODR_DECODE)
        return 1;
     }
     if (o->direction == ODR_DECODE)
-       *p = nalloc(o, sizeof(**p));
+       *p = odr_malloc(o, sizeof(**p));
     if (ber_any(o, p))
        return 1;
     *p = 0;
     if (ber_any(o, p))
        return 1;
     *p = 0;
index 25edfa0..46d7e2e 100644 (file)
@@ -4,7 +4,10 @@
  * Sebastian Hammer, Adam Dickmeiss
  *
  * $Log: odr_bit.c,v $
  * Sebastian Hammer, Adam Dickmeiss
  *
  * $Log: odr_bit.c,v $
- * Revision 1.6  1995-03-08 12:12:19  quinn
+ * Revision 1.7  1995-03-17 10:17:48  quinn
+ * Added memory management.
+ *
+ * Revision 1.6  1995/03/08  12:12:19  quinn
  * Added better error checking.
  *
  * Revision 1.5  1995/02/10  18:57:25  quinn
  * Added better error checking.
  *
  * Revision 1.5  1995/02/10  18:57:25  quinn
@@ -55,7 +58,7 @@ int odr_bitstring(ODR o, Odr_bitmask **p, int opt)
     }
     if (o->direction == ODR_DECODE)
     {
     }
     if (o->direction == ODR_DECODE)
     {
-       *p = nalloc(o, sizeof(Odr_bitmask));
+       *p = odr_malloc(o, sizeof(Odr_bitmask));
        memset((*p)->bits, 0, ODR_BITMASK_SIZE);
        (*p)->top = -1;
     }
        memset((*p)->bits, 0, ODR_BITMASK_SIZE);
        (*p)->top = -1;
     }
index 13c2d3a..5279ae2 100644 (file)
@@ -4,7 +4,10 @@
  * Sebastian Hammer, Adam Dickmeiss
  *
  * $Log: odr_bool.c,v $
  * Sebastian Hammer, Adam Dickmeiss
  *
  * $Log: odr_bool.c,v $
- * Revision 1.4  1995-03-08 12:12:20  quinn
+ * Revision 1.5  1995-03-17 10:17:49  quinn
+ * Added memory management.
+ *
+ * Revision 1.4  1995/03/08  12:12:20  quinn
  * Added better error checking.
  *
  * Revision 1.3  1995/02/10  18:57:25  quinn
  * Added better error checking.
  *
  * Revision 1.3  1995/02/10  18:57:25  quinn
@@ -48,6 +51,6 @@ int odr_bool(ODR o, int **p, int opt)
     if (cons)
        return 0;
     if (o->direction == ODR_DECODE)
     if (cons)
        return 0;
     if (o->direction == ODR_DECODE)
-       *p = nalloc(o, sizeof(int));
+       *p = odr_malloc(o, sizeof(int));
     return ber_boolean(o, *p);
 }
     return ber_boolean(o, *p);
 }
index 686aa63..c5ba969 100644 (file)
@@ -4,7 +4,10 @@
  * Sebastian Hammer, Adam Dickmeiss
  *
  * $Log: odr_int.c,v $
  * Sebastian Hammer, Adam Dickmeiss
  *
  * $Log: odr_int.c,v $
- * Revision 1.5  1995-03-08 12:12:25  quinn
+ * Revision 1.6  1995-03-17 10:17:51  quinn
+ * Added memory management.
+ *
+ * Revision 1.5  1995/03/08  12:12:25  quinn
  * Added better error checking.
  *
  * Revision 1.4  1995/02/10  18:57:25  quinn
  * Added better error checking.
  *
  * Revision 1.4  1995/02/10  18:57:25  quinn
@@ -53,6 +56,6 @@ int odr_integer(ODR o, int **p, int opt)
        return 0;
     }
     if (o->direction == ODR_DECODE)
        return 0;
     }
     if (o->direction == ODR_DECODE)
-       *p = nalloc(o, sizeof(int));
+       *p = odr_malloc(o, sizeof(int));
     return ber_integer(o, *p);
 }
     return ber_integer(o, *p);
 }
index 4d6bf6d..e57730a 100644 (file)
@@ -4,18 +4,92 @@
  * Sebastian Hammer, Adam Dickmeiss
  *
  * $Log: odr_mem.c,v $
  * Sebastian Hammer, Adam Dickmeiss
  *
  * $Log: odr_mem.c,v $
- * Revision 1.1  1995-03-14 10:27:40  quinn
+ * Revision 1.2  1995-03-17 10:17:52  quinn
+ * Added memory management.
+ *
+ * Revision 1.1  1995/03/14  10:27:40  quinn
  * Modified makefile to use common lib
  * Beginning to add memory management to odr
  *
  * Modified makefile to use common lib
  * Beginning to add memory management to odr
  *
- *
  */
 
 #include <stdlib.h>
  */
 
 #include <stdlib.h>
-
 #include <odr.h>
 
 #include <odr.h>
 
-char *odr_malloc(ODR o, int size)
+#define ODR_MEM_CHUNK (10*1024)
+
+typedef struct odr_memblock
+{
+    char *buf;
+    int size;
+    int top;
+    struct odr_memblock *next;
+} odr_memblock;
+
+static odr_memblock *freelist = 0;
+
+static void free_block(odr_memblock *p)
+{
+    p->next = freelist;
+    freelist = p;
+}
+
+static odr_memblock *get_block(int size)
 {
 {
-    return malloc(size); /* REPLACE WITH NIBBLE MALLOC!! */
+    odr_memblock *r, *l;
+
+    for (r = freelist, l = 0; r; l = r, r = r->next)
+       if (r->size >= size)
+           break;
+    if (r)
+       if (l)
+           l->next = r->next;
+       else
+           freelist = r->next;
+    else
+    {
+       int get = ODR_MEM_CHUNK;
+
+       if (get < size)
+           get = size;
+       if (!(r = malloc(sizeof(*r))))
+           return 0;
+       if (!(r->buf = malloc(r->size = get)))
+           return 0;
+    }
+    r->top = 0;
+    return r;
+}
+
+void odr_release_mem(odr_memblock *p)
+{
+    odr_memblock *t;
+
+    while (p)
+    {
+       t = p;
+       p = p->next;
+       free_block(t);
+    }
+}
+
+void *odr_malloc(ODR o, int size)
+{
+    struct odr_memblock *p = o->mem;
+    char *r;
+
+    if (!p || p->size - p->top < size)
+       if (!(p = get_block(size)))
+       {
+           o->error = OMEMORY;
+           return 0;
+       }
+       else
+       {
+           p->next = o->mem;
+           o->mem = p;
+       }
+    r = p->buf + p->top;
+    p->top += (size + (sizeof(long) - 1)) & ~(sizeof(long) - 1);
+    return r;
 }
 }
index ba38619..fe2ffc5 100644 (file)
@@ -4,7 +4,10 @@
  * Sebastian Hammer, Adam Dickmeiss
  *
  * $Log: odr_oct.c,v $
  * Sebastian Hammer, Adam Dickmeiss
  *
  * $Log: odr_oct.c,v $
- * Revision 1.7  1995-03-08 12:12:27  quinn
+ * Revision 1.8  1995-03-17 10:17:54  quinn
+ * Added memory management.
+ *
+ * Revision 1.7  1995/03/08  12:12:27  quinn
  * Added better error checking.
  *
  * Revision 1.6  1995/02/10  18:57:26  quinn
  * Added better error checking.
  *
  * Revision 1.6  1995/02/10  18:57:26  quinn
@@ -55,7 +58,7 @@ int odr_octetstring(ODR o, Odr_oct **p, int opt)
     }
     if (o->direction == ODR_DECODE)
     {
     }
     if (o->direction == ODR_DECODE)
     {
-       *p = nalloc(o, sizeof(Odr_oct));
+       *p = odr_malloc(o, sizeof(Odr_oct));
        (*p)->size= 0;
        (*p)->len = 0;
        (*p)->buf = 0;
        (*p)->size= 0;
        (*p)->len = 0;
        (*p)->buf = 0;
@@ -90,7 +93,7 @@ int odr_cstring(ODR o, char **p, int opt)
        fprintf(o->print, "%s'%s'\n", odr_indent(o), *p);
        return 1;
     }
        fprintf(o->print, "%s'%s'\n", odr_indent(o), *p);
        return 1;
     }
-    t = nalloc(o, sizeof(Odr_oct));   /* wrapper for octstring */
+    t = odr_malloc(o, sizeof(Odr_oct));   /* wrapper for octstring */
     if (o->direction == ODR_ENCODE)
     {
        t->buf = (unsigned char *) *p;
     if (o->direction == ODR_ENCODE)
     {
        t->buf = (unsigned char *) *p;
index 633101b..d12226f 100644 (file)
@@ -4,7 +4,10 @@
  * Sebastian Hammer, Adam Dickmeiss
  *
  * $Log: odr_oid.c,v $
  * Sebastian Hammer, Adam Dickmeiss
  *
  * $Log: odr_oid.c,v $
- * Revision 1.7  1995-03-08 12:12:29  quinn
+ * Revision 1.8  1995-03-17 10:17:55  quinn
+ * Added memory management.
+ *
+ * Revision 1.7  1995/03/08  12:12:29  quinn
  * Added better error checking.
  *
  * Revision 1.6  1995/03/01  08:40:56  quinn
  * Added better error checking.
  *
  * Revision 1.6  1995/03/01  08:40:56  quinn
@@ -65,6 +68,6 @@ int odr_oid(ODR o, Odr_oid **p, int opt)
        return 1;
     }
     if (o->direction == ODR_DECODE)
        return 1;
     }
     if (o->direction == ODR_DECODE)
-       *p = nalloc(o, ODR_OID_SIZE * sizeof(**p));
+       *p = odr_malloc(o, ODR_OID_SIZE * sizeof(**p));
     return ber_oidc(o, *p);
 }
     return ber_oidc(o, *p);
 }
index cb3d703..4f6646b 100644 (file)
@@ -4,7 +4,10 @@
  * Sebastian Hammer, Adam Dickmeiss
  *
  * $Log: odr_seq.c,v $
  * Sebastian Hammer, Adam Dickmeiss
  *
  * $Log: odr_seq.c,v $
- * Revision 1.8  1995-03-15 11:18:05  quinn
+ * Revision 1.9  1995-03-17 10:17:57  quinn
+ * Added memory management.
+ *
+ * Revision 1.8  1995/03/15  11:18:05  quinn
  * Fixed serious bug in odr_cons
  *
  * Revision 1.7  1995/03/08  12:12:30  quinn
  * Fixed serious bug in odr_cons
  *
  * Revision 1.7  1995/03/08  12:12:30  quinn
@@ -49,7 +52,7 @@ int odr_sequence_begin(ODR o, void *p, int size)
     if (odr_constructed_begin(o, p, o->t_class, o->t_tag))
     {
        if (o->direction == ODR_DECODE && size)
     if (odr_constructed_begin(o, p, o->t_class, o->t_tag))
     {
        if (o->direction == ODR_DECODE && size)
-           *pp = nalloc(o, size);
+           *pp = odr_malloc(o, size);
        if (o->direction == ODR_PRINT)
        {
            fprintf(o->print, "%s{\n", odr_indent(o));
        if (o->direction == ODR_PRINT)
        {
            fprintf(o->print, "%s{\n", odr_indent(o));
@@ -97,7 +100,7 @@ int odr_sequence_of(ODR o, Odr_fun type, void *p, int *num)
                if (*num * sizeof(void*) >= size)
                {
                    /* double the buffer size */
                if (*num * sizeof(void*) >= size)
                {
                    /* double the buffer size */
-                   tmp = nalloc(o, sizeof(void*) * (size += size ? size :
+                   tmp = odr_malloc(o, sizeof(void*) * (size += size ? size :
                        128));
                    if (*num)
                    {
                        128));
                    if (*num)
                    {
index 16dc984..fb4c7c0 100644 (file)
@@ -1,8 +1,6 @@
 #include <odr.h>
 #include <stdlib.h>
 
 #include <odr.h>
 #include <stdlib.h>
 
-void *nalloc(ODR o, int size) { return malloc(size); }
-
 char *odr_indent(ODR o)
 {
     static char buf[512];
 char *odr_indent(ODR o)
 {
     static char buf[512];
index 77506f9..854f89b 100644 (file)
@@ -70,7 +70,7 @@ int f_A(ODR o, struct A **p, int opt)
     };
 
     if (o->direction == ODR_DECODE && !*p)
     };
 
     if (o->direction == ODR_DECODE && !*p)
-       *p = nalloc(o, sizeof(**p));
+       *p = odr_malloc(o, sizeof(**p));
     res = odr_choice(o, arm, &(*p)->u, &(*p)->which);
     if (!res)
     {
     res = odr_choice(o, arm, &(*p)->u, &(*p)->which);
     if (!res)
     {
index e314918..0f806ed 100644 (file)
@@ -4,7 +4,10 @@
  * Sebastian Hammer, Adam Dickmeiss
  *
  * $Log: seshigh.c,v $
  * Sebastian Hammer, Adam Dickmeiss
  *
  * $Log: seshigh.c,v $
- * Revision 1.3  1995-03-16 17:42:39  quinn
+ * Revision 1.4  1995-03-17 10:18:08  quinn
+ * Added memory management.
+ *
+ * Revision 1.3  1995/03/16  17:42:39  quinn
  * Little changes
  *
  * Revision 1.2  1995/03/16  13:29:01  quinn
  * Little changes
  *
  * Revision 1.2  1995/03/16  13:29:01  quinn
@@ -91,6 +94,8 @@ void destroy_association(association *h)
     odr_destroy(h->decode);
     odr_destroy(h->encode);
     free(h->encode_buffer);
     odr_destroy(h->decode);
     odr_destroy(h->encode);
     free(h->encode_buffer);
+    if (h->input_buffer)
+       free(h->input_buffer);
     free(h);
 }
 
     free(h);
 }
 
@@ -176,6 +181,7 @@ static int process_apdu(IOCHAN chan)
            fprintf(stderr, "Bad APDU\n");
            return -1;
     }
            fprintf(stderr, "Bad APDU\n");
            return -1;
     }
+    odr_reset(assoc->decode);
     return res;
 }
 
     return res;
 }
 
@@ -220,7 +226,7 @@ static int process_initRequest(IOCHAN client, Z_InitRequest *req)
     resp.result = &result;
     resp.implementationId = "YAZ";
     resp.implementationName = "YAZ/Simple asynchronous test server";
     resp.result = &result;
     resp.implementationId = "YAZ";
     resp.implementationName = "YAZ/Simple asynchronous test server";
-    resp.implementationVersion = "$Revision: 1.3 $";
+    resp.implementationVersion = "$Revision: 1.4 $";
     resp.userInformationField = 0;
     if (!z_APDU(assoc->encode, &apdup, 0))
     {
     resp.userInformationField = 0;
     if (!z_APDU(assoc->encode, &apdup, 0))
     {
@@ -228,6 +234,7 @@ static int process_initRequest(IOCHAN client, Z_InitRequest *req)
        return -1;
     }
     odr_getbuf(assoc->encode, &assoc->encoded_len);
        return -1;
     }
     odr_getbuf(assoc->encode, &assoc->encoded_len);
+    odr_reset(assoc->encode);
     iochan_setflags(client, EVENT_OUTPUT | EVENT_EXCEPT);
     return 0;
 }
     iochan_setflags(client, EVENT_OUTPUT | EVENT_EXCEPT);
     return 0;
 }
@@ -293,6 +300,7 @@ static int process_searchRequest(IOCHAN client, Z_SearchRequest *req)
        return -1;
     }
     odr_getbuf(assoc->encode, &assoc->encoded_len);
        return -1;
     }
     odr_getbuf(assoc->encode, &assoc->encoded_len);
+    odr_reset(assoc->encode);
     iochan_setflags(client, EVENT_OUTPUT | EVENT_EXCEPT);
     return 0;
 }
     iochan_setflags(client, EVENT_OUTPUT | EVENT_EXCEPT);
     return 0;
 }
@@ -322,6 +330,7 @@ static int process_presentRequest(IOCHAN client, Z_PresentRequest *req)
        return -1;
     }
     odr_getbuf(assoc->encode, &assoc->encoded_len);
        return -1;
     }
     odr_getbuf(assoc->encode, &assoc->encoded_len);
+    odr_reset(assoc->encode);
     iochan_setflags(client, EVENT_OUTPUT | EVENT_EXCEPT);
     return 0;
 }
     iochan_setflags(client, EVENT_OUTPUT | EVENT_EXCEPT);
     return 0;
 }