diff --git a/basis/io/unix/files/files.factor b/basis/io/unix/files/files.factor index de95a3a583..05bab8c654 100644 --- a/basis/io/unix/files/files.factor +++ b/basis/io/unix/files/files.factor @@ -104,7 +104,8 @@ M: unix statvfs>file-system-info drop ; : file-system-calculations ( file-system-info -- file-system-info' ) { - [ dup [ blocks-available>> ] [ block-size>> ] bi * >>free-space drop ] + [ dup [ blocks-available>> ] [ block-size>> ] bi * >>available-space drop ] + [ dup [ blocks-free>> ] [ block-size>> ] bi * >>free-space drop ] [ dup [ blocks>> ] [ block-size>> ] bi * >>total-space drop ] [ dup [ total-space>> ] [ free-space>> ] bi - >>used-space drop ] [ ] diff --git a/basis/io/unix/files/linux/linux.factor b/basis/io/unix/files/linux/linux.factor index dd9abcbd1e..3e4e1c043a 100644 --- a/basis/io/unix/files/linux/linux.factor +++ b/basis/io/unix/files/linux/linux.factor @@ -1,13 +1,13 @@ ! Copyright (C) 2008 Doug Coleman. ! See http://factorcode.org/license.txt for BSD license. USING: accessors alien.c-types alien.syntax combinators csv -io.encodings.utf8 io.files io.streams.string io.unix.files -kernel namespaces sequences system unix unix.statfs.linux -unix.statvfs.linux ; +io.backend io.encodings.utf8 io.files io.streams.string +io.unix.files kernel math.order namespaces sequences sorting +system unix unix.statfs.linux unix.statvfs.linux ; IN: io.unix.files.linux TUPLE: linux-file-system-info < unix-file-system-info -namelen spare ; +namelen ; M: linux new-file-system-info linux-file-system-info new ; @@ -26,7 +26,7 @@ M: linux statfs>file-system-info ( struct -- statfs ) [ statfs64-f_fsid >>id ] [ statfs64-f_namelen >>namelen ] [ statfs64-f_frsize >>preferred-block-size ] - [ statfs64-f_spare >>spare ] + ! [ statfs64-f_spare >>spare ] } cleave ; M: linux file-system-statvfs ( path -- byte-array ) @@ -68,3 +68,22 @@ M: linux file-systems [ type>> >>type ] } cleave ] map ; + +ERROR: file-system-not-found ; + +M: linux file-system-info ( path -- ) + normalize-path + [ + [ new-file-system-info ] dip + [ file-system-statfs statfs>file-system-info ] + [ file-system-statvfs statvfs>file-system-info ] bi + file-system-calculations + ] keep + + parse-mtab [ [ mount-point>> ] bi@ <=> invert-comparison ] sort + [ mount-point>> head? ] with find nip [ file-system-not-found ] unless* + { + [ file-system-name>> >>device-name drop ] + [ mount-point>> >>mount-point drop ] + [ type>> >>type ] + } 2cleave ;