/* * Copyright (C) 2013 The Android Open Source Project * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ #pragma once /** * @file sys/statvfs.h * @brief Filesystem statistics. */ #include #include #include __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; #if defined(__LP64__) uint32_t __f_reserved[6]; #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; #if defined(__LP64__) uint32_t __f_reserved[6]; #endif }; /** Flag for `f_flag` in `struct statvfs`: mounted read-only. */ #define ST_RDONLY 0x0001 /** Flag for `f_flag` in `struct statvfs`: setuid/setgid ignored. */ #define ST_NOSUID 0x0002 /** Flag for `f_flag` in `struct statvfs`: access to device files disallowed. */ #define ST_NODEV 0x0004 /** Flag for `f_flag` in `struct statvfs`: execution disallowed. */ #define ST_NOEXEC 0x0008 /** Flag for `f_flag` in `struct statvfs`: writes synced immediately. */ #define ST_SYNCHRONOUS 0x0010 /** Flag for `f_flag` in `struct statvfs`: mandatory locking permitted. */ #define ST_MANDLOCK 0x0040 /** Flag for `f_flag` in `struct statvfs`: access times not updated. */ #define ST_NOATIME 0x0400 /** Flag for `f_flag` in `struct statvfs`: directory access times not updated. */ #define ST_NODIRATIME 0x0800 /** 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. */ int statvfs(const char* __path, struct statvfs* __buf) __INTRODUCED_IN(19); /** * [fstatvfs(3)](http://man7.org/linux/man-pages/man3/fstatvfs.3.html) * queries filesystem statistics for the given file descriptor. * * Returns 0 on success, and returns -1 and sets `errno` on failure. */ 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(). */ 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