(module get-environment mzscheme (require (lib "foreign.ss")) (unsafe!) (provide get-environment) (define lib (ffi-lib #f)) ;; get-environ: -> (listof byte-string) ;; Returns a list of the environmental variables. Each ;; bytes-string will be in the form #"key=value". (define (get-environment) (let ([byte-ptr (get-ffi-obj "environ" lib _pointer)]) (let loop ([results '()] [i 0]) (let ([next-elt (ptr-ref byte-ptr _bytes/eof i)]) (cond [(eof-object? next-elt) (reverse! results)] [else (loop (cons next-elt results) (add1 i))]))))))