void linkage_delete(Linkage linkage) { int i, j; Sublinkage *s; for (i=0; i<linkage->num_words; ++i) { exfree(linkage->word[i], strlen(linkage->word[i])+1); } exfree(linkage->word, sizeof(char *)*linkage->num_words); for (i=0; i<linkage->num_sublinkages; ++i) { s = &(linkage->sublinkage[i]); for (j=0; j<s->num_links; ++j) { exfree_link(s->link[j]); } exfree(s->link, sizeof(Link)*s->num_links); if (s->pp_info != NULL) { for (j=0; j<s->num_links; ++j) { exfree_pp_info(s->pp_info[j]); } exfree(s->pp_info, sizeof(PP_info)*s->num_links); post_process_free_data(&s->pp_data); } if (s->violation != NULL) { exfree(s->violation, sizeof(char)*(strlen(s->violation)+1)); } } exfree(linkage->sublinkage, sizeof(Sublinkage)*linkage->num_sublinkages); exfree(linkage, sizeof(struct Linkage_s)); }
static void free_sublinkage(Sublinkage *s) { int i; for (i=0; i<MAX_LINKS; i++) { if (s->link[i]!=NULL) exfree_link(s->link[i]); } xfree(s->link, MAX_LINKS*sizeof(Link)); xfree(s, sizeof(Sublinkage)); }
static void copy_full_link(Link *dest, Link src) { if (*dest != NULL) exfree_link(*dest); *dest = excopy_link(src); }