get-environment.ss
(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))]))))))