|
@@ -13,10 +13,39 @@
|
|
|
#include <sys/vfs.h>
|
|
|
|
|
|
extern __typeof(statfs) __libc_statfs attribute_hidden;
|
|
|
-#define __NR___libc_statfs __NR_statfs
|
|
|
+
|
|
|
+#if defined __NR_statfs64 && !defined __NR_statfs
|
|
|
+
|
|
|
+int __libc_statfs(const char *path, struct statfs *buf)
|
|
|
+{
|
|
|
+ int err = INLINE_SYSCALL(statfs64, 3, path, sizeof(*buf), buf);
|
|
|
+
|
|
|
+ if (err == 0) {
|
|
|
+
|
|
|
+ if (buf->__pad1 || buf->__pad2 || buf->__pad3 ||
|
|
|
+ buf->__pad4 || buf->__pad5) {
|
|
|
+ __set_errno(EOVERFLOW);
|
|
|
+ return -1;
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+ return err;
|
|
|
+}
|
|
|
+# if defined __UCLIBC_LINUX_SPECIFIC__ || defined __UCLIBC_HAS_THREADS_NATIVE__
|
|
|
+
|
|
|
+weak_alias(__libc_statfs, statfs)
|
|
|
+# endif
|
|
|
+
|
|
|
+
|
|
|
+#else
|
|
|
+
|
|
|
+# define __NR___libc_statfs __NR_statfs
|
|
|
_syscall2(int, __libc_statfs, const char *, path, struct statfs *, buf)
|
|
|
|
|
|
-#if defined __UCLIBC_LINUX_SPECIFIC__ || defined __UCLIBC_HAS_THREADS_NATIVE__
|
|
|
+# if defined __UCLIBC_LINUX_SPECIFIC__ || defined __UCLIBC_HAS_THREADS_NATIVE__
|
|
|
|
|
|
-weak_alias(__libc_statfs,statfs)
|
|
|
+weak_alias(__libc_statfs, statfs)
|
|
|
+# endif
|
|
|
+
|
|
|
#endif
|
|
|
+libc_hidden_def(statfs)
|