static void init_mtbl(void) { struct mtbl_merger_options *mopt; struct mtbl_writer_options *wopt; mopt = mtbl_merger_options_init(); wopt = mtbl_writer_options_init(); mtbl_merger_options_set_merge_func(mopt, merge_func, user_clos); mtbl_writer_options_set_compression(wopt, opt_compression_type); mtbl_writer_options_set_block_size(wopt, opt_block_size); merger = mtbl_merger_init(mopt); assert(merger != NULL); fprintf(stderr, "%s: opening output file %s\n", program_name, mtbl_output_fname); writer = mtbl_writer_init(mtbl_output_fname, wopt); if (writer == NULL) { fprintf(stderr, "Error: mtbl_writer_init() failed.\n\n"); usage(); } mtbl_merger_options_destroy(&mopt); mtbl_writer_options_destroy(&wopt); }
struct mtbl_fileset * mtbl_fileset_init(const char *fname, const struct mtbl_fileset_options *opt) { assert(opt != NULL); assert(opt->merge != NULL); struct mtbl_fileset *f = my_calloc(1, sizeof(*f)); f->reload_interval = opt->reload_interval; f->mopt = mtbl_merger_options_init(); mtbl_merger_options_set_merge_func(f->mopt, opt->merge, opt->merge_clos); f->merger = mtbl_merger_init(f->mopt); f->fs = my_fileset_init(fname, fs_load, fs_unload, f); assert(f->fs != NULL); f->source = mtbl_source_init(fileset_source_iter, fileset_source_get, fileset_source_get_prefix, fileset_source_get_range, NULL, f); mtbl_fileset_reload(f); return (f); }
int main(int argc, char ** argv) { FILE *tmp = tmpfile(); assert(tmp != NULL); init_mtbl(dup(fileno(tmp))); struct mtbl_reader_options *reader_options = mtbl_reader_options_init(); assert(reader_options != NULL); struct mtbl_reader *reader = mtbl_reader_init_fd(dup(fileno(tmp)), reader_options); assert(reader != NULL); const struct mtbl_source *source = mtbl_reader_source(reader); assert(source != NULL); struct mtbl_iter *iter = mtbl_source_iter(source); assert(iter != NULL); test_iter(iter); fprintf(stderr, NAME ": PASS: iter run successful\n"); mtbl_iter_destroy(&iter); struct mtbl_merger_options *merger_options = mtbl_merger_options_init(); assert(merger_options != NULL); mtbl_merger_options_set_merge_func(merger_options, my_merge_func, NULL); struct mtbl_merger *merger = mtbl_merger_init(merger_options); assert(merger != NULL); mtbl_merger_add_source(merger, source); const struct mtbl_source *merger_source = mtbl_merger_source(merger); assert(merger_source != NULL); struct mtbl_iter *merger_iter = mtbl_source_iter(merger_source); assert(merger_iter != NULL); test_iter(merger_iter); fprintf(stderr, NAME ": PASS: merger run 1 successful\n"); mtbl_iter_destroy(&merger_iter); FILE *tmp2 = tmpfile(); assert(tmp != NULL); init_mtbl(dup(fileno(tmp2))); struct mtbl_reader *reader2 = mtbl_reader_init_fd(dup(fileno(tmp2)), reader_options); assert(reader2 != NULL); mtbl_merger_add_source(merger, mtbl_reader_source(reader2)); merger_iter = mtbl_source_iter(merger_source); assert(merger_iter != NULL); test_iter(merger_iter); fprintf(stderr, NAME ": PASS: merger run 2 successful\n"); mtbl_iter_destroy(&merger_iter); mtbl_merger_destroy(&merger); mtbl_merger_options_destroy(&merger_options); mtbl_reader_destroy(&reader); mtbl_reader_destroy(&reader2); mtbl_reader_options_destroy(&reader_options); fclose(tmp); fclose(tmp2); }