11dc9e472e19acfe6dc7f41e429236e7eef7ceda1The Android Open Source Project/* 21dc9e472e19acfe6dc7f41e429236e7eef7ceda1The Android Open Source Project * Copyright (C) 2008 The Android Open Source Project 31dc9e472e19acfe6dc7f41e429236e7eef7ceda1The Android Open Source Project * All rights reserved. 41dc9e472e19acfe6dc7f41e429236e7eef7ceda1The Android Open Source Project * 51dc9e472e19acfe6dc7f41e429236e7eef7ceda1The Android Open Source Project * Redistribution and use in source and binary forms, with or without 61dc9e472e19acfe6dc7f41e429236e7eef7ceda1The Android Open Source Project * modification, are permitted provided that the following conditions 71dc9e472e19acfe6dc7f41e429236e7eef7ceda1The Android Open Source Project * are met: 81dc9e472e19acfe6dc7f41e429236e7eef7ceda1The Android Open Source Project * * Redistributions of source code must retain the above copyright 91dc9e472e19acfe6dc7f41e429236e7eef7ceda1The Android Open Source Project * notice, this list of conditions and the following disclaimer. 101dc9e472e19acfe6dc7f41e429236e7eef7ceda1The Android Open Source Project * * Redistributions in binary form must reproduce the above copyright 111dc9e472e19acfe6dc7f41e429236e7eef7ceda1The Android Open Source Project * notice, this list of conditions and the following disclaimer in 121dc9e472e19acfe6dc7f41e429236e7eef7ceda1The Android Open Source Project * the documentation and/or other materials provided with the 131dc9e472e19acfe6dc7f41e429236e7eef7ceda1The Android Open Source Project * distribution. 141dc9e472e19acfe6dc7f41e429236e7eef7ceda1The Android Open Source Project * 151dc9e472e19acfe6dc7f41e429236e7eef7ceda1The Android Open Source Project * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS 161dc9e472e19acfe6dc7f41e429236e7eef7ceda1The Android Open Source Project * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT 171dc9e472e19acfe6dc7f41e429236e7eef7ceda1The Android Open Source Project * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS 181dc9e472e19acfe6dc7f41e429236e7eef7ceda1The Android Open Source Project * FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE 191dc9e472e19acfe6dc7f41e429236e7eef7ceda1The Android Open Source Project * COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, 201dc9e472e19acfe6dc7f41e429236e7eef7ceda1The Android Open Source Project * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, 211dc9e472e19acfe6dc7f41e429236e7eef7ceda1The Android Open Source Project * BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS 221dc9e472e19acfe6dc7f41e429236e7eef7ceda1The Android Open Source Project * OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED 231dc9e472e19acfe6dc7f41e429236e7eef7ceda1The Android Open Source Project * AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, 241dc9e472e19acfe6dc7f41e429236e7eef7ceda1The Android Open Source Project * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT 251dc9e472e19acfe6dc7f41e429236e7eef7ceda1The Android Open Source Project * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF 261dc9e472e19acfe6dc7f41e429236e7eef7ceda1The Android Open Source Project * SUCH DAMAGE. 271dc9e472e19acfe6dc7f41e429236e7eef7ceda1The Android Open Source Project */ 281dc9e472e19acfe6dc7f41e429236e7eef7ceda1The Android Open Source Project#ifndef _SYS_VFS_H_ 291dc9e472e19acfe6dc7f41e429236e7eef7ceda1The Android Open Source Project#define _SYS_VFS_H_ 301dc9e472e19acfe6dc7f41e429236e7eef7ceda1The Android Open Source Project 311dc9e472e19acfe6dc7f41e429236e7eef7ceda1The Android Open Source Project#include <stdint.h> 321dc9e472e19acfe6dc7f41e429236e7eef7ceda1The Android Open Source Project#include <sys/cdefs.h> 331dc9e472e19acfe6dc7f41e429236e7eef7ceda1The Android Open Source Project#include <sys/types.h> 341dc9e472e19acfe6dc7f41e429236e7eef7ceda1The Android Open Source Project 351dc9e472e19acfe6dc7f41e429236e7eef7ceda1The Android Open Source Project__BEGIN_DECLS 361dc9e472e19acfe6dc7f41e429236e7eef7ceda1The Android Open Source Project 3701a700e5d2ee9b5bd61546faffcb453fd1d6325cElliott Hughes/* The kernel's __kernel_fsid_t has a 'val' member but glibc uses '__val'. */ 3801a700e5d2ee9b5bd61546faffcb453fd1d6325cElliott Hughestypedef struct { int __val[2]; } __fsid_t; 39abfc88fed79fced91b3b2cd8f3eb20f98c03452dElliott Hughestypedef __fsid_t fsid_t; 4001a700e5d2ee9b5bd61546faffcb453fd1d6325cElliott Hughes 41645d0312c2d6b6492cc4b3891bc1a91908dc24b7Chris Dearman#if defined(__aarch64__) || defined(__x86_64__) 42db1ea3474899ebbd783aba872d3005f95a816d0fElliott Hughes#define __STATFS64_BODY \ 43db1ea3474899ebbd783aba872d3005f95a816d0fElliott Hughes uint64_t f_type; \ 44db1ea3474899ebbd783aba872d3005f95a816d0fElliott Hughes uint64_t f_bsize; \ 45db1ea3474899ebbd783aba872d3005f95a816d0fElliott Hughes uint64_t f_blocks; \ 46db1ea3474899ebbd783aba872d3005f95a816d0fElliott Hughes uint64_t f_bfree; \ 47db1ea3474899ebbd783aba872d3005f95a816d0fElliott Hughes uint64_t f_bavail; \ 48db1ea3474899ebbd783aba872d3005f95a816d0fElliott Hughes uint64_t f_files; \ 49db1ea3474899ebbd783aba872d3005f95a816d0fElliott Hughes uint64_t f_ffree; \ 50db1ea3474899ebbd783aba872d3005f95a816d0fElliott Hughes fsid_t f_fsid; \ 51db1ea3474899ebbd783aba872d3005f95a816d0fElliott Hughes uint64_t f_namelen; \ 52db1ea3474899ebbd783aba872d3005f95a816d0fElliott Hughes uint64_t f_frsize; \ 53db1ea3474899ebbd783aba872d3005f95a816d0fElliott Hughes uint64_t f_flags; \ 54db1ea3474899ebbd783aba872d3005f95a816d0fElliott Hughes uint64_t f_spare[4]; \ 55db1ea3474899ebbd783aba872d3005f95a816d0fElliott Hughes 56645d0312c2d6b6492cc4b3891bc1a91908dc24b7Chris Dearman#elif defined(__mips__) && defined(__LP64__) 57645d0312c2d6b6492cc4b3891bc1a91908dc24b7Chris Dearman/* 64-bit MIPS. */ 58db1ea3474899ebbd783aba872d3005f95a816d0fElliott Hughes#define __STATFS64_BODY \ 59db1ea3474899ebbd783aba872d3005f95a816d0fElliott Hughes uint64_t f_type; \ 60db1ea3474899ebbd783aba872d3005f95a816d0fElliott Hughes uint64_t f_bsize; \ 61db1ea3474899ebbd783aba872d3005f95a816d0fElliott Hughes uint64_t f_frsize; /* Fragment size - unsupported. */ \ 62db1ea3474899ebbd783aba872d3005f95a816d0fElliott Hughes uint64_t f_blocks; \ 63db1ea3474899ebbd783aba872d3005f95a816d0fElliott Hughes uint64_t f_bfree; \ 64db1ea3474899ebbd783aba872d3005f95a816d0fElliott Hughes uint64_t f_files; \ 65db1ea3474899ebbd783aba872d3005f95a816d0fElliott Hughes uint64_t f_ffree; \ 66db1ea3474899ebbd783aba872d3005f95a816d0fElliott Hughes uint64_t f_bavail; \ 67db1ea3474899ebbd783aba872d3005f95a816d0fElliott Hughes fsid_t f_fsid; \ 68db1ea3474899ebbd783aba872d3005f95a816d0fElliott Hughes uint64_t f_namelen; \ 69db1ea3474899ebbd783aba872d3005f95a816d0fElliott Hughes uint64_t f_flags; \ 70db1ea3474899ebbd783aba872d3005f95a816d0fElliott Hughes uint64_t f_spare[5]; \ 71db1ea3474899ebbd783aba872d3005f95a816d0fElliott Hughes 72c7fdee72ddfe950594e20a527bfb199866428c17Elliott Hughes#elif defined(__mips__) 73c7fdee72ddfe950594e20a527bfb199866428c17Elliott Hughes/* 32-bit MIPS (corresponds to the kernel's statfs64 type). */ 74db1ea3474899ebbd783aba872d3005f95a816d0fElliott Hughes#define __STATFS64_BODY \ 75db1ea3474899ebbd783aba872d3005f95a816d0fElliott Hughes uint32_t f_type; \ 76db1ea3474899ebbd783aba872d3005f95a816d0fElliott Hughes uint32_t f_bsize; \ 77db1ea3474899ebbd783aba872d3005f95a816d0fElliott Hughes uint32_t f_frsize; \ 78db1ea3474899ebbd783aba872d3005f95a816d0fElliott Hughes uint32_t __pad; \ 79db1ea3474899ebbd783aba872d3005f95a816d0fElliott Hughes uint64_t f_blocks; \ 80db1ea3474899ebbd783aba872d3005f95a816d0fElliott Hughes uint64_t f_bfree; \ 81db1ea3474899ebbd783aba872d3005f95a816d0fElliott Hughes uint64_t f_files; \ 82db1ea3474899ebbd783aba872d3005f95a816d0fElliott Hughes uint64_t f_ffree; \ 83db1ea3474899ebbd783aba872d3005f95a816d0fElliott Hughes uint64_t f_bavail; \ 84db1ea3474899ebbd783aba872d3005f95a816d0fElliott Hughes fsid_t f_fsid; \ 85db1ea3474899ebbd783aba872d3005f95a816d0fElliott Hughes uint32_t f_namelen; \ 86db1ea3474899ebbd783aba872d3005f95a816d0fElliott Hughes uint32_t f_flags; \ 87db1ea3474899ebbd783aba872d3005f95a816d0fElliott Hughes uint32_t f_spare[5]; \ 88db1ea3474899ebbd783aba872d3005f95a816d0fElliott Hughes 896437eac15a5b595ab26ef51834509c44695eb7e4Raghu Gandham#else 90c7fdee72ddfe950594e20a527bfb199866428c17Elliott Hughes/* 32-bit ARM or x86 (corresponds to the kernel's statfs64 type). */ 91db1ea3474899ebbd783aba872d3005f95a816d0fElliott Hughes#define __STATFS64_BODY \ 92db1ea3474899ebbd783aba872d3005f95a816d0fElliott Hughes uint32_t f_type; \ 93db1ea3474899ebbd783aba872d3005f95a816d0fElliott Hughes uint32_t f_bsize; \ 94db1ea3474899ebbd783aba872d3005f95a816d0fElliott Hughes uint64_t f_blocks; \ 95db1ea3474899ebbd783aba872d3005f95a816d0fElliott Hughes uint64_t f_bfree; \ 96db1ea3474899ebbd783aba872d3005f95a816d0fElliott Hughes uint64_t f_bavail; \ 97db1ea3474899ebbd783aba872d3005f95a816d0fElliott Hughes uint64_t f_files; \ 98db1ea3474899ebbd783aba872d3005f95a816d0fElliott Hughes uint64_t f_ffree; \ 99db1ea3474899ebbd783aba872d3005f95a816d0fElliott Hughes fsid_t f_fsid; \ 100db1ea3474899ebbd783aba872d3005f95a816d0fElliott Hughes uint32_t f_namelen; \ 101db1ea3474899ebbd783aba872d3005f95a816d0fElliott Hughes uint32_t f_frsize; \ 102db1ea3474899ebbd783aba872d3005f95a816d0fElliott Hughes uint32_t f_flags; \ 103db1ea3474899ebbd783aba872d3005f95a816d0fElliott Hughes uint32_t f_spare[4]; \ 104db1ea3474899ebbd783aba872d3005f95a816d0fElliott Hughes 1056437eac15a5b595ab26ef51834509c44695eb7e4Raghu Gandham#endif 1061dc9e472e19acfe6dc7f41e429236e7eef7ceda1The Android Open Source Project 107db1ea3474899ebbd783aba872d3005f95a816d0fElliott Hughesstruct statfs { __STATFS64_BODY }; 108db1ea3474899ebbd783aba872d3005f95a816d0fElliott Hughesstruct statfs64 { __STATFS64_BODY }; 10901a700e5d2ee9b5bd61546faffcb453fd1d6325cElliott Hughes 110f963da22ecc25c51971d802037736ae540321441Calin Juravle#undef __STATFS64_BODY 111f963da22ecc25c51971d802037736ae540321441Calin Juravle 11201a700e5d2ee9b5bd61546faffcb453fd1d6325cElliott Hughes/* Declare that we have the f_namelen, f_frsize, and f_flags fields. */ 11301a700e5d2ee9b5bd61546faffcb453fd1d6325cElliott Hughes#define _STATFS_F_NAMELEN 11401a700e5d2ee9b5bd61546faffcb453fd1d6325cElliott Hughes#define _STATFS_F_FRSIZE 11501a700e5d2ee9b5bd61546faffcb453fd1d6325cElliott Hughes#define _STATFS_F_FLAGS 11601a700e5d2ee9b5bd61546faffcb453fd1d6325cElliott Hughes 1171dc9e472e19acfe6dc7f41e429236e7eef7ceda1The Android Open Source Project#define ADFS_SUPER_MAGIC 0xadf5 1181dc9e472e19acfe6dc7f41e429236e7eef7ceda1The Android Open Source Project#define AFFS_SUPER_MAGIC 0xADFF 1191dc9e472e19acfe6dc7f41e429236e7eef7ceda1The Android Open Source Project#define BEFS_SUPER_MAGIC 0x42465331 1201dc9e472e19acfe6dc7f41e429236e7eef7ceda1The Android Open Source Project#define BFS_MAGIC 0x1BADFACE 1211dc9e472e19acfe6dc7f41e429236e7eef7ceda1The Android Open Source Project#define CIFS_MAGIC_NUMBER 0xFF534D42 1221dc9e472e19acfe6dc7f41e429236e7eef7ceda1The Android Open Source Project#define CODA_SUPER_MAGIC 0x73757245 1231dc9e472e19acfe6dc7f41e429236e7eef7ceda1The Android Open Source Project#define COH_SUPER_MAGIC 0x012FF7B7 1241dc9e472e19acfe6dc7f41e429236e7eef7ceda1The Android Open Source Project#define CRAMFS_MAGIC 0x28cd3d45 1251dc9e472e19acfe6dc7f41e429236e7eef7ceda1The Android Open Source Project#define DEVFS_SUPER_MAGIC 0x1373 1261dc9e472e19acfe6dc7f41e429236e7eef7ceda1The Android Open Source Project#define EFS_SUPER_MAGIC 0x00414A53 1271dc9e472e19acfe6dc7f41e429236e7eef7ceda1The Android Open Source Project#define EXT_SUPER_MAGIC 0x137D 1281dc9e472e19acfe6dc7f41e429236e7eef7ceda1The Android Open Source Project#define EXT2_OLD_SUPER_MAGIC 0xEF51 1291dc9e472e19acfe6dc7f41e429236e7eef7ceda1The Android Open Source Project#define EXT2_SUPER_MAGIC 0xEF53 1301dc9e472e19acfe6dc7f41e429236e7eef7ceda1The Android Open Source Project#define EXT3_SUPER_MAGIC 0xEF53 1311dc9e472e19acfe6dc7f41e429236e7eef7ceda1The Android Open Source Project#define HFS_SUPER_MAGIC 0x4244 1321dc9e472e19acfe6dc7f41e429236e7eef7ceda1The Android Open Source Project#define HPFS_SUPER_MAGIC 0xF995E849 1331dc9e472e19acfe6dc7f41e429236e7eef7ceda1The Android Open Source Project#define HUGETLBFS_MAGIC 0x958458f6 1341dc9e472e19acfe6dc7f41e429236e7eef7ceda1The Android Open Source Project#define ISOFS_SUPER_MAGIC 0x9660 1351dc9e472e19acfe6dc7f41e429236e7eef7ceda1The Android Open Source Project#define JFFS2_SUPER_MAGIC 0x72b6 1361dc9e472e19acfe6dc7f41e429236e7eef7ceda1The Android Open Source Project#define JFS_SUPER_MAGIC 0x3153464a 1371dc9e472e19acfe6dc7f41e429236e7eef7ceda1The Android Open Source Project#define MINIX_SUPER_MAGIC 0x137F /* orig. minix */ 1381dc9e472e19acfe6dc7f41e429236e7eef7ceda1The Android Open Source Project#define MINIX_SUPER_MAGIC2 0x138F /* 30 char minix */ 1391dc9e472e19acfe6dc7f41e429236e7eef7ceda1The Android Open Source Project#define MINIX2_SUPER_MAGIC 0x2468 /* minix V2 */ 1401dc9e472e19acfe6dc7f41e429236e7eef7ceda1The Android Open Source Project#define MINIX2_SUPER_MAGIC2 0x2478 /* minix V2, 30 char names */ 1411dc9e472e19acfe6dc7f41e429236e7eef7ceda1The Android Open Source Project#define MSDOS_SUPER_MAGIC 0x4d44 1421dc9e472e19acfe6dc7f41e429236e7eef7ceda1The Android Open Source Project#define NCP_SUPER_MAGIC 0x564c 1431dc9e472e19acfe6dc7f41e429236e7eef7ceda1The Android Open Source Project#define NFS_SUPER_MAGIC 0x6969 1441dc9e472e19acfe6dc7f41e429236e7eef7ceda1The Android Open Source Project#define NTFS_SB_MAGIC 0x5346544e 1451dc9e472e19acfe6dc7f41e429236e7eef7ceda1The Android Open Source Project#define OPENPROM_SUPER_MAGIC 0x9fa1 1461dc9e472e19acfe6dc7f41e429236e7eef7ceda1The Android Open Source Project#define PROC_SUPER_MAGIC 0x9fa0 1471dc9e472e19acfe6dc7f41e429236e7eef7ceda1The Android Open Source Project#define QNX4_SUPER_MAGIC 0x002f 1481dc9e472e19acfe6dc7f41e429236e7eef7ceda1The Android Open Source Project#define REISERFS_SUPER_MAGIC 0x52654973 1491dc9e472e19acfe6dc7f41e429236e7eef7ceda1The Android Open Source Project#define ROMFS_MAGIC 0x7275 1501dc9e472e19acfe6dc7f41e429236e7eef7ceda1The Android Open Source Project#define SMB_SUPER_MAGIC 0x517B 1511dc9e472e19acfe6dc7f41e429236e7eef7ceda1The Android Open Source Project#define SYSV2_SUPER_MAGIC 0x012FF7B6 1521dc9e472e19acfe6dc7f41e429236e7eef7ceda1The Android Open Source Project#define SYSV4_SUPER_MAGIC 0x012FF7B5 1531dc9e472e19acfe6dc7f41e429236e7eef7ceda1The Android Open Source Project#define TMPFS_MAGIC 0x01021994 1541dc9e472e19acfe6dc7f41e429236e7eef7ceda1The Android Open Source Project#define UDF_SUPER_MAGIC 0x15013346 1551dc9e472e19acfe6dc7f41e429236e7eef7ceda1The Android Open Source Project#define UFS_MAGIC 0x00011954 1561dc9e472e19acfe6dc7f41e429236e7eef7ceda1The Android Open Source Project#define USBDEVICE_SUPER_MAGIC 0x9fa2 1571dc9e472e19acfe6dc7f41e429236e7eef7ceda1The Android Open Source Project#define VXFS_SUPER_MAGIC 0xa501FCF5 1581dc9e472e19acfe6dc7f41e429236e7eef7ceda1The Android Open Source Project#define XENIX_SUPER_MAGIC 0x012FF7B4 1591dc9e472e19acfe6dc7f41e429236e7eef7ceda1The Android Open Source Project#define XFS_SUPER_MAGIC 0x58465342 1601dc9e472e19acfe6dc7f41e429236e7eef7ceda1The Android Open Source Project#define _XIAFS_SUPER_MAGIC 0x012FD16D 1611dc9e472e19acfe6dc7f41e429236e7eef7ceda1The Android Open Source Project 16201a700e5d2ee9b5bd61546faffcb453fd1d6325cElliott Hughesextern int statfs(const char*, struct statfs*) __nonnull((1, 2)); 163db1ea3474899ebbd783aba872d3005f95a816d0fElliott Hughesextern int statfs64(const char*, struct statfs64*) __nonnull((1, 2)); 16401a700e5d2ee9b5bd61546faffcb453fd1d6325cElliott Hughesextern int fstatfs(int, struct statfs*) __nonnull((2)); 165db1ea3474899ebbd783aba872d3005f95a816d0fElliott Hughesextern int fstatfs64(int, struct statfs64*) __nonnull((2)); 1661dc9e472e19acfe6dc7f41e429236e7eef7ceda1The Android Open Source Project 1671dc9e472e19acfe6dc7f41e429236e7eef7ceda1The Android Open Source Project__END_DECLS 1681dc9e472e19acfe6dc7f41e429236e7eef7ceda1The Android Open Source Project 1691dc9e472e19acfe6dc7f41e429236e7eef7ceda1The Android Open Source Project#endif /* _SYS_VFS_H_ */ 170