diff options
Diffstat (limited to 'modules/language/python/module/os.scm')
-rw-r--r-- | modules/language/python/module/os.scm | 49 |
1 files changed, 47 insertions, 2 deletions
diff --git a/modules/language/python/module/os.scm b/modules/language/python/module/os.scm index e5b2b79..6d00d27 100644 --- a/modules/language/python/module/os.scm +++ b/modules/language/python/module/os.scm @@ -23,6 +23,9 @@ setgid setgroups setpgrp setpgid setpriority setregid setresgid setreuid setresuid getsid setsid setuid strerr umask uname unsetenv + + path curdir pardir sep extsep altsep pathsep linesep defpath + devnull dopen close closerange device_encoding dup dup2 fchmod fchown fdatasync fpathconf fstat fstatvfs fsynch ftruncate isatty @@ -66,7 +69,19 @@ ((_ code) (guile code code)) ((_ code1 code2) (define code1 (lambda x (ca (apply (@ (guile) code2 x)))))))) - + + +(define path "posixpath") +(define curdir ".") +(define pardir "..") +(define sep "/") +(define extsep ".") +(define altsep None) +(define pathsep ":") +(define linesep "\n") +(define defpath "/usr/bin") +(define devnull "/dev/null") + (define name "posix") (guile ctermid) @@ -1210,7 +1225,37 @@ followlinks))) () (yield a b c))))))) (yield top dirs nondirs)))))))) - + +(define (path:samestat s1 s2) + (and (equal? (ref s1 'st_dev) (ref s2 'st_dev)) + (equal? (ref s1 'st_ino) (ref s2 'st_ino)))) + +(define (path:normpath p) + (let lp ((l (string-split (path-it p) #\/)) (r '()) (first? #t)) + (match l + (("") (lp '() (cons "" r) #f)) + (("." . l) + (lp l r #f)) + (("" . l) + (if first? + (lp l (cons "" r) #f) + (lp l r #f))) + ((".." . l) + (match r + (("") + (raise ValueError "normpath .. beond /")) + ((".." . u) + (lp l (cons ".." r) #f)) + ((_ . u) + (lp l u #f)) + (() + (lp l (cons ".." r) #f)))) + ((x . l) + (lp l (cons x r) #f)) + (() (string-join (reverse r) "/"))))) + +(define (path:join . l) + (normpath (string-join (map path-it l) "/"))) (define (_fwalk topfd toppath topdown onerror follow_symlinks) ((make-generator () |