libifupdown: add utility function to determine if a path is executable

This commit is contained in:
Ariadne Conill 2020-07-25 01:58:20 -06:00
parent b35d985ea4
commit eb8f1938dc
2 changed files with 16 additions and 0 deletions

View file

@ -20,6 +20,7 @@
#include <stdlib.h> #include <stdlib.h>
#include <string.h> #include <string.h>
#include <spawn.h> #include <spawn.h>
#include <sys/stat.h>
#include <sys/types.h> #include <sys/types.h>
#include <sys/wait.h> #include <sys/wait.h>
#include <unistd.h> #include <unistd.h>
@ -58,3 +59,17 @@ lif_execute_fmt(const struct lif_execute_opts *opts, char *const envp[], const c
return WIFEXITED(status) && WEXITSTATUS(status) == 0; return WIFEXITED(status) && WEXITSTATUS(status) == 0;
} }
bool
lif_file_is_executable(const char *path)
{
struct stat st;
if (stat(path, &st))
return false;
if (!S_ISREG(st.st_mode))
return false;
return access(path, X_OK);
}

View file

@ -25,5 +25,6 @@ struct lif_execute_opts {
}; };
extern bool lif_execute_fmt(const struct lif_execute_opts *opts, char *const envp[], const char *fmt, ...); extern bool lif_execute_fmt(const struct lif_execute_opts *opts, char *const envp[], const char *fmt, ...);
extern bool lif_file_is_executable(const char *path);
#endif #endif