[INFO] crate unshare 0.5.1 is already in cache [INFO] extracting crate unshare 0.5.1 into work/ex/clippy-test-run/sources/stable/reg/unshare/0.5.1 [INFO] extracting crate unshare 0.5.1 into work/ex/clippy-test-run/sources/stable+rustflags=-Dclippy%3A%3Ainto_iter_on_array/reg/unshare/0.5.1 [INFO] validating manifest of unshare-0.5.1 on toolchain stable [INFO] running `"/mnt/big/crater/work/local/cargo-home/bin/cargo" "+stable" "read-manifest" "--manifest-path" "Cargo.toml"` [INFO] validating manifest of unshare-0.5.1 on toolchain stable+rustflags=-Dclippy::into_iter_on_array [INFO] running `"/mnt/big/crater/work/local/cargo-home/bin/cargo" "+stable" "read-manifest" "--manifest-path" "Cargo.toml"` [INFO] started frobbing unshare-0.5.1 [INFO] finished frobbing unshare-0.5.1 [INFO] frobbed toml for unshare-0.5.1 written to work/ex/clippy-test-run/sources/stable/reg/unshare/0.5.1/Cargo.toml [INFO] started frobbing unshare-0.5.1 [INFO] finished frobbing unshare-0.5.1 [INFO] frobbed toml for unshare-0.5.1 written to work/ex/clippy-test-run/sources/stable+rustflags=-Dclippy%3A%3Ainto_iter_on_array/reg/unshare/0.5.1/Cargo.toml [INFO] running `"/mnt/big/crater/work/local/cargo-home/bin/cargo" "+stable" "generate-lockfile" "--manifest-path" "Cargo.toml" "-Zno-index-update"` [INFO] running `"/mnt/big/crater/work/local/cargo-home/bin/cargo" "+stable" "generate-lockfile" "--manifest-path" "Cargo.toml" "-Zno-index-update"` [INFO] running `"/mnt/big/crater/work/local/cargo-home/bin/cargo" "+stable" "fetch" "--locked" "--manifest-path" "Cargo.toml"` [INFO] running `"/mnt/big/crater/work/local/cargo-home/bin/cargo" "+stable" "fetch" "--locked" "--manifest-path" "Cargo.toml"` [INFO] linting unshare-0.5.1 against stable for clippy-test-run [INFO] running `"docker" "create" "-v" "/mnt/big/crater/work/local/target-dirs/clippy-test-run/worker-2/stable:/opt/crater/target:rw,Z" "-v" "/mnt/big/crater/work/ex/clippy-test-run/sources/stable/reg/unshare/0.5.1:/opt/crater/workdir:ro,Z" "-v" "/mnt/big/crater/work/local/cargo-home:/opt/crater/cargo-home:ro,Z" "-v" "/mnt/big/crater/work/local/rustup-home:/opt/crater/rustup-home:ro,Z" "-e" "USER_ID=1000" "-e" "SOURCE_DIR=/opt/crater/workdir" "-e" "MAP_USER_ID=1000" "-e" "CARGO_TARGET_DIR=/opt/crater/target" "-e" "CARGO_INCREMENTAL=0" "-e" "RUST_BACKTRACE=full" "-e" "RUSTFLAGS=--cap-lints=forbid" "-e" "CARGO_HOME=/opt/crater/cargo-home" "-e" "RUSTUP_HOME=/opt/crater/rustup-home" "-w" "/opt/crater/workdir" "-m" "1536M" "--network" "none" "rustops/crates-build-env" "/opt/crater/cargo-home/bin/cargo" "+stable" "clippy" "--frozen" "--all" "--all-targets"` [INFO] [stdout] 0ff901e2ad9bcdfba721cd546bbd4e53d0cee8678cf75053f9b6406817976745 [INFO] running `"docker" "start" "-a" "0ff901e2ad9bcdfba721cd546bbd4e53d0cee8678cf75053f9b6406817976745"` [INFO] [stderr] Checking unshare v0.5.1 (/opt/crater/workdir) [INFO] [stderr] warning: unneeded return statement [INFO] [stderr] --> src/pipe.rs:61:9 [INFO] [stderr] | [INFO] [stderr] 61 | return fd; [INFO] [stderr] | ^^^^^^^^^^ help: remove `return` as shown: `fd` [INFO] [stderr] | [INFO] [stderr] = note: #[warn(clippy::needless_return)] on by default [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#needless_return [INFO] [stderr] [INFO] [stderr] warning: unneeded return statement [INFO] [stderr] --> src/pipe.rs:71:9 [INFO] [stderr] | [INFO] [stderr] 71 | return fd; [INFO] [stderr] | ^^^^^^^^^^ help: remove `return` as shown: `fd` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#needless_return [INFO] [stderr] [INFO] [stderr] warning: this if statement can be collapsed [INFO] [stderr] --> src/child.rs:105:9 [INFO] [stderr] | [INFO] [stderr] 105 | / if piv.unmount_old_root { [INFO] [stderr] 106 | | if libc::umount2(piv.old_inside.as_ptr(), MNT_DETACH) != 0 { [INFO] [stderr] 107 | | fail(Err::ChangeRoot, epipe); [INFO] [stderr] 108 | | } [INFO] [stderr] 109 | | } [INFO] [stderr] | |_________^ [INFO] [stderr] | [INFO] [stderr] = note: #[warn(clippy::collapsible_if)] on by default [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#collapsible_if [INFO] [stderr] help: try [INFO] [stderr] | [INFO] [stderr] 105 | if piv.unmount_old_root && libc::umount2(piv.old_inside.as_ptr(), MNT_DETACH) != 0 { [INFO] [stderr] 106 | fail(Err::ChangeRoot, epipe); [INFO] [stderr] 107 | } [INFO] [stderr] | [INFO] [stderr] [INFO] [stderr] warning: this `else { if .. }` block can be collapsed [INFO] [stderr] --> src/child.rs:191:16 [INFO] [stderr] | [INFO] [stderr] 191 | } else { [INFO] [stderr] | ________________^ [INFO] [stderr] 192 | | if libc::dup2(src_fd, dest_fd) < 0 { [INFO] [stderr] 193 | | fail(Err::StdioError, epipe); [INFO] [stderr] 194 | | } [INFO] [stderr] 195 | | } [INFO] [stderr] | |_________^ [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#collapsible_if [INFO] [stderr] help: try [INFO] [stderr] | [INFO] [stderr] 191 | } else if libc::dup2(src_fd, dest_fd) < 0 { [INFO] [stderr] 192 | fail(Err::StdioError, epipe); [INFO] [stderr] 193 | } [INFO] [stderr] | [INFO] [stderr] [INFO] [stderr] warning: long literal lacking separators [INFO] [stderr] --> src/child.rs:221:44 [INFO] [stderr] | [INFO] [stderr] 221 | e.raw_os_error().unwrap_or(10873289), [INFO] [stderr] | ^^^^^^^^ help: consider: `10_873_289` [INFO] [stderr] | [INFO] [stderr] = note: #[warn(clippy::unreadable_literal)] on by default [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#unreadable_literal [INFO] [stderr] [INFO] [stderr] warning: unneeded return statement [INFO] [stderr] --> src/child.rs:256:9 [INFO] [stderr] | [INFO] [stderr] 256 | return &buf[buf.len()-2..] [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^ help: remove `return` as shown: `&buf[buf.len()-2..]` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#needless_return [INFO] [stderr] [INFO] [stderr] warning: long literal lacking separators [INFO] [stderr] --> src/child.rs:276:30 [INFO] [stderr] | [INFO] [stderr] 276 | pub const CAPS_V3: u32 = 0x20080522; [INFO] [stderr] | ^^^^^^^^^^ help: consider: `0x2008_0522` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#unreadable_literal [INFO] [stderr] [INFO] [stderr] warning: unneeded return statement [INFO] [stderr] --> src/fds.rs:114:9 [INFO] [stderr] | [INFO] [stderr] 114 | return AnyRange::Range(self.start, self.end); [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: remove `return` as shown: `AnyRange::Range(self.start, self.end)` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#needless_return [INFO] [stderr] [INFO] [stderr] warning: unneeded return statement [INFO] [stderr] --> src/fds.rs:120:9 [INFO] [stderr] | [INFO] [stderr] 120 | return AnyRange::Range(3, self.end); [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: remove `return` as shown: `AnyRange::Range(3, self.end)` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#needless_return [INFO] [stderr] [INFO] [stderr] warning: unneeded return statement [INFO] [stderr] --> src/fds.rs:126:9 [INFO] [stderr] | [INFO] [stderr] 126 | return AnyRange::RangeFrom(self.start); [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: remove `return` as shown: `AnyRange::RangeFrom(self.start)` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#needless_return [INFO] [stderr] [INFO] [stderr] warning: unneeded return statement [INFO] [stderr] --> src/fds.rs:132:9 [INFO] [stderr] | [INFO] [stderr] 132 | return AnyRange::RangeFrom(3); [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: remove `return` as shown: `AnyRange::RangeFrom(3)` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#needless_return [INFO] [stderr] [INFO] [stderr] warning: unneeded return statement [INFO] [stderr] --> src/run.rs:63:5 [INFO] [stderr] | [INFO] [stderr] 63 | return vec; [INFO] [stderr] | ^^^^^^^^^^^ help: remove `return` as shown: `vec` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#needless_return [INFO] [stderr] [INFO] [stderr] warning: unneeded return statement [INFO] [stderr] --> src/run.rs:72:5 [INFO] [stderr] | [INFO] [stderr] 72 | return vec; [INFO] [stderr] | ^^^^^^^^^^^ help: remove `return` as shown: `vec` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#needless_return [INFO] [stderr] [INFO] [stderr] warning: unneeded return statement [INFO] [stderr] --> src/stdio.rs:52:13 [INFO] [stderr] | [INFO] [stderr] 52 | return Err(io::Error::from_raw_os_error(errno as i32)); [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: remove `return` as shown: `Err(io::Error::from_raw_os_error(errno as i32))` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#needless_return [INFO] [stderr] [INFO] [stderr] warning: unneeded return statement [INFO] [stderr] --> src/stdio.rs:57:13 [INFO] [stderr] | [INFO] [stderr] 57 | / return Err(io::Error::new(io::ErrorKind::Other, [INFO] [stderr] 58 | | "nix error: unsupported operation")); [INFO] [stderr] | |_____________________________________________________^ [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#needless_return [INFO] [stderr] help: remove `return` as shown [INFO] [stderr] | [INFO] [stderr] 57 | Err(io::Error::new(io::ErrorKind::Other, [INFO] [stderr] 58 | "nix error: unsupported operation")) [INFO] [stderr] | [INFO] [stderr] [INFO] [stderr] warning: unneeded return statement [INFO] [stderr] --> src/stdio.rs:128:9 [INFO] [stderr] | [INFO] [stderr] 128 | return self.0; [INFO] [stderr] | ^^^^^^^^^^^^^^ help: remove `return` as shown: `self.0` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#needless_return [INFO] [stderr] [INFO] [stderr] warning: this `else { if .. }` block can be collapsed [INFO] [stderr] --> src/debug.rs:114:20 [INFO] [stderr] | [INFO] [stderr] 114 | } else { [INFO] [stderr] | ____________________^ [INFO] [stderr] 115 | | if let Some(ref env) = cmd.environ { [INFO] [stderr] 116 | | write!(fmt, "; environ[{}]", env.len())?; [INFO] [stderr] 117 | | } [INFO] [stderr] 118 | | } [INFO] [stderr] | |_____________^ [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#collapsible_if [INFO] [stderr] help: try [INFO] [stderr] | [INFO] [stderr] 114 | } else if let Some(ref env) = cmd.environ { [INFO] [stderr] 115 | write!(fmt, "; environ[{}]", env.len())?; [INFO] [stderr] 116 | } [INFO] [stderr] | [INFO] [stderr] [INFO] [stderr] warning: unneeded return statement [INFO] [stderr] --> src/pipe.rs:61:9 [INFO] [stderr] | [INFO] [stderr] 61 | return fd; [INFO] [stderr] | ^^^^^^^^^^ help: remove `return` as shown: `fd` [INFO] [stderr] | [INFO] [stderr] = note: #[warn(clippy::needless_return)] on by default [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#needless_return [INFO] [stderr] [INFO] [stderr] warning: unneeded return statement [INFO] [stderr] --> src/pipe.rs:71:9 [INFO] [stderr] | [INFO] [stderr] 71 | return fd; [INFO] [stderr] | ^^^^^^^^^^ help: remove `return` as shown: `fd` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#needless_return [INFO] [stderr] [INFO] [stderr] warning: this if statement can be collapsed [INFO] [stderr] --> src/child.rs:105:9 [INFO] [stderr] | [INFO] [stderr] 105 | / if piv.unmount_old_root { [INFO] [stderr] 106 | | if libc::umount2(piv.old_inside.as_ptr(), MNT_DETACH) != 0 { [INFO] [stderr] 107 | | fail(Err::ChangeRoot, epipe); [INFO] [stderr] 108 | | } [INFO] [stderr] 109 | | } [INFO] [stderr] | |_________^ [INFO] [stderr] | [INFO] [stderr] = note: #[warn(clippy::collapsible_if)] on by default [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#collapsible_if [INFO] [stderr] help: try [INFO] [stderr] | [INFO] [stderr] 105 | if piv.unmount_old_root && libc::umount2(piv.old_inside.as_ptr(), MNT_DETACH) != 0 { [INFO] [stderr] 106 | fail(Err::ChangeRoot, epipe); [INFO] [stderr] 107 | } [INFO] [stderr] | [INFO] [stderr] [INFO] [stderr] warning: this `else { if .. }` block can be collapsed [INFO] [stderr] --> src/child.rs:191:16 [INFO] [stderr] | [INFO] [stderr] 191 | } else { [INFO] [stderr] | ________________^ [INFO] [stderr] 192 | | if libc::dup2(src_fd, dest_fd) < 0 { [INFO] [stderr] 193 | | fail(Err::StdioError, epipe); [INFO] [stderr] 194 | | } [INFO] [stderr] 195 | | } [INFO] [stderr] | |_________^ [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#collapsible_if [INFO] [stderr] help: try [INFO] [stderr] | [INFO] [stderr] 191 | } else if libc::dup2(src_fd, dest_fd) < 0 { [INFO] [stderr] 192 | fail(Err::StdioError, epipe); [INFO] [stderr] 193 | } [INFO] [stderr] | [INFO] [stderr] [INFO] [stderr] warning: long literal lacking separators [INFO] [stderr] --> src/child.rs:221:44 [INFO] [stderr] | [INFO] [stderr] 221 | e.raw_os_error().unwrap_or(10873289), [INFO] [stderr] | ^^^^^^^^ help: consider: `10_873_289` [INFO] [stderr] | [INFO] [stderr] = note: #[warn(clippy::unreadable_literal)] on by default [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#unreadable_literal [INFO] [stderr] [INFO] [stderr] warning: unneeded return statement [INFO] [stderr] --> src/child.rs:256:9 [INFO] [stderr] | [INFO] [stderr] 256 | return &buf[buf.len()-2..] [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^ help: remove `return` as shown: `&buf[buf.len()-2..]` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#needless_return [INFO] [stderr] [INFO] [stderr] warning: long literal lacking separators [INFO] [stderr] --> src/child.rs:276:30 [INFO] [stderr] | [INFO] [stderr] 276 | pub const CAPS_V3: u32 = 0x20080522; [INFO] [stderr] | ^^^^^^^^^^ help: consider: `0x2008_0522` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#unreadable_literal [INFO] [stderr] [INFO] [stderr] warning: unneeded return statement [INFO] [stderr] --> src/child.rs:310:9 [INFO] [stderr] | [INFO] [stderr] 310 | / return CStr::from_bytes_with_nul(slice).unwrap() [INFO] [stderr] 311 | | .to_string_lossy().to_string(); [INFO] [stderr] | |___________________________________________^ [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#needless_return [INFO] [stderr] help: remove `return` as shown [INFO] [stderr] | [INFO] [stderr] 310 | CStr::from_bytes_with_nul(slice).unwrap() [INFO] [stderr] 311 | .to_string_lossy().to_string() [INFO] [stderr] | [INFO] [stderr] [INFO] [stderr] warning: long literal lacking separators [INFO] [stderr] --> src/child.rs:325:21 [INFO] [stderr] | [INFO] [stderr] 325 | for _ in 0..100000 { [INFO] [stderr] | ^^^^^^ help: consider: `100_000` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#unreadable_literal [INFO] [stderr] [INFO] [stderr] warning: unneeded return statement [INFO] [stderr] --> src/fds.rs:114:9 [INFO] [stderr] | [INFO] [stderr] 114 | return AnyRange::Range(self.start, self.end); [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: remove `return` as shown: `AnyRange::Range(self.start, self.end)` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#needless_return [INFO] [stderr] [INFO] [stderr] warning: unneeded return statement [INFO] [stderr] --> src/fds.rs:120:9 [INFO] [stderr] | [INFO] [stderr] 120 | return AnyRange::Range(3, self.end); [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: remove `return` as shown: `AnyRange::Range(3, self.end)` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#needless_return [INFO] [stderr] [INFO] [stderr] warning: unneeded return statement [INFO] [stderr] --> src/fds.rs:126:9 [INFO] [stderr] | [INFO] [stderr] 126 | return AnyRange::RangeFrom(self.start); [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: remove `return` as shown: `AnyRange::RangeFrom(self.start)` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#needless_return [INFO] [stderr] [INFO] [stderr] warning: unneeded return statement [INFO] [stderr] --> src/fds.rs:132:9 [INFO] [stderr] | [INFO] [stderr] 132 | return AnyRange::RangeFrom(3); [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: remove `return` as shown: `AnyRange::RangeFrom(3)` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#needless_return [INFO] [stderr] [INFO] [stderr] warning: unneeded return statement [INFO] [stderr] --> src/run.rs:63:5 [INFO] [stderr] | [INFO] [stderr] 63 | return vec; [INFO] [stderr] | ^^^^^^^^^^^ help: remove `return` as shown: `vec` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#needless_return [INFO] [stderr] [INFO] [stderr] warning: unneeded return statement [INFO] [stderr] --> src/run.rs:72:5 [INFO] [stderr] | [INFO] [stderr] 72 | return vec; [INFO] [stderr] | ^^^^^^^^^^^ help: remove `return` as shown: `vec` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#needless_return [INFO] [stderr] [INFO] [stderr] warning: unneeded return statement [INFO] [stderr] --> src/stdio.rs:52:13 [INFO] [stderr] | [INFO] [stderr] 52 | return Err(io::Error::from_raw_os_error(errno as i32)); [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: remove `return` as shown: `Err(io::Error::from_raw_os_error(errno as i32))` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#needless_return [INFO] [stderr] [INFO] [stderr] warning: unneeded return statement [INFO] [stderr] --> src/stdio.rs:57:13 [INFO] [stderr] | [INFO] [stderr] 57 | / return Err(io::Error::new(io::ErrorKind::Other, [INFO] [stderr] 58 | | "nix error: unsupported operation")); [INFO] [stderr] | |_____________________________________________________^ [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#needless_return [INFO] [stderr] help: remove `return` as shown [INFO] [stderr] | [INFO] [stderr] 57 | Err(io::Error::new(io::ErrorKind::Other, [INFO] [stderr] 58 | "nix error: unsupported operation")) [INFO] [stderr] | [INFO] [stderr] [INFO] [stderr] warning: unneeded return statement [INFO] [stderr] --> src/stdio.rs:128:9 [INFO] [stderr] | [INFO] [stderr] 128 | return self.0; [INFO] [stderr] | ^^^^^^^^^^^^^^ help: remove `return` as shown: `self.0` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#needless_return [INFO] [stderr] [INFO] [stderr] warning: this `else { if .. }` block can be collapsed [INFO] [stderr] --> src/debug.rs:114:20 [INFO] [stderr] | [INFO] [stderr] 114 | } else { [INFO] [stderr] | ____________________^ [INFO] [stderr] 115 | | if let Some(ref env) = cmd.environ { [INFO] [stderr] 116 | | write!(fmt, "; environ[{}]", env.len())?; [INFO] [stderr] 117 | | } [INFO] [stderr] 118 | | } [INFO] [stderr] | |_____________^ [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#collapsible_if [INFO] [stderr] help: try [INFO] [stderr] | [INFO] [stderr] 114 | } else if let Some(ref env) = cmd.environ { [INFO] [stderr] 115 | write!(fmt, "; environ[{}]", env.len())?; [INFO] [stderr] 116 | } [INFO] [stderr] | [INFO] [stderr] [INFO] [stderr] warning: you don't need to add `&` to all patterns [INFO] [stderr] --> src/error.rs:103:9 [INFO] [stderr] | [INFO] [stderr] 103 | / match self { [INFO] [stderr] 104 | | &UnknownError => None, [INFO] [stderr] 105 | | &NixError => None, [INFO] [stderr] 106 | | &CreatePipe(x) => Some(x), [INFO] [stderr] ... | [INFO] [stderr] 123 | | &BeforeExec(x) => Some(x), [INFO] [stderr] 124 | | } [INFO] [stderr] | |_________^ [INFO] [stderr] | [INFO] [stderr] = note: #[warn(clippy::match_ref_pats)] on by default [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#match_ref_pats [INFO] [stderr] help: instead of prefixing all patterns with `&`, you can dereference the expression [INFO] [stderr] | [INFO] [stderr] 103 | match *self { [INFO] [stderr] 104 | UnknownError => None, [INFO] [stderr] 105 | NixError => None, [INFO] [stderr] 106 | CreatePipe(x) => Some(x), [INFO] [stderr] 107 | Fork(x) => Some(x), [INFO] [stderr] 108 | Exec(x) => Some(x), [INFO] [stderr] ... [INFO] [stderr] [INFO] [stderr] warning: you don't need to add `&` to all patterns [INFO] [stderr] --> src/error.rs:131:9 [INFO] [stderr] | [INFO] [stderr] 131 | / match self { [INFO] [stderr] 132 | | &UnknownError => "unexpected value received via signal pipe", [INFO] [stderr] 133 | | &NixError => "some unknown nix error", [INFO] [stderr] 134 | | &CreatePipe(_) => "can't create pipe", [INFO] [stderr] ... | [INFO] [stderr] 151 | | &BeforeExec(_) => "error in before_exec callback", [INFO] [stderr] 152 | | } [INFO] [stderr] | |_________^ [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#match_ref_pats [INFO] [stderr] help: instead of prefixing all patterns with `&`, you can dereference the expression [INFO] [stderr] | [INFO] [stderr] 131 | match *self { [INFO] [stderr] 132 | UnknownError => "unexpected value received via signal pipe", [INFO] [stderr] 133 | NixError => "some unknown nix error", [INFO] [stderr] 134 | CreatePipe(_) => "can't create pipe", [INFO] [stderr] 135 | Fork(_) => "error when forking", [INFO] [stderr] 136 | Exec(_) => "error when executing", [INFO] [stderr] ... [INFO] [stderr] [INFO] [stderr] warning: casting i8 to i32 may become silently lossy if types change [INFO] [stderr] --> src/error.rs:194:62 [INFO] [stderr] | [INFO] [stderr] 194 | ExitStatus::Exited(x) => Err(Error::AuxCommandExited(x as i32)), [INFO] [stderr] | ^^^^^^^^ help: try: `i32::from(x)` [INFO] [stderr] | [INFO] [stderr] = note: #[warn(clippy::cast_lossless)] on by default [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#cast_lossless [INFO] [stderr] [INFO] [stderr] warning: called `map(f)` on an Option value where `f` is a unit closure [INFO] [stderr] --> src/child.rs:30:5 [INFO] [stderr] | [INFO] [stderr] 30 | child.cfg.death_sig.as_ref().map(|&sig| { [INFO] [stderr] | _____^ [INFO] [stderr] | |_____| [INFO] [stderr] | || [INFO] [stderr] 31 | || if libc::prctl(ffi::PR_SET_PDEATHSIG, sig as c_ulong, 0, 0, 0) != 0 { [INFO] [stderr] 32 | || fail(Err::ParentDeathSignal, epipe); [INFO] [stderr] 33 | || } [INFO] [stderr] 34 | || }); [INFO] [stderr] | ||______^- help: try this: `if let Some(&sig) = child.cfg.death_sig.as_ref() { ... }` [INFO] [stderr] | |_______| [INFO] [stderr] | [INFO] [stderr] | [INFO] [stderr] = note: #[warn(clippy::option_map_unit_fn)] on by default [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#option_map_unit_fn [INFO] [stderr] [INFO] [stderr] warning: The function/method `as_ptr` doesn't need a mutable reference [INFO] [stderr] --> src/child.rs:43:29 [INFO] [stderr] | [INFO] [stderr] 43 | (&mut wbuf).as_ptr() as *mut c_void, 1); [INFO] [stderr] | ^^^^^^^^^^^ [INFO] [stderr] | [INFO] [stderr] = note: #[warn(clippy::unnecessary_mut_passed)] on by default [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#unnecessary_mut_passed [INFO] [stderr] [INFO] [stderr] warning: use of `offset` with a `usize` casted to an `isize` [INFO] [stderr] --> src/child.rs:93:13 [INFO] [stderr] | [INFO] [stderr] 93 | child.environ[index].offset(offset as isize) [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: try: `child.environ[index].add(offset)` [INFO] [stderr] | [INFO] [stderr] = note: #[warn(clippy::ptr_offset_with_cast)] on by default [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#ptr_offset_with_cast [INFO] [stderr] [INFO] [stderr] warning: called `map(f)` on an Option value where `f` is a unit closure [INFO] [stderr] --> src/child.rs:98:5 [INFO] [stderr] | [INFO] [stderr] 98 | child.pivot.as_ref().map(|piv| { [INFO] [stderr] | _____^ [INFO] [stderr] | |_____| [INFO] [stderr] | || [INFO] [stderr] 99 | || if ffi::pivot_root(piv.new_root.as_ptr(), piv.put_old.as_ptr()) != 0 { [INFO] [stderr] 100 | || fail(Err::ChangeRoot, epipe); [INFO] [stderr] 101 | || } [INFO] [stderr] ... || [INFO] [stderr] 109 | || } [INFO] [stderr] 110 | || }); [INFO] [stderr] | ||______^- help: try this: `if let Some(piv) = child.pivot.as_ref() { ... }` [INFO] [stderr] | |_______| [INFO] [stderr] | [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#option_map_unit_fn [INFO] [stderr] [INFO] [stderr] warning: called `map(f)` on an Option value where `f` is a unit closure [INFO] [stderr] --> src/child.rs:112:5 [INFO] [stderr] | [INFO] [stderr] 112 | child.chroot.as_ref().map(|chroot| { [INFO] [stderr] | _____^ [INFO] [stderr] | |_____| [INFO] [stderr] | || [INFO] [stderr] 113 | || if libc::chroot(chroot.root.as_ptr()) != 0 { [INFO] [stderr] 114 | || fail(Err::ChangeRoot, epipe); [INFO] [stderr] 115 | || } [INFO] [stderr] ... || [INFO] [stderr] 118 | || } [INFO] [stderr] 119 | || }); [INFO] [stderr] | ||______^- help: try this: `if let Some(chroot) = child.chroot.as_ref() { ... }` [INFO] [stderr] | |_______| [INFO] [stderr] | [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#option_map_unit_fn [INFO] [stderr] [INFO] [stderr] warning: called `map(f)` on an Option value where `f` is a unit closure [INFO] [stderr] --> src/child.rs:121:5 [INFO] [stderr] | [INFO] [stderr] 121 | child.keep_caps.as_ref().map(|_| { [INFO] [stderr] | _____^ [INFO] [stderr] | |_____| [INFO] [stderr] | || [INFO] [stderr] 122 | || // Don't use securebits because on older systems it doesn't work [INFO] [stderr] 123 | || if libc::prctl(libc::PR_SET_KEEPCAPS, 1, 0, 0, 0) != 0 { [INFO] [stderr] 124 | || fail(Err::CapSet, epipe); [INFO] [stderr] 125 | || } [INFO] [stderr] 126 | || }); [INFO] [stderr] | ||______^- help: try this: `if let Some(_) = child.keep_caps.as_ref() { ... }` [INFO] [stderr] | |_______| [INFO] [stderr] | [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#option_map_unit_fn [INFO] [stderr] [INFO] [stderr] warning: called `map(f)` on an Option value where `f` is a unit closure [INFO] [stderr] --> src/child.rs:128:5 [INFO] [stderr] | [INFO] [stderr] 128 | child.cfg.gid.as_ref().map(|&gid| { [INFO] [stderr] | _____^ [INFO] [stderr] | |_____| [INFO] [stderr] | || [INFO] [stderr] 129 | || if libc::setgid(gid) != 0 { [INFO] [stderr] 130 | || fail(Err::SetUser, epipe); [INFO] [stderr] 131 | || } [INFO] [stderr] 132 | || }); [INFO] [stderr] | ||______^- help: try this: `if let Some(&gid) = child.cfg.gid.as_ref() { ... }` [INFO] [stderr] | |_______| [INFO] [stderr] | [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#option_map_unit_fn [INFO] [stderr] [INFO] [stderr] warning: called `map(f)` on an Option value where `f` is a unit closure [INFO] [stderr] --> src/child.rs:134:5 [INFO] [stderr] | [INFO] [stderr] 134 | child.cfg.supplementary_gids.as_ref().map(|groups| { [INFO] [stderr] | _____^ [INFO] [stderr] | |_____| [INFO] [stderr] | || [INFO] [stderr] 135 | || if libc::setgroups(groups.len() as size_t, groups.as_ptr()) != 0 { [INFO] [stderr] 136 | || fail(Err::SetUser, epipe); [INFO] [stderr] 137 | || } [INFO] [stderr] 138 | || }); [INFO] [stderr] | ||______^- help: try this: `if let Some(groups) = child.cfg.supplementary_gids.as_ref() { ... }` [INFO] [stderr] | |_______| [INFO] [stderr] | [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#option_map_unit_fn [INFO] [stderr] [INFO] [stderr] warning: called `map(f)` on an Option value where `f` is a unit closure [INFO] [stderr] --> src/child.rs:140:5 [INFO] [stderr] | [INFO] [stderr] 140 | child.cfg.uid.as_ref().map(|&uid| { [INFO] [stderr] | _____^ [INFO] [stderr] | |_____| [INFO] [stderr] | || [INFO] [stderr] 141 | || if libc::setuid(uid) != 0 { [INFO] [stderr] 142 | || fail(Err::SetUser, epipe); [INFO] [stderr] 143 | || } [INFO] [stderr] 144 | || }); [INFO] [stderr] | ||______^- help: try this: `if let Some(&uid) = child.cfg.uid.as_ref() { ... }` [INFO] [stderr] | |_______| [INFO] [stderr] | [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#option_map_unit_fn [INFO] [stderr] [INFO] [stderr] warning: called `map(f)` on an Option value where `f` is a unit closure [INFO] [stderr] --> src/child.rs:146:5 [INFO] [stderr] | [INFO] [stderr] 146 | child.keep_caps.as_ref().map(|caps| { [INFO] [stderr] | _____^ [INFO] [stderr] | |_____| [INFO] [stderr] | || [INFO] [stderr] 147 | || let header = ffi::CapsHeader { [INFO] [stderr] 148 | || version: ffi::CAPS_V3, [INFO] [stderr] 149 | || pid: 0, [INFO] [stderr] ... || [INFO] [stderr] 173 | || } [INFO] [stderr] 174 | || }); [INFO] [stderr] | ||______^- help: try this: `if let Some(caps) = child.keep_caps.as_ref() { ... }` [INFO] [stderr] | |_______| [INFO] [stderr] | [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#option_map_unit_fn [INFO] [stderr] [INFO] [stderr] warning: called `map(f)` on an Option value where `f` is a unit closure [INFO] [stderr] --> src/child.rs:176:5 [INFO] [stderr] | [INFO] [stderr] 176 | child.cfg.work_dir.as_ref().map(|dir| { [INFO] [stderr] | _____^ [INFO] [stderr] | |_____| [INFO] [stderr] | || [INFO] [stderr] 177 | || if libc::chdir(dir.as_ptr()) != 0 { [INFO] [stderr] 178 | || fail(Err::Chdir, epipe); [INFO] [stderr] 179 | || } [INFO] [stderr] 180 | || }); [INFO] [stderr] | ||______^- help: try this: `if let Some(dir) = child.cfg.work_dir.as_ref() { ... }` [INFO] [stderr] | |_______| [INFO] [stderr] | [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#option_map_unit_fn [INFO] [stderr] [INFO] [stderr] warning: the operation is ineffective. Consider reducing it to `errno` [INFO] [stderr] --> src/child.rs:242:9 [INFO] [stderr] | [INFO] [stderr] 242 | (errno >> 0) as u8, [INFO] [stderr] | ^^^^^^^^^^^^^ [INFO] [stderr] | [INFO] [stderr] = note: #[warn(clippy::identity_op)] on by default [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#identity_op [INFO] [stderr] [INFO] [stderr] warning: explicit lifetimes given in parameter types where they could be elided (or replaced with `'_` if needed by type declaration) [INFO] [stderr] --> src/child.rs:252:1 [INFO] [stderr] | [INFO] [stderr] 252 | / fn format_pid_fixed<'a>(buf: &'a mut [u8], pid: libc::pid_t) -> &'a [u8] { [INFO] [stderr] 253 | | buf[buf.len()-1] = 0; [INFO] [stderr] 254 | | if pid == 0 { [INFO] [stderr] 255 | | buf[buf.len()-2] = b'0'; [INFO] [stderr] ... | [INFO] [stderr] 268 | | }; [INFO] [stderr] 269 | | } [INFO] [stderr] | |_^ [INFO] [stderr] | [INFO] [stderr] = note: #[warn(clippy::needless_lifetimes)] on by default [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#needless_lifetimes [INFO] [stderr] [INFO] [stderr] warning: writing `&Vec<_>` instead of `&[_]` involves one more reference and cannot be used with non-Vec-based slices. [INFO] [stderr] --> src/run.rs:57:23 [INFO] [stderr] | [INFO] [stderr] 57 | fn raw_with_null(arr: &Vec) -> Vec<*const c_char> { [INFO] [stderr] | ^^^^^^^^^^^^^ help: change this to: `&[CString]` [INFO] [stderr] | [INFO] [stderr] = note: #[warn(clippy::ptr_arg)] on by default [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#ptr_arg [INFO] [stderr] [INFO] [stderr] warning: very complex type used. Consider factoring parts into `type` definitions [INFO] [stderr] --> src/run.rs:94:8 [INFO] [stderr] | [INFO] [stderr] 94 | -> Result<(HashMap, HashMap, [INFO] [stderr] | ________^ [INFO] [stderr] 95 | | Vec), Error> [INFO] [stderr] | |____________________________________^ [INFO] [stderr] | [INFO] [stderr] = note: #[warn(clippy::type_complexity)] on by default [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#type_complexity [INFO] [stderr] [INFO] [stderr] warning: you don't need to add `&` to all patterns [INFO] [stderr] --> src/run.rs:101:22 [INFO] [stderr] | [INFO] [stderr] 101 | let mut fd = match fdkind { [INFO] [stderr] | ______________________^ [INFO] [stderr] 102 | | &Fd::ReadPipe => { [INFO] [stderr] 103 | | let (rd, wr) = try!(Pipe::new()).split(); [INFO] [stderr] 104 | | let fd = rd.into_fd(); [INFO] [stderr] ... | [INFO] [stderr] 139 | | } [INFO] [stderr] 140 | | }; [INFO] [stderr] | |_________^ [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#match_ref_pats [INFO] [stderr] help: instead of prefixing all patterns with `&`, you can dereference the expression [INFO] [stderr] | [INFO] [stderr] 101 | let mut fd = match *fdkind { [INFO] [stderr] 102 | Fd::ReadPipe => { [INFO] [stderr] 103 | let (rd, wr) = try!(Pipe::new()).split(); [INFO] [stderr] 104 | let fd = rd.into_fd(); [INFO] [stderr] 105 | guards.push(Closing::new(fd)); [INFO] [stderr] 106 | outer.insert(dest_fd, PipeHolder::Writer(wr)); [INFO] [stderr] ... [INFO] [stderr] [INFO] [stderr] warning: use of `unwrap_or` followed by a function call [INFO] [stderr] --> src/run.rs:206:22 [INFO] [stderr] | [INFO] [stderr] 206 | .unwrap_or(PathBuf::from("/")) [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: try this: `unwrap_or_else(|| PathBuf::from("/"))` [INFO] [stderr] | [INFO] [stderr] = note: #[warn(clippy::or_fun_call)] on by default [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#or_fun_call [INFO] [stderr] [INFO] [stderr] warning: use of `unwrap_or` followed by a function call [INFO] [stderr] --> src/run.rs:222:22 [INFO] [stderr] | [INFO] [stderr] 222 | .unwrap_or(PathBuf::from("/")) [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: try this: `unwrap_or_else(|| PathBuf::from("/"))` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#or_fun_call [INFO] [stderr] [INFO] [stderr] warning: called `cloned().collect()` on a slice to create a `Vec`. Calling `to_vec()` is both faster and more readable [INFO] [stderr] --> src/run.rs:238:25 [INFO] [stderr] | [INFO] [stderr] 238 | let close_fds = self.close_fds.iter().cloned().collect::>(); [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stderr] | [INFO] [stderr] = note: #[warn(clippy::iter_cloned_collect)] on by default [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#iter_cloned_collect [INFO] [stderr] [INFO] [stderr] warning: this loop could be written as a `while let` loop [INFO] [stderr] --> src/run.rs:269:13 [INFO] [stderr] | [INFO] [stderr] 269 | / loop { [INFO] [stderr] 270 | | match waitpid(pid, None) { [INFO] [stderr] 271 | | Err(nix::Error::Sys(EINTR)) => continue, [INFO] [stderr] 272 | | _ => break, [INFO] [stderr] 273 | | } [INFO] [stderr] 274 | | } [INFO] [stderr] | |_____________^ help: try: `while let Err(nix::Error::Sys(EINTR)) = waitpid(pid, None) { .. }` [INFO] [stderr] | [INFO] [stderr] = note: #[warn(clippy::while_let_loop)] on by default [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#while_let_loop [INFO] [stderr] [INFO] [stderr] warning: casting u8 to i32 may become silently lossy if types change [INFO] [stderr] --> src/run.rs:357:30 [INFO] [stderr] | [INFO] [stderr] 357 | let errno = ((err[1] as i32) << 24) | ((err[2] as i32) << 16) | [INFO] [stderr] | ^^^^^^^^^^^^^^^ help: try: `i32::from(err[1])` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#cast_lossless [INFO] [stderr] [INFO] [stderr] warning: casting u8 to i32 may become silently lossy if types change [INFO] [stderr] --> src/run.rs:357:56 [INFO] [stderr] | [INFO] [stderr] 357 | let errno = ((err[1] as i32) << 24) | ((err[2] as i32) << 16) | [INFO] [stderr] | ^^^^^^^^^^^^^^^ help: try: `i32::from(err[2])` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#cast_lossless [INFO] [stderr] [INFO] [stderr] warning: casting u8 to i32 may become silently lossy if types change [INFO] [stderr] --> src/run.rs:358:22 [INFO] [stderr] | [INFO] [stderr] 358 | ((err[3] as i32) << 8) | (err[4] as i32); [INFO] [stderr] | ^^^^^^^^^^^^^^^ help: try: `i32::from(err[3])` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#cast_lossless [INFO] [stderr] [INFO] [stderr] warning: casting u8 to i32 may become silently lossy if types change [INFO] [stderr] --> src/run.rs:358:46 [INFO] [stderr] | [INFO] [stderr] 358 | ((err[3] as i32) << 8) | (err[4] as i32); [INFO] [stderr] | ^^^^^^^^^^^^^^^ help: try: `i32::from(err[4])` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#cast_lossless [INFO] [stderr] [INFO] [stderr] warning: casting u8 to i32 may become silently lossy if types change [INFO] [stderr] --> src/run.rs:359:42 [INFO] [stderr] | [INFO] [stderr] 359 | return Err(Err::from_i32(code as i32, errno)) [INFO] [stderr] | ^^^^^^^^^^^ help: try: `i32::from(code)` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#cast_lossless [INFO] [stderr] [INFO] [stderr] warning: this argument is passed by reference, but would be more efficient if passed by value [INFO] [stderr] --> src/status.rs:19:20 [INFO] [stderr] | [INFO] [stderr] 19 | pub fn success(&self) -> bool { [INFO] [stderr] | ^^^^^ help: consider passing by value instead: `self` [INFO] [stderr] | [INFO] [stderr] = note: #[warn(clippy::trivially_copy_pass_by_ref)] on by default [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#trivially_copy_pass_by_ref [INFO] [stderr] [INFO] [stderr] warning: this argument is passed by reference, but would be more efficient if passed by value [INFO] [stderr] --> src/status.rs:23:17 [INFO] [stderr] | [INFO] [stderr] 23 | pub fn code(&self) -> Option { [INFO] [stderr] | ^^^^^ help: consider passing by value instead: `self` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#trivially_copy_pass_by_ref [INFO] [stderr] [INFO] [stderr] warning: you don't need to add `&` to all patterns [INFO] [stderr] --> src/status.rs:24:9 [INFO] [stderr] | [INFO] [stderr] 24 | / match self { [INFO] [stderr] 25 | | &ExitStatus::Exited(e) => Some(e as i32), [INFO] [stderr] 26 | | &ExitStatus::Signaled(_, _) => None, [INFO] [stderr] 27 | | } [INFO] [stderr] | |_________^ [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#match_ref_pats [INFO] [stderr] help: instead of prefixing all patterns with `&`, you can dereference the expression [INFO] [stderr] | [INFO] [stderr] 24 | match *self { [INFO] [stderr] 25 | ExitStatus::Exited(e) => Some(e as i32), [INFO] [stderr] 26 | ExitStatus::Signaled(_, _) => None, [INFO] [stderr] | [INFO] [stderr] [INFO] [stderr] warning: casting i8 to i32 may become silently lossy if types change [INFO] [stderr] --> src/status.rs:25:44 [INFO] [stderr] | [INFO] [stderr] 25 | &ExitStatus::Exited(e) => Some(e as i32), [INFO] [stderr] | ^^^^^^^^ help: try: `i32::from(e)` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#cast_lossless [INFO] [stderr] [INFO] [stderr] warning: this argument is passed by reference, but would be more efficient if passed by value [INFO] [stderr] --> src/status.rs:30:19 [INFO] [stderr] | [INFO] [stderr] 30 | pub fn signal(&self) -> Option { [INFO] [stderr] | ^^^^^ help: consider passing by value instead: `self` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#trivially_copy_pass_by_ref [INFO] [stderr] [INFO] [stderr] warning: you don't need to add `&` to all patterns [INFO] [stderr] --> src/status.rs:31:9 [INFO] [stderr] | [INFO] [stderr] 31 | / match self { [INFO] [stderr] 32 | | &ExitStatus::Exited(_) => None, [INFO] [stderr] 33 | | &ExitStatus::Signaled(sig, _) => Some(sig as i32), [INFO] [stderr] 34 | | } [INFO] [stderr] | |_________^ [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#match_ref_pats [INFO] [stderr] help: instead of prefixing all patterns with `&`, you can dereference the expression [INFO] [stderr] | [INFO] [stderr] 31 | match *self { [INFO] [stderr] 32 | ExitStatus::Exited(_) => None, [INFO] [stderr] 33 | ExitStatus::Signaled(sig, _) => Some(sig as i32), [INFO] [stderr] | [INFO] [stderr] [INFO] [stderr] warning: you don't need to add `&` to all patterns [INFO] [stderr] --> src/status.rs:41:9 [INFO] [stderr] | [INFO] [stderr] 41 | / match self { [INFO] [stderr] 42 | | &Exited(c) => write!(fmt, "exited with code {}", c), [INFO] [stderr] 43 | | &Signaled(sig, false) => { [INFO] [stderr] 44 | | write!(fmt, "killed by signal {:?}[{}]", [INFO] [stderr] ... | [INFO] [stderr] 50 | | } [INFO] [stderr] 51 | | } [INFO] [stderr] | |_________^ [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#match_ref_pats [INFO] [stderr] help: instead of prefixing all patterns with `&`, you can dereference the expression [INFO] [stderr] | [INFO] [stderr] 41 | match *self { [INFO] [stderr] 42 | Exited(c) => write!(fmt, "exited with code {}", c), [INFO] [stderr] 43 | Signaled(sig, false) => { [INFO] [stderr] 44 | write!(fmt, "killed by signal {:?}[{}]", [INFO] [stderr] 45 | sig, sig as i32) [INFO] [stderr] 46 | } [INFO] [stderr] ... [INFO] [stderr] [INFO] [stderr] warning: methods called `to_*` usually take self by reference; consider choosing a less ambiguous name [INFO] [stderr] --> src/stdio.rs:72:18 [INFO] [stderr] | [INFO] [stderr] 72 | pub fn to_fd(self, write: bool) -> Fd { [INFO] [stderr] | ^^^^ [INFO] [stderr] | [INFO] [stderr] = note: #[warn(clippy::wrong_self_convention)] on by default [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#wrong_self_convention [INFO] [stderr] [INFO] [stderr] warning: redundant closure found [INFO] [stderr] --> src/stdio.rs:85:36 [INFO] [stderr] | [INFO] [stderr] 85 | dup_file_cloexec(file).map(|f| Stdio::Fd(f)) [INFO] [stderr] | ^^^^^^^^^^^^^^^^ help: remove closure as shown: `Stdio::Fd` [INFO] [stderr] | [INFO] [stderr] = note: #[warn(clippy::redundant_closure)] on by default [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#redundant_closure [INFO] [stderr] [INFO] [stderr] warning: redundant closure found [INFO] [stderr] --> src/stdio.rs:112:36 [INFO] [stderr] | [INFO] [stderr] 112 | dup_file_cloexec(file).map(|f| Fd::Fd(f)) [INFO] [stderr] | ^^^^^^^^^^^^^ help: remove closure as shown: `Fd::Fd` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#redundant_closure [INFO] [stderr] [INFO] [stderr] warning: very complex type used. Consider factoring parts into `type` definitions [INFO] [stderr] --> src/lib.rs:90:22 [INFO] [stderr] | [INFO] [stderr] 90 | before_unfreeze: Option Result<(), BoxError>>>, [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#type_complexity [INFO] [stderr] [INFO] [stderr] warning: you don't need to add `&` to all patterns [INFO] [stderr] --> src/error.rs:103:9 [INFO] [stderr] | [INFO] [stderr] 103 | / match self { [INFO] [stderr] 104 | | &UnknownError => None, [INFO] [stderr] 105 | | &NixError => None, [INFO] [stderr] 106 | | &CreatePipe(x) => Some(x), [INFO] [stderr] ... | [INFO] [stderr] 123 | | &BeforeExec(x) => Some(x), [INFO] [stderr] 124 | | } [INFO] [stderr] | |_________^ [INFO] [stderr] | [INFO] [stderr] = note: #[warn(clippy::match_ref_pats)] on by default [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#match_ref_pats [INFO] [stderr] help: instead of prefixing all patterns with `&`, you can dereference the expression [INFO] [stderr] | [INFO] [stderr] 103 | match *self { [INFO] [stderr] 104 | UnknownError => None, [INFO] [stderr] 105 | NixError => None, [INFO] [stderr] 106 | CreatePipe(x) => Some(x), [INFO] [stderr] 107 | Fork(x) => Some(x), [INFO] [stderr] 108 | Exec(x) => Some(x), [INFO] [stderr] ... [INFO] [stderr] [INFO] [stderr] warning: you don't need to add `&` to all patterns [INFO] [stderr] --> src/error.rs:131:9 [INFO] [stderr] | [INFO] [stderr] 131 | / match self { [INFO] [stderr] 132 | | &UnknownError => "unexpected value received via signal pipe", [INFO] [stderr] 133 | | &NixError => "some unknown nix error", [INFO] [stderr] 134 | | &CreatePipe(_) => "can't create pipe", [INFO] [stderr] ... | [INFO] [stderr] 151 | | &BeforeExec(_) => "error in before_exec callback", [INFO] [stderr] 152 | | } [INFO] [stderr] | |_________^ [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#match_ref_pats [INFO] [stderr] help: instead of prefixing all patterns with `&`, you can dereference the expression [INFO] [stderr] | [INFO] [stderr] 131 | match *self { [INFO] [stderr] 132 | UnknownError => "unexpected value received via signal pipe", [INFO] [stderr] 133 | NixError => "some unknown nix error", [INFO] [stderr] 134 | CreatePipe(_) => "can't create pipe", [INFO] [stderr] 135 | Fork(_) => "error when forking", [INFO] [stderr] 136 | Exec(_) => "error when executing", [INFO] [stderr] ... [INFO] [stderr] [INFO] [stderr] warning: casting i8 to i32 may become silently lossy if types change [INFO] [stderr] --> src/error.rs:194:62 [INFO] [stderr] | [INFO] [stderr] 194 | ExitStatus::Exited(x) => Err(Error::AuxCommandExited(x as i32)), [INFO] [stderr] | ^^^^^^^^ help: try: `i32::from(x)` [INFO] [stderr] | [INFO] [stderr] = note: #[warn(clippy::cast_lossless)] on by default [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#cast_lossless [INFO] [stderr] [INFO] [stderr] warning: called `map(f)` on an Option value where `f` is a unit closure [INFO] [stderr] --> src/child.rs:30:5 [INFO] [stderr] | [INFO] [stderr] 30 | child.cfg.death_sig.as_ref().map(|&sig| { [INFO] [stderr] | _____^ [INFO] [stderr] | |_____| [INFO] [stderr] | || [INFO] [stderr] 31 | || if libc::prctl(ffi::PR_SET_PDEATHSIG, sig as c_ulong, 0, 0, 0) != 0 { [INFO] [stderr] 32 | || fail(Err::ParentDeathSignal, epipe); [INFO] [stderr] 33 | || } [INFO] [stderr] 34 | || }); [INFO] [stderr] | ||______^- help: try this: `if let Some(&sig) = child.cfg.death_sig.as_ref() { ... }` [INFO] [stderr] | |_______| [INFO] [stderr] | [INFO] [stderr] | [INFO] [stderr] = note: #[warn(clippy::option_map_unit_fn)] on by default [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#option_map_unit_fn [INFO] [stderr] [INFO] [stderr] warning: The function/method `as_ptr` doesn't need a mutable reference [INFO] [stderr] --> src/child.rs:43:29 [INFO] [stderr] | [INFO] [stderr] 43 | (&mut wbuf).as_ptr() as *mut c_void, 1); [INFO] [stderr] | ^^^^^^^^^^^ [INFO] [stderr] | [INFO] [stderr] = note: #[warn(clippy::unnecessary_mut_passed)] on by default [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#unnecessary_mut_passed [INFO] [stderr] [INFO] [stderr] warning: use of `offset` with a `usize` casted to an `isize` [INFO] [stderr] --> src/child.rs:93:13 [INFO] [stderr] | [INFO] [stderr] 93 | child.environ[index].offset(offset as isize) [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: try: `child.environ[index].add(offset)` [INFO] [stderr] | [INFO] [stderr] = note: #[warn(clippy::ptr_offset_with_cast)] on by default [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#ptr_offset_with_cast [INFO] [stderr] [INFO] [stderr] warning: called `map(f)` on an Option value where `f` is a unit closure [INFO] [stderr] --> src/child.rs:98:5 [INFO] [stderr] | [INFO] [stderr] 98 | child.pivot.as_ref().map(|piv| { [INFO] [stderr] | _____^ [INFO] [stderr] | |_____| [INFO] [stderr] | || [INFO] [stderr] 99 | || if ffi::pivot_root(piv.new_root.as_ptr(), piv.put_old.as_ptr()) != 0 { [INFO] [stderr] 100 | || fail(Err::ChangeRoot, epipe); [INFO] [stderr] 101 | || } [INFO] [stderr] ... || [INFO] [stderr] 109 | || } [INFO] [stderr] 110 | || }); [INFO] [stderr] | ||______^- help: try this: `if let Some(piv) = child.pivot.as_ref() { ... }` [INFO] [stderr] | |_______| [INFO] [stderr] | [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#option_map_unit_fn [INFO] [stderr] [INFO] [stderr] warning: called `map(f)` on an Option value where `f` is a unit closure [INFO] [stderr] --> src/child.rs:112:5 [INFO] [stderr] | [INFO] [stderr] 112 | child.chroot.as_ref().map(|chroot| { [INFO] [stderr] | _____^ [INFO] [stderr] | |_____| [INFO] [stderr] | || [INFO] [stderr] 113 | || if libc::chroot(chroot.root.as_ptr()) != 0 { [INFO] [stderr] 114 | || fail(Err::ChangeRoot, epipe); [INFO] [stderr] 115 | || } [INFO] [stderr] ... || [INFO] [stderr] 118 | || } [INFO] [stderr] 119 | || }); [INFO] [stderr] | ||______^- help: try this: `if let Some(chroot) = child.chroot.as_ref() { ... }` [INFO] [stderr] | |_______| [INFO] [stderr] | [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#option_map_unit_fn [INFO] [stderr] [INFO] [stderr] warning: called `map(f)` on an Option value where `f` is a unit closure [INFO] [stderr] --> src/child.rs:121:5 [INFO] [stderr] | [INFO] [stderr] 121 | child.keep_caps.as_ref().map(|_| { [INFO] [stderr] | _____^ [INFO] [stderr] | |_____| [INFO] [stderr] | || [INFO] [stderr] 122 | || // Don't use securebits because on older systems it doesn't work [INFO] [stderr] 123 | || if libc::prctl(libc::PR_SET_KEEPCAPS, 1, 0, 0, 0) != 0 { [INFO] [stderr] 124 | || fail(Err::CapSet, epipe); [INFO] [stderr] 125 | || } [INFO] [stderr] 126 | || }); [INFO] [stderr] | ||______^- help: try this: `if let Some(_) = child.keep_caps.as_ref() { ... }` [INFO] [stderr] | |_______| [INFO] [stderr] | [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#option_map_unit_fn [INFO] [stderr] [INFO] [stderr] warning: called `map(f)` on an Option value where `f` is a unit closure [INFO] [stderr] --> src/child.rs:128:5 [INFO] [stderr] | [INFO] [stderr] 128 | child.cfg.gid.as_ref().map(|&gid| { [INFO] [stderr] | _____^ [INFO] [stderr] | |_____| [INFO] [stderr] | || [INFO] [stderr] 129 | || if libc::setgid(gid) != 0 { [INFO] [stderr] 130 | || fail(Err::SetUser, epipe); [INFO] [stderr] 131 | || } [INFO] [stderr] 132 | || }); [INFO] [stderr] | ||______^- help: try this: `if let Some(&gid) = child.cfg.gid.as_ref() { ... }` [INFO] [stderr] | |_______| [INFO] [stderr] | [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#option_map_unit_fn [INFO] [stderr] [INFO] [stderr] warning: called `map(f)` on an Option value where `f` is a unit closure [INFO] [stderr] --> src/child.rs:134:5 [INFO] [stderr] | [INFO] [stderr] 134 | child.cfg.supplementary_gids.as_ref().map(|groups| { [INFO] [stderr] | _____^ [INFO] [stderr] | |_____| [INFO] [stderr] | || [INFO] [stderr] 135 | || if libc::setgroups(groups.len() as size_t, groups.as_ptr()) != 0 { [INFO] [stderr] 136 | || fail(Err::SetUser, epipe); [INFO] [stderr] 137 | || } [INFO] [stderr] 138 | || }); [INFO] [stderr] | ||______^- help: try this: `if let Some(groups) = child.cfg.supplementary_gids.as_ref() { ... }` [INFO] [stderr] | |_______| [INFO] [stderr] | [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#option_map_unit_fn [INFO] [stderr] [INFO] [stderr] warning: called `map(f)` on an Option value where `f` is a unit closure [INFO] [stderr] --> src/child.rs:140:5 [INFO] [stderr] | [INFO] [stderr] 140 | child.cfg.uid.as_ref().map(|&uid| { [INFO] [stderr] | _____^ [INFO] [stderr] | |_____| [INFO] [stderr] | || [INFO] [stderr] 141 | || if libc::setuid(uid) != 0 { [INFO] [stderr] 142 | || fail(Err::SetUser, epipe); [INFO] [stderr] 143 | || } [INFO] [stderr] 144 | || }); [INFO] [stderr] | ||______^- help: try this: `if let Some(&uid) = child.cfg.uid.as_ref() { ... }` [INFO] [stderr] | |_______| [INFO] [stderr] | [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#option_map_unit_fn [INFO] [stderr] [INFO] [stderr] warning: called `map(f)` on an Option value where `f` is a unit closure [INFO] [stderr] --> src/child.rs:146:5 [INFO] [stderr] | [INFO] [stderr] 146 | child.keep_caps.as_ref().map(|caps| { [INFO] [stderr] | _____^ [INFO] [stderr] | |_____| [INFO] [stderr] | || [INFO] [stderr] 147 | || let header = ffi::CapsHeader { [INFO] [stderr] 148 | || version: ffi::CAPS_V3, [INFO] [stderr] 149 | || pid: 0, [INFO] [stderr] ... || [INFO] [stderr] 173 | || } [INFO] [stderr] 174 | || }); [INFO] [stderr] | ||______^- help: try this: `if let Some(caps) = child.keep_caps.as_ref() { ... }` [INFO] [stderr] | |_______| [INFO] [stderr] | [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#option_map_unit_fn [INFO] [stderr] [INFO] [stderr] warning: called `map(f)` on an Option value where `f` is a unit closure [INFO] [stderr] --> src/child.rs:176:5 [INFO] [stderr] | [INFO] [stderr] 176 | child.cfg.work_dir.as_ref().map(|dir| { [INFO] [stderr] | _____^ [INFO] [stderr] | |_____| [INFO] [stderr] | || [INFO] [stderr] 177 | || if libc::chdir(dir.as_ptr()) != 0 { [INFO] [stderr] 178 | || fail(Err::Chdir, epipe); [INFO] [stderr] 179 | || } [INFO] [stderr] 180 | || }); [INFO] [stderr] | ||______^- help: try this: `if let Some(dir) = child.cfg.work_dir.as_ref() { ... }` [INFO] [stderr] | |_______| [INFO] [stderr] | [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#option_map_unit_fn [INFO] [stderr] [INFO] [stderr] warning: the operation is ineffective. Consider reducing it to `errno` [INFO] [stderr] --> src/child.rs:242:9 [INFO] [stderr] | [INFO] [stderr] 242 | (errno >> 0) as u8, [INFO] [stderr] | ^^^^^^^^^^^^^ [INFO] [stderr] | [INFO] [stderr] = note: #[warn(clippy::identity_op)] on by default [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#identity_op [INFO] [stderr] [INFO] [stderr] warning: explicit lifetimes given in parameter types where they could be elided (or replaced with `'_` if needed by type declaration) [INFO] [stderr] --> src/child.rs:252:1 [INFO] [stderr] | [INFO] [stderr] 252 | / fn format_pid_fixed<'a>(buf: &'a mut [u8], pid: libc::pid_t) -> &'a [u8] { [INFO] [stderr] 253 | | buf[buf.len()-1] = 0; [INFO] [stderr] 254 | | if pid == 0 { [INFO] [stderr] 255 | | buf[buf.len()-2] = b'0'; [INFO] [stderr] ... | [INFO] [stderr] 268 | | }; [INFO] [stderr] 269 | | } [INFO] [stderr] | |_^ [INFO] [stderr] | [INFO] [stderr] = note: #[warn(clippy::needless_lifetimes)] on by default [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#needless_lifetimes [INFO] [stderr] [INFO] [stderr] warning: writing `&Vec<_>` instead of `&[_]` involves one more reference and cannot be used with non-Vec-based slices. [INFO] [stderr] --> src/run.rs:57:23 [INFO] [stderr] | [INFO] [stderr] 57 | fn raw_with_null(arr: &Vec) -> Vec<*const c_char> { [INFO] [stderr] | ^^^^^^^^^^^^^ help: change this to: `&[CString]` [INFO] [stderr] | [INFO] [stderr] = note: #[warn(clippy::ptr_arg)] on by default [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#ptr_arg [INFO] [stderr] [INFO] [stderr] warning: very complex type used. Consider factoring parts into `type` definitions [INFO] [stderr] --> src/run.rs:94:8 [INFO] [stderr] | [INFO] [stderr] 94 | -> Result<(HashMap, HashMap, [INFO] [stderr] | ________^ [INFO] [stderr] 95 | | Vec), Error> [INFO] [stderr] | |____________________________________^ [INFO] [stderr] | [INFO] [stderr] = note: #[warn(clippy::type_complexity)] on by default [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#type_complexity [INFO] [stderr] [INFO] [stderr] warning: you don't need to add `&` to all patterns [INFO] [stderr] --> src/run.rs:101:22 [INFO] [stderr] | [INFO] [stderr] 101 | let mut fd = match fdkind { [INFO] [stderr] | ______________________^ [INFO] [stderr] 102 | | &Fd::ReadPipe => { [INFO] [stderr] 103 | | let (rd, wr) = try!(Pipe::new()).split(); [INFO] [stderr] 104 | | let fd = rd.into_fd(); [INFO] [stderr] ... | [INFO] [stderr] 139 | | } [INFO] [stderr] 140 | | }; [INFO] [stderr] | |_________^ [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#match_ref_pats [INFO] [stderr] help: instead of prefixing all patterns with `&`, you can dereference the expression [INFO] [stderr] | [INFO] [stderr] 101 | let mut fd = match *fdkind { [INFO] [stderr] 102 | Fd::ReadPipe => { [INFO] [stderr] 103 | let (rd, wr) = try!(Pipe::new()).split(); [INFO] [stderr] 104 | let fd = rd.into_fd(); [INFO] [stderr] 105 | guards.push(Closing::new(fd)); [INFO] [stderr] 106 | outer.insert(dest_fd, PipeHolder::Writer(wr)); [INFO] [stderr] ... [INFO] [stderr] [INFO] [stderr] warning: use of `unwrap_or` followed by a function call [INFO] [stderr] --> src/run.rs:206:22 [INFO] [stderr] | [INFO] [stderr] 206 | .unwrap_or(PathBuf::from("/")) [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: try this: `unwrap_or_else(|| PathBuf::from("/"))` [INFO] [stderr] | [INFO] [stderr] = note: #[warn(clippy::or_fun_call)] on by default [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#or_fun_call [INFO] [stderr] [INFO] [stderr] warning: use of `unwrap_or` followed by a function call [INFO] [stderr] --> src/run.rs:222:22 [INFO] [stderr] | [INFO] [stderr] 222 | .unwrap_or(PathBuf::from("/")) [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: try this: `unwrap_or_else(|| PathBuf::from("/"))` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#or_fun_call [INFO] [stderr] [INFO] [stderr] warning: called `cloned().collect()` on a slice to create a `Vec`. Calling `to_vec()` is both faster and more readable [INFO] [stderr] --> src/run.rs:238:25 [INFO] [stderr] | [INFO] [stderr] 238 | let close_fds = self.close_fds.iter().cloned().collect::>(); [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stderr] | [INFO] [stderr] = note: #[warn(clippy::iter_cloned_collect)] on by default [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#iter_cloned_collect [INFO] [stderr] [INFO] [stderr] warning: this loop could be written as a `while let` loop [INFO] [stderr] --> src/run.rs:269:13 [INFO] [stderr] | [INFO] [stderr] 269 | / loop { [INFO] [stderr] 270 | | match waitpid(pid, None) { [INFO] [stderr] 271 | | Err(nix::Error::Sys(EINTR)) => continue, [INFO] [stderr] 272 | | _ => break, [INFO] [stderr] 273 | | } [INFO] [stderr] 274 | | } [INFO] [stderr] | |_____________^ help: try: `while let Err(nix::Error::Sys(EINTR)) = waitpid(pid, None) { .. }` [INFO] [stderr] | [INFO] [stderr] = note: #[warn(clippy::while_let_loop)] on by default [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#while_let_loop [INFO] [stderr] [INFO] [stderr] warning: casting u8 to i32 may become silently lossy if types change [INFO] [stderr] --> src/run.rs:357:30 [INFO] [stderr] | [INFO] [stderr] 357 | let errno = ((err[1] as i32) << 24) | ((err[2] as i32) << 16) | [INFO] [stderr] | ^^^^^^^^^^^^^^^ help: try: `i32::from(err[1])` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#cast_lossless [INFO] [stderr] [INFO] [stderr] warning: casting u8 to i32 may become silently lossy if types change [INFO] [stderr] --> src/run.rs:357:56 [INFO] [stderr] | [INFO] [stderr] 357 | let errno = ((err[1] as i32) << 24) | ((err[2] as i32) << 16) | [INFO] [stderr] | ^^^^^^^^^^^^^^^ help: try: `i32::from(err[2])` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#cast_lossless [INFO] [stderr] [INFO] [stderr] warning: casting u8 to i32 may become silently lossy if types change [INFO] [stderr] --> src/run.rs:358:22 [INFO] [stderr] | [INFO] [stderr] 358 | ((err[3] as i32) << 8) | (err[4] as i32); [INFO] [stderr] | ^^^^^^^^^^^^^^^ help: try: `i32::from(err[3])` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#cast_lossless [INFO] [stderr] [INFO] [stderr] warning: casting u8 to i32 may become silently lossy if types change [INFO] [stderr] --> src/run.rs:358:46 [INFO] [stderr] | [INFO] [stderr] 358 | ((err[3] as i32) << 8) | (err[4] as i32); [INFO] [stderr] | ^^^^^^^^^^^^^^^ help: try: `i32::from(err[4])` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#cast_lossless [INFO] [stderr] [INFO] [stderr] warning: casting u8 to i32 may become silently lossy if types change [INFO] [stderr] --> src/run.rs:359:42 [INFO] [stderr] | [INFO] [stderr] 359 | return Err(Err::from_i32(code as i32, errno)) [INFO] [stderr] | ^^^^^^^^^^^ help: try: `i32::from(code)` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#cast_lossless [INFO] [stderr] [INFO] [stderr] warning: this argument is passed by reference, but would be more efficient if passed by value [INFO] [stderr] --> src/status.rs:19:20 [INFO] [stderr] | [INFO] [stderr] 19 | pub fn success(&self) -> bool { [INFO] [stderr] | ^^^^^ help: consider passing by value instead: `self` [INFO] [stderr] | [INFO] [stderr] = note: #[warn(clippy::trivially_copy_pass_by_ref)] on by default [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#trivially_copy_pass_by_ref [INFO] [stderr] [INFO] [stderr] warning: this argument is passed by reference, but would be more efficient if passed by value [INFO] [stderr] --> src/status.rs:23:17 [INFO] [stderr] | [INFO] [stderr] 23 | pub fn code(&self) -> Option { [INFO] [stderr] | ^^^^^ help: consider passing by value instead: `self` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#trivially_copy_pass_by_ref [INFO] [stderr] [INFO] [stderr] warning: you don't need to add `&` to all patterns [INFO] [stderr] --> src/status.rs:24:9 [INFO] [stderr] | [INFO] [stderr] 24 | / match self { [INFO] [stderr] 25 | | &ExitStatus::Exited(e) => Some(e as i32), [INFO] [stderr] 26 | | &ExitStatus::Signaled(_, _) => None, [INFO] [stderr] 27 | | } [INFO] [stderr] | |_________^ [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#match_ref_pats [INFO] [stderr] help: instead of prefixing all patterns with `&`, you can dereference the expression [INFO] [stderr] | [INFO] [stderr] 24 | match *self { [INFO] [stderr] 25 | ExitStatus::Exited(e) => Some(e as i32), [INFO] [stderr] 26 | ExitStatus::Signaled(_, _) => None, [INFO] [stderr] | [INFO] [stderr] [INFO] [stderr] warning: casting i8 to i32 may become silently lossy if types change [INFO] [stderr] --> src/status.rs:25:44 [INFO] [stderr] | [INFO] [stderr] 25 | &ExitStatus::Exited(e) => Some(e as i32), [INFO] [stderr] | ^^^^^^^^ help: try: `i32::from(e)` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#cast_lossless [INFO] [stderr] [INFO] [stderr] warning: this argument is passed by reference, but would be more efficient if passed by value [INFO] [stderr] --> src/status.rs:30:19 [INFO] [stderr] | [INFO] [stderr] 30 | pub fn signal(&self) -> Option { [INFO] [stderr] | ^^^^^ help: consider passing by value instead: `self` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#trivially_copy_pass_by_ref [INFO] [stderr] [INFO] [stderr] warning: you don't need to add `&` to all patterns [INFO] [stderr] --> src/status.rs:31:9 [INFO] [stderr] | [INFO] [stderr] 31 | / match self { [INFO] [stderr] 32 | | &ExitStatus::Exited(_) => None, [INFO] [stderr] 33 | | &ExitStatus::Signaled(sig, _) => Some(sig as i32), [INFO] [stderr] 34 | | } [INFO] [stderr] | |_________^ [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#match_ref_pats [INFO] [stderr] help: instead of prefixing all patterns with `&`, you can dereference the expression [INFO] [stderr] | [INFO] [stderr] 31 | match *self { [INFO] [stderr] 32 | ExitStatus::Exited(_) => None, [INFO] [stderr] 33 | ExitStatus::Signaled(sig, _) => Some(sig as i32), [INFO] [stderr] | [INFO] [stderr] [INFO] [stderr] warning: you don't need to add `&` to all patterns [INFO] [stderr] --> src/status.rs:41:9 [INFO] [stderr] | [INFO] [stderr] 41 | / match self { [INFO] [stderr] 42 | | &Exited(c) => write!(fmt, "exited with code {}", c), [INFO] [stderr] 43 | | &Signaled(sig, false) => { [INFO] [stderr] 44 | | write!(fmt, "killed by signal {:?}[{}]", [INFO] [stderr] ... | [INFO] [stderr] 50 | | } [INFO] [stderr] 51 | | } [INFO] [stderr] | |_________^ [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#match_ref_pats [INFO] [stderr] help: instead of prefixing all patterns with `&`, you can dereference the expression [INFO] [stderr] | [INFO] [stderr] 41 | match *self { [INFO] [stderr] 42 | Exited(c) => write!(fmt, "exited with code {}", c), [INFO] [stderr] 43 | Signaled(sig, false) => { [INFO] [stderr] 44 | write!(fmt, "killed by signal {:?}[{}]", [INFO] [stderr] 45 | sig, sig as i32) [INFO] [stderr] 46 | } [INFO] [stderr] ... [INFO] [stderr] [INFO] [stderr] warning: methods called `to_*` usually take self by reference; consider choosing a less ambiguous name [INFO] [stderr] --> src/stdio.rs:72:18 [INFO] [stderr] | [INFO] [stderr] 72 | pub fn to_fd(self, write: bool) -> Fd { [INFO] [stderr] | ^^^^ [INFO] [stderr] | [INFO] [stderr] = note: #[warn(clippy::wrong_self_convention)] on by default [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#wrong_self_convention [INFO] [stderr] [INFO] [stderr] warning: redundant closure found [INFO] [stderr] --> src/stdio.rs:85:36 [INFO] [stderr] | [INFO] [stderr] 85 | dup_file_cloexec(file).map(|f| Stdio::Fd(f)) [INFO] [stderr] | ^^^^^^^^^^^^^^^^ help: remove closure as shown: `Stdio::Fd` [INFO] [stderr] | [INFO] [stderr] = note: #[warn(clippy::redundant_closure)] on by default [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#redundant_closure [INFO] [stderr] [INFO] [stderr] warning: redundant closure found [INFO] [stderr] --> src/stdio.rs:112:36 [INFO] [stderr] | [INFO] [stderr] 112 | dup_file_cloexec(file).map(|f| Fd::Fd(f)) [INFO] [stderr] | ^^^^^^^^^^^^^ help: remove closure as shown: `Fd::Fd` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#redundant_closure [INFO] [stderr] [INFO] [stderr] warning: very complex type used. Consider factoring parts into `type` definitions [INFO] [stderr] --> src/lib.rs:90:22 [INFO] [stderr] | [INFO] [stderr] 90 | before_unfreeze: Option Result<(), BoxError>>>, [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#type_complexity [INFO] [stderr] [INFO] [stderr] warning: length comparison to zero [INFO] [stderr] --> examples/runcmd.rs:93:8 [INFO] [stderr] | [INFO] [stderr] 93 | if groups.len() > 0 { cmd.groups(groups); } [INFO] [stderr] | ^^^^^^^^^^^^^^^^ help: using `is_empty` is clearer and more explicit: `!groups.is_empty()` [INFO] [stderr] | [INFO] [stderr] = note: #[warn(clippy::len_zero)] on by default [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#len_zero [INFO] [stderr] [INFO] [stderr] warning: casting i8 to i32 may become silently lossy if types change [INFO] [stderr] --> examples/echo.rs:13:48 [INFO] [stderr] | [INFO] [stderr] 13 | unshare::ExitStatus::Exited(x) => exit(x as i32), [INFO] [stderr] | ^^^^^^^^ help: try: `i32::from(x)` [INFO] [stderr] | [INFO] [stderr] = note: #[warn(clippy::cast_lossless)] on by default [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#cast_lossless [INFO] [stderr] [INFO] [stderr] Finished dev [unoptimized + debuginfo] target(s) in 3.20s [INFO] running `"docker" "inspect" "0ff901e2ad9bcdfba721cd546bbd4e53d0cee8678cf75053f9b6406817976745"` [INFO] running `"docker" "rm" "-f" "0ff901e2ad9bcdfba721cd546bbd4e53d0cee8678cf75053f9b6406817976745"` [INFO] [stdout] 0ff901e2ad9bcdfba721cd546bbd4e53d0cee8678cf75053f9b6406817976745