Apply patch from Ghozlane Toumi to add -inum support to find. Apply patch from Ghozlane Toumi to make find smaller by combining similar error messages Forward port find -newer support from busybox stable that was missing from unstable. -Erik. Fixup usage messages for find. -Erik
This commit was genuinely broken at the time (not related to our build system): sysdeps/linux/Config.in "fileutils/Config.in" dosyasini kaynak gosteriyor ama bu dosya repoda hic var olmadi (2002-12-05 - 2003-02-15 arasi orijinal yazar hatasi, 3238ea167 ile duzeltildi)
No binary (build failed)
—
(log yok)
| @@ -39,6 +39,21 @@ config CONFIG_FEATURE_FIND_XDEV | |
| help | |
| Please submit a patch to add help text for this item. | |
| + | config CONFIG_FEATURE_FIND_NEWER |
| + | bool " Enable -newer option for comparing file mtimes" |
| + | default y |
| + | depends on CONFIG_FIND |
| + | help |
| + | Support the 'find -newer' option for finding any files which have |
| + | a modified time that is more recent than the specified FILE. |
| + | |
| + | config CONFIG_FEATURE_FIND_INUM |
| + | bool " Enable inode number matching (-inum) option" |
| + | default y |
| + | depends on CONFIG_FIND |
| + | help |
| + | Support the 'fine -inum' option for searching by inode number. |
| + | |
| config CONFIG_GREP | |
| bool "grep" | |
| default n | |
| @@ -34,6 +34,9 @@ | |
| #include <ctype.h> | |
| #include "busybox.h" | |
| + | //XXX just found out about libbb/messages.c . maybe move stuff there ? - ghoz |
| + | const char msg_req_arg[] = "option `%s' requires an argument"; |
| + | const char msg_invalid_arg[] = "invalid argument `%s' to `%s'"; |
| static char *pattern; | |
| @@ -56,6 +59,13 @@ static dev_t *xdev_dev; | |
| static int xdev_count = 0; | |
| #endif | |
| + | #ifdef CONFIG_FEATURE_FIND_NEWER |
| + | time_t newer_mtime; |
| + | #endif |
| + | |
| + | #ifdef CONFIG_FEATURE_FIND_INUM |
| + | static ino_t inode_num; |
| + | #endif |
| static int fileAction(const char *fileName, struct stat *statbuf, void* junk) | |
| { | |
| @@ -109,7 +119,19 @@ static int fileAction(const char *fileName, struct stat *statbuf, void* junk) | |
| } | |
| } | |
| #endif | |
| - | |
| + | #ifdef CONFIG_FEATURE_FIND_NEWER |
| + | if (newer_mtime != 0) { |
| + | time_t file_age = newer_mtime - statbuf->st_mtime; |
| + | if (file_age >= 0) |
| + | goto no_match; |
| + | } |
| + | #endif |
| + | #ifdef CONFIG_FEATURE_FIND_INUM |
| + | if (inode_num != 0) { |
| + | if (!(statbuf->st_ino == inode_num)) |
| + | goto no_match; |
| + | } |
| + | #endif |
| puts(fileName); | |
| no_match: | |
| return (TRUE); | |
| @@ -145,7 +167,7 @@ static int find_type(char *type) | |
| } | |
| if (mask == 0 || type[1] != '\0') | |
| - | error_msg_and_die("invalid argument `%s' to `-type'", type); |
| + | error_msg_and_die(msg_invalid_arg, type, "-type"); |
| return mask; | |
| } | |
| @@ -170,24 +192,22 @@ int find_main(int argc, char **argv) | |
| } | |
| else if (strcmp(argv[i], "-name") == 0) { | |
| if (++i == argc) | |
| - | error_msg_and_die("option `-name' requires an argument"); |
| + | error_msg_and_die(msg_req_arg, "-name"); |
| pattern = argv[i]; | |
| #ifdef CONFIG_FEATURE_FIND_TYPE | |
| } else if (strcmp(argv[i], "-type") == 0) { | |
| if (++i == argc) | |
| - | error_msg_and_die("option `-type' requires an argument"); |
| + | error_msg_and_die(msg_req_arg, "-type"); |
| type_mask = find_type(argv[i]); | |
| #endif | |
| #ifdef CONFIG_FEATURE_FIND_PERM | |
| } else if (strcmp(argv[i], "-perm") == 0) { | |
| char *end; | |
| if (++i == argc) | |
| - | error_msg_and_die("option `-perm' requires an argument"); |
| + | error_msg_and_die(msg_req_arg, "-perm"); |
| perm_mask = strtol(argv[i], &end, 8); | |
| - | if (end[0] != '\0') |
| - | error_msg_and_die("invalid argument `%s' to `-perm'", argv[i]); |
| - | if (perm_mask > 07777) |
| - | error_msg_and_die("invalid argument `%s' to `-perm'", argv[i]); |
| + | if ((end[0] != '\0') || (perm_mask > 07777)) |
| + | error_msg_and_die(msg_invalid_arg, argv[i], "-perm"); |
| if ((perm_char = argv[i][0]) == '-') | |
| perm_mask = -perm_mask; | |
| #endif | |
| @@ -195,10 +215,10 @@ int find_main(int argc, char **argv) | |
| } else if (strcmp(argv[i], "-mtime") == 0) { | |
| char *end; | |
| if (++i == argc) | |
| - | error_msg_and_die("option `-mtime' requires an argument"); |
| + | error_msg_and_die(msg_req_arg, "-mtime"); |
| mtime_days = strtol(argv[i], &end, 10); | |
| if (end[0] != '\0') | |
| - | error_msg_and_die("invalid argument `%s' to `-mtime'", argv[i]); |
| + | error_msg_and_die(msg_invalid_arg, argv[i], "-mtime"); |
| if ((mtime_char = argv[i][0]) == '-') | |
| mtime_days = -mtime_days; | |
| #endif | |
| @@ -222,6 +242,24 @@ int find_main(int argc, char **argv) | |
| xdev_dev [i-1] = stbuf. st_dev; | |
| } | |
| } | |
| + | #endif |
| + | #ifdef CONFIG_FEATURE_FIND_NEWER |
| + | } else if (strcmp(argv[i], "-newer") == 0) { |
| + | struct stat stat_newer; |
| + | if (++i == argc) |
| + | error_msg_and_die(msg_req_arg, "-newer"); |
| + | if (stat (argv[i], &stat_newer) != 0) |
| + | error_msg_and_die("file %s not found", argv[i]); |
| + | newer_mtime = stat_newer.st_mtime; |
| + | #endif |
| + | #ifdef CONFIG_FEATURE_FIND_INUM |
| + | } else if (strcmp(argv[i], "-inum") == 0) { |
| + | char *end; |
| + | if (++i == argc) |
| + | error_msg_and_die(msg_req_arg, "-inum"); |
| + | inode_num = strtol(argv[i], &end, 10); |
| + | if (end[0] != '\0') |
| + | error_msg_and_die(msg_invalid_arg, argv[i], "-inum"); |
| #endif | |
| } else | |
| show_usage(); | |
| @@ -568,6 +568,16 @@ | |
| #else | |
| #define USAGE_FIND_MTIME(a) | |
| #endif | |
| + | #ifdef CONFIG_FEATURE_FIND_NEWER |
| + | #define USAGE_FIND_NEWER(a) a |
| + | #else |
| + | #define USAGE_FIND_NEWER(a) |
| + | #endif |
| + | #ifdef CONFIG_FEATURE_FIND_INUM |
| + | #define USAGE_FIND_INUM(a) a |
| + | #else |
| + | #define USAGE_FIND_INUM(a) |
| + | #endif |
| #define find_trivial_usage \ | |
| "[PATH...] [EXPRESSION]" | |
| @@ -583,7 +593,11 @@ | |
| ) USAGE_FIND_PERM( \ | |
| "\n\t-perm PERMS\tPermissions match any of (+NNN); all of (-NNN);\n\t\t\tor exactly (NNN)" \ | |
| ) USAGE_FIND_MTIME( \ | |
| - | "\n\t-mtime TIME\tModified time is greater than (+N); less than (-N);\n\t\t\tor exactly (N) days") |
| + | "\n\t-mtime TIME\tModified time is greater than (+N); less than (-N);\n\t\t\tor exactly (N) days" \ |
| + | ) USAGE_FIND_NEWER( \ |
| + | "\n\t-newer FILE\tModified time is more recent than FILE's" \ |
| + | ) USAGE_FIND_INUM( \ |
| + | "\n\t-inum N\t\tFile has inode number N") |
| #define find_example_usage \ | |
| "$ find / -name /etc/passwd\n" \ | |
| "/etc/passwd\n" | |