1 /**
2 *    statvfs - VFS File System information structure
3 * from sys/statvfs.h
4 * http://www.opengroup.org/onlinepubs/009695399/basedefs/sys/statvfs.h.html
5 *
6 * Copyright: Fawzi Mohamed 
7 * License:   tango license
8 * Authors:   Fawzi Mohamed
9 */
10 
11 module tango.stdc.posix.sys.statvfs;
12 import tango.stdc.config;
13 /+
14 // possible errno:
15     public import tango.sys.consts.errno:
16     EACCES, // (statfs()) Search permission is denied for a component of the path prefix of path. (See also path_resolution(2).) 
17     EBADF, // (fstatfs()) fd is not a valid open file descriptor. 
18     EFAULT, // buf or path points to an invalid address. 
19     EINTR, // This call was interrupted by a signal. 
20     EIO, // An I/O error occurred while reading from the file system. 
21     ELOOP, // (statfs()) Too many symbolic links were encountered in translating path. 
22     ENAMETOOLONG, // (statfs()) path is too long. 
23     ENOENT, // (statfs()) The file referred to by path does not exist. 
24     ENOMEM, // Insufficient kernel memory was available. 
25     ENOSYS, // The file system does not support this call. 
26     ENOTDIR, // (statfs()) A component of the path prefix of path is not a directory. 
27     EOVERFLOW // Some values were too large to be represented in the returned struct.
28 ;
29 +/
30 
31 version(darwin) {
32 
33     struct statvfs_t {
34      c_ulong f_bsize;
35      c_ulong f_frsize;
36      uint f_blocks;
37      uint f_bfree;
38      uint f_bavail;
39      uint f_files;
40      uint f_ffree;
41      uint f_favail;
42      c_ulong f_fsid;
43      c_ulong f_flag;
44      c_ulong f_namemax;
45     }
46 
47     enum{
48         ST_RDONLY=0x00000001,
49         ST_NOSUID=0x00000002,
50     }
51 }
52 
53 version( FreeBSD )
54 {
55     alias ulong __fsblkcnt_t, __fsfilcnt_t;
56     struct statvfs_t {
57         __fsblkcnt_t      f_bavail;       /* Number of blocks */
58         __fsblkcnt_t      f_bfree;
59         __fsblkcnt_t      f_blocks;
60         __fsfilcnt_t      f_favail;       /* Number of files (e.g., inodes) */
61         __fsfilcnt_t      f_ffree;
62         __fsfilcnt_t      f_files;
63         c_ulong   f_bsize;        /* Size of blocks counted above */
64         c_ulong  f_flag;
65         c_ulong   f_frsize;       /* Size of fragments */
66         c_ulong   f_fsid;         /* Not meaningful */
67         c_ulong   f_namemax;      /* Same as pathconf(_PC_NAME_MAX) */
68     }
69     enum {
70         ST_RDONLY = 1,
71         ST_NOSUID = 2,
72     }
73 }
74 
75 version(linux){
76     struct statvfs_t
77       {
78         c_ulong f_bsize;
79         c_ulong f_frsize;
80         c_ulong f_blocks;
81         c_ulong f_bfree;
82         c_ulong f_bavail;
83         c_ulong f_files;
84         c_ulong f_ffree;
85         c_ulong f_favail;
86         c_ulong f_fsid;
87         c_ulong f_flag;
88         c_ulong f_namemax;
89         int __f_spare[6];
90       };
91     enum
92     {
93       ST_RDONLY = 1,
94       ST_NOSUID = 2,
95     }    
96 }
97 
98 version(solaris)
99 {
100     const _FSTYPSZ = 16;
101 
102     alias c_ulong fsblkcnt_t;
103     alias c_ulong fsfilcnt_t;
104 
105     struct statvfs_t {
106         c_ulong f_bsize; /* fundamental file system block size */
107         c_ulong f_frsize; /* fragment size */
108         fsblkcnt_t f_blocks; /* total blocks of f_frsize on fs */
109         fsblkcnt_t f_bfree; /* total free blocks of f_frsize */
110         fsblkcnt_t f_bavail; /* free blocks avail to non-superuser */
111         fsfilcnt_t f_files; /* total file nodes (inodes) */
112         fsfilcnt_t f_ffree; /* total free file nodes */
113         fsfilcnt_t f_favail; /* free nodes avail to non-superuser */
114         c_ulong f_fsid;  /* file system id (dev for now) */
115         char[_FSTYPSZ]  f_basetype; /* target fs type name, */
116                                                         /* null-terminated */
117         c_ulong f_flag;  /* bit-mask of flags */
118         c_ulong f_namemax; /* maximum file name length */
119         char[32] f_fstr; /* filesystem-specific string */
120         static if(size_t.sizeof == 8) //#if !defined(_LP64)
121         {
122             c_ulong[16]  f_filler; /* reserved for future expansion */
123         }
124 	};
125 
126     enum
127     {
128         ST_RDONLY = 1,
129         ST_NOSUID = 2,
130     }
131 }
132 
133 extern(C){
134     int fstatvfs(int, statvfs_t *);
135     int statvfs(in char * , statvfs_t *);
136 }