Better solution to zero-sized alloc requests.

This commit is contained in:
Andrew Johnson
2006-01-31 20:44:55 +00:00
parent dbac42746c
commit ba9499c786

View File

@@ -7,15 +7,12 @@
* and higher are distributed subject to a Software License Agreement found
* in file LICENSE that is included with this distribution.
\*************************************************************************/
/* callocMustSucceed.c */
/* $Id$ */
/* Author: Marty Kraimer Date: 04JAN99 */
#include <stddef.h>
#include <string.h>
#include <stdlib.h>
#include <stddef.h>
#include <stdio.h>
#define epicsExportSharedSymbols
#include "errlog.h"
@@ -24,31 +21,38 @@
epicsShareFunc void * callocMustSucceed(size_t count, size_t size, const char *errorMessage)
{
void *mem = calloc(count,size);
if(mem==0 && count!=0 && size!=0) {
errlogPrintf("%s callocMustSucceed failed count %lu size %lu\n",
errorMessage,(unsigned long)count,(unsigned long)size);
void * mem = NULL;
if (count != 0 && size != 0)
mem = calloc(count, size);
if (mem == NULL) {
errlogPrintf("%s: callocMustSucceed(count=%lu, size=%lu) failed\n",
errorMessage, (unsigned long)count, (unsigned long)size);
cantProceed(0);
}
return(mem);
return mem;
}
epicsShareFunc void * mallocMustSucceed(size_t size, const char *errorMessage)
{
void *mem = malloc(size);
if(mem==0 && size!=0) {
errlogPrintf("%s mallocMustSucceed failed size %lu\n",
errorMessage,(unsigned long)size);
void * mem = NULL;
if (size != 0)
mem = malloc(size);
if (mem == NULL) {
errlogPrintf("%s: mallocMustSucceed(size=%lu) failed\n",
errorMessage, (unsigned long)size);
cantProceed(0);
}
return(mem);
return mem;
}
epicsShareFunc void cantProceed(const char *errorMessage)
{
if(errorMessage) errlogPrintf("fatal error: %s\n",errorMessage);
else errlogPrintf("fatal error\n");
if (errorMessage)
errlogPrintf("fatal error: %s\n",errorMessage);
else
errlogPrintf("fatal error, task suspended\n");
errlogFlush();
epicsThreadSleep(1.0);
epicsThreadSuspendSelf();
while (1)
epicsThreadSuspendSelf();
}