xref: /original-bsd/share/zoneinfo/ialloc.c (revision b3f911e0)
1 #ifndef lint
2 #ifndef NOID
3 static char	elsieid[] = "@(#)ialloc.c	8.18";
4 #endif /* !defined NOID */
5 #endif /* !defined lint */
6 
7 /*LINTLIBRARY*/
8 
9 #include "string.h"
10 #include "stdlib.h"
11 #include "nonstd.h"
12 
13 #ifdef MAL
14 #define NULLMAL(x)	((x) == NULL || (x) == MAL)
15 #else /* !defined MAL */
16 #define NULLMAL(x)	((x) == NULL)
17 #endif /* !defined MAL */
18 
19 #define nonzero(n)	(((n) == 0) ? 1 : (n))
20 
21 char *	icalloc P((int nelem, int elsize));
22 char *	icatalloc P((char * old, const char * new));
23 char *	icpyalloc P((const char * string));
24 char *	imalloc P((int n));
25 char *	irealloc P((char * pointer, int size));
26 void	ifree P((char * pointer));
27 
28 char *
29 imalloc(n)
30 const int	n;
31 {
32 #ifdef MAL
33 	register char *	result;
34 
35 	result = malloc((alloc_size_t) nonzero(n));
36 	return NULLMAL(result) ? NULL : result;
37 #else /* !defined MAL */
38 	return malloc((alloc_size_t) nonzero(n));
39 #endif /* !defined MAL */
40 }
41 
42 char *
43 icalloc(nelem, elsize)
44 int	nelem;
45 int	elsize;
46 {
47 	if (nelem == 0 || elsize == 0)
48 		nelem = elsize = 1;
49 	return calloc((alloc_size_t) nelem, (alloc_size_t) elsize);
50 }
51 
52 char *
53 irealloc(pointer, size)
54 char * const	pointer;
55 const int	size;
56 {
57 	if (NULLMAL(pointer))
58 		return imalloc(size);
59 	return realloc((genericptr_t) pointer, (alloc_size_t) nonzero(size));
60 }
61 
62 char *
63 icatalloc(old, new)
64 char * const		old;
65 const char * const	new;
66 {
67 	register char *	result;
68 	register	oldsize, newsize;
69 
70 	newsize = NULLMAL(new) ? 0 : strlen(new);
71 	if (NULLMAL(old))
72 		oldsize = 0;
73 	else if (newsize == 0)
74 		return old;
75 	else	oldsize = strlen(old);
76 	if ((result = irealloc(old, oldsize + newsize + 1)) != NULL)
77 		if (!NULLMAL(new))
78 			(void) strcpy(result + oldsize, new);
79 	return result;
80 }
81 
82 char *
83 icpyalloc(string)
84 const char * const	string;
85 {
86 	return icatalloc((char *) NULL, string);
87 }
88 
89 void
90 ifree(p)
91 char * const	p;
92 {
93 	if (!NULLMAL(p))
94 		(void) free(p);
95 }
96 
97 void
98 icfree(p)
99 char * const	p;
100 {
101 	if (!NULLMAL(p))
102 		(void) free(p);
103 }
104