Parse /proc
This commit is contained in:
parent
b29504c23e
commit
f4842f6220
|
@ -30,6 +30,18 @@
|
|||
(proc entry)
|
||||
(loop)))))
|
||||
|
||||
(define (parse-null-terminated-strings bytes)
|
||||
(let loop ((a 0) (b 0) (strings '()))
|
||||
(if (= b (bytevector-length bytes))
|
||||
(if (= a b)
|
||||
(reverse strings)
|
||||
(error "Missing final null terminator"))
|
||||
(if (zero? (bytevector-u8-ref bytes b))
|
||||
(loop (+ b 1) (+ b 1) (cons (utf8->string
|
||||
(bytevector-copy bytes a b))
|
||||
strings))
|
||||
(loop a (+ b 1) strings)))))
|
||||
|
||||
(define (handle-the-scheme-implementation impl)
|
||||
(let ((cmdline #f)
|
||||
(environ #f)
|
||||
|
@ -46,11 +58,11 @@
|
|||
(equal? "proc/self/fd/" name))
|
||||
#f)
|
||||
((equal? "proc/self/cmdline" name)
|
||||
(set! cmdline bytes))
|
||||
(set! cmdline (parse-null-terminated-strings bytes)))
|
||||
((equal? "proc/self/environ" name)
|
||||
(set! stdin bytes))
|
||||
(set! stdin (parse-null-terminated-strings bytes)))
|
||||
((equal? "proc/self/cwd" name)
|
||||
(set! stdin bytes))
|
||||
(set! stdin (utf8->string bytes)))
|
||||
((equal? "proc/self/fd/0" name)
|
||||
(set! stdin bytes))
|
||||
((string-prefix? "proc/self/fd/" name)
|
||||
|
|
Loading…
Reference in New Issue