From 70a55cf954ecabb858a12b754f4547bcaf78dc2d Mon Sep 17 00:00:00 2001 From: Elliott Hughes Date: Wed, 29 Jul 2020 11:39:10 -0700 Subject: find: support -type a,b,c. Fixes #227. --- toys/posix/find.c | 17 +++++++++++++---- 1 file changed, 13 insertions(+), 4 deletions(-) (limited to 'toys/posix') 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) -- cgit v1.2.3