Revert "Fix compilation on Redox by removing use of access in ld_so"

This reverts commit d9bacaec04.
This commit is contained in:
no name
2020-06-09 11:20:43 +00:00
committed by oddcoder
parent c3ae8022ba
commit d5b63a85a4
2 changed files with 21 additions and 1 deletions
+15 -1
View File
@@ -26,6 +26,7 @@ use crate::{
};
use super::{
access,
debug::{RTLDDebug, RTLDState, _dl_debug_state, _r_debug},
tcb::{Master, Tcb},
PAGE_SIZE,
@@ -163,7 +164,20 @@ impl Linker {
if self.verbose {
println!("check {}", path);
}
return Ok(Some(self.load_recursive(name, &path)?));
let access = unsafe {
let path_c = CString::new(path.as_bytes()).map_err(|err| {
Error::Malformed(format!("invalid path '{}': {}", path, err))
})?;
// TODO: Use R_OK | X_OK
// We cannot use unix stdlib because errno is thead local variable
// and fs:[0] is not set yet.
access(path_c.as_ptr(), unistd::F_OK) == 0
};
if access {
return Ok(Some(self.load_recursive(name, &path)?));
}
}
Err(Error::Malformed(format!("failed to locate '{}'", name)))
+6
View File
@@ -79,6 +79,12 @@ pub fn static_init(sp: &'static Stack) {
}
}
// Wrapper over the systemcall, Do not use outside of ld_so
pub unsafe fn access(path: *const c_char, mode: c_int) -> c_int {
let path = CStr::from_ptr(path);
syscall!(ACCESS, (path).as_ptr(), mode) as c_int
}
#[cfg(target_os = "linux")]
pub unsafe fn init(sp: &'static Stack) {
let mut tp = 0usize;