Merge pull request #5148 from coolreader18/upd-nix

Update nix and socket2
This commit is contained in:
Jeong, YunWon
2024-01-10 03:12:13 +09:00
committed by GitHub
5 changed files with 98 additions and 118 deletions

138
Cargo.lock generated
View File

@@ -257,13 +257,11 @@ dependencies = [
[[package]]
name = "clipboard-win"
version = "4.5.0"
version = "5.0.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "7191c27c2357d9b7ef96baac1773290d4ca63b24205b82a3fd8a0637afcf0362"
checksum = "c57002a5d9be777c1ef967e33674dac9ebd310d8893e4e3437b14d5f0f6372cc"
dependencies = [
"error-code",
"str-buf",
"winapi",
]
[[package]]
@@ -673,14 +671,14 @@ dependencies = [
[[package]]
name = "dns-lookup"
version = "1.0.8"
version = "2.0.4"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "53ecafc952c4528d9b51a458d1a8904b81783feff9fde08ab6ed2545ff396872"
checksum = "e5766087c2235fec47fafa4cfecc81e494ee679d0fd4a59887ea0919bfb0e4fc"
dependencies = [
"cfg-if",
"libc",
"socket2",
"winapi",
"windows-sys 0.48.0",
]
[[package]]
@@ -732,34 +730,19 @@ dependencies = [
[[package]]
name = "errno"
version = "0.3.1"
version = "0.3.8"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "4bcfec3a70f97c962c307b2d2c56e358cf1d00b558d74262b5f929ee8cc7e73a"
checksum = "a258e46cdc063eb8519c00b9fc845fc47bcfca4130e2f08e88665ceda8474245"
dependencies = [
"errno-dragonfly",
"libc",
"windows-sys 0.48.0",
]
[[package]]
name = "errno-dragonfly"
version = "0.1.2"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "aa68f1b12764fab894d2755d2518754e71b4fd80ecfb822714a1206c2aab39bf"
dependencies = [
"cc",
"libc",
"windows-sys 0.52.0",
]
[[package]]
name = "error-code"
version = "2.3.1"
version = "3.0.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "64f18991e7bf11e7ffee451b5318b5c1a73c52d0d0ada6e5a3017c8c1ced6a21"
dependencies = [
"libc",
"str-buf",
]
checksum = "281e452d3bad4005426416cdba5ccfd4f5c1280e10099e21db27f7c1c28347fc"
[[package]]
name = "exitcode"
@@ -769,13 +752,13 @@ checksum = "de853764b47027c2e862a995c34978ffa63c1501f2e15f987ba11bd4f9bba193"
[[package]]
name = "fd-lock"
version = "3.0.12"
version = "4.0.2"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "39ae6b3d9530211fb3b12a95374b8b0823be812f53d09e18c5675c0146b09642"
checksum = "7e5768da2206272c81ef0b5e951a41862938a6070da63bcea197899942d3b947"
dependencies = [
"cfg-if",
"rustix",
"windows-sys 0.48.0",
"windows-sys 0.52.0",
]
[[package]]
@@ -939,12 +922,6 @@ dependencies = [
"libc",
]
[[package]]
name = "hermit-abi"
version = "0.3.1"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "fed44880c466736ef9a5c5b5facefb5ed0785676d0c02d612db14e54f0d84286"
[[package]]
name = "hex"
version = "0.4.3"
@@ -957,6 +934,15 @@ version = "0.2.1"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "dfa686283ad6dd069f105e5ab091b04c62850d3e4cf5d67debad1933f55023df"
[[package]]
name = "home"
version = "0.5.9"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "e3d1354bf6b7235cb4a0576c2619fd4ed18183f689b12b006a0ee7329eeff9a5"
dependencies = [
"windows-sys 0.52.0",
]
[[package]]
name = "iana-time-zone"
version = "0.1.53"
@@ -1004,17 +990,6 @@ dependencies = [
"yaml-rust",
]
[[package]]
name = "io-lifetimes"
version = "1.0.10"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "9c66c74d2ae7e79a5a8f7ac924adbe38ee42a859c6539ad869eb51f0b52dc220"
dependencies = [
"hermit-abi 0.3.1",
"libc",
"windows-sys 0.48.0",
]
[[package]]
name = "is-macro"
version = "0.3.0"
@@ -1183,9 +1158,9 @@ checksum = "0717cef1bc8b636c6e1c1bbdefc09e6322da8a9321966e8928ef80d20f7f770f"
[[package]]
name = "linux-raw-sys"
version = "0.3.1"
version = "0.4.12"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "d59d8c75012853d2e872fb56bc8a2e53718e2cafe1a4c823143141c6d90c322f"
checksum = "c4cd1a83af159aa67994778be9070f0ae1bd732942279cabb14f86f986a21456"
[[package]]
name = "lock_api"
@@ -1217,9 +1192,9 @@ dependencies = [
[[package]]
name = "mac_address"
version = "1.1.4"
version = "1.1.5"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "b238e3235c8382b7653c6408ed1b08dd379bdb9fdf990fb0bbae3db2cc0ae963"
checksum = "4863ee94f19ed315bf3bc00299338d857d4b5bc856af375cc97d237382ad3856"
dependencies = [
"nix 0.23.2",
"winapi",
@@ -1344,6 +1319,15 @@ dependencies = [
"autocfg",
]
[[package]]
name = "memoffset"
version = "0.9.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "5a634b1c61a95585bd15607c6ab0c4e5b226e695ff2800ba0cdccddf208c406c"
dependencies = [
"autocfg",
]
[[package]]
name = "miniz_oxide"
version = "0.6.2"
@@ -1386,16 +1370,14 @@ dependencies = [
[[package]]
name = "nix"
version = "0.26.2"
version = "0.27.1"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "bfdda3d196821d6af13126e40375cdf7da646a96114af134d5f417a9a1dc8e1a"
checksum = "2eb04e9c688eff1c89d72b407f168cf79bb9e867a9d3323ed6c01519eb9cc053"
dependencies = [
"bitflags 1.3.2",
"bitflags 2.4.0",
"cfg-if",
"libc",
"memoffset 0.7.1",
"pin-utils",
"static_assertions",
"memoffset 0.9.0",
]
[[package]]
@@ -1615,12 +1597,6 @@ dependencies = [
"siphasher",
]
[[package]]
name = "pin-utils"
version = "0.1.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "8b870d8c151b6f2fb93e84a13146138f05d02ed11c7e7c54f8826aaaf7c9f184"
[[package]]
name = "pkg-config"
version = "0.3.26"
@@ -1907,16 +1883,15 @@ dependencies = [
[[package]]
name = "rustix"
version = "0.37.11"
version = "0.38.28"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "85597d61f83914ddeba6a47b3b8ffe7365107221c2e557ed94426489fefb5f77"
checksum = "72e572a5e8ca657d7366229cdde4bd14c4eb5499a9573d4d366fe1b599daa316"
dependencies = [
"bitflags 1.3.2",
"bitflags 2.4.0",
"errno",
"io-lifetimes",
"libc",
"linux-raw-sys",
"windows-sys 0.48.0",
"windows-sys 0.52.0",
]
[[package]]
@@ -2176,7 +2151,7 @@ dependencies = [
"memchr",
"memmap2",
"mt19937",
"nix 0.26.2",
"nix 0.27.1",
"num-complex",
"num-integer",
"num-traits",
@@ -2245,7 +2220,7 @@ dependencies = [
"malachite-bigint",
"memchr",
"memoffset 0.6.5",
"nix 0.26.2",
"nix 0.27.1",
"num-complex",
"num-integer",
"num-traits",
@@ -2319,21 +2294,20 @@ checksum = "5583e89e108996506031660fe09baa5011b9dd0341b89029313006d1fb508d70"
[[package]]
name = "rustyline"
version = "11.0.0"
version = "13.0.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "5dfc8644681285d1fb67a467fb3021bfea306b99b4146b166a1fe3ada965eece"
checksum = "02a2d683a4ac90aeef5b1013933f6d977bd37d51ff3f4dad829d4931a7e6be86"
dependencies = [
"bitflags 1.3.2",
"bitflags 2.4.0",
"cfg-if",
"clipboard-win",
"dirs-next",
"fd-lock",
"home",
"libc",
"log",
"memchr",
"nix 0.26.2",
"nix 0.27.1",
"radix_trie",
"scopeguard",
"unicode-segmentation",
"unicode-width",
"utf8parse",
@@ -2493,12 +2467,12 @@ checksum = "a507befe795404456341dfab10cef66ead4c041f62b8b11bbb92bffe5d0953e0"
[[package]]
name = "socket2"
version = "0.4.7"
version = "0.5.5"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "02e2d2db9033d13a1567121ddd7a095ee144db4e1ca1b1bda3419bc0da294ebd"
checksum = "7b5fac59a5cb5dd637972e5fca70daf0523c9067fcdc4842f053dae04a18f8e9"
dependencies = [
"libc",
"winapi",
"windows-sys 0.48.0",
]
[[package]]
@@ -2518,12 +2492,6 @@ version = "1.1.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "a2eb9349b6444b326872e140eb1cf5e7c522154d69e7a0ffb0fb81c06b37543f"
[[package]]
name = "str-buf"
version = "1.0.6"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "9e08d8363704e6c71fc928674353e6b7c23dcea9d82d7012c8faf2a3a025f8d0"
[[package]]
name = "strsim"
version = "0.8.0"

View File

@@ -58,7 +58,7 @@ itertools = "0.11.0"
is-macro = "0.3.0"
libc = "0.2.151"
log = "0.4.16"
nix = "0.26"
nix = { version = "0.27", features = ["fs", "user", "process", "term", "time", "signal", "ioctl", "socket", "sched", "zerocopy", "dir", "hostname", "net", "poll"] }
malachite-bigint = "0.2.0"
malachite-q = "0.4.4"
malachite-base = "0.4.4"
@@ -70,7 +70,7 @@ once_cell = "1.18"
parking_lot = "0.12.1"
paste = "1.0.7"
rand = "0.8.5"
rustyline = "11"
rustyline = "13"
serde = { version = "1.0.133", default-features = false }
schannel = "0.1.22"
static_assertions = "1.1"
@@ -152,5 +152,4 @@ lto = "thin"
[patch.crates-io]
# REDOX START, Uncomment when you want to compile/check with redoxer
# nix = { git = "https://github.com/coolreader18/nix", branch = "0.26.2-redox" }
# REDOX END

View File

@@ -94,8 +94,8 @@ termios = "0.3.3"
[target.'cfg(not(target_arch = "wasm32"))'.dependencies]
gethostname = "0.2.3"
socket2 = { version = "0.4.4", features = ["all"] }
dns-lookup = "1.0.8"
socket2 = { version = "0.5.4", features = ["all"] }
dns-lookup = "2"
openssl = { version = "0.10.62", optional = true }
openssl-sys = { version = "0.9.80", optional = true }
openssl-probe = { version = "0.1.5", optional = true }
@@ -112,7 +112,7 @@ widestring = { workspace = true }
[target.'cfg(windows)'.dependencies.winapi]
version = "0.3.9"
features = [
"winsock2", "ifdef", "netioapi",
"winsock2", "ifdef", "netioapi", "ws2tcpip",
]
[target.'cfg(windows)'.dependencies.windows-sys]

View File

@@ -21,7 +21,7 @@ mod _socket {
};
use crossbeam_utils::atomic::AtomicCell;
use num_traits::ToPrimitive;
use socket2::{Domain, Protocol, Socket, Type as SocketType};
use socket2::Socket;
use std::{
ffi,
io::{self, Read, Write},
@@ -1117,11 +1117,7 @@ mod _socket {
if proto == -1 {
proto = 0
}
sock = Socket::new(
Domain::from(family),
SocketType::from(socket_kind),
Some(Protocol::from(proto)),
)?;
sock = Socket::new(family.into(), socket_kind.into(), Some(proto.into()))?;
};
Ok(zelf.init_inner(family, socket_kind, proto, sock)?)
}
@@ -1195,7 +1191,7 @@ mod _socket {
let mut buf = buf.borrow_buf_mut();
let buf = &mut *buf;
self.sock_op(vm, SelectKind::Read, || {
sock.recv_with_flags(slice_as_uninit(buf), flags)
sock.recv_with_flags(unsafe { slice_as_uninit(buf) }, flags)
})
}
@@ -1245,7 +1241,7 @@ mod _socket {
let flags = flags.unwrap_or(0);
let sock = self.sock()?;
let (n, addr) = self.sock_op(vm, SelectKind::Read, || {
sock.recv_from_with_flags(slice_as_uninit(buf), flags)
sock.recv_from_with_flags(unsafe { slice_as_uninit(buf) }, flags)
})?;
Ok((n, get_addr_tuple(&addr, vm)))
}
@@ -1581,16 +1577,13 @@ mod _socket {
return get_ip_addr_tuple(&addr, vm);
}
#[cfg(unix)]
use nix::sys::socket::{SockaddrLike, UnixAddr};
#[cfg(unix)]
if let Some(unix_addr) = unsafe { UnixAddr::from_raw(addr.as_ptr(), Some(addr.len())) } {
if addr.is_unix() {
use std::os::unix::ffi::OsStrExt;
#[cfg(any(target_os = "android", target_os = "linux"))]
if let Some(abstractpath) = unix_addr.as_abstract() {
if let Some(abstractpath) = addr.as_abstract_namespace() {
return vm.ctx.new_bytes([b"\0", abstractpath].concat()).into();
}
// necessary on macos
let path = ffi::OsStr::as_bytes(unix_addr.path().unwrap_or("".as_ref()).as_ref());
let path = ffi::OsStr::as_bytes(addr.as_pathname().unwrap_or("".as_ref()).as_ref());
let nul_pos = memchr::memchr(b'\0', path).unwrap_or(path.len());
let path = ffi::OsStr::from_bytes(&path[..nul_pos]);
return vm.ctx.new_str(path.to_string_lossy()).into();
@@ -1678,8 +1671,8 @@ mod _socket {
Ok(s.to_string_lossy().into_owned())
}
fn slice_as_uninit<T>(v: &mut [T]) -> &mut [MaybeUninit<T>] {
unsafe { &mut *(v as *mut [T] as *mut [MaybeUninit<T>]) }
unsafe fn slice_as_uninit<T>(v: &mut [T]) -> &mut [MaybeUninit<T>] {
&mut *(v as *mut [T] as *mut [MaybeUninit<T>])
}
enum IoOrPyException {
@@ -1733,7 +1726,6 @@ mod _socket {
kind: SelectKind,
interval: Option<Duration>,
) -> io::Result<bool> {
let fd = sock_fileno(sock);
#[cfg(unix)]
{
use nix::poll::*;
@@ -1742,7 +1734,7 @@ mod _socket {
SelectKind::Write => PollFlags::POLLOUT,
SelectKind::Connect => PollFlags::POLLOUT | PollFlags::POLLERR,
};
let mut pollfd = [PollFd::new(fd, events)];
let mut pollfd = [PollFd::new(sock, events)];
let timeout = match interval {
Some(d) => d.as_millis() as _,
None => -1,
@@ -1754,6 +1746,8 @@ mod _socket {
{
use crate::select;
let fd = sock_fileno(sock);
let mut reads = select::FdSet::new();
let mut writes = select::FdSet::new();
let mut errs = select::FdSet::new();

View File

@@ -41,7 +41,7 @@ pub mod module {
env,
ffi::{CStr, CString},
fs, io,
os::unix::io::RawFd,
os::fd::{AsRawFd, BorrowedFd, IntoRawFd, OwnedFd, RawFd},
};
use strum_macros::{EnumIter, EnumString};
@@ -162,6 +162,24 @@ pub mod module {
#[pyattr]
const _COPYFILE_DATA: u32 = 1 << 3;
impl TryFromObject for BorrowedFd<'_> {
fn try_from_object(vm: &VirtualMachine, obj: PyObjectRef) -> PyResult<Self> {
let fd = i32::try_from_object(vm, obj)?;
if fd == -1 {
return Err(io::Error::from_raw_os_error(libc::EBADF).into_pyexception(vm));
}
// SAFETY: none, really. but, python's os api of passing around file descriptors
// everywhere isn't really io-safe anyway, so, this is passed to the user.
Ok(unsafe { BorrowedFd::borrow_raw(fd) })
}
}
impl ToPyObject for OwnedFd {
fn to_pyobject(self, vm: &VirtualMachine) -> PyObjectRef {
self.into_raw_fd().to_pyobject(vm)
}
}
// Flags for os_access
bitflags! {
#[derive(Copy, Clone, Debug, PartialEq)]
@@ -1196,10 +1214,11 @@ pub mod module {
#[cfg(not(target_os = "redox"))]
#[pyfunction]
fn openpty(vm: &VirtualMachine) -> PyResult<(i32, i32)> {
fn openpty(vm: &VirtualMachine) -> PyResult<(OwnedFd, OwnedFd)> {
let r = nix::pty::openpty(None, None).map_err(|err| err.into_pyexception(vm))?;
for fd in &[r.master, r.slave] {
super::raw_set_inheritable(*fd, false).map_err(|e| e.into_pyexception(vm))?;
for fd in [&r.master, &r.slave] {
super::raw_set_inheritable(fd.as_raw_fd(), false)
.map_err(|e| e.into_pyexception(vm))?;
}
Ok((r.master, r.slave))
}
@@ -2013,9 +2032,9 @@ pub mod module {
#[cfg(any(target_os = "linux", target_os = "macos"))]
#[derive(FromArgs)]
struct SendFileArgs {
out_fd: i32,
in_fd: i32,
struct SendFileArgs<'fd> {
out_fd: BorrowedFd<'fd>,
in_fd: BorrowedFd<'fd>,
offset: crate::common::crt_fd::Offset,
count: i64,
#[cfg(target_os = "macos")]
@@ -2033,7 +2052,7 @@ pub mod module {
#[cfg(target_os = "linux")]
#[pyfunction]
fn sendfile(args: SendFileArgs, vm: &VirtualMachine) -> PyResult {
fn sendfile(args: SendFileArgs<'_>, vm: &VirtualMachine) -> PyResult {
let mut file_offset = args.offset;
let res = nix::sys::sendfile::sendfile(
@@ -2062,7 +2081,7 @@ pub mod module {
#[cfg(target_os = "macos")]
#[pyfunction]
fn sendfile(args: SendFileArgs, vm: &VirtualMachine) -> PyResult {
fn sendfile(args: SendFileArgs<'_>, vm: &VirtualMachine) -> PyResult {
let headers = _extract_vec_bytes(args.headers, vm)?;
let count = headers
.as_ref()