diff options
author | Bernhard Reutner-Fischer <rep.dot.nop@gmail.com> | 2008-07-14 14:30:48 +0000 |
---|---|---|
committer | Bernhard Reutner-Fischer <rep.dot.nop@gmail.com> | 2008-07-14 14:30:48 +0000 |
commit | 08b75763d15cf9e5f45eef70fe7e30ce2b748ae3 (patch) | |
tree | 938826102a35c2538079ceecdcba395c253b84cb /libc/misc/statfs/statvfs64.c | |
parent | 074cafed76801cb21a2b66e1ab4eef6c943eb52a (diff) |
- improve UCLIBC_LINUX_SPECIFIC
compile-tested only, fixes
libc/misc/statfs/fstatfs64.c:29: error: 'fstatfs' undeclared here (not in a function)
Diffstat (limited to 'libc/misc/statfs/statvfs64.c')
-rw-r--r-- | libc/misc/statfs/statvfs64.c | 25 |
1 files changed, 24 insertions, 1 deletions
diff --git a/libc/misc/statfs/statvfs64.c b/libc/misc/statfs/statvfs64.c index c91e1fe26..66f648ac1 100644 --- a/libc/misc/statfs/statvfs64.c +++ b/libc/misc/statfs/statvfs64.c @@ -37,18 +37,41 @@ libc_hidden_proto(endmntent) #undef stat #define stat stat64 +#if !defined __UCLIBC_LINUX_SPECIFIC__ libc_hidden_proto(statfs64) +#else +libc_hidden_proto(statvfs) +#endif libc_hidden_proto(stat64) int statvfs64 (const char *file, struct statvfs64 *buf) { struct statfs64 fsbuf; struct stat64 st; +#if !defined __UCLIBC_LINUX_SPECIFIC__ + int ret; + struct statvfs buf32; + ret = statvfs (file, &buf32); + if (ret == 0) { + fsbuf.f_bsize = buf32.f_bsize; + fsbuf.f_frsize = buf32.f_frsize; + fsbuf.f_blocks = buf32.f_blocks; + fsbuf.f_bfree = buf32.f_bfree; + fsbuf.f_bavail = buf32.f_bavail; + fsbuf.f_files = buf32.f_files; + fsbuf.f_ffree = buf32.f_ffree; + if (sizeof (fsbuf.f_fsid) == sizeof(buf32.f_fsid)) + memcpy (&fsbuf.f_fsid, &buf32.f_fsid, sizeof(fsbuf.f_fsid)); + /* and if not, then you could approximate or whatever.. */ + fsbuf.f_namelen = buf32.f_namemax; + } else + return ret; +#else /* Get as much information as possible from the system. */ if (statfs64 (file, &fsbuf) < 0) return -1; - +#endif #define STAT(st) stat (file, st) #include "internal_statvfs.c" |