rem: free(*(char**)addr);
add: wfree(*(char**)addr);
context: getPathList(WScreen *scr, WDefaultEntry *entry, proplist_t value, void *addr,	    void **ret){    static char *data;    int i, count, len;    char *ptr;    proplist_t d;    int changed=0;again:    if (!PLIsArray(value)) {	wwarning(_("Wrong option format for key \"%s\". Should be %s."),                 entry->key, "an array of paths");        if (changed==0) {            value = entry->plvalue;            changed = 1;            wwarning(_("using default \"%s\" instead"), entry->default_value);            goto again;        }	return False;     }    i = 0;    count = PLGetNumberOfElements(value);    if (count < 1) {        if (changed==0) {            value = entry->plvalue;            changed = 1;            wwarning(_("using default \"%s\" instead"), entry->default_value);            goto again;        }        return False;    }    len = 0;    for (i=0; i<count; i++) {	d = PLGetArrayElement(value, i);	if (!d || !PLIsString(d)) {	    count = i;	    break;	}	len += strlen(PLGetString(d))+1;    }    ptr = data = wmalloc(len+1);    for (i=0; i<count; i++) {	d = PLGetArrayElement(value, i);	if (!d || !PLIsString(d)) {	    break;	}	strcpy(ptr, PLGetString(d));	ptr += strlen(PLGetString(d));	*ptr = ':';	ptr++;    }    ptr--; *(ptr--) = 0;    if (*(char**)addr!=NULL) {	free(*(char**)addr);    }    *(char**)addr = data;    return True;}