int pathman_test_teardown(void * object, void ** objectref) { struct pathman_test * test = object; pathman_clear(test->pman); for (unsigned k = 0; k < test->num; k++) { free(test->strv[k]); } free(test->strv); free(test->flag); free(test); bt_chkerr(err_pop()); *objectref = NULL; return BT_RESULT_OK; }
int db_init ( FF_STD_ARGS_PTR std_args, DATA_BIN_HANDLE dbin_h, int (*error_cb)(int) ) { FORMAT_DATA_LIST format_data_list = NULL; int error = 0; int num_errors = 0; assert(dbin_h); if (!dbin_h) return(err_push(ERR_API, "NULL DATA_BIN_HANDLE in %s", ROUTINE_NAME)); if (!*dbin_h) { *dbin_h = db_make(std_args->input_file ? std_args->input_file : "Application Program"); if (!*dbin_h) return(err_push(ERR_MEM_LACK, "Standard Data Bin")); } /* Now set the formats and the auxillary files */ if (db_set(*dbin_h, DBSET_READ_EQV, std_args->input_file)) { err_push(ERR_SET_DBIN, "making name table for %s", std_args->input_file); return(DBSET_READ_EQV); } if (db_set(*dbin_h, DBSET_INPUT_FORMATS, std_args->input_file, std_args->output_file, std_args->input_format_file, std_args->input_format_buffer, std_args->input_format_title, &format_data_list ) ) { if (format_data_list) dll_free_holdings(format_data_list); err_push(ERR_SET_DBIN, "setting an input format for %s", std_args->input_file); return(DBSET_INPUT_FORMATS); } num_errors = err_count(); if (db_set(*dbin_h, DBSET_OUTPUT_FORMATS, std_args->input_file, std_args->output_file, std_args->output_format_file, std_args->output_format_buffer, std_args->output_format_title, &format_data_list ) ) { if (!error_cb || (*error_cb)(DBSET_OUTPUT_FORMATS)) { dll_free_holdings(format_data_list); err_push(ERR_SET_DBIN, "setting an output format for %s", std_args->input_file); return(DBSET_OUTPUT_FORMATS); } else { while (err_count() > num_errors) err_pop(); } } error = db_set(*dbin_h, DBSET_CREATE_CONDUITS, std_args, format_data_list); dll_free_holdings(format_data_list); if (error) { err_push(ERR_SET_DBIN, "creating array information for %s", std_args->input_file); return(DBSET_CREATE_CONDUITS); } /* Check for variable file */ if (std_args->var_file) { FORMAT_DATA_PTR output_fd = fd_get_data(*dbin_h, FFF_OUTPUT); if (IS_ARRAY(output_fd->format)) { err_push(ERR_SET_DBIN, "Cannot use variable file with arrays"); return(DBSET_VARIABLE_RESTRICTION); } if (db_set(*dbin_h, DBSET_VARIABLE_RESTRICTION, std_args->var_file, output_fd->format)) { err_push(ERR_SET_DBIN, "Unable to use variable file \"%s\"", std_args->var_file); return(DBSET_VARIABLE_RESTRICTION); } } if (db_set(*dbin_h, DBSET_EQUATION_VARIABLES)) { err_push(ERR_SET_DBIN, "setting equation variables for %s", std_args->input_file); return(DBSET_EQUATION_VARIABLES); } if (db_set(*dbin_h, DBSET_HEADER_FILE_NAMES, FFF_INPUT, std_args->input_file)) { err_push(ERR_SET_DBIN, "Determining input header file names for %s", std_args->input_file); return(DBSET_HEADER_FILE_NAMES); } num_errors = err_count(); if (db_set(*dbin_h, DBSET_HEADER_FILE_NAMES, FFF_OUTPUT, std_args->output_file)) { if (!error_cb || (*error_cb)(DBSET_OUTPUT_FORMATS)) { err_push(ERR_SET_DBIN, "Determining output header file names for %s", std_args->output_file); return(DBSET_HEADER_FILE_NAMES); } else { while (err_count() > num_errors) err_pop(); } } if (db_set(*dbin_h, DBSET_BYTE_ORDER, FFF_INPUT | FFF_HEADER)) { err_push(ERR_SET_DBIN, "Defining input data byte order"); return(DBSET_BYTE_ORDER); } if (db_set(*dbin_h, DBSET_HEADERS)) { err_push(ERR_SET_DBIN, "getting header file for %s", std_args->input_file); return(DBSET_HEADERS); } if (db_set(*dbin_h, DBSET_USER_UPDATE_FORMATS)) { err_push(ERR_SET_DBIN, "user update of a format for %s", std_args->input_file); return(DBSET_USER_UPDATE_FORMATS); } if (db_set(*dbin_h, DBSET_BYTE_ORDER, FFF_INPUT)) { err_push(ERR_SET_DBIN, "Defining input data byte order"); return(DBSET_BYTE_ORDER); } num_errors = err_count(); if (db_set(*dbin_h, DBSET_BYTE_ORDER, FFF_OUTPUT)) { if (!error_cb || (*error_cb)(DBSET_OUTPUT_FORMATS)) { err_push(ERR_SET_DBIN, "Defining output data byte order"); return(DBSET_BYTE_ORDER); } else { while (err_count() > num_errors) err_pop(); } } if (std_args->cache_size == 0) std_args->cache_size = DEFAULT_CACHE_SIZE; /* Check for query file */ if (std_args->query_file) { if (db_set(*dbin_h, DBSET_QUERY_RESTRICTION, std_args->query_file)) { err_push(ERR_GEN_QUERY, "setting query using %s", std_args->query_file); return(DBSET_QUERY_RESTRICTION); } } if (db_set(*dbin_h, DBSET_INIT_CONDUITS, FFF_DATA, std_args->records_to_read)) { err_push(ERR_SET_DBIN, "creating array information for %s", std_args->input_file); return(DBSET_INIT_CONDUITS); } if (error) return(error); error = merge_redundant_conduits((*dbin_h)->array_conduit_list); if (error) return(error); if (fd_get_data(*dbin_h, FFF_INPUT) && db_set(*dbin_h, DBSET_CACHE_SIZE, std_args->cache_size) ) { return(err_push(ERR_MEM_LACK, "setting data cache for %s", std_args->input_file)); } if (db_set(*dbin_h, DBSET_FORMAT_MAPPINGS)) { err_push(ERR_SET_DBIN, "mapping input to output formats for %s", std_args->input_file); return(DBSET_FORMAT_MAPPINGS); } error = make_unique_format_titles(*dbin_h); if (error) return ERR_MEM_LACK; num_errors = err_count(); if (db_set(*dbin_h, DBSET_VAR_MINMAX)) { if (!error_cb || (*error_cb)(DBSET_OUTPUT_FORMATS)) { err_push(ERR_SET_DBIN, "setting variable minimums and maximums for %s", std_args->input_file); return(DBSET_VAR_MINMAX); } else { while (err_count() > num_errors) err_pop(); } } error = check_file_access(*dbin_h); if (error) return error; return(error); }