Handle ENOENT

Translate ENOENT to IoErrorKind::FileNotFound.
This commit is contained in:
Cadence Marseille 2013-12-08 17:12:41 -05:00
parent e7b0e0adbb
commit 33ca3e35be
4 changed files with 12 additions and 3 deletions
src
librustuv
libstd

@ -337,6 +337,7 @@ pub fn uv_error_to_io_error(uverr: UvError) -> IoError {
EACCES => PermissionDenied,
ECONNREFUSED => ConnectionRefused,
ECONNRESET => ConnectionReset,
ENOENT => FileNotFound,
ENOTCONN => NotConnected,
EPIPE => BrokenPipe,
ECONNABORTED => ConnectionAborted,

@ -44,6 +44,7 @@ pub static EOF: c_int = -4095;
pub static UNKNOWN: c_int = -4094;
// uv-errno.h redefines error codes for windows, but not for unix...
// https://github.com/joyent/libuv/blob/master/include/uv-errno.h
#[cfg(windows)]
pub mod errors {
@ -52,6 +53,7 @@ pub mod errors {
pub static EACCES: c_int = -4092;
pub static ECONNREFUSED: c_int = -4078;
pub static ECONNRESET: c_int = -4077;
pub static ENOENT: c_int = -4058;
pub static ENOTCONN: c_int = -4053;
pub static EPIPE: c_int = -4047;
pub static ECONNABORTED: c_int = -4079;
@ -66,6 +68,7 @@ pub mod errors {
pub static EACCES: c_int = -libc::EACCES;
pub static ECONNREFUSED: c_int = -libc::ECONNREFUSED;
pub static ECONNRESET: c_int = -libc::ECONNRESET;
pub static ENOENT: c_int = -libc::ENOENT;
pub static ENOTCONN: c_int = -libc::ENOTCONN;
pub static EPIPE: c_int = -libc::EPIPE;
pub static ECONNABORTED: c_int = -libc::ECONNABORTED;

@ -194,7 +194,7 @@ mod tests {
do run_in_mt_newsched_task {
let mut called = false;
io_error::cond.trap(|e| {
assert_eq!(e.kind, OtherIoError);
assert_eq!(e.kind, FileNotFound);
called = true;
}).inside(|| {
let stream = UnixStream::connect(&("path/to/nowhere"));

@ -340,7 +340,7 @@ mod tests {
use task::spawn;
use unstable::running_on_valgrind;
use io::native::file;
use io::{Writer, Reader, io_error};
use io::{FileNotFound, OtherIoError, Reader, Writer, io_error};
#[test]
#[cfg(not(target_os="android"))] // FIXME(#10380)
@ -354,9 +354,14 @@ mod tests {
#[test]
fn test_process_output_fail_to_start() {
// If the executable does not exist, then the io_error condition should be raised with
// IoErrorKind FileNotFound.
let mut trapped_io_error = false;
let opt_outp = io_error::cond.trap(|_| {
let opt_outp = io_error::cond.trap(|e| {
trapped_io_error = true;
// FIXME(#11023)
assert_eq!(e.kind, if cfg!(windows) { OtherIoError } else { FileNotFound });
}).inside(|| -> Option<run::ProcessOutput> {
run::process_output("no-binary-by-this-name-should-exist", [])
});