diff options
Diffstat (limited to 'src/libstd')
| -rw-r--r-- | src/libstd/unstable/dynamic_lib.rs | 21 |
1 files changed, 19 insertions, 2 deletions
diff --git a/src/libstd/unstable/dynamic_lib.rs b/src/libstd/unstable/dynamic_lib.rs index 441a60a5186..671cacbbb6f 100644 --- a/src/libstd/unstable/dynamic_lib.rs +++ b/src/libstd/unstable/dynamic_lib.rs @@ -15,12 +15,16 @@ Dynamic library facilities. A simple wrapper over the platform's dynamic library facilities */ + use c_str::ToCStr; use cast; -use path; use ops::*; use option::*; +use os; +use path::GenericPath; +use path; use result::*; +use str; pub struct DynamicLibrary { handle: *u8} @@ -59,6 +63,20 @@ impl DynamicLibrary { } } + /// Appends a path to the system search path for dynamic libraries + pub fn add_search_path(path: &path::Path) { + let (envvar, sep) = if cfg!(windows) { + ("PATH", ';' as u8) + } else if cfg!(target_os = "macos") { + ("DYLD_LIBRARY_PATH", ':' as u8) + } else { + ("LD_LIBRARY_PATH", ':' as u8) + }; + let newenv = os::getenv_as_bytes(envvar).unwrap_or(~[]); + let newenv = newenv + &[sep] + path.as_vec(); + os::setenv(envvar, str::from_utf8(newenv).unwrap()); + } + /// Access the value at the symbol of the dynamic library pub unsafe fn symbol<T>(&self, symbol: &str) -> Result<T, ~str> { // This function should have a lifetime constraint of 'a on @@ -237,7 +255,6 @@ pub mod dl { FreeLibrary(handle as *libc::c_void); () } - #[link_name = "kernel32"] extern "system" { fn SetLastError(error: libc::size_t); fn LoadLibraryW(name: *libc::c_void) -> *libc::c_void; |
