1 ! Copyright (C) 2008 Doug Coleman.
2 ! See http://factorcode.org/license.txt for BSD license.
3 USING: accessors alien.c-types alien.data alien.strings arrays
4 calendar.unix classes.struct combinators grouping
5 io.encodings.utf8 io.files io.files.info io.files.info.unix
6 io.files.unix libc kernel math sequences specialized-arrays
7 system unix unix.getfsstat.freebsd unix.statfs.freebsd
9 SPECIALIZED-ARRAY: uint
10 SPECIALIZED-ARRAY: statfs
11 IN: io.files.info.unix.freebsd
13 TUPLE: freebsd-file-info < unix-file-info birth-time flags gen ;
15 M: freebsd new-file-info freebsd-file-info new ;
17 M: freebsd stat>file-info
18 [ call-next-method ] keep
20 [ st_flags>> >>flags ]
22 [ st_birthtimespec>> timespec>unix-time >>birth-time ]
25 TUPLE: freebsd-file-system-info < unix-file-system-info
26 io-size owner type-id filesystem-subtype ;
28 M: freebsd file-systems
29 f void* <ref> dup 0 getmntinfo dup io-error
30 [ void* deref ] dip \ statfs <c-direct-array>
31 [ f_mntonname>> utf8 alien>string file-system-info ] { } map-as ;
33 M: freebsd new-file-system-info freebsd-file-system-info new ;
35 M: freebsd file-system-statfs
36 \ statfs new [ statfs-func io-error ] keep ;
38 M: freebsd file-system-statvfs
39 \ statvfs new [ statvfs-func io-error ] keep ;
41 M: freebsd statfs>file-system-info
43 [ f_bsize>> >>block-size ]
44 [ f_iosize>> >>io-size ]
45 [ f_blocks>> >>blocks ]
46 [ f_bfree>> >>blocks-free ]
47 [ f_bavail>> >>blocks-available ]
49 [ f_ffree>> >>files-free ]
52 [ f_type>> >>type-id ]
54 [ f_fstypename>> utf8 alien>string >>type ]
55 [ f_mntonname>> utf8 alien>string >>mount-point ]
56 [ f_mntfromname>> utf8 alien>string >>device-name ]
59 M: freebsd statvfs>file-system-info
61 [ f_frsize>> >>preferred-block-size ]
62 [ f_favail>> >>files-available ]
63 [ f_namemax>> >>name-max ]