On Sat, Oct 07, 2017 at 11:54:05AM +0200, Kamil Cholewiński wrote: > 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. >
I agree, but at the same time writing a patch shows both the bug-reporter and hackers@ more clear what the proposed patched behaviour would be. For trivial patches it is better. > 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 */ I think this is still not clear: what if a file is hidden due to its path? for example: $HOME/.config/somefile should it be visible or not? the stest man page uses the term "file" but "path" is meant. for example: -d Test that files are directories. I think the -a option looks out of place to be honest. Should it be removed or at the very least better documented? -- Kind regards, Hiltjo