1 ! Copyright (C) 2008 Doug Coleman.
2 ! See http://factorcode.org/license.txt for BSD license.
3 USING: accessors alien alien.c-types alien.syntax combinators
4 io.backend io.files io.files.info io.files.unix kernel math system unix
5 unix.statfs.freebsd unix.statvfs.freebsd unix.getfsstat.freebsd
6 sequences grouping alien.strings io.encodings.utf8 unix.types
7 arrays io.files.info.unix classes.struct specialized-arrays
9 SPECIALIZED-ARRAY: statfs
10 IN: io.files.info.unix.freebsd
12 TUPLE: freebsd-file-system-info < unix-file-system-info
13 version io-size owner syncreads syncwrites asyncreads asyncwrites ;
15 M: freebsd new-file-system-info freebsd-file-system-info new ;
17 M: freebsd file-system-statfs ( path -- byte-array )
18 \ statfs <struct> [ statfs io-error ] keep ;
20 M: freebsd statfs>file-system-info ( file-system-info statvfs -- file-system-info )
22 [ f_version>> >>version ]
25 [ f_bsize>> >>block-size ]
26 [ f_iosize>> >>io-size ]
27 [ f_blocks>> >>blocks ]
28 [ f_bfree>> >>blocks-free ]
29 [ f_bavail>> >>blocks-available ]
31 [ f_ffree>> >>files-free ]
32 [ f_syncwrites>> >>syncwrites ]
33 [ f_asyncwrites>> >>asyncwrites ]
34 [ f_syncreads>> >>syncreads ]
35 [ f_asyncreads>> >>asyncreads ]
36 [ f_namemax>> >>name-max ]
39 [ f_fstypename>> utf8 alien>string >>type ]
40 [ f_mntfromname>> utf8 alien>string >>device-name ]
41 [ f_mntonname>> utf8 alien>string >>mount-point ]
44 M: freebsd file-system-statvfs ( path -- byte-array )
45 \ statvfs <struct> [ statvfs io-error ] keep ;
47 M: freebsd statvfs>file-system-info ( file-system-info statvfs -- file-system-info )
49 [ f_favail>> >>files-available ]
50 [ f_frsize>> >>preferred-block-size ]
53 M: freebsd file-systems ( -- array )
54 f 0 0 getfsstat dup io-error
56 [ dup byte-length 0 getfsstat io-error ]
57 [ [ f_mntonname>> utf8 alien>string file-system-info ] { } map-as ] bi ;