Skip to content

Commit

Permalink
Merge #977
Browse files Browse the repository at this point in the history
977: Error as i32 r=asomers a=asomers

 Add Error::as_errno

This method is useful when it can be statically determined that a nix::Error be an errno, which I find to be very common.

Also, fix some recently introduced compiler warnings.

Co-authored-by: Alan Somers <asomers@gmail.com>
  • Loading branch information
bors[bot] and asomers committed Nov 27, 2018
2 parents 1d2dace + f7be5da commit 7021035
Show file tree
Hide file tree
Showing 3 changed files with 27 additions and 5 deletions.
2 changes: 2 additions & 0 deletions CHANGELOG.md
Expand Up @@ -39,6 +39,8 @@ This project adheres to [Semantic Versioning](http://semver.org/).
([#968](https://github.com/nix-rust/nix/pull/968))
- Added `unistd::execvpe` for Haiku, Linux and OpenBSD
([#975](https://github.com/nix-rust/nix/pull/975))
- Added `Error::as_errno`.
([#977](https://github.com/nix-rust/nix/pull/977))

### Changed
- Increased required Rust version to 1.24.1
Expand Down
17 changes: 17 additions & 0 deletions src/lib.rs
Expand Up @@ -110,6 +110,23 @@ pub enum Error {
}

impl Error {
/// Convert this `Error` to an [`Errno`](enum.Errno.html).
///
/// # Example
///
/// ```
/// # use nix::Error;
/// # use nix::errno::Errno;
/// let e = Error::from(Errno::EPERM);
/// assert_eq!(Some(Errno::EPERM), e.as_errno());
/// ```
pub fn as_errno(&self) -> Option<Errno> {
if let &Error::Sys(ref e) = self {
Some(*e)
} else {
None
}
}

/// Create a nix Error from a given errno
pub fn from_errno(errno: Errno) -> Error {
Expand Down
13 changes: 8 additions & 5 deletions test/test_unistd.rs
Expand Up @@ -4,13 +4,12 @@ use nix::unistd::ForkResult::*;
use nix::sys::signal::{SaFlags, SigAction, SigHandler, SigSet, Signal, sigaction};
use nix::sys::wait::*;
use nix::sys::stat::{self, Mode, SFlag};
use std::{env, iter, thread, time};
use std::{env, iter};
use std::ffi::CString;
use std::fs::{self, File, metadata};
use std::fs::{self, File};
use std::io::Write;
use std::os::unix::prelude::*;
use std::process::Command;
use tempfile::{self, tempfile, NamedTempFile};
use tempfile::{self, tempfile};
use libc::{self, _exit, off_t};

#[test]
Expand Down Expand Up @@ -387,6 +386,10 @@ fn test_lseek64() {
#[cfg(not(target_os = "freebsd"))]
#[test]
fn test_acct() {
use tempfile::NamedTempFile;
use std::process::Command;
use std::{thread, time};

skip_if_not_root!("test_acct");
let file = NamedTempFile::new().unwrap();
let path = file.path().to_str().unwrap();
Expand All @@ -396,7 +399,7 @@ fn test_acct() {
acct::disable().unwrap();

loop {
let len = metadata(path).unwrap().len();
let len = fs::metadata(path).unwrap().len();
if len > 0 { break; }
thread::sleep(time::Duration::from_millis(10));
}
Expand Down

0 comments on commit 7021035

Please sign in to comment.