public class LibraryLoader
extends java.lang.Object
Modifier and Type | Field and Description |
---|---|
private java.lang.String |
libpath |
private Logger |
logger |
private static java.io.File |
tempDir |
Constructor and Description |
---|
LibraryLoader() |
Modifier and Type | Method and Description |
---|---|
private java.io.File |
createTempFile(java.lang.String name) |
private java.lang.String |
fatJarLibraryPath(java.lang.String linkage,
java.lang.String flavor)
Compute the path to the library.
|
private java.io.InputStream |
findLibrary(java.lang.String[] paths,
java.lang.String libname) |
private static java.lang.String |
getUnifiedOSName() |
void |
loadLibrary(java.lang.String libname,
boolean withFlavor)
Find the library libname as a resource, copy it to a tempfile
and load it using System.load().
|
private void |
loadLibraryFromStream(java.lang.String libname,
java.io.InputStream is)
Load a system library from a stream.
|
private java.io.InputStream |
tryPath(java.lang.String path)
Try to open a file at the given position.
|
private static java.lang.String |
unifyOSName(java.lang.String osname)
Translate all those Windows to "Windows".
|
private Logger logger
private java.lang.String libpath
private static java.io.File tempDir
public void loadLibrary(java.lang.String libname, boolean withFlavor)
Find the library libname as a resource, copy it to a tempfile and load it using System.load(). The name of the library has to be the base name, it is mapped to the corresponding system name using System.mapLibraryName(). For example, the library "foo" is called "libfoo.so" under Linux and "foo.dll" under Windows, but you just have to pass "foo" the loadLibrary().
I'm not quite sure if this doesn't open all kinds of security holes. Any ideas?
This function reports some more information to the "org.jblas" logger at the FINE level.
libname
- basename of the libraryjava.lang.UnsatisfiedLinkError
- if library cannot be foundsprivate java.io.InputStream findLibrary(java.lang.String[] paths, java.lang.String libname)
private static java.lang.String unifyOSName(java.lang.String osname)
private static java.lang.String getUnifiedOSName()
private java.lang.String fatJarLibraryPath(java.lang.String linkage, java.lang.String flavor)
private java.io.InputStream tryPath(java.lang.String path)
private java.io.File createTempFile(java.lang.String name) throws java.io.IOException
java.io.IOException
private void loadLibraryFromStream(java.lang.String libname, java.io.InputStream is)
libname
- name of the library (just used in constructing the library name)is
- InputStream pointing to the library