/* $OpenLDAP$ */
/* This work is part of OpenLDAP Software <http://www.openldap.org/>.
*
- * Copyright 1998-2007 The OpenLDAP Foundation.
+ * Copyright 1998-2012 The OpenLDAP Foundation.
* All rights reserved.
*
* Redistribution and use in source and binary forms, with or without
};
/* Pattern at top of allocated space */
-#define LBER_MEM_JUNK 0xdeaddadaU
+#define LBER_MEM_JUNK ((ber_int_t) 0xdeaddada)
-static const struct ber_mem_hdr ber_int_mem_hdr = { LBER_MEM_JUNK, 0, 0 };
+static const struct ber_mem_hdr ber_int_mem_hdr = { LBER_MEM_JUNK };
/* Note sequence and ber_int_meminuse are counters, but are not
* thread safe. If you want to use these values for multithreaded applications,
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;
-
+ new = malloc(s + sizeof(struct ber_mem_hdr) + sizeof( ber_int_t));
+ if( new )
+ {
+ struct ber_mem_hdr *mh = new;
mh->bm_top = LBER_MEM_JUNK;
mh->bm_length = s;
setdatatop( mh);
BER_MEM_VALID( &mh[1] );
new = &mh[1];
+ }
#else
new = malloc( s );
#endif
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) );
- if( mh == NULL ) return NULL;
+ new = n < (-sizeof(struct ber_mem_hdr) - sizeof(ber_int_t)) / s
+ ? calloc(1, n*s + sizeof(struct ber_mem_hdr) + sizeof(ber_int_t))
+ : NULL;
+ if( new )
+ {
+ struct ber_mem_hdr *mh = new;
mh->bm_top = LBER_MEM_JUNK;
mh->bm_length = n*s;
#endif
BER_MEM_VALID( &mh[1] );
new = &mh[1];
+ }
#else
new = calloc( n, s );
#endif
new = dst;
} else {
if(( new = ber_memalloc_x( sizeof(struct berval), ctx )) == NULL ) {
- ber_errno = LBER_ERROR_MEMORY;
return NULL;
}
}
}
if(( new->bv_val = ber_memalloc_x( src->bv_len + 1, ctx )) == NULL ) {
- ber_errno = LBER_ERROR_MEMORY;
if ( !dst )
ber_memfree_x( new, ctx );
return NULL;
new = bv;
} else {
if(( new = ber_memalloc_x( sizeof(struct berval), ctx )) == NULL ) {
- ber_errno = LBER_ERROR_MEMORY;
return NULL;
}
}
new->bv_len = len ? len : strlen( s );
if ( dup ) {
if ( (new->bv_val = ber_memalloc_x( new->bv_len+1, ctx )) == NULL ) {
- ber_errno = LBER_ERROR_MEMORY;
if ( !bv )
ber_memfree_x( new, ctx );
return NULL;
new = bv;
} else {
if(( new = ber_memalloc_x( sizeof(struct berval), ctx )) == NULL ) {
- ber_errno = LBER_ERROR_MEMORY;
return NULL;
}
}
new->bv_len = len;
if ( dup ) {
if ( (new->bv_val = ber_memalloc_x( new->bv_len+1, ctx )) == NULL ) {
- ber_errno = LBER_ERROR_MEMORY;
if ( !bv ) {
ber_memfree_x( new, ctx );
}
}
len = strlen( s ) + 1;
-
- if ( (p = ber_memalloc_x( len, ctx )) == NULL ) {
- ber_errno = LBER_ERROR_MEMORY;
- return NULL;
+ if ( (p = ber_memalloc_x( len, ctx )) != NULL ) {
+ AC_MEMCPY( p, s, len );
}
- AC_MEMCPY( p, s, len );
return p;
}
return ber_strdup_x( s, NULL );
}
+ber_len_t
+ber_strnlen( LDAP_CONST char *s, ber_len_t len )
+{
+ ber_len_t l;
+
+ for ( l = 0; l < len && s[l] != '\0'; l++ ) ;
+
+ return l;
+}
+
char *
ber_strndup_x( LDAP_CONST char *s, ber_len_t l, void *ctx )
{
return NULL;
}
- len = strlen( s );
-
- if ( len > l ) {
- len = l;
- }
-
- if ( (p = ber_memalloc_x( len + 1, ctx )) == NULL ) {
- ber_errno = LBER_ERROR_MEMORY;
- return NULL;
+ len = ber_strnlen( s, l );
+ if ( (p = ber_memalloc_x( len + 1, ctx )) != NULL ) {
+ AC_MEMCPY( p, s, len );
+ p[len] = '\0';
}
- AC_MEMCPY( p, s, len );
- p[len] = '\0';
return p;
}