diff options
| author | Ruslan Ermilov <ru@FreeBSD.org> | 2001-09-19 09:44:24 +0000 |
|---|---|---|
| committer | Ruslan Ermilov <ru@FreeBSD.org> | 2001-09-19 09:44:24 +0000 |
| commit | daa0b078dd10b2cdf1f007d00f6a8c507e427feb (patch) | |
| tree | a24bb11c82a5ce44f3d55637e59bae7fb70cd8a1 /usr.bin/find/function.c | |
| parent | a90af3c296113206039c771ae9b2626e44b2bc1e (diff) | |
Notes
Diffstat (limited to 'usr.bin/find/function.c')
| -rw-r--r-- | usr.bin/find/function.c | 21 |
1 files changed, 12 insertions, 9 deletions
diff --git a/usr.bin/find/function.c b/usr.bin/find/function.c index 93e144c28a4b..41623d4ec6fc 100644 --- a/usr.bin/find/function.c +++ b/usr.bin/find/function.c @@ -545,16 +545,16 @@ f_flags(plan, entry) { u_long flags; - flags = entry->fts_statp->st_flags & - (UF_NODUMP | UF_IMMUTABLE | UF_APPEND | UF_OPAQUE | - SF_ARCHIVED | SF_IMMUTABLE | SF_APPEND); + flags = entry->fts_statp->st_flags; if (plan->flags & F_ATLEAST) - /* note that plan->fl_flags always is a subset of - plan->fl_mask */ - return (flags & plan->fl_mask) == plan->fl_flags; + return (flags | plan->fl_flags) == flags && + !(flags & plan->fl_notflags); + else if (plan->flags & F_ANY) + return (flags & plan->fl_flags) || + (flags | plan->fl_notflags) != flags; else - return flags == plan->fl_flags; - /* NOTREACHED */ + return flags == plan->fl_flags && + !(plan->fl_flags & plan->fl_notflags); } PLAN * @@ -574,12 +574,15 @@ c_flags(option, argvp) if (*flags_str == '-') { new->flags |= F_ATLEAST; flags_str++; + } else if (*flags_str == '+') { + new->flags |= F_ANY; + flags_str++; } if (strtofflags(&flags_str, &flags, ¬flags) == 1) errx(1, "%s: %s: illegal flags string", option->name, flags_str); new->fl_flags = flags; - new->fl_mask = flags | notflags; + new->fl_notflags = notflags; return new; } |
