blob: 93fa3d7a2a13d3f56a201413a645703e6459fc61 [file] [log] [blame]
Elliott Hughes06040fd2013-07-09 13:25:03 -07001/*
2 * Copyright (C) 2013 The Android Open Source Project
3 *
4 * Licensed under the Apache License, Version 2.0 (the "License");
5 * you may not use this file except in compliance with the License.
6 * You may obtain a copy of the License at
7 *
8 * http://www.apache.org/licenses/LICENSE-2.0
9 *
10 * Unless required by applicable law or agreed to in writing, software
11 * distributed under the License is distributed on an "AS IS" BASIS,
12 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13 * See the License for the specific language governing permissions and
14 * limitations under the License.
15 */
16
Elliott Hughes261bd742019-08-29 20:45:14 -070017#pragma once
18
19/**
20 * @file sys/statvfs.h
21 * @brief Filesystem statistics.
22 */
Elliott Hughes06040fd2013-07-09 13:25:03 -070023
24#include <stdint.h>
25#include <sys/cdefs.h>
26#include <sys/types.h>
27
28__BEGIN_DECLS
29
Elliott Hughes261bd742019-08-29 20:45:14 -070030struct statvfs {
31 /** Block size. */
32 unsigned long f_bsize;
33 /** Fragment size. */
34 unsigned long f_frsize;
35 /** Total size of filesystem in `f_frsize` blocks. */
36 fsblkcnt_t f_blocks;
37 /** Number of free blocks. */
38 fsblkcnt_t f_bfree;
39 /** Number of free blocks for non-root. */
40 fsblkcnt_t f_bavail;
41 /** Number of inodes. */
42 fsfilcnt_t f_files;
43 /** Number of free inodes. */
44 fsfilcnt_t f_ffree;
45 /** Number of free inodes for non-root. */
46 fsfilcnt_t f_favail;
47 /** Filesystem id. */
48 unsigned long f_fsid;
49 /** Mount flags. (See `ST_` constants.) */
50 unsigned long f_flag;
51 /** Maximum filename length. */
52 unsigned long f_namemax;
53
54#if defined(__LP64__)
55 uint32_t __f_reserved[6];
Calin Juravle7bec1212014-05-09 22:28:09 +010056#endif
Elliott Hughes261bd742019-08-29 20:45:14 -070057};
Calin Juravle7bec1212014-05-09 22:28:09 +010058
Elliott Hughes261bd742019-08-29 20:45:14 -070059struct statvfs64 {
60 /** Block size. */
61 unsigned long f_bsize;
62 /** Fragment size. */
63 unsigned long f_frsize;
64 /** Total size of filesystem in `f_frsize` blocks. */
65 fsblkcnt_t f_blocks;
66 /** Number of free blocks. */
67 fsblkcnt_t f_bfree;
68 /** Number of free blocks for non-root. */
69 fsblkcnt_t f_bavail;
70 /** Number of inodes. */
71 fsfilcnt_t f_files;
72 /** Number of free inodes. */
73 fsfilcnt_t f_ffree;
74 /** Number of free inodes for non-root. */
75 fsfilcnt_t f_favail;
76 /** Filesystem id. */
77 unsigned long f_fsid;
78 /** Mount flags. (See `ST_` constants.) */
79 unsigned long f_flag;
80 /** Maximum filename length. */
81 unsigned long f_namemax;
Elliott Hughesdb1ea342014-01-17 18:42:49 -080082
Elliott Hughes261bd742019-08-29 20:45:14 -070083#if defined(__LP64__)
84 uint32_t __f_reserved[6];
85#endif
86};
Elliott Hughes06040fd2013-07-09 13:25:03 -070087
Elliott Hughes261bd742019-08-29 20:45:14 -070088/** Flag for `f_flag` in `struct statvfs`: mounted read-only. */
Elliott Hughes06040fd2013-07-09 13:25:03 -070089#define ST_RDONLY 0x0001
Elliott Hughes261bd742019-08-29 20:45:14 -070090
91/** Flag for `f_flag` in `struct statvfs`: setuid/setgid ignored. */
Elliott Hughes06040fd2013-07-09 13:25:03 -070092#define ST_NOSUID 0x0002
Elliott Hughes261bd742019-08-29 20:45:14 -070093
94/** Flag for `f_flag` in `struct statvfs`: access to device files disallowed. */
Elliott Hughes06040fd2013-07-09 13:25:03 -070095#define ST_NODEV 0x0004
Elliott Hughes261bd742019-08-29 20:45:14 -070096
97/** Flag for `f_flag` in `struct statvfs`: execution disallowed. */
Elliott Hughes06040fd2013-07-09 13:25:03 -070098#define ST_NOEXEC 0x0008
Elliott Hughes261bd742019-08-29 20:45:14 -070099
100/** Flag for `f_flag` in `struct statvfs`: writes synced immediately. */
Elliott Hughes06040fd2013-07-09 13:25:03 -0700101#define ST_SYNCHRONOUS 0x0010
Elliott Hughes261bd742019-08-29 20:45:14 -0700102
103/** Flag for `f_flag` in `struct statvfs`: mandatory locking permitted. */
Elliott Hughes06040fd2013-07-09 13:25:03 -0700104#define ST_MANDLOCK 0x0040
Elliott Hughes261bd742019-08-29 20:45:14 -0700105
106/** Flag for `f_flag` in `struct statvfs`: access times not updated. */
Elliott Hughes06040fd2013-07-09 13:25:03 -0700107#define ST_NOATIME 0x0400
Elliott Hughes261bd742019-08-29 20:45:14 -0700108
109/** Flag for `f_flag` in `struct statvfs`: directory access times not updated. */
Elliott Hughes06040fd2013-07-09 13:25:03 -0700110#define ST_NODIRATIME 0x0800
Elliott Hughes261bd742019-08-29 20:45:14 -0700111
112/** Flag for `f_flag` in `struct statvfs`: see `MS_RELATIME`. */
Elliott Hughes06040fd2013-07-09 13:25:03 -0700113#define ST_RELATIME 0x1000
114
Elliott Hughes261bd742019-08-29 20:45:14 -0700115#if __ANDROID_API__ >= 19
116// These functions are implemented as static inlines before API level 19.
117
118/**
119 * [statvfs(3)](http://man7.org/linux/man-pages/man3/statvfs.3.html)
120 * queries filesystem statistics for the given path.
121 *
122 * Returns 0 on success, and returns -1 and sets `errno` on failure.
123 */
Elliott Hughesff26a162017-08-17 22:34:21 +0000124int statvfs(const char* __path, struct statvfs* __buf) __INTRODUCED_IN(19);
Elliott Hughes261bd742019-08-29 20:45:14 -0700125
126/**
127 * [fstatvfs(3)](http://man7.org/linux/man-pages/man3/fstatvfs.3.html)
128 * queries filesystem statistics for the given file descriptor.
129 *
130 * Returns 0 on success, and returns -1 and sets `errno` on failure.
131 */
Elliott Hughesff26a162017-08-17 22:34:21 +0000132int fstatvfs(int __fd, struct statvfs* __buf) __INTRODUCED_IN(19);
Elliott Hughes261bd742019-08-29 20:45:14 -0700133
134#endif
135
136#if __ANDROID_API__ >= 21
137// These functions are implemented as static inlines before API level 21.
138
139/** Equivalent to statvfs(). */
140int statvfs64(const char* __path, struct statvfs64* __buf) __INTRODUCED_IN(21);
141
142/** Equivalent to fstatvfs(). */
Elliott Hughesff26a162017-08-17 22:34:21 +0000143int fstatvfs64(int __fd, struct statvfs64* __buf) __INTRODUCED_IN(21);
Elliott Hughes06040fd2013-07-09 13:25:03 -0700144
Elliott Hughes261bd742019-08-29 20:45:14 -0700145#endif
146
Elliott Hughes06040fd2013-07-09 13:25:03 -0700147__END_DECLS
148
Elliott Hughes261bd742019-08-29 20:45:14 -0700149#include <android/legacy_sys_statvfs_inlines.h>