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