io.files.info.unix.linux: Special characters in mount points are encoded as octal escape sequences.

db4
Doug Coleman 2015-11-03 15:55:14 -08:00
parent d23aa7e1f1
commit 67e7874e91
2 changed files with 22 additions and 7 deletions

View File

@ -0,0 +1,7 @@
! Copyright (C) 2015 Doug Coleman.
! See http://factorcode.org/license.txt for BSD license.
USING: tools.test io.files.info.unix.linux ;
IN: io.files.info.unix.linux.tests
[ "/media/erg/4TB D" ]
[ "/media/erg/4TB\\040D" decode-mount-point ] unit-test

View File

@ -1,11 +1,9 @@
! Copyright (C) 2008 Doug Coleman.
! See http://factorcode.org/license.txt for BSD license.
USING: accessors alien.c-types alien.syntax combinators csv
io.backend io.encodings.utf8 io.files io.files.info
io.files.unix libc libc.linux kernel math.order namespaces sequences
sorting system unix unix.statfs.linux unix.statvfs.linux io.files.links
arrays io.files.info.unix assocs io.pathnames unix.types
classes.struct ;
USING: accessors assocs classes.struct combinators csv
io.backend io.encodings.utf8 io.files.info io.files.info.unix
io.pathnames kernel libc math math.parser sequences splitting
strings system unix.statfs.linux unix.statvfs.linux ;
FROM: csv => delimiter ;
IN: io.files.info.unix.linux
@ -44,11 +42,21 @@ M: linux statvfs>file-system-info ( file-system-info statfs -- file-system-info'
TUPLE: mtab-entry file-system-name mount-point type options
frequency pass-number ;
! octal escape sequences, e.g. "/media/erg/4TB\\040E"
: decode-mount-point ( string -- string' )
dup "\\" split
dup length 1 > [
nip 1 cut
[ 3 cut [ oct> 1string ] dip append ] map append concat
] [
drop
] if ;
: mtab-csv>mtab-entry ( csv -- mtab-entry )
[ mtab-entry new ] dip
{
[ first >>file-system-name ]
[ second >>mount-point ]
[ second decode-mount-point >>mount-point ]
[ third >>type ]
[ fourth string>csv first >>options ]
[ 4 swap ?nth [ 0 ] unless* >>frequency ]