• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1 /*
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 
17 #pragma once
18 
19 /**
20  * @file sys/statvfs.h
21  * @brief Filesystem statistics.
22  */
23 
24 #include <stdint.h>
25 #include <sys/cdefs.h>
26 #include <sys/types.h>
27 
28 __BEGIN_DECLS
29 
30 #define __STATVFS64_BODY \
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 #define __STATVFS64_CODA uint32_t __f_reserved[6];
56 #else
57 #define __STATVFS64_CODA
58 #endif
59 
60 struct statvfs { __STATVFS64_BODY __STATVFS64_CODA };
61 
62 struct statvfs64 { __STATVFS64_BODY __STATVFS64_CODA };
63 
64 /** Flag for `f_flag` in `struct statvfs`: mounted read-only. */
65 #define ST_RDONLY      0x0001
66 
67 /** Flag for `f_flag` in `struct statvfs`: setuid/setgid ignored. */
68 #define ST_NOSUID      0x0002
69 
70 /** Flag for `f_flag` in `struct statvfs`: access to device files disallowed. */
71 #define ST_NODEV       0x0004
72 
73 /** Flag for `f_flag` in `struct statvfs`: execution disallowed. */
74 #define ST_NOEXEC      0x0008
75 
76 /** Flag for `f_flag` in `struct statvfs`: writes synced immediately. */
77 #define ST_SYNCHRONOUS 0x0010
78 
79 /** Flag for `f_flag` in `struct statvfs`: mandatory locking permitted. */
80 #define ST_MANDLOCK    0x0040
81 
82 /** Flag for `f_flag` in `struct statvfs`: access times not updated. */
83 #define ST_NOATIME     0x0400
84 
85 /** Flag for `f_flag` in `struct statvfs`: directory access times not updated. */
86 #define ST_NODIRATIME  0x0800
87 
88 /** Flag for `f_flag` in `struct statvfs`: see `MS_RELATIME`. */
89 #define ST_RELATIME    0x1000
90 
91 /** Flag for `f_flag` in `struct statvfs`: don't follow symlinks. */
92 #define ST_NOSYMFOLLOW 0x2000
93 
94 /**
95  * [statvfs(3)](http://man7.org/linux/man-pages/man3/statvfs.3.html)
96  * queries filesystem statistics for the given path.
97  *
98  * Returns 0 on success, and returns -1 and sets `errno` on failure.
99  */
100 int statvfs(const char* _Nonnull __path, struct statvfs* _Nonnull __buf);
101 
102 /**
103  * [fstatvfs(3)](http://man7.org/linux/man-pages/man3/fstatvfs.3.html)
104  * queries filesystem statistics for the given file descriptor.
105  *
106  * Returns 0 on success, and returns -1 and sets `errno` on failure.
107  */
108 int fstatvfs(int __fd, struct statvfs* _Nonnull __buf);
109 
110 /** Equivalent to statvfs() . */
111 int statvfs64(const char* _Nonnull __path, struct statvfs64* _Nonnull __buf);
112 
113 /** Equivalent to fstatvfs(). */
114 int fstatvfs64(int __fd, struct statvfs64* _Nonnull __buf);
115 
116 __END_DECLS
117