XFreeStringList(name_list);
XFreeStringList(name_list);  oc->core.base_name_list = NULL;
parse_fontname(oc)    XOC oc;{    XOCGenericPart *gen = XOC_GENERIC(oc);    FontSet font_set;    char *base_name, **name_list;    int font_set_num = 0;    int found_num = 0;    int count = 0;    int	ret;    int i;    name_list = _XParseBaseFontNameList(oc->core.base_name_list, &count);    if (name_list == NULL)	return -1;    font_set = gen->font_set;    font_set_num = gen->font_set_num;    for( ; font_set_num-- > 0 ; font_set++) {	if(font_set->font_name)	    continue;	if(font_set->font_data_count > 0) {	    ret = parse_fontdata(oc, font_set->font_data,				 font_set->font_data_count,				 name_list, count, C_PRIMARY);	    if(ret == -1) {		goto err;	    } else if(ret == True) {		font_set->font_name = (char *)Xmalloc			(strlen(font_set->font_data->xlfd_name) + 1);		if(font_set->font_name == (char *) NULL)		    goto err;		strcpy(font_set->font_name, font_set->font_data->xlfd_name);		font_set->side = font_set->font_data->side;		if(parse_vw(oc, font_set, name_list, count) == -1)		    goto err;		found_num++;	    /* The substitute font is serched, when the primary fonts */	    /* is not found. */	    } else {		/* The primary information is free from FontSet structure */		font_set->font_data_count = 0;		if(font_set->font_data) {		    Xfree(font_set->font_data);		    font_set->font_data = (FontData) NULL;		}		/* A vrotate member is replaced to substitute information */		/* from primary information. */		font_set->vrotate_num = 0;		if(font_set->vrotate) {		    Xfree(font_set->vrotate);		    font_set->vrotate = (VRotate) NULL;		}		ret = parse_fontdata(oc, font_set->substitute,				     font_set->substitute_num,				     name_list, count, C_SUBSTITUTE);		if(ret == -1) {		    goto err;		} else if(ret == True) {		    for(i=0;i<font_set->substitute_num;i++){			if(font_set->substitute[i].xlfd_name != NULL){				break;			}		    }		    font_set->font_name = (char *)Xmalloc				(strlen(font_set->substitute[i].xlfd_name) + 1);		    if(font_set->font_name == (char *) NULL)			goto err;		    strcpy(font_set->font_name,font_set->substitute[i].xlfd_name);		    font_set->side = font_set->substitute[i].side;		    if(parse_vw(oc, font_set, name_list, count) == -1)			goto err;		    found_num++;		}	    }	} else if(font_set->substitute_num > 0) {	    ret = parse_fontdata(oc, font_set->substitute,				 font_set->substitute_num,				 name_list, count, C_SUBSTITUTE);	    if(ret == -1) {		goto err;	    } else if(ret == True) {		for(i=0;i<font_set->substitute_num;i++){		    if(font_set->substitute[i].xlfd_name != NULL){			break;		    }		}		font_set->font_name = (char *)Xmalloc		    	(strlen(font_set->substitute[i].xlfd_name) + 1);		if(font_set->font_name == (char *) NULL)		    goto err;		strcpy(font_set->font_name,font_set->substitute[i].xlfd_name);		font_set->side = font_set->substitute[i].side;		if(parse_vw(oc, font_set, name_list, count) == -1)		    goto err;		found_num++;	    }	}    }    base_name = (char *) Xmalloc(strlen(oc->core.base_name_list) + 1);    if (base_name == NULL)	goto err;    strcpy(base_name, oc->core.base_name_list);    oc->core.base_name_list = base_name;    XFreeStringList(name_list);		    return found_num;err:    XFreeStringList(name_list);		    return -1;}