1
0
mirror of https://github.com/gryf/wmaker.git synced 2025-12-29 01:42:32 +01:00

wmmenugen: Add executable detection, make Wmconfig use it

Add fileInPath, which determines whether or not a given file exists
in $PATH (some heuristics apply).

Make the Wconfig parser use it.

Signed-off-by: Tamas TEVESZ <ice@extreme.hu>
This commit is contained in:
Tamas TEVESZ
2010-10-09 01:52:14 +02:00
committed by Carlos R. Mafra
parent 0451160f7d
commit 5377ec8fba
3 changed files with 50 additions and 2 deletions

View File

@@ -51,6 +51,7 @@ char *env_lang, *env_ctry, *env_enc, *env_mod;
*/
void parse_locale(const char *what, char **env_lang, char **env_ctry, char **env_enc, char **env_mod);
char *find_terminal_emulator(void);
Bool fileInPath(const char *file);
/* implemented parsers
*/

View File

@@ -124,3 +124,48 @@ out:
return;
}
/* determine whether (first token of) given file is in $PATH
*/
Bool fileInPath(const char *file)
{
char *p, *t;
static char *path = NULL;
if (!file || !*file)
return False;
/* if it's an absolute path spec, don't override the user.
* s/he might just know better.
*/
if (*file == '/')
return True;
/* if it has a directory separator at random places,
* we might know better.
*/
p = strchr(file, '/');
if (p)
return False;
if (!path) {
path = getenv("PATH");
if (!path)
return False;
}
p = wstrdup(file);
t = strpbrk(p, " \t");
if (t)
*t = '\0';
t = wfindfile(path, p);
wfree(p);
if (t) {
wfree(t);
return True;
}
return False;
}

View File

@@ -185,8 +185,10 @@ static Bool wmc_to_wm(WMConfigMenuEntry **wmc, WMMenuEntry **wm)
char *p;
size_t slen;
/* only Exec is mandatory */
if (!*wmc || !(*wmc)->Exec || !*(*wmc)->Exec)
/* only Exec is mandatory, and it's better exist in a known place */
if (!*wmc ||
!(*wmc)->Exec || !*(*wmc)->Exec ||
!fileInPath((*wmc)->Exec))
return False;
/* normalize Exec: wmconfig tends to stuck an ampersand