rtl8168d: use syscall::Daemon
This commit is contained in:
Generated
+2
-2
@@ -1165,9 +1165,9 @@ dependencies = [
|
||||
|
||||
[[package]]
|
||||
name = "redox_syscall"
|
||||
version = "0.2.9"
|
||||
version = "0.2.11"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "5ab49abadf3f9e1c4bc499e8845e152ad87d2ad2d30371841171169e9d75feee"
|
||||
checksum = "8380fe0152551244f0747b1bf41737e0f8a74f97a14ccefd1148187271634f3c"
|
||||
dependencies = [
|
||||
"bitflags",
|
||||
]
|
||||
|
||||
+1
-1
@@ -7,4 +7,4 @@ edition = "2018"
|
||||
bitflags = "1"
|
||||
netutils = { git = "https://gitlab.redox-os.org/redox-os/netutils.git", branch = "redox-unix" }
|
||||
redox_event = { git = "https://gitlab.redox-os.org/redox-os/event.git" }
|
||||
redox_syscall = "0.2.9"
|
||||
redox_syscall = "0.2.11"
|
||||
|
||||
+5
-23
@@ -74,27 +74,9 @@ fn main() {
|
||||
let irq_str = args.next().expect("rtl8168d: no irq provided");
|
||||
let irq = irq_str.parse::<u8>().expect("rtl8168d: failed to parse irq");
|
||||
|
||||
println!(" + RTL8168 {} on: {:X} size: {} IRQ: {}", name, bar, bar_size, irq);
|
||||
|
||||
// Daemonize
|
||||
let mut pipes = [0; 2];
|
||||
syscall::pipe2(&mut pipes, 0).unwrap();
|
||||
let mut read = unsafe { File::from_raw_fd(pipes[0] as RawFd) };
|
||||
let mut write = unsafe { File::from_raw_fd(pipes[1] as RawFd) };
|
||||
let pid = unsafe { syscall::clone(CloneFlags::empty()).unwrap() };
|
||||
if pid != 0 {
|
||||
drop(write);
|
||||
|
||||
let mut res = [0];
|
||||
if read.read(&mut res).unwrap() == res.len() {
|
||||
process::exit(res[0] as i32);
|
||||
} else {
|
||||
eprintln!("rtl8168d: daemon pipe EOF");
|
||||
process::exit(1);
|
||||
}
|
||||
} else {
|
||||
drop(read);
|
||||
eprintln!(" + RTL8168 {} on: {:X} size: {} IRQ: {}", name, bar, bar_size, irq);
|
||||
|
||||
syscall::Daemon::new(move |daemon| {
|
||||
let socket_fd = syscall::open(
|
||||
":network",
|
||||
syscall::O_RDWR | syscall::O_CREAT | syscall::O_NONBLOCK,
|
||||
@@ -124,8 +106,7 @@ fn main() {
|
||||
|
||||
syscall::setrens(0, 0).expect("rtl8168d: failed to enter null namespace");
|
||||
|
||||
write.write(&[0]).unwrap();
|
||||
drop(write);
|
||||
daemon.ready().expect("rtl8168d: failed to mark daemon as ready");
|
||||
|
||||
let todo = Arc::new(RefCell::new(Vec::<Packet>::new()));
|
||||
|
||||
@@ -218,5 +199,6 @@ fn main() {
|
||||
unsafe {
|
||||
let _ = syscall::physunmap(address);
|
||||
}
|
||||
}
|
||||
process::exit(0);
|
||||
}).expect("rtl8168d: failed to create daemon")
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user