summaryrefslogtreecommitdiff
path: root/modules
diff options
context:
space:
mode:
authorStefan Israelsson Tampe <stefan.itampe@gmail.com>2018-03-09 19:16:01 +0100
committerStefan Israelsson Tampe <stefan.itampe@gmail.com>2018-03-09 19:16:01 +0100
commite37148c9c130d0f0d0a692d80479ff2b1899d9fc (patch)
treec61a09dfb306adf12dec53d1faa973fb9ba61731 /modules
parenta00dd637b2a9ab36d3f1c6a5836769d8ea278b73 (diff)
statvfs
Diffstat (limited to 'modules')
-rw-r--r--modules/language/python/module/os.scm92
1 files changed, 78 insertions, 14 deletions
diff --git a/modules/language/python/module/os.scm b/modules/language/python/module/os.scm
index 193bf4b..ad4d2e3 100644
--- a/modules/language/python/module/os.scm
+++ b/modules/language/python/module/os.scm
@@ -360,12 +360,22 @@
(define __init__
(lambda (self scm)
(ca
- (statset (mode ino dev nlink uid gid size atime mtime ctime
- (atimensec atime_ns)
- (mtimensec mtime_ns)
- (ctimensec ctime_ns)
- blksize blocks perms rdev type)
- self scm)))))
+ (begin
+ (statset (mode ino dev nlink uid gid size atime mtime ctime
+ (atimensec atime_ns)
+ (mtimensec mtime_ns)
+ (ctimensec ctime_ns)
+ blksize blocks perms rdev type)
+ self scm)
+ (if stat-float-times
+ (begin
+ (set self 'atime (* (ref self 'atime) 1.0))
+ (set self 'mtime (* (ref self 'mtime) 1.0))
+ (set self 'ctime (* (ref self 'ctime) 1.0))
+ (set self 'atime_ns (/ (ref self 'atime_ns) 1000000000.0))
+ (set self 'mtime_ns (/ (ref self 'mtime_ns) 1000000000.0))
+ (set self 'ctime_ns (/ (ref self 'ctime_ns) 1000000000.0)))))))))
+
(name-object stat_result)
(define (fstat fd)
@@ -460,8 +470,8 @@
(let* ((a (make-bytevector 16))
(ap (bytevector->pointer a)))
(rm (f ap flags))
- (values (bytevector-s32-ref a 0)
- (bytevector-s32-ref a 1))))))
+ (values (bytevector-s32-ref a 0 (native-endianness))
+ (bytevector-s32-ref a 1 (native-endianness)))))))
(define posix_fallocate
@@ -1011,10 +1021,64 @@
(values))
#f
(path-it path)))))
-
-
-
-
-
-
+(define stat-float-times #t)
+(define (stat_float_times newvalue)
+ (set! stat-float-times newvalue))
+
+(define ST_RDONLY 1)
+(define ST_NOSUID 2)
+(define ST_NODEV 4)
+(define ST_NOEXEC 8)
+(define ST_SYNCHRONOUS 16)
+(define ST_MANDLOCK 64)
+(define ST_WRITE 128)
+(define ST_APPEND 256)
+(define ST_IMMUTABLE 512)
+(define ST_NOATIME 1024)
+(define ST_NODIRATIME 2048)
+(define ST_RELATIME 4096)
+
+(define-python-class StatVFS ()
+ (define __init__
+ (lambda (self a1 a2 a3 a4 a5 a6 a7 a8 a9 a10 a11)
+ (map
+ (lambda (x y) (set self x y))
+ '(f_bsize
+ f_frsize
+ f_blocks
+ f_bfree
+ f_bavail
+ f_files
+ f_ffree
+ f_favail
+ f_fsid
+ f_flag
+ f_namemax)
+ (list a1 a2 a3 a4 a5 a6 a7 a8 a9 a10)))))
+
+(define statvfs
+ (let ((f (pointer->procedure int
+ (dynamic-func "statvfs" (dynamic-link))
+ (list * *)))
+ (ff (pointer->procedure int
+ (dynamic-func "fstatvfs" (dynamic-link))
+ (list int *)))))
+ (lambda (path)
+ (let* ((bv (make-bytevector 11*8))
+ (bvp (bytevector->pointer bv)))
+ (rm (if (number? path)
+ (ff path bvp)
+ (f (string->pointer (path-it path)) bvp)))
+
+ (StatVFS
+ (bytevector-u64-ref bv 0 (native-endianness))
+ (bytevector-u64-ref bv 1 (native-endianness))
+ (bytevector-u64-ref bv 2 (native-endianness))
+ (bytevector-u64-ref bv 3 (native-endianness))
+ (bytevector-u64-ref bv 4 (native-endianness))
+ (bytevector-u64-ref bv 5 (native-endianness))
+ (bytevector-u64-ref bv 6 (native-endianness))
+ (bytevector-u64-ref bv 8 (native-endianness))
+ (bytevector-u64-ref bv 9 (native-endianness))
+ (bytevector-u64-ref bv 10 (native-endianness)))))))