From c7fdee72ddfe950594e20a527bfb199866428c17 Mon Sep 17 00:00:00 2001 From: Elliott Hughes Date: Fri, 18 Oct 2013 17:00:11 -0700 Subject: [PATCH] Fix struct statfs for LP64. Change-Id: I9649d881588931a1d672b65ddcf94009daadb0ef --- libc/include/sys/vfs.h | 70 ++++++++++++++++++++++++++---------------- 1 file changed, 43 insertions(+), 27 deletions(-) diff --git a/libc/include/sys/vfs.h b/libc/include/sys/vfs.h index 6fce3b439..79995bb59 100644 --- a/libc/include/sys/vfs.h +++ b/libc/include/sys/vfs.h @@ -37,37 +37,53 @@ __BEGIN_DECLS /* The kernel's __kernel_fsid_t has a 'val' member but glibc uses '__val'. */ typedef struct { int __val[2]; } __fsid_t; -/* Our struct statfs corresponds to the kernel's statfs64 type. */ -#ifdef __mips__ +#if defined(__LP64__) struct statfs { - uint32_t f_type; - uint32_t f_bsize; - uint32_t f_frsize; - uint32_t __pad; - uint64_t f_blocks; - uint64_t f_bfree; - uint64_t f_files; - uint64_t f_ffree; - uint64_t f_bavail; - __fsid_t f_fsid; - uint32_t f_namelen; - uint32_t f_flags; - uint32_t f_spare[5]; + uint64_t f_type; + uint64_t f_bsize; + uint64_t f_blocks; + uint64_t f_bfree; + uint64_t f_bavail; + uint64_t f_files; + uint64_t f_ffree; + __fsid_t f_fsid; + uint64_t f_namelen; + uint64_t f_frsize; + uint64_t f_flags; + uint64_t f_spare[4]; +}; +#elif defined(__mips__) +/* 32-bit MIPS (corresponds to the kernel's statfs64 type). */ +struct statfs { + uint32_t f_type; + uint32_t f_bsize; + uint32_t f_frsize; + uint32_t __pad; + uint64_t f_blocks; + uint64_t f_bfree; + uint64_t f_files; + uint64_t f_ffree; + uint64_t f_bavail; + __fsid_t f_fsid; + uint32_t f_namelen; + uint32_t f_flags; + uint32_t f_spare[5]; }; #else +/* 32-bit ARM or x86 (corresponds to the kernel's statfs64 type). */ struct statfs { - uint32_t f_type; - uint32_t f_bsize; - uint64_t f_blocks; - uint64_t f_bfree; - uint64_t f_bavail; - uint64_t f_files; - uint64_t f_ffree; - __fsid_t f_fsid; - uint32_t f_namelen; - uint32_t f_frsize; - uint32_t f_flags; - uint32_t f_spare[4]; + uint32_t f_type; + uint32_t f_bsize; + uint64_t f_blocks; + uint64_t f_bfree; + uint64_t f_bavail; + uint64_t f_files; + uint64_t f_ffree; + __fsid_t f_fsid; + uint32_t f_namelen; + uint32_t f_frsize; + uint32_t f_flags; + uint32_t f_spare[4]; }; #endif