zfree.c (622B)
1 /* See LICENSE file for copyright and license details. */ 2 #include "internals.h" 3 4 5 void 6 zfree(z_t a) 7 { 8 size_t i, x, j; 9 zahl_char_t **new; 10 11 if (unlikely(!a->chars)) 12 return; 13 14 i = libzahl_msb_nz_zu(a->alloced); 15 j = libzahl_pool_n[i]++; 16 17 if (j == libzahl_pool_alloc[i]) { 18 x = j ? ((j * 3) >> 1) : 128; 19 new = realloc(libzahl_pool[i], x * sizeof(zahl_char_t *)); 20 if (check(!new)) { 21 free(a->chars); 22 free(libzahl_pool[i]); 23 libzahl_pool_n[i] = 0; 24 libzahl_pool[i] = 0; 25 libzahl_pool_alloc[i] = 0; 26 return; 27 } 28 libzahl_pool[i] = new; 29 libzahl_pool_alloc[i] = x; 30 } 31 32 libzahl_pool[i][j] = a->chars; 33 }