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