[Openmcl-cvs-notifications] r14432 - in /trunk/source: level-0/l0-cfm-support.lisp level-1/linux-files.lisp
gb at clozure.com
gb at clozure.com
Sun Nov 14 19:10:38 CST 2010
Author: gb
Date: Sun Nov 14 19:10:38 2010
New Revision: 14432
Log:
Move (windows-specific) NBACKSLASH-TO-FORWARD-SLASH from level-1/linux-files
to level-0/l0-cfm-support.lisp.
Implement REVIVE-SHARED-LIBRARIES and REOPEN-USER-LIBRARIES for Windows.
Fix (windows-specific) HMODULE-PATHNAME.
Modified:
trunk/source/level-0/l0-cfm-support.lisp
trunk/source/level-1/linux-files.lisp
Modified: trunk/source/level-0/l0-cfm-support.lisp
=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=
=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=
=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=
=3D=3D=3D
--- trunk/source/level-0/l0-cfm-support.lisp (original)
+++ trunk/source/level-0/l0-cfm-support.lisp Sun Nov 14 19:10:38 2010
@@ -478,6 +478,10 @@
(defvar *get-module-base-name-addr*)
(defvar *get-module-handle-ex-addr*)
=
+ (defun nbackslash-to-forward-slash (namestring)
+ (dotimes (i (length namestring) namestring)
+ (when (eql (schar namestring i) #\\)
+ (setf (schar namestring i) #\/))))
=
(defun init-windows-ffi ()
(%revive-macptr *windows-invalid-handle*)
@@ -490,20 +494,19 @@
(init-windows-ffi)
=
(defun hmodule-pathname (hmodule)
- (do* ((bufsize 64))
+ (do* ((bufsize 128))
()
(%stack-block ((name bufsize))
(let* ((needed (ff-call *get-module-file-name-addr*
- :address *current-process-handle*
:address hmodule
:address name
:signed-fullword bufsize
:signed-fullword)))
(if (eql 0 needed)
(return nil)
- (if (< bufsize needed)
- (setq bufsize needed)
- (return (%str-from-ptr name needed))))))))
+ (if (<=3D bufsize needed)
+ (setq bufsize (+ bufsize bufsize))
+ (return (nbackslash-to-forward-slash (%str-from-ptr name nee=
ded)))))))))
=
(defun hmodule-basename (hmodule)
(do* ((bufsize 64))
@@ -593,10 +596,47 @@
shlib)
(values nil (%windows-error-string (get-last-windows-error))))))
=
-(init-shared-libraries)
+ (init-shared-libraries)
+
+ (defun revive-shared-libraries ()
+ (dolist (lib *shared-libraries*)
+ (setf (shlib.map lib) nil
+ (shlib.handle lib) nil
+ (shlib.pathname lib) nil
+ (shlib.base lib) nil)
+ (let* ((soname (shlib.soname lib))
+ (soname-len (length soname)))
+ (block found
+ (for-each-loaded-module
+ (lambda (m)
+ (let* ((module-soname (hmodule-basename m)))
+ (when (%simple-string=3D soname module-soname 0 0 soname-le=
n (length module-soname))
+ (let* ((m (%inc-ptr m 0)))
+ (setf (shlib.base lib) m
+ (shlib.map lib) m
+ (shlib.pathname lib) (hmodule-pathname m)))
+ (return-from found)))))))))
+
+ (defun reopen-user-libraries ()
+ (dolist (lib *shared-libraries*)
+ (unless (shlib.map lib)
+ (let* ((handle (with-cstrs ((name (shlib.soname lib)))
+ (ff-call
+ (%kernel-import target::kernel-import-GetSharedL=
ibrary)
+ :address name
+ :unsigned-fullword 0
+ :address))))
+ (unless (%null-ptr-p handle)
+ (setf (shlib.handle lib) handle
+ (shlib.base lib) handle
+ (shlib.map lib) handle
+ (shlib.pathname lib) (hmodule-pathname handle)
+ (shlib.opencount lib) 1))))))
+ =
+ =
=
;;; end windows-target
-) =
+ ) =
=
=
(defun ensure-open-shlib (c force)
@@ -958,7 +998,10 @@
(setup-lookup-calls)
(reopen-user-libraries))
#+windows-target
- (init-windows-ffi)
+ (progn
+ (init-windows-ffi)
+ (revive-shared-libraries)
+ (reopen-user-libraries))
(when *eeps*
(without-interrupts =
(maphash #'(lambda (k v) =
Modified: trunk/source/level-1/linux-files.lisp
=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=
=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=
=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=
=3D=3D=3D
--- trunk/source/level-1/linux-files.lisp (original)
+++ trunk/source/level-1/linux-files.lisp Sun Nov 14 19:10:38 2010
@@ -25,10 +25,7 @@
=
=
=
-(defun nbackslash-to-forward-slash (namestring)
- (dotimes (i (length namestring) namestring)
- (when (eql (schar namestring i) #\\)
- (setf (schar namestring i) #\/))))
+
=
(defconstant univeral-time-start-in-windows-seconds 9435484800)
=
More information about the Openmcl-cvs-notifications
mailing list