diff -x md5sums -x '*.log' -x '*.sum' -ur findutils-4.2.28/find/defs.h findutils-4.2.28-rew/find/defs.h --- findutils-4.2.28/find/defs.h 2006-06-14 23:42:48.000000000 +0200 +++ findutils-4.2.28-rew/find/defs.h 2009-06-25 17:19:12.000000000 +0200 @@ -475,6 +475,7 @@ boolean pred_regex PARAMS((char *pathname, struct stat *stat_buf, struct predicate *pred_ptr)); boolean pred_samefile PARAMS((char *pathname, struct stat *stat_buf, struct predicate *pred_ptr)); boolean pred_size PARAMS((char *pathname, struct stat *stat_buf, struct predicate *pred_ptr)); +boolean pred_space PARAMS((char *pathname, struct stat *stat_buf, struct predicate *pred_ptr)); boolean pred_true PARAMS((char *pathname, struct stat *stat_buf, struct predicate *pred_ptr)); boolean pred_type PARAMS((char *pathname, struct stat *stat_buf, struct predicate *pred_ptr)); boolean pred_uid PARAMS((char *pathname, struct stat *stat_buf, struct predicate *pred_ptr)); Only in findutils-4.2.28-rew/find: defs.h~ diff -x md5sums -x '*.log' -x '*.sum' -ur findutils-4.2.28/find/parser.c findutils-4.2.28-rew/find/parser.c --- findutils-4.2.28/find/parser.c 2006-08-05 15:16:16.000000000 +0200 +++ findutils-4.2.28-rew/find/parser.c 2009-06-25 17:20:13.000000000 +0200 @@ -148,7 +148,8 @@ static boolean parse_xtype PARAMS((const struct parser_table*, char *argv[], int *arg_ptr)); static boolean parse_quit PARAMS((const struct parser_table*, char *argv[], int *arg_ptr)); - +// The parse_space function is quite large, and parse_size is nearly/now completely identical. +#define parse_space parse_size boolean parse_print PARAMS((const struct parser_table*, char *argv[], int *arg_ptr)); @@ -270,6 +271,7 @@ PARSE_OPTION ("regextype", regextype), /* GNU */ PARSE_TEST ("samefile", samefile), /* GNU */ PARSE_TEST ("size", size), + PARSE_TEST ("space", space), /* REW */ PARSE_TEST ("type", type), PARSE_TEST ("uid", uid), /* GNU */ PARSE_TEST ("used", used), /* GNU */ @@ -1522,7 +1524,7 @@ return false; len = strlen (argv[*arg_ptr]); if (len == 0) - error (1, 0, _("invalid null argument to -size")); + error (1, 0, _("invalid null argument to -size/-space")); switch (argv[*arg_ptr][len - 1]) { case 'b': @@ -1568,7 +1570,7 @@ break; default: - error (1, 0, _("invalid -size type `%c'"), argv[*arg_ptr][len - 1]); + error (1, 0, _("invalid -size/-space type `%c'"), argv[*arg_ptr][len - 1]); } if (!get_num (argv[*arg_ptr], &num, &c_type)) return false; Only in findutils-4.2.28-rew/find: parser.c~ diff -x md5sums -x '*.log' -x '*.sum' -ur findutils-4.2.28/find/pred.c findutils-4.2.28-rew/find/pred.c --- findutils-4.2.28/find/pred.c 2006-03-31 23:55:04.000000000 +0200 +++ findutils-4.2.28-rew/find/pred.c 2009-06-25 17:15:31.000000000 +0200 @@ -209,6 +209,7 @@ {pred_regex, "regex "}, {pred_samefile,"samefile "}, {pred_size, "size "}, + {pred_space, "space "}, {pred_true, "true "}, {pred_type, "type "}, {pred_uid, "uid "}, @@ -908,6 +909,26 @@ return true; } +boolean find_compare (uintmax_t val1, uintmax_t val2, int cmptype) +{ + switch (cmptype) + { + case COMP_GT: + if (val1 > val2) + return (true); + break; + case COMP_LT: + if (val1 < val2) + return (true); + break; + case COMP_EQ: + if (val1 == val2) + return (true); + break; + } + return (false); +} + boolean pred_fstype (char *pathname, struct stat *stat_buf, struct predicate *pred_ptr) { @@ -923,23 +944,9 @@ pred_gid (char *pathname, struct stat *stat_buf, struct predicate *pred_ptr) { (void) pathname; - - switch (pred_ptr->args.info.kind) - { - case COMP_GT: - if (stat_buf->st_gid > pred_ptr->args.info.l_val) - return (true); - break; - case COMP_LT: - if (stat_buf->st_gid < pred_ptr->args.info.l_val) - return (true); - break; - case COMP_EQ: - if (stat_buf->st_gid == pred_ptr->args.info.l_val) - return (true); - break; - } - return (false); + return find_compare (stat_buf->st_gid, + pred_ptr->args.info.l_val, + pred_ptr->args.info.kind); } boolean @@ -980,22 +987,9 @@ { (void) pathname; - switch (pred_ptr->args.info.kind) - { - case COMP_GT: - if (stat_buf->st_ino > pred_ptr->args.info.l_val) - return (true); - break; - case COMP_LT: - if (stat_buf->st_ino < pred_ptr->args.info.l_val) - return (true); - break; - case COMP_EQ: - if (stat_buf->st_ino == pred_ptr->args.info.l_val) - return (true); - break; - } - return (false); + return find_compare (stat_buf->st_ino, + pred_ptr->args.info.l_val, + pred_ptr->args.info.kind); } boolean @@ -1012,23 +1006,9 @@ pred_links (char *pathname, struct stat *stat_buf, struct predicate *pred_ptr) { (void) pathname; - - switch (pred_ptr->args.info.kind) - { - case COMP_GT: - if (stat_buf->st_nlink > pred_ptr->args.info.l_val) - return (true); - break; - case COMP_LT: - if (stat_buf->st_nlink < pred_ptr->args.info.l_val) - return (true); - break; - case COMP_EQ: - if (stat_buf->st_nlink == pred_ptr->args.info.l_val) - return (true); - break; - } - return (false); + return find_compare (stat_buf->st_nlink, + pred_ptr->args.info.l_val, + pred_ptr->args.info.kind); } boolean @@ -1319,6 +1299,7 @@ return (false); } + boolean pred_size (char *pathname, struct stat *stat_buf, struct predicate *pred_ptr) { @@ -1327,22 +1308,20 @@ (void) pathname; f_val = ((stat_buf->st_size / pred_ptr->args.size.blocksize) + (stat_buf->st_size % pred_ptr->args.size.blocksize != 0)); - switch (pred_ptr->args.size.kind) - { - case COMP_GT: - if (f_val > pred_ptr->args.size.size) - return (true); - break; - case COMP_LT: - if (f_val < pred_ptr->args.size.size) - return (true); - break; - case COMP_EQ: - if (f_val == pred_ptr->args.size.size) - return (true); - break; - } - return (false); + return find_compare (f_val, pred_ptr->args.size.size, pred_ptr->args.size.kind); +} + +boolean +pred_space (char *pathname, struct stat *stat_buf, struct predicate *pred_ptr) +{ + uintmax_t f_val; + + (void) pathname; + f_val = stat_buf->st_blocks * 512; // specs/manual states this is in 512byte blocks. + // NOT in st_blocksize byte blocks! + f_val = ((f_val / pred_ptr->args.size.blocksize) + + (f_val % pred_ptr->args.size.blocksize != 0)); + return find_compare (f_val, pred_ptr->args.size.size, pred_ptr->args.size.kind); } boolean @@ -1419,22 +1398,9 @@ pred_uid (char *pathname, struct stat *stat_buf, struct predicate *pred_ptr) { (void) pathname; - switch (pred_ptr->args.info.kind) - { - case COMP_GT: - if (stat_buf->st_uid > pred_ptr->args.info.l_val) - return (true); - break; - case COMP_LT: - if (stat_buf->st_uid < pred_ptr->args.info.l_val) - return (true); - break; - case COMP_EQ: - if (stat_buf->st_uid == pred_ptr->args.info.l_val) - return (true); - break; - } - return (false); + return find_compare (stat_buf->st_uid, + pred_ptr->args.info.l_val, + pred_ptr->args.info.kind); } boolean Only in findutils-4.2.28-rew/find: pred.c~