| return 0; | return 0; | ||||
| } | } | ||||
| static void free_rules(char **rules, int n_rules) { | |||||
| for (int i = 0; i < n_rules; ++i) { | |||||
| free(*rules); | |||||
| *rules++ = NULL; | |||||
| } | |||||
| } | |||||
| static espeak_ng_STATUS compile_dictrules(FILE *f_in, FILE *f_out, char *fname_temp, espeak_ng_ERROR_CONTEXT *context) | static espeak_ng_STATUS compile_dictrules(FILE *f_in, FILE *f_out, char *fname_temp, espeak_ng_ERROR_CONTEXT *context) | ||||
| { | { | ||||
| char *prule; | char *prule; | ||||
| n_rgroups++; | n_rgroups++; | ||||
| count += n_rules; | count += n_rules; | ||||
| free_rules(rules, n_rules); | |||||
| } | } | ||||
| n_rules = 0; | n_rules = 0; | ||||
| err_n_rules = 0; | err_n_rules = 0; | ||||
| qsort((void *)rgroup, n_rgroups, sizeof(rgroup[0]), (int(__cdecl *)(const void *, const void *))rgroup_sorter); | qsort((void *)rgroup, n_rgroups, sizeof(rgroup[0]), (int(__cdecl *)(const void *, const void *))rgroup_sorter); | ||||
| if ((f_temp = fopen(fname_temp, "rb")) == NULL) | |||||
| if ((f_temp = fopen(fname_temp, "rb")) == NULL) { | |||||
| free_rules(rules, n_rules); | |||||
| return create_file_error_context(context, errno, fname_temp); | return create_file_error_context(context, errno, fname_temp); | ||||
| } | |||||
| prev_rgroup_name = "\n"; | prev_rgroup_name = "\n"; | ||||
| remove(fname_temp); | remove(fname_temp); | ||||
| fprintf(f_log, "\t%d rules, %d groups (%d)\n\n", count, n_rgroups, n_groups3); | fprintf(f_log, "\t%d rules, %d groups (%d)\n\n", count, n_rgroups, n_groups3); | ||||
| free_rules(rules, n_rules); | |||||
| return ENS_OK; | return ENS_OK; | ||||
| } | } | ||||