hdf5/src/H5MM.c
Quincey Koziol 12e30dc9b2 [svn-r5947] Purpose:
Code cleanup

Description:
    Clean up ID->name code:
        - Reformat to better match library coding standard
        - Changed several algorithms to be more efficient
        - Integrated into library more smoothly

Platforms tested:
    eirene w/FORTRAN & C++
    arabica w/FORTRAN
    modi4 w/FORTRAN & parallel
    sleipnir
2002-09-25 09:50:49 -05:00

188 lines
4.3 KiB
C
Raw Blame History

This file contains invisible Unicode characters

This file contains invisible Unicode characters that are indistinguishable to humans but may be processed differently by a computer. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

/*-------------------------------------------------------------------------
* Copyright (C) 1997-2001 National Center for Supercomputing Applications
* All rights reserved.
*
*-------------------------------------------------------------------------
*
* Created: H5MM.c
* Jul 10 1997
* Robb Matzke <matzke@llnl.gov>
*
* Purpose: Memory management functions.
*
* Modifications:
*
*-------------------------------------------------------------------------
*/
#include "H5private.h"
#include "H5Eprivate.h"
#include "H5MMprivate.h"
/* Interface initialization? */
#define PABLO_MASK H5MM_mask
static int interface_initialize_g = 0;
#define INTERFACE_INIT NULL
/*-------------------------------------------------------------------------
* Function: H5MM_realloc
*
* Purpose: Just like the POSIX version of realloc(3). Specifically, the
* following calls are equivalent
*
* H5MM_realloc (NULL, size) <==> H5MM_malloc (size)
* H5MM_realloc (ptr, 0) <==> H5MM_xfree (ptr)
* H5MM_realloc (NULL, 0) <==> NULL
*
* Return: Success: Ptr to new memory or NULL if the memory
* was freed.
*
* Failure: abort()
*
* Programmer: Robb Matzke
* matzke@llnl.gov
* Jul 10 1997
*
* Modifications:
*
*-------------------------------------------------------------------------
*/
void *
H5MM_realloc(void *mem, size_t size)
{
void *ret_value;
/* Use FUNC_ENTER_NOINIT here to avoid performance issues */
FUNC_ENTER_NOINIT(H5MM_realloc);
if (!mem) {
if (0 == size)
HGOTO_DONE(NULL);
mem = H5MM_malloc(size);
} else if (0 == size) {
mem = H5MM_xfree(mem);
} else {
mem = HDrealloc(mem, size);
assert(mem);
}
/* Set return value */
ret_value=mem;
done:
FUNC_LEAVE(ret_value);
}
/*-------------------------------------------------------------------------
* Function: H5MM_xstrdup
*
* Purpose: Duplicates a string. If the string to be duplicated is the
* null pointer, then return null. If the string to be duplicated
* is the empty string then return a new empty string.
*
* Return: Success: Ptr to a new string (or null if no string).
*
* Failure: abort()
*
* Programmer: Robb Matzke
* matzke@llnl.gov
* Jul 10 1997
*
* Modifications:
*
*-------------------------------------------------------------------------
*/
char *
H5MM_xstrdup(const char *s)
{
char *ret_value=NULL;
/* Use FUNC_ENTER_NOINIT here to avoid performance issues */
FUNC_ENTER_NOINIT(H5MM_xstrdup);
if (s) {
ret_value = H5MM_malloc(HDstrlen(s) + 1);
assert (ret_value);
HDstrcpy(ret_value, s);
} /* end if */
#ifdef LATER
done:
#endif /* LATER */
FUNC_LEAVE(ret_value);
}
/*-------------------------------------------------------------------------
* Function: H5MM_strdup
*
* Purpose: Duplicates a string. If the string to be duplicated is the
* null pointer, then return null. If the string to be duplicated
* is the empty string then return a new empty string.
*
* Return: Success: Ptr to a new string (or null if no string).
*
* Failure: abort()
*
* Programmer: Robb Matzke
* matzke@llnl.gov
* Jul 10 1997
*
* Modifications:
*
*-------------------------------------------------------------------------
*/
char *
H5MM_strdup(const char *s)
{
char *ret_value;
FUNC_ENTER_NOAPI(H5MM_strdup, NULL);
if (!s)
HGOTO_ERROR (H5E_ARGS, H5E_BADVALUE, NULL, "null string");
if (NULL==(ret_value = H5MM_malloc(HDstrlen(s) + 1)))
HGOTO_ERROR (H5E_RESOURCE, H5E_NOSPACE, NULL, "memory allocation failed");
HDstrcpy(ret_value, s);
done:
FUNC_LEAVE (ret_value);
}
/*-------------------------------------------------------------------------
* Function: H5MM_xfree
*
* Purpose: Just like free(3) except null pointers are allowed as
* arguments, and the return value (always NULL) can be
* assigned to the pointer whose memory was just freed:
*
* thing = H5MM_xfree (thing);
*
* Return: Success: NULL
*
* Failure: never fails
*
* Programmer: Robb Matzke
* matzke@llnl.gov
* Jul 10 1997
*
* Modifications:
*
*-------------------------------------------------------------------------
*/
void *
H5MM_xfree(void *mem)
{
/* Use FUNC_ENTER_NOINIT here to avoid performance issues */
FUNC_ENTER_NOINIT(H5MM_xfree);
if (mem)
HDfree(mem);
FUNC_LEAVE(NULL);
}