diff --git a/src/add-ons/kernel/file_systems/ntfs/libntfs/device.c b/src/add-ons/kernel/file_systems/ntfs/libntfs/device.c index 274abacb42..ef7070bd15 100644 --- a/src/add-ons/kernel/file_systems/ntfs/libntfs/device.c +++ b/src/add-ons/kernel/file_systems/ntfs/libntfs/device.c @@ -67,6 +67,9 @@ #ifdef HAVE_LINUX_HDREG_H #include #endif +#ifdef __HAIKU__ +#include +#endif #include "types.h" #include "mst.h" @@ -589,6 +592,24 @@ s64 ntfs_device_size_get(struct ntfs_device *dev, int block_size) return blocks * sector_size / block_size; } } +#endif +#ifdef __HAIKU__ + { + off_t size = 0; + + partition_info partitionInfo; + device_geometry geometry; + + if (dev->d_ops->ioctl(dev, B_GET_PARTITION_INFO, &partitionInfo) == 0) + size = partitionInfo.size; + else if (dev->d_ops->ioctl(dev, B_GET_GEOMETRY, &geometry) == 0) { + size = (off_t)geometry.cylinder_count * geometry.sectors_per_track + * geometry.head_count * geometry.bytes_per_sector; + } + + if (size > 0) + return (s64)size / block_size; + } #endif /* * We couldn't figure it out by using a specialized ioctl,