add: enumer = WMEnumerateHashTable(families);  while ((bag = WMNextHashEnumeratorItem(&enumer))) { int i; Family *fam; char buffer[256]; WMListItem *item;  for (i = 0; i < WMGetBagItemCount(bag); i++) { fam = WMGetFromBag(bag, i);  strcpy(buffer, fam->name);  if (fam->showFoundry) { strcat(buffer, " "); strcat(buffer, fam->foundry); strcat(buffer, " "); } if (fam->showRegistry) { strcat(buffer, " ("); strcat(buffer, fam->registry); strcat(buffer, "-"); strcat(buffer, fam->encoding); strcat(buffer, ")"); } item = WMAddSortedListItem(panel->famLs, buffer);  item->clientData = fam; } WMFreeBag(bag); }  WMFreeHashTable(families);
context: listFamilies(WMScreen *scr, WMFontPanel *panel){    char **fontList;    int count;    int i;    WMHashTable *families = WMCreateHashTable(WMStringHashCallbacks);    char fields[NUM_FIELDS][256];    fontList = XListFonts(scr->display, ALL_FONTS_MASK, MAX_FONTS_TO_RETRIEVE,                           &count);    if (!fontList) {	WMRunAlertPanel(scr, panel->win, "Error", 			"Could not retrieve font list", "OK", NULL, NULL);	return;    }    for (i = 0; i < count; i++) {	int fname_len;		if (!isXLFD(fontList[i], &fname_len)) {	    *fontList[i] = '\0';	    continue;	}	if (fname_len > 255) {	    wwarning("font name %s is longer than 256, which is invalid.",		     fontList[i]);	    *fontList[i] = '\0';	    continue;	}	if (!parseFont(fontList[i], fields)) {	    *fontList[i] = '\0';	    continue;	}	addFontToFamily(families, fields);    }}