statvfs
authorStefan Israelsson Tampe <stefan.itampe@gmail.com>
Fri, 9 Mar 2018 18:16:01 +0000 (19:16 +0100)
committerStefan Israelsson Tampe <stefan.itampe@gmail.com>
Fri, 9 Mar 2018 18:16:01 +0000 (19:16 +0100)
modules/language/python/module/os.scm

index 193bf4bb5d53305481195b58fbf26489a98f10c6..ad4d2e3eb5aef9b6584d0cb8d5a17a65ae22e619 100644 (file)
   (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)
       (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
          (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)))))))