From 0f91c5861cacaeb17729b7727d07260273345393 Mon Sep 17 00:00:00 2001 From: Tavian Barnes Date: Thu, 4 Feb 2016 23:12:08 -0500 Subject: Implement -P and -H. --- parse.c | 20 +++++++++++++++++++- 1 file changed, 19 insertions(+), 1 deletion(-) (limited to 'parse.c') diff --git a/parse.c b/parse.c index 413282a..93657c8 100644 --- a/parse.c +++ b/parse.c @@ -344,7 +344,11 @@ static struct expr *parse_acnewer(struct parser_state *state, const char *option } struct stat sb; - if (fstatat(AT_FDCWD, expr->sdata, &sb, AT_SYMLINK_NOFOLLOW) != 0) { + + bool follow = state->cl->flags & BFTW_FOLLOW_ROOT; + int flags = follow ? 0 : AT_SYMLINK_NOFOLLOW; + + if (fstatat(AT_FDCWD, expr->sdata, &sb, flags) != 0) { print_error(NULL, expr->sdata, errno); free_expr(expr); return NULL; @@ -465,6 +469,20 @@ static struct expr *parse_literal(struct parser_state *state) { } switch (arg[1]) { + case 'P': + if (strcmp(arg, "-P") == 0) { + state->cl->flags &= ~BFTW_FOLLOW_ROOT; + return new_option(state, arg); + } + break; + + case 'H': + if (strcmp(arg, "-H") == 0) { + state->cl->flags |= BFTW_FOLLOW_ROOT; + return new_option(state, arg); + } + break; + case 'a': if (strcmp(arg, "-amin") == 0) { return parse_acmtime(state, arg, ATIME, MINUTES); -- cgit v1.2.3