diff --git a/src/libfileis.c b/src/libfileis.c new file mode 100644 index 0000000..51caa88 --- /dev/null +++ b/src/libfileis.c @@ -0,0 +1,27 @@ +#include /* NULL */ +#include /* lstat(3), stat struct, S_ISBLK, S_ISCHR, S_ISDIR, + * S_ISFIFO, S_ISGID, S_ISREG, S_ISLNK, S_ISSOCK, + * S_ISUID, S_ISVTX */ +static char *ofn = NULL; +static struct stat s; + +int +fileis_exists(char *fn){ + if (fn == NULL) { return ofn != NULL; } + if (lstat(fn, &s) == -1) { return 0; } + ofn = fn; return 1; +} + +int fileis_block(char *fn) { return fileis_exists(fn) && S_ISBLK(s.st_mode); } +int fileis_char(char *fn) { return fileis_exists(fn) && S_ISCHR(s.st_mode); } +int fileis_dir(char *fn) { return fileis_exists(fn) && S_ISDIR(s.st_mode); } +/* fileis_exec(char *fn) { return fileis_exists(fn) && } */ +int fileis_fifo(char *fn) { return fileis_exists(fn) && S_ISFIFO(s.st_mode); } +int fileis_setgid(char *fn) { return fileis_exists(fn) && (s.st_mode & S_ISGID); } +int fileis_link(char *fn) { return fileis_exists(fn) && S_ISLNK(s.st_mode); } +/* fileis_read(char *fn) { return fileis_exists(fn) && } */ +int fileis_regular(char *fn){ return fileis_exists(fn) && S_ISREG(s.st_mode); } +int fileis_socket(char *fn) { return fileis_exists(fn) && S_ISSOCK(s.st_mode); } +int fileis_setuid(char *fn) { return fileis_exists(fn) && (s.st_mode & S_ISUID); } +int fileis_vtx(char *fn) { return fileis_exists(fn) && (s.st_mode & S_ISVTX); } +/* fileis_write(char *fn) { return fileis_exists(fn) && } */ diff --git a/src/libfileis.h b/src/libfileis.h new file mode 100644 index 0000000..91426f9 --- /dev/null +++ b/src/libfileis.h @@ -0,0 +1,14 @@ +int fileis_block (char *fn); +int fileis_char (char *fn); +int fileis_dir (char *fn); +/* fileis_exec (char *fn); */ +int fileis_exists (char *fn); +int fileis_fifo (char *fn); +int fileis_setgid (char *fn); +int fileis_link (char *fn); +/* fileis_read (char *fn); */ +int fileis_regular(char *fn); +int fileis_socket (char *fn); +int fileis_setuid (char *fn); +int fileis_vtx (char *fn); +/* fileis_write (char *fn); */