Add function for reading an 'environ'

* geesh/environment.scm (environ->alist): New function.
* tests/environment.scm: Test it.
This commit is contained in:
Timothy Sample 2018-07-17 23:29:37 -04:00
parent d7d26534b2
commit 737ed6a1b7
2 changed files with 17 additions and 2 deletions

View File

@ -18,14 +18,17 @@
(define-module (geesh environment)
#:use-module (ice-9 match)
#:use-module (srfi srfi-1)
#:use-module (srfi srfi-9)
#:use-module (srfi srfi-26)
#:export (<environment>
make-environment
environment?
var-ref
var-ref*
set-var!
environment->environ))
environment->environ
environ->alist))
;;; Commentary:
;;;
@ -77,3 +80,10 @@ precedence over the ones in @var{env}."
(cons (string-append name "=" value) acc)
(cons name seen))))
(() acc))))
(define (environ->alist environ)
(define (string-split-1 str char_pred)
(and=> (string-index str char_pred)
(lambda (index)
`(,(substring str 0 index) . ,(substring str (1+ index))))))
(filter-map (cut string-split-1 <> #\=) environ))

View File

@ -57,7 +57,7 @@
(var-ref env "FOO")))
;;;
;;; Making an 'environ'.
;;; Making and reading 'environs'.
;;;
(define (subset? lst1 lst2)
@ -103,4 +103,9 @@ to order."
(environ (environment->environ env bindings)))
(set=? environ '("FOO=ghi" "BAR=def"))))
(test-assert "Creates an alist from an environ"
(let* ((environ '("FOO=abc" "BAR=def"))
(alist (environ->alist environ)))
(set=? alist '(("FOO" . "abc") ("BAR" . "def")))))
(test-end)