1 /* 2 * Copyright (c) 2005 The DragonFly Project. All rights reserved. 3 * 4 * This code is derived from software contributed to The DragonFly Project 5 * by Jeroen Ruigrok van der Werven <asmodai@tendra.org> 6 * 7 * Redistribution and use in source and binary forms, with or without 8 * modification, are permitted provided that the following conditions 9 * are met: 10 * 11 * 1. Redistributions of source code must retain the above copyright 12 * notice, this list of conditions and the following disclaimer. 13 * 2. Redistributions in binary form must reproduce the above copyright 14 * notice, this list of conditions and the following disclaimer in 15 * the documentation and/or other materials provided with the 16 * distribution. 17 * 3. Neither the name of The DragonFly Project nor the names of its 18 * contributors may be used to endorse or promote products derived 19 * from this software without specific, prior written permission. 20 * 21 * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS 22 * ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT 23 * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS 24 * FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE 25 * COPYRIGHT HOLDERS OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, 26 * INCIDENTAL, SPECIAL, EXEMPLARY OR CONSEQUENTIAL DAMAGES (INCLUDING, 27 * BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; 28 * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED 29 * AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, 30 * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT 31 * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF 32 * SUCH DAMAGE. 33 */ 34 35 #ifndef _SYS_STATVFS_H_ 36 #define _SYS_STATVFS_H_ 37 38 #include <machine/stdint.h> 39 #include <sys/uuid.h> 40 41 #ifndef _FSBLKCNT_T_DECLARED 42 typedef __uint64_t fsblkcnt_t; /* filesystem block count */ 43 #define _FSBLKCNT_T_DECLARED 44 #endif 45 #ifndef _FSFILCNT_T_DECLARED 46 typedef __uint64_t fsfilcnt_t; /* filesystem file count */ 47 #define _FSFILCNT_T_DECLARED 48 #endif 49 #ifndef _UID_T_DECLARED 50 typedef __uint32_t uid_t; /* user id */ 51 #define _UID_T_DECLARED 52 #endif 53 54 #if __BSD_VISIBLE 55 struct fhandle; 56 struct statfs; 57 #endif 58 59 /* 60 * The POSIX 1003.1 standard uses free and available nomenclature to mean the 61 * following: 62 * - free means all space, including privileged processes, 63 * - avail means all space available to unprivileged processes. 64 */ 65 66 struct statvfs { 67 unsigned long f_bsize; /* file system block size */ 68 unsigned long f_frsize; /* fundamental file system block size */ 69 fsblkcnt_t f_blocks; /* total number of blocks on fs */ 70 fsblkcnt_t f_bfree; /* total number of free blocks */ 71 fsblkcnt_t f_bavail; /* total number of available blocks */ 72 fsfilcnt_t f_files; /* total number of file serial num */ 73 fsfilcnt_t f_ffree; /* total number of free file ser num */ 74 fsfilcnt_t f_favail; /* total number of avail file ser num */ 75 unsigned long f_fsid; /* file system ID */ 76 unsigned long f_flag; /* bit mask of f_flag values */ 77 unsigned long f_namemax; /* maximum filename length */ 78 uid_t f_owner; /* user that mounted the filesystem */ 79 unsigned int f_type; /* filesystem type */ 80 81 __uint64_t f_syncreads; /* count of sync reads since mount */ 82 __uint64_t f_syncwrites; /* count of sync writes since mount */ 83 84 __uint64_t f_asyncreads; /* count of async reads since mount */ 85 __uint64_t f_asyncwrites; /* count of async writes since mount */ 86 87 /* 88 * DragonFly extensions - full uuid FSID and owner 89 */ 90 uuid_t f_fsid_uuid; 91 uuid_t f_uid_uuid; 92 }; 93 94 /* 95 * f_flag definitions 96 */ 97 #define ST_RDONLY 0x00000001 /* fs is read-only */ 98 #define ST_NOSUID 0x00000002 /* ST_ISUID or ST_ISGID not supported */ 99 100 #if __BSD_VISIBLE 101 /* 102 * DragonFly specific flags 103 */ 104 #define ST_FSID_UUID 0x40000000 /* f_fsid_uuid field is valid */ 105 #define ST_OWNER_UUID 0x80000000 /* f_owner_uuid field is valid */ 106 #endif 107 108 __BEGIN_DECLS 109 int fstatvfs(int, struct statvfs *); 110 int statvfs(const char * __restrict, struct statvfs * __restrict); 111 112 #if __BSD_VISIBLE 113 int fhstatvfs(const struct fhandle *, struct statvfs * __restrict); 114 int getvfsstat(struct statfs * __restrict, struct statvfs * __restrict, long, int); 115 #endif 116 __END_DECLS 117 118 #endif /* _SYS_STATVFS_H_ */ 119