]> git.sur5r.net Git - openldap/commitdiff
Extended API for ber_mem functions, add context argument.
authorHoward Chu <hyc@openldap.org>
Wed, 9 Apr 2003 13:25:11 +0000 (13:25 +0000)
committerHoward Chu <hyc@openldap.org>
Wed, 9 Apr 2003 13:25:11 +0000 (13:25 +0000)
Must always use ber_mem funcs, even if CSRIMALLOC is present.

libraries/liblber/decode.c
libraries/liblber/io.c
libraries/liblber/lber-int.h
libraries/liblber/memory.c
libraries/liblber/options.c

index a43dffc97580014780a6de64e8a340c46781964e..a6c5927698b33b03bfabf66839d55c2d6864240e 100644 (file)
@@ -340,25 +340,25 @@ ber_get_stringbvl( bgbvr *b, ber_len_t *rlen )
        /* Allocate the result vector */
        switch (b->choice) {
        case ChArray:
-               *b->res.c = LBER_MALLOC( (n+1) * sizeof( char * ));
+               *b->res.c = ber_memalloc_x( (n+1) * sizeof( char * ), b->ber->ber_memctx);
                if ( *b->res.c == NULL )
                        return LBER_DEFAULT;
                (*b->res.c)[n] = NULL;
                break;
        case BvArray:
-               *b->res.ba = LBER_MALLOC( (n+1) * sizeof( struct berval ));
+               *b->res.ba = ber_memalloc_x( (n+1) * sizeof( struct berval ), b->ber->ber_memctx);
                if ( *b->res.ba == NULL )
                        return LBER_DEFAULT;
                (*b->res.ba)[n].bv_val = NULL;
                break;
        case BvVec:
-               *b->res.bv = LBER_MALLOC( (n+1) * sizeof( struct berval *));
+               *b->res.bv = ber_memalloc_x( (n+1) * sizeof( struct berval *), b->ber->ber_memctx);
                if ( *b->res.bv == NULL )
                        return LBER_DEFAULT;
                (*b->res.bv)[n] = NULL;
                break;
        case BvOff:
-               *b->res.ba = LBER_MALLOC( (n+1) * b->siz );
+               *b->res.ba = ber_memalloc_x( (n+1) * b->siz, b->ber->ber_memctx );
                if ( *b->res.ba == NULL )
                        return LBER_DEFAULT;
                ((struct berval *)((long)(*b->res.ba) + n*b->siz +
@@ -384,7 +384,7 @@ ber_get_stringbvl( bgbvr *b, ber_len_t *rlen )
                        (*b->res.ba)[n] = bv;
                        break;
                case BvVec:
-                       bvp = LBER_MALLOC( sizeof( struct berval ));
+                       bvp = ber_memalloc_x( sizeof( struct berval ), b->ber->ber_memctx);
                        if ( !bvp ) {
                                LBER_FREE(bv.bv_val);
                                goto nomem;
@@ -437,7 +437,7 @@ ber_get_stringbv( BerElement *ber, struct berval *bv, int alloc )
        }
 
        if ( alloc ) {
-               if ( (bv->bv_val = (char *) LBER_MALLOC( bv->bv_len + 1 )) == NULL ) {
+               if ( (bv->bv_val = (char *) ber_memalloc_x( bv->bv_len + 1, ber->ber_memctx )) == NULL ) {
                        return LBER_DEFAULT;
                }
 
@@ -479,7 +479,7 @@ ber_get_stringal( BerElement *ber, struct berval **bv )
        assert( ber != NULL );
        assert( bv != NULL );
 
-       *bv = (struct berval *) LBER_MALLOC( sizeof(struct berval) );
+       *bv = (struct berval *) ber_memalloc_x( sizeof(struct berval), ber->ber_memctx );
        if ( *bv == NULL ) {
                return LBER_DEFAULT;
        }
@@ -514,7 +514,7 @@ ber_get_bitstringa(
        }
        --datalen;
 
-       if ( (*buf = (char *) LBER_MALLOC( datalen )) == NULL ) {
+       if ( (*buf = (char *) ber_memalloc_x( datalen, ber->ber_memctx )) == NULL ) {
                return LBER_DEFAULT;
        }
 
index 16459782bfec78d5624e8db66ab995a7fd436d9e..439c0c4e7c65cf60771f089694b861cc96a89bb7 100644 (file)
@@ -123,7 +123,7 @@ ber_realloc( BerElement *ber, ber_len_t len )
 
        oldbuf = ber->ber_buf;
 
-       ber->ber_buf = (char *) LBER_REALLOC( oldbuf, total );
+       ber->ber_buf = (char *) ber_memrealloc_x( oldbuf, total, ber->ber_memctx );
        
        if ( ber->ber_buf == NULL ) {
                ber->ber_buf = oldbuf;
@@ -391,7 +391,7 @@ int ber_flatten2(
                ber_len_t len = ber_pvt_ber_write( ber );
 
                if ( alloc ) {
-                       bv->bv_val = (char *) LBER_MALLOC( len + 1 );
+                       bv->bv_val = (char *) ber_memalloc_x( len + 1, ber->ber_memctx );
                        if ( bv->bv_val == NULL ) {
                                return -1;
                        }
@@ -420,13 +420,13 @@ int ber_flatten(
                return -1;
        }
 
-       bv = LBER_MALLOC( sizeof(struct berval) );
+       bv = ber_memalloc_x( sizeof(struct berval), ber->ber_memctx );
        if ( bv == NULL ) {
                return -1;
        }
        rc = ber_flatten2(ber, bv, 1);
        if (rc == -1) {
-               LBER_FREE(bv);
+               ber_memfree_x(bv, ber->ber_memctx);
        } else {
                *bvPtr = bv;
        }
@@ -618,7 +618,7 @@ ber_get_next(
                                errno = ERANGE;
                                return LBER_DEFAULT;
                        }
-                       ber->ber_buf = (char *) LBER_MALLOC( ber->ber_len + 1 );
+                       ber->ber_buf = (char *) ber_memalloc_x( ber->ber_len + 1, ber->ber_memctx );
                        if (ber->ber_buf==NULL) {
                                return LBER_DEFAULT;
                        }
index 638c242acb09939d5bc2cc60e39787beb064d088..b04c43b09283c0b39fe108b40a7f4593d8269665 100644 (file)
@@ -84,6 +84,7 @@ struct berelement {
 
        struct seqorset *ber_sos;
        char            *ber_rwptr;
+       void            *ber_memctx;
 };
 #define LBER_VALID(ber)        ((ber)->ber_valid==LBER_VALID_BERELEMENT)
 
@@ -169,18 +170,8 @@ LBER_V (FILE *) ber_pvt_err_file;
        /* simple macros to realloc for now */
 LBER_V (BerMemoryFunctions *)  ber_int_memory_fns;
 LBER_F (char *)        ber_strndup( LDAP_CONST char *, ber_len_t );
-LBER_F (char *)        ber_strndup__( LDAP_CONST char *, size_t );
-
-#ifdef CSRIMALLOC
-#define LBER_MALLOC                    malloc
-#define LBER_CALLOC                    calloc
-#define LBER_REALLOC           realloc
-#define LBER_FREE                      free
-#define LBER_VFREE                     ber_memvfree
-#define LBER_STRDUP                    strdup
-#define LBER_STRNDUP           ber_strndup__
-
-#else
+LBER_F (char *)        ber_strndup_x( LDAP_CONST char *, ber_len_t, void *ctx );
+
 #define LBER_MALLOC(s)         ber_memalloc((s))
 #define LBER_CALLOC(n,s)       ber_memcalloc((n),(s))
 #define LBER_REALLOC(p,s)      ber_memrealloc((p),(s))
@@ -188,7 +179,6 @@ LBER_F (char *)     ber_strndup__( LDAP_CONST char *, size_t );
 #define LBER_VFREE(v)          ber_memvfree((void**)(v))
 #define LBER_STRDUP(s)         ber_strdup((s))
 #define LBER_STRNDUP(s,l)      ber_strndup((s),(l))
-#endif
 
 /* sockbuf.c */
 
index 5b90650868ba19b1f64f7813d2f3e7144b38c6f8..18832c940180a7b3ed691723fc288c881fa8b599 100644 (file)
@@ -113,7 +113,7 @@ static unsigned char endpattern[4] = { 0xd1, 0xed, 0xde, 0xca };
 BerMemoryFunctions *ber_int_memory_fns = NULL;
 
 void
-ber_memfree( void *p )
+ber_memfree_x( void *p, void *ctx )
 {
     ber_int_options.lbo_valid = LBER_INITIALIZED;
 
@@ -123,7 +123,7 @@ ber_memfree( void *p )
 
        BER_MEM_VALID( p );
 
-       if( ber_int_memory_fns == NULL ) {
+       if( ber_int_memory_fns == NULL || ctx == NULL ) {
 #ifdef LDAP_MEMORY_DEBUG
                struct ber_mem_hdr *mh = (struct ber_mem_hdr *)
                        ((char *)p - sizeof(struct ber_mem_hdr));
@@ -147,16 +147,21 @@ ber_memfree( void *p )
 
        assert( ber_int_memory_fns->bmf_free );
 
-       (*ber_int_memory_fns->bmf_free)( p );
+       (*ber_int_memory_fns->bmf_free)( p, ctx );
 }
 
+void
+ber_memfree( void *p )
+{
+       ber_memfree_x(p, NULL);
+}
 
 void
-ber_memvfree( void **vec )
+ber_memvfree_x( void **vec, void *ctx )
 {
        int     i;
 
-    ber_int_options.lbo_valid = LBER_INITIALIZED;
+       ber_int_options.lbo_valid = LBER_INITIALIZED;
 
        if( vec == NULL ) {
                return;
@@ -165,18 +170,23 @@ ber_memvfree( void **vec )
        BER_MEM_VALID( vec );
 
        for ( i = 0; vec[i] != NULL; i++ ) {
-               LBER_FREE( vec[i] );
+               ber_memfree_x( vec[i], ctx );
        }
 
-       LBER_FREE( vec );
+       ber_memfree_x( vec, ctx );
 }
 
+void
+ber_memvfree( void **vec )
+{
+       ber_memvfree_x( vec, NULL );
+}
 
 void *
-ber_memalloc( ber_len_t s )
+ber_memalloc_x( ber_len_t s, void *ctx )
 {
        void *new;
-    ber_int_options.lbo_valid = LBER_INITIALIZED;
+       ber_int_options.lbo_valid = LBER_INITIALIZED;
 
 #ifdef LDAP_MEMORY_DEBUG
        assert( s != 0 );
@@ -186,7 +196,7 @@ ber_memalloc( ber_len_t s )
                return NULL;
        }
 
-       if( ber_int_memory_fns == NULL ) {
+       if( ber_int_memory_fns == NULL || ctx == NULL ) {
 #ifdef LDAP_MEMORY_DEBUG
                struct ber_mem_hdr *mh = malloc(s + sizeof(struct ber_mem_hdr) + sizeof( ber_int_t));
                if( mh == NULL ) return NULL;
@@ -212,7 +222,7 @@ ber_memalloc( ber_len_t s )
                new = malloc( s );
 #endif
        } else {
-               new = (*ber_int_memory_fns->bmf_malloc)( s );
+               new = (*ber_int_memory_fns->bmf_malloc)( s, ctx );
        }
 
        if( new == NULL ) {
@@ -222,12 +232,17 @@ ber_memalloc( ber_len_t s )
        return new;
 }
 
+void *
+ber_memalloc( ber_len_t s )
+{
+       return ber_memalloc_x( s, NULL );
+}
 
 void *
-ber_memcalloc( ber_len_t n, ber_len_t s )
+ber_memcalloc_x( ber_len_t n, ber_len_t s, void *ctx )
 {
        void *new;
-    ber_int_options.lbo_valid = LBER_INITIALIZED;
+       ber_int_options.lbo_valid = LBER_INITIALIZED;
 
 #ifdef LDAP_MEMORY_DEBUG
        assert( n != 0 && s != 0);
@@ -237,7 +252,7 @@ ber_memcalloc( ber_len_t n, ber_len_t s )
                return NULL;
        }
 
-       if( ber_int_memory_fns == NULL ) {
+       if( ber_int_memory_fns == NULL || ctx == NULL ) {
 #ifdef LDAP_MEMORY_DEBUG
                struct ber_mem_hdr *mh = calloc(1,
                        (n * s) + sizeof(struct ber_mem_hdr) + sizeof(ber_int_t) );
@@ -262,7 +277,7 @@ ber_memcalloc( ber_len_t n, ber_len_t s )
 #endif
 
        } else {
-               new = (*ber_int_memory_fns->bmf_calloc)( n, s );
+               new = (*ber_int_memory_fns->bmf_calloc)( n, s, ctx );
        }
 
        if( new == NULL ) {
@@ -272,27 +287,32 @@ ber_memcalloc( ber_len_t n, ber_len_t s )
        return new;
 }
 
+void *
+ber_memcalloc( ber_len_t n, ber_len_t s )
+{
+       return ber_memcalloc_x( n, s, NULL );
+}
 
 void *
-ber_memrealloc( void* p, ber_len_t s )
+ber_memrealloc_x( void* p, ber_len_t s, void *ctx )
 {
        void *new = NULL;
-    ber_int_options.lbo_valid = LBER_INITIALIZED;
+       ber_int_options.lbo_valid = LBER_INITIALIZED;
 
        /* realloc(NULL,s) -> malloc(s) */
        if( p == NULL ) {
-               return LBER_MALLOC( s );
+               return ber_memalloc_x( s, ctx );
        }
        
        /* realloc(p,0) -> free(p) */
        if( s == 0 ) {
-               LBER_FREE( p );
+               ber_memfree_x( p, ctx );
                return NULL;
        }
 
        BER_MEM_VALID( p );
 
-       if( ber_int_memory_fns == NULL ) {
+       if( ber_int_memory_fns == NULL || ctx == NULL ) {
 #ifdef LDAP_MEMORY_DEBUG
                ber_int_t oldlen;
                struct ber_mem_hdr *mh = (struct ber_mem_hdr *)
@@ -330,7 +350,7 @@ ber_memrealloc( void* p, ber_len_t s )
                new = realloc( p, s );
 #endif
        } else {
-               new = (*ber_int_memory_fns->bmf_realloc)( p, s );
+               new = (*ber_int_memory_fns->bmf_realloc)( p, s, ctx );
        }
 
        if( new == NULL ) {
@@ -340,9 +360,14 @@ ber_memrealloc( void* p, ber_len_t s )
        return new;
 }
 
+void *
+ber_memrealloc( void* p, ber_len_t s )
+{
+       return ber_memrealloc_x( p, s, NULL );
+}
 
 void
-ber_bvfree( struct berval *bv )
+ber_bvfree_x( struct berval *bv, void *ctx )
 {
        ber_int_options.lbo_valid = LBER_INITIALIZED;
 
@@ -353,15 +378,20 @@ ber_bvfree( struct berval *bv )
        BER_MEM_VALID( bv );
 
        if ( bv->bv_val != NULL ) {
-               LBER_FREE( bv->bv_val );
+               ber_memfree_x( bv->bv_val, ctx );
        }
 
-       LBER_FREE( (char *) bv );
+       ber_memfree_x( (char *) bv, ctx );
 }
 
+void
+ber_bvfree( struct berval *bv )
+{
+       ber_bvfree_x( bv, NULL );
+}
 
 void
-ber_bvecfree( struct berval **bv )
+ber_bvecfree_x( struct berval **bv, void *ctx )
 {
        int     i;
 
@@ -374,14 +404,20 @@ ber_bvecfree( struct berval **bv )
        BER_MEM_VALID( bv );
 
        for ( i = 0; bv[i] != NULL; i++ ) {
-               ber_bvfree( bv[i] );
+               ber_bvfree_x( bv[i], ctx );
        }
 
-       LBER_FREE( (char *) bv );
+       ber_memfree_x( (char *) bv, ctx );
+}
+
+void
+ber_bvecfree( struct berval **bv )
+{
+       ber_bvecfree_x( bv, NULL );
 }
 
 int
-ber_bvecadd( struct berval ***bvec, struct berval *bv )
+ber_bvecadd_x( struct berval ***bvec, struct berval *bv, void *ctx )
 {
        ber_len_t i;
        struct berval **new;
@@ -394,7 +430,7 @@ ber_bvecadd( struct berval ***bvec, struct berval *bv )
                        return 0;
                }
 
-               *bvec = LBER_MALLOC( 2 * sizeof(struct berval *) );
+               *bvec = ber_memalloc_x( 2 * sizeof(struct berval *), ctx );
 
                if( *bvec == NULL ) {
                        return -1;
@@ -417,7 +453,7 @@ ber_bvecadd( struct berval ***bvec, struct berval *bv )
                return i;
        }
 
-       new = LBER_REALLOC( *bvec, (i+2) * sizeof(struct berval *));
+       new = ber_memrealloc_x( *bvec, (i+2) * sizeof(struct berval *), ctx);
 
        if( new == NULL ) {
                return -1;
@@ -431,10 +467,15 @@ ber_bvecadd( struct berval ***bvec, struct berval *bv )
        return i;
 }
 
+int
+ber_bvecadd( struct berval ***bvec, struct berval *bv )
+{
+       return ber_bvecadd_x( bvec, bv, NULL );
+}
 
 struct berval *
-ber_dupbv(
-       struct berval *dst, struct berval *src )
+ber_dupbv_x(
+       struct berval *dst, struct berval *src, void *ctx )
 {
        struct berval *new;
 
@@ -448,7 +489,7 @@ ber_dupbv(
        if ( dst ) {
                new = dst;
        } else {
-               if(( new = LBER_MALLOC( sizeof(struct berval) )) == NULL ) {
+               if(( new = ber_memalloc_x( sizeof(struct berval), ctx )) == NULL ) {
                        ber_errno = LBER_ERROR_MEMORY;
                        return NULL;
                }
@@ -460,10 +501,10 @@ ber_dupbv(
                return new;
        }
 
-       if(( new->bv_val = LBER_MALLOC( src->bv_len + 1 )) == NULL ) {
+       if(( new->bv_val = ber_memalloc_x( src->bv_len + 1, ctx )) == NULL ) {
                ber_errno = LBER_ERROR_MEMORY;
                if ( !dst )
-                       LBER_FREE( new );
+                       ber_memfree_x( new, ctx );
                return NULL;
        }
 
@@ -474,18 +515,24 @@ ber_dupbv(
        return new;
 }
 
+struct berval *
+ber_dupbv(
+       struct berval *dst, struct berval *src )
+{
+       return ber_dupbv_x( dst, src, NULL );
+}
 
 struct berval *
 ber_bvdup(
        struct berval *src )
 {
-       return ber_dupbv( NULL, src );
+       return ber_dupbv_x( NULL, src, NULL );
 }
 
-
 struct berval *
-ber_str2bv(
-       LDAP_CONST char *s, ber_len_t len, int dup, struct berval *bv)
+ber_str2bv_x(
+       LDAP_CONST char *s, ber_len_t len, int dup, struct berval *bv,
+       void *ctx)
 {
        struct berval *new;
 
@@ -499,7 +546,7 @@ ber_str2bv(
        if( bv ) {
                new = bv;
        } else {
-               if(( new = LBER_MALLOC( sizeof(struct berval) )) == NULL ) {
+               if(( new = ber_memalloc_x( sizeof(struct berval), ctx )) == NULL ) {
                        ber_errno = LBER_ERROR_MEMORY;
                        return NULL;
                }
@@ -507,10 +554,10 @@ ber_str2bv(
 
        new->bv_len = len ? len : strlen( s );
        if ( dup ) {
-               if ( (new->bv_val = LBER_MALLOC( new->bv_len+1 )) == NULL ) {
+               if ( (new->bv_val = ber_memalloc_x( new->bv_len+1, ctx )) == NULL ) {
                        ber_errno = LBER_ERROR_MEMORY;
                        if ( !bv )
-                               LBER_FREE( new );
+                               ber_memfree_x( new, ctx );
                        return NULL;
                }
 
@@ -524,8 +571,16 @@ ber_str2bv(
 }
 
 struct berval *
-ber_mem2bv(
+ber_str2bv(
        LDAP_CONST char *s, ber_len_t len, int dup, struct berval *bv)
+{
+       return ber_str2bv_x( s, len, dup, bv, NULL );
+}
+
+struct berval *
+ber_mem2bv_x(
+       LDAP_CONST char *s, ber_len_t len, int dup, struct berval *bv,
+       void *ctx)
 {
        struct berval *new;
 
@@ -539,7 +594,7 @@ ber_mem2bv(
        if( bv ) {
                new = bv;
        } else {
-               if(( new = LBER_MALLOC( sizeof(struct berval) )) == NULL ) {
+               if(( new = ber_memalloc_x( sizeof(struct berval), ctx )) == NULL ) {
                        ber_errno = LBER_ERROR_MEMORY;
                        return NULL;
                }
@@ -547,10 +602,10 @@ ber_mem2bv(
 
        new->bv_len = len;
        if ( dup ) {
-               if ( (new->bv_val = LBER_MALLOC( new->bv_len+1 )) == NULL ) {
+               if ( (new->bv_val = ber_memalloc_x( new->bv_len+1, ctx )) == NULL ) {
                        ber_errno = LBER_ERROR_MEMORY;
                        if ( !bv )
-                               LBER_FREE( new );
+                               ber_memfree_x( new, ctx );
                        return NULL;
                }
 
@@ -563,8 +618,15 @@ ber_mem2bv(
        return( new );
 }
 
+struct berval *
+ber_mem2bv(
+       LDAP_CONST char *s, ber_len_t len, int dup, struct berval *bv)
+{
+       return ber_mem2bv_x( s, len, dup, bv, NULL );
+}
+
 char *
-ber_strdup( LDAP_CONST char *s )
+ber_strdup_x( LDAP_CONST char *s, void *ctx )
 {
        char    *p;
        size_t  len;
@@ -582,7 +644,7 @@ ber_strdup( LDAP_CONST char *s )
 
        len = strlen( s ) + 1;
 
-       if ( (p = LBER_MALLOC( len )) == NULL ) {
+       if ( (p = ber_memalloc_x( len, ctx )) == NULL ) {
                ber_errno = LBER_ERROR_MEMORY;
                return NULL;
        }
@@ -592,7 +654,13 @@ ber_strdup( LDAP_CONST char *s )
 }
 
 char *
-ber_strndup( LDAP_CONST char *s, ber_len_t l )
+ber_strdup( LDAP_CONST char *s )
+{
+       return ber_strdup_x( s, NULL );
+}
+
+char *
+ber_strndup_x( LDAP_CONST char *s, ber_len_t l, void *ctx )
 {
        char    *p;
        size_t  len;
@@ -614,7 +682,7 @@ ber_strndup( LDAP_CONST char *s, ber_len_t l )
                len = l;
        }
 
-       if ( (p = LBER_MALLOC( len + 1 )) == NULL ) {
+       if ( (p = ber_memalloc_x( len + 1, ctx )) == NULL ) {
                ber_errno = LBER_ERROR_MEMORY;
                return NULL;
        }
@@ -625,27 +693,13 @@ ber_strndup( LDAP_CONST char *s, ber_len_t l )
 }
 
 char *
-ber_strndup__( LDAP_CONST char *s, size_t l )
+ber_strndup( LDAP_CONST char *s, ber_len_t l )
 {
-       char    *p;
-       size_t  len;
-
-       if ( s == NULL ) {
-               return NULL;
-       }
-
-       len = strlen( s );
-       if (( p = LBER_MALLOC( len + 1 ) ) == NULL ) {
-               return NULL;
-       }
-
-       AC_MEMCPY( p, s, len );
-       p[ len ] = '\0';
-       return p;
+       return ber_strndup_x( s, l, NULL );
 }
 
 void
-ber_bvarray_free( BerVarray a )
+ber_bvarray_free_x( BerVarray a, void *ctx )
 {
        int i;
 
@@ -655,15 +709,21 @@ ber_bvarray_free( BerVarray a )
                BER_MEM_VALID( a );
 
                for (i=0; a[i].bv_val; i++) {
-                       LBER_FREE(a[i].bv_val);
+                       ber_memfree_x(a[i].bv_val, ctx);
                }
 
-               LBER_FREE(a);
+               ber_memfree_x(a, ctx);
        }
 }
 
+void
+ber_bvarray_free( BerVarray a )
+{
+       ber_bvarray_free_x(a, NULL);
+}
+
 int
-ber_bvarray_add( BerVarray *a, BerValue *bv )
+ber_bvarray_add_x( BerVarray *a, BerValue *bv, void *ctx )
 {
        int     n;
 
@@ -675,7 +735,7 @@ ber_bvarray_add( BerVarray *a, BerValue *bv )
                }
                n = 0;
 
-               *a = (BerValue *) LBER_MALLOC( 2 * sizeof(BerValue) );
+               *a = (BerValue *) ber_memalloc_x( 2 * sizeof(BerValue), ctx );
                if ( *a == NULL ) {
                        return -1;
                }
@@ -692,8 +752,8 @@ ber_bvarray_add( BerVarray *a, BerValue *bv )
                        return n;
                }
 
-               atmp = (BerValue *) LBER_REALLOC( (char *) *a,
-                   (n + 2) * sizeof(BerValue) );
+               atmp = (BerValue *) ber_memrealloc_x( (char *) *a,
+                   (n + 2) * sizeof(BerValue), ctx );
 
                if( atmp == NULL ) {
                        return -1;
@@ -708,3 +768,8 @@ ber_bvarray_add( BerVarray *a, BerValue *bv )
        return n;
 }
 
+int
+ber_bvarray_add( BerVarray *a, BerValue *bv )
+{
+       return ber_bvarray_add_x( a, bv, NULL );
+}
index 4ecee6485b60ba336591558a61820f76ad39647f..8294a6f284a42d222671d6ac1755e33091e48aa3 100644 (file)
@@ -86,6 +86,11 @@ ber_get_option(
                *((ber_len_t *) outvalue) = ber_pvt_ber_write(ber);
                return LBER_OPT_SUCCESS;
 
+       case LBER_OPT_BER_MEMCTX:
+               assert( LBER_VALID( ber ) );
+               *((void **) outvalue) = ber->ber_memctx;
+               return LBER_OPT_SUCCESS;
+       
        default:
                /* bad param */
                ber_errno = LBER_ERROR_PARAM;
@@ -121,7 +126,7 @@ ber_set_option(
                }
 
                ber_int_memory_fns = (BerMemoryFunctions *)
-                       (*(f->bmf_malloc))(sizeof(BerMemoryFunctions));
+                       (*(f->bmf_malloc))(sizeof(BerMemoryFunctions), NULL);
 
                if ( ber_int_memory_fns == NULL ) {
                        ber_errno = LBER_ERROR_MEMORY;
@@ -204,6 +209,11 @@ ber_set_option(
                ber->ber_ptr = &ber->ber_buf[* (const ber_len_t *) invalue];
                return LBER_OPT_SUCCESS;
 
+       case LBER_OPT_BER_MEMCTX:
+               assert( LBER_VALID( ber ) );
+               ber->ber_memctx = (void *)invalue;
+               return LBER_OPT_SUCCESS;
+
        default:
                /* bad param */
                ber_errno = LBER_ERROR_PARAM;