Remove <sys/statvfs.h> inlines for API level 19.

API level 19 is no longer supported by the NDK.

While I'm here, let's remove the duplicated structure defintion (as
we've already done for `struct stat`).

Test: treehugger
Change-Id: I9d8286f9e7ba803f3131b6dcb0486ff1b0f9d5d1
diff --git a/libc/bionic/sys_statvfs.cpp b/libc/bionic/sys_statvfs.cpp
index ef5dc57..b3a0aca 100644
--- a/libc/bionic/sys_statvfs.cpp
+++ b/libc/bionic/sys_statvfs.cpp
@@ -14,17 +14,36 @@
  * limitations under the License.
  */
 
+#include <sys/statfs.h>
 #include <sys/statvfs.h>
 
-// libc++ uses statvfs (for Darwin compatibility), but on Linux statvfs is
-// just another name for statfs, so it didn't arrive until API level 19. We
-// make the implementation available as inlines to support std::filesystem
-// for NDK users (see https://github.com/android-ndk/ndk/issues/609).
+static __inline void __bionic_statfs_to_statvfs(const struct statfs* src, struct statvfs* dst) {
+  dst->f_bsize = src->f_bsize;
+  dst->f_frsize = src->f_frsize;
+  dst->f_blocks = src->f_blocks;
+  dst->f_bfree = src->f_bfree;
+  dst->f_bavail = src->f_bavail;
+  dst->f_files = src->f_files;
+  dst->f_ffree = src->f_ffree;
+  dst->f_favail = src->f_ffree;
+  dst->f_fsid = src->f_fsid.__val[0] | static_cast<uint64_t>(src->f_fsid.__val[1]) << 32;
+  dst->f_flag = src->f_flags;
+  dst->f_namemax = src->f_namelen;
+}
 
-#define __BIONIC_SYS_STATVFS_INLINE /* Out of line. */
-#define __BIONIC_NEED_STATVFS_INLINES
-#undef __BIONIC_NEED_STATVFS64_INLINES
-#include <bits/sys_statvfs_inlines.h>
+int statvfs(const char* path, struct statvfs* result) {
+  struct statfs tmp;
+  if (statfs(path, &tmp) == -1) return -1;
+  __bionic_statfs_to_statvfs(&tmp, result);
+  return 0;
+}
+
+int fstatvfs(int fd, struct statvfs* result) {
+  struct statfs tmp;
+  if (fstatfs(fd, &tmp) == -1) return -1;
+  __bionic_statfs_to_statvfs(&tmp, result);
+  return 0;
+}
 
 // Historically we provided actual symbols for statvfs64 and fstatvfs64.
 // They're not particularly useful, but we can't take them away.
diff --git a/libc/include/android/legacy_sys_statvfs_inlines.h b/libc/include/android/legacy_sys_statvfs_inlines.h
deleted file mode 100644
index 369e6a2..0000000
--- a/libc/include/android/legacy_sys_statvfs_inlines.h
+++ /dev/null
@@ -1,48 +0,0 @@
-/*
- * Copyright (C) 2019 The Android Open Source Project
- * All rights reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- *  * Redistributions of source code must retain the above copyright
- *    notice, this list of conditions and the following disclaimer.
- *  * Redistributions in binary form must reproduce the above copyright
- *    notice, this list of conditions and the following disclaimer in
- *    the documentation and/or other materials provided with the
- *    distribution.
- *
- * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
- * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
- * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS
- * FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE
- * COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT,
- * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,
- * BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS
- * OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED
- * AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
- * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
- * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
- * SUCH DAMAGE.
- */
-
-#pragma once
-
-/**
- * @file legacy_sys_statvfs_inlines.h
- * @brief Inline definitions of statvfs/fstatvfs for old API levels.
- */
-
-#include <sys/cdefs.h>
-
-#if __ANDROID_API__ < 21
-
-#define __BIONIC_NEED_STATVFS64_INLINES
-#if __ANDROID_API__ < 19
-#define __BIONIC_NEED_STATVFS_INLINES
-#endif
-
-#define __BIONIC_SYS_STATVFS_INLINE static __inline
-#include <bits/sys_statvfs_inlines.h>
-
-#endif
diff --git a/libc/include/bits/sys_statvfs_inlines.h b/libc/include/bits/sys_statvfs_inlines.h
deleted file mode 100644
index 991fac7..0000000
--- a/libc/include/bits/sys_statvfs_inlines.h
+++ /dev/null
@@ -1,95 +0,0 @@
-/*
- * Copyright (C) 2019 The Android Open Source Project
- * All rights reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- *  * Redistributions of source code must retain the above copyright
- *    notice, this list of conditions and the following disclaimer.
- *  * Redistributions in binary form must reproduce the above copyright
- *    notice, this list of conditions and the following disclaimer in
- *    the documentation and/or other materials provided with the
- *    distribution.
- *
- * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
- * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
- * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS
- * FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE
- * COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT,
- * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,
- * BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS
- * OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED
- * AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
- * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
- * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
- * SUCH DAMAGE.
- */
-
-#pragma once
-
-#include <sys/cdefs.h>
-#include <sys/statfs.h>
-#include <sys/statvfs.h>
-
-#if defined(__BIONIC_SYS_STATVFS_INLINE)
-
-__BEGIN_DECLS
-
-#if defined(__BIONIC_NEED_STATVFS_INLINES)
-
-static __inline void __bionic_statfs_to_statvfs(const struct statfs* __src,
-                                                struct statvfs* __dst) {
-  __dst->f_bsize = __src->f_bsize;
-  __dst->f_frsize = __src->f_frsize;
-  __dst->f_blocks = __src->f_blocks;
-  __dst->f_bfree = __src->f_bfree;
-  __dst->f_bavail = __src->f_bavail;
-  __dst->f_files = __src->f_files;
-  __dst->f_ffree = __src->f_ffree;
-  __dst->f_favail = __src->f_ffree;
-  __dst->f_fsid = __src->f_fsid.__val[0] |
-      __BIONIC_CAST(static_cast, uint64_t, __src->f_fsid.__val[1]) << 32;
-  __dst->f_flag = __src->f_flags;
-  __dst->f_namemax = __src->f_namelen;
-}
-
-__BIONIC_SYS_STATVFS_INLINE int statvfs(const char* __path,
-                                        struct statvfs* __result) {
-  struct statfs __tmp;
-  int __rc = statfs(__path, &__tmp);
-  if (__rc != 0) return __rc;
-  __bionic_statfs_to_statvfs(&__tmp, __result);
-  return 0;
-}
-
-__BIONIC_SYS_STATVFS_INLINE int fstatvfs(int __fd,
-                                         struct statvfs* __result) {
-  struct statfs __tmp;
-  int __rc = fstatfs(__fd, &__tmp);
-  if (__rc != 0) return __rc;
-  __bionic_statfs_to_statvfs(&__tmp, __result);
-  return 0;
-}
-
-#endif
-
-#if defined(__BIONIC_NEED_STATVFS64_INLINES)
-
-__BIONIC_SYS_STATVFS_INLINE int statvfs64(const char* __path,
-                                          struct statvfs64* __result) {
-  return statvfs(__path, __BIONIC_CAST(reinterpret_cast, struct statvfs*,
-                                       __result));
-}
-
-__BIONIC_SYS_STATVFS_INLINE int fstatvfs64(int __fd,
-                                          struct statvfs64* __result) {
-  return fstatvfs(__fd, __BIONIC_CAST(reinterpret_cast, struct statvfs*,
-                                      __result));
-}
-
-#endif
-
-__END_DECLS
-
-#endif
diff --git a/libc/include/sys/statvfs.h b/libc/include/sys/statvfs.h
index 93fa3d7..793ee13 100644
--- a/libc/include/sys/statvfs.h
+++ b/libc/include/sys/statvfs.h
@@ -27,63 +27,39 @@
 
 __BEGIN_DECLS
 
-struct statvfs {
-  /** Block size. */
-  unsigned long f_bsize;
-  /** Fragment size. */
-  unsigned long f_frsize;
-  /** Total size of filesystem in `f_frsize` blocks. */
-  fsblkcnt_t f_blocks;
-  /** Number of free blocks. */
-  fsblkcnt_t f_bfree;
-  /** Number of free blocks for non-root. */
-  fsblkcnt_t f_bavail;
-  /** Number of inodes. */
-  fsfilcnt_t f_files;
-  /** Number of free inodes. */
-  fsfilcnt_t f_ffree;
-  /** Number of free inodes for non-root. */
-  fsfilcnt_t f_favail;
-  /** Filesystem id. */
-  unsigned long f_fsid;
-  /** Mount flags. (See `ST_` constants.) */
-  unsigned long f_flag;
-  /** Maximum filename length. */
-  unsigned long f_namemax;
+#define __STATVFS64_BODY \
+  /** Block size. */ \
+  unsigned long f_bsize; \
+  /** Fragment size. */ \
+  unsigned long f_frsize; \
+  /** Total size of filesystem in `f_frsize` blocks. */ \
+  fsblkcnt_t f_blocks; \
+  /** Number of free blocks. */ \
+  fsblkcnt_t f_bfree; \
+  /** Number of free blocks for non-root. */ \
+  fsblkcnt_t f_bavail; \
+  /** Number of inodes. */ \
+  fsfilcnt_t f_files; \
+  /** Number of free inodes. */ \
+  fsfilcnt_t f_ffree; \
+  /** Number of free inodes for non-root. */ \
+  fsfilcnt_t f_favail; \
+  /** Filesystem id. */ \
+  unsigned long f_fsid; \
+  /** Mount flags. (See `ST_` constants.) */ \
+  unsigned long f_flag; \
+  /** Maximum filename length. */ \
+  unsigned long f_namemax; \
 
 #if defined(__LP64__)
-  uint32_t __f_reserved[6];
+#define __STATVFS64_CODA uint32_t __f_reserved[6];
+#else
+#define __STATVFS64_CODA
 #endif
-};
 
-struct statvfs64 {
-  /** Block size. */
-  unsigned long f_bsize;
-  /** Fragment size. */
-  unsigned long f_frsize;
-  /** Total size of filesystem in `f_frsize` blocks. */
-  fsblkcnt_t f_blocks;
-  /** Number of free blocks. */
-  fsblkcnt_t f_bfree;
-  /** Number of free blocks for non-root. */
-  fsblkcnt_t f_bavail;
-  /** Number of inodes. */
-  fsfilcnt_t f_files;
-  /** Number of free inodes. */
-  fsfilcnt_t f_ffree;
-  /** Number of free inodes for non-root. */
-  fsfilcnt_t f_favail;
-  /** Filesystem id. */
-  unsigned long f_fsid;
-  /** Mount flags. (See `ST_` constants.) */
-  unsigned long f_flag;
-  /** Maximum filename length. */
-  unsigned long f_namemax;
+struct statvfs { __STATVFS64_BODY __STATVFS64_CODA };
 
-#if defined(__LP64__)
-  uint32_t __f_reserved[6];
-#endif
-};
+struct statvfs64 { __STATVFS64_BODY __STATVFS64_CODA };
 
 /** Flag for `f_flag` in `struct statvfs`: mounted read-only. */
 #define ST_RDONLY      0x0001
@@ -112,14 +88,13 @@
 /** Flag for `f_flag` in `struct statvfs`: see `MS_RELATIME`. */
 #define ST_RELATIME    0x1000
 
-#if __ANDROID_API__ >= 19
-// These functions are implemented as static inlines before API level 19.
-
 /**
  * [statvfs(3)](http://man7.org/linux/man-pages/man3/statvfs.3.html)
  * queries filesystem statistics for the given path.
  *
  * Returns 0 on success, and returns -1 and sets `errno` on failure.
+ *
+ * Available since API level 19.
  */
 int statvfs(const char* __path, struct statvfs* __buf) __INTRODUCED_IN(19);
 
@@ -128,22 +103,15 @@
  * queries filesystem statistics for the given file descriptor.
  *
  * Returns 0 on success, and returns -1 and sets `errno` on failure.
+ *
+ * Available since API level 19.
  */
 int fstatvfs(int __fd, struct statvfs* __buf) __INTRODUCED_IN(19);
 
-#endif
-
-#if __ANDROID_API__ >= 21
-// These functions are implemented as static inlines before API level 21.
-
-/** Equivalent to statvfs(). */
+/** Equivalent to statvfs() . */
 int statvfs64(const char* __path, struct statvfs64* __buf) __INTRODUCED_IN(21);
 
 /** Equivalent to fstatvfs(). */
 int fstatvfs64(int __fd, struct statvfs64* __buf) __INTRODUCED_IN(21);
 
-#endif
-
 __END_DECLS
-
-#include <android/legacy_sys_statvfs_inlines.h>