Prefer constant over function

This commit is contained in:
Lzu Tao 2020-07-23 02:49:40 +00:00
parent 4a86573c6b
commit 0de7fade10
3 changed files with 27 additions and 28 deletions

View File

@ -7,24 +7,25 @@ use crate::sync::atomic::{AtomicBool, Ordering};
use crate::sys::cvt; use crate::sys::cvt;
use crate::sys_common::AsInner; use crate::sys_common::AsInner;
use libc::{c_int, c_void, ssize_t}; use libc::{c_int, c_void};
#[derive(Debug)] #[derive(Debug)]
pub struct FileDesc { pub struct FileDesc {
fd: c_int, fd: c_int,
} }
fn max_len() -> usize { // The maximum read limit on most POSIX-like systems is `SSIZE_MAX`,
// The maximum read limit on most posix-like systems is `SSIZE_MAX`, // with the man page quoting that if the count of bytes to read is
// with the man page quoting that if the count of bytes to read is // greater than `SSIZE_MAX` the result is "unspecified".
// greater than `SSIZE_MAX` the result is "unspecified". //
// // On macOS, however, apparently the 64-bit libc is either buggy or
// On macOS, however, apparently the 64-bit libc is either buggy or // intentionally showing odd behavior by rejecting any read with a size
// intentionally showing odd behavior by rejecting any read with a size // larger than or equal to INT_MAX. To handle both of these the read
// larger than or equal to INT_MAX. To handle both of these the read // size is capped on both platforms.
// size is capped on both platforms. #[cfg(target_os = "macos")]
if cfg!(target_os = "macos") { <c_int>::MAX as usize - 1 } else { <ssize_t>::MAX as usize } const READ_LIMIT: usize = c_int::MAX as usize - 1;
} #[cfg(not(target_os = "macos"))]
const READ_LIMIT: usize = libc::ssize_t::MAX as usize;
impl FileDesc { impl FileDesc {
pub fn new(fd: c_int) -> FileDesc { pub fn new(fd: c_int) -> FileDesc {
@ -44,7 +45,7 @@ impl FileDesc {
pub fn read(&self, buf: &mut [u8]) -> io::Result<usize> { pub fn read(&self, buf: &mut [u8]) -> io::Result<usize> {
let ret = cvt(unsafe { let ret = cvt(unsafe {
libc::read(self.fd, buf.as_mut_ptr() as *mut c_void, cmp::min(buf.len(), max_len())) libc::read(self.fd, buf.as_mut_ptr() as *mut c_void, cmp::min(buf.len(), READ_LIMIT))
})?; })?;
Ok(ret as usize) Ok(ret as usize)
} }
@ -92,7 +93,7 @@ impl FileDesc {
cvt_pread64( cvt_pread64(
self.fd, self.fd,
buf.as_mut_ptr() as *mut c_void, buf.as_mut_ptr() as *mut c_void,
cmp::min(buf.len(), max_len()), cmp::min(buf.len(), READ_LIMIT),
offset as i64, offset as i64,
) )
.map(|n| n as usize) .map(|n| n as usize)
@ -101,7 +102,7 @@ impl FileDesc {
pub fn write(&self, buf: &[u8]) -> io::Result<usize> { pub fn write(&self, buf: &[u8]) -> io::Result<usize> {
let ret = cvt(unsafe { let ret = cvt(unsafe {
libc::write(self.fd, buf.as_ptr() as *const c_void, cmp::min(buf.len(), max_len())) libc::write(self.fd, buf.as_ptr() as *const c_void, cmp::min(buf.len(), READ_LIMIT))
})?; })?;
Ok(ret as usize) Ok(ret as usize)
} }
@ -144,7 +145,7 @@ impl FileDesc {
cvt_pwrite64( cvt_pwrite64(
self.fd, self.fd,
buf.as_ptr() as *const c_void, buf.as_ptr() as *const c_void,
cmp::min(buf.len(), max_len()), cmp::min(buf.len(), READ_LIMIT),
offset as i64, offset as i64,
) )
.map(|n| n as usize) .map(|n| n as usize)

View File

@ -13,12 +13,10 @@ pub struct FileDesc {
fd: c_int, fd: c_int,
} }
fn max_len() -> usize { // The maximum read limit on most POSIX-like systems is `SSIZE_MAX`,
// The maximum read limit on most posix-like systems is `SSIZE_MAX`, // with the man page quoting that if the count of bytes to read is
// with the man page quoting that if the count of bytes to read is // greater than `SSIZE_MAX` the result is "unspecified".
// greater than `SSIZE_MAX` the result is "unspecified". const READ_LIMIT: usize = ssize_t::MAX as usize;
<ssize_t>::MAX as usize
}
impl FileDesc { impl FileDesc {
pub fn new(fd: c_int) -> FileDesc { pub fn new(fd: c_int) -> FileDesc {
@ -29,7 +27,7 @@ impl FileDesc {
self.fd self.fd
} }
/// Extracts the actual filedescriptor without closing it. /// Extracts the actual file descriptor without closing it.
pub fn into_raw(self) -> c_int { pub fn into_raw(self) -> c_int {
let fd = self.fd; let fd = self.fd;
mem::forget(self); mem::forget(self);
@ -38,7 +36,7 @@ impl FileDesc {
pub fn read(&self, buf: &mut [u8]) -> io::Result<usize> { pub fn read(&self, buf: &mut [u8]) -> io::Result<usize> {
let ret = cvt(unsafe { let ret = cvt(unsafe {
libc::read(self.fd, buf.as_mut_ptr() as *mut c_void, cmp::min(buf.len(), max_len())) libc::read(self.fd, buf.as_mut_ptr() as *mut c_void, cmp::min(buf.len(), READ_LIMIT))
})?; })?;
Ok(ret as usize) Ok(ret as usize)
} }
@ -79,7 +77,7 @@ impl FileDesc {
cvt_pread( cvt_pread(
self.fd, self.fd,
buf.as_mut_ptr() as *mut c_void, buf.as_mut_ptr() as *mut c_void,
cmp::min(buf.len(), max_len()), cmp::min(buf.len(), READ_LIMIT),
offset as i64, offset as i64,
) )
.map(|n| n as usize) .map(|n| n as usize)
@ -88,7 +86,7 @@ impl FileDesc {
pub fn write(&self, buf: &[u8]) -> io::Result<usize> { pub fn write(&self, buf: &[u8]) -> io::Result<usize> {
let ret = cvt(unsafe { let ret = cvt(unsafe {
libc::write(self.fd, buf.as_ptr() as *const c_void, cmp::min(buf.len(), max_len())) libc::write(self.fd, buf.as_ptr() as *const c_void, cmp::min(buf.len(), READ_LIMIT))
})?; })?;
Ok(ret as usize) Ok(ret as usize)
} }
@ -124,7 +122,7 @@ impl FileDesc {
cvt_pwrite( cvt_pwrite(
self.fd, self.fd,
buf.as_ptr() as *const c_void, buf.as_ptr() as *const c_void,
cmp::min(buf.len(), max_len()), cmp::min(buf.len(), READ_LIMIT),
offset as i64, offset as i64,
) )
.map(|n| n as usize) .map(|n| n as usize)

View File

@ -1,6 +1,6 @@
use crate::cmp::Ordering; use crate::cmp::Ordering;
use crate::time::Duration; use crate::time::Duration;
use ::core::hash::{Hash, Hasher}; use core::hash::{Hash, Hasher};
pub use self::inner::{Instant, SystemTime, UNIX_EPOCH}; pub use self::inner::{Instant, SystemTime, UNIX_EPOCH};
use crate::convert::TryInto; use crate::convert::TryInto;