/****************************************************************************** ** Filename: emalloc.c ** Purpose: Routines for trapping memory allocation errors. ** Author: Dan Johnson HP-UX 6.2 HP-UX 6.2 ** History: 4/3/89, DSJ, Created. ** ** (c) Copyright Hewlett-Packard Company, 1988. ** Licensed under the Apache License, Version 2.0 (the "License"); ** you may not use this file except in compliance with the License. ** You may obtain a copy of the License at ** http://www.apache.org/licenses/LICENSE-2.0 ** Unless required by applicable law or agreed to in writing, software ** distributed under the License is distributed on an "AS IS" BASIS, ** WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. ** See the License for the specific language governing permissions and ** limitations under the License. ******************************************************************************/ /**---------------------------------------------------------------------------- Include Files and Type Defines ----------------------------------------------------------------------------**/ #include "emalloc.h" #include "danerror.h" #include /**---------------------------------------------------------------------------- Public Code ----------------------------------------------------------------------------**/ /*---------------------------------------------------------------------------*/ void *Emalloc(size_t Size) { /* ** Parameters: ** Size number of bytes of memory to be allocated ** Globals: none ** Operation: ** This routine attempts to allocate the specified number of ** bytes. If the memory can be allocated, a pointer to the ** memory is returned. If the memory cannot be allocated, or ** if the allocation request is negative or zero, ** an error is trapped. ** Return: Pointer to allocated memory. ** Exceptions: NOTENOUGHMEMORY unable to allocate Size bytes ** ILLEGALMALLOCREQUEST negative or zero request size ** History: 4/3/89, DSJ, Created. */ void *Buffer; if (Size <= 0) DoError (ILLEGALMALLOCREQUEST, "Illegal malloc request size"); Buffer = (void *) malloc (Size); if (Buffer == NULL) { DoError (NOTENOUGHMEMORY, "Not enough memory"); return (NULL); } else return (Buffer); } /* Emalloc */ /*---------------------------------------------------------------------------*/ void *Erealloc(void *ptr, size_t size) { void *Buffer; if (size < 0 || (size == 0 && ptr == NULL)) DoError (ILLEGALMALLOCREQUEST, "Illegal realloc request size"); Buffer = (void *) realloc (ptr, size); if (Buffer == NULL && size != 0) DoError (NOTENOUGHMEMORY, "Not enough memory"); return (Buffer); } /* Erealloc */ /*---------------------------------------------------------------------------*/ void Efree(void *ptr) { if (ptr == NULL) DoError (ILLEGALMALLOCREQUEST, "Attempted to free NULL ptr"); free(ptr); } /* Efree */