rem: Bool statted = False;
context: constructMenu(WMenu *menu, WMenuEntry *entry){    WMenu *submenu;    struct stat stat_buf;    char **path;    char *cmd;    char *lpath = NULL;    int i, first=-1;    time_t last=0;        separateCommand((char*)entry->clientdata, &path, &cmd);    if (!path || *path==NULL || **path==0) {	wwarning(_("invalid OPEN_MENU specification: %s"),		 (char*)entry->clientdata);	return;    }        if (path[0][0]=='|') {        /* pipe menu */	        if (!menu->cascades[entry->cascade] ||             menu->cascades[entry->cascade]->timestamp == 0) {             /* parse pipe */	    submenu = readMenuPipe(menu->frame->screen_ptr, path);            /* there's no automatic reloading */            if(submenu != NULL)                submenu->timestamp = 1;        } else {             submenu = NULL;         }      } else {        i=0;        while(path[i] != NULL) {	    char *tmp;	    Bool statted = False;	    if (strcmp(path[i], "-noext")==0) {		i++;		continue;	    }	    	    tmp = wexpandpath(path[i]);	    free(path[i]);	    path[i] = tmp;            if (Locale) {                lpath = wmalloc(strlen(path[i])+32);                strcpy(lpath, path[i]);                strcat(lpath, ".");                strcat(lpath, Locale);                if (stat(lpath, &stat_buf)<0) {                    int i;                    i = strlen(Locale);                    if (i>2) {                        lpath[strlen(lpath)-(i-2)]=0;                        if (stat(lpath, &stat_buf)==0) {			    statted = True;                            free(path[i]);                            path[i] = lpath;                            lpath = NULL;                        }                    }                } else {		    statted = True;                    free(path[i]);                    path[i] = lpath;                    lpath = NULL;                }            }            if (lpath) {                free(lpath);                lpath = NULL;            }            if (statted || stat(path[i], &stat_buf)==0) {                if (last < stat_buf.st_mtime)                    last = stat_buf.st_mtime;                if (first<0)                    first=i;            } else {                wsyserror(_("%s:could not stat menu"), path[i]);                /*goto finish;*/            }            i++;        }        if (first < 0) {            wsyserror(_("%s:could not stat menu:%s"), "OPEN_MENU",                      (char*)entry->clientdata);            goto finish;        }        stat(path[first], &stat_buf);	if (!menu->cascades[entry->cascade]	    || menu->cascades[entry->cascade]->timestamp < last) {	    if (S_ISDIR(stat_buf.st_mode)) {		/* menu directory */		submenu = readMenuDirectory(menu->frame->screen_ptr,                                            entry->text, path, cmd);		if (submenu)		    submenu->timestamp = last;	    } else if (S_ISREG(stat_buf.st_mode)) {		/* menu file */		if (cmd || path[1])		    wwarning(_("too many parameters in OPEN_MENU: %s"), 			     (char*)entry->clientdata);		submenu = readMenuFile(menu->frame->screen_ptr, path[first]);		if (submenu)		    submenu->timestamp = stat_buf.st_mtime;	    } else {		submenu = NULL;	    }	} else {	    submenu = NULL;	}    }    if (submenu) {	wMenuEntryRemoveCascade(menu, entry);	wMenuEntrySetCascade(menu, entry, submenu);    }finish:    i = 0;    while (path[i]!=NULL)        free(path[i++]);    free(path);    if (cmd)	free(cmd);}