[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[bug #46815] problem when testing file size
From: |
anonymous |
Subject: |
[bug #46815] problem when testing file size |
Date: |
Tue, 05 Jan 2016 06:08:53 +0000 |
User-agent: |
Mozilla/5.0 (Windows NT 6.3; WOW64; rv:45.0) Gecko/20100101 Firefox/45.0 |
URL:
<http://savannah.gnu.org/bugs/?46815>
Summary: problem when testing file size
Project: findutils
Submitted by: None
Submitted on: Di 05 Jan 2016 06:08:51 UTC
Category: find
Severity: 3 - Normal
Item Group: None
Status: None
Privacy: Public
Assigned to: None
Originator Name:
Originator Email: address@hidden
Open/Closed: Open
Discussion Lock: Any
Release: None
Fixed Release: None
_______________________________________________________
Details:
Hi,
I noticed a strange behaviour in GNU find when testing the file
size. Let me explain the found problem with a small example:
$ dd if=/dev/zero of=foo.1k bs=1024 count=1
$ dd if=/dev/zero of=foo.24k bs=1024 count=24
$ dd if=/dev/zero of=foo.1M bs=1024 count=1024
$ # this should only find foo.1M:
$ find . -size 1M
.
./foo.24k
./foo.1k
./foo.1M
$ # this one works correctly:
$ find . -size 24k
./foo.24k
$ # all files less than 1M should be found but result is empty:
$ find . -size -1M
$ # all files are found:
$ find . -size -2M
.
./foo.24k
./foo.1k
./foo.1M
$ # a different unit also solves the issue:
$ find . -size -1024k
.
./foo.24k
./foo.1k
The problem is how pred_size() calculates the file size. When
searching for a file with a size of 1M and processing the test
files we created previously f_val is always 1:
f_val = ((1024 / 1048576) + (1024 % 1048576 != 0)) = 1
f_val = ((24576 / 1048576) + (24576 % 1048576 != 0)) = 1
f_val = ((24576 / 1048576) + (24576 % 1048576 != 0)) = 1
I fixed the problem on my system by applying this patch:
diff --git a/find/pred.c b/find/pred.c
index d633ab9..73abbec 100644
--- a/find/pred.c
+++ b/find/pred.c
@@ -956,12 +956,12 @@ bool
pred_size (const char *pathname, struct stat *stat_buf, struct predicate
*pred_ptr)
{
uintmax_t f_val;
(void) pathname;
- f_val = ((stat_buf->st_size / pred_ptr->args.size.blocksize)
- + (stat_buf->st_size % pred_ptr->args.size.blocksize != 0));
+ f_val = stat_buf->st_size / pred_ptr->args.size.blocksize;
+
switch (pred_ptr->args.size.kind)
{
case COMP_GT:
if (f_val > pred_ptr->args.size.size)
return (true);
Kind regards,
Sebastian
_______________________________________________________
Reply to this item at:
<http://savannah.gnu.org/bugs/?46815>
_______________________________________________
Nachricht gesendet von/durch Savannah
http://savannah.gnu.org/
- [bug #46815] problem when testing file size,
anonymous <=
- [bug #46815] problem when testing file size, James Youngman, 2016/01/05
- [bug #46815] problem when testing file size, anonymous, 2016/01/08
- [bug #46815] problem when testing file size, Dale Worley, 2016/01/08
- [bug #46815] problem when testing file size, James Youngman, 2016/01/09
- Re: [bug #46815] problem when testing file size, Bernhard Voelker, 2016/01/10
- Re: [bug #46815] problem when testing file size, James Youngman, 2016/01/10
- Re: [bug #46815] problem when testing file size, Assaf Gordon, 2016/01/10
- Re: [bug #46815] problem when testing file size, Bernhard Voelker, 2016/01/10
- Re: [bug #46815] problem when testing file size, Martin Steigerwald, 2016/01/13
- Re: [bug #46815] problem when testing file size, Martin Steigerwald, 2016/01/13