Record and display absolute path of DLLs loaded (bug#10424).
authorJuanma Barranquero <lekktu@gmail.com>
Tue, 10 Apr 2012 14:16:05 +0000 (16:16 +0200)
committerJuanma Barranquero <lekktu@gmail.com>
Tue, 10 Apr 2012 14:16:05 +0000 (16:16 +0200)
* lisp/misc.el (list-dynamic-libraries--loaded): New function.
  (list-dynamic-libraries--refresh): Use it.

* src/w32.c (w32_delayed_load): Record the full path of the library
  being loaded.

lisp/ChangeLog
lisp/misc.el
src/ChangeLog
src/w32.c

index fee5e34..9d019be 100644 (file)
@@ -1,3 +1,9 @@
+2012-04-10  Juanma Barranquero  <lekktu@gmail.com>
+
+       * misc.el: Display absolute path of loaded DLLs (bug#10424).
+       (list-dynamic-libraries--loaded): New function.
+       (list-dynamic-libraries--refresh): Use it.
+
 2012-04-10  Nathan Weizenbaum  <nweiz@google.com>
 
        * progmodes/python.el (python-fill-paragraph): Make
index 4706c91..cb52ecb 100644 (file)
@@ -138,6 +138,19 @@ variation of `C-x M-c M-butterfly' from url `http://xkcd.com/378/'."
 (defvar list-dynamic-libraries--loaded-only-p)
 (make-variable-buffer-local 'list-dynamic-libraries--loaded-only-p)
 
+(defun list-dynamic-libraries--loaded (from)
+  "Compute the \"Loaded from\" column.
+Internal use only."
+  (if from
+      (let ((name (car from))
+            (path (or (cdr from) "<unknown>")))
+        ;; This is a roundabout way to change the tooltip without
+        ;; having to replace the default printer function
+        (propertize name
+                    'display (propertize name
+                                         'help-echo (concat "Loaded from: " path))))
+    ""))
+
 (defun list-dynamic-libraries--refresh ()
   "Recompute the list of dynamic libraries.
 Internal use only."
@@ -159,7 +172,7 @@ Internal use only."
       (when (or from
                 (not list-dynamic-libraries--loaded-only-p))
         (push (list id (vector (symbol-name id)
-                               (or from "")
+                               (list-dynamic-libraries--loaded from)
                                (mapconcat 'identity (cdr lib) ", ")))
               tabulated-list-entries)))))
 
index 18a3d45..76a8353 100644 (file)
@@ -1,3 +1,8 @@
+2012-04-10  Juanma Barranquero  <lekktu@gmail.com>
+
+       * w32.c (w32_delayed_load): Record the full path of the library
+       being loaded (bug#10424).
+
 2012-04-09  Glenn Morris  <rgm@gnu.org>
 
        * doc.c (Fsnarf_documentation): Check variables, functions are bound,
index 3d3d334..248a914 100644 (file)
--- a/src/w32.c
+++ b/src/w32.c
@@ -5816,7 +5816,15 @@ w32_delayed_load (Lisp_Object libraries, Lisp_Object library_id)
             CHECK_STRING_CAR (dlls);
             if ((library_dll = LoadLibrary (SDATA (XCAR (dlls)))))
               {
-                found = XCAR (dlls);
+                char name[MAX_PATH];
+                DWORD len;
+
+                len = GetModuleFileNameA (library_dll, name, sizeof (name));
+                found = Fcons (XCAR (dlls),
+                               (len > 0)
+                               /* Possibly truncated */
+                               ? make_specified_string (name, -1, len, 1)
+                               : Qnil);
                 break;
               }
           }