diff --git a/Cargo.lock b/Cargo.lock index c4e0e0478ae2a33904295253de588ea684d4f8e3..c6b1a934b083cf4d2c8da0dff59fe9be2d3eab62 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -656,7 +656,7 @@ dependencies = [ "platform 0.1.0", "stdio 0.1.0", "string 0.1.0", - "sys_ioctl 0.1.0", + "sys_time 0.1.0", ] [[package]] diff --git a/src/platform/src/linux/mod.rs b/src/platform/src/linux/mod.rs index 3b1683bc8c283c0c4449d78b68cd5f656755131e..d95baa204753c5b08f6c8a78022d34e8ddb1b680 100644 --- a/src/platform/src/linux/mod.rs +++ b/src/platform/src/linux/mod.rs @@ -3,7 +3,7 @@ use core::{mem, ptr}; use errno; use types::*; -const TIOCGWINSZ: u32 = 0x5413; +const TIOCGWINSZ: c_ulong = 0x5413; const AT_FDCWD: c_int = -100; const AT_EMPTY_PATH: c_int = 0x1000; @@ -161,6 +161,10 @@ pub unsafe fn gethostname(mut name: *mut c_char, len: size_t) -> c_int { 0 } +pub fn getitimer(which: c_int, out: *mut itimerval) -> c_int { + e(unsafe { syscall!(GETITIMER, which, out) }) as c_int +} + pub unsafe fn getpeername( socket: c_int, address: *mut sockaddr, @@ -223,7 +227,7 @@ pub fn ioctl(fd: c_int, request: c_ulong, out: *mut c_void) -> c_int { pub fn isatty(fd: c_int) -> c_int { let mut winsize = winsize::default(); - (ioctl(fd, TIOCGWINSZ as c_ulong, &mut winsize as *mut _ as *mut c_void) == 0) as c_int + (ioctl(fd, TIOCGWINSZ, &mut winsize as *mut _ as *mut c_void) == 0) as c_int } pub fn kill(pid: pid_t, sig: c_int) -> c_int { @@ -325,6 +329,10 @@ pub unsafe fn sendto( )) as ssize_t } +pub fn setitimer(which: c_int, new: *const itimerval, old: *mut itimerval) -> c_int { + e(unsafe { syscall!(SETITIMER, which, new, old) }) as c_int +} + pub fn setpgid(pid: pid_t, pgid: pid_t) -> c_int { e(unsafe { syscall!(SETPGID, pid, pgid) }) as c_int } diff --git a/src/platform/src/redox/mod.rs b/src/platform/src/redox/mod.rs index 0ee98d55a94295ed06e8dc2864b2fc9609967d95..5a52bd7d49fc110e81a9f013fe4422409ab4a09a 100644 --- a/src/platform/src/redox/mod.rs +++ b/src/platform/src/redox/mod.rs @@ -401,6 +401,20 @@ unsafe fn inner_get_name( Ok(0) } +pub fn getitimer(which: c_int, out: *mut itimerval) -> c_int { + let _ = write!( + ::FileWriter(2), + "unimplemented: getitimer({}, {:p})", + which, + out + ); + + unsafe { + *out = itimerval::default(); + } + 0 +} + pub unsafe fn getpeername( socket: c_int, address: *mut sockaddr, @@ -642,6 +656,21 @@ pub unsafe fn sendto( write(socket, slice::from_raw_parts(buf as *const u8, len)) } +pub fn setitimer(which: c_int, new: *const itimerval, old: *mut itimerval) -> c_int { + let _ = write!( + ::FileWriter(2), + "unimplemented: setitimer({}, {:p}, {:p})", + which, + new, + old + ); + + unsafe { + *old = itimerval::default(); + } + 0 +} + pub fn setpgid(pid: pid_t, pgid: pid_t) -> c_int { e(syscall::setpgid(pid as usize, pgid as usize)) as c_int } diff --git a/src/platform/src/types.rs b/src/platform/src/types.rs index 5124a52abeb3bd682bbd5bf9196b8f7ad4b83785..5843fd3ad6c7b595e09a8a9066d4df813958df79 100644 --- a/src/platform/src/types.rs +++ b/src/platform/src/types.rs @@ -78,6 +78,7 @@ pub struct timespec { } #[repr(C)] +#[derive(Default)] pub struct timeval { pub tv_sec: time_t, pub tv_usec: suseconds_t, @@ -89,6 +90,13 @@ pub struct timezone { pub tz_dsttime: c_int, } +#[repr(C)] +#[derive(Default)] +pub struct itimerval { + pub it_interval: timeval, + pub it_value: timeval, +} + #[cfg(target_os = "redox")] impl<'a> From<&'a timespec> for redox_timespec { fn from(tp: ×pec) -> redox_timespec { diff --git a/src/sys_ioctl/src/lib.rs b/src/sys_ioctl/src/lib.rs index ac99a318fdb95e95ef0c1ff64b13dd89242b0719..308d40490cf7fcb8024309202ee3119299f02845 100644 --- a/src/sys_ioctl/src/lib.rs +++ b/src/sys_ioctl/src/lib.rs @@ -22,193 +22,193 @@ pub mod inner { platform::ioctl(fd, request, out) } - pub const TCGETS: u32 = 0x5401; - pub const TCSETS: u32 = 0x5402; - pub const TCSETSW: u32 = 0x5403; - pub const TCSETSF: u32 = 0x5404; - pub const TCGETA: u32 = 0x5405; - pub const TCSETA: u32 = 0x5406; - pub const TCSETAW: u32 = 0x5407; - pub const TCSETAF: u32 = 0x5408; - pub const TCSBRK: u32 = 0x5409; - pub const TCXONC: u32 = 0x540A; - pub const TCFLSH: u32 = 0x540B; - pub const TIOCEXCL: u32 = 0x540C; - pub const TIOCNXCL: u32 = 0x540D; - pub const TIOCSCTTY: u32 = 0x540E; - pub const TIOCGPGRP: u32 = 0x540F; - pub const TIOCSPGRP: u32 = 0x5410; - pub const TIOCOUTQ: u32 = 0x5411; - pub const TIOCSTI: u32 = 0x5412; - pub const TIOCGWINSZ: u32 = 0x5413; - pub const TIOCSWINSZ: u32 = 0x5414; - pub const TIOCMGET: u32 = 0x5415; - pub const TIOCMBIS: u32 = 0x5416; - pub const TIOCMBIC: u32 = 0x5417; - pub const TIOCMSET: u32 = 0x5418; - pub const TIOCGSOFTCAR: u32 = 0x5419; - pub const TIOCSSOFTCAR: u32 = 0x541A; - pub const FIONREAD: u32 = 0x541B; - pub const TIOCINQ: u32 = FIONREAD; - pub const TIOCLINUX: u32 = 0x541C; - pub const TIOCCONS: u32 = 0x541D; - pub const TIOCGSERIAL: u32 = 0x541E; - pub const TIOCSSERIAL: u32 = 0x541F; - pub const TIOCPKT: u32 = 0x5420; - pub const FIONBIO: u32 = 0x5421; - pub const TIOCNOTTY: u32 = 0x5422; - pub const TIOCSETD: u32 = 0x5423; - pub const TIOCGETD: u32 = 0x5424; - pub const TCSBRKP: u32 = 0x5425; - pub const TIOCSBRK: u32 = 0x5427; - pub const TIOCCBRK: u32 = 0x5428; - pub const TIOCGSID: u32 = 0x5429; - pub const TIOCGRS485: u32 = 0x542E; - pub const TIOCSRS485: u32 = 0x542F; - pub const TIOCGPTN: u32 = 0x80045430; - pub const TIOCSPTLCK: u32 = 0x40045431; - pub const TIOCGDEV: u32 = 0x80045432; - pub const TCGETX: u32 = 0x5432; - pub const TCSETX: u32 = 0x5433; - pub const TCSETXF: u32 = 0x5434; - pub const TCSETXW: u32 = 0x5435; - pub const TIOCSIG: u32 = 0x40045436; - pub const TIOCVHANGUP: u32 = 0x5437; - pub const TIOCGPKT: u32 = 0x80045438; - pub const TIOCGPTLCK: u32 = 0x80045439; - pub const TIOCGEXCL: u32 = 0x80045440; - pub const TIOCGPTPEER: u32 = 0x5441; - - pub const FIONCLEX: u32 = 0x5450; - pub const FIOCLEX: u32 = 0x5451; - pub const FIOASYNC: u32 = 0x5452; - pub const TIOCSERCONFIG: u32 = 0x5453; - pub const TIOCSERGWILD: u32 = 0x5454; - pub const TIOCSERSWILD: u32 = 0x5455; - pub const TIOCGLCKTRMIOS: u32 = 0x5456; - pub const TIOCSLCKTRMIOS: u32 = 0x5457; - pub const TIOCSERGSTRUCT: u32 = 0x5458; - pub const TIOCSERGETLSR: u32 = 0x5459; - pub const TIOCSERGETMULTI: u32 = 0x545A; - pub const TIOCSERSETMULTI: u32 = 0x545B; - - pub const TIOCMIWAIT: u32 = 0x545C; - pub const TIOCGICOUNT: u32 = 0x545D; - pub const FIOQSIZE: u32 = 0x5460; - - pub const TIOCPKT_DATA: u32 = 0; - pub const TIOCPKT_FLUSHREAD: u32 = 1; - pub const TIOCPKT_FLUSHWRITE: u32 = 2; - pub const TIOCPKT_STOP: u32 = 4; - pub const TIOCPKT_START: u32 = 8; - pub const TIOCPKT_NOSTOP: u32 = 16; - pub const TIOCPKT_DOSTOP: u32 = 32; - pub const TIOCPKT_IOCTL: u32 = 64; - - pub const TIOCSER_TEMT: u32 = 0x01; - - pub const TIOCM_LE: u32 = 0x001; - pub const TIOCM_DTR: u32 = 0x002; - pub const TIOCM_RTS: u32 = 0x004; - pub const TIOCM_ST: u32 = 0x008; - pub const TIOCM_SR: u32 = 0x010; - pub const TIOCM_CTS: u32 = 0x020; - pub const TIOCM_CAR: u32 = 0x040; - pub const TIOCM_RNG: u32 = 0x080; - pub const TIOCM_DSR: u32 = 0x100; - pub const TIOCM_CD: u32 = TIOCM_CAR; - pub const TIOCM_RI: u32 = TIOCM_RNG; - pub const TIOCM_OUT1: u32 = 0x2000; - pub const TIOCM_OUT2: u32 = 0x4000; - pub const TIOCM_LOOP: u32 = 0x8000; - - pub const N_TTY: u32 = 0; - pub const N_SLIP: u32 = 1; - pub const N_MOUSE: u32 = 2; - pub const N_PPP: u32 = 3; - pub const N_STRIP: u32 = 4; - pub const N_AX25: u32 = 5; - pub const N_X25: u32 = 6; - pub const N_6PACK: u32 = 7; - pub const N_MASC: u32 = 8; - pub const N_R3964: u32 = 9; - pub const N_PROFIBUS_FDL: u32 = 10; - pub const N_IRDA: u32 = 11; - pub const N_SMSBLOCK: u32 = 12; - pub const N_HDLC: u32 = 13; - pub const N_SYNC_PPP: u32 = 14; - pub const N_HCI: u32 = 15; - - pub const FIOSETOWN: u32 = 0x8901; - pub const SIOCSPGRP: u32 = 0x8902; - pub const FIOGETOWN: u32 = 0x8903; - pub const SIOCGPGRP: u32 = 0x8904; - pub const SIOCATMARK: u32 = 0x8905; - pub const SIOCGSTAMP: u32 = 0x8906; - pub const SIOCGSTAMPNS: u32 = 0x8907; - - pub const SIOCADDRT: u32 = 0x890B; - pub const SIOCDELRT: u32 = 0x890C; - pub const SIOCRTMSG: u32 = 0x890D; - - pub const SIOCGIFNAME: u32 = 0x8910; - pub const SIOCSIFLINK: u32 = 0x8911; - pub const SIOCGIFCONF: u32 = 0x8912; - pub const SIOCGIFFLAGS: u32 = 0x8913; - pub const SIOCSIFFLAGS: u32 = 0x8914; - pub const SIOCGIFADDR: u32 = 0x8915; - pub const SIOCSIFADDR: u32 = 0x8916; - pub const SIOCGIFDSTADDR: u32 = 0x8917; - pub const SIOCSIFDSTADDR: u32 = 0x8918; - pub const SIOCGIFBRDADDR: u32 = 0x8919; - pub const SIOCSIFBRDADDR: u32 = 0x891a; - pub const SIOCGIFNETMASK: u32 = 0x891b; - pub const SIOCSIFNETMASK: u32 = 0x891c; - pub const SIOCGIFMETRIC: u32 = 0x891d; - pub const SIOCSIFMETRIC: u32 = 0x891e; - pub const SIOCGIFMEM: u32 = 0x891f; - pub const SIOCSIFMEM: u32 = 0x8920; - pub const SIOCGIFMTU: u32 = 0x8921; - pub const SIOCSIFMTU: u32 = 0x8922; - pub const SIOCSIFNAME: u32 = 0x8923; - pub const SIOCSIFHWADDR: u32 = 0x8924; - pub const SIOCGIFENCAP: u32 = 0x8925; - pub const SIOCSIFENCAP: u32 = 0x8926; - pub const SIOCGIFHWADDR: u32 = 0x8927; - pub const SIOCGIFSLAVE: u32 = 0x8929; - pub const SIOCSIFSLAVE: u32 = 0x8930; - pub const SIOCADDMULTI: u32 = 0x8931; - pub const SIOCDELMULTI: u32 = 0x8932; - pub const SIOCGIFINDEX: u32 = 0x8933; - pub const SIOGIFINDEX: u32 = SIOCGIFINDEX; - pub const SIOCSIFPFLAGS: u32 = 0x8934; - pub const SIOCGIFPFLAGS: u32 = 0x8935; - pub const SIOCDIFADDR: u32 = 0x8936; - pub const SIOCSIFHWBROADCAST: u32 = 0x8937; - pub const SIOCGIFCOUNT: u32 = 0x8938; - - pub const SIOCGIFBR: u32 = 0x8940; - pub const SIOCSIFBR: u32 = 0x8941; - - pub const SIOCGIFTXQLEN: u32 = 0x8942; - pub const SIOCSIFTXQLEN: u32 = 0x8943; - - pub const SIOCDARP: u32 = 0x8953; - pub const SIOCGARP: u32 = 0x8954; - pub const SIOCSARP: u32 = 0x8955; - - pub const SIOCDRARP: u32 = 0x8960; - pub const SIOCGRARP: u32 = 0x8961; - pub const SIOCSRARP: u32 = 0x8962; - - pub const SIOCGIFMAP: u32 = 0x8970; - pub const SIOCSIFMAP: u32 = 0x8971; - - pub const SIOCADDDLCI: u32 = 0x8980; - pub const SIOCDELDLCI: u32 = 0x8981; - - pub const SIOCDEVPRIVATE: u32 = 0x89F0; - pub const SIOCPROTOPRIVATE: u32 = 0x89E0; + pub const TCGETS: c_ulong = 0x5401; + pub const TCSETS: c_ulong = 0x5402; + pub const TCSETSW: c_ulong = 0x5403; + pub const TCSETSF: c_ulong = 0x5404; + pub const TCGETA: c_ulong = 0x5405; + pub const TCSETA: c_ulong = 0x5406; + pub const TCSETAW: c_ulong = 0x5407; + pub const TCSETAF: c_ulong = 0x5408; + pub const TCSBRK: c_ulong = 0x5409; + pub const TCXONC: c_ulong = 0x540A; + pub const TCFLSH: c_ulong = 0x540B; + pub const TIOCEXCL: c_ulong = 0x540C; + pub const TIOCNXCL: c_ulong = 0x540D; + pub const TIOCSCTTY: c_ulong = 0x540E; + pub const TIOCGPGRP: c_ulong = 0x540F; + pub const TIOCSPGRP: c_ulong = 0x5410; + pub const TIOCOUTQ: c_ulong = 0x5411; + pub const TIOCSTI: c_ulong = 0x5412; + pub const TIOCGWINSZ: c_ulong = 0x5413; + pub const TIOCSWINSZ: c_ulong = 0x5414; + pub const TIOCMGET: c_ulong = 0x5415; + pub const TIOCMBIS: c_ulong = 0x5416; + pub const TIOCMBIC: c_ulong = 0x5417; + pub const TIOCMSET: c_ulong = 0x5418; + pub const TIOCGSOFTCAR: c_ulong = 0x5419; + pub const TIOCSSOFTCAR: c_ulong = 0x541A; + pub const FIONREAD: c_ulong = 0x541B; + pub const TIOCINQ: c_ulong = FIONREAD; + pub const TIOCLINUX: c_ulong = 0x541C; + pub const TIOCCONS: c_ulong = 0x541D; + pub const TIOCGSERIAL: c_ulong = 0x541E; + pub const TIOCSSERIAL: c_ulong = 0x541F; + pub const TIOCPKT: c_ulong = 0x5420; + pub const FIONBIO: c_ulong = 0x5421; + pub const TIOCNOTTY: c_ulong = 0x5422; + pub const TIOCSETD: c_ulong = 0x5423; + pub const TIOCGETD: c_ulong = 0x5424; + pub const TCSBRKP: c_ulong = 0x5425; + pub const TIOCSBRK: c_ulong = 0x5427; + pub const TIOCCBRK: c_ulong = 0x5428; + pub const TIOCGSID: c_ulong = 0x5429; + pub const TIOCGRS485: c_ulong = 0x542E; + pub const TIOCSRS485: c_ulong = 0x542F; + pub const TIOCGPTN: c_ulong = 0x80045430; + pub const TIOCSPTLCK: c_ulong = 0x40045431; + pub const TIOCGDEV: c_ulong = 0x80045432; + pub const TCGETX: c_ulong = 0x5432; + pub const TCSETX: c_ulong = 0x5433; + pub const TCSETXF: c_ulong = 0x5434; + pub const TCSETXW: c_ulong = 0x5435; + pub const TIOCSIG: c_ulong = 0x40045436; + pub const TIOCVHANGUP: c_ulong = 0x5437; + pub const TIOCGPKT: c_ulong = 0x80045438; + pub const TIOCGPTLCK: c_ulong = 0x80045439; + pub const TIOCGEXCL: c_ulong = 0x80045440; + pub const TIOCGPTPEER: c_ulong = 0x5441; + + pub const FIONCLEX: c_ulong = 0x5450; + pub const FIOCLEX: c_ulong = 0x5451; + pub const FIOASYNC: c_ulong = 0x5452; + pub const TIOCSERCONFIG: c_ulong = 0x5453; + pub const TIOCSERGWILD: c_ulong = 0x5454; + pub const TIOCSERSWILD: c_ulong = 0x5455; + pub const TIOCGLCKTRMIOS: c_ulong = 0x5456; + pub const TIOCSLCKTRMIOS: c_ulong = 0x5457; + pub const TIOCSERGSTRUCT: c_ulong = 0x5458; + pub const TIOCSERGETLSR: c_ulong = 0x5459; + pub const TIOCSERGETMULTI: c_ulong = 0x545A; + pub const TIOCSERSETMULTI: c_ulong = 0x545B; + + pub const TIOCMIWAIT: c_ulong = 0x545C; + pub const TIOCGICOUNT: c_ulong = 0x545D; + pub const FIOQSIZE: c_ulong = 0x5460; + + pub const TIOCPKT_DATA: c_ulong = 0; + pub const TIOCPKT_FLUSHREAD: c_ulong = 1; + pub const TIOCPKT_FLUSHWRITE: c_ulong = 2; + pub const TIOCPKT_STOP: c_ulong = 4; + pub const TIOCPKT_START: c_ulong = 8; + pub const TIOCPKT_NOSTOP: c_ulong = 16; + pub const TIOCPKT_DOSTOP: c_ulong = 32; + pub const TIOCPKT_IOCTL: c_ulong = 64; + + pub const TIOCSER_TEMT: c_ulong = 0x01; + + pub const TIOCM_LE: c_ulong = 0x001; + pub const TIOCM_DTR: c_ulong = 0x002; + pub const TIOCM_RTS: c_ulong = 0x004; + pub const TIOCM_ST: c_ulong = 0x008; + pub const TIOCM_SR: c_ulong = 0x010; + pub const TIOCM_CTS: c_ulong = 0x020; + pub const TIOCM_CAR: c_ulong = 0x040; + pub const TIOCM_RNG: c_ulong = 0x080; + pub const TIOCM_DSR: c_ulong = 0x100; + pub const TIOCM_CD: c_ulong = TIOCM_CAR; + pub const TIOCM_RI: c_ulong = TIOCM_RNG; + pub const TIOCM_OUT1: c_ulong = 0x2000; + pub const TIOCM_OUT2: c_ulong = 0x4000; + pub const TIOCM_LOOP: c_ulong = 0x8000; + + pub const N_TTY: c_ulong = 0; + pub const N_SLIP: c_ulong = 1; + pub const N_MOUSE: c_ulong = 2; + pub const N_PPP: c_ulong = 3; + pub const N_STRIP: c_ulong = 4; + pub const N_AX25: c_ulong = 5; + pub const N_X25: c_ulong = 6; + pub const N_6PACK: c_ulong = 7; + pub const N_MASC: c_ulong = 8; + pub const N_R3964: c_ulong = 9; + pub const N_PROFIBUS_FDL: c_ulong = 10; + pub const N_IRDA: c_ulong = 11; + pub const N_SMSBLOCK: c_ulong = 12; + pub const N_HDLC: c_ulong = 13; + pub const N_SYNC_PPP: c_ulong = 14; + pub const N_HCI: c_ulong = 15; + + pub const FIOSETOWN: c_ulong = 0x8901; + pub const SIOCSPGRP: c_ulong = 0x8902; + pub const FIOGETOWN: c_ulong = 0x8903; + pub const SIOCGPGRP: c_ulong = 0x8904; + pub const SIOCATMARK: c_ulong = 0x8905; + pub const SIOCGSTAMP: c_ulong = 0x8906; + pub const SIOCGSTAMPNS: c_ulong = 0x8907; + + pub const SIOCADDRT: c_ulong = 0x890B; + pub const SIOCDELRT: c_ulong = 0x890C; + pub const SIOCRTMSG: c_ulong = 0x890D; + + pub const SIOCGIFNAME: c_ulong = 0x8910; + pub const SIOCSIFLINK: c_ulong = 0x8911; + pub const SIOCGIFCONF: c_ulong = 0x8912; + pub const SIOCGIFFLAGS: c_ulong = 0x8913; + pub const SIOCSIFFLAGS: c_ulong = 0x8914; + pub const SIOCGIFADDR: c_ulong = 0x8915; + pub const SIOCSIFADDR: c_ulong = 0x8916; + pub const SIOCGIFDSTADDR: c_ulong = 0x8917; + pub const SIOCSIFDSTADDR: c_ulong = 0x8918; + pub const SIOCGIFBRDADDR: c_ulong = 0x8919; + pub const SIOCSIFBRDADDR: c_ulong = 0x891a; + pub const SIOCGIFNETMASK: c_ulong = 0x891b; + pub const SIOCSIFNETMASK: c_ulong = 0x891c; + pub const SIOCGIFMETRIC: c_ulong = 0x891d; + pub const SIOCSIFMETRIC: c_ulong = 0x891e; + pub const SIOCGIFMEM: c_ulong = 0x891f; + pub const SIOCSIFMEM: c_ulong = 0x8920; + pub const SIOCGIFMTU: c_ulong = 0x8921; + pub const SIOCSIFMTU: c_ulong = 0x8922; + pub const SIOCSIFNAME: c_ulong = 0x8923; + pub const SIOCSIFHWADDR: c_ulong = 0x8924; + pub const SIOCGIFENCAP: c_ulong = 0x8925; + pub const SIOCSIFENCAP: c_ulong = 0x8926; + pub const SIOCGIFHWADDR: c_ulong = 0x8927; + pub const SIOCGIFSLAVE: c_ulong = 0x8929; + pub const SIOCSIFSLAVE: c_ulong = 0x8930; + pub const SIOCADDMULTI: c_ulong = 0x8931; + pub const SIOCDELMULTI: c_ulong = 0x8932; + pub const SIOCGIFINDEX: c_ulong = 0x8933; + pub const SIOGIFINDEX: c_ulong = SIOCGIFINDEX; + pub const SIOCSIFPFLAGS: c_ulong = 0x8934; + pub const SIOCGIFPFLAGS: c_ulong = 0x8935; + pub const SIOCDIFADDR: c_ulong = 0x8936; + pub const SIOCSIFHWBROADCAST: c_ulong = 0x8937; + pub const SIOCGIFCOUNT: c_ulong = 0x8938; + + pub const SIOCGIFBR: c_ulong = 0x8940; + pub const SIOCSIFBR: c_ulong = 0x8941; + + pub const SIOCGIFTXQLEN: c_ulong = 0x8942; + pub const SIOCSIFTXQLEN: c_ulong = 0x8943; + + pub const SIOCDARP: c_ulong = 0x8953; + pub const SIOCGARP: c_ulong = 0x8954; + pub const SIOCSARP: c_ulong = 0x8955; + + pub const SIOCDRARP: c_ulong = 0x8960; + pub const SIOCGRARP: c_ulong = 0x8961; + pub const SIOCSRARP: c_ulong = 0x8962; + + pub const SIOCGIFMAP: c_ulong = 0x8970; + pub const SIOCSIFMAP: c_ulong = 0x8971; + + pub const SIOCADDDLCI: c_ulong = 0x8980; + pub const SIOCDELDLCI: c_ulong = 0x8981; + + pub const SIOCDEVPRIVATE: c_ulong = 0x89F0; + pub const SIOCPROTOPRIVATE: c_ulong = 0x89E0; } #[cfg(target_os = "linux")] diff --git a/src/sys_time/src/lib.rs b/src/sys_time/src/lib.rs index 57db9e7760168b83d47bd7b0b65fd67fad776d2f..6ebbf016306872a1cfc6d619233d46f753a46171 100644 --- a/src/sys_time/src/lib.rs +++ b/src/sys_time/src/lib.rs @@ -6,7 +6,12 @@ extern crate platform; use platform::types::*; +pub const ITIMER_REAL: c_int = 0; +pub const ITIMER_VIRTUAL: c_int = 1; +pub const ITIMER_PROF: c_int = 2; + #[repr(C)] +#[derive(Default)] pub struct timeval { pub tv_sec: time_t, pub tv_usec: suseconds_t, @@ -18,6 +23,7 @@ pub struct timezone { } #[repr(C)] +#[derive(Default)] pub struct itimerval { pub it_interval: timeval, pub it_value: timeval, @@ -28,18 +34,22 @@ pub struct fd_set { pub fds_bits: [c_long; 16usize], } -// #[no_mangle] +#[no_mangle] pub extern "C" fn getitimer(which: c_int, value: *mut itimerval) -> c_int { - unimplemented!(); + platform::getitimer(which, value as *mut platform::types::itimerval) } -// #[no_mangle] +#[no_mangle] pub extern "C" fn setitimer( which: c_int, value: *const itimerval, ovalue: *mut itimerval, ) -> c_int { - unimplemented!(); + platform::setitimer( + which, + value as *const platform::types::itimerval, + ovalue as *mut platform::types::itimerval + ) } #[no_mangle] diff --git a/src/unistd/Cargo.toml b/src/unistd/Cargo.toml index 3cf577728daa7b1468e8f11ad3bcdacfebb1f059..138a8209f9c8ec342ff80d0aa8888487b3e7eff2 100644 --- a/src/unistd/Cargo.toml +++ b/src/unistd/Cargo.toml @@ -12,4 +12,4 @@ errno = { path = "../errno" } platform = { path = "../platform" } stdio = { path = "../stdio" } string = { path = "../string" } -sys_ioctl = { path = "../sys_ioctl" } +sys_time = { path = "../sys_time" } diff --git a/src/unistd/src/lib.rs b/src/unistd/src/lib.rs index 49c5a6b580c0dce5bbd1fcf8ec8658c70deb16f6..f3deb945251feea79eb384b7fbf722467a4234b4 100644 --- a/src/unistd/src/lib.rs +++ b/src/unistd/src/lib.rs @@ -6,6 +6,7 @@ extern crate errno; extern crate platform; extern crate stdio; extern crate string; +extern crate sys_time; use core::{ptr, slice}; @@ -47,9 +48,26 @@ pub extern "C" fn access(path: *const c_char, amode: c_int) -> c_int { unimplemented!(); } -// #[no_mangle] +#[no_mangle] pub extern "C" fn alarm(seconds: c_uint) -> c_uint { - unimplemented!(); + let mut timer = sys_time::itimerval { + it_value: sys_time::timeval { + tv_sec: seconds as time_t, + tv_usec: 0 + }, + ..Default::default() + }; + let errno_backup = unsafe { platform::errno }; + let secs = if sys_time::setitimer(sys_time::ITIMER_REAL, &timer, &mut timer) < 0 { + 0 + } else { + timer.it_value.tv_sec as c_uint + if timer.it_value.tv_usec > 0 { 1 } else { 0 } + }; + unsafe { + platform::errno = errno_backup; + } + + secs } #[no_mangle] @@ -432,9 +450,29 @@ pub extern "C" fn ttyname_r(fildes: c_int, name: *mut c_char, namesize: size_t) unimplemented!(); } -// #[no_mangle] -pub extern "C" fn ualarm(useconds: useconds_t, interval: useconds_t) -> useconds_t { - unimplemented!(); +#[no_mangle] +pub extern "C" fn ualarm(value: useconds_t, interval: useconds_t) -> useconds_t { + let mut timer = sys_time::itimerval { + it_value: sys_time::timeval { + tv_sec: 0, + tv_usec: value as suseconds_t + }, + it_interval: sys_time::timeval { + tv_sec: 0, + tv_usec: interval as suseconds_t + } + }; + let errno_backup = unsafe { platform::errno }; + let usecs = if sys_time::setitimer(sys_time::ITIMER_REAL, &timer, &mut timer) < 0 { + 0 + } else { + timer.it_value.tv_sec as useconds_t * 1_000_000 + timer.it_value.tv_usec as useconds_t + }; + unsafe { + platform::errno = errno_backup; + } + + usecs } #[no_mangle]