diff options
Diffstat (limited to 'modules/language/python')
-rw-r--r-- | modules/language/python/module/os.scm | 92 |
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))))))) |