|
42 | 42 | kmptype_t **buf; \ |
43 | 43 | } kmp_##name##_t; \ |
44 | 44 | SCOPE kmp_##name##_t *kmp_init_##name(void) { \ |
45 | | - return calloc(1, sizeof(kmp_##name##_t)); \ |
| 45 | + return (kmp_##name##_t *)calloc(1, sizeof(kmp_##name##_t)); \ |
46 | 46 | } \ |
47 | 47 | SCOPE void kmp_destroy_##name(kmp_##name##_t *mp) { \ |
48 | 48 | size_t k; \ |
|
53 | 53 | } \ |
54 | 54 | SCOPE kmptype_t *kmp_alloc_##name(kmp_##name##_t *mp) { \ |
55 | 55 | ++mp->cnt; \ |
56 | | - if (mp->n == 0) return calloc(1, sizeof(kmptype_t)); \ |
| 56 | + if (mp->n == 0) return (kmptype_t*)calloc(1,sizeof(kmptype_t)); \ |
57 | 57 | return mp->buf[--mp->n]; \ |
58 | 58 | } \ |
59 | 59 | SCOPE void kmp_free_##name(kmp_##name##_t *mp, kmptype_t *p) { \ |
60 | 60 | --mp->cnt; \ |
61 | 61 | if (mp->n == mp->max) { \ |
62 | | - mp->max = mp->max? mp->max<<1 : 16; \ |
63 | | - mp->buf = realloc(mp->buf, sizeof(kmptype_t *) * mp->max); \ |
| 62 | + size_t new_max = mp->max ? mp->max<<1 : 16; \ |
| 63 | + void* nb = realloc(mp->buf, sizeof(kmptype_t *) * new_max); \ |
| 64 | + if (!nb) { kmpfree_f(p); free(p); return; } \ |
| 65 | + mp->max = new_max; mp->buf = (kmptype_t **)nb; \ |
64 | 66 | } \ |
65 | 67 | mp->buf[mp->n++] = p; \ |
66 | 68 | } |
|
87 | 89 | size_t size; \ |
88 | 90 | } kl_##name##_t; \ |
89 | 91 | SCOPE kl_##name##_t *kl_init_##name(void) { \ |
90 | | - kl_##name##_t *kl = calloc(1, sizeof(kl_##name##_t)); \ |
| 92 | + kl_##name##_t *kl = (kl_##name##_t *)calloc(1, sizeof(kl_##name##_t)); \ |
| 93 | + if (!kl) return 0; \ |
91 | 94 | kl->mp = kmp_init(name); \ |
| 95 | + if (!kl->mp) { free(kl); return 0; } \ |
92 | 96 | kl->head = kl->tail = kmp_alloc(name, kl->mp); \ |
| 97 | + if (!kl->head) { free(kl->mp); free(kl); return 0; } \ |
93 | 98 | kl->head->next = 0; \ |
94 | 99 | return kl; \ |
95 | 100 | } \ |
|
103 | 108 | } \ |
104 | 109 | SCOPE kltype_t *kl_pushp_##name(kl_##name##_t *kl) { \ |
105 | 110 | kl1_##name *q, *p = kmp_alloc(name, kl->mp); \ |
| 111 | + if (!p) return 0; \ |
106 | 112 | q = kl->tail; p->next = 0; kl->tail->next = p; kl->tail = p; \ |
107 | 113 | ++kl->size; \ |
108 | 114 | return &q->data; \ |
|
118 | 124 | } \ |
119 | 125 | static inline kltype_t *kl_unshiftp_##name(kl_##name##_t *kl) { \ |
120 | 126 | kl1_##name *q, *p = kmp_alloc(name, kl->mp); \ |
| 127 | + if (!p) return 0; \ |
121 | 128 | q = kl->head; p->next = q; kl->head = p; \ |
122 | 129 | ++kl->size; \ |
123 | 130 | return &p->data; \ |
|
138 | 145 | kl1_##name *c) { \ |
139 | 146 | if (c->next == 0) return 0; \ |
140 | 147 | kl1_##name *p = kmp_alloc(name, kl->mp); \ |
| 148 | + if (!p) return 0; \ |
141 | 149 | p->next = c->next; c->next = p; \ |
142 | 150 | ++kl->size; \ |
143 | 151 | return &p->data; \ |
|
0 commit comments