def self.stat(path)
fs = Statvfs.new
if statvfs(path, fs) < 0
raise Error, 'statvfs() function failed: ' + strerror(FFI.errno)
end
obj = Sys::Filesystem::Stat.new
obj.path = path
obj.block_size = fs[:f_bsize]
obj.fragment_size = fs[:f_frsize]
obj.blocks = fs[:f_blocks]
obj.blocks_free = fs[:f_bfree]
obj.blocks_available = fs[:f_bavail]
obj.files = fs[:f_files]
obj.files_free = fs[:f_ffree]
obj.files_available = fs[:f_favail]
obj.filesystem_id = fs[:f_fsid]
obj.flags = fs[:f_flag]
obj.name_max = fs[:f_namemax]
if RbConfig::CONFIG['host_os'] =~ /darwin|osx|mach/i
obj.block_size /= 256
end
if fs.members.include?(:f_basetype)
obj.base_type = fs[:f_basetype].to_s
end
obj.freeze
end