/* must-malloc.c - malloc or die
*
****************************************************************
* Copyright (C) 1998, 2000 Thomas Lord
*
* See the file "COPYING" for further information about
* the copyright and warranty status of this work.
*/
#include "hackerlab/os/malloc.h"
#include "hackerlab/char/str.h"
#include "hackerlab/mem/mem.h"
#include "hackerlab/bugs/panic.h"
#include "hackerlab/mem/must-malloc.h"
/************************************************************************
*(h1 "Allocate or Die"
* :includes ("hackerlab/mem/must-malloc.h"))
*
* The functions in this section allocate memory. If an allocation
* fails, they call `panic' rather than returning. Thus, these
* functions may be used without checking for errors.
*/
/*(c must_calloc)
* void * must_calloc (size_t amt);
*
* Return a newly allocated block large enough to hold `amt' bytes.
* If no such block can be allocated, exit by calling `panic'.
* Fill the newly allocated memory with 0 bytes.
*
*/
void *
must_calloc (size_t amt)
{
void * a;
a = must_malloc (amt);
mem_set0 (a, amt);
return a;
}
/*(c must_malloc)
* void * must_malloc (size_t amt);
*
* Return a newly malloced block large enough to hold `amt' bytes. If
* no such block can be allocated, exit by calling `panic'.
*/
void *
must_malloc (size_t amt)
{
void * a;
a = (void *)malloc (amt);
if (amt && !a)
panic ("out of memory");
return a;
}
/*(c must_realloc)
* void * must_realloc (void * ptr, size_t amt);
*
* Return a malloced block large enough to hold `amt' bytes. If `ptr'
* is not 0, it should point to a previously malloced block. The
* contents of the new block are initialized from the contents of
* `ptr'. If the new block is not the same as `ptr', `ptr' is freed.
*
* If no block can be allocated, exit by calling `panic'.
*/
void *
must_realloc (void * ptr, size_t amt)
{
void * a;
a = (void *)realloc (ptr, amt);
if (amt && !a)
panic ("out of memory");
return a;
}
/*(c must_free)
* void must_free (void * ptr);
*
* Free a block allocated by `must_calloc', `must_malloc', or
* `must_realloc'.
*/
void
must_free (void * ptr)
{
if (ptr)
free (ptr);
}
syntax highlighted by Code2HTML, v. 0.9.1