Switch to real standard, fix daemonization on real standard

This commit is contained in:
Jeremy Soller 2016-11-10 20:02:51 -07:00
parent da3f9558d9
commit 2db2d10cce
15 changed files with 55 additions and 45 deletions

View file

@ -8,7 +8,6 @@ use std::fs::File;
use std::io::{Result, Read, Write};
use std::os::unix::io::FromRawFd;
use std::rc::Rc;
use std::thread;
use syscall::{Packet, SchemeMut, EWOULDBLOCK};
@ -17,7 +16,8 @@ use scheme::EthernetScheme;
mod scheme;
fn main() {
thread::spawn(move || {
// Daemonize
if unsafe { syscall::clone(0).unwrap() } == 0 {
let network_fd = syscall::open("network:", syscall::O_RDWR | syscall::O_NONBLOCK).expect("ethernetd: failed to open network");
let network = unsafe { File::from_raw_fd(network_fd) };
@ -90,5 +90,5 @@ fn main() {
event_queue.trigger_all(0).expect("ethernetd: failed to trigger events");
event_queue.run().expect("ethernetd: failed to run event loop");
});
}
}

View file

@ -3,7 +3,6 @@ extern crate syscall;
use std::fs::File;
use std::io::{Read, Write};
use std::str;
use std::thread;
use syscall::{Packet, Result, Scheme};
@ -25,7 +24,8 @@ impl Scheme for ExampleScheme {
}
fn main(){
thread::spawn(move || {
// Daemonize
if unsafe { syscall::clone(0).unwrap() } == 0 {
let mut socket = File::create(":example").expect("example: failed to create example scheme");
let scheme = ExampleScheme;
loop {
@ -35,5 +35,5 @@ fn main(){
scheme.handle(&mut packet);
socket.write(&packet).expect("example: failed to write responses to example scheme");
}
});
}
}

View file

@ -10,7 +10,7 @@ use std::fs::File;
use std::io::{self, Read, Write};
use std::os::unix::io::FromRawFd;
use std::rc::Rc;
use std::{slice, str, thread};
use std::{slice, str};
use syscall::data::Packet;
use syscall::error::{Error, Result, EACCES, EADDRNOTAVAIL, EBADF, EIO, EINVAL, ENOENT, EWOULDBLOCK};
use syscall::flag::{EVENT_READ, O_NONBLOCK};
@ -326,7 +326,8 @@ impl SchemeMut for Ipd {
}
fn main() {
thread::spawn(move || {
// Daemonize
if unsafe { syscall::clone(0).unwrap() } == 0 {
let scheme_fd = syscall::open(":ip", syscall::O_RDWR | syscall::O_CREAT | syscall::O_NONBLOCK).expect("ipd: failed to create :ip");
let scheme_file = unsafe { File::from_raw_fd(scheme_fd) };
@ -367,5 +368,5 @@ fn main() {
event_queue.trigger_all(0).expect("ipd: failed to trigger event queue");
event_queue.run().expect("ipd: failed to run event queue");
});
}
}

View file

@ -7,7 +7,7 @@ use std::collections::{BTreeMap, VecDeque};
use std::fs::File;
use std::io::{Read, Write};
use std::rc::{Rc, Weak};
use std::{str, thread};
use std::str;
use syscall::data::Packet;
use syscall::error::{Error, Result, EBADF, EINVAL, ENOENT, EPIPE, EWOULDBLOCK};
@ -289,7 +289,8 @@ impl PtySlave {
}
fn main(){
thread::spawn(move || {
// Daemonize
if unsafe { syscall::clone(0).unwrap() } == 0 {
let mut socket = File::create(":pty").expect("pty: failed to create pty scheme");
let mut scheme = PtyScheme::new();
let mut todo = Vec::new();
@ -375,5 +376,5 @@ fn main(){
}
}
}
});
}
}

View file

@ -7,7 +7,6 @@ extern crate rand;
use std::fs::File;
use std::io::{Read, Write};
use std::thread;
use rand::chacha::ChaChaRng;
use rand::Rng;
@ -51,7 +50,8 @@ impl SchemeMut for RandScheme {
fn main(){
let has_rdrand = CpuId::new().get_feature_info().unwrap().has_rdrand();
thread::spawn(move || {
// Daemonize
if unsafe { syscall::clone(0).unwrap() } == 0 {
let mut socket = File::create(":rand").expect("rand: failed to create rand scheme");
let mut rng = ChaChaRng::new_unseeded();
@ -78,5 +78,5 @@ fn main(){
scheme.handle(&mut packet);
socket.write(&packet).expect("rand: failed to write responses to rand scheme");
}
});
}
}

@ -1 +1 @@
Subproject commit d058e56d6e9dbc2fb95bcdc335bf2da04c3d56eb
Subproject commit 8449c5b6ad87ced01bcb82627cb85a8981337210

View file

@ -8,7 +8,7 @@ use std::collections::{BTreeMap, VecDeque};
use std::cell::RefCell;
use std::fs::File;
use std::io::{self, Read, Write};
use std::{mem, slice, str, thread};
use std::{mem, slice, str};
use std::os::unix::io::FromRawFd;
use std::rc::Rc;
@ -652,7 +652,8 @@ impl SchemeMut for Tcpd {
}
fn main() {
thread::spawn(move || {
// Daemonize
if unsafe { syscall::clone(0).unwrap() } == 0 {
let scheme_fd = syscall::open(":tcp", O_RDWR | O_CREAT | O_NONBLOCK).expect("tcpd: failed to create :tcp");
let scheme_file = unsafe { File::from_raw_fd(scheme_fd) };
@ -677,5 +678,5 @@ fn main() {
event_queue.trigger_all(0).expect("tcpd: failed to trigger event queue");
event_queue.run().expect("tcpd: failed to run event queue");
});
}
}

View file

@ -8,7 +8,7 @@ use std::collections::{BTreeMap, VecDeque};
use std::cell::RefCell;
use std::fs::File;
use std::io::{self, Read, Write};
use std::{mem, slice, str, thread};
use std::{mem, slice, str};
use std::os::unix::io::FromRawFd;
use std::rc::Rc;
@ -319,7 +319,8 @@ impl SchemeMut for Udpd {
}
fn main() {
thread::spawn(move || {
// Daemonize
if unsafe { syscall::clone(0).unwrap() } == 0 {
let scheme_fd = syscall::open(":udp", O_RDWR | O_CREAT | O_NONBLOCK).expect("udpd: failed to create :udp");
let scheme_file = unsafe { File::from_raw_fd(scheme_fd) };
@ -344,5 +345,5 @@ fn main() {
event_queue.trigger_all(0).expect("udpd: failed to trigger event queue");
event_queue.run().expect("udpd: failed to run event queue");
});
}
}