From 2c348abbf7aca35c66b88e159bdafa41f2a9743f Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Axel=20D=C3=B6rfler?= Date: Tue, 30 Sep 2008 14:29:34 +0000 Subject: [PATCH] * Most of the other file systems now maintain the st_blocks value. It might not always be correct, but should be at least close. git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@27793 a95241bf-73f2-0310-859d-f6bbb57e9c96 --- src/add-ons/kernel/file_systems/cdda/kernel_interface.cpp | 2 ++ src/add-ons/kernel/file_systems/ext2/kernel_interface.cpp | 2 ++ src/add-ons/kernel/file_systems/fat/file.c | 1 + src/add-ons/kernel/file_systems/iso9660/kernel_interface.cpp | 1 + src/add-ons/kernel/file_systems/udf/kernel_interface.cpp | 1 + src/system/kernel/device_manager/devfs.cpp | 1 + src/system/kernel/fs/rootfs.cpp | 1 + 7 files changed, 9 insertions(+) diff --git a/src/add-ons/kernel/file_systems/cdda/kernel_interface.cpp b/src/add-ons/kernel/file_systems/cdda/kernel_interface.cpp index 0290a766ab..ee09799eae 100644 --- a/src/add-ons/kernel/file_systems/cdda/kernel_interface.cpp +++ b/src/add-ons/kernel/file_systems/cdda/kernel_interface.cpp @@ -446,10 +446,12 @@ fill_stat_buffer(Volume* volume, Inode* inode, Attribute* attribute, if (attribute != NULL) { stat.st_size = attribute->Size(); + stat.st_blocks = 0; stat.st_mode = S_ATTR | 0666; stat.st_type = attribute->Type(); } else { stat.st_size = inode->Size() + sizeof(wav_header); + stat.st_blocks = inode->Size() / 512; stat.st_mode = inode->Type(); stat.st_type = 0; } diff --git a/src/add-ons/kernel/file_systems/ext2/kernel_interface.cpp b/src/add-ons/kernel/file_systems/ext2/kernel_interface.cpp index c3f6668a88..4568ad8021 100644 --- a/src/add-ons/kernel/file_systems/ext2/kernel_interface.cpp +++ b/src/add-ons/kernel/file_systems/ext2/kernel_interface.cpp @@ -338,6 +338,8 @@ ext2_read_stat(fs_volume* _volume, fs_vnode* _node, struct stat* stat) stat->st_crtime = node.CreationTime(); stat->st_size = inode->Size(); + stat->st_blocks = (inode->Size() + 511) / 512; + return B_OK; } diff --git a/src/add-ons/kernel/file_systems/fat/file.c b/src/add-ons/kernel/file_systems/fat/file.c index 683459e820..8f14df5f48 100644 --- a/src/add-ons/kernel/file_systems/fat/file.c +++ b/src/add-ons/kernel/file_systems/fat/file.c @@ -195,6 +195,7 @@ dosfs_rstat(fs_volume *_vol, fs_vnode *_node, struct stat *st) st->st_uid = 0; st->st_gid = 0; st->st_size = node->st_size; + st->st_blocks = (node->st_size + 511) / 512; st->st_blksize = 0x10000; /* this value was chosen arbitrarily */ st->st_atime = st->st_mtime = st->st_ctime = st->st_crtime = node->st_time; diff --git a/src/add-ons/kernel/file_systems/iso9660/kernel_interface.cpp b/src/add-ons/kernel/file_systems/iso9660/kernel_interface.cpp index 8b2bd3af51..9d1082a942 100644 --- a/src/add-ons/kernel/file_systems/iso9660/kernel_interface.cpp +++ b/src/add-ons/kernel/file_systems/iso9660/kernel_interface.cpp @@ -433,6 +433,7 @@ fs_read_stat(fs_volume *_vol, fs_vnode *_node, struct stat *st) // Same for file/dir in ISO9660 st->st_size = node->dataLen[FS_DATA_FORMAT]; + st->st_blocks = (st->st_size + 511) / 512; if (ConvertRecDate(&(node->recordDate), &time) == B_NO_ERROR) st->st_ctime = st->st_mtime = st->st_atime = time; diff --git a/src/add-ons/kernel/file_systems/udf/kernel_interface.cpp b/src/add-ons/kernel/file_systems/udf/kernel_interface.cpp index 494c0ffc07..f42b7fcc3c 100644 --- a/src/add-ons/kernel/file_systems/udf/kernel_interface.cpp +++ b/src/add-ons/kernel/file_systems/udf/kernel_interface.cpp @@ -232,6 +232,7 @@ udf_read_stat(fs_volume *_volume, fs_vnode *node, struct stat *stat) stat->st_mode = icb->Mode(); stat->st_size = icb->Length(); + stat->st_blocks = (stat->st_size + 511) / 512; // File times. For now, treat the modification time as creation // time as well, since true creation time is an optional extended diff --git a/src/system/kernel/device_manager/devfs.cpp b/src/system/kernel/device_manager/devfs.cpp index 82fbc8f389..108644461b 100644 --- a/src/system/kernel/device_manager/devfs.cpp +++ b/src/system/kernel/device_manager/devfs.cpp @@ -1789,6 +1789,7 @@ devfs_read_stat(fs_volume* _volume, fs_vnode* _vnode, struct stat* stat) stat->st_nlink = 1; stat->st_blksize = 65536; + stat->st_blocks = 0; stat->st_uid = vnode->uid; stat->st_gid = vnode->gid; diff --git a/src/system/kernel/fs/rootfs.cpp b/src/system/kernel/fs/rootfs.cpp index e298f44f2c..93a4fefc13 100644 --- a/src/system/kernel/fs/rootfs.cpp +++ b/src/system/kernel/fs/rootfs.cpp @@ -1008,6 +1008,7 @@ rootfs_read_stat(fs_volume *_volume, fs_vnode *_v, struct stat *stat) stat->st_nlink = 1; stat->st_blksize = 65536; + stat->st_blocks = 0; stat->st_uid = vnode->uid; stat->st_gid = vnode->gid;