mod err;
use ::libc;
pub use self::err::DescriptorError;
use std::os::unix::io::{AsRawFd, RawFd};
pub trait Descriptor: AsRawFd {
fn open(path: *const libc::c_char,
flag: libc::c_int,
mode: Option<libc::c_int>)
-> Result<RawFd, DescriptorError> {
unsafe {
match libc::open(path, flag, mode.unwrap_or_default()) {
-1 => Err(DescriptorError::OpenFail),
fd => Ok(fd),
}
}
}
fn close(&self) -> Result<(), DescriptorError> {
unsafe {
match libc::close(self.as_raw_fd()) {
-1 => Err(DescriptorError::CloseFail),
_ => Ok(()),
}
}
}
fn drop(&self) {
if self.close().is_err() {
unimplemented!();
}
}
}