diff --git a/src/cxa.rs b/src/cxa.rs index 621f5c7a4e8c440c235e605573cd69aede2c25f7..f8138f67f5dea672530a5541882a1f7ff58a1418 100644 --- a/src/cxa.rs +++ b/src/cxa.rs @@ -2,22 +2,22 @@ use platform::types::*; #[derive(Clone, Copy)] struct CxaAtExitFunc { - func: extern "C" fn (*mut c_void), + func: extern "C" fn(*mut c_void), arg: *mut c_void, - dso: *mut c_void + dso: *mut c_void, } static mut CXA_ATEXIT_FUNCS: [Option<CxaAtExitFunc>; 32] = [None; 32]; #[no_mangle] -pub unsafe extern "C" fn __cxa_atexit (func_opt: Option<extern "C" fn (*mut c_void)>, arg: *mut c_void, dso: *mut c_void) -> c_int { +pub unsafe extern "C" fn __cxa_atexit( + func_opt: Option<extern "C" fn(*mut c_void)>, + arg: *mut c_void, + dso: *mut c_void, +) -> c_int { for i in 0..CXA_ATEXIT_FUNCS.len() { if CXA_ATEXIT_FUNCS[i].is_none() { - CXA_ATEXIT_FUNCS[i] = func_opt.map(|func| CxaAtExitFunc { - func, - arg, - dso - }); + CXA_ATEXIT_FUNCS[i] = func_opt.map(|func| CxaAtExitFunc { func, arg, dso }); return 0; } } diff --git a/src/fs.rs b/src/fs.rs index 2fc14afc52e334f39db829b07111ee21e15e0eb4..f3daf4bc20821d4127a0c5f1944f05791991e3d0 100644 --- a/src/fs.rs +++ b/src/fs.rs @@ -1,11 +1,11 @@ use c_str::CStr; use core::ops::Deref; use header::fcntl::O_CREAT; -use header::unistd::{SEEK_SET, SEEK_CUR, SEEK_END}; +use header::unistd::{SEEK_CUR, SEEK_END, SEEK_SET}; use io; use platform; -use platform::{Pal, Sys}; use platform::types::*; +use platform::{Pal, Sys}; fn last_os_error() -> io::Error { let errno = unsafe { platform::errno }; @@ -16,14 +16,14 @@ pub struct File { pub fd: c_int, /// To avoid self referential FILE struct that needs both a reader and a writer, /// make "reference" files that share fd but don't close on drop. - pub reference: bool + pub reference: bool, } impl File { pub fn new(fd: c_int) -> Self { Self { fd, - reference: false + reference: false, } } @@ -68,7 +68,7 @@ impl File { pub unsafe fn get_ref(&self) -> Self { Self { fd: self.fd, - reference: true + reference: true, } } } diff --git a/src/header/assert/mod.rs b/src/header/assert/mod.rs index ffbcecffda964e2ed72c1503745159c02f62b296..b259eb5fc81e248a6d197da30f2751d0022f2f91 100644 --- a/src/header/assert/mod.rs +++ b/src/header/assert/mod.rs @@ -6,11 +6,24 @@ use header::{stdio, stdlib}; use platform::types::*; #[no_mangle] -pub unsafe extern "C" fn __assert(func: *const c_char, file: *const c_char, line: c_int, cond: *const c_char) { +pub unsafe extern "C" fn __assert( + func: *const c_char, + file: *const c_char, + line: c_int, + cond: *const c_char, +) { let func = CStr::from_ptr(func).to_str().unwrap(); let file = CStr::from_ptr(file).to_str().unwrap(); let cond = CStr::from_ptr(cond).to_str().unwrap(); - write!(*stdio::stderr, "{}: {}:{}: Assertion `{}` failed.\n", func, file, line, cond).unwrap(); + write!( + *stdio::stderr, + "{}: {}:{}: Assertion `{}` failed.\n", + func, + file, + line, + cond + ) + .unwrap(); stdlib::abort(); } diff --git a/src/header/dirent/mod.rs b/src/header/dirent/mod.rs index fadb85764aca8c2fb8b20559c8ec2f32d9481b7a..6f760bbcae9fe1ffa6a27a88fcf8e2a229e70ec3 100644 --- a/src/header/dirent/mod.rs +++ b/src/header/dirent/mod.rs @@ -7,9 +7,9 @@ use c_str::CStr; use fs::File; use header::{errno, fcntl, stdlib, string}; use io::{Seek, SeekFrom}; +use platform; use platform::types::*; use platform::{Pal, Sys}; -use platform; const DIR_BUF_SIZE: usize = mem::size_of::<dirent>() * 3; @@ -22,7 +22,7 @@ pub struct DIR { len: usize, // The last value of d_off, used by telldir - offset: usize + offset: usize, } #[repr(C)] @@ -40,10 +40,10 @@ pub extern "C" fn opendir(path: *const c_char) -> *mut DIR { let path = unsafe { CStr::from_ptr(path) }; let file = match File::open( path, - fcntl::O_RDONLY | fcntl::O_DIRECTORY | fcntl::O_CLOEXEC + fcntl::O_RDONLY | fcntl::O_DIRECTORY | fcntl::O_CLOEXEC, ) { Ok(file) => file, - Err(_) => return ptr::null_mut() + Err(_) => return ptr::null_mut(), }; Box::into_raw(Box::new(DIR { @@ -118,10 +118,7 @@ pub unsafe extern "C" fn rewinddir(dir: *mut DIR) { } #[no_mangle] -pub unsafe extern "C" fn alphasort( - first: *mut *const dirent, - second: *mut *const dirent -) -> c_int { +pub unsafe extern "C" fn alphasort(first: *mut *const dirent, second: *mut *const dirent) -> c_int { string::strcoll((**first).d_name.as_ptr(), (**second).d_name.as_ptr()) } @@ -130,7 +127,7 @@ pub unsafe extern "C" fn scandir( dirp: *const c_char, namelist: *mut *mut *mut dirent, filter: Option<extern "C" fn(_: *const dirent) -> c_int>, - compare: Option<extern "C" fn(_: *mut *const dirent, _: *mut *const dirent) -> c_int> + compare: Option<extern "C" fn(_: *mut *const dirent, _: *mut *const dirent) -> c_int>, ) -> c_int { let dir = opendir(dirp); if dir.is_null() { @@ -160,7 +157,7 @@ pub unsafe extern "C" fn scandir( cap *= 2; *namelist = platform::realloc( *namelist as *mut c_void, - cap as usize * mem::size_of::<*mut dirent>() + cap as usize * mem::size_of::<*mut dirent>(), ) as *mut *mut dirent; } @@ -181,7 +178,12 @@ pub unsafe extern "C" fn scandir( -1 } else { platform::errno = old_errno; - stdlib::qsort(*namelist as *mut c_void, len as size_t, mem::size_of::<*mut dirent>(), mem::transmute(compare)); + stdlib::qsort( + *namelist as *mut c_void, + len as size_t, + mem::size_of::<*mut dirent>(), + mem::transmute(compare), + ); len as c_int } } diff --git a/src/header/fnmatch/mod.rs b/src/header/fnmatch/mod.rs index 4a16cc1788761c522c90d332052a80a2afe6c9a2..bf228356945167e18a61627abeaaa10455c87fe8 100644 --- a/src/header/fnmatch/mod.rs +++ b/src/header/fnmatch/mod.rs @@ -5,8 +5,8 @@ use alloc::vec::Vec; use core::slice; use platform::types::*; +use posix_regex::compile::{Collation, Range, Token}; use posix_regex::PosixRegex; -use posix_regex::compile::{Collation, Token, Range}; const ONCE: Range = Range(1, Some(1)); @@ -57,7 +57,7 @@ unsafe fn tokenize(mut pattern: *const u8, flags: c_int) -> Vec<(Token, Range)> pattern = pattern.offset(1); leading = is_leading(flags, c); (Token::Char(c), ONCE) - }, + } b'?' => (any(was_leading, flags), ONCE), b'*' => (any(was_leading, flags), Range(0, None)), b'[' => { @@ -103,10 +103,7 @@ unsafe fn tokenize(mut pattern: *const u8, flags: c_int) -> Vec<(Token, Range)> } // Otherwise, there was no closing ]. Maybe error? - (Token::OneOf { - invert, - list - }, ONCE) + (Token::OneOf { invert, list }, ONCE) } c => { leading = is_leading(flags, c); @@ -119,7 +116,11 @@ unsafe fn tokenize(mut pattern: *const u8, flags: c_int) -> Vec<(Token, Range)> #[no_mangle] #[linkage = "weak"] // often redefined in GNU programs -pub unsafe extern "C" fn fnmatch(pattern: *const c_char, input: *const c_char, flags: c_int) -> c_int { +pub unsafe extern "C" fn fnmatch( + pattern: *const c_char, + input: *const c_char, + flags: c_int, +) -> c_int { let mut len = 0; while *input.offset(len) != 0 { len += 1; @@ -131,7 +132,9 @@ pub unsafe extern "C" fn fnmatch(pattern: *const c_char, input: *const c_char, f if PosixRegex::new(Cow::Owned(vec![tokens])) .case_insensitive(flags & FNM_CASEFOLD == FNM_CASEFOLD) - .matches_exact(input).is_some() { + .matches_exact(input) + .is_some() + { 0 } else { FNM_NOMATCH diff --git a/src/header/getopt/mod.rs b/src/header/getopt/mod.rs index c2a12022e76dd40778cd7236c1fd3b89b3e1667d..ec985cc6be242149cef73c9374b69a2de96b9029 100644 --- a/src/header/getopt/mod.rs +++ b/src/header/getopt/mod.rs @@ -1,13 +1,13 @@ //! getopt implementation for relibc use core::ptr; +use header::unistd::{optarg, opterr, optind, optopt}; use header::{stdio, string}; -use header::unistd::{optarg, optind, opterr, optopt}; use platform::types::*; static mut CURRENT_OPT: *mut c_char = ptr::null_mut(); -pub const no_argument: c_int = 0; +pub const no_argument: c_int = 0; pub const required_argument: c_int = 1; pub const optional_argument: c_int = 2; @@ -16,7 +16,7 @@ pub struct option { name: *const c_char, has_arg: c_int, flag: *mut c_int, - val: c_int + val: c_int, } #[no_mangle] @@ -26,7 +26,7 @@ pub unsafe extern "C" fn getopt_long( argv: *const *mut c_char, optstring: *const c_char, longopts: *const option, - longindex: *mut c_int + longindex: *mut c_int, ) -> c_int { // if optarg is not set, we still don't want the previous value leaking optarg = ptr::null_mut(); @@ -64,7 +64,10 @@ pub unsafe extern "C" fn getopt_long( } let mut end = 0; - while { let c = *current_arg.offset(end); c != 0 && c != b'=' as c_char } { + while { + let c = *current_arg.offset(end); + c != 0 && c != b'=' as c_char + } { end += 1; } @@ -87,9 +90,15 @@ pub unsafe extern "C" fn getopt_long( return b':' as c_int; } else { stdio::fputs(*argv as _, &mut *stdio::stderr); - stdio::fputs(": option '--\0".as_ptr() as _, &mut *stdio::stderr); + stdio::fputs( + ": option '--\0".as_ptr() as _, + &mut *stdio::stderr, + ); stdio::fputs(current_arg, &mut *stdio::stderr); - stdio::fputs("' requires an argument\n\0".as_ptr() as _, &mut *stdio::stderr); + stdio::fputs( + "' requires an argument\n\0".as_ptr() as _, + &mut *stdio::stderr, + ); return b'?' as c_int; } } @@ -117,7 +126,7 @@ unsafe fn parse_arg( argc: c_int, argv: *const *mut c_char, current_arg: *mut c_char, - optstring: *const c_char + optstring: *const c_char, ) -> c_int { let update_current_opt = || { CURRENT_OPT = current_arg.offset(1); diff --git a/src/header/mod.rs b/src/header/mod.rs index fc6201556bc248fbb56fc56d200889be8d31db5c..aed7c65807285601b673582b811f525b1397a737 100644 --- a/src/header/mod.rs +++ b/src/header/mod.rs @@ -11,8 +11,8 @@ pub mod fnmatch; pub mod getopt; pub mod grp; pub mod inttypes; -pub mod limits; pub mod libgen; +pub mod limits; pub mod locale; pub mod netdb; pub mod netinet_in; diff --git a/src/header/netdb/linux.rs b/src/header/netdb/linux.rs index 5eb07b3336a2a9edf90923e73bc439b75bb2b6fa..60b6491466d8d1a0ac636841ef9b117ca49390ca 100644 --- a/src/header/netdb/linux.rs +++ b/src/header/netdb/linux.rs @@ -1,14 +1,11 @@ use alloc::string::String; use c_str::CString; -use header::fcntl; use fs::File; +use header::fcntl; use io::{BufRead, BufReader}; pub fn get_dns_server() -> String { - let file = match File::open( - &CString::new("/etc/resolv.conf").unwrap(), - fcntl::O_RDONLY - ) { + let file = match File::open(&CString::new("/etc/resolv.conf").unwrap(), fcntl::O_RDONLY) { Ok(file) => file, Err(_) => return String::new(), // TODO: better error handling }; @@ -17,7 +14,7 @@ pub fn get_dns_server() -> String { for line in file.split(b'\n') { let mut line = match line { Ok(line) => line, - Err(_) => return String::new() // TODO: pls handle errors + Err(_) => return String::new(), // TODO: pls handle errors }; if line.starts_with(b"nameserver ") { line.drain(..11); diff --git a/src/header/pwd/mod.rs b/src/header/pwd/mod.rs index e4e781684e0dc3733494d27148508bd95c3aa27c..7157c0f293c47bb86890213f0200b218307d07d0 100644 --- a/src/header/pwd/mod.rs +++ b/src/header/pwd/mod.rs @@ -6,8 +6,8 @@ use c_str::CStr; use fs::File; use header::{errno, fcntl}; use io::{BufRead, BufReader}; -use platform::types::*; use platform; +use platform::types::*; #[cfg(target_os = "linux")] mod linux; @@ -58,7 +58,7 @@ where { let file = match File::open( unsafe { CStr::from_bytes_with_nul_unchecked(b"/etc/passwd\0") }, - fcntl::O_RDONLY + fcntl::O_RDONLY, ) { Ok(file) => file, Err(_) => return OptionPasswd::Error, @@ -72,7 +72,7 @@ where Err(err) => unsafe { platform::errno = errno::EIO; return OptionPasswd::Error; - } + }, }; // Parse into passwd diff --git a/src/header/regex/mod.rs b/src/header/regex/mod.rs index 3d3d22c345513525797f611ab832d62f504bb40e..da746884df9afee6a0f137f9662110693a7583f2 100644 --- a/src/header/regex/mod.rs +++ b/src/header/regex/mod.rs @@ -2,11 +2,11 @@ use alloc::borrow::Cow; use alloc::vec::Vec; -use core::{mem, slice, ptr}; +use core::{mem, ptr, slice}; use header::string::strlen; use platform::types::*; -use posix_regex::{PosixRegexBuilder, PosixRegex}; -use posix_regex::compile::{Error as CompileError, Token, Range}; +use posix_regex::compile::{Error as CompileError, Range, Token}; +use posix_regex::{PosixRegex, PosixRegexBuilder}; pub type regoff_t = size_t; @@ -19,35 +19,35 @@ pub struct regex_t { capacity: size_t, cflags: c_int, - re_nsub: size_t + re_nsub: size_t, } #[repr(C)] pub struct regmatch_t { rm_so: regoff_t, - rm_eo: regoff_t + rm_eo: regoff_t, } pub const REG_EXTENDED: c_int = 1; -pub const REG_ICASE: c_int = 2; -pub const REG_NOSUB: c_int = 4; -pub const REG_NEWLINE: c_int = 8; -pub const REG_NOTBOL: c_int = 16; -pub const REG_NOTEOL: c_int = 32; - -pub const REG_NOMATCH: c_int = 1; -pub const REG_BADPAT: c_int = 2; +pub const REG_ICASE: c_int = 2; +pub const REG_NOSUB: c_int = 4; +pub const REG_NEWLINE: c_int = 8; +pub const REG_NOTBOL: c_int = 16; +pub const REG_NOTEOL: c_int = 32; + +pub const REG_NOMATCH: c_int = 1; +pub const REG_BADPAT: c_int = 2; pub const REG_ECOLLATE: c_int = 3; -pub const REG_ECTYPE: c_int = 4; -pub const REG_EESCAPE: c_int = 5; -pub const REG_ESUBREG: c_int = 6; -pub const REG_EBRACK: c_int = 7; -pub const REG_ENOSYS: c_int = 8; -pub const REG_EPAREN: c_int = 9; -pub const REG_EBRACE: c_int = 10; -pub const REG_BADBR: c_int = 11; -pub const REG_ERANGE: c_int = 12; -pub const REG_ESPACE: c_int = 13; -pub const REG_BADRPT: c_int = 14; +pub const REG_ECTYPE: c_int = 4; +pub const REG_EESCAPE: c_int = 5; +pub const REG_ESUBREG: c_int = 6; +pub const REG_EBRACK: c_int = 7; +pub const REG_ENOSYS: c_int = 8; +pub const REG_EPAREN: c_int = 9; +pub const REG_EBRACE: c_int = 10; +pub const REG_BADBR: c_int = 11; +pub const REG_ERANGE: c_int = 12; +pub const REG_ESPACE: c_int = 13; +pub const REG_BADRPT: c_int = 14; #[no_mangle] pub extern "C" fn regcomp(out: *mut regex_t, pat: *const c_char, cflags: c_int) -> c_int { @@ -75,13 +75,13 @@ pub extern "C" fn regcomp(out: *mut regex_t, pat: *const c_char, cflags: c_int) 0 }, Err(CompileError::EmptyRepetition) - | Err(CompileError::IntegerOverflow) - | Err(CompileError::IllegalRange) => REG_BADBR, + | Err(CompileError::IntegerOverflow) + | Err(CompileError::IllegalRange) => REG_BADBR, Err(CompileError::UnclosedRepetition) => REG_EBRACE, Err(CompileError::LeadingRepetition) => REG_BADRPT, Err(CompileError::UnknownCollation) => REG_ECOLLATE, Err(CompileError::UnknownClass(_)) => REG_ECTYPE, - Err(_) => REG_BADPAT + Err(_) => REG_BADPAT, } } #[no_mangle] @@ -89,12 +89,17 @@ pub unsafe extern "C" fn regfree(regex: *mut regex_t) { Vec::from_raw_parts( (*regex).ptr as *mut Vec<(Token, Range)>, (*regex).length, - (*regex).capacity + (*regex).capacity, ); } #[no_mangle] -pub extern "C" fn regexec(regex: *const regex_t, input: *const c_char, - nmatch: size_t, pmatch: *mut regmatch_t, eflags: c_int) -> c_int { +pub extern "C" fn regexec( + regex: *const regex_t, + input: *const c_char, + nmatch: size_t, + pmatch: *mut regmatch_t, + eflags: c_int, +) -> c_int { if eflags & REG_EXTENDED == REG_EXTENDED { return REG_ENOSYS; } @@ -106,7 +111,8 @@ pub extern "C" fn regexec(regex: *const regex_t, input: *const c_char, let flags = regex.cflags | eflags; let input = unsafe { slice::from_raw_parts(input as *const u8, strlen(input)) }; - let branches = unsafe { slice::from_raw_parts(regex.ptr as *const Vec<(Token, Range)>, regex.length) }; + let branches = + unsafe { slice::from_raw_parts(regex.ptr as *const Vec<(Token, Range)>, regex.length) }; let matches = PosixRegex::new(Cow::Borrowed(&branches)) .case_insensitive(flags & REG_ICASE == REG_ICASE) @@ -115,10 +121,7 @@ pub extern "C" fn regexec(regex: *const regex_t, input: *const c_char, .no_end(flags & REG_NOTEOL == REG_NOTEOL) .matches(input, Some(1)); - if !matches.is_empty() - && eflags & REG_NOSUB != REG_NOSUB - && !pmatch.is_null() - && nmatch > 0 { + if !matches.is_empty() && eflags & REG_NOSUB != REG_NOSUB && !pmatch.is_null() && nmatch > 0 { let first = &matches[0]; for i in 0..nmatch as usize { @@ -126,37 +129,45 @@ pub extern "C" fn regexec(regex: *const regex_t, input: *const c_char, unsafe { *pmatch.offset(i as isize) = regmatch_t { rm_so: start, - rm_eo: end + rm_eo: end, }; } } } - if matches.is_empty() { REG_NOMATCH } else { 0 } + if matches.is_empty() { + REG_NOMATCH + } else { + 0 + } } #[no_mangle] pub extern "C" fn regerror(code: c_int, _regex: *const regex_t, out: *mut c_char, max: c_int) { let string = match code { - 0 => "No error\0", - REG_NOMATCH => "No match\0", - REG_BADPAT => "Invalid regexp\0", + 0 => "No error\0", + REG_NOMATCH => "No match\0", + REG_BADPAT => "Invalid regexp\0", REG_ECOLLATE => "Unknown collating element\0", - REG_ECTYPE => "Unknown character class name\0", - REG_EESCAPE => "Trailing backslash\0", - REG_ESUBREG => "Invalid back reference\0", - REG_EBRACK => "Missing ']'\0", - REG_ENOSYS => "Unsupported operation\0", - REG_EPAREN => "Missing ')'\0", - REG_EBRACE => "Missing '}'\0", - REG_BADBR => "Invalid contents of {}\0", - REG_ERANGE => "Invalid character range\0", - REG_ESPACE => "Out of memory\0", - REG_BADRPT => "Repetition not preceded by valid expression\0", - _ => "Unknown error\0" + REG_ECTYPE => "Unknown character class name\0", + REG_EESCAPE => "Trailing backslash\0", + REG_ESUBREG => "Invalid back reference\0", + REG_EBRACK => "Missing ']'\0", + REG_ENOSYS => "Unsupported operation\0", + REG_EPAREN => "Missing ')'\0", + REG_EBRACE => "Missing '}'\0", + REG_BADBR => "Invalid contents of {}\0", + REG_ERANGE => "Invalid character range\0", + REG_ESPACE => "Out of memory\0", + REG_BADRPT => "Repetition not preceded by valid expression\0", + _ => "Unknown error\0", }; unsafe { - ptr::copy_nonoverlapping(string.as_ptr(), out as *mut u8, string.len().min(max as usize)) + ptr::copy_nonoverlapping( + string.as_ptr(), + out as *mut u8, + string.len().min(max as usize), + ) } } diff --git a/src/header/stdio/helpers.rs b/src/header/stdio/helpers.rs index fa2f1940ebb5c96c30503e66f597a65466bfcc22..878ec3cf84732baee55fd59e46cb2f071e86b489 100644 --- a/src/header/stdio/helpers.rs +++ b/src/header/stdio/helpers.rs @@ -6,8 +6,8 @@ use header::fcntl::*; use header::string::strchr; use io::LineWriter; use mutex::Mutex; -use platform::types::*; use platform; +use platform::types::*; use super::constants::*; use super::{Buffer, FILE}; diff --git a/src/header/stdio/mod.rs b/src/header/stdio/mod.rs index 631a412fc3549e23a26a13e06283635d7c29856b..0d4578a8d0d1438d4dd6b1bc78a741c68f7a56db 100644 --- a/src/header/stdio/mod.rs +++ b/src/header/stdio/mod.rs @@ -6,20 +6,20 @@ use alloc::vec::Vec; use core::fmt; use core::fmt::Write as WriteFmt; use core::ops::{Deref, DerefMut}; -use core::{ptr, str, slice}; +use core::{ptr, slice, str}; use va_list::VaList as va_list; use c_str::CStr; use fs::File; use header::errno::{self, STR_ERROR}; -use header::{fcntl, stdlib, unistd}; use header::string::strlen; +use header::{fcntl, stdlib, unistd}; use io::{self, BufRead, LineWriter, Read, Write}; use mutex::Mutex; +use platform; use platform::types::*; -use platform::{Pal, Sys}; use platform::{errno, WriteByte}; -use platform; +use platform::{Pal, Sys}; pub use self::constants::*; mod constants; @@ -34,7 +34,7 @@ mod scanf; enum Buffer<'a> { Borrowed(&'a mut [u8]), - Owned(Vec<u8>) + Owned(Vec<u8>), } impl<'a> Deref for Buffer<'a> { type Target = [u8]; @@ -42,7 +42,7 @@ impl<'a> Deref for Buffer<'a> { fn deref(&self) -> &Self::Target { match self { Buffer::Borrowed(inner) => inner, - Buffer::Owned(inner) => inner.borrow() + Buffer::Owned(inner) => inner.borrow(), } } } @@ -50,7 +50,7 @@ impl<'a> DerefMut for Buffer<'a> { fn deref_mut(&mut self) -> &mut Self::Target { match self { Buffer::Borrowed(inner) => inner, - Buffer::Owned(inner) => inner.borrow_mut() + Buffer::Owned(inner) => inner.borrow_mut(), } } } @@ -61,12 +61,12 @@ pub struct FILE { lock: Mutex<()>, file: File, - pub(crate) /* stdio_ext */ flags: c_int, + pub(crate) flags: c_int, read_buf: Buffer<'static>, read_pos: usize, read_size: usize, unget: Option<u8>, - pub(crate) /* stdio_ext */ writer: LineWriter<File>, + pub(crate) writer: LineWriter<File>, // Optional pid for use with popen/pclose pid: Option<c_int>, @@ -99,7 +99,7 @@ impl BufRead for FILE { Ok(0) => { self.flags |= F_EOF; 0 - }, + } Ok(n) => n, Err(err) => { self.flags |= F_ERR; @@ -143,9 +143,7 @@ impl WriteFmt for FILE { } impl WriteByte for FILE { fn write_u8(&mut self, c: u8) -> fmt::Result { - self.write_all(&[c]) - .map(|_| ()) - .map_err(|_| fmt::Error) + self.write_all(&[c]).map(|_| ()).map_err(|_| fmt::Error) } } impl FILE { @@ -202,7 +200,9 @@ pub extern "C" fn cuserid(_s: *mut c_char) -> *mut c_char { #[no_mangle] pub extern "C" fn fclose(stream: *mut FILE) -> c_int { let stream = unsafe { &mut *stream }; - unsafe { flockfile(stream); } + unsafe { + flockfile(stream); + } let mut r = stream.flush().is_err(); let close = Sys::close(*stream.file) < 0; @@ -214,7 +214,9 @@ pub extern "C" fn fclose(stream: *mut FILE) -> c_int { // Reference files aren't closed on drop, so pretend to be a reference stream.file.reference = true; } else { - unsafe { funlockfile(stream); } + unsafe { + funlockfile(stream); + } } r as c_int @@ -302,7 +304,7 @@ pub extern "C" fn fgets(original: *mut c_char, max: c_int, stream: *mut FILE) -> let (read, exit) = { let mut buf = match stream.fill_buf() { Ok(buf) => buf, - Err(_) => return ptr::null_mut() + Err(_) => return ptr::null_mut(), }; if buf.is_empty() { break; @@ -409,17 +411,19 @@ pub extern "C" fn fputs(s: *const c_char, stream: *mut FILE) -> c_int { /// Read `nitems` of size `size` into `ptr` from `stream` #[no_mangle] -pub extern "C" fn fread(ptr: *mut c_void, size: size_t, count: size_t, stream: *mut FILE) -> size_t { +pub extern "C" fn fread( + ptr: *mut c_void, + size: size_t, + count: size_t, + stream: *mut FILE, +) -> size_t { let mut stream = unsafe { &mut *stream }.lock(); - let buf = unsafe { slice::from_raw_parts_mut( - ptr as *mut u8, - size as usize * count as usize - ) }; + let buf = unsafe { slice::from_raw_parts_mut(ptr as *mut u8, size as usize * count as usize) }; let mut read = 0; while read < buf.len() { match stream.read(&mut buf[read..]) { Ok(0) | Err(_) => break, - Ok(n) => read += n + Ok(n) => read += n, } } (read / size as usize) as size_t @@ -432,7 +436,9 @@ pub extern "C" fn freopen( stream: &mut FILE, ) -> *mut FILE { let mut flags = unsafe { helpers::parse_mode_flags(mode) }; - unsafe { flockfile(stream); } + unsafe { + flockfile(stream); + } let _ = stream.flush(); if filename.is_null() { @@ -442,14 +448,18 @@ pub extern "C" fn freopen( } flags &= !(fcntl::O_CREAT | fcntl::O_EXCL | fcntl::O_CLOEXEC); if fcntl::sys_fcntl(*stream.file, fcntl::F_SETFL, flags) < 0 { - unsafe { funlockfile(stream); } + unsafe { + funlockfile(stream); + } fclose(stream); return ptr::null_mut(); } } else { let new = fopen(filename, mode); if new.is_null() { - unsafe { funlockfile(stream); } + unsafe { + funlockfile(stream); + } fclose(stream); return ptr::null_mut(); } @@ -459,7 +469,9 @@ pub extern "C" fn freopen( } else if Sys::dup2(*new.file, *stream.file) < 0 || fcntl::sys_fcntl(*stream.file, fcntl::F_SETFL, flags & fcntl::O_CLOEXEC) < 0 { - unsafe { funlockfile(stream); } + unsafe { + funlockfile(stream); + } fclose(new); fclose(stream); return ptr::null_mut(); @@ -467,7 +479,9 @@ pub extern "C" fn freopen( stream.flags = (stream.flags & constants::F_PERM) | new.flags; fclose(new); } - unsafe { funlockfile(stream); } + unsafe { + funlockfile(stream); + } stream } @@ -527,7 +541,11 @@ pub extern "C" fn ftello(stream: *mut FILE) -> off_t { /// Try to lock the file. Returns 0 for success, 1 for failure #[no_mangle] pub unsafe extern "C" fn ftrylockfile(file: *mut FILE) -> c_int { - if (*file).lock.manual_try_lock().is_ok() { 0 } else { 1 } + if (*file).lock.manual_try_lock().is_ok() { + 0 + } else { + 1 + } } /// Unlock the file @@ -538,17 +556,19 @@ pub unsafe extern "C" fn funlockfile(file: *mut FILE) { /// Write `nitems` of size `size` from `ptr` to `stream` #[no_mangle] -pub extern "C" fn fwrite(ptr: *const c_void, size: usize, count: usize, stream: *mut FILE) -> usize { +pub extern "C" fn fwrite( + ptr: *const c_void, + size: usize, + count: usize, + stream: *mut FILE, +) -> usize { let mut stream = unsafe { &mut *stream }.lock(); - let buf = unsafe { slice::from_raw_parts_mut( - ptr as *mut u8, - size as usize * count as usize - ) }; + let buf = unsafe { slice::from_raw_parts_mut(ptr as *mut u8, size as usize * count as usize) }; let mut written = 0; while written < buf.len() { match stream.write(&mut buf[written..]) { Ok(0) | Err(_) => break, - Ok(n) => written += n + Ok(n) => written += n, } } (written / size as usize) as size_t @@ -574,7 +594,7 @@ pub extern "C" fn getc_unlocked(stream: *mut FILE) -> c_int { match unsafe { &mut *stream }.read(&mut buf) { Ok(0) | Err(_) => EOF, - Ok(_) => buf[0] as c_int + Ok(_) => buf[0] as c_int, } } @@ -599,7 +619,7 @@ pub extern "C" fn getw(stream: *mut FILE) -> c_int { &mut ret as *mut _ as *mut c_void, mem::size_of_val(&ret), 1, - stream + stream, ) > 0 { ret @@ -717,18 +737,10 @@ pub unsafe extern "C" fn popen(command: *const c_char, mode: *const c_char) -> * } else if child_pid > 0 { let (fd, fd_mode) = if write { unistd::close(pipes[0]); - (pipes[1], if cloexec { - c_str!("we") - } else { - c_str!("w") - }) + (pipes[1], if cloexec { c_str!("we") } else { c_str!("w") }) } else { unistd::close(pipes[1]); - (pipes[0], if cloexec { - c_str!("re") - } else { - c_str!("r") - }) + (pipes[0], if cloexec { c_str!("re") } else { c_str!("r") }) }; if let Some(f) = helpers::_fdopen(fd, fd_mode.as_ptr()) { @@ -827,7 +839,12 @@ pub extern "C" fn setbuf(stream: *mut FILE, buf: *mut c_char) { /// Reset `stream` to use buffer `buf` of size `size` /// If this isn't the meaning of unsafe, idk what is #[no_mangle] -pub extern "C" fn setvbuf(stream: *mut FILE, buf: *mut c_char, mode: c_int, mut size: size_t) -> c_int { +pub extern "C" fn setvbuf( + stream: *mut FILE, + buf: *mut c_char, + mode: c_int, + mut size: size_t, +) -> c_int { let mut stream = unsafe { &mut *stream }.lock(); // Set a buffer of size `size` if no buffer is given stream.read_buf = if buf.is_null() || size == 0 { @@ -838,14 +855,9 @@ pub extern "C" fn setvbuf(stream: *mut FILE, buf: *mut c_char, mode: c_int, mut // if mode == _IONBF { // } else { Buffer::Owned(vec![0; size as usize]) - // } + // } } else { - unsafe { - Buffer::Borrowed(slice::from_raw_parts_mut( - buf as *mut u8, - size - )) - } + unsafe { Buffer::Borrowed(slice::from_raw_parts_mut(buf as *mut u8, size)) } }; stream.flags |= F_SVB; 0 diff --git a/src/header/stdio/printf.rs b/src/header/stdio/printf.rs index 2664b7f0cfd4592dcd07ea1dfc92455bb36c6080..0d4ea1b9dfb376578577e3f2863a1f45a309de40 100644 --- a/src/header/stdio/printf.rs +++ b/src/header/stdio/printf.rs @@ -81,14 +81,14 @@ impl IntoUsize for f64 { struct BufferedVaList { list: VaList, buf: Vec<usize>, - i: usize + i: usize, } impl BufferedVaList { fn new(list: VaList) -> Self { Self { list, buf: Vec::new(), - i: 0 + i: 0, } } unsafe fn get<T: VaPrimitive + IntoUsize>(&mut self, i: Option<usize>) -> T { @@ -143,7 +143,7 @@ unsafe fn pop_int(format: &mut *const u8, ap: &mut BufferedVaList) -> Option<usi if let Some(i) = pop_int_raw(&mut format2) { if *format2 == b'$' { *format = format2.offset(1); - return Some(ap.index::<usize>(i)) + return Some(ap.index::<usize>(i)); } } @@ -153,17 +153,23 @@ unsafe fn pop_int(format: &mut *const u8, ap: &mut BufferedVaList) -> Option<usi } } unsafe fn fmt_int<I>(fmt: u8, i: I) -> String - where I: fmt::Display + fmt::Octal + fmt::LowerHex + fmt::UpperHex +where + I: fmt::Display + fmt::Octal + fmt::LowerHex + fmt::UpperHex, { match fmt { b'o' => format!("{:o}", i), b'u' => i.to_string(), b'x' => format!("{:x}", i), b'X' => format!("{:X}", i), - _ => panic!("fmt_int should never be called with the fmt {}", fmt) + _ => panic!("fmt_int should never be called with the fmt {}", fmt), } } -fn pad<W: Write>(w: &mut W, current_side: bool, pad_char: u8, range: Range<usize>) -> io::Result<()> { +fn pad<W: Write>( + w: &mut W, + current_side: bool, + pad_char: u8, + range: Range<usize>, +) -> io::Result<()> { if current_side { for _ in range { w.write_all(&[pad_char])?; @@ -207,7 +213,10 @@ fn fmt_float_exp<W: Write>( exp -= 1; } - if range.map(|(start, end)| exp >= start && exp < end).unwrap_or(false) { + if range + .map(|(start, end)| exp >= start && exp < end) + .unwrap_or(false) + { return Ok(false); } @@ -294,7 +303,7 @@ unsafe fn inner_printf<W: Write>(w: W, format: *const c_char, ap: VaList) -> io: b'-' => left = true, b' ' => sign_reserve = true, b'+' => sign_always = true, - _ => break + _ => break, } format = format.offset(1); } @@ -304,31 +313,35 @@ unsafe fn inner_printf<W: Write>(w: W, format: *const c_char, ap: VaList) -> io: let precision = if *format == b'.' { format = format.offset(1); match pop_int(&mut format, &mut ap) { - int@Some(_) => int, - None => return Ok(-1) + int @ Some(_) => int, + None => return Ok(-1), } } else { None }; let pad_space = if zero { 0 } else { min_width }; - let pad_zero = if zero { min_width } else { 0 }; + let pad_zero = if zero { min_width } else { 0 }; // Integer size: let mut kind = IntKind::Int; loop { kind = match *format { - b'h' => if kind == IntKind::Short || kind == IntKind::Byte { - IntKind::Byte - } else { - IntKind::Short - }, + b'h' => { + if kind == IntKind::Short || kind == IntKind::Byte { + IntKind::Byte + } else { + IntKind::Short + } + } b'j' => IntKind::IntMax, - b'l' => if kind == IntKind::Long || kind == IntKind::LongLong { - IntKind::LongLong - } else { - IntKind::Long - }, + b'l' => { + if kind == IntKind::Long || kind == IntKind::LongLong { + IntKind::LongLong + } else { + IntKind::Long + } + } b'q' | b'L' => IntKind::LongLong, b't' => IntKind::PtrDiff, b'z' => IntKind::Size, @@ -346,14 +359,14 @@ unsafe fn inner_printf<W: Write>(w: W, format: *const c_char, ap: VaList) -> io: // VaList does not seem to support these two: // IntKind::Byte => ap.get::<c_char>(index).to_string(), // IntKind::Short => ap.get::<c_short>(index).to_string(), - IntKind::Byte => (ap.get::<c_int>(index) as c_char).to_string(), - IntKind::Short => (ap.get::<c_int>(index) as c_short).to_string(), - IntKind::Int => ap.get::<c_int>(index).to_string(), - IntKind::Long => ap.get::<c_long>(index).to_string(), + IntKind::Byte => (ap.get::<c_int>(index) as c_char).to_string(), + IntKind::Short => (ap.get::<c_int>(index) as c_short).to_string(), + IntKind::Int => ap.get::<c_int>(index).to_string(), + IntKind::Long => ap.get::<c_long>(index).to_string(), IntKind::LongLong => ap.get::<c_longlong>(index).to_string(), - IntKind::PtrDiff => ap.get::<ptrdiff_t>(index).to_string(), - IntKind::Size => ap.get::<ssize_t>(index).to_string(), - IntKind::IntMax => ap.get::<intmax_t>(index).to_string(), + IntKind::PtrDiff => ap.get::<ptrdiff_t>(index).to_string(), + IntKind::Size => ap.get::<ssize_t>(index).to_string(), + IntKind::IntMax => ap.get::<intmax_t>(index).to_string(), }; let positive = !string.starts_with('-'); let zero = precision == Some(0) && string == "0"; @@ -388,21 +401,21 @@ unsafe fn inner_printf<W: Write>(w: W, format: *const c_char, ap: VaList) -> io: } pad(w, left, b' ', final_len..pad_space)?; - }, + } b'o' | b'u' | b'x' | b'X' => { let fmt = *format; let string = match kind { // VaList does not seem to support these two: // IntKind::Byte => fmt_int(kind ap.get::<c_char>(index)), // IntKind::Short => fmt_int(kind ap.get::<c_short>(index)), - IntKind::Byte => fmt_int(fmt, ap.get::<c_uint>(index) as c_uchar), - IntKind::Short => fmt_int(fmt, ap.get::<c_uint>(index) as c_ushort), - IntKind::Int => fmt_int(fmt, ap.get::<c_uint>(index)), - IntKind::Long => fmt_int(fmt, ap.get::<c_ulong>(index)), + IntKind::Byte => fmt_int(fmt, ap.get::<c_uint>(index) as c_uchar), + IntKind::Short => fmt_int(fmt, ap.get::<c_uint>(index) as c_ushort), + IntKind::Int => fmt_int(fmt, ap.get::<c_uint>(index)), + IntKind::Long => fmt_int(fmt, ap.get::<c_ulong>(index)), IntKind::LongLong => fmt_int(fmt, ap.get::<c_ulonglong>(index)), - IntKind::PtrDiff => fmt_int(fmt, ap.get::<ptrdiff_t>(index)), - IntKind::Size => fmt_int(fmt, ap.get::<size_t>(index)), - IntKind::IntMax => fmt_int(fmt, ap.get::<uintmax_t>(index)), + IntKind::PtrDiff => fmt_int(fmt, ap.get::<ptrdiff_t>(index)), + IntKind::Size => fmt_int(fmt, ap.get::<size_t>(index)), + IntKind::IntMax => fmt_int(fmt, ap.get::<uintmax_t>(index)), }; let zero = precision == Some(0) && string == "0"; @@ -411,15 +424,16 @@ unsafe fn inner_printf<W: Write>(w: W, format: *const c_char, ap: VaList) -> io: let no_precision = precision.map(|pad| pad < string.len()).unwrap_or(true); let mut len = string.len(); - let mut final_len = string.len().max(precision.unwrap_or(0)) + - if alternate && string != "0" { + let mut final_len = string.len().max(precision.unwrap_or(0)) + + if alternate && string != "0" { match fmt { b'o' if no_precision => 1, - b'x' | - b'X' => 2, - _ => 0 + b'x' | b'X' => 2, + _ => 0, } - } else { 0 }; + } else { + 0 + }; if zero { len = 0; @@ -433,7 +447,7 @@ unsafe fn inner_printf<W: Write>(w: W, format: *const c_char, ap: VaList) -> io: b'o' if no_precision => w.write_all(&[b'0'])?, b'x' => w.write_all(&[b'0', b'x'])?, b'X' => w.write_all(&[b'0', b'X'])?, - _ => () + _ => (), } } pad(w, true, b'0', len..precision.unwrap_or(pad_zero))?; @@ -443,27 +457,38 @@ unsafe fn inner_printf<W: Write>(w: W, format: *const c_char, ap: VaList) -> io: } pad(w, left, b' ', final_len..pad_space)?; - }, + } b'e' | b'E' => { let exp_fmt = *format; let mut float = ap.get::<c_double>(index); let precision = precision.unwrap_or(6); - fmt_float_exp(w, exp_fmt, None, false, precision, float, left, pad_space, pad_zero)?; - }, + fmt_float_exp( + w, exp_fmt, None, false, precision, float, left, pad_space, pad_zero, + )?; + } b'f' | b'F' => { let mut float = ap.get::<c_double>(index); let precision = precision.unwrap_or(6); fmt_float_normal(w, false, precision, float, left, pad_space, pad_zero)?; - }, + } b'g' | b'G' => { let exp_fmt = b'E' | (*format & 32); let mut float = ap.get::<c_double>(index); let precision = precision.unwrap_or(6); - if !fmt_float_exp(w, exp_fmt, Some((-4, precision as isize)), true, - precision, float, left, pad_space, pad_zero)? { + if !fmt_float_exp( + w, + exp_fmt, + Some((-4, precision as isize)), + true, + precision, + float, + left, + pad_space, + pad_zero, + )? { fmt_float_normal(w, true, precision, float, left, pad_space, pad_zero)?; } } @@ -486,7 +511,7 @@ unsafe fn inner_printf<W: Write>(w: W, format: *const c_char, ap: VaList) -> io: w.write_all(slice::from_raw_parts(ptr as *const u8, len))?; pad(w, left, b' ', len..pad_space)?; } - }, + } b'c' => { // if kind == IntKind::Long || kind == IntKind::LongLong, handle wint_t @@ -495,7 +520,7 @@ unsafe fn inner_printf<W: Write>(w: W, format: *const c_char, ap: VaList) -> io: pad(w, !left, b' ', 1..pad_space)?; w.write_all(&[c as u8])?; pad(w, left, b' ', 1..pad_space)?; - }, + } b'p' => { let ptr = ap.get::<*const c_void>(index); @@ -517,12 +542,12 @@ unsafe fn inner_printf<W: Write>(w: W, format: *const c_char, ap: VaList) -> io: write!(w, "0x{:x}", ptr as usize)?; } pad(w, left, b' ', len..pad_space)?; - }, + } b'n' => { let ptr = ap.get::<*mut c_int>(index); *ptr = w.written as c_int; - }, - _ => return Ok(-1) + } + _ => return Ok(-1), } } format = format.offset(1); diff --git a/src/header/stdio/scanf.rs b/src/header/stdio/scanf.rs index 8595d2be3fccfb459ee89a7616ecfe29fb92adfa..7dac880940b7d0aaa166cfa652663fa5ae6e40ed 100644 --- a/src/header/stdio/scanf.rs +++ b/src/header/stdio/scanf.rs @@ -117,17 +117,21 @@ unsafe fn inner_scanf<R: Read>( let mut kind = IntKind::Int; loop { kind = match c { - b'h' => if kind == IntKind::Short || kind == IntKind::Byte { - IntKind::Byte - } else { - IntKind::Short - }, + b'h' => { + if kind == IntKind::Short || kind == IntKind::Byte { + IntKind::Byte + } else { + IntKind::Short + } + } b'j' => IntKind::IntMax, - b'l' => if kind == IntKind::Long || kind == IntKind::LongLong { - IntKind::LongLong - } else { - IntKind::Long - }, + b'l' => { + if kind == IntKind::Long || kind == IntKind::LongLong { + IntKind::LongLong + } else { + IntKind::Long + } + } b'q' | b'L' => IntKind::LongLong, b't' => IntKind::PtrDiff, b'z' => IntKind::Size, @@ -268,42 +272,56 @@ unsafe fn inner_scanf<R: Read>( let unsigned = c == b'o' || c == b'u' || c == b'x' || c == b'X'; match kind { - IntKind::Byte => if unsigned { - parse_type!(c_uchar); - } else { - parse_type!(c_char); - }, - IntKind::Short => if unsigned { - parse_type!(c_ushort) - } else { - parse_type!(c_short) - }, - IntKind::Int => if unsigned { - parse_type!(c_uint) - } else { - parse_type!(c_int) - }, - IntKind::Long => if unsigned { - parse_type!(c_ulong) - } else { - parse_type!(c_long) - }, - IntKind::LongLong => if unsigned { - parse_type!(c_ulonglong) - } else { - parse_type!(c_longlong) - }, - IntKind::IntMax => if unsigned { - parse_type!(uintmax_t) - } else { - parse_type!(intmax_t) - }, + IntKind::Byte => { + if unsigned { + parse_type!(c_uchar); + } else { + parse_type!(c_char); + } + } + IntKind::Short => { + if unsigned { + parse_type!(c_ushort) + } else { + parse_type!(c_short) + } + } + IntKind::Int => { + if unsigned { + parse_type!(c_uint) + } else { + parse_type!(c_int) + } + } + IntKind::Long => { + if unsigned { + parse_type!(c_ulong) + } else { + parse_type!(c_long) + } + } + IntKind::LongLong => { + if unsigned { + parse_type!(c_ulonglong) + } else { + parse_type!(c_longlong) + } + } + IntKind::IntMax => { + if unsigned { + parse_type!(uintmax_t) + } else { + parse_type!(intmax_t) + } + } IntKind::PtrDiff => parse_type!(ptrdiff_t), - IntKind::Size => if unsigned { - parse_type!(size_t) - } else { - parse_type!(ssize_t) - }, + IntKind::Size => { + if unsigned { + parse_type!(size_t) + } else { + parse_type!(ssize_t) + } + } } } } diff --git a/src/header/stdlib/mod.rs b/src/header/stdlib/mod.rs index cecf90637814c1f0471e0e4cd80fa27ce8013010..e518b050562bfab8b06538049195927924033a6f 100644 --- a/src/header/stdlib/mod.rs +++ b/src/header/stdlib/mod.rs @@ -9,10 +9,10 @@ use rand::{Rng, SeedableRng}; use c_str::CStr; use header::errno::*; use header::fcntl::*; +use header::limits; use header::string::*; use header::time::constants::CLOCK_MONOTONIC; use header::time::timespec; -use header::limits; use header::wchar::*; use header::{ctype, errno, unistd}; use platform; @@ -458,7 +458,8 @@ pub extern "C" fn mktemp(name: *mut c_char) -> *mut c_char { None }; ret - }).is_none() + }) + .is_none() { unsafe { *name = 0; @@ -487,7 +488,8 @@ pub extern "C" fn mkostemps(name: *mut c_char, suffix_len: c_int, mut flags: c_i } else { None } - }).unwrap_or(-1) + }) + .unwrap_or(-1) } #[no_mangle] diff --git a/src/header/string/mod.rs b/src/header/string/mod.rs index 9f0ce210f2c25f35a35003c057f31e9b7334c22e..013da7c493a68168649fc02c979f4185f4179014 100644 --- a/src/header/string/mod.rs +++ b/src/header/string/mod.rs @@ -366,7 +366,11 @@ pub unsafe extern "C" fn strspn(s1: *const c_char, s2: *const c_char) -> size_t inner_strspn(s1, s2, true) } -unsafe fn inner_strstr(mut haystack: *const c_char, needle: *const c_char, mask: c_char) -> *mut c_char { +unsafe fn inner_strstr( + mut haystack: *const c_char, + needle: *const c_char, + mask: c_char, +) -> *mut c_char { while *haystack != 0 { let mut i = 0; loop { diff --git a/src/header/sys_utsname/mod.rs b/src/header/sys_utsname/mod.rs index 032998d58634fd6e238cd24ce916696557b6164b..db7168cc18aa980b9986057c48641da00165cb7e 100644 --- a/src/header/sys_utsname/mod.rs +++ b/src/header/sys_utsname/mod.rs @@ -1,7 +1,7 @@ //! sys/utsname implementation, following http://pubs.opengroup.org/onlinepubs/7908799/xsh/sysutsname.h.html -use platform::{Pal, Sys}; use platform::types::*; +use platform::{Pal, Sys}; pub const UTSLENGTH: usize = 65; diff --git a/src/header/unistd/mod.rs b/src/header/unistd/mod.rs index 47d005ed517659fc7f4ff5856a3359a76ac4a24d..3cf2e16bd3b4709c546047afd4b1f872619e4e86 100644 --- a/src/header/unistd/mod.rs +++ b/src/header/unistd/mod.rs @@ -162,13 +162,15 @@ const PATH_SEPARATOR: u8 = b';'; pub unsafe extern "C" fn execvp(file: *const c_char, argv: *const *mut c_char) -> c_int { let file = CStr::from_ptr(file); - if file.to_bytes().contains(&b'/') || (cfg!(target_os = "redox") && file.to_bytes().contains(&b':')) { + if file.to_bytes().contains(&b'/') + || (cfg!(target_os = "redox") && file.to_bytes().contains(&b':')) + { execv(file.as_ptr(), argv) } else { let mut error = errno::ENOENT; let path_env = getenv(c_str!("PATH\0").as_ptr()); - if ! path_env.is_null() { + if !path_env.is_null() { let path_env = CStr::from_ptr(path_env); for mut path in path_env.to_bytes().split(|&b| b == PATH_SEPARATOR) { let mut program = path.to_vec(); @@ -239,7 +241,8 @@ pub extern "C" fn getcwd(mut buf: *mut c_char, mut size: size_t) -> *mut c_char let len = stack_buf .iter() .position(|b| *b == 0) - .expect("no nul-byte in getcwd string") + 1; + .expect("no nul-byte in getcwd string") + + 1; let heap_buf = unsafe { platform::alloc(len) as *mut c_char }; for i in 0..len { unsafe { diff --git a/src/macros.rs b/src/macros.rs index 39f78d5e380650c2e163b397b5caa802cdbd7506..a564a5ed90559f2a8602ef2b11b2af70a92d1e37 100644 --- a/src/macros.rs +++ b/src/macros.rs @@ -3,10 +3,11 @@ 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) + $crate::c_str::CStr::from_ptr( + concat!($lit, "\0").as_ptr() as *const $crate::platform::types::c_char + ) } - } + }; } /// Print to stdout @@ -261,5 +262,5 @@ macro_rules! strto_float_impl { } else { result } - }} + }}; } diff --git a/src/mutex.rs b/src/mutex.rs index 87efc246dcd6e1ee5ca98e3545a27e2ccfd6b451..3c23b6faafe08b066f54af50298bcd56ed3d58c1 100644 --- a/src/mutex.rs +++ b/src/mutex.rs @@ -2,15 +2,15 @@ use core::cell::UnsafeCell; use core::intrinsics; use core::ops::{Deref, DerefMut}; use core::sync::atomic; -use platform::{Pal, Sys}; use platform::types::*; +use platform::{Pal, Sys}; pub const FUTEX_WAIT: c_int = 0; pub const FUTEX_WAKE: c_int = 1; pub struct Mutex<T> { lock: UnsafeCell<c_int>, - content: UnsafeCell<T> + content: UnsafeCell<T>, } unsafe impl<T: Send> Send for Mutex<T> {} unsafe impl<T: Send> Sync for Mutex<T> {} @@ -19,7 +19,7 @@ impl<T> Mutex<T> { pub fn new(content: T) -> Self { Self { lock: UnsafeCell::new(0), - content: UnsafeCell::new(content) + content: UnsafeCell::new(content), } } @@ -45,7 +45,7 @@ impl<T> Mutex<T> { atomic::spin_loop_hint(); last = match self.manual_try_lock() { Ok(content) => return content, - Err(value) => value + Err(value) => value, }; } @@ -62,7 +62,7 @@ impl<T> Mutex<T> { last = match self.manual_try_lock() { Ok(content) => return content, - Err(value) => value + Err(value) => value, }; } } @@ -80,7 +80,7 @@ impl<T> Mutex<T> { unsafe { self.manual_try_lock().ok().map(|content| MutexGuard { mutex: self, - content + content, }) } } @@ -89,14 +89,14 @@ impl<T> Mutex<T> { pub fn lock(&self) -> MutexGuard<T> { MutexGuard { mutex: self, - content: unsafe { self.manual_lock() } + content: unsafe { self.manual_lock() }, } } } pub struct MutexGuard<'a, T: 'a> { mutex: &'a Mutex<T>, - content: &'a mut T + content: &'a mut T, } impl<'a, T> Deref for MutexGuard<'a, T> { type Target = T; diff --git a/src/platform/linux/mod.rs b/src/platform/linux/mod.rs index ce1443c5ceef0af2cb50b85ee193175b8f89b4ce..98e3f310bf6462281882a5494759d983c25dab12 100644 --- a/src/platform/linux/mod.rs +++ b/src/platform/linux/mod.rs @@ -302,12 +302,20 @@ impl Pal for Sys { fn realpath(pathname: &CStr, out: &mut [u8]) -> c_int { fn readlink(pathname: &CStr, out: &mut [u8]) -> ssize_t { - e(unsafe { syscall!(READLINKAT, AT_FDCWD, pathname.as_ptr(), out.as_mut_ptr(), out.len()) }) as ssize_t + e(unsafe { + syscall!( + READLINKAT, + AT_FDCWD, + pathname.as_ptr(), + out.as_mut_ptr(), + out.len() + ) + }) as ssize_t } let file = match File::open(pathname, fcntl::O_PATH) { Ok(file) => file, - Err(_) => return -1 + Err(_) => return -1, }; if out.is_empty() { @@ -319,7 +327,10 @@ impl Pal for Sys { proc_path.push(0); let len = out.len(); - let read = readlink(CStr::from_bytes_with_nul(&proc_path).unwrap(), &mut out[..len-1]); + let read = readlink( + CStr::from_bytes_with_nul(&proc_path).unwrap(), + &mut out[..len - 1], + ); if read < 0 { return -1; } diff --git a/src/platform/mod.rs b/src/platform/mod.rs index ad075cf22bf18dd9ac113e695b0faf5978fd7ee4..3195990a184d9dfa2b82a1e83601db6ff30891b2 100644 --- a/src/platform/mod.rs +++ b/src/platform/mod.rs @@ -100,11 +100,7 @@ impl Write for StringWriter { if self.1 > 1 { let copy_size = buf.len().min(self.1 - 1); unsafe { - ptr::copy_nonoverlapping( - buf.as_ptr(), - self.0, - copy_size - ); + ptr::copy_nonoverlapping(buf.as_ptr(), self.0, copy_size); self.1 -= copy_size; self.0 = self.0.offset(copy_size as isize); @@ -139,11 +135,7 @@ pub struct UnsafeStringWriter(pub *mut u8); impl Write for UnsafeStringWriter { fn write(&mut self, buf: &[u8]) -> io::Result<usize> { unsafe { - ptr::copy_nonoverlapping( - buf.as_ptr(), - self.0, - buf.len() - ); + ptr::copy_nonoverlapping(buf.as_ptr(), self.0, buf.len()); *self.0.offset(buf.len() as isize) = b'\0'; self.0 = self.0.offset(buf.len() as isize); } @@ -221,7 +213,7 @@ impl<T: Write> Write for CountingWriter<T> { match self.inner.write_all(&buf) { Ok(()) => (), Err(ref err) if err.kind() == io::ErrorKind::WriteZero => (), - Err(err) => return Err(err) + Err(err) => return Err(err), } self.written += buf.len(); Ok(()) diff --git a/src/platform/redox/mod.rs b/src/platform/redox/mod.rs index df33302644f3e1ca55896a3938151ee0bab986ad..320a73f5dcf533c8812f6ba9b4d25e4fe3123ac2 100644 --- a/src/platform/redox/mod.rs +++ b/src/platform/redox/mod.rs @@ -2,8 +2,8 @@ use alloc::collections::BTreeMap; use cbitset::BitSet; -use core::{mem, ptr, slice}; use core::result::Result as CoreResult; +use core::{mem, ptr, slice}; use spin::{Mutex, MutexGuard, Once}; use syscall::data::Stat as redox_stat; use syscall::data::TimeSpec as redox_timespec; @@ -12,11 +12,11 @@ use syscall::{self, Result}; use c_str::{CStr, CString}; use fs::File; -use io::{self, BufReader, SeekFrom}; -use io::prelude::*; use header::dirent::dirent; -use header::errno::{EPERM, EIO, EINVAL}; +use header::errno::{EINVAL, EIO, EPERM}; use header::fcntl; +use io::prelude::*; +use io::{self, BufReader, SeekFrom}; const MAP_ANON: c_int = 1; use header::sys_select::fd_set; use header::sys_stat::stat; @@ -61,7 +61,7 @@ impl Pal for Sys { Err(_) => unsafe { errno = EIO; return -1; - } + }, }; if mode == F_OK { return 0; @@ -83,9 +83,9 @@ impl Pal for Sys { } let perms = if stat.st_uid as usize == uid { - stat.st_mode >> (3*2 & 0o7) + stat.st_mode >> (3 * 2 & 0o7) } else if stat.st_gid as usize == gid { - stat.st_mode >> (3*1 & 0o7) + stat.st_mode >> (3 * 1 & 0o7) } else { stat.st_mode & 0o7 }; @@ -172,7 +172,7 @@ impl Pal for Sys { let mut file = match File::open(path, fcntl::O_RDONLY | fcntl::O_CLOEXEC) { Ok(file) => file, - Err(_) => return -1 + Err(_) => return -1, }; let fd = *file as usize; @@ -195,7 +195,7 @@ impl Pal for Sys { match reader.read(&mut shebang) { Ok(0) => break, Ok(i) => read += i, - Err(_) => return -1 + Err(_) => return -1, } } @@ -218,9 +218,9 @@ impl Pal for Sys { } let mode = if uid == stat.st_uid as usize { - (stat.st_mode >> 3*2) & 0o7 + (stat.st_mode >> 3 * 2) & 0o7 } else if gid == stat.st_gid as usize { - (stat.st_mode >> 3*1) & 0o7 + (stat.st_mode >> 3 * 1) & 0o7 } else { stat.st_mode & 0o7 }; @@ -243,7 +243,7 @@ impl Pal for Sys { // directly from here. Just wait until NLL comes // around... Some(interpreter) - }, + } } } else { None @@ -378,9 +378,17 @@ impl Pal for Sys { } fn futex(addr: *mut c_int, op: c_int, val: c_int) -> c_int { - match unsafe { syscall::futex(addr as *mut i32, op as usize, val as i32, 0, ptr::null_mut()) } { + match unsafe { + syscall::futex( + addr as *mut i32, + op as usize, + val as i32, + 0, + ptr::null_mut(), + ) + } { Ok(success) => success as c_int, - Err(err) => -(err.errno as c_int) + Err(err) => -(err.errno as c_int), } } @@ -419,7 +427,7 @@ impl Pal for Sys { // Get initial reading position let mut read = match syscall::lseek(fd as usize, 0, SEEK_CUR) { Ok(pos) => pos as isize, - Err(err) => return -err.errno + Err(err) => return -err.errno, }; let mut written = 0; @@ -439,7 +447,7 @@ impl Pal for Sys { // Seek back to after last read entry and return match syscall::lseek(fd as usize, read, SEEK_SET as usize) { Ok(_) => return Some(*written as c_int), - Err(err) => return Some(-err.errno) + Err(err) => return Some(-err.errno), } } unsafe { @@ -448,7 +456,7 @@ impl Pal for Sys { d_off: read as off_t, d_reclen: size as c_ushort, d_type: 0, - d_name: *name + d_name: *name, }; dirents = (dirents as *mut u8).offset(size as isize) as *mut dirent; } @@ -468,9 +476,9 @@ impl Pal for Sys { } } return written as c_int; - }, + } Ok(n) => n, - Err(err) => return -err.errno + Err(err) => return -err.errno, }; // Handle everything @@ -484,12 +492,10 @@ impl Pal for Sys { let post_len = newline.map(|i| i + 1).unwrap_or(buf.len()); if i < pre_len { // Reserve space for NUL byte - let name_len = name.len()-1; + let name_len = name.len() - 1; let name = &mut name[i..name_len]; let copy = pre_len.min(name.len()); - let buf = unsafe { - slice::from_raw_parts(buf.as_ptr() as *const c_char, copy) - }; + let buf = unsafe { slice::from_raw_parts(buf.as_ptr() as *const c_char, copy) }; name[..copy].copy_from_slice(buf); } @@ -522,14 +528,14 @@ impl Pal for Sys { fn inner(name: &mut [u8]) -> io::Result<()> { let mut file = File::open( &CString::new("/etc/hostname").unwrap(), - fcntl::O_RDONLY | fcntl::O_CLOEXEC + fcntl::O_RDONLY | fcntl::O_CLOEXEC, )?; let mut read = 0; loop { match file.read(&mut name[read..])? { 0 => break, - n => read += n + n => read += n, } } Ok(()) @@ -540,7 +546,7 @@ impl Pal for Sys { Err(_) => unsafe { errno = EIO; -1 - } + }, } } @@ -706,7 +712,7 @@ impl Pal for Sys { fn realpath(pathname: &CStr, out: &mut [u8]) -> c_int { let file = match File::open(pathname, fcntl::O_PATH) { Ok(fd) => fd, - Err(_) => return -1 + Err(_) => return -1, }; if out.is_empty() { @@ -714,7 +720,7 @@ impl Pal for Sys { } let len = out.len(); - let read = e(syscall::fpath(*file as usize, &mut out[..len-1])); + let read = e(syscall::fpath(*file as usize, &mut out[..len - 1])); if (read as c_int) < 0 { return -1; } @@ -747,7 +753,8 @@ impl Pal for Sys { ) -> c_int { let mut readfds = unsafe { readfds.as_mut() }.map(|s| BitSet::from_ref(&mut s.fds_bits)); let mut writefds = unsafe { writefds.as_mut() }.map(|s| BitSet::from_ref(&mut s.fds_bits)); - let mut exceptfds = unsafe { exceptfds.as_mut() }.map(|s| BitSet::from_ref(&mut s.fds_bits)); + let mut exceptfds = + unsafe { exceptfds.as_mut() }.map(|s| BitSet::from_ref(&mut s.fds_bits)); let event_path = unsafe { CStr::from_bytes_with_nul_unchecked(b"event:\0") }; let mut event_file = match File::open(event_path, fcntl::O_RDWR | fcntl::O_CLOEXEC) { @@ -758,7 +765,14 @@ impl Pal for Sys { for fd in 0..nfds as usize { macro_rules! register { ($fd:expr, $flags:expr) => { - if event_file.write(&syscall::Event { id: $fd, flags: $flags, data: 0, }).is_err() { + if event_file + .write(&syscall::Event { + id: $fd, + flags: $flags, + data: 0, + }) + .is_err() + { return -1; } }; @@ -783,16 +797,20 @@ impl Pal for Sys { format!("time:{}", syscall::CLOCK_MONOTONIC).into_bytes(), ) }; - let mut timeout_file = match File::open(&timeout_path, fcntl::O_RDWR | fcntl::O_CLOEXEC) { + let mut timeout_file = match File::open(&timeout_path, fcntl::O_RDWR | fcntl::O_CLOEXEC) + { Ok(file) => file, Err(_) => return -1, }; - if event_file.write(&syscall::Event { - id: *timeout_file as usize, - flags: syscall::EVENT_READ, - data: TIMEOUT_TOKEN, - }).is_err() { + if event_file + .write(&syscall::Event { + id: *timeout_file as usize, + flags: syscall::EVENT_READ, + data: TIMEOUT_TOKEN, + }) + .is_err() + { return -1; } @@ -817,21 +835,29 @@ impl Pal for Sys { let mut events = [syscall::Event::default(); 32]; let read = { - let mut events = unsafe { slice::from_raw_parts_mut( - &mut events as *mut _ as *mut u8, - mem::size_of::<syscall::Event>() * events.len() - ) }; + let mut events = unsafe { + slice::from_raw_parts_mut( + &mut events as *mut _ as *mut u8, + mem::size_of::<syscall::Event>() * events.len(), + ) + }; match event_file.read(&mut events) { Ok(i) => i / mem::size_of::<syscall::Event>(), - Err(_) => return -1 + Err(_) => return -1, } }; let mut total = 0; - if let Some(ref mut set) = readfds { set.clear(); } - if let Some(ref mut set) = writefds { set.clear(); } - if let Some(ref mut set) = exceptfds { set.clear(); } + if let Some(ref mut set) = readfds { + set.clear(); + } + if let Some(ref mut set) = writefds { + set.clear(); + } + if let Some(ref mut set) = exceptfds { + set.clear(); + } for event in &events[..read] { if event.data == TIMEOUT_TOKEN { @@ -916,18 +942,14 @@ impl Pal for Sys { let mut read_line = |dst: &mut [c_char]| { let line = match lines.next() { - Some(Ok(l)) => { - match CString::new(l) { - Ok(l) => l, - Err(_) => return Err(EIO), - } + Some(Ok(l)) => match CString::new(l) { + Ok(l) => l, + Err(_) => return Err(EIO), }, None | Some(Err(_)) => return Err(EIO), }; - let line_slice: &[c_char] = unsafe { - mem::transmute(line.as_bytes_with_nul()) - }; + let line_slice: &[c_char] = unsafe { mem::transmute(line.as_bytes_with_nul()) }; if line_slice.len() <= UTSLENGTH { dst[..line_slice.len()].copy_from_slice(line_slice); @@ -956,7 +978,7 @@ impl Pal for Sys { Err(err) => unsafe { errno = err; -1 - } + }, } } diff --git a/src/start.rs b/src/start.rs index 7de69a57efaf00ad642127ee7a84bb1ac01e5a37..ad2784d09f4525265ba9f0b898b738beb903059c 100644 --- a/src/start.rs +++ b/src/start.rs @@ -30,9 +30,9 @@ impl Stack { pub unsafe extern "C" fn relibc_start(sp: &'static Stack) -> ! { extern "C" { static __preinit_array_start: extern "C" fn(); - static __preinit_array_end: extern "C" fn(); - static __init_array_start: extern "C" fn(); - static __init_array_end: extern "C" fn(); + static __preinit_array_end: extern "C" fn(); + static __init_array_start: extern "C" fn(); + static __init_array_end: extern "C" fn(); fn _init(); fn main(argc: isize, argv: *const *const c_char, envp: *const *const c_char) -> c_int;