|
|
1.1 root 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: }
This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.