diff options
Diffstat (limited to 'modules/language/python/module/stat.scm')
-rw-r--r-- | modules/language/python/module/stat.scm | 99 |
1 files changed, 89 insertions, 10 deletions
diff --git a/modules/language/python/module/stat.scm b/modules/language/python/module/stat.scm index cb314b7..a430562 100644 --- a/modules/language/python/module/stat.scm +++ b/modules/language/python/module/stat.scm @@ -1,10 +1,29 @@ (define-module (language python module stat) - #:export ()) + #:export (ST_MODE ST_INO ST_DEV ST_NLINK ST_UID ST_GID ST_SIZE ST_ATIME + ST_MTIME ST_CTIME S_ISUID S_ISGID S_ENFMT S_ISVTX S_IREAD + S_IWRITE S_IEXEC S_IRWXU S_IRUSR S_IWUSR S_IXUSR S_IRGRP + S_IWGRP S_IXGRP S_IRWXG S_IROTH S_IWOTH S_IXOTH S_IRWXO + S_IFDIR S_IFREG S_IFLNK S_IFCHR S_IFBLK S_IFIFO S_IFSOC + UF_NODUMP UF_IMMUTABLE UF_APPEND UF_OPAQUE UF_NOUNLINK + UF_COMPRESSED UF_HIDDEN SF_ARCHIVED SF_IMMUTABLE SF_APPEND + SF_NOUNLINK SF_SNAPSHOT S_ISDIR S_ISREG S_ISLNK S_ISCHR + S_ISBLK S_ISFIFO S_ISSOCK S_IMODE S_IFMT + filemode)) +(define ST_MODE 0) +(define ST_INO 1) +(define ST_DEV 2) +(define ST_NLINK 3) +(define ST_UID 4) +(define ST_GID 5) +(define ST_SIZE 6) +(define ST_ATIME 7) +(define ST_MTIME 8) +(define ST_CTIME 9) (define S_ISUID #o04000) (define S_ISGID #o02000) -(define S_ENFMT "error") +(define S_ENFMT S_ISGID) (define S_ISVTX #o01000) (define S_IREAD #o00400) (define S_IWRITE #o00200) @@ -22,17 +41,77 @@ (define S_IXOTH #o00001) (define S_IRWXO (logior S_IXOTH S_IWOTH S_IROTH)) +;;Internal +(define SS_IFMT #o170000) + + (define S_IFDIR #o040000) -(define S_IFMT #o170000) (define S_IFREG #o100000) (define S_IFLNK #o120000) (define S_IFCHR #o020000) (define S_IFBLK #o060000) (define S_IFIFO #o010000) - -(define (is-dir? x) (= (logand x S_IFMT) S_IFDIR)) -(define (is-reg? x) (= (logand x S_IFMT) S_IFREG)) -(define (is-lnk? x) (= (logand x S_IFMT) S_IFLNK)) -(define (is-chr? x) (= (logand x S_IFMT) S_IFCHR)) -(define (is-blk? x) (= (logand x S_IFMT) S_IFBLK)) -(define (is-fif? x) (= (logand x S_IFMT) S_IFIFO)) +(define S_IFSOCK #o140000) + +(define (S_ISDIR x) (= (logand x SS_IFMT) S_IFDIR)) +(define (S_ISREG x) (= (logand x SS_IFMT) S_IFREG)) +(define (S_ISLNK x) (= (logand x SS_IFMT) S_IFLNK)) +(define (S_ISCHR x) (= (logand x SS_IFMT) S_IFCHR)) +(define (S_ISBLK x) (= (logand x SS_IFMT) S_IFBLK)) +(define (S_ISFIFO x) (= (logand x SS_IFMT) S_IFIFO)) +(define (S_ISSOCK x) (= (logand x SS_IFMT) S_IFSOCK)) +(define (S_IMODE x) (logand x #o7777)) +(define (S_IFMT x) (logand x SS_IFMT)) + +(define UF_NODUMP #x00000001) +(define UF_IMMUTABLE #x00000002) +(define UF_APPEND #x00000004) +(define UF_OPAQUE #x00000008) +(define UF_NOUNLINK #x00000010) +(define UF_COMPRESSED #x00000020) +(define UF_HIDDEN #x00008000) +(define SF_ARCHIVED #x00010000) +(define SF_IMMUTABLE #x00020000) +(define SF_APPEND #x00040000) +(define SF_NOUNLINK #x00100000) +(define SF_SNAPSHOT #x00200000) + +(define _filemode_table + `(((,S_IFLNK "l") + (,S_IFREG "-") + (,S_IFBLK "b") + (,S_IFDIR "d") + (,S_IFCHR "c") + (,S_IFIFO "p")) + + ((,S_IRUSR "r")) + ((,S_IWUSR "w")) + ((,(logior S_IXUSR S_ISUID) "s") + (,S_ISUID "S") + (,S_IXUSR "x")) + + ((,S_IRGRP "r")) + ((,S_IWGRP "w")) + ((,(logior S_IXGRP S_ISGID) "s") + (,S_ISGID "S") + (,S_IXGRP "x")) + + ((,S_IROTH "r"),) + ((,S_IWOTH "w"),) + ((,(logior S_IXOTH S_ISVTX) "t") + (,S_ISVTX "T") + (,S_IXOTH "x")))) + +(define (filemode mode) + """Convert a file's mode to a string of the form '-rwxrwxrwx'.""" + (define perm (py-list)) + + (for ((table : _filemode_table)) () + (for ((bit char : table)) () + (if (= (logand mode bit) bit) + (pylist-append! perm char) + (break)) + #:final + (pylist-append! perm "-"))) + + (py-string-join "" perm)) |