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.

This commit is contained in:
Elias Naur 2006-11-13 12:21:31 +00:00
parent 14b68631c9
commit cd67b97e7c
1 changed files with 9 additions and 9 deletions

View File

@ -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();
}
}