0.pre7.60:
[sbcl.git] / src / code / run-program.lisp
index b7fb7c8..db90d0a 100644 (file)
 ;;;; visible at GENESIS time.
 
 (def-alien-variable "environ" (* c-string))
+(push (lambda ()
+       ;; We redo this here to protect ourselves from this scenario:
+       ;;   * Build under one version of shared lib, save a core.
+       ;;   * Load core under another version of shared lib. ("Now
+       ;;     where was environ again?" SIGSEGV, etc.)
+       ;; Obviously it's a KLUDGE to do this hack for every alien
+       ;; variable, but as it happens, as of sbcl-0.7.0 this is the
+       ;; only alien variable used to implement SBCL, so it's not
+       ;; worth coming up with a general solution. (A general
+       ;; solution would be nice for users who want to have their
+       ;; alien code be preserved across a save/load cycle, but this
+       ;; problem with alien variables is only one of several
+       ;; problems which'd need to be solved before that can happen.)
+        (def-alien-variable "environ" (* c-string)))
+      *after-save-initializations*)
 
 (defun posix-environ ()
   "Return the Unix environment (\"man environ\") as a list of SIMPLE-STRINGs."
          ;; Blast the string into place.
          (sb-kernel:copy-to-system-area (the simple-string s)
                                         (* sb-vm:vector-data-offset
-                                           sb-vm:word-bits)
+                                           sb-vm:n-word-bits)
                                         string-sap 0
-                                        (* (1+ n) sb-vm:byte-bits))
+                                        (* (1+ n) sb-vm:n-byte-bits))
          ;; Blast the pointer to the string into place.
          (setf (sap-ref-sap vec-sap i) string-sap)
          (setf string-sap (sap+ string-sap (round-bytes-to-words (1+ n))))
               ;; "path:" defined in sbcl-0.6.10. It would probably be 
               ;; reasonable to restore Unix PATH searching in SBCL, e.g.
               ;; with a function FIND-EXECUTABLE-FILE-IN-POSIX-PATH.
-              ;; (I don't want to do it with search lists the way
-              ;; that CMU CL did, because those are a non-ANSI
-              ;; extension which I'd like to get rid of. -- WHN)
+              ;; CMU CL did it with a "PATH:" search list, but CMU CL
+              ;; search lists are a non-ANSI extension that SBCL
+              ;; doesn't support. -- WHN)
               (pfile (unix-namestring program t))
               (cookie (list 0)))
           (unless pfile
                                   (sb-kernel:copy-from-system-area
                                    (alien-sap buf) 0
                                    string (* sb-vm:vector-data-offset
-                                             sb-vm:word-bits)
-                                   (* count sb-vm:byte-bits))
+                                             sb-vm:n-word-bits)
+                                   (* count sb-vm:n-byte-bits))
                                   (write-string string stream
                                                 :end count)))))))))))