mirror of
https://github.com/HDFGroup/hdf5.git
synced 2025-03-25 17:00:45 +08:00
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
188 lines
4.3 KiB
C
188 lines
4.3 KiB
C
/*-------------------------------------------------------------------------
|
||
* 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);
|
||
}
|