1603: uclibc support r=rtzoeller a=skrap
uclibc is a libc alternative (peer to glibc and musl) which is used in low-resource embedded linux applications.
It's supported in rust as the `target_env` of several tier 3 targets, but `nix` currently doesn't build. This patch provides a few customizations to get uclibc building.
To test:
* Get nightly rust
* Follow directions for getting a cross toolchain and env setup here: https://github.com/rust-lang/rust/blob/master/src/doc/rustc/src/platform-support/armv7-unknown-linux-uclibceabihf.md
Thanks for your consideration!
Co-authored-by: Jonah Petri <jonah@petri.us>
1642: InetAddr::from_std should set sin_len/sin6_len on the BSDs r=asomers a=rtzoeller
Resolves#1246.
Co-authored-by: Ryan Zoeller <rtzoeller@rtzoeller.com>
1644: Make memoffset dependency optional r=asomers a=rtzoeller
Only the socket feature depends on memoffset. Allow clients to skip pulling memoffset in as a dependency if they don't need it.
Co-authored-by: Ryan Zoeller <rtzoeller@rtzoeller.com>
1639: Fix Clippy warnings on FreeBSD with the latest nightly r=rtzoeller a=asomers
* Better type safety for mqueue
* Suppress clippy::not_unsafe_ptr_arg_deref warnings in ptrace on BSD
Co-authored-by: Alan Somers <asomers@gmail.com>
Technically these functions don't violate Rust's safety rules, because
libc::ptrace doesn't dereference those pointer args. Instead, it passes
them directly to the kernel.
On some platforms, mqd_t is a pointer. That means code like the below
can trigger a segfault. Fix it by defining a Newtype around mqd_t that
prevents use-after-free and dangling pointer scenarios.
```rust
fn invalid_mqd_t() {
let mqd: libc::mqd_t = std::ptr::null_mut();
mq_close(mqd).unwrap();
}
```
Also, get test coverage for mqueue in CI on FreeBSD.
1635: Remove EventFlag::EV_SYSFLAG r=rtzoeller a=rtzoeller
It is not stable across OpenBSD versions and is reserved by the system on FreeBSD and NetBSD.
This should fix the nix build for OpenBSD, which is failing due to https://github.com/rust-lang/libc/pull/2596. Bump the libc dependency to uptake that change.
Co-authored-by: Ryan Zoeller <rtzoeller@rtzoeller.com>
1630: Change port used by test_txtime to avoid conflict r=asomers a=rtzoeller
The socket tests request specific ports, and `test_timestamping` and `test_txtime` are currently conflicting in the port they request.
This leads to the second of the tests failing with `EADDRINUSE` when run locally.
Co-authored-by: Ryan Zoeller <rtzoeller@rtzoeller.com>
1615: Add sendfile(2) for DragonFly r=rtzoeller a=rtzoeller
The code is copied from the Mac OS and FreeBSD implementations.
Co-authored-by: Ryan Zoeller <rtzoeller@rtzoeller.com>
1625: Correct MAP_FIXED documentation for NetBSD r=rtzoeller a=rtzoeller
The previous documentation described the default behavior, rather than the behavior when the flag was set.
Also fix a test which is failing due to passing this flag erroneously.
Co-authored-by: Ryan Zoeller <rtzoeller@rtzoeller.com>
The previous documentation described the default behavior, rather than
the behavior when the flag was set.
Also fix a test which is failing due to passing this flag erroneously.
1624: Fix mq tests on NetBSD and DragonFly r=asomers a=rtzoeller
NetBSD (and DragonFly, which borrows its implementation) include additional flags beyond O_NONBLOCK in MqAttr, such as the flags passed to mq_open(). Modify the mq tests to validate _at least_ the expected flags are set, but don't require strict equality on these platforms.
Verified these tests pass on DragonFly and NetBSD locally.
Co-authored-by: Ryan Zoeller <rtzoeller@rtzoeller.com>
1626: Fix intermittency in test_timer::alarm_fires r=rtzoeller a=asomers
The test was disabling the signal handler before disabling the timer.
Fix intermittent failures but reversing the cleanup order.
Also, speed up the timer to make the test suite complete faster.
Co-authored-by: Alan Somers <asomers@gmail.com>
The test was disabling the signal handler before disabling the timer.
Fix intermittent failures by:
* Reversing the cleanup order.
* Sleeping for a while before removing the signal handler, since POSIX
does not guarantee that timer_delete will clear pending signals.
Also, speed up the timer to make the test suite complete faster.
1622: Introduce `timer_*` support r=asomers a=blt
This commit adds support for the signal timer mechanism in POSIX, the mirror to timerfd on Linux. I wasn't _quite_ sure of how to fit into the project organization but hopefully this patch isn't too far off.
Resolves#1424
Signed-off-by: Brian L. Troutwine <brian@troutwine.us>
1623: Remove cc dependency on DragonFly r=asomers a=rtzoeller
f5ee22db48 removed the need for this dependency.
Co-authored-by: Brian L. Troutwine <brian@troutwine.us>
Co-authored-by: Ryan Zoeller <rtzoeller@rtzoeller.com>
1618: Refactor UnixAddr r=asomers a=asomers
* Within UnixAddr, replace the path_len variable (length of the sun_path
field) with sun_len (length of the whole structure). This is more
similar to how other sockaddr types work, and it's the same way that the
BSDs use the sun_len field.
Also, don't require that sun_path be nul-terminated. The OS doesn't
require it.
* On BSD-derived operating systems, struct sockaddr has a sa_len field
that holds the length of the structure. UnixAddr's path_len field is
redundant. Remove path_len on BSD-derived OSes, retaining it only for
Illumos and Linux-based OSes.
Co-authored-by: Alan Somers <asomers@gmail.com>
This commit adds support for the signal timer mechanism in POSIX, the
mirror to timerfd on Linux.
Resolves#1424
Signed-off-by: Brian L. Troutwine <brian@troutwine.us>
On BSD-derived operating systems, struct sockaddr has a sa_len field
that holds the length of the structure. UnixAddr's path_len field is
redundant. Remove path_len on BSD-derived OSes, retaining it only for
Illumos and Linux-based OSes.
Also, ensure that two UnixAddrs compare equal if they differ only by the
presence of a trailing NUL. On Linux, syscalls like getsockname add a
trailing NUL to the sockaddr they return, even if no NUL was present on
the sockaddr originally passed to the kernel via a syscall like bind,
and even though the docs explicitly say that any NUL passed to bind is
not considered to be part of the address. Work around this bug by
stripping it in UnixAddrKind::get(), so that at least two UnixAddrs will
compare identical even if they differ in the presence of a trailing NUL.
1564: Add support for the SO_TXTIME sockopt and SCM_TXTIME control message r=asomers a=ghedo
Co-authored-by: Alessandro Ghedini <alessandro@cloudflare.com>
1619: Added getters for the MqAttr struct r=rtzoeller a=fpagliughi
With the existing code, if you call `mq_getattr()`, there does not appear to be a way to get any of the attributes from the returned `MqAttr` struct, other than the flags. This adds getter functions to retrieve the size parameters of the queue, and the current number of messages in the queue.
Co-authored-by: fpagliughi <fpagliughi@mindspring.com>
1596: Add NetBSD configuration for supported process resources r=asomers a=schctl
In addition to existing resources, NetBSD supports `RLIMIT_MEMLOCK`, `RLIMIT_NPROC` and `RLIMIT_RSS`.
https://man.netbsd.org/setrlimit.2
`RLIMIT_AS` is also supported, but it looks like it was added [after version 5.0](https://mail-index.netbsd.org/tech-kern/2009/03/28/msg004702.html), so I'm not sure if that should be enabled.
1621: Add posix_fallocate on DragonFly r=asomers a=rtzoeller
Enable the existing `posix_fallocate()` tests as they are passing locally.
Co-authored-by: Sachin Cherian <sachinctl@protonmail.com>
Co-authored-by: Ryan Zoeller <rtzoeller@rtzoeller.com>
1547: feat: Add glibc::SOF_TIMESTAMPING_* support r=asomers a=pacak
Support for kernel and hardware receive timestamps
Co-authored-by: Michael Baikov <manpacket@gmail.com>
1616: Disable mknod and mknodat tests on DragonFly r=asomers a=rtzoeller
Like FreeBSD, DragonFly does not support creating regular files (i.e. `S_IFREG`) with `mknod` or `mknodat`. These tests should be disabled as they always fail.
There are still a few other failing tests on DragonFly, but it is unclear to me if they are due to faulty/inapplicable test logic or a bug in DragonFly.
Co-authored-by: Ryan Zoeller <rtzoeller@rtzoeller.com>
1614: Improve the sockaddr interface: r=asomers a=asomers
* All sockaddr newtypes should be repr(transparent)
* All sockaddr newtypes should be opaque, so the user can't do something
like change the sa_family field in a way that violates invariants.
This is a prerequisite for #1544.
Co-authored-by: Alan Somers <asomers@gmail.com>