Merge from vendor branch LIBSTDC++:
[dragonfly.git] / usr.sbin / zic / ialloc.c
1 #ifndef lint
2 #ifndef NOID
3 static char     elsieid[] = "@(#)ialloc.c       8.29";
4 #endif /* !defined NOID */
5 #endif /* !defined lint */
6
7 /*
8  * @(#)ialloc.c 8.29
9  * $FreeBSD: src/usr.sbin/zic/ialloc.c,v 1.5 1999/08/28 01:21:18 peter Exp $
10  * $DragonFly: src/usr.sbin/zic/ialloc.c,v 1.2 2003/06/17 04:30:05 dillon Exp $
11  */
12 /*LINTLIBRARY*/
13
14 #include "private.h"
15
16 #define nonzero(n)      (((n) == 0) ? 1 : (n))
17
18 char *
19 imalloc(n)
20 const int       n;
21 {
22         return malloc((size_t) nonzero(n));
23 }
24
25 char *
26 icalloc(nelem, elsize)
27 int     nelem;
28 int     elsize;
29 {
30         if (nelem == 0 || elsize == 0)
31                 nelem = elsize = 1;
32         return calloc((size_t) nelem, (size_t) elsize);
33 }
34
35 void *
36 irealloc(pointer, size)
37 void * const    pointer;
38 const int       size;
39 {
40         if (pointer == NULL)
41                 return imalloc(size);
42         return realloc((void *) pointer, (size_t) nonzero(size));
43 }
44
45 char *
46 icatalloc(old, new)
47 char * const            old;
48 const char * const      new;
49 {
50         register char * result;
51         register int    oldsize, newsize;
52
53         newsize = (new == NULL) ? 0 : strlen(new);
54         if (old == NULL)
55                 oldsize = 0;
56         else if (newsize == 0)
57                 return old;
58         else    oldsize = strlen(old);
59         if ((result = irealloc(old, oldsize + newsize + 1)) != NULL)
60                 if (new != NULL)
61                         (void) strcpy(result + oldsize, new);
62         return result;
63 }
64
65 char *
66 icpyalloc(string)
67 const char * const      string;
68 {
69         return icatalloc((char *) NULL, string);
70 }
71
72 void
73 ifree(p)
74 char * const    p;
75 {
76         if (p != NULL)
77                 (void) free(p);
78 }
79
80 void
81 icfree(p)
82 char * const    p;
83 {
84         if (p != NULL)
85                 (void) free(p);
86 }