update NEWS
[sbcl.git] / src / code / common-os.lisp
index 7de4d46..bf71744 100644 (file)
 
 (defvar *software-version* nil)
 
-(defvar *core-pathname* nil
-  #!+sb-doc
-  "The absolute pathname of the running SBCL core.")
-
 (sb!alien:define-alien-variable ("posix_argv" *native-posix-argv*) (* (* char)))
 (sb!alien:define-alien-variable ("core_string" *native-core-string*) (* char))
+(sb!alien:define-alien-routine
+ os-get-runtime-executable-path sb!alien:c-string (external-path boolean))
+(sb!alien:define-alien-variable
+ ("saved_runtime_path" *native-saved-runtime-path*) (* char))
 
 ;;; if something ever needs to be done differently for one OS, then
 ;;; split out the different part into per-os functions.
@@ -45,4 +45,9 @@
   (/show0 "setting *CORE-PATHNAME*")
   (setf *core-pathname*
         (merge-pathnames (native-pathname *core-string*)))
+  (/show0 "setting *RUNTIME-PATHNAME*")
+  (let ((exe (os-get-runtime-executable-path t))
+        (saved (sb!alien:cast *native-saved-runtime-path* sb!alien:c-string)))
+    (setf *runtime-pathname*
+          (when (or exe saved) (native-pathname (or exe saved)))))
   (/show0 "leaving OS-COLD-INIT-OR-REINIT"))