Skip to content
Snippets Groups Projects
ch_malloc.c 2.82 KiB
Newer Older
  • Learn to ignore specific revisions
  • Kurt Zeilenga's avatar
    Kurt Zeilenga committed
    /* ch_malloc.c - malloc routines that test returns from malloc and friends */
    
    Kurt Zeilenga's avatar
    Kurt Zeilenga committed
    /* This work is part of OpenLDAP Software <http://www.openldap.org/>.
     *
    
    Kurt Zeilenga's avatar
    Kurt Zeilenga committed
     * Copyright 1998-2005 The OpenLDAP Foundation.
    
    Kurt Zeilenga's avatar
    Kurt Zeilenga committed
     * All rights reserved.
     *
     * Redistribution and use in source and binary forms, with or without
     * modification, are permitted only as authorized by the OpenLDAP
     * Public License.
     *
     * A copy of this license is available in the file LICENSE in the
     * top-level directory of the distribution or, alternatively, at
     * <http://www.OpenLDAP.org/license.html>.
     */
    /* Portions Copyright (c) 1995 Regents of the University of Michigan.
     * All rights reserved.
     *
     * Redistribution and use in source and binary forms are permitted
     * provided that this notice is preserved and that due credit is given
     * to the University of Michigan at Ann Arbor. The name of the University
     * may not be used to endorse or promote products derived from this
     * software without specific prior written permission. This software
     * is provided ``as is'' without express or implied warranty.
    
    Kurt Zeilenga's avatar
    Kurt Zeilenga committed
     */
    
    Kurt Zeilenga's avatar
    Kurt Zeilenga committed
    
    
    #include "portable.h"
    
    
    Kurt Zeilenga's avatar
    Kurt Zeilenga committed
    #include <stdio.h>
    
    
    #include <ac/stdlib.h>
    
    
    #include <ac/string.h>
    #include <ac/socket.h>
    
    
    Kurt Zeilenga's avatar
    Kurt Zeilenga committed
    #include "slap.h"
    
    
    Howard Chu's avatar
    Howard Chu committed
    BerMemoryFunctions ch_mfuncs = {
    	(BER_MEMALLOC_FN *)ch_malloc,
    	(BER_MEMCALLOC_FN *)ch_calloc,
    	(BER_MEMREALLOC_FN *)ch_realloc,
    	(BER_MEMFREE_FN *)ch_free 
    };
    
    Kurt Zeilenga's avatar
    Kurt Zeilenga committed
    ch_malloc(
    
    Kurt Zeilenga's avatar
    Kurt Zeilenga committed
    )
    {
    
    Kurt Zeilenga's avatar
    Kurt Zeilenga committed
    
    
    Howard Chu's avatar
    Howard Chu committed
    	if ( (new = (void *) ber_memalloc_x( size, NULL )) == NULL ) {
    
    		Debug( LDAP_DEBUG_ANY, "ch_malloc of %lu bytes failed\n",
    			(long) size, 0, 0 );
    
    Kurt Zeilenga's avatar
    Kurt Zeilenga committed
    		assert( 0 );
    		exit( EXIT_FAILURE );
    
    Kurt Zeilenga's avatar
    Kurt Zeilenga committed
    	}
    
    	return( new );
    }
    
    
    Kurt Zeilenga's avatar
    Kurt Zeilenga committed
    ch_realloc(
    
    Kurt Zeilenga's avatar
    Kurt Zeilenga committed
    )
    {
    
    Kurt Zeilenga's avatar
    Kurt Zeilenga committed
    
    	if ( block == NULL ) {
    		return( ch_malloc( size ) );
    	}
    
    
    	if( size == 0 ) {
    		ch_free( block );
    	}
    
    
    	ctx = slap_sl_context( block );
    
    		return slap_sl_realloc( block, size, ctx );
    
    Howard Chu's avatar
    Howard Chu committed
    	if ( (new = (void *) ber_memrealloc_x( block, size, NULL )) == NULL ) {
    
    		Debug( LDAP_DEBUG_ANY, "ch_realloc of %lu bytes failed\n",
    			(long) size, 0, 0 );
    
    Kurt Zeilenga's avatar
    Kurt Zeilenga committed
    		assert( 0 );
    		exit( EXIT_FAILURE );
    
    Kurt Zeilenga's avatar
    Kurt Zeilenga committed
    	}
    
    	return( new );
    }
    
    
    Kurt Zeilenga's avatar
    Kurt Zeilenga committed
    ch_calloc(
    
        ber_len_t	nelem,
        ber_len_t	size
    
    Kurt Zeilenga's avatar
    Kurt Zeilenga committed
    )
    {
    
    Kurt Zeilenga's avatar
    Kurt Zeilenga committed
    
    
    Howard Chu's avatar
    Howard Chu committed
    	if ( (new = (void *) ber_memcalloc_x( nelem, size, NULL )) == NULL ) {
    
    		Debug( LDAP_DEBUG_ANY, "ch_calloc of %lu elems of %lu bytes failed\n",
    		  (long) nelem, (long) size, 0 );
    
    Kurt Zeilenga's avatar
    Kurt Zeilenga committed
    		assert( 0 );
    
    		exit( EXIT_FAILURE );
    
    Kurt Zeilenga's avatar
    Kurt Zeilenga committed
    	}
    
    	return( new );
    }
    
    Howard Chu's avatar
    Howard Chu committed
    	if ( (new = ber_strdup_x( string, NULL )) == NULL ) {
    
    		Debug( LDAP_DEBUG_ANY, "ch_strdup(%s) failed\n", string, 0, 0 );
    
    Kurt Zeilenga's avatar
    Kurt Zeilenga committed
    		assert( 0 );
    
    		exit( EXIT_FAILURE );
    
    void
    ch_free( void *ptr )
    {
    
    	ctx = slap_sl_context( ptr );
    
    		slap_sl_free( ptr, ctx );