From 3e9b13e4c572d97468bef029f9c6e72271297fcb Mon Sep 17 00:00:00 2001 From: Denys Vlasenko Date: Fri, 5 Sep 2014 12:16:15 +0200 Subject: [PATCH] find: support -perm /BITS. Closes 7340 function old new delta parse_params 1487 1497 +10 func_perm 57 61 +4 ------------------------------------------------------------------------------ (add/remove: 0/0 grow/shrink: 2/0 up/down: 14/0) Total: 14 bytes Signed-off-by: Denys Vlasenko --- findutils/find.c | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/findutils/find.c b/findutils/find.c index 56a7ed3ab..83aa63f92 100644 --- a/findutils/find.c +++ b/findutils/find.c @@ -558,8 +558,8 @@ ACTF(type) #if ENABLE_FEATURE_FIND_PERM ACTF(perm) { - /* -perm +mode: at least one of perm_mask bits are set */ - if (ap->perm_char == '+') + /* -perm [+/]mode: at least one of perm_mask bits are set */ + if (ap->perm_char == '+' || ap->perm_char == '/') return (statbuf->st_mode & ap->perm_mask) != 0; /* -perm -mode: all of perm_mask are set */ if (ap->perm_char == '-') @@ -1252,14 +1252,14 @@ static action*** parse_params(char **argv) /* -perm BITS File's mode bits are exactly BITS (octal or symbolic). * Symbolic modes use mode 0 as a point of departure. * -perm -BITS All of the BITS are set in file's mode. - * -perm +BITS At least one of the BITS is set in file's mode. + * -perm [+/]BITS At least one of the BITS is set in file's mode. */ else if (parm == PARM_perm) { action_perm *ap; dbg("%d", __LINE__); ap = ALLOC_ACTION(perm); ap->perm_char = arg1[0]; - arg1 = plus_minus_num(arg1); + arg1 = (arg1[0] == '/' ? arg1+1 : plus_minus_num(arg1)); /*ap->perm_mask = 0; - ALLOC_ACTION did it */ if (!bb_parse_mode(arg1, &ap->perm_mask)) bb_error_msg_and_die("invalid mode '%s'", arg1); -- 2.25.1