Hi Hiltjo,

On Fri, 06 Oct 2017, Hiltjo Posthuma <hil...@codemadness.org> wrote:
> Where is the patch?

Attached, example below. However I would rather first discuss what
should be the correct / expected behavior, before proposing a change.
Going fast forward without a clear direction still gets you nowhere.

> $ ./stest -d ~/.local
> $ ./stest -ad ~/.local
> /home/kamil/.local
> $ ./stest -d .
> $ ./stest -ad .
> .
> $ ./stest -f ./stest
> ./stest

<3,K.

commit a09638779e3235fc30e84a02e1a77b2319671b65
Author: Kamil Cholewiński <harry6...@gmail.com>
Date:   Fri Oct 6 15:52:18 2017 +0200

    [stest] is_hidden

diff --git a/stest.c b/stest.c
index 7a7b0bc..4da5230 100644
--- a/stest.c
+++ b/stest.c
@@ -2,6 +2,7 @@
 #include <sys/stat.h>
 
 #include <dirent.h>
+#include <libgen.h>
 #include <limits.h>
 #include <stdio.h>
 #include <stdlib.h>
@@ -13,6 +14,7 @@ char *argv0;
 
 #define FLAG(x)  (flag[(x)-'a'])
 
+static int is_hidden(const char *path);
 static void test(const char *, const char *);
 static void usage(void);
 
@@ -20,12 +22,25 @@ static int match = 0;
 static int flag[26];
 static struct stat old, new;
 
+static int
+is_hidden(const char *path)
+{
+    char *basec, *bname;
+    int hidden;
+
+    basec = strdup(path);
+    bname = basename(basec);
+    hidden = bname[0] == '.';
+    free(basec);
+    return hidden;
+}
+
 static void
 test(const char *path, const char *name)
 {
 	struct stat st, ln;
 
-	if ((!stat(path, &st) && (FLAG('a') || name[0] != '.')        /* hidden files      */
+	if ((!stat(path, &st) && (FLAG('a') || !is_hidden(path))      /* hidden files      */
 	&& (!FLAG('b') || S_ISBLK(st.st_mode))                        /* block special     */
 	&& (!FLAG('c') || S_ISCHR(st.st_mode))                        /* character special */
 	&& (!FLAG('d') || S_ISDIR(st.st_mode))                        /* directory         */

Reply via email to