static char rcsid[] = "@(#)$Id: safemalloc.c,v 1.3 1996/03/14 17:27:43 wfp5p Exp $";
/*******************************************************************************
* The Elm Mail System - $Revision: 1.3 $ $State: Exp $
*
* Copyright (c) 1988-1995 USENET Community Trust
*******************************************************************************
* Bug reports, patches, comments, suggestions should be sent to:
*
* Bill Pemberton, Elm Coordinator
* flash@virginia.edu
*
*******************************************************************************
* $Log: safemalloc.c,v $
* Revision 1.3 1996/03/14 17:27:43 wfp5p
* Alpha 9
*
* Revision 1.2 1995/09/29 17:41:36 wfp5p
* Alpha 8 (Chip's big changes)
*
* Revision 1.1.1.1 1995/04/19 20:38:33 wfp5p
* Initial import of elm 2.4 PL0 as base for elm 2.5.
*
******************************************************************************/
#include "elm_defs.h"
#include "s_error.h"
/*
* These routines perform dynamic memory allocation with error checking.
* The "safe_malloc_fail_handler" vector points to a routine that is invoked
* if memory allocation fails. The default error handler displays a message
* and aborts the program.
*/
void dflt_safe_malloc_fail_handler(proc, len)
const char *proc;
unsigned len;
{
fprintf(stderr, catgets(elm_msg_cat, ErrorSet,
ErrorSafeMallocOutOfMemory,
"error - out of memory [%s failed allocating %d bytes]\n"),
proc, len);
exit(1);
}
void (*safe_malloc_fail_handler) P_((const char *, unsigned))
= dflt_safe_malloc_fail_handler;
malloc_t safe_malloc(len)
unsigned len;
{
malloc_t p;
if ((p = malloc(len)) == NULL)
(*safe_malloc_fail_handler)("safe_malloc", len);
return p;
}
malloc_t safe_realloc(p, len)
malloc_t p;
unsigned len;
{
if ((p = (p == NULL ? malloc(len) : realloc((malloc_t)p, len))) == NULL)
(*safe_malloc_fail_handler)("safe_realloc", len);
return p;
}
char *safe_strdup(s)
const char *s;
{
char *p;
if ((p = (char *) malloc(strlen(s)+1)) == NULL)
(*safe_malloc_fail_handler)("safe_strdup", strlen(s)+1);
return strcpy(p, s);
}
syntax highlighted by Code2HTML, v. 0.9.1