Functions

cbf_alloc.h File Reference

#include <stdlib.h>
Include dependency graph for cbf_alloc.h:
This graph shows which files directly or indirectly include this file:

Go to the source code of this file.

Functions

int cbf_alloc (void **new_block, size_t *new_nelem, size_t elsize, size_t nelem)
int cbf_realloc (void **old_block, size_t *old_nelem, size_t elsize, size_t nelem)
int cbf_free (void **old_block, size_t *old_nelem)

Function Documentation

int cbf_alloc ( void **  new_block,
size_t *  new_nelem,
size_t  elsize,
size_t  nelem 
)

Definition at line 222 of file cbf_alloc.c.

References CBF_ARGUMENT, and cbf_realloc().

Referenced by cbf_compress_packed(), cbf_copy_string(), cbf_make_compressdata(), cbf_make_context(), cbf_make_file(), cbf_make_handle(), cbf_make_new_node(), cbf_make_node(), and cbf_start_digest().

{
    /* Are the arguments valid? */
    
  if (!new_block)

    return CBF_ARGUMENT;


    /* Initialise */

  *new_block = NULL;

  if (new_nelem)
  
    *new_nelem = 0;


    /* Allocate the memory */

  return cbf_realloc (new_block, new_nelem, elsize, nelem);
}
int cbf_free ( void **  old_block,
size_t *  old_nelem 
)

Definition at line 249 of file cbf_alloc.c.

References CBF_ARGUMENT.

Referenced by cbf_compress_packed(), cbf_end_digest(), cbf_free_compressdata(), cbf_free_context(), cbf_free_file(), cbf_free_handle(), cbf_free_node(), cbf_free_string(), cbf_make_handle(), cbf_make_new_node(), cbf_make_node(), and cbf_set_children().

{
    /* Are the arguments valid? */
    
  if (!old_block)

    return CBF_ARGUMENT;


    /* Free the memory */

  if (*old_block)

    free (*old_block);

  *old_block = NULL;

  if (old_nelem)
  
    *old_nelem = 0;


    /* Success */

  return 0;
}
int cbf_realloc ( void **  old_block,
size_t *  old_nelem,
size_t  elsize,
size_t  nelem 
)

Definition at line 133 of file cbf_alloc.c.

References CBF_ALLOC, and CBF_ARGUMENT.

Referenced by cbf_alloc(), cbf_initialise_compressdata(), cbf_set_buffersize(), and cbf_set_children().

{
  void *new_block;

  
    /* Are the arguments valid? */
    
  if (!old_block || elsize == 0)

    return CBF_ARGUMENT;


    /* Is the size alread correct? */

  if (old_nelem)

    if (*old_nelem == nelem)

      return 0;


    /* Allocate the memory */

  if (nelem > 0)
  {
    new_block = malloc (nelem * elsize);

    if (!new_block)

      return CBF_ALLOC;
  }
  else

    new_block = NULL;


    /* Copy the old data */

  if (old_nelem)
  
    if (*old_block && *old_nelem > 0 && nelem > 0)
    {
      if (*old_nelem > nelem)
    
        *old_nelem = nelem;

      memcpy (new_block, *old_block, *old_nelem * elsize);
    }


    /* Free the old memory */

  if (*old_block)

    free (*old_block);


    /* Clear the new data */

  if (!old_nelem)

    memset (new_block, 0, nelem * elsize);
  
  else
  
    if (nelem > 0 && nelem > *old_nelem)

      memset (((char *) new_block) + *old_nelem * elsize, 0,
                                     (nelem - *old_nelem) * elsize);


    /* Replace the old data */

  *old_block = new_block;

  if (old_nelem)
  
    *old_nelem = nelem;
  

    /* Success */

  return 0;
}