Files
RedBear-OS/src/header/_oldlib/termios.rs
T
Jeremy Soller bab4e2896a Format
2018-08-27 06:35:30 -06:00

94 lines
2.0 KiB
Rust

#![allow(non_camel_case_types)]
use libc::{self, c_int};
use redox_termios::{tcflag_t, Termios};
use syscall::{self, EINVAL, Error};
use ::types::pid_t;
type speed_t = libc::c_uint;
// tcsetattr args
pub const TCSANOW: tcflag_t = 0x1;
pub const TCSADRAIN: tcflag_t = 0x2;
pub const TCSAFLUSH: tcflag_t = 0x4;
// tcflush args
pub const TCIFLUSH: tcflag_t = 0x1;
pub const TCIOFLUSH: tcflag_t = 0x3;
pub const TCOFLUSH: tcflag_t = 0x2;
// tcflow args
pub const TCIOFF: tcflag_t = 0x1;
pub const TCION: tcflag_t = 0x2;
pub const TCOOFF: tcflag_t = 0x4;
pub const TCOON: tcflag_t = 0x8;
libc_fn!(unsafe tcgetattr(fd: c_int, tio: *mut Termios) -> Result<c_int> {
let fd = syscall::dup(fd as usize, b"termios")?;
let res = syscall::read(fd, &mut *tio);
let _ = syscall::close(fd);
if res? == (&*tio).len() {
Ok(0)
} else {
Err(Error::new(EINVAL))
}
});
libc_fn!(unsafe tcsetattr(fd: c_int, _arg: c_int, tio: *mut Termios) -> Result<c_int> {
let fd = syscall::dup(fd as usize, b"termios")?;
let res = syscall::write(fd, &*tio);
let _ = syscall::close(fd);
if res? == (&*tio).len() {
Ok(0)
} else {
Err(Error::new(EINVAL))
}
});
libc_fn!(cfgetispeed(_tio: *mut Termios) -> speed_t {
// TODO
0 as speed_t
});
libc_fn!(cfgetospeed(_tio: *mut Termios) -> speed_t {
// TODO
0 as speed_t
});
libc_fn!(cfsetispeed(_tio: *mut Termios, _speed: speed_t) -> Result<c_int> {
// TODO
Ok(0)
});
libc_fn!(cfsetospeed(_tio: *mut Termios, _speed: speed_t) -> Result<c_int> {
// TODO
Ok(0)
});
libc_fn!(tcdrain(_i: c_int) -> Result<c_int> {
// TODO
Ok(0)
});
libc_fn!(tcflow(_fd: c_int, _arg: c_int) -> Result<c_int> {
// TODO
Ok(0)
});
libc_fn!(tcflush(_fd: c_int, _arg: c_int) -> Result<c_int> {
// TODO
Ok(0)
});
libc_fn!(unsafe tcgetsid(_fd: c_int) -> pid_t {
// TODO
::process::_getpid()
});
libc_fn!(tcsendbreak(_fd: c_int, _arg: c_int) -> Result<c_int> {
// TODO
Ok(0)
});