diff --git a/src/header/stdio/ext.rs b/src/header/stdio/ext.rs index 02e9859e215c1d0b069e153b5797ac203b77071f..35ad92ee63b39df0780ec83d664fdf3d1ec04eee 100644 --- a/src/header/stdio/ext.rs +++ b/src/header/stdio/ext.rs @@ -3,21 +3,21 @@ use platform::types::*; #[no_mangle] pub extern "C" fn __fpending(stream: *mut FILE) -> size_t { - let mut stream = unsafe { &mut *stream }.lock(); + let stream = unsafe { &mut *stream }.lock(); stream.writer.inner.buf.len() as size_t } #[no_mangle] pub extern "C" fn __freadable(stream: *mut FILE) -> c_int { - let mut stream = unsafe { &mut *stream }.lock(); + let stream = unsafe { &mut *stream }.lock(); (stream.flags & F_NORD == 0) as c_int } #[no_mangle] pub extern "C" fn __fwritable(stream: *mut FILE) -> c_int { - let mut stream = unsafe { &mut *stream }.lock(); + let stream = unsafe { &mut *stream }.lock(); (stream.flags & F_NOWR == 0) as c_int } @@ -25,7 +25,7 @@ pub extern "C" fn __fwritable(stream: *mut FILE) -> c_int { //TODO: Check last operation when read-write #[no_mangle] pub extern "C" fn __freading(stream: *mut FILE) -> c_int { - let mut stream = unsafe { &mut *stream }.lock(); + let stream = unsafe { &mut *stream }.lock(); (stream.flags & F_NORD == 0) as c_int } @@ -33,7 +33,7 @@ pub extern "C" fn __freading(stream: *mut FILE) -> c_int { //TODO: Check last operation when read-write #[no_mangle] pub extern "C" fn __fwriting(stream: *mut FILE) -> c_int { - let mut stream = unsafe { &mut *stream }.lock(); + let stream = unsafe { &mut *stream }.lock(); (stream.flags & F_NOWR == 0) as c_int } diff --git a/src/header/stdlib/mod.rs b/src/header/stdlib/mod.rs index 6925a2a93bec64a7de380e90f9b3cbb40f3b76dd..cecf90637814c1f0471e0e4cd80fa27ce8013010 100644 --- a/src/header/stdlib/mod.rs +++ b/src/header/stdlib/mod.rs @@ -451,7 +451,7 @@ where #[no_mangle] pub extern "C" fn mktemp(name: *mut c_char) -> *mut c_char { if inner_mktemp(name, 0, || unsafe { - let name = unsafe { CStr::from_ptr(name) }; + let name = CStr::from_ptr(name); let ret = if Sys::access(name, 0) != 0 && platform::errno == ENOENT { Some(()) } else { @@ -868,6 +868,8 @@ pub unsafe extern "C" fn strtoll( #[no_mangle] pub unsafe extern "C" fn system(command: *const c_char) -> c_int { + //TODO: share code with popen + let child_pid = unistd::fork(); if child_pid == 0 { let command_nonnull = if command.is_null() { @@ -890,13 +892,15 @@ pub unsafe extern "C" fn system(command: *const c_char) -> c_int { exit(127); unreachable!(); - } else { + } else if child_pid > 0 { let mut wstatus = 0; if Sys::waitpid(child_pid, &mut wstatus, 0) == !0 { return -1; } wstatus + } else { + -1 } } diff --git a/src/header/time/mod.rs b/src/header/time/mod.rs index cbe291bf2fefad280356a145c4d58c9acc199be6..2be33c532a1369fc385f85dfce5703b36630ea6c 100644 --- a/src/header/time/mod.rs +++ b/src/header/time/mod.rs @@ -157,7 +157,7 @@ pub extern "C" fn getdate(string: *const c_char) -> tm { #[no_mangle] pub unsafe extern "C" fn gmtime(timer: *const time_t) -> *mut tm { - unsafe { gmtime_r(timer, &mut TM) } + gmtime_r(timer, &mut TM) } const MONTH_DAYS: [[c_int; 12]; 2] = [ diff --git a/src/header/unistd/mod.rs b/src/header/unistd/mod.rs index 201a9e0ccefe27296dc5f762d4288e915e1eeaf9..47d005ed517659fc7f4ff5856a3359a76ac4a24d 100644 --- a/src/header/unistd/mod.rs +++ b/src/header/unistd/mod.rs @@ -148,7 +148,7 @@ pub unsafe extern "C" fn execve( argv: *const *mut c_char, envp: *const *mut c_char, ) -> c_int { - let path = unsafe { CStr::from_ptr(path) }; + let path = CStr::from_ptr(path); Sys::execve(path, argv, envp) } diff --git a/src/macros.rs b/src/macros.rs index b1c42de6db45bf5be03c897bacd556ea1b083889..39f78d5e380650c2e163b397b5caa802cdbd7506 100644 --- a/src/macros.rs +++ b/src/macros.rs @@ -1,6 +1,7 @@ #[macro_export] macro_rules! c_str { ($lit:expr) => { + #[allow(unused_unsafe)] unsafe { $crate::c_str::CStr::from_ptr(concat!($lit, "\0").as_ptr() as *const $crate::platform::types::c_char) diff --git a/src/platform/mod.rs b/src/platform/mod.rs index 3bd208e8377472425d1f890f631a463793b25dbc..ad075cf22bf18dd9ac113e695b0faf5978fd7ee4 100644 --- a/src/platform/mod.rs +++ b/src/platform/mod.rs @@ -122,19 +122,15 @@ impl Write for StringWriter { } impl fmt::Write for StringWriter { fn write_str(&mut self, s: &str) -> fmt::Result { - unsafe { - // can't fail - self.write(s.as_bytes()).unwrap(); - }; + // can't fail + self.write(s.as_bytes()).unwrap(); Ok(()) } } impl WriteByte for StringWriter { fn write_u8(&mut self, byte: u8) -> fmt::Result { - unsafe { - // can't fail - self.write(&[byte]).unwrap(); - } + // can't fail + self.write(&[byte]).unwrap(); Ok(()) } } @@ -159,19 +155,15 @@ impl Write for UnsafeStringWriter { } impl fmt::Write for UnsafeStringWriter { fn write_str(&mut self, s: &str) -> fmt::Result { - unsafe { - // can't fail - self.write(s.as_bytes()).unwrap(); - } + // can't fail + self.write(s.as_bytes()).unwrap(); Ok(()) } } impl WriteByte for UnsafeStringWriter { fn write_u8(&mut self, byte: u8) -> fmt::Result { - unsafe { - // can't fail - self.write(&[byte]).unwrap(); - } + // can't fail + self.write(&[byte]).unwrap(); Ok(()) } }