aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorAaro Koskinen <aaro.koskinen@iki.fi>2021-11-28 12:11:48 +0200
committerDenys Vlasenko <vda.linux@googlemail.com>2021-12-17 21:33:15 +0100
commitaaade69ce9faac6c05ab8b800fc9e9d4dee8ed54 (patch)
tree658918bf99fbc3bef0e8477d43780b9fff6812e5
parent7105e4afddbf47b494accce40e2a701b8833e6ce (diff)
downloadbusybox-w32-aaade69ce9faac6c05ab8b800fc9e9d4dee8ed54.tar.gz
busybox-w32-aaade69ce9faac6c05ab8b800fc9e9d4dee8ed54.tar.bz2
busybox-w32-aaade69ce9faac6c05ab8b800fc9e9d4dee8ed54.zip
find: implement -samefile
function old new delta parse_params 1461 1606 +145 func_samefile - 42 +42 packed_usage 34079 34102 +23 static.params 261 271 +10 ------------------------------------------------------------------------------ (add/remove: 1/0 grow/shrink: 3/0 up/down: 220/0) Total: 220 bytes Signed-off-by: Aaro Koskinen <aaro.koskinen@iki.fi> Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com>
-rw-r--r--findutils/find.c35
1 files changed, 35 insertions, 0 deletions
diff --git a/findutils/find.c b/findutils/find.c
index fdc5c152d..bb6ad31e5 100644
--- a/findutils/find.c
+++ b/findutils/find.c
@@ -155,6 +155,13 @@
155//config: default y 155//config: default y
156//config: depends on FIND 156//config: depends on FIND
157//config: 157//config:
158//config:config FEATURE_FIND_SAMEFILE
159//config: bool "Enable -samefile: reference file matching"
160//config: default y
161//config: depends on FIND
162//config: help
163//config: Support the 'find -samefile' option for searching by a reference file.
164//config:
158//config:config FEATURE_FIND_EXEC 165//config:config FEATURE_FIND_EXEC
159//config: bool "Enable -exec: execute commands" 166//config: bool "Enable -exec: execute commands"
160//config: default y 167//config: default y
@@ -350,6 +357,9 @@
350//usage: IF_FEATURE_FIND_INUM( 357//usage: IF_FEATURE_FIND_INUM(
351//usage: "\n -inum N File has inode number N" 358//usage: "\n -inum N File has inode number N"
352//usage: ) 359//usage: )
360//usage: IF_FEATURE_FIND_SAMEFILE(
361//usage: "\n -samefile FILE File is same as FILE"
362//usage: )
353//usage: IF_FEATURE_FIND_USER( 363//usage: IF_FEATURE_FIND_USER(
354//usage: "\n -user NAME/ID File is owned by given user" 364//usage: "\n -user NAME/ID File is owned by given user"
355//usage: ) 365//usage: )
@@ -444,6 +454,7 @@ IF_FEATURE_FIND_MTIME( ACTS(mtime, unsigned char time_type; unsigned char mtime
444IF_FEATURE_FIND_MMIN( ACTS(mmin, unsigned char time_type; unsigned char mmin_char; unsigned mmin_mins;)) 454IF_FEATURE_FIND_MMIN( ACTS(mmin, unsigned char time_type; unsigned char mmin_char; unsigned mmin_mins;))
445IF_FEATURE_FIND_NEWER( ACTS(newer, time_t newer_mtime;)) 455IF_FEATURE_FIND_NEWER( ACTS(newer, time_t newer_mtime;))
446IF_FEATURE_FIND_INUM( ACTS(inum, ino_t inode_num;)) 456IF_FEATURE_FIND_INUM( ACTS(inum, ino_t inode_num;))
457IF_FEATURE_FIND_SAMEFILE(ACTS(samefile, ino_t inode_num; dev_t device;))
447IF_FEATURE_FIND_USER( ACTS(user, uid_t uid;)) 458IF_FEATURE_FIND_USER( ACTS(user, uid_t uid;))
448IF_FEATURE_FIND_SIZE( ACTS(size, char size_char; off_t size;)) 459IF_FEATURE_FIND_SIZE( ACTS(size, char size_char; off_t size;))
449IF_FEATURE_FIND_CONTEXT(ACTS(context, security_context_t context;)) 460IF_FEATURE_FIND_CONTEXT(ACTS(context, security_context_t context;))
@@ -731,6 +742,13 @@ ACTF(inum)
731 return (statbuf->st_ino == ap->inode_num); 742 return (statbuf->st_ino == ap->inode_num);
732} 743}
733#endif 744#endif
745#if ENABLE_FEATURE_FIND_SAMEFILE
746ACTF(samefile)
747{
748 return statbuf->st_ino == ap->inode_num &&
749 statbuf->st_dev == ap->device;
750}
751#endif
734#if ENABLE_FEATURE_FIND_EXEC 752#if ENABLE_FEATURE_FIND_EXEC
735static int do_exec(action_exec *ap, const char *fileName) 753static int do_exec(action_exec *ap, const char *fileName)
736{ 754{
@@ -1125,6 +1143,7 @@ static action*** parse_params(char **argv)
1125 IF_FEATURE_FIND_CMIN( PARM_cmin ,) 1143 IF_FEATURE_FIND_CMIN( PARM_cmin ,)
1126 IF_FEATURE_FIND_NEWER( PARM_newer ,) 1144 IF_FEATURE_FIND_NEWER( PARM_newer ,)
1127 IF_FEATURE_FIND_INUM( PARM_inum ,) 1145 IF_FEATURE_FIND_INUM( PARM_inum ,)
1146 IF_FEATURE_FIND_SAMEFILE(PARM_samefile ,)
1128 IF_FEATURE_FIND_USER( PARM_user ,) 1147 IF_FEATURE_FIND_USER( PARM_user ,)
1129 IF_FEATURE_FIND_GROUP( PARM_group ,) 1148 IF_FEATURE_FIND_GROUP( PARM_group ,)
1130 IF_FEATURE_FIND_SIZE( PARM_size ,) 1149 IF_FEATURE_FIND_SIZE( PARM_size ,)
@@ -1173,6 +1192,7 @@ static action*** parse_params(char **argv)
1173 IF_FEATURE_FIND_CMIN( "-cmin\0" ) 1192 IF_FEATURE_FIND_CMIN( "-cmin\0" )
1174 IF_FEATURE_FIND_NEWER( "-newer\0" ) 1193 IF_FEATURE_FIND_NEWER( "-newer\0" )
1175 IF_FEATURE_FIND_INUM( "-inum\0" ) 1194 IF_FEATURE_FIND_INUM( "-inum\0" )
1195 IF_FEATURE_FIND_SAMEFILE("-samefile\0")
1176 IF_FEATURE_FIND_USER( "-user\0" ) 1196 IF_FEATURE_FIND_USER( "-user\0" )
1177 IF_FEATURE_FIND_GROUP( "-group\0" ) 1197 IF_FEATURE_FIND_GROUP( "-group\0" )
1178 IF_FEATURE_FIND_SIZE( "-size\0" ) 1198 IF_FEATURE_FIND_SIZE( "-size\0" )
@@ -1511,6 +1531,21 @@ static action*** parse_params(char **argv)
1511 ap->inode_num = xatoul(arg1); 1531 ap->inode_num = xatoul(arg1);
1512 } 1532 }
1513#endif 1533#endif
1534#if ENABLE_FEATURE_FIND_SAMEFILE
1535 else if (parm == PARM_samefile) {
1536 action_samefile *ap;
1537 struct stat stbuf;
1538 dbg("%d", __LINE__);
1539 if (G.recurse_flags & (ACTION_FOLLOWLINKS |
1540 ACTION_FOLLOWLINKS_L0))
1541 xstat(arg1, &stbuf);
1542 else if (lstat(arg1, &stbuf))
1543 bb_perror_msg_and_die("can't stat '%s'", arg1);
1544 ap = ALLOC_ACTION(samefile);
1545 ap->inode_num = stbuf.st_ino;
1546 ap->device = stbuf.st_dev;
1547 }
1548#endif
1514#if ENABLE_FEATURE_FIND_USER 1549#if ENABLE_FEATURE_FIND_USER
1515 else if (parm == PARM_user) { 1550 else if (parm == PARM_user) {
1516 action_user *ap; 1551 action_user *ap;