summaryrefslogtreecommitdiff
path: root/modules/language/python/module/os.scm
diff options
context:
space:
mode:
Diffstat (limited to 'modules/language/python/module/os.scm')
-rw-r--r--modules/language/python/module/os.scm49
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 ()