void xf86freeScreenList(XF86ConfScreenPtr ptr) { XF86ConfScreenPtr prev; while (ptr) { TestFree(ptr->scrn_identifier); TestFree(ptr->scrn_monitor_str); TestFree(ptr->scrn_device_str); TestFree(ptr->scrn_comment); xf86optionListFree(ptr->scrn_option_lst); xf86freeAdaptorLinkList(ptr->scrn_adaptor_lst); xf86freeDisplayList(ptr->scrn_display_lst); prev = ptr; ptr = ptr->list.next; free(prev); } }
int xf86removeScreen(XF86ConfigPtr config, XF86ConfScreenPtr screen) { XF86ConfScreenPtr prev, scrn; XF86ConfLayoutPtr lay; if (config == NULL || screen == NULL) return (False); lay = config->conf_layout_lst; prev = scrn = config->conf_screen_lst; while (scrn != NULL) { if (scrn == screen) { if (scrn == prev) config->conf_screen_lst = (XF86ConfScreenPtr)(scrn->list.next); else prev->list.next = scrn->list.next; break; } prev = scrn; scrn = (XF86ConfScreenPtr)(scrn->list.next); } if (scrn == NULL) return (False); while (lay != NULL) { XF86ConfAdjacencyPtr pad, ad = NULL, adj = lay->lay_adjacency_lst; pad = adj; while (adj) { if (adj->adj_screen == screen) ad = adj; else { if (adj->adj_top != NULL && adj->adj_top == screen) { XtFree(adj->adj_top_str); adj->adj_top_str = NULL; adj->adj_top = NULL; } else if (adj->adj_bottom != NULL && adj->adj_bottom == screen) { XtFree(adj->adj_bottom_str); adj->adj_bottom_str = NULL; adj->adj_bottom = NULL; } else if (adj->adj_left != NULL && adj->adj_left == screen) { XtFree(adj->adj_left_str); adj->adj_left_str = NULL; adj->adj_left = NULL; } else if (adj->adj_right != NULL && adj->adj_right == screen) { XtFree(adj->adj_right_str); adj->adj_right_str = NULL; adj->adj_right = NULL; } else if (adj->adj_refscreen != NULL && strcasecmp(scrn->scrn_identifier, adj->adj_refscreen) == 0) { XtFree(adj->adj_refscreen); adj->adj_refscreen = NULL; adj->adj_where = CONF_ADJ_ABSOLUTE; adj->adj_x = adj->adj_y = 0; } } if (ad == NULL) pad = adj; adj = (XF86ConfAdjacencyPtr)(adj->list.next); } if (ad != NULL) { if (ad == lay->lay_adjacency_lst) lay->lay_adjacency_lst = (XF86ConfAdjacencyPtr)(ad->list.next); else pad->list.next = (XF86ConfAdjacencyPtr)(ad->list.next); XtFree(ad->adj_screen_str); XtFree(ad->adj_top_str); XtFree(ad->adj_bottom_str); XtFree(ad->adj_left_str); XtFree(ad->adj_right_str); XtFree(ad->adj_refscreen); XtFree((XtPointer)ad); } lay = (XF86ConfLayoutPtr)(lay->list.next); } xf86freeAdaptorLinkList(screen->scrn_adaptor_lst); xf86freeDisplayList(screen->scrn_display_lst); XtFree(screen->scrn_identifier); XtFree(screen->scrn_monitor_str); XtFree(screen->scrn_device_str); xf86optionListFree(screen->scrn_option_lst); XtFree((XtPointer)screen); return (True); }