|  | /* | 
|  | * 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 <stdint.h> | 
|  | #include <sys/cdefs.h> | 
|  | #include <sys/types.h> | 
|  |  | 
|  | __BEGIN_DECLS | 
|  |  | 
|  | #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__) | 
|  | #define __STATVFS64_CODA uint32_t __f_reserved[6]; | 
|  | #else | 
|  | #define __STATVFS64_CODA | 
|  | #endif | 
|  |  | 
|  | struct statvfs { __STATVFS64_BODY __STATVFS64_CODA }; | 
|  |  | 
|  | struct statvfs64 { __STATVFS64_BODY __STATVFS64_CODA }; | 
|  |  | 
|  | /** 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 | 
|  |  | 
|  | /** | 
|  | * [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); | 
|  |  | 
|  | /** | 
|  | * [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. | 
|  | * | 
|  | * Available since API level 19. | 
|  | */ | 
|  | int fstatvfs(int __fd, struct statvfs* __buf) __INTRODUCED_IN(19); | 
|  |  | 
|  | /** 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); | 
|  |  | 
|  | __END_DECLS |