From cd67b97e7c7405aa5ee8b7e312832034554c50ea Mon Sep 17 00:00:00 2001 From: Elias Naur Date: Mon, 13 Nov 2006 12:21:31 +0000 Subject: [PATCH] Made LWJGLUtil.getPathFromClassLoader run the protected ClassLoader.findLibrary in a privileged context. This is apparently necessary to get a valid path in some cases. This fixes (at least) a problem where OpenAL failed to locate the native openal library in a web start program. --- src/java/org/lwjgl/LWJGLUtil.java | 18 +++++++++--------- 1 file changed, 9 insertions(+), 9 deletions(-) diff --git a/src/java/org/lwjgl/LWJGLUtil.java b/src/java/org/lwjgl/LWJGLUtil.java index b99ee0c1..06fbc362 100644 --- a/src/java/org/lwjgl/LWJGLUtil.java +++ b/src/java/org/lwjgl/LWJGLUtil.java @@ -404,24 +404,24 @@ public class LWJGLUtil { * @param classloader Classloader to use * @return Absolute path to library if found, otherwise null */ - public static String getPathFromClassLoader(String libname, ClassLoader classloader) { + public static String getPathFromClassLoader(final String libname, final ClassLoader classloader) { try { log("getPathFromClassLoader: searching for: " + libname); - Object o = classloader; - Class c = o.getClass(); + Class c = classloader.getClass(); while (c != null) { final Class clazz = c; try { - Method findLibrary = (Method)AccessController.doPrivileged(new PrivilegedExceptionAction() { + return (String)AccessController.doPrivileged(new PrivilegedExceptionAction() { public Object run() throws Exception { - Method m = clazz.getDeclaredMethod("findLibrary", new Class[]{String.class}); - m.setAccessible(true); - return m; + Method findLibrary = clazz.getDeclaredMethod("findLibrary", new Class[]{String.class}); + findLibrary.setAccessible(true); + Object[] arguments = new Object[] {libname}; + String path = (String)findLibrary.invoke(classloader, arguments); + return path; } }); - Object[] arguments = new Object[] {libname}; - return (String)findLibrary.invoke(o, arguments); } catch (PrivilegedActionException e) { + log("Failed to locate findLibrary method: " + e.getCause()); c = c.getSuperclass(); } }