diff options
| author | Dylan DPC <dylan.dpc@gmail.com> | 2021-03-24 01:52:29 +0100 |
|---|---|---|
| committer | GitHub <noreply@github.com> | 2021-03-24 01:52:29 +0100 |
| commit | a42e62fa0a59d0ba620889f97513929a113a6fbd (patch) | |
| tree | c8dabc69676343818b44914550e763ddd18d214d /library/std/src/sys/unix/ext/net/addr.rs | |
| parent | 2f611da1d66ae98b53358bcb7739884524b7e18d (diff) | |
| parent | 6bbcc5bfbbfd9ba5a6d584a753fa32d80e3a7a17 (diff) | |
| download | rust-a42e62fa0a59d0ba620889f97513929a113a6fbd.tar.gz rust-a42e62fa0a59d0ba620889f97513929a113a6fbd.zip | |
Rollup merge of #83353 - m-ou-se:io-error-avoid-alloc, r=nagisa
Add internal io::Error::new_const to avoid allocations. This makes it possible to have a io::Error containing a message with zero allocations, and uses that everywhere to avoid the *three* allocations involved in `io::Error::new(kind, "message")`. The function signature isn't perfect, because it needs a reference to the `&str`. So for now, this is just a `pub(crate)` function. Later, we'll be able to use `fn new_const<MSG: &'static str>(kind: ErrorKind)` to make that a bit better. (Then we'll also be able to use some ZST trickery if that would result in more efficient code.) See https://github.com/rust-lang/rust/issues/83352
Diffstat (limited to 'library/std/src/sys/unix/ext/net/addr.rs')
| -rw-r--r-- | library/std/src/sys/unix/ext/net/addr.rs | 12 |
1 files changed, 6 insertions, 6 deletions
diff --git a/library/std/src/sys/unix/ext/net/addr.rs b/library/std/src/sys/unix/ext/net/addr.rs index 1f9036242eb..6e7d1f1678a 100644 --- a/library/std/src/sys/unix/ext/net/addr.rs +++ b/library/std/src/sys/unix/ext/net/addr.rs @@ -29,16 +29,16 @@ pub(super) unsafe fn sockaddr_un(path: &Path) -> io::Result<(libc::sockaddr_un, let bytes = path.as_os_str().as_bytes(); if bytes.contains(&0) { - return Err(io::Error::new( + return Err(io::Error::new_const( io::ErrorKind::InvalidInput, - "paths may not contain interior null bytes", + &"paths may not contain interior null bytes", )); } if bytes.len() >= addr.sun_path.len() { - return Err(io::Error::new( + return Err(io::Error::new_const( io::ErrorKind::InvalidInput, - "path must be shorter than SUN_LEN", + &"path must be shorter than SUN_LEN", )); } for (dst, src) in addr.sun_path.iter_mut().zip(bytes.iter()) { @@ -118,9 +118,9 @@ impl SocketAddr { // linux returns zero bytes of address len = sun_path_offset(&addr) as libc::socklen_t; // i.e., zero-length address } else if addr.sun_family != libc::AF_UNIX as libc::sa_family_t { - return Err(io::Error::new( + return Err(io::Error::new_const( io::ErrorKind::InvalidInput, - "file descriptor did not correspond to a Unix socket", + &"file descriptor did not correspond to a Unix socket", )); } |
