rem: free(args);
add: wfree(args);
context: readMenuPipe(WScreen *scr, char **file_name) {    WMenu *menu=NULL;    FILE *file = NULL;    char linebuf[MAXLINE];    char title[MAXLINE];    char command[MAXLINE];    char params[MAXLINE];    char shortcut[MAXLINE];    char *line;    char * filename;    char flat_file[MAXLINE];    int i;#ifdef USECPP    char *args;    int cpp = 0;#endif    flat_file[0] = '\0';    for(i = 0 ; file_name[i] != NULL ; i++) {	strcat(flat_file, file_name[i]);	strcat(flat_file, " ");    }    filename = flat_file+1;#ifdef USECPP    if (!wPreferences.flags.nocpp) {       args = MakeCPPArgs(filename);       if (!args) {           wwarning(_("could not make arguments for menu file preprocessor"));       } else {           sprintf(command, "%s | %s %s", filename, CPP_PATH, args);           free(args);           file = popen(command, "r");           if (!file) {               wsyserror(_("%s:could not open/preprocess menu file"), filename);           } else {               cpp = 1;           }       }    }#endif /* USECPP */    if (!file) {       file = popen(filename, "r");       if (!file) {           wsyserror(_("%s:could not open menu file"), filename);           return NULL;       }    }    while (!IsEof(file)) {	if (!fgets(linebuf, MAXLINE, file))	    break;	line = cropline(linebuf);	if (line[0]==0 || line[0]=='#' || (line[0]=='/' && line[1]=='/')) 	    continue;	separateline(line, title, command, params, shortcut);	if (!command[0]) {	    wwarning(_("%s:missing command in menu config: %s"), file_name,		     line);	    break;	}	if (strcasecmp(command, "MENU")==0) {	    menu = wMenuCreate(scr, title, True);	    menu->on_destroy = removeShortcutsForMenu;	    if (!parseCascade(scr, menu, file, filename)) {		wMenuDestroy(menu, True);	    }	    break;	} else {	    wwarning(_("%s:no title given for the root menu"), filename);	    break;	}    }    pclose(file);    return menu;}