regmatch_t matches[2] = {{0},{0}};
int result = regexec(®ex, str, nelem(matches), matches, 0);
- if ((result == 0) && (matches[1].rm_so > 0))
+ if (result >= 0 && matches[1].rm_so > 0)
{
char* var = strndup(str+matches[1].rm_so, matches[1].rm_eo-matches[1].rm_so);
char* val = getvar(var);
bool ret = false;
struct stat st = {0};
char* path = eval(var);
- if (!stat(path, &st) && !errno && S_ISDIR(st.st_mode))
+ bool exists = (stat(eval(var), &st) >= 0);
+ if (exists && S_ISDIR(st.st_mode))
{
- setenv("dir", var, 1);
+ setenv("dir", path, 1);
ret = true;
}
return ret;
bool ret = false;
struct stat st = {0};
char* path = eval(var);
- if (!stat(eval(var), &st) && !errno && !S_ISDIR(st.st_mode))
+ bool exists = (stat(eval(var), &st) >= 0);
+ if (exists && !S_ISDIR(st.st_mode))
{
setenv("file", path, 1);
ret = true;
{
if (pid == 0)
{
- runcmd(cmd);
+ runcmd(cmd);
}
else
{
- waitpid(pid, &status, 0);
+ waitpid(pid, &status, 0);
ret = (status == 0);
- }
+ }
}
return ret;
}