void free_links(t_link *link) { if (link) { if (link->next) free_links(link->next); free(link); } }
void free_list(t_lem *list) { if (list) { if (list->next) free_list(list->next); free_links(list->link); free(list->name); free(list); } }
static void ttx_window_finalize (GObject *obj) { TTXWindow *self; self = TTX_WINDOW(obj); free_links (self); reset_img_file (self, NULL); if (self->priv->settings) g_object_unref (self->priv->settings); g_free (self->priv->prov_id); G_OBJECT_CLASS(parent_class)->finalize (G_OBJECT(self)); }
// this function should only be called right after a campaign is loaded. Calling it a second // time without having loaded a campaign again will result in undefined behavior. void campaign_tree_view::construct_tree() { int i; free_links(); // initialize mission link counts for (i=0; i<Campaign.num_missions; i++) { Elements[i].from_links = Elements[i].to_links = 0; } // analyze branching sexps and build links from them. int link_idx = 0; for (i=0; i<Campaign.num_missions; i++) { // do main campaign path stuff_link_with_formula(&link_idx, Campaign.missions[i].formula, i); // do mission loop path if ( Campaign.missions[i].has_mission_loop ) { stuff_link_with_formula(&link_idx, Campaign.missions[i].mission_loop_formula, i); Links[link_idx-1].mission_loop_txt = Campaign.missions[i].mission_loop_desc; Links[link_idx-1].mission_loop_brief_anim = Campaign.missions[i].mission_loop_brief_anim; Links[link_idx-1].mission_loop_brief_sound = Campaign.missions[i].mission_loop_brief_sound; Links[link_idx-1].mission_loop = 1; } } for (i=0; i<Campaign.num_missions; i++) { Sorted[i] = i; } Total_links = link_idx; if (Campaign.realign_required) { realign_tree(); Campaign.realign_required = 0; } }
static void add_links (TTXWindow *self, GSList *links) { free_links (self); self->priv->links = links; }