#include <stdlib.h>
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) |
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; }