static void save_pair_data(tg_pair_t *pair) { HacheIter *iter; HacheItem *hi; pair_data *save_pair; string_alloc_t *str_pool; int i = 0, i_max; pair_queue_t *que; if (NULL == (save_pair = (pair_data *)malloc(sizeof(pair_data) * pair->write_size))) { fprintf(stderr, "Can't allocate memory in save_pair_data\n"); return; } str_pool = string_pool_create(1024 * 1024); if (NULL == str_pool) { fprintf(stderr, "Can't allocate string pool memory in save_pair_data\n"); return; } iter = HacheTableIterCreate(); while ((hi = HacheTableIterNext(pair->phache, iter))) { save_pair[i].tname = string_dup(str_pool, hi->key); save_pair[i].data = pair_to_pooled_string(str_pool, (pair_loc_t *)hi->data.p); i++; } i_max = i; HacheTableIterDestroy(iter); qsort(save_pair, pair->count, sizeof(pair_data), cmp_pair); que = add_pair_queue(pair); if (NULL == que) { fprintf(stderr, "Can't create new pair queue\n"); return; } for (i = 0; i < i_max; i++) { fprintf(que->fp, "%s %s\n", save_pair[i].tname, save_pair[i].data); } if (HacheTableEmpty(pair->phache, 1)) { // TEST TEST TEST need to put in proper fail fprintf(stderr, "save_pair_data failed on HacheTableEmpty\n"); } string_pool_destroy(str_pool); free(save_pair); fflush(que->fp); }
void baf_block_destroy(baf_block *b) { if (!b) return; if (b->h) { HacheIter *iter = HacheTableIterCreate(); HacheItem *hi; while (hi = HacheTableIterNext(b->h, iter)) { line_t *l = hi->data.p; if (l) free_line(l); } HacheTableIterDestroy(iter); HacheTableDestroy(b->h, 0); } free(b); }