1ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru/* 2ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru** This file is in the public domain, so clarified as of 3ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru** 2006-07-17 by Arthur David Olson. 4ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru*/ 5ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru 6ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru#ifndef lint 7ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru#ifndef NOID 8ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Querustatic char elsieid[] = "@(#)ialloc.c 8.30"; 9ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru#endif /* !defined NOID */ 10ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru#endif /* !defined lint */ 11ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru 12ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru/*LINTLIBRARY*/ 13ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru 14ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru#include "private.h" 15ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru 16ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru#define nonzero(n) (((n) == 0) ? 1 : (n)) 17ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru 18ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queruchar * 19ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queruimalloc(n) 20ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queruconst int n; 21ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru{ 22ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru return malloc((size_t) nonzero(n)); 23ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru} 24ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru 25ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queruchar * 26ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queruicalloc(nelem, elsize) 27ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queruint nelem; 28ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queruint elsize; 29ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru{ 30ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru if (nelem == 0 || elsize == 0) 31ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru nelem = elsize = 1; 32ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru return calloc((size_t) nelem, (size_t) elsize); 33ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru} 34ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru 35ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queruvoid * 36ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queruirealloc(pointer, size) 37ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queruvoid * const pointer; 38ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queruconst int size; 39ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru{ 40ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru if (pointer == NULL) 41ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru return imalloc(size); 42ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru return realloc((void *) pointer, (size_t) nonzero(size)); 43ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru} 44ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru 45ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queruchar * 46ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queruicatalloc(old, new) 47ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queruchar * const old; 48ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queruconst char * const new; 49ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru{ 50ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru register char * result; 51ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru register int oldsize, newsize; 52ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru 53ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru newsize = (new == NULL) ? 0 : strlen(new); 54ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru if (old == NULL) 55ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru oldsize = 0; 56ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru else if (newsize == 0) 57ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru return old; 58ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru else oldsize = strlen(old); 59ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru if ((result = irealloc(old, oldsize + newsize + 1)) != NULL) 60ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru if (new != NULL) 61ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru (void) strcpy(result + oldsize, new); 62ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru return result; 63ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru} 64ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru 65ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queruchar * 66ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queruicpyalloc(string) 67ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queruconst char * const string; 68ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru{ 69ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru return icatalloc((char *) NULL, string); 70ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru} 71ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru 72ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queruvoid 73ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queruifree(p) 74ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queruchar * const p; 75ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru{ 76ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru if (p != NULL) 77ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru (void) free(p); 78ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru} 79ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru 80ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queruvoid 81ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queruicfree(p) 82ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queruchar * const p; 83ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru{ 84ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru if (p != NULL) 85ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru (void) free(p); 86ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru} 87