Problem with stat.st_blksize

Guillaume Melquiond soltatis@hotmail.com
Sun Oct 20 06:12:00 GMT 2002


Hi,

Some times ago, when I used the command 'du' to get the size of a directory,
I got a value that was in accordance with the value given by Windows.
However, it isn't the case anymore now; 'du' returns a size less than the
files space usage.

So I had a glance to the source code and I saw that the field 'st_blksize'
from the system call 'stat' was initialized with 'S_BLKSIZE' (which is a
macro set to 1024). But my filesystem uses 4096 bytes blocks. I looked at
the winsup cvs to see why it worked before; but unless I did a mistake, it
seems 'S_BLKSIZE' has always been here.

Why is this field not set to a proper value? One moment, I thought Windows
was returning a wrong value. But I tried with 'statfs' and the value was
correct. So maybe 'st_blksize' should be computed the same way than
'f_bsize'.

Regards,

Guillaume

PS: Since I'm not suscribed to this mailing-list, please cc me if you expect
an answer that cleanly inserts in a thread. Otherwise, I will follow the
discussion through the archive.

PPS: Here is an exemple to show the behavior difference between 'stat' and
'statfs'.

$ cat test.c
#include <sys/types.h>
#include <sys/stat.h>
#include <sys/vfs.h>
#include <unistd.h>

int main(int argc, char *argv[]) {
  struct stat buf1;
  struct statfs buf2;
  stat(argv[1], &buf1);
  statfs(argv[1],&buf2);
  printf("st_blksize:\t%d\nf_bsize:\t%d\n", buf1.st_blksize, buf2.f_bsize);
  return 0;
}

$ gcc test.c -o test

$ ./test test.c
st_blksize:     1024
f_bsize:        4096

--
Unsubscribe info:      http://cygwin.com/ml/#unsubscribe-simple
Bug reporting:         http://cygwin.com/bugs.html
Documentation:         http://cygwin.com/docs.html
FAQ:                   http://cygwin.com/faq/



More information about the Cygwin mailing list