diff options
Diffstat (limited to 'toys')
-rw-r--r-- | toys/posix/find.c | 17 |
1 files changed, 13 insertions, 4 deletions
diff --git a/toys/posix/find.c b/toys/posix/find.c index 9b688d46..47cefb78 100644 --- a/toys/posix/find.c +++ b/toys/posix/find.c @@ -398,10 +398,19 @@ static int do_find(struct dirtree *new) } else if (!strcmp(s, "type")) { if (check) { int types[] = {S_IFBLK, S_IFCHR, S_IFDIR, S_IFLNK, S_IFIFO, - S_IFREG, S_IFSOCK}, i = stridx("bcdlpfs", *ss[1]); - - if (i<0) error_exit("bad -type '%c'", *ss[1]); - if ((new->st.st_mode & S_IFMT) != types[i]) test = 0; + S_IFREG, S_IFSOCK}, i, match = 0; + char *t = ss[1]; + + for (; *t; t++) { + if (*t == ',') continue; + i = stridx("bcdlpfs", *t); + if (i<0) error_exit("bad -type '%c'", *t); + if ((new->st.st_mode & S_IFMT) == types[i]) { + match = 1; + break; + } + } + if (!match) test = 0; } } else if (strchr("acm", *s) |