--- test.1 | 4 +++- test.c | 29 +++++++++++++++++++++++++++++ 2 files changed, 32 insertions(+), 1 deletion(-) diff --git a/test.1 b/test.1 index 539016a..b1d2121 100644 --- a/test.1 +++ b/test.1 _AT_@ -22,13 +22,15 @@ exists and has (any size .Op Fl e | non-zero size .Op Fl s ) . -.It ( Fl f | Fl d | Fl p | Fl hL | Fl S | Fl b | Fl c ) Ar file +.It ( Fl f | Fl d | Fl E | Fl p | Fl hL | Fl S | Fl b | Fl c ) Ar file .Ar file exists and is a (regular file .Op Fl f | directory .Op Fl d +| empty directory +.Op Fl E | named pipe .Op Fl p | symbolic link diff --git a/test.c b/test.c index 3fe12c3..7e27c10 100644 --- a/test.c +++ b/test.c _AT_@ -2,6 +2,8 @@ #include <sys/stat.h> #include <ctype.h> +#include <dirent.h> +#include <errno.h> #include <string.h> #include <unistd.h> _AT_@ -112,6 +114,32 @@ binary_nt(char *s1, char *s2) return mtimecmp(&buf1, &buf2) > 0; } +static int +unary_E(char *s) +{ + struct stat buf; + DIR *dir; + struct dirent *file; + + if (stat(s, &buf) || !S_ISDIR(buf.st_mode)) + return 0; + + if (!(dir = opendir(s))) + enprintf(2, "opendir %s:", s); + while (errno = 0, (file = readdir(dir))) { + if (strcmp(file->d_name, ".") && strcmp(file->d_name, "..")) { + closedir(dir); + return 0; + } + } + if (errno) + enprintf(2, "readdir %s:", s); + closedir(dir); + return 1; + + +} + struct test { char *name; int (*func)(); _AT_@ -121,6 +149,7 @@ static struct test unary[] = { { "-b", unary_b }, { "-c", unary_c }, { "-d", unary_d }, + { "-E", unary_E }, { "-e", unary_e }, { "-f", unary_f }, { "-g", unary_g }, -- 2.7.4Received on Mon Mar 28 2016 - 23:50:42 CEST
This archive was generated by hypermail 2.3.0 : Tue Mar 29 2016 - 00:00:52 CEST