Browse Source

Ensure the allocated rules are properly cleaned up in compile_dictrules.

master
Reece H. Dunn 7 years ago
parent
commit
a08d2c7bfb
1 changed files with 12 additions and 1 deletions
  1. 12
    1
      src/libespeak-ng/compiledict.c

+ 12
- 1
src/libespeak-ng/compiledict.c View File

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;
} }



Loading…
Cancel
Save