Age | Commit message (Collapse) | Author |
|
|
|
1886: Update use of libc::timespec to prepare for future libc version r=asomers a=wesleywiser
In a future release of the `libc` crate, `libc::timespec` will contain private padding fields on `*-linux-musl` targets and so the struct will no longer be able to be created using the literal initialization syntax.
Update places where `libc::timespec` is created to first zero initialize the value and then update the `tv_sec` and `tv_nsec` fields manually. Many of these places are in `const fn`s so a helper function `zero_init_timespec()` is introduced to help with this as `std::mem::MaybeUninit::zeroed()` is not a `const` function.
Some matches on `libc::timespec` are also updated to include a trailing `..` pattern which works when `libc::timespec` has additional, private fields as well as when it does not (like for
`x86_64-unknown-linux-gnu`).
See also https://github.com/rust-lang/libc/pull/2088
Co-authored-by: Wesley Wiser <wesleywiser@microsoft.com>
|
|
In a future release of the `libc` crate, `libc::timespec` will contain
private padding fields on `*-linux-musl` targets and so the struct will
no longer be able to be created using the literal initialization syntax.
Update places where `libc::timespec` is created to first zero initialize
the value and then update the `tv_sec` and `tv_nsec` fields manually.
Many of these places are in `const fn`s so a helper function
`zero_init_timespec()` is introduced to help with this as
`std::mem::MaybeUninit::zeroed()` is not a `const` function.
Some matches on `libc::timespec` are also updated to include a trailing
`..` pattern which works when `libc::timespec` has additional, private
fields as well as when it does not (like for
`x86_64-unknown-linux-gnu`).
|
|
1865: Add IpMtu sockopt r=asomers a=ShadowJonathan
Resolves https://github.com/nix-rust/nix/issues/1864
Co-authored-by: Jonathan de Jong <jonathandejong02@gmail.com>
|
|
1883: Clippy cleanup with the latest nightly. r=rtzoeller a=asomers
Co-authored-by: Alan Somers <asomers@gmail.com>
|
|
|
|
|
|
1848: SockProtocol::Raw = libc::IPPROTO_RAW for raw sockets r=asomers a=StackOverflowExcept1on
Hey, I wanna to make call like `socket(af_type, SOCK_RAW, IPPROTO_RAW)` but currently there is no way to do it with rust
https://github.com/rickettm/SendIP/blob/aad12a001157489ab9053c8665e09aec24a2ff6d/sendip.c#L143
Update: Feel free to add `#[cfg]` attribute if I made mistakes that might cause errors on some platforms
Co-authored-by: StackOverflowExcept1on <109800286+StackOverflowExcept1on@users.noreply.github.com>
|
|
1880: Use the new UnixAddr::new_unnamed in the unit tests r=rtzoeller a=asomers
Use it in the from_sockaddr_un_abstract_unnamed test. That test and this method were introduced by PRs #1871 and #1857, which crossed each other.
Co-authored-by: Alan Somers <asomers@gmail.com>
|
|
Use it in the from_sockaddr_un_abstract_unnamed test. That test and
this method were introduced by PRs #1871 and #1857, which crossed each
other.
|
|
|
|
1857: Add better support for unnamed unix socket addrs r=asomers a=stevenengler
This adds the following 2 functions/methods: `UnixAddr::new_unnamed` and `UnixAddr::is_unnamed`.
Closes #1585
unix(7) on Linux:
> unnamed: A stream socket that has not been bound to a pathname using bind(2) has no name. Likewise, the two sockets created by socketpair(2) are unnamed. When the address of an unnamed socket is returned, its length is `sizeof(sa_family_t)`, and `sun_path` should not be inspected.
**Edit:** This currently isn't working on BSD, but I see why. Will fix it shortly.
Co-authored-by: Steven Engler <opara@cs.georgetown.edu>
|
|
1871: Fix using SockaddrStorage to store Unix domain addresses on Linux r=rtzoeller a=asomers
Since it has variable length, the user of a sockaddr_un must keep track of its true length. On the BSDs, this is handled by the builtin sun_len field. But on Linux-like operating systems it isn't. Fix this bug by explicitly tracking it for SockaddrStorage just like we already do for UnixAddr.
Fixes #1866
Co-authored-by: Alan Somers <asomers@gmail.com>
|
|
Removed test assertion
|
|
Changelog
|
|
Make Linux-only
|
|
|
|
1873: mmap non-zero length r=asomers a=JonathanWoollett-Light
When calling [`mmap`](https://man7.org/linux/man-pages/man2/mmap.2.html) the passed length needs to be greater than zero, else an error is returned:
> EINVAL (since Linux 2.6.12) length was 0.
By specifying the argument as `std::num::NonZeroUsize` we eliminate this error case.
Co-authored-by: Jonathan <jonathanwoollettlight@gmail.com>
|
|
|
|
1853: Adds IP_TOS, IPV6_TCLASS and SO_PRIORITY sockopt wrappers for Linux r=asomers a=mzachar
Added socket option wrappers for DiffServ related parameters on Linux
Co-authored-by: mzachar <mzachar@users.noreply.github.com>
|
|
1870: mmap addr r=asomers a=JonathanWoollett-Light
Uses `Some<size_t>` instead of `*mut c_void` for the `addr` passed to [`sys::mman::mmap`](https://docs.rs/nix/latest/nix/sys/mman/fn.mmap.html).
In this instance we are not usefully passing a pointer, it will never be dereferenced. We are passing a location which represents where to attach the shared memory to.
In this case `size_t` better represents an address and not a pointer, and `Option<size_t>` better represents an optional argument than `NULLPTR`.
In C since there is no optional type this is a pointer as this allows it be null which is an alias here for `None`.
Co-authored-by: Jonathan <jonathanwoollettlight@gmail.com>
|
|
|
|
|
|
1872: Misc internal optimizations r=rtzoeller a=asomers
* Make ipv4addr_to_libc const
* Use mem::transmute in ipv4addr_to_libc and ipv6addr_to_libc
Fixes #1687
Fixes #1688
Co-authored-by: Alan Somers <asomers@gmail.com>
|
|
1869: Mode flag documentation r=asomers a=JonathanWoollett-Light
Adds rustdoc to the `sys::stat::Mode` bit flags.
Co-authored-by: Jonathan <jonathanwoollettlight@gmail.com>
|
|
* Make ipv4addr_to_libc const
* Use mem::transmute in ipv4addr_to_libc and ipv6addr_to_libc
Fixes #1687
Fixes #1688
|
|
Since it has variable length, the user of a sockaddr_un must keep track
of its true length. On the BSDs, this is handled by the builtin sun_len
field. But on Linux-like operating systems it isn't. Fix this bug by
explicitly tracking it for SockaddrStorage just like we already do for
UnixAddr.
Fixes #1866
|
|
|
|
1860: Nuke deprecated Errno flags r=rtzoeller a=SUPERCILEX
`@rtzoeller` It's been quite a few releases since these have been deprecated, more bloat removal.
Co-authored-by: Alex Saveau <saveau.alexandre@gmail.com>
|
|
Signed-off-by: Alex Saveau <saveau.alexandre@gmail.com>
|
|
1854: Reformat everything r=rtzoeller a=SUPERCILEX
Unfortunately, https://github.com/nix-rust/nix/pull/1748 didn't do the trick because of https://github.com/rust-lang/rustfmt/issues/3253. This PR fully enforces global formatting.
Closes https://github.com/nix-rust/nix/issues/770
Co-authored-by: Alex Saveau <saveau.alexandre@gmail.com>
|
|
Signed-off-by: Alex Saveau <saveau.alexandre@gmail.com>
|
|
Signed-off-by: Alex Saveau <saveau.alexandre@gmail.com>
|
|
1849: Add a Statfs::flags method r=rtzoeller a=asomers
It returns the mount flags on the BSDs. On Linux, it returns a slightly different set of flags.
Co-authored-by: Alan Somers <asomers@gmail.com>
|
|
It returns the mount flags on the BSDs. On Linux, it returns a slightly
different set of flags.
|
|
|
|
And fstatfs64 instead of fstatfs.
|
|
https://github.com/rust-lang/libc/pull/2963
|
|
1744: reimplement sendmmsg/recvmmsg with better API r=rtzoeller a=pacak
Motivation is explained in #1602, new version allows to receive data without performing allocations inside the receive loop and to use received data without extra copying.
This pull request contains a breaking change to API `recvmmsg` (obviously) and also affects `recvmsg` - new version does not set length of control message buffer if one is passed. Later change can be avoided with a bit more copy-paste.
Fixes #1602
Co-authored-by: Michael Baikov <manpacket@gmail.com>
|
|
|
|
See https://github.com/nix-rust/nix/pull/1744 for more details
|
|
New implementation performs no allocations after all the necessary
structures are created, removes potentially unsound code that
was used by the old version (see below) and adds a bit more
documentation about bugs in how timeout is actually handled
```
let timeout = if let Some(mut t) = timeout {
t.as_mut() as *mut libc::timespec
} else {
ptr::null_mut()
};
```
|
|
|
|
We'll be using that to reinitialize buffers later
|
|
This is already an unsafe function, dealing with pointers directly
does not make it much more unsafe but simplifies lifetimes later on
and similar to a previous commit allows to alocate a single buffer
to store all the control messages
|
|
CMSG_FIRSTHDR/CMSG_NEXTHDR operate in terms of pointers contained
inside msghdr structure, vector capacity doesn't matter for them.
This would change external behavior of recvmsg/recvmmsg in a sense
that buffer passed to store controll messages won't have it's length
updated but intended way to receive control messages is with cmsgs
iterator on `RecvMsg` which would still work.
This change is required to allow using a single vector to store
control messages from multiple packets
|
|
1743: add XFS_SUPER_NUMBER to nix::sys::statfs r=rtzoeller a=MrCroxx
Close #1742 .
Co-authored-by: MrCroxx <mrcroxx@outlook.com>
|
|
|
|
1842: add eaccess on freebsd, dragonfly and linux r=rtzoeller a=SteveLauC
#### man pages
* [FreeBSD](https://www.freebsd.org/cgi/man.cgi?query=eaccess&sektion=2&n=1)
* [DragonFly](https://man.dragonflybsd.org/?command=access§ion=2)
* [Linux](https://man7.org/linux/man-pages/man3/euidaccess.3.html)
#### difference between `eaccess` and `access/faccessat`
IMHO, `eaccess` uses effective identifiers to perform the permission check while `access/faccessat` use real IDs.
Fixes #1373
Co-authored-by: Steve Lau <stevelauc@outlook.com>
|
|
1846: fix '<newline>' being interpreted as html r=asomers a=rtzoeller
This is breaking nightly.
Co-authored-by: Ryan Zoeller <rtzoeller@rtzoeller.com>
|