]> gitweb.factorcode.org Git - factor.git/blob - basis/io/files/info/unix/freebsd/freebsd.factor
cdf158bd2f091c863533a8647d0481b227649269
[factor.git] / basis / io / files / info / unix / freebsd / freebsd.factor
1 ! Copyright (C) 2008 Doug Coleman.
2 ! See http://factorcode.org/license.txt for BSD license.
3 USING: accessors 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 struct-arrays ;
8 IN: io.files.info.unix.freebsd
9
10 TUPLE: freebsd-file-system-info < unix-file-system-info
11 version io-size owner syncreads syncwrites asyncreads asyncwrites ;
12
13 M: freebsd new-file-system-info freebsd-file-system-info new ;
14
15 M: freebsd file-system-statfs ( path -- byte-array )
16     \ statfs <struct> [ statfs io-error ] keep ;
17
18 M: freebsd statfs>file-system-info ( file-system-info statvfs -- file-system-info )
19     {
20         [ f_version>> >>version ]
21         [ f_type>> >>type ]
22         [ f_flags>> >>flags ]
23         [ f_bsize>> >>block-size ]
24         [ f_iosize>> >>io-size ]
25         [ f_blocks>> >>blocks ]
26         [ f_bfree>> >>blocks-free ]
27         [ f_bavail>> >>blocks-available ]
28         [ f_files>> >>files ]
29         [ f_ffree>> >>files-free ]
30         [ f_syncwrites>> >>syncwrites ]
31         [ f_asyncwrites>> >>asyncwrites ]
32         [ f_syncreads>> >>syncreads ]
33         [ f_asyncreads>> >>asyncreads ]
34         [ f_namemax>> >>name-max ]
35         [ f_owner>> >>owner ]
36         [ f_fsid>> >>id ]
37         [ f_fstypename>> utf8 alien>string >>type ]
38         [ f_mntfromname>> utf8 alien>string >>device-name ]
39         [ f_mntonname>> utf8 alien>string >>mount-point ]
40     } cleave ;
41
42 M: freebsd file-system-statvfs ( path -- byte-array )
43     \ statvfs <struct> [ statvfs io-error ] keep ;
44
45 M: freebsd statvfs>file-system-info ( file-system-info statvfs -- file-system-info )
46     {
47         [ f_favail>> >>files-available ]
48         [ f_frsize>> >>preferred-block-size ]
49     } cleave ;
50
51 M: freebsd file-systems ( -- array )
52     f 0 0 getfsstat dup io-error
53     \ statfs <struct-array>
54     [ dup byte-length 0 getfsstat io-error ]
55     [ [ f_mntonname>> utf8 alien>string file-system-info ] { } map-as ] bi ;