aboutsummaryrefslogtreecommitdiff
path: root/module/hnh/util/env.scm
diff options
context:
space:
mode:
Diffstat (limited to 'module/hnh/util/env.scm')
-rw-r--r--module/hnh/util/env.scm25
1 files changed, 25 insertions, 0 deletions
diff --git a/module/hnh/util/env.scm b/module/hnh/util/env.scm
new file mode 100644
index 00000000..a6877186
--- /dev/null
+++ b/module/hnh/util/env.scm
@@ -0,0 +1,25 @@
+(define-module (hnh util env)
+ :export (let-env))
+
+(define-syntax let-env
+ (syntax-rules ()
+ [(_ ((name value) ...)
+ body ...)
+
+ (let ((env-pairs #f))
+ (dynamic-wind
+ (lambda ()
+ (set! env-pairs
+ (map (lambda (n new-value)
+ (list n new-value (getenv n)))
+ (list (symbol->string (quote name)) ...)
+ (list value ...)))
+ (for-each (lambda (pair) (setenv (car pair) (cadr pair)))
+ env-pairs))
+ (lambda () body ...)
+ (lambda ()
+ (for-each (lambda (pair) (setenv (car pair) (caddr pair)))
+ env-pairs))))]))
+
+
+